AI-Native SDLC · Best Practices

AI 原生软件开发生命周期
mattpocock/skills 工作流程与技能全景

以 mattpocock/skills("Skills For Real Engineers")为蓝本,整理出一条从「模糊想法」到「可合并代码」的完整工作流程:每个环节做什么、用哪个技能、为什么这样设计,以及可直接落地的检查清单。附录逐一讲解全部 37 个技能。

蓝本:mattpocock/skills 37 个技能 · 5 个分类桶 适用:Claude Code / Codex / 任意编码智能体 生成日期:2026-09-21
Section 01

设计哲学:先理解它反对什么

这套技能的设计者 Matt Pocock(Total TypeScript 作者)的立场很明确:GSD、BMAD、Spec-Kit 这类"全流程框架"试图接管开发过程,代价是你失去了控制权,流程出了 bug 也难以修复。这套技能反其道而行——小、易改、可组合,每个技能只封装一件事,由你决定怎么串。它不是框架,是一套可以拆开改造的工具箱。

整套体系来自四个 AI 编码最常见的失败模式,每个失败模式对应一组"修复技能"。理解这个映射,就理解了每个环节存在的理由:

失败模式典型症状修复技能
#1 智能体没做我想要的
对齐失败
你以为它懂了,看到产出才发现完全理解错了。"没人确切知道自己想要什么"(《程序员修炼之道》)。 /grill-with-docs、/grill-me —— 用一轮轮追问把模糊想法逼成清晰设计
#2 智能体太啰嗦
缺乏共享语言
智能体被扔进项目里自己猜行话,20 个词说 1 个词的事;命名不一致,代码库难导航。 /grill-with-docs 内建的 /domain-modeling —— 维护 CONTEXT.md 词汇表 + ADR
#3 代码跑不起来
反馈回路缺失
没有反馈就没有纠偏,智能体在盲飞。"反馈速率就是你的速度上限"。 /tdd(红-绿-重构)、/diagnosing-bugs(先造反馈回路再谈假设)
#4 造出一团泥球
软件熵加速
智能体写码太快,复杂度积累得也更快。"最好的模块是深的:简单接口后面藏大量功能"(Ousterhout)。 /to-spec 先问模块、/codebase-design 深模块词汇、/improve-codebase-architecture 定期巡检

软件工程的基本功在 AI 时代不是过时了,而是更值钱了——这套技能就是把基本功压缩成可重复执行的动作。

贯穿全程的一个机制设计 技能分两类:用户调用 只能由你敲命令触发,负责编排(决定下一步做什么);模型调用 可以由智能体在任务匹配时自动触发,承载可复用的纪律(怎么写测试、怎么评审、怎么建模)。用户调用技能可以调用模型调用技能,但永远不会调用另一个用户调用技能——这条规则保证了流程的"方向盘"始终在你手里。
Section 02

全流程总览:主流程 + 三条汇入通道

大多数工作沿着一条主流程(idea → ship)走,三条汇入通道(on-ramp)处理特殊情况后并入主流程。底下还垫着一层"词汇层"技能,为上面所有环节提供统一的术语。

主流程 IDEA → SHIP 汇入通道 ON-RAMPS 词汇层 ① grill-with-docs 对齐 · 建词汇表 ② to-spec 合成规格 · 发布 ③ to-tickets 垂直切片 · 阻塞边 ④ implement 每票一个新会话 ⑤ code-review 双轴 · 提交 内部驱动 tdd(红→绿) 收尾 code-review 分支:prototype handoff 出 → 答题 → handoff 回 triage bug / 外部需求堆积 → 产出 agent-ready 票 diagnosing-bugs 疑难 bug:先造反馈回路,后假设 wayfinder 超大雾团项目:决策票地图 雾散后 → to-spec 收敛 domain-modeling CONTEXT.md 词汇表 + ADR codebase-design 深模块词汇:module / seam / depth 代码库健康:improve-codebase-architecture 每隔几天巡检 → 深化候选 → 选中后回到 ① grill-with-docs
图 1 · mattpocock/skills 全流程地图。实线为主流程,虚线为分支与汇入。
用户调用(你敲命令) 用户调用(编排型) 模型调用(自动触发) 汇入通道 词汇层
为什么是这个形状 三个关键判断:① 对齐放在最前面且成本最高——改一张规格远比改一堆代码便宜;② 实现的上下文每票重置——主流程前半段(拷问→规格→拆票)在同一个连续上下文里完成以保证思路连贯,而每个 /implement 从票出发开新会话,因为票已经是自包含的;③ 巨型任务不硬拆——雾还没散时先做决策(wayfinder),而不是假装能写规格。
Section 03 · 环节 0

一次性初始化:告诉智能体你的仓库约定

STAGE 0

仓库配置

