跳至正文

2026 年 8 月 6 日 · 阅读时长 11 分钟

Matt Pocock 的 AI Coding Skills 工作流

Matt Pocock 的 AI Skills for Real Engineers 把需求澄清、领域建模、规格整理、任务拆分、测试驱动实现和代码审查分别做成可组合的 Skill。官方指南把它们按使用时机分组,其中「The Main Flow」是从想法走向交付的主干。

这种设计处理的是 AI 编程中三个反复出现的问题:意图没有说清、上下文越积越长、实现结果缺少独立验证。模型仍然负责推理和生成代码,但讨论结果会写入文档,复杂任务会切成可验证的纵向切片,审查也会放进独立上下文。

以下命令、目录和流程以 2026 年 8 月 6 日发布的 mattpocock/skills v1.2.3 为准;后续版本可能调整名称、安装方式和默认动作。

先区分技能库与安装器

v1.2.3 提供两种安装入口。Claude Code 可以安装托管的只读 Plugin,Codex 和其他 Agent 则通过 Vercel Labs 维护的 skills CLI 选择需要的 Skill。两种方式不要同时安装,否则同一项 Skill 会出现两份。

Claude Code Plugin 的安装命令是:

claude plugins install mattpocock-skills

Codex 和其他 Agent 使用:

npx skills@latest add mattpocock/skills

交互式安装会选择具体 Skill、目标 Agent、安装范围和连接方式。使用 CLI 时,应确保选中 setup-matt-pocock-skills。当前安装器的关键选项如下:

选择适用情况结果
Project,默认团队项目Skill 保存在项目范围,可随仓库共享和审查
Global,-g个人跨项目使用Skill 放在用户目录,对多个项目可见
Symlink,推荐本机文件系统支持符号链接多个 Agent 指向同一份 Skill,更新位置集中
Copy,--copy环境不支持符号链接每个 Agent 持有独立副本,需要分别维护

团队优先选择 Project,因为 Skill 本身包含流程、术语和质量门槛,属于项目开发契约的一部分。项目级文件可以随仓库共享,成员和 Agent 能使用同一套配置,也能通过 Git 审查修改。Global 更适合个人偏好或多个仓库都需要的通用能力。

Main Flow 之前先完成 Setup

setup-matt-pocock-skills 属于「Getting Started」,不是「The Main Flow」的一环。安装完成后,需要在每个目标仓库调用一次:

/setup-matt-pocock-skills

这个 Skill 不修改其他 SKILL.md,而是把仓库差异写进 docs/agents/。它主要确定三件事:

  1. Issue tracker 在哪里。GitHub、GitLab 和本地 Markdown 有内置模板;Jira、Linear 等系统通过「Other」记录自定义操作流程。

  2. Triage labels 如何映射。只有安装了 triage 时才会生成对应配置,默认角色包括 needs-triageneeds-infoready-for-agentready-for-humanwontfix

  3. Domain docs 如何组织。绝大多数仓库使用根目录 CONTEXT.mddocs/adr/;检测到大型 monorepo 信号后,才会提供 CONTEXT-MAP.md 与多上下文布局。

Setup 还会在已有的 CLAUDE.mdAGENTS.md 中加入 ## Agent skills 指针。当前选择规则是优先修改已存在的 CLAUDE.md,其次是 AGENTS.md;两者都不存在时再询问创建哪一个。

这一步为每个仓库建立独立契约。Issue 存放位置、领域术语和架构决策都与代码库绑定,应当进入版本控制。完成 Setup 后,主流程中的 to-specto-ticketsimplement 才不需要猜测 tracker 和领域文档的位置。

两类 Skill 控制上下文开销

当前仓库按调用权限区分两类 Skill:

类型如何触发负责什么
User-invoked开发者显式输入 /skill-name编排流程、提出分支问题、决定下一步调用什么
Model-invoked开发者调用,或 Agent 根据任务自动选择提供 TDD、研究、领域建模和代码设计等可复用方法

User-invoked Skill 通常带有 disable-model-invocation: true,Agent 不会自行触发。它们的描述只需支持发现和路由,完整流程等到显式调用后才进入上下文,从而减少常驻指令对上下文窗口的占用。

主流程如何运行

AIHero 将「The Main Flow」定义为按顺序衔接的 idea → ship 主干:

grill-with-docs → to-spec → to-tickets → implement → code-review

ask-matt 同样属于「Getting Started」。它是覆盖整个技能库的手写路由器,不是主流程中的第六步:不知道下一步调用哪个 Skill 时,用它取得建议;已经确定目标 Skill 时可以直接调用。

