技术AI辅助编程CodexCursorClaude CodeAgentSkills

从 Matt Pocock 的 AI Skills 看工程化 Agent 工作流

读 AIHero 的 skills changelog 和 mattpocock/skills 仓库后,整理什么是 AI Skill,以及如何在 Codex、Cursor、Claude 中把它用成稳定的工程流程

最近看到 AIHero 上 Matt Pocock 写的一篇文章:Skills changelog: ubiquitous-language -> grill-with-docs

这篇文章表面上是在讲他的 mattpocock/skills 仓库做了哪些更新,但真正有价值的地方不是“又多了几个提示词”,而是它把 AI coding agent 的使用方式拉回了工程基本功:

  • 先对齐需求,再动手写代码;
  • 用统一语言减少沟通成本;
  • 用 PRD 和 issue 拆小任务;
  • 用 TDD 和诊断流程建立反馈闭环;
  • 用 ADR 和上下文文档记录关键决策;
  • 让 agent 反复执行稳定流程,而不是每次靠临场发挥。

我会把这类 Skill 理解成“给 AI 工具用的工作手册”。它不是一句魔法咒语,而是一套可复用的流程说明:什么时候触发、先读什么文档、如何提问、如何验证、最后产出什么。

一句话理解这篇文章

Matt Pocock 的核心观点很简单:

AI 工具越强,工程纪律越重要。

如果只是让 agent “帮我实现这个功能”,它很容易进入一种看似高效、实际失控的状态:代码写得很快,但需求没对齐;改动很多,但没有验证;一次性生成一大坨代码,出了问题也不好定位。

所以他把常见工程动作做成 Skill,例如:

场景 Skill 的作用
需求不清楚 让 agent 先追问,把决策树问清楚
术语混乱 建立 CONTEXT.md,让人和 agent 使用同一套业务语言
方案太粗 生成 PRD,再拆成垂直切片的 issue
代码坏了 按“复现 -> 最小化 -> 假设 -> 加仪表 -> 修复 -> 回归测试”诊断
没有反馈 用 TDD 先写失败测试,再实现,再重构
架构变差 定期让 agent 从上下文和 ADR 中找重构机会

这和普通提示词最大的区别是:普通提示词像“临时吩咐一句”,Skill 像“团队流程规范”。前者适合一次性任务,后者适合反复使用。

这次 changelog 讲了什么

原文里有几个值得记录的变化。

第一,ubiquitous-languagegrill-with-docs 替代。

ubiquitous language 来自领域驱动设计,意思是团队、业务专家和代码都使用同一套语言。比如不要一会儿叫“课程章节”,一会儿叫“section”,一会儿叫“模块”;同一个概念应该有稳定名称。

新的 grill-with-docs 更进一步:它不只是建立术语表,还会在你准备做改动前“拷问”你的计划,把模糊点问清楚,并把沉淀下来的业务语言、架构决策写进 CONTEXT.md 和 ADR。

第二,to-prd 不再负责访谈用户。

这其实是一个很好的拆分。访谈、追问、对齐决策,应该交给 grill-megrill-with-docs。当上下文已经足够清楚时,to-prd 再把现有讨论整理成 PRD。也就是说:

grill-with-docs:把问题问清楚
to-prd:把已清楚的上下文写成产品需求
to-issues:把需求拆成可独立实现的任务
tdd / diagnose:进入实现和验证

第三,to-issues 变得更通用。

它不只支持 GitHub issue,也可以面向 Linear 或本地 Markdown 文件。这一点对个人项目很实用:不是每个想法都值得立刻进入团队 issue 系统,先写到本地 .scratchdocs/agents 里也可以。

第四,新增或强化了 setup-matt-pocock-skills

这个 Skill 的定位是每个仓库跑一次,用来告诉其他 Skill:当前项目用 GitHub、Linear 还是本地文件做 issue;有哪些 triage label;CONTEXT.md 和 ADR 放在哪里。它解决的是“同一个 Skill 到不同仓库里如何适配”的问题。