/setup-matt-pocock-skills · 用户调用
做什么
每个仓库跑一次。探索仓库现状(git remote、AGENTS.md/CLAUDE.md、是否 monorepo),然后依次确认三件事:① 问题追踪器用哪个(GitHub / GitLab / 本地 markdown .scratch/ / 其他);② 分诊标签是否沿用默认五态(needs-triage / needs-info / ready-for-agent / ready-for-human / wontfix);③ 领域文档布局(默认单上下文:根目录一个 CONTEXT.md + docs/adr/)。结果写入 docs/agents/*.md,并在 AGENTS.md / CLAUDE.md 里加一个 ## Agent skills 块。
为什么
后面所有编排技能(to-spec、to-tickets、triage、wayfinder)都要回答"票发到哪、标签叫什么、词汇表在哪"。把这三个答案物化成文件而不是每次口头重申,是整个体系能跨会话运转的前提。这也是典型的"prompt 驱动而非脚本"设计:先探索、再确认、后写入,绝不覆盖你已有的编辑。
落地要点
个人项目 / 没有远端仓库 → 选本地 markdown 模式,票落在 .scratch/<feature>/issues/ 下,一票一文件。团队项目 → GitHub Issues + 原生 blocking 关系。
Section 04 · 环节 1

想法对齐:把"我以为"逼成"我们都确认了"

这是整套体系里最受欢迎、也最该每次都用的环节。你想做一件事,先别让智能体动手——让它来拷问你。

STAGE 1

拷问式对齐(Grilling Session)

/grill-with-docs · 用户调用 · 有仓库时首选 = /grilling + /domain-modeling 两个模型调用技能 /grill-me · 无仓库场景的无状态版
做什么
智能体把你的想法画成一棵设计树:每个决策分叉出挂在它下面的子决策。然后按"轮"推进——每一轮把前沿(frontier,即前置条件都已敲定、现在就能问的问题)一次性全问出来,每个问题编号并附推荐答案,等你回答后重算前沿、进入下一轮,直到前沿为空:设计树的每个分支都被访问过,没有留下任何"默认假设"。
为什么有效
三条精巧的分工规则让它区别于普通问答:① 事实是智能体的活——问题需要环境里的事实(文件、配置、API 行为)时,派子代理去查,不拿来烦你;② 决策是你的活——每个真正需要拍板的点都摆到你面前并附推荐答案,一个词就能接受;③ 一轮一计算——依赖未决问题的留到下一轮,避免你回答"看情况"后前功尽弃。结束前不动手,直到你确认达成共识。
grill-with-docs 的加成
它在拷问的同时驱动 /domain-modeling:当场把敲定的术语写进 CONTEXT.md,把"难以逆转 + 没有上下文会让人费解 + 真实权衡的结果"三条全满足的决策记成 ADR。副产品是项目的共享语言——README 里的例子:以前说"课程章节里的课被'实化'(在文件系统里拿到位置)时出问题",有了词汇表之后一句"materialization cascade 出问题"就够了。省 token、命名一致、代码库更好导航。
何时用 grill-me
不在工作目录里时(打磨一份计划、一篇文档、一个没有仓库承载的想法)。同一套拷问,但什么都不落盘。有仓库就用 grill-with-docs——它严格更优:同样的访谈,还留下书面痕迹。
知其所以然 对齐失败(失败模式 #1)的根源是沟通鸿沟,而鸿沟最大的成本发生在实现之后才被发现。这个环节把发现点前移到写第一行代码之前,且用"前沿 + 轮次"的结构保证了问题之间的依赖顺序——你永远不会被问到前提还没定的问题。推荐答案机制则把"访谈"的成本压到接近零:大多数时候你只需要回一个"同意"。
Section 05 · 环节 2(分支)

原型验证:纸上谈不清的问题,用一次性代码回答

STAGE 2

原型分支(可选)

/prototype · 模型调用 /handoff · 用户调用 · 分支桥接
何时分支
拷问中遇到对话无法裁决的问题:这个状态机摸起来对不对?这段业务逻辑对不对?UI 该长什么样?——需要"跑起来看"才能回答的问题。
怎么做
原型分两个形态,选错形态浪费整个原型:逻辑/状态问题 → 单个可分享的 HTML 文件(自由操作按钮 + 分步引导),非开发者也能上手推演;UI 问题 → 同一路由下生成若干个 radically different 的变体,用 URL 参数切换。铁律:第一天就是一次性的、明显标注、一条命令能跑、不持久化、不抛光、每步操作后把完整状态打印出来让你看见变化。
分支的桥接
原型活在独立目录,正好用 /handoff 双向桥接:handoff 出去 → 开新会话做原型 → handoff 回来带着结论 → 回到原想法线程继续拷问。原型本身不进主干:验证出的决策折进真实代码,原型提交到一个 prototype/<name> 分支留作"一手证据",在实现票上留个指针。
知其所以然 一次性(throwaway)不是承诺销毁,而是约束写法:因为你不必维护它,所以敢在半天内试三种方案。而"答案折进真码、原型留作 primary source"保证学习成果不丢失——规格模板里甚至专门留了例外条款:原型产出的状态机/reducer/schema 片段如果比散文更精确地编码了决策,可以内联进规格,注明出处。
Section 06 · 环节 3

规格化:把对话结晶成可执行文档

STAGE 3

对话 → 规格

/to-spec · 用户调用
做什么
不再访谈——直接把当前会话里已经讨论清楚的东西合成为规格,发布到追踪器并打上 ready-for-agent 标签(无需再分诊)。规格模板六段:问题陈述(用户视角)→ 解决方案(用户视角)→ 超长的用户故事编号清单 → 实现决策 → 测试决策 → 范围外。
关键动作:先定接缝
写规格前先画出"准备在哪些接缝(seam)上测试",并与你确认。优先复用现有接缝、尽量用最高的接缝——"接缝越少越好,理想数量是一"。这是整个体系里测试纪律的源头:/tdd 会拒绝在任何未确认接缝上写测试。
刻意的禁令
规格里禁止写具体文件路径和代码片段——它们过期得最快。唯一例外是原型产出的"决策密集"片段(状态机、类型形状)。
知其所以然 为什么不做访谈?因为访谈已经在环节 1 做完了——to-spec 的职责是结晶而不是再挖,两个职责分开防止流程来回震荡。为什么用户故事要"极长"?因为实现者是一个没有会话记忆的智能体:它只看得到票和规格,故事清单是它重建"这个功能到底服务谁"的唯一材料。为什么禁文件路径?AI 时代文档的半衰期极短,规格应只承载决策,不承载定位。
Section 07 · 环节 4

拆票:曳光弹切片 + 阻塞边

STAGE 4

规格 → 一组自包含的票

/to-tickets · 用户调用
做什么
把规格切成一组曳光弹(tracer bullet)垂直切片,每张票声明自己被哪些票阻塞。切片规则四条:每片窄但完整地穿过所有层(schema → API → UI → 测试);完成即独立可演示/可验证;每片大小正好装进一个全新上下文窗口;prefactoring("先让改动变容易,再做容易的改动")放在最前面。
宽重构的例外
改一个共享符号、重命名一列——爆炸半径横跨全库,垂直切片没法保持绿色。此时改走 expand–contract:先"扩张"(新旧形式并存)→ 分批迁移调用点(每批一票,批间 CI 常绿)→ 最后"收缩"(删掉旧形式)。批次也撑不住时共享一个集成分支,只承诺最终集成票是绿的。
先给你看,再发布
拆完先以编号列表呈现(每票:标题 / 被谁阻塞 / 交付什么端到端行为),问你三件事——粒度对不对?阻塞边对不对?要不要合并或再拆?——你批准后才发布到追踪器,按依赖序编号,打 ready-for-agent。
之后怎么干活
沿前沿(frontier)推进:任何阻塞者全部完成的票都可以抓走。每个 /implement 会话结束后 /clear,从下一张票冷启动。
知其所以然 垂直切片对抗的是"水平切片"的经典陷阱(先写完所有 schema 再写 API 再写 UI):那样每一步都不可演示,错误要到最后才暴露。垂直切片让每张票都是一次曳光弹试射——真实的端到端反馈。"每票装进一个新上下文窗口"则是对 LLM 现实的直接适配:票是自包含的,所以会话间上下文是可丢弃的,这正是"每票 /clear"得以成立的原因。阻塞边让追踪器 UI 直接渲染出"现在能拿哪些票",多会话并行成为可能。
Section 08 · 环节 5

实现:红-绿循环 + 预先约定的接缝

STAGE 5

每张票一次实现会话

/implement · 用户调用 内部驱动 /tdd /codebase-design(接缝有争议时)
做什么
实现票/规格描述的工作,指令刻意简短:在预先约定的接缝上尽量用 /tdd;定期跑类型检查、定期跑单个测试文件、最后跑一次全量测试;完成后跑 /code-review,然后提交到当前分支。
tdd 的三条纪律
① 红先于绿:先写失败的测试,再写恰好让它通过的代码,不预写未来的测试、不加投机功能。② 一次一片:一个接缝、一个测试、一个最小实现。③ 重构不在循环里——它属于评审阶段。好测试的标准:通过公共接口验证行为而非实现细节;测试读起来像规格说明书。三大反模式:实现耦合(重构就挂)、同义反复(expect(add(a,b)).toBe(a+b) 这种按实现复算期望值的测试永不可能失败)、水平切片(一次写完所有测试再写实现——验证的是想象中的行为)。
上下文配套
动手前读 CONTEXT.md,让测试命名和接口词汇与项目领域语言对齐;尊重所触区域的 ADR。
知其所以然 为什么 TDD 对智能体比对人类更关键?因为"红→绿"给智能体提供了一个恒定的反馈信号——它不再盲飞,每写一小步都能自证。失败模式 #3 的解法本质是把"反馈速率"变成速度上限,而 tdd 把这个上限制度化了。"接缝必须预先和用户确认"则防止测试努力摊薄到每个边缘案例上:你不可能全测,先约定接缝才能让测试落在关键路径和复杂逻辑上。
Section 09 · 环节 6

双轴评审:Standards 与 Spec 分开打分

STAGE 6

提交前的两轴审查

/code-review · 模型调用(implement 自动收尾,也可单独用)
做什么
对 git diff <固定点>...HEAD 做双轴评审:Standards 轴——代码是否符合仓库书面编码规范 + 一组固定的 Fowler 代码坏味道基线(Mysterious Name、Duplicated Code、Feature Envy、Primitive Obsession、Shotgun Surgery 等 12 条,每条都是"是什么→怎么改"的判断题而非硬违规,仓库规范永远覆盖基线);Spec 轴——代码是否忠实实现了来源规格:缺了什么、多了什么(scope creep)、看似实现了但实现得不对。
怎么跑
两轴各派一个并行子代理,互不污染上下文;固定点无效或 diff 为空要先失败在这里而不是子代理里;Spec 轴按顺序找规格(commit 里的 issue 引用 → 用户传的路径 → docs/specs/.scratch 下按分支名匹配 → 问用户)。最后聚合呈现为两节,不合并、不重排序,各轴内部给出最严重问题。
知其所以然 一个变更完全可能一轴通过、另一轴失败:符合每一条规范但实现错了东西(Standards 过、Spec 挂),或精确实现了需求但破坏了项目惯例(反过来)。把两轴分给两个子代理,是防止"评审语境互相污染"——混在一起评,Spec 的发现会被 Standards 的细节淹没。而"不重排序"的禁令则防止聚合层替你决定哪个轴更重要——那是人的判断。
Section 10

三条汇入通道:不是所有工作都从"想法"开始

ON-RAMP A

bug 报告和外部需求堆积 → /triage

/triage · 用户调用 内部调用 grilling + domain-modeling
做什么
把 issue(以及配置开启后的外部 PR,"一个 PR 就是带代码的 issue")推过一个五态状态机:needs-triage → needs-info / ready-for-agent / ready-for-human / wontfix。流程:收集上下文 → 给出分类/状态建议及理由 → 验证声称(bug 按报告者步骤复现;PR 检出跑测试)→ 需要时拷问补全 → 应用结果。ready-for-agent 的票附上 agent brief(面向智能体的任务简报)。
两个值得抄的细节
① 分诊时先查重复实现(按领域概念而非措辞搜索)和 .out-of-scope/ 拒绝知识库——被拒的增强请求记档,防止同一个请求下个月再来一遍;② 所有 AI 产的 issue 评论强制带免责声明。注意:/to-tickets 产出的票天生 agent-ready,不要再分诊。
ON-RAMP B

疑难 bug → /diagnosing-bugs

/diagnosing-bugs · 模型调用
做什么
六阶段纪律环,跳过任何阶段都要显式说明理由:① 造反馈回路(十种手段按序尝试:失败测试→curl 脚本→CLI+快照→无头浏览器→重放 trace→一次性 harness→fuzz→bisect harness→差分循环→HITL bash 脚本;验收标准是一条"红 capable、确定性、秒级、可无人值守"的命令)→ ② 复现并最小化(逐个砍掉非承重元素)→ ③ 提假设(先列 3–5 个可证伪假设再动手,防止单假设锚定;列表给用户看一眼,领域知识常能立刻重排)→ ④ 插桩(一次只改一个变量;调试日志统一加 [DEBUG-xxxx] 前缀方便最后一把清理;性能问题先测基线再二分)→ ⑤ 修复 + 回归测试(回归测试写在使用"真实 bug 模式"的正确接缝上;找不到正确接缝本身就是发现——说明架构拦不住这类 bug,转交架构巡检)→ ⑥ 清理(原始 repro 不再红、插桩全删、把最终成立的假设写进 commit)。
红线
没有红命令之前禁止进入假设阶段——"盯着代码读出理论"正是这个技能要防止的失败。真造不出回路就明说,向用户要环境/脱敏产物/临时插桩授权。
知其所以然 "造出正确的反馈回路,bug 就修好了 90%。"这把调试从"智力游戏"变成"工程问题":二分、假设检验、插桩都只是消费那个红绿信号的机械动作。非确定性 bug 的目标也随之明确——不是干净复现,而是把复现率提到可调试水平(50% 的 flake 可调试,1% 不行)。
ON-RAMP C

巨型雾团项目 → /wayfinder

/wayfinder · 用户调用 · 认知负荷最高,留给真正的大家伙
做什么
想法太大、一个会话装不下、路还看不清时,不硬写规格。先拷问出目的地(固定 scope 的锚点),再广度优先铺开决策票:每张票是一个问题,票的产出是一个决策而非交付物。票分四类——research(AFK,派研究子代理)、prototype(HITL)、grilling(HITL,默认)、task(为解锁决策而做的手工活)。地图刻意不完整:"雾中之战"(fog of war)区域先记在 Not yet specified,决策推进到哪里、雾就散到哪里、新的票才被具体化出来。判定标准:能不能现在把问题说精确,而不是能不能回答。
运作方式
地图是一张带 wayfinder:map 标签的 issue(索引而非存储,决策细节只活在票里);票是它的子 issue,用追踪器原生 blocking 关系。开工前先认领(assign 自己)防多会话撞车;一次会话只解决一张票(research 票除外)。地图收口后移交而不建造:合并回主流程的 /to-spec,把散落的决策收敛成可建造的规格——直接从地图冲进 implement 会丢掉关联细节。
知其所以然 巨型项目的瓶颈不是执行而是决策依赖链:很多问题在前面的问题回答之前根本无法精确陈述。wayfinder 用"决策票 + 雾"诚实地建模了这一点——把不可知的部分留在雾里,而不是假装能提前排期。"producing decisions, not deliverables"防止了最经典的走偏:在规划会话里忍不住写起了产品代码。
Section 11

代码库健康与词汇层

UPKEEP

定期巡检:improve-codebase-architecture

/improve-codebase-architecture · 用户调用 · 建议每隔几天跑一次 引用 /codebase-design 词汇
做什么
三步:① YAGNI 定范围——先看 git log 找热点(最近常改的地方优先,因为深化是为未来的改动服务的),读 CONTEXT.md 和 ADR,再派子代理自由探索,找"浅模块"(接口复杂度≈实现复杂度)、缺 locality 的纯函数抽取、跨接缝泄漏;对疑似浅模块做删除测试(删掉它是复杂度集中了还是只是搬家了)。② 产出一份可视化 HTML 报告(写到系统临时目录,不进仓库),每个候选一张卡:涉及文件 / 问题 / 方案 / 以 locality 和 leverage 表述的收益 / before-after 图 / 推荐强度徽章,最后给 Top 推荐。③ 你选中一个候选后进入 grilling 循环细化,术语和 ADR 沿途更新。
定位
它是巡检不是救援:在真正老化的代码库上会找到真实候选,但不会替你解开泥球。选中的候选作为一个"想法",从环节 1(grill-with-docs)重新进入主流程。

词汇层:垫在所有环节下面的两块基石

/domain-modeling · 模型调用 /codebase-design · 模型调用

domain-modeling 管领域语言:用词和词汇表冲突当场指出("你的词汇表把'取消'定义为 X,你现在说的像 Y,到底是哪个?");模糊词给出精确的规范术语;用具体场景压力测试概念边界;用户陈述与代码矛盾时摆到桌面上;术语敲定当场写入 CONTEXT.md(纯词汇表,禁止当规格或便签用)。ADR 三条件才立:难以逆转 + 脱离上下文会费解 + 真实权衡的结果。

codebase-design 管架构词汇:module / interface / depth / seam / adapter / leverage / locality 七个术语严格统一(禁用 component、service、API、boundary 这些漂移词)。核心原则:深度是接口的属性而非实现的属性;删除测试;接口即测试面;一个 adapter 是假想接缝,两个才是真接缝。/tdd 和 /improve-codebase-architecture 都说这门语言——统一词汇让"哪里该深、哪里该薄"的讨论有共同坐标。

知其所以然 这就是失败模式 #2 的系统性解法:不止让一次会话少啰嗦,而是把共享语言物化为 CONTEXT.md 和 ADR 两组文件,让"20 个词说 1 个词的事"的问题在每个后续会话里持续衰减。ADR 的三条件门槛防止决策档案变成流水账——只记"未来读者真的会问为什么"的决定。
Section 12

上下文卫生:智能体时代的"工作内存管理"

流程的形状很大程度上由 LLM 的一个物理约束决定:smart zone——约 150k token 以内模型仍然推理敏锐,超过就开始劣化。由此派生出两条核心规则和一套边界决策树:

阶段边界(phase boundary)的五个选项

选项适用关键理由
继续默认起点。当前内容对下一步还有用。成本为零,损失为零。因"一手信息"最贵,先排除其他选项再考虑它。
/clear当前内容对接下来要做的事毫无价值。最彻底的重置。
/handoff换 harness、换目录、交给同事、阶段中途分叉支线任务。买的是可移植性:一份 markdown 摘要(含"建议调用的技能"清单,引用既有产物而非复制,脱敏)。写到系统临时目录而非工作区。
子代理范围收紧的独立任务,要一份报告回来。主窗口不被污染。
/compact窗口要满但工作要续。压缩现状并播种新会话。是树底的默认,不是第一反应用。

决策发生在边界上;阶段中途只允许"继续"或"把剩余拆成子代理"。

Section 13

落地检查清单

把这套体系落到你自己的项目,按顺序过一遍:

初始化(每仓库一次)
  • 安装技能(Claude Code 插件或 npx skills@latest add mattpocock/skills,二选一)
  • 跑一次 /setup-matt-pocock-skills:定追踪器、标签、领域文档布局
  • 确认 CONTEXT.md 与 docs/adr/ 约定生效(第一个术语出现时才建文件,允许懒创建)
每个新想法(主流程)
  • 动手前先 /grill-with-docs,直到前沿为空、你确认达成共识
  • 对话裁决不了的分支 → 原型验证,handoff 双向桥接,决策折回
  • 同窗口完成 /to-spec:接缝先行并与你确认;规格里不写文件路径
  • /to-tickets:垂直切片 + 阻塞边;宽重构走 expand–contract;你批准粒度后才发布
  • 每票一次 /implement,会话间 /clear;tdd 只在预约定接缝上写测试
  • 提交前 /code-review:Standards / Spec 两轴都看,不接受"合并排序"的偷懒结论
日常运维
  • 外部 bug/需求堆积 → /triage(先查重复实现和 out-of-scope 档案)
  • 疑难 bug → /diagnosing-bugs:先有红命令,再谈假设;插桩统一前缀,收尾全清
  • 每隔几天 → /improve-codebase-architecture 巡检热点区域,选中候选回到主流程
  • 逼近上下文上限 → 在阶段边界 /compact 或 /handoff,不要带病硬撑
反模式自查
  • 别让智能体在拷问未完成时就动手写码
  • 别 triage 自己通过 to-tickets 产出的票
  • 别在规格/票里写具体文件路径
  • 别写同义反复或实现耦合的测试
  • 别从 wayfinder 地图直接跳 implement——先 to-spec 收敛
  • 别把 CONTEXT.md 当规格或便签用,它是纯词汇表
Appendix A

全部技能详解(37 个)

按仓库的分类桶组织。调用类型标注:用户调用 只能你敲命令触发(编排职责);模型调用 智能体可自动触发(纪律职责)。engineering/ 和 productivity/ 是"晋升桶"(随插件发布、有文档页);in-progress/ 是公测(需单独安装);misc/ 是低频留存;deprecated/ 当前为空(退役技能直接删除并在 changeset 里注明替代者)。

Engineering · 用户调用(9)

ask-matt 用户调用

skills/engineering/ask-matt

全套技能的路由器:记不住该用哪个时,问它。它把所有用户可达技能组织成主流程、三条汇入通道、代码库健康、词汇层、独立技能五张图,并回答"我现在这个处境该从哪进"。仓库规定:任何新增/改名/改变用户可达技能的变更都必须同步更新它——"一个不认识新技能、还指向已删技能的路由器是在撒谎"。

在流程中的位置:入口。迷路时从它进,其余时候它只是文档。

grill-with-docs 用户调用

skills/engineering/grill-with-docs

带文档产出的拷问会话——整个体系的核心技能。SKILL.md 本体只有一句话:"调用两次 Skill 工具:grilling 和 domain-modeling"。这句话本身就是设计示范:编排技能应该薄,纪律下沉到可复用的模型调用技能里。

在流程中的位置:主流程环节 1。有仓库时永远优先于 grill-me。

triage 用户调用

skills/engineering/triage

把 issue 和外部 PR 推过五态分诊状态机,产出 agent-ready 的任务简报。要点:AI 评论强制免责声明;先复现/验证声称再拷问;拒绝的增强请求写入 .out-of-scope/ 知识库防止重复提议;支持续聊(读旧分诊笔记,不重复问已答问题)。

在流程中的位置:汇入通道 A。产物由 implement 拾取。

improve-codebase-architecture 用户调用

skills/engineering/improve-codebase-architecture

扫描代码库找"深化机会",产出到临时目录的可视化 HTML 报告(候选卡片 + before/after 图 + 推荐强度),选中候选后进入 grilling 循环。热点优先(YAGNI)、删除测试、ADR 冲突只在摩擦真实时重提。

在流程中的位置:代码库健康巡检;选中候选 → 生成想法 → 回主流程环节 1。

setup-matt-pocock-skills 用户调用

skills/engineering/setup-matt-pocock-skills

每仓库一次的初始化:配置问题追踪器(GitHub/GitLab/本地 markdown/自定义 prose)、分诊标签词汇、领域文档布局(默认单上下文)。写入 docs/agents/*.md 并在 AGENTS.md/CLAUDE.md 加 ## Agent skills 块,绝不覆盖用户已有编辑。

在流程中的位置:STAGE 0,其他工程技能的前置条件。

to-spec 用户调用

skills/engineering/to-spec

不做访谈,把当前对话直接合成为规格并发布(打 ready-for-agent)。先定测试接缝并与用户确认;模板含超长用户故事清单;禁文件路径与代码片段(原型决策密集片段除外)。

在流程中的位置:主流程环节 3;wayfinder 地图收口后的指定收敛点。

to-tickets 用户调用

skills/engineering/to-tickets

把规格/计划/对话拆成带阻塞边的曳光弹垂直切片,先给用户过目(粒度、阻塞边、合并/拆分)再发布。宽重构走 expand–contract。本地追踪器一票一文件,真追踪器用原生 blocking。

在流程中的位置:主流程环节 4。

implement 用户调用

skills/engineering/implement

按票/规格实现,指令极简(这是特性不是缺陷):在预约定接缝用 tdd;定期类型检查 + 单测、最后全量;收尾 code-review;提交当前分支。

在流程中的位置:主流程环节 5,每票一个新会话。

wayfinder 用户调用

skills/engineering/wayfinder

为超过单会话容量的巨型任务绘制决策票地图:目的地先行、雾中之战、四类票(research/prototype/grilling/task)、认领防撞、一次一票、地图收口后移交 to-spec。详述见第十章 ON-RAMP C。

在流程中的位置:汇入通道 C,认知负荷最高,只留给真正的大雾团。

Engineering · 模型调用(9)

prototype 模型调用

skills/engineering/prototype

一次性代码回答一个设计问题。两分支:逻辑/状态 → 单 HTML 可玩文件;UI → 同路由多变体。铁律:标注一次性、一条命令能跑、不持久化、不抛光、状态可见;收尾时决策折进真码、原型留 primary source 分支。

在流程中的位置:主流程环节 2 的分支本体;wayfinder 的 prototype 票。

diagnosing-bugs 模型调用

skills/engineering/diagnosing-bugs

疑难 bug 六阶段纪律环,核心是阶段 1 的"造反馈回路"(十种手段、红-capable 验收标准)。全程先脱敏;性能问题先测基线;找不到回归测试的正确接缝本身即为发现,转交架构巡检。详述见第十章 ON-RAMP B。

在流程中的位置:汇入通道 B;用户说"debug/diagnose"时自动触发。

research 模型调用

skills/engineering/research

把阅读调研委托给后台子代理:针对高信任一手来源调查一个问题,产出带引用的 Markdown 文件落回仓库。你继续干活,它读完留档。产物是喂给 grill-with-docs 的素材——研究是喂养思考,不是替代思考。

在流程中的位置:独立技能;wayfinder research 票的执行者。

tdd 模型调用

skills/engineering/tdd

红-绿循环的参考手册:好测试 = 通过公共接口验证行为;测试只写在预约定接缝上;三反模式(实现耦合/同义反复/水平切片);三规则(红先于绿/一次一片/重构不在循环里)。可单独用("就想测试优先做这个行为"),也被 implement 驱动。

在流程中的位置:主流程环节 5 的内部引擎。

domain-modeling 模型调用

skills/engineering/domain-modeling

领域模型的主动纪律:挑战词汇表冲突、锐化模糊词、场景压测边界、代码与陈述交叉验证、当场更新 CONTEXT.md。ADR 三条件门槛。支持多上下文布局(CONTEXT-MAP.md + 各子域自己的 CONTEXT.md/ADR)。

在流程中的位置:词汇层;被 grill-with-docs、triage、wayfinder、improve-codebase-architecture 驱动。

codebase-design 模型调用

skills/engineering/codebase-design

深模块设计词汇的单一事实来源:module/interface/depth/seam/adapter/leverage/locality 七术语 + 四原则(深度是接口属性/删除测试/接口即测试面/两 adapter 才是真接缝)+ 可测试性三招(接受依赖不创建、返回结果不产副作用、小表面)。附带 DEEPENING 和 DESIGN-IT-TWICE 两个进阶模式(后者用并行子代理设计多个 radically different 的接口再比较)。

在流程中的位置:词汇层;tdd 和 improve-codebase-architecture 都说这门语言。

code-review 模型调用

skills/engineering/code-review

对 diff 做双轴评审:Standards(仓库规范 + 12 条 Fowler 坏味道基线,仓库覆盖基线,全部是判断题)+ Spec(缺失/越界/错实现),两轴并行子代理、聚合不重排。详述见第九章。

在流程中的位置:主流程环节 6;也可独立评审任意分支/PR。

resolving-merge-conflicts 模型调用

skills/engineering/resolving-merge-conflicts

逐 hunk 处理进行中的 merge/rebase 冲突:按意图解决——追溯每一方的一手来源,而不是挑行拼接;然后完成整个操作。永不 --abort。

在流程中的位置:独立技能,已在冲突中时直接进。

wizard 模型调用

skills/engineering/wizard

为"只有人能做"的步骤生成交互式 bash 向导:开 provision 基础设施、配凭据/CI secrets、点陌生第三方后台、跑一次性割接。脚本打开每个 URL、捕获每个值、写进 .env 和 GitHub secrets。判据:智能体能自己做的就自己做,这是给"人真正在环里"的环节用的。

在流程中的位置:独立技能;智能体撞到"只有你能过"的墙时自动掏出来。

Productivity · 用户调用(5)

grill-me 用户调用

skills/productivity/grill-me

grill-with-docs 的无状态版:同一套拷问,但不落盘、不建词汇表。用于没有工作目录的场景(打磨计划/设计/文章)。有仓库时它严格劣于 grill-with-docs。

在流程中的位置:独立;仓库外的一切对齐场景。

handoff 用户调用

skills/productivity/handoff

把当前对话压缩成交接文档存到系统临时目录(不进工作区),让新智能体无缝续接。含"建议调用的技能"清单;引用既有产物(规格/ADR/commit)的路径而非复制;脱敏。可传参指定下一会话的重点。

在流程中的位置:阶段边界五选项之一;原型分支的双向桥。

teach 用户调用

skills/productivity/teach

跨多个会话教你一个新技能/概念,用当前目录做有状态的教学工作区(进度、练习、笔记都在里面)。

在流程中的位置:独立,学习场景。

to-questionnaire 用户调用

skills/productivity/to-questionnaire

挡路的信息既不在你脑子里也不在代码库里,而在别人脑子里时:它拷问你的发送(问谁、要什么回来),而不是拷问主题本身,然后产出一份 Markdown 问卷(异步填或会上过)。grill-me 的逆操作。收到的答案回喂 grill-with-docs / to-spec。

在流程中的位置:独立;信息在他人处时的对齐前置。

wait-what 用户调用

skills/productivity/wait-what

"等等,没听懂"的即时补救:智能体用你缺的上下文、大白话、CONTEXT.md 的词汇重新讲一遍刚才说的东西。任何会话中途可用。治标;治本靠 grill-with-docs 早早建立共享语言。

在流程中的位置:独立,任何技能内部皆可触发。

Productivity · 模型调用(2)

grilling 模型调用

skills/productivity/grilling

访谈原语本身:设计树、轮次、前沿、事实智能体查/决策用户拍。grill-me、grill-with-docs、triage、wayfinder、improve-codebase-architecture 全部在内部跑它。详述见第四章。

在流程中的位置:词汇层之下最底层的复用件。

writing-for-agents 模型调用

skills/productivity/writing-for-agents

给智能体写文档的参考:SKILL.md 怎么写、AGENTS.md/CLAUDE.md 怎么写、被指针引用的文档怎么写。让"写给 AI 看的文本"有自己的写作规范。

在流程中的位置:独立参考;维护本体系自身的文档时用。

In-progress · 公测(8,不随插件发布,需单独安装)

技能说明
loop-me 用户调用跨会话把自己拷问出可实施的工作流规格,当前目录做有状态工作区。
writing-beats把文章组织成一串"节拍"的旅程,选一个起点只写那一拍,再跳下一拍,直到自然收尾。
writing-fragments拷问式挖掘写作素材碎片,追加到单一文档,为未来文章攒原料。
writing-shape把原料文档逐段整形成文章,每步都论证格式选择。
claude-handoff 用户调用把当前对话经 claude --bg 移交给一个立刻接手的后台智能体。
setup-ts-deep-modules 用户调用给 TypeScript 仓库接上 dependency-cruiser,强制每个 package 成为深模块(实现藏子目录、只从入口可达、测试走入口)。
implement-spec 用户调用把整份规格在一个分支上实现:票当任务图处理,implementer 子代理沿"就绪前沿"并行推进,落成单个 PR。相当于 to-tickets + implement 的自动化版。
retro 用户调用会话结束后建议改进智能体环境(steering 文件、编码规范、自动化检查、工具链)。目前是 STUB,只有设计笔记。

Misc · 低频留存(4,不晋升)

技能说明
git-guardrails-claude-code配置 Claude Code hooks,在危险 git 命令(push、reset --hard、clean 等)执行前拦截。
migrate-to-shoehorn把测试文件里的 as 类型断言迁移到 @total-typescript/shoehorn。
scaffold-exercises生成练习目录结构:sections / problems / solutions / explainers。
setup-pre-commit配置 Husky pre-commit:lint-staged + Prettier + 类型检查 + 测试。

Deprecated

当前为空。退役策略:技能直接删除,移除它的 changeset 必须注明由什么替代。

Appendix B

安装与仓库组织

两条安装路线,二选一

路线说明
Claude Code 插件claude plugins install mattpocock-skills。官方市场直接装,托管式只读包,作者更新自动同步——"订阅"哲学。
skills.sh 安装器npx skills@latest add mattpocock/skills。把技能文件复制进你的仓库,归你所有、随便改,无后台更新——"fork"哲学。记得勾上 setup-matt-pocock-skills。

两条都装会导致每个技能出现两份。装完跑 /setup-matt-pocock-skills 完成仓库配置。

仓库自身的组织规则(可以借鉴到自己的技能库)

可迁移的核心思想 如果只带走三件事:① 编排薄、纪律厚——用户调用技能只做路由和串联,可复用的方法论下沉为模型调用技能;② 产物物化——共识、语言、决策、任务全部落成文件(CONTEXT.md / ADR / 规格 / 票),跨会话不丢失;③ 反馈回路优先——测试先行、红绿循环、调试先造红命令,让智能体永远不在盲区里飞。