技能三审核官 · 多平台版 (Skill Tri-Auditor)
核心理念
三位审核官独立审查、互不越界;审核官体系只存在于本技能内部,绝不写入被审核的技能包。
先审、后修、再打包,P0 不清零不放行。
- 审核官 A:结构规范(目录、文件、引用链、真实性)
- 审核官 B:市场准入(frontmatter 字段、命名、版本、分类、触发词)— 随平台切换规则
- 审核官 C:安全合规(密钥、危险命令、数据外传、内容合规)
适用场景
- 新写好一个
SKILL.md,准备提交任一开放平台 - 同一技能需分发到多个平台(如 WorkBuddy + ClawHub),需按平台差异适配
- 技能 zip 包提交后解析失败,需定位原因
- 已有技能迭代版本后的上架前复检
- 一次审核多个技能(批量模式)
目标平台规则集
平台模式速查
| 平台 | mode | 上架载体 | SKILL.md 必填 |
|---|---|---|---|
| workbuddy | package | ZIP 提交开放平台 | description / description_zh / description_en / version / author |
| clawhub | repo | GitHub + clawhub publish |
name / description |
| skills.sh | repo | GitHub + npx skills add |
name / description |
| smithery | registry | GitHub + PUT /skills/{ns}/{slug} | name / description (通用) |
| coze | store-form | 扣子后台表单 | 不走 SKILL.md 校验 |
> ⚠️ 关键差异:
> - version/author 在 ClawHub/skills.sh 不是顶层必填,放 metadata 即可
> - name 在 Coze 可中文,不要求小写连字符
> - Smithery 不收 ZIP,收 GitHub 仓库 + Registry API
> - Coze 不走 ZIP,走商店表单
name 约束细则
| 平台 | 模式 | 长度 | 连续 -- |
首尾 - |
匹配目录 |
|---|---|---|---|---|---|
| workbuddy | ^[a-z0-9][a-z0-9-]*$ |
— | ⚠️ | ⚠️ | 建议 |
| clawhub | ^[a-z0-9][a-z0-9-]*$ |
≤64 | ❌ P0 | ❌ P0 | ✅ 强制 |
| skills.sh | ^[a-z0-9][a-z0-9-]*$ |
≤64 | ❌ P0 | ❌ P0 | ✅ 强制 |
| smithery | ^[a-z0-9-]+$ (slug) |
— | — | — | 不必 |
| coze | 可中文 | ≤20 | — | — | — |
通用兜底
name 小写连字符、description 写清触发词、version 用 SemVer —— 三条对所有平台适用。
完整对照见 references/platform-rules.md。
审核官 A —— 结构规范官
审核依据:各平台《技能基础结构》《子资源目录说明》
逐项检查:
| # | 检查项 | 合格标准 | 级别 |
|---|---|---|---|
| A1 | 目录结构 | {skill-name}/SKILL.md 为根,references/、scripts/、templates/、assets/ 为可选子目录 |
P0 |
| A1+ | 子资源引用链 | SKILL.md 正文中引用的 references/*.md、scripts/*、templates/* 必须真实存在、路径匹配 |
P0 |
| A2 | 文件格式 | SKILL.md 使用合法 YAML frontmatter + Markdown 正文;frontmatter 可正常解析 | P0 |
| A3 | 子资源目录 | 目录仅在确实被引用时才存在;纯指令型技能允许只有 SKILL.md | P1 |
| A4 | 能力承诺真实性 | 不承诺做不到的事(「主动推送」「后台常驻」);改为「用户询问时查询」类可执行表述 | P1 |
| A5 | 外部依赖声明 | 引用的连接器/MCP/外部工具有兜底表述(「通过已连接连接器调用」),避免离线无法执行 | P1 |
| A6 | 渐进式披露 | SKILL.md 正文建议 ≤500 行;超大内容拆分到 references/(平台无关,质量项) | P2 |
审核官 B —— 市场准入官
审核依据:各平台《技能市场》与 Frontmatter 字段表(随 --platform 切换)。
必填字段(按平台规则集取值)
通过 PLATFORM_REQUIRED 字典驱动:
PLATFORM_REQUIRED = {
"workbuddy": ["description", "description_zh", "description_en", "version", "author"],
"clawhub": ["name", "description"],
"skills.sh": ["name", "description"],
"smithery": ["name", "description"],
"coze": [], # coze 走商店表单, 不强校验 SKILL.md 字段
}
> ⚠️ 重要:ClawHub/skills.sh 的 version/author 放在 metadata 里,不是顶层必填。
> WorkBuddy 的 description_zh/description_en 是平台表单必填。
建议补齐字段(缺失为 P1)
display_name、display_name_en、category(按平台分类枚举)、license、compatibility
附加检查
| 代码 | 规则 | 平台适用性 | 级别 |
|---|---|---|---|
| B1 | name 小写连字符 + 匹配目录 |
clawhub/skills.sh/workbuddy → P0;smithery → P1;coze → 不适用(P2) | 依平台 |
| B2 | description 触发词覆盖充分 | 所有 | P1 |
| B3 | 正文有可执行工作流/步骤 | 所有 | P1 |
| B4 | name 长度 | clawhub/skills.sh ≤64 → P0;coze ≤20 → P0(但允许中文) | P0 |
| B5 | description 长度 | 通用 ≤1024;Coze 一句话 ≤200 | P1 |
| B6 | 敏感/构建文件 | clawhub/skills.sh 关注 .env/.git/密钥;coze/smithery 不按此判 |
P0 |
| B7 | 版本语义 (SemVer) + changelog | 所有 | P2 |
| B8 | 分类枚举校验 | 所有 | P1 |
审核官 C —— 安全合规官
审核依据:ClawHub 安全分析(声明与实际一致性)、通用供应链安全实践
| # | 检查项 | 合格标准 | 级别 |
|---|---|---|---|
| C1 | 硬编码密钥 | scripts/ 与 SKILL.md 中无硬编码 API Key / Token / 私钥;应使用 env 变量占位 | P0 |
| C2 | 危险命令 | 无 rm -rf /、curl ... \| sh、sudo、无确认的大范围删除等高风险模式 |
P0 |
| C3 | 数据外传声明 | 若脚本含网络请求/上传行为,须在正文声明;未声明的外传视为可疑 | P0 |
| C4 | 依赖声明一致性 | 脚本实际使用的 env/bin/config 与 metadata.openclaw.requires.* 一致(仅 ClawHub) |
P0 |
| C5 | 敏感文件泄露 | 包/仓库内含 .env、.git/、密钥文件 → P0;普通 assets/icon.png 不算违规 |
P0 |
| C6 | 内容合规 | 正文无侵权、违规、违法内容描述;无恶意行为引导 | P0 |
| C7 | 供应链投毒 | 外部依赖来源可追溯,install 声明规范且锁定版本 | P1 |
自动修复能力
对以下可确定性修复的项,生成修复草稿(SKILL.md.fixed),用户确认后落盘;
不可确定项(如 description 措辞、分类取值)仅给建议,绝不擅自改写语义:
| 项 | 修复动作 |
|---|---|
| B1 name 违规 | 自动转小写、替换空格/下划线为连字符、去除首尾/连续连字符 |
| 缺失必填字段 | 用占位值补齐(如 description: TODO、version: 0.1.0),标 TODO 待人工填 |
| 反斜杠路径 | 打包时统一转为正斜杠(无需改源) |
| A2 frontmatter 格式错误 | 给出修正后的 YAML 块草稿 |
| B7 version 未递增 | 提示并建议递增(不直接改,需用户确认) |
修复只动被审技能,不动审核官体系。修复后必须重审直至 P0/P1 清零。
执行流程
-
确认目标平台:读取
--platform(或用户指定),默认workbuddy;多平台时对每个平台各出一份结论。 -
读入待审技能:读取目标
{skill-name}/下的SKILL.md及子资源目录;批量模式则遍历所有给定目录。 -
三审并行:审核官 A/B/C 各自按上表 + 平台规则集逐项检查。每项标注 ✅ / ⚠️ / ❌ 与级别(P0=驳回 / P1=应修复 / P2=建议)。
-
自动修复:对可自动修复项生成
*.fixed草稿,列出「自动修复 vs 需人工」清单。
运行:python scripts/fix.py <skill_dir> --platform <platform> [--apply] -
出具报告:输出三审核官对照表 + 审核结论 + 通过率(通过项/总项)+ 修复明细。
报告文件放在技能包之外,不进 ZIP。模板见templates/report.md。 -
先修后包:P0 与 P1 全部修复后,才允许打包。
-
打包规范(按平台 mode 分支,硬约束):
| mode | 平台 | 动作 |
|---|---|---|
| package | workbuddy | 打 ZIP:正斜杠路径、zipfile.ZIP_DEFLATED、剔除非文本文件 |
| repo | clawhub / skills.sh | 生成 .clawhubignore / .gitignore;提示推 GitHub + 发布命令 |
| registry | smithery | 不打包;输出 namespace/slug/gitUrl 建议 + API 调用示例 |
| store-form | coze | 不打包;输出商店表单填写清单(名称/一句话/详细介绍/封面/分类/案例) |
workbuddy ZIP 硬约束:
- 内部条目路径必须为正斜杠(skill-name/SKILL.md)。禁止 PowerShell Compress-Archive(产生反斜杠)
- 推荐 Python 标准库:zipfile.ZipFile(out,'w',zipfile.ZIP_DEFLATED) + zp.write(path, 'skill-name/SKILL.md')
- 平台预清理:ClawHub/skills.sh 需剔除非文本文件(png/jpg/.git/.env 等)
运行:python scripts/package.py <skill_dir> --platform <platform> [--out ./dist]
-
预提交模拟:用解析器模拟平台解包流程:
- 路径分隔符检查(无反斜杠)
-z.testzip()返回 None
- 抽读 SKILL.md frontmatter 完整可解析
- 必填字段校验(按平台) -
校验摘要:输出 ZIP 的 SHA256、文件大小、条目数,附在报告末尾便于提交核对。
-
交付:交付 ZIP(+ 审核报告 + 校验摘要),并说明剩余 P2 项供上线后微调。
判定规则
- 存在任何 P0 → 不放行,修复后重审
- 仅剩 P1 → 修复后放行
- 仅剩 P2 → 放行,报告中列明留意项
- 多平台:每个平台独立出 verdict;汇总报告逐平台标注状态
目录结构(本技能自身)
skill-tri-auditor/
├── SKILL.md # 本文件
├── references/
│ └── platform-rules.md # 各平台规则集权威对照 (v2.1.0 重写)
├── scripts/
│ ├── audit.py # 三审核官检查引擎
│ ├── fix.py # 自动修复 (命名/字段补齐/路径)
│ └── package.py # 打包 + 预提交模拟 + 校验摘要 (按 mode 分支)
└── templates/
└── report.md # 审核报告模板
快速使用
# 1. 单平台审核 (默认 workbuddy)
python scripts/audit.py /path/to/my-skill --platform workbuddy
# 2. 多平台审核
python scripts/audit.py /path/to/my-skill --platform workbuddy --extra-platforms clawhub coze
# 3. 自动修复 (生成 .fixed 草稿)
python scripts/fix.py /path/to/my-skill --platform clawhub
# 4. 应用修复 + 打包
python scripts/fix.py /path/to/my-skill --platform workbuddy --apply
python scripts/package.py /path/to/my-skill --platform workbuddy --out ./dist
# 5. CI 模式 (P1 也视为失败)
python scripts/audit.py /path/to/my-skill --platform workbuddy --strict --json
示例
示例 1:单平台审核 + 打包 (ClawHub)
用户:这个 business-travel-kit 帮我自检一次,然后打包(目标 ClawHub)。
→ platform=clawhub → 三审核官审查 → 缺 version/author(P0)+ name 含大写(B1)+ 含硬编码 key(C1)
→ fix.py 修复命名与字段占位 → 人工补 key → package.py 生成 .clawhubignore + 提示 clawhub publish
→ 报告: clawhub=NEED_METADATA (需补 metadata.openclaw)
示例 2:多平台适配
用户:把这个 skill 同时适配 WorkBuddy 和 Coze。
→ workbuddy=package mode → 打 ZIP;coze=store-form mode → 输出表单清单
→ 分别出 verdict: workbuddy=PASS / coze=FORM_READY
示例 3:批量审核
用户:把 ./skills 下三个技能全部自检。
→ 遍历三个目录 → 各自三审 → 汇总总报告(含通过率排名、跨技能共性问题)
示例 4:解析失败排查
用户:zip 提交开放平台解析失败了。
→ 预提交模拟:检查反斜杠路径 / frontmatter 必填 / 目录结构 / 非文本文件 → 定位后修复重打包
引用说明
本技能的审核规则综合了以下平台官方规范(基于 2026-09 公开文档):
- ClawHub / OpenClaw Skill 格式 — documentation.openclaw.ai
- skills.sh AgentSkills 规范 — skills.sh/docs, agentskills.io
- Smithery Skill Schema / API — smithery.ai/docs
- 扣子(Coze)技能开发与上架 — www.coze.cn/docs
- WorkBuddy / SkillHub 开放平台 — open.workbuddy.cn/docs/skill
- Anthropic / Claude Skill 撰写最佳实践
> ⚠️ 各平台规范持续更新,请以最新官方文档为准。规则校准优先级:
> references/platform-rules.md > 本文件摘要 > 通用兜底