Matt Pocock 的 skills:把 "真实工程师" 的开发直觉装进 AI Agent

一、为什么 AI 写出来的代码总是” 差点意思”

上个月我用 Claude Code 重构一个老模块,让它” 把这段命令式代码改成函数式”。它一上来就动手,5 秒后给我返回了一个 200 行的” 重构版”—— 命名、抽象边界、控制流全都变了,但没人能解释清楚它为什么要这么改。我追问了一句” 为什么这里要 flatten 而不是 map”,它立刻改口说” 其实 map 也可以”,又退回去了。

这不是模型的锅,是流程的锅

真实工程师接到一个改重构需求时,会下意识做四件事:

  1. 先问清楚边界 —— 这个改动影响哪些模块、有没有外部依赖
  2. 用团队统一的术语描述问题 —— 避免” 实现一下” 这种含混表达
  3. 写一个失败的测试,再写让测试通过的代码
  4. 反思改动有没有让架构变” 烂”—— 模块深度是否还在

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 .claude directory.”

这不是又一个”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
2
3
4
5
6
# 方式一:复制源码到项目(可改)
npx skills@latest add mattpocock/skills

# 方式二:装成 Claude Code 只读插件(始终最新版)
/plugin marketplace add mattpocock/skills
/plugin install mattpocock-skills@mattpocock

5.2 场景:给一个函数加新功能

假设你有一个老函数:

1
2
3
4
5
6
// utils/pricing.ts
export function calculateDiscount(price: number, userType: string) {
if (userType === 'vip') return price * 0.8;
if (userType === 'premium') return price * 0.9;
return price;
}

你想加一个” 生日 7 折” 规则,但你不想让 Agent 自由发挥

5.3 跑 /tdd

在 Claude Code 里输入:

1
/tdd 给 calculateDiscount 加生日特惠:userType === 'birthday' 时 7 折

Agent 会强制按 RED-GREEN-REFACTOR 走:

Step 1:先写失败测试

1
2
3
4
5
6
7
8
// utils/pricing.test.ts
import { calculateDiscount } from './pricing';

describe('calculateDiscount', () => {
it('applies 30% off for birthday users', () => {
expect(calculateDiscount(100, 'birthday')).toBe(70);
});
});

Agent 跑测试,看到 ❌ 失败(因为还没实现)。

Step 2:写最小实现让测试通过

1
2
3
4
5
6
export function calculateDiscount(price: number, userType: string) {
if (userType === 'birthday') return price * 0.7; // ← 新加这一行
if (userType === 'vip') return price * 0.8;
if (userType === 'premium') return price * 0.9;
return price;
}

跑测试,看到 ✅ 通过。

Step 3:重构(如果需要)

Agent 可能会建议把折扣率抽成 map:

1
2
3
4
5
6
7
8
9
const DISCOUNTS: Record<string, number> = {
birthday: 0.7,
vip: 0.8,
premium: 0.9,
};

export function calculateDiscount(price: number, userType: string) {
return price * (DISCOUNTS[userType] ?? 1);
}

跑测试看仍然 ✅,收工。

整个过程没有” 自由发挥” 的空间 —— 每一步都有测试当门禁。你也不用担心 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 的协作方式

下一步建议:

  1. 先用 /tdd 跑一个真实的小需求,感受” 小步快跑”
  2. 跑一次 /grill-with-docsCONTEXT.md,下次跟 Agent 对话时引用
  3. 一周后跑一次 /improve-codebase-architecture,看 HTML 报告里有什么机会

让 AI Agent 写出真实工程师会写的代码,比让它写” 看起来很厉害” 的代码重要得多。


项目地址https://github.com/mattpocock/skills
star 数:170k+(截至 2026-07-17,今日新增 1,700+)
许可:MIT