Matt Pocock AI Coding Skills 的多会话主流程,从想法经过访谈、Spec 和 Tickets,进入实现与双轴审查
图中只画多会话路径;单会话任务可在访谈后直接进入 implement。

完整流程展示的是多会话路径。已经决定的工作能在一个新的 context window 中完成时,可以从访谈直接进入 implement;需要跨会话时,再用 Spec 保存决定、用 Tickets 组织执行。

1. grill-with-docs:先形成共享语言

grill-with-docs 是主流程的起点,适合在仓库内处理能够在一个会话中澄清的计划。它调用 grilling 进行分轮访谈,同时使用 domain-modeling 维护领域文档。Agent 不只提问,还会扫描代码库、核对已有术语,并把已经确认的信息写入:

  • CONTEXT.md:定义领域词汇,以及应避免的近义词;

  • docs/adr/:记录重要架构决定、背景和后果;

  • CONTEXT-MAP.md:仅在多上下文仓库中指向相关领域文档。

这三类结果并不等价。术语在确认时立即进入 CONTEXT.md;只有同时满足「难以逆转、脱离背景会令人意外、存在真实权衡」的决定才进入 ADR;其余决定只保留在当前会话中。因此,访谈结束后应直接把同一会话交给 to-spec,或者在工作足够小时直接调用 implement,不能把 glossary 当成完整规格。

深度访谈的价值在于提前暴露分支:角色是谁、行为边界在哪里、旧数据如何迁移、失败后如何恢复、哪些条件可以验收。实现前解决这些问题,成本通常只是一次讨论;代码生成后再发现理解不同,修改会扩散到接口、数据结构和测试。

访谈也不能替代验证。事实可以从代码、日志和文档中查证,产品取舍仍要由负责决定的人确认。CONTEXT.md 只记录稳定术语,不适合堆放完整聊天记录。

2. to-spec:把讨论压缩成终点定义

to-spec 只在工作需要跨越多个会话时体现价值。它把刚刚达成一致的会话整理成一张 Spec issue,不重新做需求访谈,也不验证或发明决定。它会先提出尽量少、尽量高层且优先复用现有边界的测试 seam,等待确认后再写正文。当前模板包括:

  • Problem Statement 与 Solution;

  • 完整的 User Stories;

  • Implementation Decisions;

  • Testing Decisions;

  • Out of Scope 与 Further Notes。

它要求描述模块、接口、契约和测试决定,但默认不写具体文件路径或实现代码,因为这些细节在开发过程中最容易失效。Spec 描述的是完成后的外部行为和关键决定,为后续会话提供稳定终点。任何从未在上游讨论中确认、却由模型补入 Spec 的内容,都应视为缺陷。

这也是一次上下文压缩。数万 token 的讨论包含尝试、否定和重复解释,Spec 只保留已经确认的结论。压缩会丢失信息,因此应在同一会话中完成访谈、Spec 和 Tickets;如果会话接近 Smart Zone,再选择最近的阶段边界执行 /compact

3. to-tickets:按可验证纵向切片拆分

to-tickets 可以读取 Spec、当前会话中的计划,或一份已经明确的方案,再把工作拆成可以单独验证的纵向切片。每个 Ticket 都是 tracer bullet,贯穿完成一种行为所需的层次。「先数据库、再 API、最后 UI」这类水平拆分不符合它的默认规则。例如,第一张 Ticket 可以只交付一种最小订单路径,但要同时包含必要的数据、接口、界面和测试。

在写入 tracker 前,它会先检查是否需要 prefactoring,再用编号列表展示拆分结果和依赖关系,等待开发者确认粒度、合并或拆分建议。每张 Ticket 都应能回答「完成后可以演示什么」,且答案必须是一项行为,而不是某个技术层。

每张 Ticket 还要声明 blocking edges。没有 blocker 的 Ticket 可以立即开始;有依赖的 Ticket 只有在前置工作完成后才进入可执行状态。本地 tracker 会把它们保存为 .scratch/<feature>/issues/<NN>-<slug>.md,真实 tracker 则尽量使用原生依赖关系。

Ticket 大小以「能否在一个新的上下文窗口中完成」为准,不用固定行数衡量。当前 ask-matt 把 Smart Zone 描述为先进模型仍能清晰推理的约 150k tokens 区间。这个数值属于工作流的经验阈值;模型、Agent 运行环境、工具输出和任务类型都会改变有效范围。

