真正工程师的 Agent 技能集
本文目录
Skills For Real Engineers(真正工程师的技能)#
我每天用来做真正工程——而不是氛围编程(vibe coding)——的智能体技能。
开发真正的应用很难。GSD、BMAD 和 Spec-Kit 这类方案试图通过掌控流程来提供帮助。但在这样做的同时,它们夺走了你的控制权,并让流程中的缺陷难以解决。
这些技能被设计得小巧、易于改编且可组合。它们适用于任何模型。它们建立在数十年的工程经验之上。随便改造它们。让它们成为你自己的。祝玩得开心。
如果你想跟上这些技能的变化,以及我创建的任何新技能,可以加入我的邮件简报,与约 60,000 名其他开发者一起:
订阅邮件简报
安装(30 秒完成设置)#
插件会自我更新。skills.sh 会把可编辑文件复制到你的项目中,你需要手动更新它们。每个 Agent 只选一种方式,因为两种都装会让每个技能出现两次。
1. 获取技能#
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
然后,一次性添加到 ~/.copilot/settings.json:
{
"extraKnownMarketplaces": {
"mattpocock": { "source": { "source": "github", "repo": "mattpocock/skills" }, "autoUpdate": true }
}
}
在 VS Code 中,运行 Chat: Install Plugin From Source,然后输入 https://github.com/mattpocock/skills。它每天更新。
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,或可编辑文件(手动更新)
npx skills@latest add mattpocock/skills -a <agent> # cursor, opencode, devin, windsurf, amp, pi; omit -a to choose
当安装器询问要采用哪些技能时,请包含 setup-matt-pocock-skills。要更新,请运行 npx skills@latest update,并重新运行 add 以获取新技能。
2. 运行 /setup-matt-pocock-skills#
在你的 Agent 中,每个仓库运行一次。它会:
- 询问你想使用哪个问题追踪器(GitHub、GitLab、本地文件,或你描述的任何其他工具)
- 询问你在分诊(triage)工单时会应用哪些标签(
/triage会使用标签) - 询问你希望把我们创建的任何文档保存在哪里
3. 砰——准备就绪。#
为什么要有这些技能#
我构建这些技能,是为了修复我在 Claude Code、Codex 和其他编程 Agent 上看到的常见失败模式。
问题一:Agent 没有按我的意思做#
「没有人确切知道自己想要什么。」 —— 大卫·托马斯(David Thomas)与安德鲁·亨特(Andrew Hunt),《程序员修炼之道》(The Pragmatic Programmer)
问题所在。 软件开发中最常见的失败模式是错位(misalignment)。你以为开发者知道你想要什么。然后你看到他们做出来的东西——才意识到对方根本没理解你。
在 AI 时代,情况完全一样。你和 Agent 之间存在沟通鸿沟。解决办法是一场「拷问」会话(grilling session)——让 Agent 就你正在构建的东西向你提出详细问题。
解决办法是使用:
/grill-me—— 用于非代码场景/grill-with-docs—— 与/grill-me相同,但增加了更多好东西(见下文)
这些是我最受欢迎的技能。它们帮助你在开始之前与 Agent 对齐,并深入思考你正在做的变更。每次你想做改动时都用它们。
问题二:Agent 太啰嗦了#
「使用无处不在的语言(ubiquitous language)时,开发者之间的对话和代码的表达都源自同一个领域模型。」 —— 埃里克·埃文斯(Eric Evans),《领域驱动设计》(Domain-Driven-Design)
问题所在: 在项目开始时,开发者与软件的使用者(领域专家)通常说着不同的语言。
我在与 Agent 协作时也感受到同样的张力。Agent 通常被丢进一个项目,然后被要求边做边弄清楚行话。所以它们会用 20 个词来表达 1 个词就能表达的内容。
解决办法是共享语言。 它是一份帮助 Agent 解码项目中所用行话的文档。
示例
这里有一个示例词汇表(在那个固定提交中仍名为 CONTEXT.md,早于技能重命名这一约定),来自我的 course-video-manager 仓库。哪一个更容易读?
之前:「课程某个章节里的一节课被变成『真实』的(也就是在文件系统中获得一个位置)时会出现问题」
之后:「物化级联(materialization cascade)出了问题」
这种简洁性会在一次又一次的会话中带来回报。
这已内置于 /grill-with-docs。它是一场拷问会话,但能帮助你与 AI 建立共享语言,并在 ADR(架构决策记录)中记录难以解释的决策。
很难描述这有多强大。它可能是这个仓库里最酷的单一技术。试试看吧。
提示
共享语言除了减少啰嗦之外,还有许多其他好处:
- 变量、函数和文件都使用共享语言进行一致的命名
- 因此,代码库对 Agent 来说更容易导航
- Agent 在思考上花费的 token 也更少,因为它可以使用更简洁的语言
问题三:代码跑不起来#
「始终迈出小而审慎的步伐。反馈的速率就是你的速度上限。永远不要承担过于庞大的任务。」 —— 大卫·托马斯(David Thomas)与安德鲁·亨特(Andrew Hunt),《程序员修炼之道》(The Pragmatic Programmer)
问题所在: 假设你和 Agent 已经就构建什么达成一致。如果 Agent 仍然产出垃圾,会怎样?
该看看你的反馈回路了。如果无法获得关于所生成代码实际运行情况的反馈,Agent 就是在盲飞。
解决办法: 你需要常规的一组反馈回路:静态类型、浏览器访问和自动化测试。
对于自动化测试,红-绿-重构(red-green-refactor)循环至关重要。这就是让 Agent 先写一个失败的测试,然后再修复该测试。这有助于给 Agent 提供一致水平的反馈,从而产生好得多的代码。
我构建了一个 /tdd 技能,你可以把它接入任何项目。它鼓励红-绿-重构,并在什么是好测试、什么是坏测试方面为 Agent 提供大量指导。
对于调试,我还构建了一个 /diagnosing-bugs 技能,它把最佳调试实践包装成一个有纪律的循环,并按阶段设卡推进。
问题四:我们造了一坨泥球#
「每天都要投资于系统的设计。」 —— 肯特·贝克(Kent Beck),《解析极限编程》(Extreme Programming Explained)
「最好的模块是深(deep)的。它们允许通过一个简单的接口访问大量功能。」 —— 约翰·奥斯特豪特(John Ousterhout),《软件设计哲学》(A Philosophy Of Software Design)
问题所在: 大多数用 Agent 构建的应用都很复杂且难以修改。因为 Agent 能大幅加速编码,它们也加速了软件熵(software entropy)。代码库以空前的速度变得更加复杂。
解决办法是对 AI 驱动开发采取一种全新的激进方式:关心代码的设计。
这已内置于这些技能的每一层:
/to-spec会在创建规格说明之前,拷问你正在触及哪些模块- 关键在于,
/improve-codebase-architecture会巡查代码库中「加深」(deepening)的机会,并把候选者交给你。我建议每隔几天对你的代码库运行一次。它是一次勘查,而不是一次拯救:在真正老旧的代码库上,它会找到真实的候选者,但不会替你理顺那团泥。
总结#
软件工程基础比以往任何时候都更重要。这些技能是我尽最大努力,把这些基础提炼成可重复的实践,帮助你交付职业生涯中最好的应用。祝你玩得开心。
参考#
这些技能沿一个维度划分:谁能调用它们。用户调用型技能只有在你输入它们时才可达(例如 /grill-me);它们的职责是编排。模型调用型技能既可以由你调用,也可以在任务合适时由 Agent 自动使用;它们承载可复用的纪律。用户调用型技能可以调用模型调用型技能,但绝不能调用另一个用户调用型技能。
工程(Engineering)#
我每天用于代码工作的技能。
用户调用型
- ask-matt:询问哪个技能或流程适合你的情况。它是覆盖本仓库用户调用型技能的路由器。
- grill-with-docs:一场拷问会话,同时构建你项目的领域模型,打磨术语,并内联更新
GLOSSARY.md和 ADR。 - triage:让问题(issue)在分诊角色的状态机中流转。
- improve-codebase-architecture:扫描代码库以寻找「加深」机会,以可视化 HTML 报告呈现,然后针对你选中的那一项进行拷问。
- setup-matt-pocock-skills:为工程技能配置本仓库(问题追踪器、分诊标签、领域文档布局)。每个仓库在使用其他工程技能之前运行一次。
- to-spec:把当前对话变成一份规格说明,并发布到问题追踪器。不进行访谈,只是综合你已讨论过的内容。
- to-tickets:把任何计划、规格说明或对话拆成一组「曳光弹」(tracer-bullet)工单,每个工单声明其阻塞边(blocking edges),以文本形式写入本地文件,或作为真实追踪器上的原生阻塞链接。
- implement:构建规格说明或一组工单所描述的工作,在事先约定的接缝处驱动
/tdd,并在提交前以/code-review收尾。 - implement-spec:在一个集成分支上实现整个规格说明。它把工单当作任务图来处理,在就绪前沿(ready frontier)上运行实现者子代理以获得最大并发,然后以
/code-review收尾。 - wayfinder:把一个超出单个 Agent 会话容量的大块工作,规划成问题追踪器上决策工单的共享地图,并逐个解决,直到通往目的地的道路清晰为止。
- retro:在一次会话之后,为编程 Agent 的环境(导航、自动化检查、编码标准、引导文件、工具)提出改进建议,最严重的排在前面。
模型调用型
- prototype:构建一个用完即弃的原型来回答设计问题——针对状态/逻辑问题,可以是单个可分享的 HTML 文件;也可以是几个截然不同的 UI 变体,从同一路由切换。
- diagnosing-bugs:针对疑难缺陷和性能回归的有纪律诊断循环:建立一个会因此缺陷而变红的反馈回路 → 最小化 → 假设 → 插桩 → 修复 → 回归测试。
- research:针对高可信度的一手来源调查一个问题,并把发现记录为仓库中带引用的 Markdown 文件,以后台 Agent 方式运行。
- tdd:带红-绿-重构循环的测试驱动开发。一次一个垂直切片地构建功能或修复缺陷。
- domain-modeling:主动构建并打磨项目的领域模型:对照词汇表质疑术语,用边缘案例场景做压力测试,并内联更新
GLOSSARY.md和 ADR。 - codebase-design:用于设计「深模块」(deep modules)的共享纪律与词汇:大量行为藏在一个小接口之后,放在干净的接缝处,并可通过该接口测试。
- code-review:从固定点起对差异(diff)进行双轴评审:标准(Standards,是否遵循仓库的编码标准,外加 Fowler 坏味道基线?)与规格(Spec,是否忠实实现了源问题/规格说明?),以并行子代理运行,互不污染。
- pr:一个拉取请求正文应有的形态:用最小的可视化形式让变更清晰呈现的摘要、证明其有效的变更前后证据,以及合并危险判定(单向门还是双向门,外加影响范围)。
- wizard:生成一个交互式 bash 向导,引导人类完成只有他们才能执行的步骤:配置基础设施、设置凭证或 CI 密钥、操作陌生的第三方仪表盘,或执行一次性迁移或切换。
生产力(Productivity)#
通用工作流工具,不特定于代码。
用户调用型
- grill-me:就一个计划或设计接受不留情面的访谈,直到设计树的每个分支都被解决。
- handoff:把当前对话压缩成一份交接文档,以便另一个 Agent 继续工作。
- teach:在多次会话中教用户一项新技能或概念,把当前目录作为有状态的教学工作区。
- to-questionnaire:把你无法独自回答的决策,变成一份给唯一能回答它的人的 Markdown 问卷,可异步填写,也可在会议中一起填写。它拷问的是你「发送」这件事(发给谁、你需要拿回什么),而不是主题本身。
- wait-what:某条消息没被理解的那一刻就触发。Agent 会使用你缺失的上下文、用平实的语言、借用你
GLOSSARY.md中的词汇重新讲一遍。
模型调用型
- grilling:就一个计划、决策或想法不留情面地访谈用户,直到设计树的每个分支都被解决。它是
grill-me、grill-with-docs、triage、wayfinder和improve-codebase-architecture背后的可复用访谈原语。 - writing-for-agents:为 Agent 撰写文档:技能、
AGENTS.md/CLAUDE.md,以及任何 Agent 通过指针访问的文档。