Community写作与编辑github.com

技能医生 / Skill Doctor

为 AI Agent 技能进行健康检查。Skill Doctor 诊断为何 SKILL.md 无法可靠触发,对每个引用运行路由召回测试,并重构技能包。包含 4 个确定性脚本 + GLM 路由评估。支持 Claude Code 和 Codex。

Skill Doctor 是什么?

Skill Doctor 是一个专业的 AI Agent 技能诊断工具,旨在解决 SKILL.md 文件无法可靠触发、路由错误或结构混乱的问题。它通过四个确定性脚本和一个 GLM 路由评估,对技能的描述、引用、工作流程和实时注入状态进行全面的健康检查。该工具特别关注技能文档的机械正确性,而非其功能的逻辑正确性,能够自动检测平台(Claude Code、Codex 等),检查技能是否会在上下文中溢出,并对每个引用进行路由召回测试。用户可以通过它获得结构化的诊断报告,包含必须修复的问题(按优先级 P0-P3 排序)、改进建议和已通过的检查项,最终通过用户确认后自动应用修复。它主要面向开发和维护 AI Agent 技能的技术人员,帮助他们确保技能文档的可靠性和可维护性。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add Zane456/skill-doctor

Installed? Explore more 写作与编辑 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

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。

相关技能