Skip to content

About

不会写代码也能管技能:OpenCode 技能管理面板(技能 / 分类 / 全局与项目两层,逐个开关)

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

Repository files navigation

技能管理器 · opencode-skill-manager

给不写代码的人用的 OpenCode 技能开关面板。 装上之后,在对话框里打 /技能,右边会开出一个面板: 技能逐个开关、按分类整组开关、全局和当前项目两层分开管。点一下就是一次开关,不用去改配置文件。

打包成一个 npm 包 / 一个插件文件夹,装一次就行。


它管的是什么

先对齐三个词,面板上就是这三个粒度:

词 意思 例子
技能(skill) 一个能用的能力 code-review(让人挑代码毛病)
分类(category) 一组技能 「前端」「测试」「数据库」
技能包(pack) 磁盘上按目录成包的一整套技能 frontend 包里有一批前端技能

还有两个「层」:

  • 全局层 —— <配置目录>/skills/、<配置目录>/skill-packs/<包名>/,以及像 superpowers 那样装成 npm 包的技能。所有项目都能用。
  • 项目层 —— 当前项目里的 .opencode/skills/。只在这个项目里生效。

同名技能两层都有时,项目层赢,面板会给全局那份标一行「被项目层的同名技能覆盖」。


它能干什么

  1. 技能逐个开关 —— 点每行前面的开关。
  2. 整个分类一起开关 —— 分类标题上有个开关,点它就是整类开 / 整类关;半开半关时那个开关显示成中间态。
  3. 整层总闸 —— 面板顶部有「全局总闸」和「项目总闸」,一下关掉一整层。
  4. 全局 / 项目两层分开管 —— 面板上分两栏,互不影响。
  5. 新技能自动收编 —— 技能一落到磁盘上,下次打开面板它就已经在自己的分类里了。
  6. 分类能改名、合并、删除 —— 删掉的分类里,技能会回到「未分类」,不会凭空消失。
  7. 能撤销 —— 改名 / 合并 / 删除之后,右上角的「↺ 撤销上一步」会把上一步退回去。
  8. 跟 AI 说话也行 —— 说「关掉 mobile 包」「现在开了哪些包」,AI 会调用插件带的 skill_packs 工具。

怎么装(三条路,任选一条)

三条路装的是同一个插件,挑顺手的走。装完让它重新加载一次:重启 OpenCode 最省事 (有命令行的话,跑一次 opencode reload 也行)。

A. 丢文件夹(最稳,不用联网)

  1. 打开文件资源管理器,地址栏粘 %USERPROFILE%\.config\opencode 回车。 macOS / Linux 上是 ~/.config/opencode。

  2. 进 plugins 文件夹,把下载下来的这个仓库文件夹整个复制进去。装完长这样:

    .config/opencode/plugins/skill-manager/
    ├── index.ts
    ├── package.json
    └── lib/            ← panel.html 也在这里面
    

    目录名叫什么其实都行(插件 id 是插件自己声明的 skill-manager),叫 skill-manager 最好认。

  3. 重启 OpenCode。

命令行确认装上了:

opencode plugin list

B. 加一行(npm,暂时还没上架)

包还没发到 npm(先发的是源码)。所以现在跑下面这条会拿到 404 —— 先用 A 或 C; 等包上架了,这条就是最省事的办法。

让 AI 帮你跑这一条:

opencode plugin add opencode-skill-manager

宿主会自己从 npm 装好,并把这一行写进 opencode.jsonc 的 "plugins" 里。想手改也行 —— 在 "plugins" 数组里加一项:

"plugins": [
  "opencode-skill-manager",
],

然后重启。opencode plugin list 里应该能看到一行 skill-manager。

npm 拉不动(公司网络、镜像问题)?先试 npm config set registry https://registry.npmmirror.com,还不行就走 A 路。 如果 plugin list 里那一行显示的 id 是 -,说明宿主没拿到这个包(名字写错、或者还没装上)。

C. 让你的 AI 装

把下面这段整段复制给你的 AI 助手:

请帮我安装 opencode-skill-manager 插件,仓库地址是
https://github.com/yourstandby/opencode-skill-manager

这是给不写代码的人用的 OpenCode 技能管理面板:装上之后打字 /技能 能打开面板,
技能和分类都能逐个开关。装完请告诉我怎么打开它。

