3.3 校验与打包
写完不等于能用。发布前必须过两道关:校验(结构合不合规)和打包(变成可分发的 zip)。
一、校验:quick_validate.py
用法
python quick_validate.py "C:/Users/Administrator/.workbuddy/skills/my-skill"
输出 Skill is valid! 即通过;否则打印第一条错误原因并以非零码退出。
它到底检查了什么
| 检查项 | 规则 | 不通过时的提示 |
|---|---|---|
SKILL.md 是否存在 |
必须存在 | SKILL.md not found |
文件是否以 --- 开头 |
必须是 | No YAML frontmatter found |
| frontmatter 是否成对闭合 | 第二个 --- 必须存在 |
Invalid frontmatter format |
name 字段 |
必须存在 | Missing 'name' in frontmatter |
description 字段 |
必须存在 | Missing 'description' in frontmatter |
name 命名规范 |
匹配 ^[a-z0-9-]+$ |
Name 'X' should be hyphen-case … |
name 形态 |
不以 - 开头/结尾,无 -- |
Name 'X' cannot start/end with hyphen … |
description 内容 |
不能含 < 或 > |
Description cannot contain angle brackets … |
重要提醒:校验是「最低门槛」,不是「质量保证」
它只查结构与格式。以下问题它查不出来,要你自己保证:
- description 写得再好也过不了校验?不——写得再差(比如只写「一个工具」)也能通过。
- 目录名与
name不一致(校验只看name字段本身)。 - 正文写得含糊、没有硬规则。
- 引用的
scripts/文件根本不存在。 - 脚本缺依赖、路径写死、参数对不上。
所以有两份清单要用:机器校验清单(上面那张表)+ 人工质量清单(3.2 的自检清单)。
二、打包:package_skill.py
用法
python package_skill.py "C:/Users/Administrator/.workbuddy/skills/my-skill" ./dist
- 第一个参数:Skill 目录
- 第二个参数(可选):zip 输出目录,缺省为当前目录
它做了什么
- 先校验:内部调用
quick_validate;不通过直接退出,不产出 zip。 - 打包:以 Skill 目录名为 zip 名(
my-skill.zip),递归收集所有文件,保持目录结构。 - 保留相对层级:zip 内第一层就是 Skill 目录名,解压后是一个完整文件夹。
zip 内部结构长这样:
my-skill.zip
└── my-skill/
├── SKILL.md
├── scripts/
└── references/
这种「外面套一层同名目录」的结构能保证别人解压后直接得到一个合法 Skill 目录,而不是一堆散文件。分发时不要手动改这个结构。
三、常见报错速查表
| 报错 | 根因 | 修法 |
|---|---|---|
SKILL.md not found |
文件名写错(小写、拼错)或路径指错 | 重命名为精确的 SKILL.md |
No YAML frontmatter found |
文件第一行不是 --- |
首行必须是 ---,前面不能有空行/BOM |
Invalid frontmatter format |
缺第二个 --- |
补上闭合的 --- |
Missing 'name' |
字段名拼错或漏写 | 加 name: |
Name 'MySkill' should be hyphen-case |
有大写/下划线/中文 | 全小写 + 连字符 |
Name 'x' cannot start/end with hyphen |
首尾连字符或 -- |
去掉首尾连字符、合并连续连字符 |
Description cannot contain angle brackets |
写了 < 或 > |
用文字描述,或用「输入文件」这样的说法替代 |
| 校验通过但加载不生效 | 目录名 ≠ name、或放错位置 |
两者统一、确认在 skills/ 下 |
| zip 已存在同名文件 | 上次的产物 | 删掉旧 zip 或换输出目录 |
四、Fixing 前的自检顺序(推荐)
出问题时按这个顺序查,命中率最高:
- 看文件名:是不是
SKILL.md?(80% 的低级错误在这) - 看第一行:是不是
---? - 看 frontmatter:
name、description都在吗?有尖括号吗? - 看目录名:和
name一致吗? - 看位置:在
~/.workbuddy/skills/或<工作区>/.workbuddy/skills/下吗? - 看正文:引用的脚本/文档真的存在吗?
五、把校验做成习惯
三种做法,按工程化程度递增:
- 手动跑:每次改完
SKILL.md跑一次quick_validate。 - 写完就打包:
package_skill.py内置校验,直接跑它一遍顶两次。 - 接进 CI:项目级 Skill 可以放一个最简单的检查脚本,在提交时自动校验结构与 frontmatter 必填字段。
六、发布前最终清单
- [ ]
quick_validate输出Skill is valid! - [ ]
package_skill成功产出 zip - [ ] 解压 zip,确认第一层是同名目录
- [ ] 用 3~5 条真实用户说法实测触发(重启会话测试更准)
- [ ] 用真实数据跑一遍完整流程,确认没有半路失败
- [ ] 清理掉所有 TODO、示例文件、指导性文字
上一篇:3.2 SKILL.md 怎么写 | 返回:三、动手制作一个 Skill | 下一章:四、Skill 的进阶与工程化
整理人:WorkBuddy
