CoWork 文档
Skills 与插件

插件 Skill

插件包内自带 Skill 的机制:扫描、优先级、启用撤回与市场展示。

插件可以在包里自带 Skill,随插件一起分发。这一页讲清「它什么时候生效、同名谁赢、市场页展示什么」。

生效条件

客户端管理器向 Skill 扫描器提供已启用插件的 Skill 目录(绝对路径),判定是逐条过的筛子:

  • 插件必须启用:处于禁用、装载错误(error)或待批准(pending-approval)状态的插件,一个目录都不会贡献——那正是用户还没点同意的东西。
  • 禁用或卸载插件后,它带来的 Skill 下一轮扫描就不在了:扫描器每次装配前都重新取目录清单,不做缓存。

优先级

扫描顺序即优先级,后进的覆盖先进的

  1. 插件(最低——插件带来的是合理默认,用户自己写的永远说了算)
  2. 全局 ~/.next-cowork/skills/
  3. 项目 .next-cowork/skills/(最高)

反过来的话,用户在项目里放一条同名覆盖会毫无反应,而界面上两条都在。

两个插件贡献同名:按插件 id 排序先来的赢,并在诊断里写明「插件 A 和 B 都提供了名为 X 的 Skill,这一条已跳过」——结果在每台机器上一致,不取决于安装顺序。

包内布局与清单声明

my-plugin/
├── package.json          # contributes.skills: [{ "path": "skills/my-skill" }]
└── skills/
    └── my-skill/
        └── SKILL.md
  • 路径必须是 skills/<name> 两段:打包只会带上 skills/ 目录,写在别处的 Skill 不会出现在包里。
  • <name> 必须匹配 ^[a-z0-9][a-z0-9-]{0,63}$——它原样作为 Skill 名字交给模型。
  • 名字与描述只来自 SKILL.md 的 frontmatter,清单里不重复声明(声明两遍必然分叉)。
  • frontmatter 缺 description整条作废:没有描述,模型无从判断什么时候该用它。
  • 目录安装(开发时的「装本地目录」)里指向包外的符号链接会被拒绝——SKILL.md 的正文是要进模型上下文的。

完整字段约束见 Skills 的「SKILL.md 的规则」。

服务端校验一致

市场上传时,服务端会逐条重查同一套规则(路径形状、目录名、SKILL.md 存在且 ≤ 256 KiB、frontmatter 有 description、包内不重名)。本地 nextcowork-plugin package 与其逐条一致——校验不通过的包在打包当场就炸,不会等上传才被告知。

市场展示

插件详情页会列出包自带的 Skill 名字(发布时服务端从 skills/<name>/SKILL.md 的 frontmatter 逐个读出)。所以上架前请把 description 写好:它是市场卡片上用户判断「这条 Skill 干什么」的唯一文字,也是客户端里模型判断「什么时候调它」的唯一依据。

本页内容