纵向切片提高了局部可验证性,也会增加规划和依赖管理成本。机械式的大范围重命名很难保持每个切片独立通过,to-tickets 对这类 Wide Refactor 使用 expand-contract:先兼容新旧形式,再分批迁移调用方,最后删除旧形式。

4. implement:一次只完成一张 Ticket

implement 消费已经决定的计划,不重新讨论方案。一次运行只处理一张 Ticket:先读取 Ticket 或 Spec,在预先确认的 seam 上调用 tdd,按 red-green slice 实现,过程中反复运行类型检查和单个测试,结束前再运行完整测试套件。它不会创建分支,也不会关闭 Ticket、勾选 acceptance criteria 或自动处理 review findings,最后会提交到当前分支。

这个自动提交行为需要提前纳入仓库规则。若团队要求人工批准 commit,应在 AGENTS.mdCLAUDE.md 中写明,不能假设所有 Skill 都采用相同的 Git 授权边界。多张 Ticket 可以分配到不同的新会话,但不能让多个会话共享同一 working tree、index 和 HEAD 后并发提交;需要并行时,应为每项工作准备独立 worktree 和分支。

5. code-review:分别检查 Standards 与 Spec

code-review 沿两个轴检查从固定 Git 基准点到 HEAD 的差异:

审查轴判断依据主要问题
Standards仓库编码规范与 Fowler code smells 基线实现是否清楚、局部、符合项目约定
Spec原始 Issue 或 Spec需求是否遗漏、实现错误或出现范围外改动

两个审查轴由独立子 Agent 执行,最后并列汇总,各自报告最严重的问题,不合并成一个总分。独立上下文可以减少两个审查维度相互影响,也能防止「代码很整洁」掩盖「实现了错误需求」。

当前 implement 会在 commit 前调用 code-review,但 code-review 使用 <fixed-point>...HEAD,看不到 staged 或 working tree 中尚未提交的改动。更可靠的做法是在 commit 后,用新的会话给出明确 fixed point 再独立审查;修复 findings 后追加 commit 或 amend。即使审查没有发现问题,客观正确性仍需由测试、类型检查、真实运行结果和人工判断共同证明。

用文档保存跨会话状态

这套工作流把不同类型的状态放进不同载体:

载体保存什么回答的问题
CONTEXT.md稳定领域术语项目中的词具体指什么
ADR难以轻易逆转的架构决定当时为什么这样选择
Spec目标行为、范围和测试决定最终要交付什么
Tickets纵向切片与依赖关系下一步可以执行什么
代码与测试当前实现和可重复证据系统现在实际做什么

这些文件共同承担跨会话状态,但它们的权威范围不同。使用某个 Skill 时,具体 SKILL.md 高于 ask-matt 的摘要;判断需求时,已批准 Spec 高于旧聊天片段;判断系统现状时,代码、测试和运行结果高于过期文档。

ask-matt 是流程路由,不是每项 Skill 的完整说明。只要某条建议会影响任务拆分、提交或发布,就应打开对应的 AIHero Skill 指南 和目标 SKILL.md 核对,路由摘要只用于定位下一步。

怎样按任务规模采用

这套流程可以逐步引入,不必一次安装全部 Skill。

对于一个会话内能完成的小功能,可采用:

setup(每个仓库一次)
→ grill-with-docs
→ implement
→ 在新会话中 code-review
→ verify

对于跨多个会话的功能,可采用:

setup(每个仓库一次)
→ grill-with-docs
→ to-spec
→ to-tickets
→ 每张 Ticket 开新会话运行 implement
→ 更新 Ticket 状态
→ 独立 code-review 与集成验证

对于还无法通过讨论回答的状态模型、业务逻辑或 UI 问题,先用 handoff → prototype → handoff 做一次可运行实验,再回到原流程。对于更庞大且方向仍不清楚的 Greenfield 项目或大型功能,当前仓库还提供 wayfinder,先用 Decision Tickets 消除关键未知项,再进入 to-spec

第一次实践时,最好选择一项边界清楚、能够运行测试、又确实需要澄清需求的真实改动。完成后检查四件事:领域术语是否更统一,Spec 是否删掉了讨论噪声,每张 Ticket 是否能单独验收,双轴审查是否发现了不同类型的问题。只有这些结果成立,流程成本才有实际回报。

参考资料

CO

我是 Cooper,一名生活在中国的开发者,多年来一直在家远程工作。

主要使用 Go、PHP 和 Rust,从事移动端、Web、跨境支付与资金系统开发。目前主要采用 Vibe Coding 构建产品,并以真实运行结果完成验证与交付。