💻 编程开发 全难度 📦 Matt Pocock

diagnose — 结构化调试,拒绝乱试代码

Matt Pocock 出品,用科学方法调试 Bug:假设 → 证据 → 根因,替代盲目试错。复杂 Bug 的终极解决方案。

📄 相关文章

📊 评分明细

📦 打包完整度
2 2 / 2.5
🎯 实用性
2 2 / 2.5
📖 文档清晰度
1.6 1.6 / 2
👥 社区影响力
1.2 1.2 / 1.5
🔗 集成度
1.2 1.2 / 1.5

🎯 适用场景

免费编程测试

diagnose 快速入门

用科学方法调 Bug:先假设,再找证据,再下结论,最后改代码——告别乱试。

这是什么?解决什么问题?

调 Bug 的”民间方法”通常是:。“我猜是 X 引起的,改改看”,不行再改改看,改到放弃或撞大运。这种方法在 5-10 行代码里能行,在 5 万-10 万行的系统里几乎注定失败。 Matt Pocock 的 diagnose Skill 把”科学调试法”打包成可被 AI 严格执行的流程:

  1. 复现:把 bug 稳定复现成最小用例;
  2. 观察:收集日志、变量值、调用栈,记录实际发生了什么;
  3. 假设:基于观察提出若干”如果……那么……”的假设;
  4. 验证:用最小实验(打印、断点、单元测试)逐一排除或证实;
  5. 根因:找到那个”满足所有观察”的唯一解释;
  6. 修复:改最小代码并加回归测试。 AI 在开启 diagnose 后,不允许直接动业务代码,必须先走完 1-5 步,得到清晰的根因报告后,才动第 6 步。这避免了大量”改了 5 个地方,bug 突然消失,但你不知道是哪个改好的”。 适合:中级以上工程师、复杂业务系统维护、on-call 同学。

准备工作

  • 一个支持 SKILL.md 的 agent
  • 一段有 bug 的代码 + 报错信息
  • 5 分钟时间
  • 一颗不浮躁的心(诊断不是改代码,慢一点)

3 步快速上手

第 1 步:克隆并软链

git clone https://github.com/mattpocock/skills.git
ln -sf "$(pwd)/skills/diagnose" ~/.claude/skills/diagnose

OpenCode 用户把目标路径改为 ~/.config/opencode/skills/,Cursor 用户改为 ~/.cursor/skills/

第 2 步:验证 Skill 加载

ls ~/.claude/skills/diagnose/SKILL.md
head -30 ~/.claude/skills/diagnose/SKILL.md

应当能看到”复现 / 观察 / 假设 / 验证 / 根因 / 修复”6 个阶段。重启 agent,/skills list 看到 diagnose 即 OK。

第 3 步:用 Skill 调第一个真实 Bug

准备一个 bug 场景(下面给一个示范)。在 agent 对话里说:

[开 diagnose]
我的 Node.js 服务在收到 POST /api/login 请求时偶尔返回 502,
成功率和时间相关,白天 95% 晚上 30%。日志只有一行 upstream timeout。
请按 diagnose 流程帮我定位。

观察 AI 行为:

  • 第 1 步,它会问”先复现,你能不能在测试环境稳定触发”或者”贴一段请求复现脚本”;
  • 第 2 步,它会建议”在 4 个关键节点加日志”或”用 distributed trace”;
  • 第 3 步,它会列出 3-5 个候选假设(下游慢 / 缓存击穿 / GC 暂停 / DNS 抖动 / 连接池耗尽);
  • 第 4 步,它会为每个假设设计一个”一次只动一个变量”的实验;
  • 第 5-6 步,在你确认根因后再改代码并加回归测试。 重点:AI 在第 5 步前不会动业务代码,这是这个 Skill 的精髓。

