这套插件一共发布了 22 个 skill。这节课先不敲任何命令,而是给你一张全景地图: 每个 skill 负责什么、谁能启动它、跑完会在你的仓库里留下什么、干完下一步通常接谁。 地图有了,从 0002 开始每节课拆开一个 skill 细讲,你都知道它站在地图的哪个格子里。
你的目标(写在 MISSION.md 里)不是「会敲 / 命令」,而是像这个仓库的作者一样思考:
这节课建立的是全局索引。索引不用硬背——后面每节深课都会回链到这里,用多了自然记住。
你的学习动机:MISSION.md · 课程安排与偏好:NOTES.md
这个仓库的 skills/ 目录下躺着很多文件夹,但文件夹存在 ≠ 已经发布。
唯一说了算的清单是
.claude-plugin/plugin.json
里的 skills 数组:被它点名的 22 条路径才算发布,全部在
engineering/ 和 productivity/ 两个目录里。
misc/、personal/、in-progress/、deprecated/
里不管有什么,都不算数,本课程也不讲。
规则原文:CLAUDE.md; 为什么用「逐条列路径」这种笨办法:ADR 0002
每个 skill 都归两类之一。区别只有一个:谁能启动它。
| User-invoked(只能人启动) | Model-invoked(人和 AI 都行) | |
|---|---|---|
| 文件里怎么认 | frontmatter 里有 disable-model-invocation: true(Codex 侧还有 policy.allow_implicit_invocation: false) |
没有上面那个字段;description 里写着 “Use when…” 描述使用场景 |
| 谁能启动 | 只有你,亲手输入名字。AI 永远不会自己碰它 | 你可以输名字;AI 碰到合适场景也会自己加载 |
| 别的 skill 能调用它吗 | 不能 | 能——在正文里写一句「Run the /xxx skill」就行(这叫 prose 调用:用自然语言声明调用,不是代码层面的 import) |
| 代价是什么 | 你得记得它存在——它不会自己出现 | 它的 description 常驻 AI 的上下文,占地方 |
| 通常是些什么 skill | 完整流程的入口(面试 → 写需求 → 拆票 → 实现 这种一整条) | 可复用的基本功和词汇(怎么面试、怎么写测试、怎么建模……) |
grill-with-docs 的正文只能写「跑 /grilling,再跑 /domain-modeling」,
不能写「跑 /grill-me」。0003 会讲:「入口薄、纪律厚」的拆法,就是这条规则逼出来的。
契约全文:.agents/invocation.md · 设计词汇:writing-great-skills/GLOSSARY.md
22 个工具平铺着记是记不住的。作者其实是按三层组织的,像一家餐厅: 开店前先装修一次(配置层);店长接待顾客的固定流程(编排层); 厨师的基本功(纪律层)。
| 层 | 干什么 | 成员 | 跑完主要留下什么 |
|---|---|---|---|
| 配置层 | 在你的每个目标仓库里跑一次,把「工单系统在哪、标签叫什么、领域文档放哪」写成配置文件;其它 skill 干活前先来读这些文件 | setup-matt-pocock-skills(全系统就它一个) |
docs/agents/ 下的配置文件;CLAUDE.md 或 AGENTS.md 里加的一段说明 |
| 编排层 User |
由你手动启动的完整流程,内部会拼装纪律层的基本功 | ask-matt、grill-me、grill-with-docs、to-spec、to-tickets、implement、triage、wayfinder、improve-codebase-architecture、handoff、teach | 工单系统里的 issue、本地 .scratch/ 目录里的票、架构报告、handoff 文件 |
| 纪律层 Model |
可复用的基本功和词汇,一般不独立交付什么,而是被编排层调用 | grilling、domain-modeling、codebase-design、tdd、code-review、diagnosing-bugs、prototype、research、resolving-merge-conflicts | 代码和测试、CONTEXT.md / ADR、研究笔记、合并冲突的解决结果 |
grilling(面试纪律的全文在那里),不是改 grill-me 那一行入口。docs/agents/issue-tracker.md,通常不用动 to-spec / to-tickets 本身。implement 正文只有几行,直接看它怎么写的,并确认 agent 当时真的加载了这个 skill。
流程图的权威原文是
ask-matt/SKILL.md。
先用大白话把默认路线讲一遍:
/grill-with-docs 让 AI 追着你面试,把想法问清楚;有代码库的话,顺手把讨论出的术语和决策写进 CONTEXT.md 和 docs/adr/。/prototype 做个一次性原型,拿到答案就回来,原型代码不进正式交付。/to-spec 把它写成正式需求文档,发到工单系统。/to-tickets 拆成一张张可独立交付的工作票。/implement(里面用 /tdd 写,收尾跑 /code-review,然后提交)。改动很小的话,跳过中间所有步骤,直接 /implement 就行。
不是每个任务都从「我有个想法」开始。有三个从半路并入主流程的入口:
/triage:别人在你的工单系统提了一堆 bug 和需求,你先拿它分拣(贴标签、写处理意见);分拣完、标了 ready-for-agent 的 issue 直接进 /implement。/diagnosing-bugs:遇到难缠的 bug 用它建立「必现失败」的反馈环做诊断;修完发现根子是架构问题,转去 /improve-codebase-architecture。/wayfinder:任务大到或模糊到一个会话装不下时,先不交付,画一张「决策地图」——把要回答的问题列成工单逐个解决;疑问清空后去 /to-spec 走主流程,不要跳过 spec 直接 implement。主流程之外还有三类常驻角色:
/domain-modeling 和 /codebase-design 不在主流程上,但主流程的每一步都可能调用它们(一个管领域术语,一个管模块设计的词汇)。/improve-codebase-architecture 给代码库做体检,产出的改进想法再进 /grill-with-docs 走主流程。/handoff 把讨论移交到一个新会话;harness 自带的 /compact 是同一窗口内压缩。两者不一样——换窗口用 handoff。「上下文」就是 AI 在一个会话里能看到的全部内容。窗口是有限的,塞得太满,推理质量就下降。 作者因此定了几条硬规矩,叫 context hygiene:
/implement 新开一个会话,只带那一张票进去——别拖着之前聊了几万字的旧上下文。/handoff 移交新会话,别硬撑。/to-tickets 拆出来的票不要再拿 /triage 分拣一遍——它们生来就是可以直接交给 agent 做的;triage 只处理别人提的、你没写过的外来 issue。smart zone 词条(ask-matt 外链): aihero.dev/ai-coding-dictionary/smart-zone
这是全课程信息量最大的一节。reference/ 里有对应的速查表,值得打印。
「会改什么」= 按各 skill 的 SKILL.md 承诺会留下的痕迹(文件、工单、git 提交、临时目录);
只在对话里推理、不写任何文件的,标「不留痕迹」。
| Skill | 什么时候用 | 会改什么 | 干完接什么 |
|---|---|---|---|
| ask-matt | 不确定该走哪条流程,或两个 skill 分不清该用谁 | 什么都不改,只在对话里指路 | 按它点名的 skill 真正开工;已经知道答案就别绕路问它 |
| setup-matt-pocock-skills | 一个仓库第一次用这套工程流之前,跑一次 | docs/agents/issue-tracker.md、domain.md、可选 triage-labels.md;CLAUDE.md 或 AGENTS.md 里加一段 ## Agent skills |
之后才能正常跑 grill / to-spec / triage / wayfinder 这些依赖配置的 skill |
| grill-with-docs | 有代码库,要把模糊想法问清楚,并留下术语和决策记录 | 通过 domain-modeling 写 CONTEXT.md(大仓库可能有多个分册)和 docs/adr/ 下的决策记录 |
说不清的点 → prototype 岔路;清楚了 → to-spec;小改动直接 implement |
| to-spec | 想法已经在对话里对齐,要落成正式需求文档(这一步不再面试你) | 在配置好的工单系统发一条 spec issue,打上 ready-for-agent 标签,措辞用项目术语表 |
/to-tickets |
| to-tickets | 把需求或计划拆成可并行、标清依赖关系的工作票(每张票都是端到端的垂直切片) | 本地 tracker:.scratch/<feature>/issues/ 下每票一个文件;远程 tracker:多条 issue + blocking 关系,打 ready-for-agent |
对没被别人挡住的票,逐张 /implement(票与票之间开新会话) |
| implement | 手里有票或 spec,要写代码交付 | 业务代码、测试;过程中跑类型检查和测试;收尾 review 之后产生 git commit | 拿下一张没被挡住的票继续 implement;或人工合并、发 PR |
| triage | 别人提的 bug / 需求 /(可选)外部 PR 需要分拣 | 工单系统上的标签、评论(评论开头必须有 AI 声明)、处理意见(brief);被拒绝的增强建议可归档到 .out-of-scope/;过程中可能更新 CONTEXT/ADR |
标了 ready-for-agent → implement;架构债 → improve-codebase-architecture |
| wayfinder | 任务超大或雾太大,一个会话装不下;要的是一张决策地图,不是立刻交付 | 工单系统:一个 wayfinder:map 父 issue + 若干「决策票」子 issue、blocking 关系、解决后的结论评论;研究类问题可旁路走 research |
雾散后 /to-spec 再拆票实现(默认不直接 implement) |
| improve-codebase-architecture | 想改进代码库的可测性 / AI 可导航性;或修 bug 时发现没有好的测试接缝 | 临时目录里的一份 HTML 报告(不进仓库);讨论后可更新 CONTEXT/ADR;不直接大改业务代码 | 选定一个改进想法 → grill-with-docs / to-spec 进主流程 |
| Skill | 什么时候用 | 会改什么 | 干完接什么 |
|---|---|---|---|
| grilling | 需要对计划或决策做无情的决策树面试(一次只问一题) | 不留痕迹(纯对话纪律) | 达成「互相理解」后再行动;常被 grill-me、grill-with-docs、triage、wayfinder 调用 |
| domain-modeling | 要主动维护项目的领域语言;或被别的 skill 要求更新术语 | CONTEXT.md(及分册);满足三个条件时写 docs/adr/ 决策记录 |
回到当前流程;之后的 skill 都应该用术语表里的词说话 |
| codebase-design | 设计或加深模块、找测试接缝、统一「深模块」词汇 | 主要是词汇和设计讨论,不直接改代码;被 improve-codebase-architecture 拿去做双重设计 | 落地时进 to-spec / to-tickets;或由 tdd 在约定好的接缝上写测试 |
| tdd | 先写测试再写实现(red-green);implement 内部应尽量用它 | 测试文件 + 最小实现代码;会读 CONTEXT/ADR 对齐命名 | 一个切片一个切片循环;大重构留给 review 阶段,别塞进红绿循环 |
| code-review | 相对某个固定起点(commit / 分支 / tag)做「规范 + 需求」双轴审查;implement 收尾必跑 | 默认不改代码,只产报告 | 按报告修;修完通过后 commit(implement 流程内) |
| diagnosing-bugs | 难缠、间歇、回归类 bug;需要先造出「必现失败」的反馈环 | 可能有:失败测试、临时调试脚本、带标记的调试日志(用完删掉)、最终修复和回归测试 | 找不到合适的测试接缝 → improve-codebase-architecture;否则清理临时产物、说明根因 |
| prototype | 纸上说不清的问题:状态机手感、UI 形态 | 明确标记为一次性的临时代码(放在接近真实位置的地方);得到的答案应回写到 issue / 决策里;原型代码本身应丢弃或隔离 | 用 handoff 把答案带回主线程;决策进入 spec / tickets |
| research | 需要对着一手资料(官方文档 / 源码 / 规格)做调查,且可以后台跑 | 仓库里一篇带引用的 Markdown 研究报告 | 把报告带进 grill-with-docs / wayfinder 做决策;它不替你思考 |
| resolving-merge-conflicts | merge 或 rebase 已经冲突、进行到一半 | 冲突文件内容、stage 状态、完成合并的 commit;会跑项目检查并修坏掉的东西 | 继续原分支的工作;禁止把 abort 当默认出路 |
| Skill | 启动 | 什么时候用 | 会改什么 | 干完接什么 |
|---|---|---|---|---|
| grill-me | U | 没有代码库、或不想留文档时,做无情面试 | 什么都不改(只是调用 grilling) | 互相理解之后,你自己去实现或写文档 |
| grilling | M | 同一套面试纪律,也被工程流程复用 | 不留痕迹 | 见上 |
| handoff | U | 要换新会话但保留当前讨论;或进出 prototype 岔路 | 在操作系统的临时目录(不是仓库里)写一份 handoff 文档,里面列出建议接手的 skill;引用已有产物而不是复制 | 新开一个 agent 会话,引用那份文件继续 |
| teach | U | 跨多个会话学一门主题(你现在就在用) | 教学工作区:MISSION、RESOURCES、lessons、reference、learning-records、assets、NOTES | 做完练习 → 下一课;更新 learning-records |
| writing-great-skills | U | 读或改某个 skill 时,需要「可预测性」词汇和失败模式清单 | 什么都不改(纯参考文档) | 编辑具体 SKILL.md 时当检查单用 |
给人看的叙事版文档(不是 agent 的行为真源):
https://aihero.dev/skills-<name>,仓库内镜像在
docs/engineering/、docs/productivity/。
遇到「仓库里怎么突然多了个文件 / 评论」时,从产物反查作者,比按 skill 名单逐个扫更快。
| 产物 | 主要写入方 | 备注 |
|---|---|---|
docs/agents/issue-tracker.md 等配置 |
setup-matt-pocock-skills | 工程类 skill 的行为配置真源;可以手改,不必每次重跑 setup |
CONTEXT.md / docs/adr/* |
domain-modeling(被 grill-with-docs、triage、wayfinder、架构讨论等调用时写) | CONTEXT 是术语表,不是需求文档;ADR 要同时满足三个条件才写(0004 讲) |
| 工单系统里的 spec issue | to-spec | 模板章节在 SKILL.md 里;发出来就打 ready-for-agent |
工单系统 / .scratch/**/issues 里的票 |
to-tickets | 垂直切片 + Blocked by 依赖;不要再去 triage 它们 |
| wayfinder 地图 + 决策子票 | wayfinder | 产出的是「已决定的决策」,不是交付物;术语见 CONTEXT.md 的 Decision ticket |
| issue 评论 / 标签 / 处理意见 | triage | 评论必须以 AI 声明开头 |
.out-of-scope/* |
triage(被拒绝的增强建议) | 已经实现后又 wontfix 的不放这里 |
| 业务代码 + 测试 + commit | implement(内部用 tdd);diagnosing-bugs 的修复路径 | code-review 默认只出报告不改代码 |
| 临时 HTML 架构报告 | improve-codebase-architecture | 在 $TMPDIR/architecture-review-*.html,不进仓库 |
| 临时 handoff 文件 | handoff | 明确写在 OS 临时目录,不在当前工作区 |
| 研究 Markdown | research | 一手资料 + 引用;存放路径随仓库习惯 |
| 一次性原型代码 | prototype | 答案留下,代码扔掉或隔离 |
| 教学工作区文件 | teach(本课程) | MISSION / lessons / reference / learning-records… |
术语:CONTEXT.md(Issue tracker / Decision ticket / Triage role)
Run the /grilling skill 这种自然语言调用;禁止用 ../other/SKILL.md 这种跨目录深链来共享逻辑(invocation.md 的 Dependencies 规则)。grill-me / grill-with-docs / implement 故意写得极短。想改行为时,先打开被它们调用的那个厚文件。grill-me → grilling
grill-with-docs → grilling + domain-modeling
implement → tdd … 然后 code-review … 然后 commit
triage(需要时) → grilling + domain-modeling
wayfinder 画图 → grilling + domain-modeling;研究票 → research
wayfinder 做票 → 按票的类型走(research | prototype | grilling | task)
improve-arch → codebase-design;选定后 grilling + domain-modeling
diagnosing-bugs → (可选)improve-codebase-architecture
地图给的是默认路线,不是宗教仪式。所谓灵活运用 = 知道每条默认规则为什么存在,然后有意识地偏离它。
| 情境 | 可以怎么走 | 代价 / 不能省的部分 |
|---|---|---|
| 改动极小、已经对齐 | 跳过 grill 和 spec,直接 implement 或 tdd | 仍要有一个可验证的完成条件;做大了随时退回 grill |
| 只有模糊想法、没有代码库 | 用 grill-me 而不是 grill-with-docs | 没有术语表留下来,换台机器讨论就丢了 |
| 刚 grill 完、上下文还在 | 直接 to-spec——这一步禁止再面试,只做综合 | 如果其实没对齐,硬写 spec 会写出「假共识」 |
| 需求一张票装得下 | to-spec 之后甚至可以跳过 to-tickets,让 implement 直接对着 spec 干 | 跨会话、有依赖关系时,不能省 tickets 的 blocking 图 |
| 外来 issue 本身写得很清楚 | triage 时快速贴标签,少面试 | 标 ready-for-agent 之前仍建议写处理意见(brief) |
| wayfinder 画图时发现其实没雾 | 停下来,改走主流程 | skill 正文要求此时先问你一声再决定怎么继续 |
| 设计问题纸上扯不清 | 主流程中插一段 prototype 岔路,前后用 handoff 夹住 | 原型的答案要回写进 issue / 决策;原型代码别当正式交付 |
先别往回翻表,凭记忆答。选项字数刻意对齐,不会从长度泄题。
本课主一手材料(请打开原文读,不要只背本页摘要):
skills/engineering/ask-matt/SKILL.md
—— 流程图的权威原文,读全文(主流程、半路入口、上下文卫生、独立技能)。
.agents/invocation.md
—— 两种启动方式的契约,以及「prose 调用、user 不能调 user」。
.claude-plugin/plugin.json
—— 对照第 5 节的表,数数是不是正好 22 条路径。
建议下一课(0002):
setup-matt-pocock-skills——配置层唯一的 skill。没有它,
to-spec / to-tickets / triage / wayfinder 的「会改什么」全都落在一个没定义过的工单系统上。
深课会逐段对照它的「探索 → 提问 → 确认 → 写入」流程,以及它生成的 docs/agents/* 模板里每个字段的含义。
SKILL.md 的原文,而不是临场编造。
做完检索练习后,回复「练习结果 / 哪里卡住 / 开 0002」,我们进下一课。