他把 Skills 分成了哪几类

仓库里的分类很有参考价值,因为它不是按“炫不炫”分类,而是按使用频率和工程位置分类。

Category 适合怎么理解 我建议怎么用
Productivity Skills 通用工作流,不限于代码 适合写作、开会、方案讨论、交接,例如 grill-mehandoffwrite-a-skill
Engineering Skills 主力技能,每天写代码会用 重点学习,适合真实工程任务,例如 diagnosegrill-with-docstddto-prdto-issues
Misc Skills 偶尔使用,还没确定长期位置 不必全装,用到再看,例如 pre-commit、脚手架、迁移工具
Deprecated 被替换或淘汰的旧技能 只用于理解历史,不建议新项目继续采用
Personal Skills 作者个人工作流 可以借鉴思路,但不要原样照搬到团队流程里

我自己的判断是:初学者不要一上来全装。先把 Engineering 里的核心链路跑通,比收藏几十个 Skill 更有价值。

最值得先学的 6 个 Skill

如果只选一小组,我建议从这 6 个开始。

Skill 什么时候用 产出
grill-me 你只有一个粗糙想法,还没想清楚取舍 一组被追问后的明确决策
grill-with-docs 要改真实代码库,而且业务术语或架构决策很重要 更新后的 CONTEXT.md、ADR、清晰方案
to-prd 讨论已经清楚,需要整理成需求文档 PRD 或 issue
to-issues PRD 太大,需要拆成可做的小任务 垂直切片 issue
tdd 要实现功能或修 bug,需要稳定反馈 失败测试、实现、重构后的代码
diagnose bug 很绕,不能靠猜 复现、最小化、假设、验证和回归测试

这 6 个串起来,就是一个很完整的 AI 工程工作流:

想法 -> 追问 -> 文档化 -> 拆任务 -> 小步实现 -> 诊断和验证

在 Codex 中怎么用

Codex 现在已经支持 Skill 这种形态。官方的理解是:Skill 把指令、资源和可选脚本打包起来,让 Codex 能稳定执行某类任务。OpenAI 也维护了一个 openai/skills 技能目录。

在 Codex 里,我会这样落地:

  1. 安装现成 Skill。
npx skills@latest add mattpocock/skills

安装时选择你真正会用的 Skill,不要为了“看起来完整”全部安装。第一次建议选:

setup-matt-pocock-skills
grill-with-docs
to-prd
to-issues
tdd
diagnose
handoff
  1. 在项目里先跑一次设置。
/setup-matt-pocock-skills

它会帮你配置 issue tracker、triage label、领域文档路径等。对 Codex 来说,这一步的意义是让后面的 Skill 不再猜项目结构。

  1. 日常使用时直接点名 Skill。

例如:

使用 /grill-with-docs,帮我梳理这个“通知服务 SSE 设计”的改造方案。
先阅读当前仓库上下文,再追问我关键决策,不要立刻写代码。

或者:

使用 /diagnose 诊断当前接口偶发 500 的问题。
要求先复现,再最小化,再提出假设,不要直接改代码。
  1. 把团队自己的流程写成项目 Skill。

如果你的团队有固定规范,比如“前端改动必须跑 Playwright 截图验证”“后端接口必须补 OpenAPI 文档”,就不要每次手写提示词。可以写成:

.codex/skills/frontend-visual-qa/SKILL.md
.codex/skills/api-contract-review/SKILL.md

这样它就变成项目资产,而不是某个人聊天记录里的经验。

在 Claude Code 中怎么用

Claude Code 对 Skill 的支持更接近 Matt Pocock 原始仓库的使用方式。很多 Skill 本来就来自他的 .claude 目录,也可以配合 CLAUDE.md 使用。

推荐做法是:

  1. 用安装器安装。
npx skills@latest add mattpocock/skills
  1. 项目根目录保留 CLAUDE.md