常见踩坑

  1. 跳过第 1 步”复现”:很多人直接说”线上有 bug 快调”,AI 拿不到最小复现,只能瞎猜。坚持”先复现再诊断”。
  2. 假设列得太少:3 个假设里几乎一定有一个是真因,列 5-8 个才稳,Skill 会主动催你”再列几个”。
  3. 验证实验一次动了两个变量:“我把超时从 3s 改成 5s,又重启了 2 台机器”——这种实验 0 信息量。Skill 会要求你一次只改一个变量。
  4. 不收集证据就改代码:看到 502 就直接重试/加超时,根因没找到。Skill 会一直停在”假设/验证”阶段。
  5. 根因找到后”顺便”重构:诊断归诊断,重构归重构,混在一起会引入新 bug。Skill 会要求先 fix,另开 PR 重构。
  6. 回归测试不写:“我改完没复现了” 不算 fix,必须有自动化测试覆盖这个 case,Skill 会强制要求。

初级用法

  • 复现本地 bug:把生产报错信息贴进对话,先让 AI 帮你写一个最小复现脚本,再走诊断。
  • Code Review 找潜在 bug:对一段新写的代码,跑 diagnose 的”假设”步骤,看 AI 能不能列出 5 个潜在失败模式。

高级玩法

  • 跨服务调用链诊断:把 trace_id 喂给 AI,让它同时看 4 个服务的日志,做”分布式”诊断。
  • 配合火焰图/Profiler:把 pprof 输出、火焰图 SVG 一起贴进去,AI 能直接看到热点函数,跳过大量猜测。
  • 知识库沉淀:把”根因报告”自动归档到 Notion / 飞书,长期形成”故障案例库”,新人入职直接看。

小技巧

  • 假设阶段写”如果……那么……”句式,而不是”可能是 X”,后者不可证伪。
  • 验证实验的代码,记得在 git stash 后写,失败能秒回退。
  • 一次只跑一个 Skill,不要同时开 tdd + diagnose,会冲突。
  • 写完根因报告后,顺手写一个 POSTMORTEM.md,记录时间线、影响、根因、Action Items,团队复盘用。
  • “根因”不是”症状”——连接池满不是根因,慢查询/慢下游是根因。多问一个”为什么”。

参考链接


本文基于官方文档和公开资料整理,AI辅助生成,MagicNetWorld 尚未完成独立实测。如有错误或过时信息,请通过 contact@magicnetworld.com 反馈。

基本信息

项目详情
来源仓库mattpocock/skills
作者Matt Pocock
Stars68,000+
协议MIT
适用工具Claude Code / Codex / Cursor 等

安装

npx skills@latest add mattpocock/skills
# 选 diagnose

安装后 /diagnose 调用。

为什么需要这个 Skill?

大多数开发者的调试方式:

1. 看到报错 → 2. 改一行 → 3. 还报错 → 4. 再改一行 → 5. 循环...

这是随机试错。对于简单 Bug 也许有用,但对于间歇性 Bug、复杂 Bug、跨模块 Bug,完全无效。

diagnose 用科学方法论替代直觉:

1. 观察现象 → 2. 形成假设 → 3. 设计验证 → 4. 收集证据 → 5. 锁定根因 → 6. 修复

工作流程示例

你: /diagnose 用户登录后偶尔被踢回首页,但不是每次都发生

AI:
  【Step 1: 现象精确化】
  ❓ 被踢回首页前有什么共同点?刷新?跳转?超时?
  ❓ 频率如何?每天几次还是每小时几次?
  ❓ 最近改过认证相关代码吗?

你: 大概每小时 3-4 次,刷新页面就触发。上周改过 token 刷新逻辑。

AI:
  【Step 2: 形成假设】
  假设 A: Token 刷新有竞态条件 — 可能性高(最近改动)
  假设 B: Session 过期时间配置问题 — 可能性中
  假设 C: Nginx 负载均衡丢失 session — 可能性低

  【Step 3: 验证假设 A】
  添加日志记录 token 刷新时间戳,观察是否在刷新期间请求了旧 token。

  [AI 自动添加诊断日志代码]

  结果:日志显示被踢出时,token 确实刚过期 2 秒,但刷新还没完成。

  【Step 4: 锁定根因 + 修复】
  根因:token 刷新是异步的,中间存在空窗期。
  修复:添加刷新锁 + 请求队列,防止并发刷新。

核心价值

不是”AI 帮你改代码”,而是 AI 带你走一遍专业的调试流程。即使你最终手动修复,这个过程本身已经锻炼了你的调试能力。

适用场景

场景diagnose 效果
间歇性 Bug最佳 — 随机试错完全无效
复杂跨模块 Bug理清依赖链,缩小范围
你完全不懂的代码AI 带你分析,边调边学
紧急线上问题快速定位根因,不浪费时间试错

与其他 Skills 组合

遇到 Bug → /diagnose(定位根因)
  → 确定修复方案
  → /tdd(写测试防止回归)
  → /grill-me(确认修复范围)

注意事项

  • diagnose 过程可能比直接改代码慢,但解决率远高
  • 第一次形成假设时需要你提供信息(现象描述)
  • 适合复杂问题,简单拼写错误直接用

参考资料

  1. mattpocock/skills GitHub
  2. Matt Pocock 官方主页
  3. Hermes Agent Skills 文档

📊 评分与标签

评分说明

总分 8.0/10 · P_优选

📊 可观测社区指标(数据核验日期:2026-07-23)

  • 官方仓库与维护入口:mattpocock/skills。GitHub API 核验时触发限流,未记录无法再次确认的 Stars/Forks 精确快照,避免用估算值替代事实。

📦 可安装性 2.0/2.5

  • 官方来源提供可复制的 Skill、MCP 或 Markdown 目录;安装前仍需按 README 配置宿主客户端、运行时和最小权限凭据。
  • 与 Anthropic Skills、OpenCode Skills 对比,本项遵循开放目录思路,但插件命令、脚本依赖和更新方式并不完全统一。

🎯 实用性 2.0/2.5

  • 用假设、证据和根因验证进行结构化调试;这里只确认官方材料明确描述的范围,未把未经实测的准确率、性能或生产收益计入评分。
  • 与 GitHub CLI、Zapier 等专用工具对比,Skill 更适合把操作步骤交给 Agent 复用,不能替代完整运行时、监控和人工验收。

📖 文档质量 1.6/2.0

  • README、技能目录或官方参考页可核对安装、能力和约束;未发现统一的端到端性能基准,因此采用保守文档分。
  • 与 Vercel Agent Skills、Obra Superpowers 对比,目标任务说明直接,但版本迁移、失败恢复和跨平台案例仍依赖上游维护。

👥 社区活跃 1.1/1.5

  • 仓库公开提交历史、Issue 与 Pull Request 入口可追踪维护;因 API 限流未写入易变精确计数,社区分不依据未经复核的热度数字。
  • 与 anthropics/skills、obra/superpowers 对比,具备公开协作入口,但不能据此推导响应时效、长期承诺或企业支持等级。

🔗 兼容性 1.3/1.5

  • 可在能够读取 Skills/MCP 指令并具备相应工具权限的 Agent 环境使用;API、Token、浏览器和本地工具链会形成额外约束。
  • 与 Claude Code、Codex、Cursor 的原生扩展对比,开放文件格式便于迁移,但触发、脚本执行和资源加载行为存在客户端差异。

评分依据可追溯至公开来源,每项分数均有明确理由和数据支撑。

🏷️ 标签说明

  • 免费: 公开来源可访问;外部服务费用不计入 Skill 本身。来源:官方来源
  • 编程: 核心能力与“用假设、证据和根因验证进行结构化调试”直接对应。来源:官方来源
  • 测试: 官方材料显示其面向该使用方式。来源:官方来源

局限说明:本次为官方仓库与文档核验,未执行跨客户端、跨操作系统端到端基准测试;外部 API 配额、授权和价格可能变化,应以上游最新说明为准。

📋 来源与核验记录

  • ✅ 官方仓库页面已核验:https://github.com/mattpocock/skills
  • ✅ 官方文档或功能页已核验:https://github.com/mattpocock/skills
  • ⚠️ 未验证(访问限制):GitHub REST API 于 2026-07-23 返回限流,未采用无法复核的精确 Stars/Forks 数值
  • ⚠️ 间接来源(二手数据):未用于核心功能与维度评分
  • ❌ 已删除死链:无