Install
openclaw skills install @huiyonghkw/hekouwang-claude-skill-doctor-skill会勇禾口王的AI笔记 · Agent Skill(SKILL.md)体检器。检查一个 Claude/Agent Skill 是否 符合"按需加载的指令包,不是单文件巨石"的最佳实践——评 description 触发质量、SKILL.md 篇幅、渐进披露(references/ 拆分)、脚本外置、可移植性(无硬编码绝对路径)、安全(无硬编码 密钥),给出评分卡 + 按优先级的修复建议,并可代为重构。触发:用户说「检查我的 skill / SKILL.md 体检 / 这个 skill 规范吗 / claude-skill-doctor / audit skill / lint SKILL.md / 我的 skill 太长了 / skill 拆分 / 看看我的 skill 合不合规 / skill 对齐官方规范」。 任何"评估/审查/优化某个 Agent Skill 质量或结构"的请求都应触发。
openclaw skills install @huiyonghkw/hekouwang-claude-skill-doctor-skill会勇禾口王的AI笔记 出品 ·
@huiyonghkw不聊 AI 会不会取代你,只聊先用 AI 的人怎么取代你。
把"Agent Skill 最佳实践"做成一个能跑在任何 skill 上的检查器:机检定量 + 模型定性, 产出评分卡和可落地的修复建议。核心判据一句话——
SKILL.md 是模型"决定要不要加载、加载后照着做"的运行时指令包。
description决定它何时被唤醒;正文越精简越准;厚重细节要能"按需展开"(references/ 用到再读),而不是每次触发就把全部细节灌进上下文。 一切检查项都从这句推导:这段内容值不值得在 skill 每次触发时都付一次上下文费?能不能下沉到 references/ 用到再读?
Skill 的命脉是两条,权重最高:
description 是模型唯一用来判断"何时唤醒本 skill"的信号。写不清"何时用",再好的正文也永远不被加载。所以机检里 #2 触发 / #3 篇幅 / #4 渐进披露 / #6 可移植 / #10 别替模型补 权重 1.5; "加内容"类项(#7 最小工具集、#10 配套文档)缺失只算小扣分——别一边喊"越精简越好"、一边逼作者把 skill 做臃肿。
属于 会勇禾口王的AI笔记(定位:AI 实战拆解,硬核·具体·可复制;人设:你办公室里第一个把 AI 用明白的同事)。出体检报告时:
—— 会勇禾口王的AI笔记 · @huiyonghkw。命令行 check.py 的报告页脚已内置该署名。check.py 的文本 / JSON 报告 + 评分。任何人本地或进 CI 随便跑。hekouwang-content-factory 的私有品牌字体与版式,不随本仓库分发。SKILL.md)。若传进来是 ~/.claude/skills/ 这种父目录,脚本会提示里面有哪些 skill,逐个体检。python3 <此skill目录>/check.py <skill目录>
--json。退出码:有 FAIL → 1,否则 0。description,真的当一次模型:光看这段,能不能判断"什么请求该唤醒它"?~/相对路径、补 description 触发句)。得到同意再动文件,一次改一类、可回退;改完重跑 check.py 给前后对比分数。不要只把脚本输出原样贴给用户——脚本是线索,你的价值在定性判断 + 具体怎么拆。
| # | 检查项 | 合格长什么样 | 不合格信号 |
|---|---|---|---|
| 0 | 无硬编码密钥(安全红线) | SKILL.md 及捆绑文件无 key/token/私钥/口令明文 | 出现 sk-/AKIA/私钥块/password="..." → 直接 FAIL(skill 常被分发,泄露面更大) |
| 1 | frontmatter 必填合法 | 有 name(小写+连字符 ≤64)+ description | 缺 name/description → FAIL;name 含大写/下划线/空格 → WARN |
| 2 | description 含「何时用」 | 同时写清"做什么 + 何时/触发用"(这是被唤醒的唯一依据) | 只写"做什么"不写"何时用";或太短没触发信号 |
| 2b | description ≤ 1024 字符 | 在上限内,触发稳定 | 超长,可能被截断 |
| 3 | SKILL.md ≤ 500 行 | 路由器不是图书馆,按需加载越短越准 | >500 行;分版本/分平台/长流程全塞一个文件 |
| 4 | 渐进披露(拆 references/) | 长内容下沉独立 .md,正文留指针 | 正文很长却没有任何 references 拆分文件 |
| 4b | 指针无死链 | 引用的 references/scripts/assets 都真实存在 | 指针指向不存在的文件(按图索骥扑空) |
| 5 | 脚本外置 scripts/ | 确定性代码(构建/截图/合成/转换)是 scripts/ 真文件 | 大段可执行代码内联在正文,每次靠模型重打 |
| 6 | 可移植(无硬编码绝对路径) | 用 ~/$HOME/相对路径/占位 | 出现 /Users/某人/、/home/某人/——别人装上即失效 |
| 7 | allowed-tools 最小化 | 声明本 skill 真正需要的工具 | 不声明(继承全部工具,越权面大)——可选项,低权重 |
| 10a | 别替模型补它已经会的 | 只装项目/品牌私有事实 | 有"语言入门/框架教程/如何使用"这类随模型升级很快过时的教学段 |
| 10b | 配套文档(README+CHANGELOG) | 对外分发友好 | 缺失——纯自用可忽略,低权重 |
分档:A 优秀 ≥85 · B 良好 ≥70 · C 及格 ≥50 · D 建议重构 <50。 (机检:PASS=1 / WARN=0.5 / FAIL=0,INFO 不计分。按重要度加权——安全红线 #0 与触发/减法核心项 #1/#2/#3/#4/#6/#10a 权重 1.5,标准项 #2b/#4b/#5 为 1.0,加内容项 #7/#10b 为 0.6。#0 命中按 FAIL 计且资损级,定性总评里应一票顶到「先改这条」。)
脚本只判"机器能确定的",以下几项容易误判,必须你读正文定夺:
.env / *.key / *.pem / *secret* 一律不打开(脚本本身也不读)。.env / 密钥管理器;命中即视为已泄露,提醒轮换并查 git 历史(skill 很可能已 push 到 GitHub)。references/xxx.md,正文回归"精简路由 + 硬规矩 + 一张'做 X 读哪个文件'索引表"。一次拆一块、搬完 grep 核对不丢内容。scripts/ 真文件,正文只留一行"跑 scripts/xxx"。/Users/某人/... 换成 ~ / $HOME / 相对路径 / 「此 skill 目录」占位。check.py 给前后对比分数。my-skill/
├── SKILL.md # ≤500 行:frontmatter(name+description触发句) + 元判据 + 硬规矩
│ # + 一张「做 X → 读 references/Y」索引表(路由,不堆细节)
├── references/ # 渐进披露:按版本/平台/流程拆的专题 .md,用到再读
│ ├── topic-a.md
│ └── topic-b.md
├── scripts/ # 确定性可执行脚本(构建/截图/合成/转换),正文只留指针
├── assets/ # 字体/图片/模板等捆绑资源
├── README.md # 给人看(分发用)
└── CHANGELOG.md # 版本记录
SKILL.md 是路由,不是仓库。判据始终是:这段值不值得每次触发都进上下文?能下沉就下沉。