CLAUDE.md 适合放项目级约定,例如:

  • 常用命令;
  • 测试方式;
  • 不允许随便改的目录;
  • 业务术语入口;
  • ADR 和上下文文档位置;
  • 什么时候必须先计划,什么时候可以直接执行。
  1. 用 slash command 调用 Skill。

例如:

/grill-with-docs 我想重构支付回调处理,请先对齐领域术语和边界。
/to-issues 把刚才的 PRD 拆成 5 个以内的垂直切片任务。

Claude Code 里我最看重的是 CLAUDE.md + Skill 的组合:CLAUDE.md 负责“这个项目的长期背景”,Skill 负责“这次任务的执行流程”。

在 Cursor 中怎么用

Cursor 的形态稍微不同。它更像 IDE 里的 AI 编辑器,核心机制通常是 rules、项目上下文和对话,而不是完全等价的 Skill 目录。

所以在 Cursor 中,我建议把这些 Skill 转换成三类资产。

第一类是项目规则,放进 .cursor/rules

例如可以做一个 diagnose.mdc

当用户要求 debug、diagnose、排查 bug 或性能问题时:
1. 先复现问题。
2. 再缩小到最小失败场景。
3. 提出 1-3 个假设。
4. 用日志、测试或断点验证假设。
5. 修复后必须补回归测试。

第二类是可复制的提示模板。

例如你可以在项目里建:

docs/agents/prompts/grill-with-docs.md
docs/agents/prompts/to-prd.md
docs/agents/prompts/to-issues.md

使用 Cursor 时,把模板内容贴给 Agent,或者让 Cursor 读取这些文件再执行。

第三类是项目上下文文档。

Cursor 很适合边看代码边改,但它也需要稳定上下文。建议保留:

CONTEXT.md
docs/adr/
docs/agents/

然后在 Cursor 里明确说:

请先阅读 CONTEXT.md 和 docs/adr,再按 docs/agents/prompts/diagnose.md 的流程排查这个 bug。

也就是说,Cursor 里未必追求“安装同名 Skill”,而是把 Skill 的流程变成 rules、prompt template 和上下文文档。

我建议的个人实践路线

如果你刚开始用 Codex、Cursor 或 Claude,不要急着搭一套很复杂的 agent 系统。可以按四步来。

第一步,只建立一个 CONTEXT.md

写清楚项目是什么、核心业务概念是什么、哪些术语不要混用。这个文件越简洁越好。它不是项目百科,而是给 agent 用的领域语言入口。

第二步,只引入两个 Skill。

先用:

grill-with-docs
diagnose

一个解决“做之前没想清楚”,一个解决“坏了以后乱猜”。

第三步,再加入需求拆解。

当你发现一个需求经常聊着聊着变大,就加入:

to-prd
to-issues

这样可以把一个模糊想法拆成更小、更容易验证的任务。

第四步,把你自己的高频动作写成 Skill。

比如你的个人博客里可能有固定流程:

阅读外部文章 -> 归纳观点 -> 结合个人实践 -> 写成 Markdown -> 检查 frontmatter -> 构建验证

这就可以写成一个 blog-research-writeup Skill。以后再看到好文章,就不用每次重新解释你的写作风格和发布流程。

我的结论

Matt Pocock 这套 Skill 最值得学习的,不是某一个具体命令,而是背后的工程观:

把 AI 当成会执行流程的工程伙伴,而不是随叫随到的代码生成器。

当我们把需求澄清、领域语言、PRD、issue、TDD、诊断、ADR 这些动作做成 Skill,AI 工具就不再只是“写代码更快”,而是开始帮助我们把工程流程变得更稳定。

对个人开发者来说,这能减少重复解释。对团队来说,这能把经验沉淀成共享资产。对大型代码库来说,这能让 agent 更少误解上下文,更容易沿着正确边界做小步改动。

我会把这套方法总结成一句话:

不要只收藏提示词,要沉淀可复用的工程流程。

参考资料