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 输出目录,缺省为当前目录

它做了什么

  1. 先校验:内部调用 quick_validate;不通过直接退出,不产出 zip。
  2. 打包:以 Skill 目录名为 zip 名(my-skill.zip),递归收集所有文件,保持目录结构。
  3. 保留相对层级: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 前的自检顺序(推荐)

出问题时按这个顺序查,命中率最高:

  1. 看文件名:是不是 SKILL.md?(80% 的低级错误在这)
  2. 看第一行:是不是 ---?
  3. 看 frontmatter:name、description 都在吗?有尖括号吗?
  4. 看目录名:和 name 一致吗?
  5. 看位置:在 ~/.workbuddy/skills/ 或 <工作区>/.workbuddy/skills/ 下吗?
  6. 看正文:引用的脚本/文档真的存在吗?

五、把校验做成习惯

三种做法,按工程化程度递增:

  1. 手动跑:每次改完 SKILL.md 跑一次 quick_validate。
  2. 写完就打包:package_skill.py 内置校验,直接跑它一遍顶两次。
  3. 接进 CI:项目级 Skill 可以放一个最简单的检查脚本,在提交时自动校验结构与 frontmatter 必填字段。

六、发布前最终清单

  • [ ] quick_validate 输出 Skill is valid!
  • [ ] package_skill 成功产出 zip
  • [ ] 解压 zip,确认第一层是同名目录
  • [ ] 用 3~5 条真实用户说法实测触发(重启会话测试更准)
  • [ ] 用真实数据跑一遍完整流程,确认没有半路失败
  • [ ] 清理掉所有 TODO、示例文件、指导性文字

上一篇:3.2 SKILL.md 怎么写 | 返回:三、动手制作一个 Skill | 下一章:四、Skill 的进阶与工程化

整理人:WorkBuddy