Matt Pocock 每天做真工程用的 38 个 skill
mattpocock/skills
Total TypeScript 作者的日常自用集:38 个 SKILL.md(engineering 20、productivity 7、misc 4 冻结、in-progress 7),建立在 user/model-invoked 调用契约、SCOPE.md 准入门槛与共享 GLOSSARY.md 之上;可以 Claude Code/Codex/Copilot/Gemini 插件或 skills.sh 可编辑副本安装。
编辑判断卖零件不卖流程:38 个 SKILL.md 背后是严格的 user/model-invoked 调用契约、SCOPE.md 准入门槛与共享 GLOSSARY.md;to-spec→to-tickets→implement-spec 是本频道最完整的 agentic 工程闭环。
claude plugin install mattpocock-skills@claude-plugins-official定位:给真工程师的 skill,不是 vibe coding
这是 Matt Pocock(Total TypeScript 作者)每天自用的 skill 集,仓库原话:"My agent skills that I use every day to do real engineering - not vibe coding." 截至 2026-10-14 约 289.9k stars / 24.3k forks,MIT 协议,主语言 Shell——因为产物本身是一套 Markdown 指令集,外加薄薄一层脚本与插件清单,而不是代码库。
这里最有价值的立场,是对「接管流程」类框架的拒绝。README 点名 GSD、BMAD、Spec-Kit:它们靠接管整个流程来帮你,代价是你失去控制权,流程里出了 bug 也极难定位。他的替代方案是三个属性——small、easy to adapt、composable——并明确写着这些 skill 适用于任何模型、期望你把它改造成自己的。
38 个 SKILL.md、四个桶、一条调用契约
| 桶 | 数量 | 内容 |
|---|---|---|
| engineering | 20 | 用户调用:ask-matt、grill-with-docs、triage、improve-codebase-architecture、setup-matt-pocock-skills、to-spec、to-tickets、implement、implement-spec、wayfinder、retro;模型调用:prototype、diagnosing-bugs、research、tdd、domain-modeling、codebase-design、code-review、pr、wizard |
| productivity | 7 | 用户调用:grill-me、handoff、teach、to-questionnaire、wait-what;模型调用:grilling、writing-for-agents |
| misc | 4 | git-guardrails-claude-code、migrate-to-shoehorn、scaffold-exercises、setup-pre-commit。按政策冻结、不再维护,相关 issue 一律关闭 |
| in-progress | 7 | chief-of-staff、claude-handoff、loop-me、setup-ts-deep-modules、writing-beats、writing-fragments、writing-shape。故意公开的 beta,不进插件 |
真正重要的划分不是桶,而是谁可以调用。用户调用型 skill 带 disable-model-invocation: true(并在 agents/openai.yaml 里加 policy.allow_implicit_invocation: false),只有你亲手敲出来才会触发,职责是编排;模型调用型 skill 承载可复用的纪律,任务匹配时 agent 可以自动取用。用户调用型可以调用模型调用型,但绝不能调用另一个用户调用型;.agents/invocation.md 还要求跨 skill 引用必须写成 Call the Skill tool with "name",而不是「run the /grilling skill」这类散文——散文引用会静默加载失败。PR #878 把这条约定标准化,PR #880 清掉了用它去够用户调用型 skill 的六处调用点(to-spec、wayfinder、to-tickets、triage、code-review、diagnosing-bugs)。
拷问家族:先让 agent 问你
grill-me 与 grill-with-docs 是作者最受欢迎的 skill:对你的计划或设计做不留情面的面试,直到设计树的每个分支都被解决。grilling 是背后的可复用模型调用原语,grill-me、grill-with-docs、triage、wayfinder、improve-codebase-architecture 都建立在它之上。wait-what 跑的是反方向:某句话没看懂的瞬间触发它,agent 会用你 GLOSSARY.md 里的词汇把这句话重新讲明白。to-questionnaire 则把「你一个人答不了的决定」变成一份异步 Markdown 问卷,交给唯一能回答的人——它拷问的是「这次发送」而不是主题本身。
GLOSSARY.md:把共享语言当基础设施
论证直接来自领域驱动设计:项目开始时开发者与领域专家说着不同语言,而被丢进仓库的 agent 只能边猜边用术语,于是用 20 个词说 1 个词就够了的事。解法是一份 skill 会去读的术语表,让项目约定不必在每个 prompt 里重复。README 的例子把「课程某个 section 里的一节课被'做实'(即在文件系统里拿到一个位置)」压缩成「materialization cascade 出了问题」,而这种简洁会在一次又一次会话里持续回本:命名一致、代码库更好导航、agent 思考花的 token 也更少。
仓库自己也在吃这套狗粮。根目录的 GLOSSARY.md(早期 CONTEXT.md 约定的后继)定义了 Issue tracker、Issue、Decision ticket、Triage role,写明彼此关系,并记录已裁决的歧义——比如彻底弃用「backlog」。grill-with-docs 在面试你的同时内联地 build 这份术语表与 ADR;domain-modeling 之后继续用边缘场景压力测试、打磨术语。作者称它是整个仓库里最酷的一个技巧。
从想法到合并:spec、ticket、implement 流水线
engineering 桶串成了一条完整闭环。to-spec 不做面试,直接把当前对话综合成 spec;to-tickets 把任何计划/spec/对话拆成声明了阻塞边的 tracer-bullet 工单;implement 按预先约定的 TDD 接缝一次做一个工单,收尾前跑 code-review;1.3.0 从 in-progress 毕业进 engineering 的 implement-spec 则在一条集成分支上吃掉整张工单图——在「就绪前沿」上并发跑后台 implementer 子代理,彼此只用上下文指针沟通、不复制内容。再往上是 wayfinder:对付比一次 agent 会话更大的工作,把计划画成 issue tracker 上一张「决策工单」共享地图,逐个决议直到路径清晰。retro 与 pr 负责收尾:前者在会话后按严重度审计 agent 环境(导航、自动检查、编码规范、steering 文件、工具链),后者规定 PR 正文的形状——先给最小的能说清改动的视觉摘要,再给前后证据,并明确判定这是一单向门还是双向门合并、爆炸半径多大。
反馈回路同样被纪律化。tdd 强制红-绿-重构、一次只切一条垂直片,并教 agent 什么是好测试与坏测试;diagnosing-bugs 是分阶段闸门的循环(先建一个对该 bug 变红的反馈回路 → 最小化 → 假设 → 插桩 → 修复 → 回归测试);code-review 跑两个并行子代理,一个查仓库标准加 Fowler 臭味基线、一个查是否忠实实现原 spec,互不污染;improve-codebase-architecture 按 John Ousterhout 的「深模块」(大量行为藏在小接口后面)巡检代码库的加深机会,把候选项做成可视化 HTML 报告——它明说自己是体检而不是抢救。
准入门槛、冻结的 misc、五条安装路径
SCOPE.md 故意把集合保持得很小:issue 只有同时满足真实会话中观察到的失败(跑了什么、skill 做了什么、你期望什么)与符合哲学才会保持打开;假设性改进直接关闭,+1 与表情不算数;.out-of-scope/ 把每一个被拒概念连同理由公开存档,从冻结 misc 到 subagent 递归。晋升桶里的 skill 在 aihero.dev/skills-<name> 有一页面向人的文档,固定四节(做什么、何时用、常见问题、什么样算生效);仓库甚至全文禁用 em-dash——每句话手工重写,而不是机械替换字符。
# Claude Code(插件,自动更新)
claude plugin install mattpocock-skills@claude-plugins-official
# Codex(启动时自更新)
codex plugin marketplace add mattpocock/skills
codex plugin add mattpocock-skills@mattpocock
# GitHub Copilot CLI / VS Code
copilot plugin marketplace add mattpocock/skills
copilot plugin install mattpocock-skills@mattpocock
# Gemini CLI(按桶安装,更新时重跑两条)
gemini skills install https://github.com/mattpocock/skills.git --path skills/engineering
gemini skills install https://github.com/mattpocock/skills.git --path skills/productivity
# 其他 agent 的可编辑副本(cursor, opencode, devin, windsurf, amp, pi)
npx skills@latest add mattpocock/skills -a <agent>
无论选哪条路,每个仓库都要跑一次 /setup-matt-pocock-skills:它记录你用哪个 issue tracker、triage 打哪些标签、文档放哪里,之后所有 engineering skill 都读这份配置而不是硬编码 GitHub。README 还提醒:插件路线与 skills.sh 路线是二选一,两个都装会把每个 skill 装两遍。
我们的判断
与 Superpowers 这类整套流程的 harness 相比,这个仓库是零件抽屉:code-review、diagnosing-bugs、tdd 每一个都能单独拿走,不必买下整套方法论——这才是「composable」在实践里的意思。纪律需要你自己供给,而这正是设计意图而非缺陷。即便一个 skill 都不装,也有两件制品值得直接偷走:user-invoked / model-invoked 调用契约及其「按名字 call the Skill tool」规则,以及 SCOPE.md 加 .out-of-scope/ 存档——它们把取舍决策变成可见的,而不是沉默的。