怎么用

  1. 在对话框里打 /技能(打 / 会出命令列表,中文命令也在里面)。
  2. 面板会开在右侧的审查区。这一步要你的模型能调浏览器工具 —— 插件会把面板网址交给它,让它去打开。 模型做不到的话,你会在对话里看到一行网址,自己粘到浏览器里打开也一样(面板就是个本机网页)。
  3. 点开关。点了就生效 —— 下一次 AI 动手时按新的开关走,不用重启。
  4. /packs 是老的技能包命令,不开面板也能用:
    • /packs → 打开面板
    • /packs mobile off → 关掉 mobile 包(on / off,写「开」「关」也行)
    • /packs off → 所有包全关

常见问题

改完什么时候生效? 立即。面板上点一下就是一次写入,不用改配置文件,也不用重启。

面板端口是多少? 面板标题栏里写着。从 4517 开始试,被占用就往上找,一直到 4527。

想恢复出厂设置? 删掉 <你的用户目录>/.local/share/opencode/skill-manager-state.json,重启 App。开关和分类回到默认(默认全开)。

不小心把分类删了或者合并错了? 点右上角的「↺ 撤销上一步」。

面板打开了但是空的 / 白屏? 先刷新。还不行就看 <你的用户目录>/.local/share/opencode/skill-manager-debug.log,最后几行会写它在干什么。

它会不会把我的东西传出去? 不会。它只做三件事:读磁盘上的技能文件、写上面那个状态文件、在 127.0.0.1 上开一个网页。 代码里没有任何对外的网络请求。


已知限制

  • /技能 要靠模型自己调浏览器工具去开那个网址。模型没有这个工具(或者不听话)时,面板不会自己弹出来 —— 对话里给了网址,手动打开是一样的。
  • 升级插件版本之后,已经开着的那个面板不会自动换成新代码(面板服务器会被复用,这一点是实测出来的)。 要让新版面板生效,重启一次 OpenCode。
  • 卸载插件之后,面板端口和后台对账不会立刻退场,重启 App 才算干净。
  • 同一台机器上所有项目共用一份状态文件;分类是按技能算的,不按项目分。所以全局层和项目层同名的技能, 会落在同一个格子里。
  • 自动分类是拿关键词猜的(描述里出现 react 就进「前端」这种)。猜错了可以改名或合并,也可以撤销。

开发

npm install     # 只为了拿到 @opencode/plugin(跑测试要用)
npm test        # 130 个测试,11 个文件,全绿
文件 干什么
index.ts 插件入口:注册 /技能、/packs 命令和 skill_packs 工具,起面板,跑「执法者」对账
lib/paths.mjs 路径推导:配置目录怎么算、面板 HTML 在哪儿
lib/scan.mjs 扫磁盘找技能(磁盘是真源,技能登记表只用来核对真相)
lib/classify.mjs 分类引擎:手工记录 → 关键词 → 落位(「未分类」)
lib/view.mjs 把扫描结果 + 登记表 + 状态合成面板要的那份数据(含真相校验)
lib/policy.mjs 判定该开还是该关;开关与分类改动的落盘
lib/permissions.mjs 解析用户的 permissions 规则,标出哪些技能被挡住
lib/state.mjs 状态文件读写 + 从老文件 skill-packs-state.json 迁移
lib/panel.mjs 本机 HTTP 面板的骨架(端口 4517–4527 + 三道安全闸门)
lib/panel.html 面板界面(浅色主题,单文件,无依赖)
docs/DESIGN.md 更硬的设计说明:每条设计决定、它的理由和实测证据(C1–C23)

两个给贡献者的坑:

  • 插件入口是 index.ts。OpenCode 桌面版的宿主是 Bun,直接吃 TS,所以这样发没问题; 但用纯 node 从 node_modules 里 import 它会报 ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING (node 不允许给 node_modules 里的文件剥类型)。从仓库内直接 import "../index.ts" 是好的, npm test 就是这么跑的。
  • 仓库钉死了 LF 行尾(.gitattributes),Windows 上别让它改成 CRLF。

License

MIT © 2026 yourstandby

About

不会写代码也能管技能:OpenCode 技能管理面板(技能 / 分类 / 全局与项目两层,逐个开关)

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages