Matt Pocock 的 skills:把 "真实工程师" 的开发直觉装进 AI Agent
一、为什么 AI 写出来的代码总是” 差点意思”
上个月我用 Claude Code 重构一个老模块,让它” 把这段命令式代码改成函数式”。它一上来就动手,5 秒后给我返回了一个 200 行的” 重构版”—— 命名、抽象边界、控制流全都变了,但没人能解释清楚它为什么要这么改。我追问了一句” 为什么这里要 flatten 而不是 map”,它立刻改口说” 其实 map 也可以”,又退回去了。
这不是模型的锅,是流程的锅。
真实工程师接到一个改重构需求时,会下意识做四件事:
- 先问清楚边界 —— 这个改动影响哪些模块、有没有外部依赖
- 用团队统一的术语描述问题 —— 避免” 实现一下” 这种含混表达
- 写一个失败的测试,再写让测试通过的代码
- 反思改动有没有让架构变” 烂”—— 模块深度是否还在
Matt Pocock(TypeScript 圈最有影响力的布道师之一)把这四件事连同更多工程直觉,全部抽成了 AI Agent 能直接调用的技能 —— 这就是今天 170k stars 的 mattpocock/skills,每天还在以 1,700+ stars 的速度疯涨。
今天聊聊它到底解决了什么、怎么用、跟 Superpowers /agent-skills 有什么不同。
二、项目背景:为什么是 Matt Pocock?
mattpocock/skills 的自我描述很直白:
“Skills for Real Engineers. Straight from my
.claudedirectory.”
这不是又一个”AI 通用工作流框架”,而是一个老牌工程师把自己日常用 Claude Code 的最佳实践提炼成可分发技能包的项目。它的设计哲学很独特:
- 小而精:每个 skill 是一个独立目录,不做” 大一统流程”
- 可改可拼:默认通过
npx skills add把源码复制到你项目里,鼓励你 fork - 不绑模型:和具体 Claude 版本解耦,”work with any model”
- 明确表态:作者公开说这是对 GSD、BMAD、Spec-Kit 等” 重型流程框架” 的替代 —— 他认为那些框架” 夺走了你的控制权,过程出错时难定位”
这也是它跟 obra/superpowers(更工程化、强制 TDD + 评审门禁)和 addyosmani/agent-skills(更标准化、24 技能 + 8 命令)最大的区别:它不强迫你走完整套流程,而是把一个个” 好习惯” 做成插件,你挑着用。
三、四大失败模式与对应技能
Matt Pocock 在 README 里把所有痛点归为 4 个失败模式,每个模式都有对应的 skill 解决。理解这个分类,你才能看懂他的技能地图。
3.1 失败模式 #1:Agent 干了” 不是你想要” 的事(Misalignment)
“No-one knows exactly what they want” — 《The Pragmatic Programmer》
你跟 Agent 说” 做个用户管理模块”,Agent 脑补了一整套 RBAC、JWT、OAuth SSO—— 你其实只想做个最简单的 CRUD。
Matt 的解法叫 “Grilling session”(审问式对话),对应两个 skill:
/grill-me:Agent 一个问题接一个问题地问你,把模糊需求逼成可执行清单/grill-with-docs:在 grilling 基础上加一个” 共享语言” 步骤,先建立CONTEXT.md术语表,再写 ADR(架构决策记录),推荐用这个
它的工作方式像结对编程里的” 高级工程师对初级工程师”—— 你不能跳过需求评审就动手。
3.2 失败模式 #2:Agent 太啰嗦 / 命名混乱(Shared Language)
“With a ubiquitous language, conversations among developers and expressions of the code are all derived from the same domain model.” — Eric Evans《领域驱动设计》
Agent 写出来的代码最让人抓狂的不是 bug,而是每个文件用了不同的术语 —— 同一个概念一会叫 lesson、一会叫 materialize、一会叫 course content。人读起来像在看三本不同的书。
Matt 的解法是建一个 CONTEXT.md 作为项目级词典。他举了个例子:
改造前:”There’s a problem when a lesson inside a section of a course is made ‘real’ (i.e. given a spot in the file system)”
改造后:”There’s a problem with the materialization cascade”
第二种描述 6 个字,前者 24 个字,而且只有看过上下文的人才能懂。一个 CONTEXT.md 就能让 Agent 在整个项目里用同一套术语。
3.3 失败模式 #3:代码不工作(Feedback Loops)
“Always take small, deliberate steps. The rate of feedback is your speed limit.” — 《The Pragmatic Programmer》
Agent 最危险的习惯是一次性写一大坨 —— 一个 500 行的实现 30 秒全生成完,跑起来 23 个报错,你也不知道哪一行先坏的。
Matt 提供两个 skill:
/tdd:强制 RED-GREEN-REFACTOR—— 先写一个失败的测试,再写让测试通过的最小实现,再重构。每一步都要看到测试输出才能进下一步/diagnosing-bugs:结构化 debug 流程 ——reproduce → minimize → hypothesise → instrument → fix → regression-test,对应他systematic-debugging那一套方法论
这两个 skill 配合使用,能把 Agent 的” 代码喷泉” 模式逼成” 小步快跑” 模式。
3.4 失败模式 #4:架构变成一坨烂泥(Design Entropy)
“Invest in the design of the system every day.” — Kent Beck
Agent 加速编码的同时也加速了熵增 —— 今天一个 if-else、明天一个 magic number、后天一个全局变量,三个月后 codebase 不可维护。
Matt 的解法是两个偏架构治理的 skill:
/to-spec:改之前先 quiz 你” 要碰的模块是哪些”,先写 spec 再改/improve-codebase-architecture:每隔几天跑一次,扫整个代码库,识别可以” 加深模块” 的机会(John Ousterhout《A Philosophy of Software Design》那个” 深模块” 概念),生成可视化的 HTML 报告
这两个 skill 把架构 review 从” 靠人记得” 变成”agent 主动扫”。
四、技能地图:User-invoked vs Model-invoked
Matt 的技能体系按谁能调用分成两类,这是他和 Superpowers 最大的架构差异:
4.1 User-invoked(用户手动触发)
只有你敲命令才会跑,承担”orchestrator” 角色:
| Skill | 用途 |
|---|---|
/ask-matt |
路由器 —— 你不知道该用哪个 skill 就问它 |
/grill-with-docs |
需求对齐 + 共享语言 |
/triage |
把 issue 在状态机里推 |
/improve-codebase-architecture |
架构扫描 |
/setup-matt-pocock-skills |
每个仓库配一次(选 issue tracker、标签、文档位置) |
/to-spec |
把对话凝练成 spec |
/to-tickets |
把 spec 拆成有依赖关系的 ticket |
/implement |
按 spec/ticket 实现,驱动 /tdd,结束前自动跑 /code-review |
/wayfinder |
规划跨多个 session 的大任务,用” 决策 ticket” 作为共享地图 |
4.2 Model-invoked(Agent 自动触发)
Agent 判断” 现在该用这个 skill” 时自己调用,承担” 可复用纪律”:
| Skill | 用途 |
|---|---|
/prototype |
写一个用完就扔的 prototype 验证设计假设 |
/diagnosing-bugs |
上面那个结构化 debug |
/research |
调研问题,强制读一手资料,输出带引用的 markdown |
关键约束:user-invoked 可以调 model-invoked,但不能反过来。这个分层避免了”skill 互相调用死循环”。
五、实战示例:5 分钟上手 /tdd
光看分类不够,下面用一个真实场景演示 /tdd 怎么用。
5.1 安装
1 | # 方式一:复制源码到项目(可改) |
5.2 场景:给一个函数加新功能
假设你有一个老函数:
1 | // utils/pricing.ts |
你想加一个” 生日 7 折” 规则,但你不想让 Agent 自由发挥。
5.3 跑 /tdd
在 Claude Code 里输入:
1 | /tdd 给 calculateDiscount 加生日特惠:userType === 'birthday' 时 7 折 |
Agent 会强制按 RED-GREEN-REFACTOR 走:
Step 1:先写失败测试
1 | // utils/pricing.test.ts |
Agent 跑测试,看到 ❌ 失败(因为还没实现)。
Step 2:写最小实现让测试通过
1 | export function calculateDiscount(price: number, userType: string) { |
跑测试,看到 ✅ 通过。
Step 3:重构(如果需要)
Agent 可能会建议把折扣率抽成 map:
1 | const DISCOUNTS: Record<string, number> = { |
跑测试看仍然 ✅,收工。
整个过程没有” 自由发挥” 的空间 —— 每一步都有测试当门禁。你也不用担心 Agent 顺手把 vip 的逻辑改了 ——vip 的测试如果还过得了,REFACTOR 阶段也不会动它。
六、适用场景和限制
6.1 适合谁
- TypeScript / JavaScript 项目为主:Matt 的语境天然偏前端
- 中小型团队,不想被” 重型流程框架” 绑架
- 愿意自己改 skill 的人:
npx skills add把源码拷过来,鼓励你 fork - 已经在用 Claude Code / Codex 的开发者
6.2 不太适合
- 完全没工程背景的人:
/grill-with-docs这种 skill 假设你懂 ADR、domain model、red-green-refactor,小白用会一头雾水 - 大型 monorepo + 严格 CI 场景:Superpowers 的
subagent-driven-development+ 两阶段 review 更适合 - 非 Claude 系 Agent:
/tdd这种 skill 依赖 Claude Code 的 slash command 机制,Cursor / Codex 支持度不一
6.3 跟同类项目对比
| 项目 | 风格 | 适合 |
|---|---|---|
| mattpocock/skills | 轻、可改、4 个失败模式分类 | 个人 / 小团队,挑着用 |
| obra/superpowers | 重、有强制门禁、subagent 驱动 | 大型项目、严格流程 |
| addyosmani/agent-skills | 中、24 技能 + 8 命令、覆盖完整工程链路 | 全家桶方案 |
| anthropics/skills | 官方、市场级、偏通用 | 入门首选 |
七、总结
mattpocock/skills 的核心价值不是” 又一套 AI 编程工作流”,而是 Matt Pocock 把二十年工程经验抽象成 18 个可独立调用的技能。它不强加流程,但每个 skill 都对应一个具体的失败模式 ——“需求没说清”、” 术语不一致”、” 反馈太慢”、” 架构在熵增”。
如果你已经被 Superpowers /agent-skills 的” 完整工作流” 吓退,不妨从 Matt 的 /tdd 和 /grill-with-docs 入手 —— 两个 skill 就能立刻改变你和 Agent 的协作方式。
下一步建议:
- 先用
/tdd跑一个真实的小需求,感受” 小步快跑” - 跑一次
/grill-with-docs建CONTEXT.md,下次跟 Agent 对话时引用 - 一周后跑一次
/improve-codebase-architecture,看 HTML 报告里有什么机会
让 AI Agent 写出真实工程师会写的代码,比让它写” 看起来很厉害” 的代码重要得多。
项目地址:https://github.com/mattpocock/skills
star 数:170k+(截至 2026-07-17,今日新增 1,700+)
许可:MIT