Skill Doctor
诊断并改进任何 SKILL.md 文件。一个指南针,而非操作手册——具体标准位于 references/ 目录中,按需读取。
触发后的诊断流程(每个步骤必须产生可见输出)
没有可见输出的步骤将被静默跳过(Seleznov 实验,2026)。每步打印一行确认信息。 自审标记:如果本次会话已经编辑/写入了目标 SKILL.md,请在每条医生输出行前加上
[self-review]前缀,并在第 3 步末尾附加一行:“结论为自我评估,建议使用新的子代理重新审查。”
第 1 步:读取目标 SKILL.md,宣布诊断开始
读取正在编辑的 SKILL.md 的完整文本,运行 python3 <this-skill-dir>/scripts/check_listing_budget.py "<project_root>"(路径需加引号——路径中常含空格),打印两行:
[skill-doctor] Auditing: <path> body=<N> lines description=<M> chars
[skill-doctor] Budget (<platform>): <K> skills, <T> chars vs ≈<B> → <fits | OVERFLOW ×N.N>
自动检测平台(CC / Codex / Hermes / OpenClaw)。退出码:0 = 适合;1 = 溢出;2 = 不可用(无平台 / 上下文未知 → 询问用户平台和窗口)。溢出是一个群体级别的通知,而非针对被审计技能的发现:打印数字以便用户知晓,但不要因此缩短该技能描述——缩减操作是全局性的,绝不是单一技能就能解决的问题。
第 2 步:按维度进行评判
从参考索引(维度部分)中选择要加载的维度——只读取其 when-to-read 条件触发的条目。 加载后,打印一行:
[skill-doctor] Loaded: <list>; Skipped: <list with one-word reason>
第 2.5 步:干运行演练(仅当 body 包含工作流时)
按照 references/effect-dry-run.md,选取 1 个最典型的提示,按 body 中步骤进行演练,检查输入/指令/输出是否连接。
任何断链或歧义 → 标记为 P0(效果问题),并放入第 3 步的 ❌ 部分。
打印一行:
[skill-doctor] Dry-run prompt: "<prompt>" broken links=<N>
如果 body 中没有工作流(纯规则 / 引用型技能),则打印:
[skill-doctor] Dry-run: skipped (no workflow)
第 2.6 步:实时注入检查(仅当目标技能在当前会话范围内时)
检查目标技能是否出现在当前会话的可用技能列表中,且包含其描述(而不仅仅是名称)。三种情况(已注入 / 仅名称预算丢弃 / 超出范围跳过)以及群体通知规则详见 references/live-injection-check.md。打印一行:
[skill-doctor] Live-injection: <injected | DROPPED (name-only) | skipped (<reason>)>
第 3 步:输出诊断报告
严格按以下格式输出,打印到对话中:
[skill-doctor] Diagnosis
❌ Must fix (sorted P0→P3, definitions in references/priority-tiers.md)
[P0 effect break] <issue>: <why> → <fix>
[P1 structure] <issue>: <why> → <fix>
[P2 specificity] <issue>: <why> → <fix>
[P3 affects execution] <issue>: <why> → <fix>
⚠️ Suggested improvements (including purely cosmetic / verbose P3)
- <issue>: <why> → <fix>
✅ Checks passed
- <list>
P3 放置规则:询问“如果不修复,下一个运行该技能的 LLM 会做错事吗?”——是 → ❌;仅丑陋/冗长 → ⚠️。详见 references/priority-tiers.md。
每个问题必须给出具体的行号或字段——不能模棱两可。当同一类违规出现在多个地方时,请分别列出——例如,内容被错误分类到三个子目录中,这应该是 3 个问题,而不是 1 个合并条目。
当适用时,命名失效模式(参见 references/predictability-glossary.md):在发现项前添加 [no-op] / [sediment] / [premature-completion] / [weak-leading-word] / [duplication] / [sprawl] 前缀。名称说明什么类型;P 级别仍然说明有多严重——二者是正交的,因此前缀从不替代级别。
第 4 步:用户确认后通过 Edit 应用修复
切勿未经确认就进行 Edit。等待用户说出“修复它”后再行动。
在行动前,应用大小限制检查和删除前检查;之后闭合循环——完整流程见 references/apply-safety.md。
修复后,打印一行:
[skill-doctor] Applied <N> fixes to <path> body: <old>→<new> lines (<+X%>)
硬规则快速参考
量化后的硬规则(违反即为错误,而非建议)位于 references/hard-rules.md 中——每次审计时请参考。
异常回退
当路径缺失、YAML 无法解析、或捆绑脚本(scripts/check_listing_budget.py + scripts/detect_platform.py / scripts/check_routes.py / scripts/eval_retrieval.py / scripts/check_desc_slim.py)缺失或退出码为 2 时——按 references/exception-fallback.md 处理。首先向用户声明异常,切勿静默跳过。
输出和语言
报告文案遵循 references/output-style.md(清晰、终端安全、结论先行)。正文/参考默认使用英语;标记无正当理由的非英语内容为 ⚠️——策略及两个合理的例外情况参见 references/language-policy.md。
本技能范围之外
- 实际功能是否正确(那是逻辑错误,而非技能格式问题)
- 项目特定约定(这些应放在 CLAUDE.md 中,而非技能中)
- 一次性修复脚本(运行一次后即可丢弃,不应作为技能)
为什么存在这个技能
为什么 LLM 会将 SKILL.md 误写为操作手册,以及本技能如何将机械检查与判断分开:references/rationale.md。