Lesson 0019 · Engineering · 只能人启动(user-invoked)· 地图课

ask-matt:整套 skill 的路由器

你刚装完 22 个 skill,新会话打开,光标在闪。手里有个模糊的想法, 或者一堆别人提的 bug,你盯着输入框想的第一个问题是:我现在该敲哪个斜杠命令? ask-matt 就是为这个瞬间准备的:你用大白话描述处境,它告诉你该走哪条 flow(流程:一条穿过多个 skill 的路线)、从哪一步进、按什么顺序跑。 它自己什么都不干——不面试你、不写需求文档、不改代码,只负责指路。 学完这节课,你能默写出它的整张地图(一条主流程、三条半路入口、五个独立工具、两块词汇地板), 知道每条路之间在哪里并线,也知道当地图和现实脱节时,该去改哪个文件的哪一段。

1. 它在整个系统里站在哪

0001 把 22 个已发布 skill 分成三层:配置层(setup-matt-pocock-skills,跑一次性的初始设置)、 编排层(你手动启动的完整流程)、纪律层(被反复调用的基本功)。 ask-matt 在编排层里,但它是编排层里的一个异类:别的编排层 skill 各自负责一条流程, 而 ask-matt 不负责任何一条流程,它负责所有流程之间的地图。 文档的原话是:它是「a router over the skills in this repo」(覆盖本仓库全部 skill 的一台路由器)。

它存在的理由,文档也说得很直白:这套系统里有一大半 skill 是只能人启动的(user-invoked), 没有任何机制替你触发它们——你必须自己记得它们存在、记得各自管什么。 22 个名字谁都记不全,于是作者把这份记忆外包给了一个 skill: SKILL.md 开篇第一句就是「You don't remember every skill, so ask.」(你记不住所有 skill,所以问。) 文档的说法是:ask-matt is the memory you offload that to(ask-matt 就是你卸下这份记忆的地方)。

一句话定性 ask-matt 只做定向(orient),不做执行。 文档原文:「It does no work itself. It doesn't grill, write a spec, or fix anything — it only orients.」 (它自己不干任何活:不面试、不写需求文档、不修任何东西——只负责定向。) 它回答的是「哪个 skill、什么时候」(which one, and when),然后把你交还给真正干活的那个 skill。

还有两个定位事实值得记住。第一,0001 讲过:全系统流程图的权威原文就是 ask-matt/SKILL.md——0001 那张主流程图是照着它画的,不是反过来。 第二,文档把它描述为「the node every other docs page links back to」(其它每个文档页都回链到它的节点): 它从不坐在任何一条链子里,而是指向每一条链子 (it never sits in a chain; it points into every chain)。 所以它没有一个「上游 skill」或「下游 skill」——它的邻居是所有 skill。

这也带来一条维护义务。仓库根目录的 AGENTS.md 规定: 每当你新增、改名、删除一个 user-reachable skill,或改变它在流程里的位置, 都必须重读 ask-mattSKILL.md 并同步更新—— 原文的警告是:「a new skill it never mentions, or a stale one it still routes to, is a router that lies」 (一个它从不提及的新 skill,或一个它还在指路的过时 skill,就是一台说谎的路由器)。 这节课本身就是这条规则的产物:你在学的这张地图,必须和仓库里 22 个 skill 的实际状态一一对应。

罗盘:MISSION.md · 地图总览:0001 系统地图 · 权威原文:ask-matt/SKILL.md · 叙事版:docs/engineering/ask-matt.md · 同步义务:AGENTS.md

2. 调用方式与触发场景

2.1 只能人启动,AI 永远不会自己加载它

ask-mattuser-invoked(只能人启动)的。这个事实写在两个地方,两道锁:

文档把话说得很死:「You invoke this by typing /ask-matt — the agent won't reach for it on its own.」 (你通过输入 /ask-matt 来调用它——agent 不会自己伸手拿它。) 这很合理:一台路由器如果会被 AI 在后台随手加载,就失去了「你主动求助」这个语义。 它的 frontmatter description(描述字段)写的是 「Ask which skill or flow fits your situation. A router over the skills in this repo.」—— 注意,对 user-invoked skill 来说,这段描述不是给 AI 的触发条件,而是给你看的功能摘要; 真正决定「AI 会不会自己用它」的是上面那两行配置。

2.2 什么时候该问它,什么时候别绕路

情境 该问 ask-matt 为什么
有个想法,但完全不知道从哪里开始 它会把你放到主流程的第 1 步(有代码库 → /grill-with-docs
工单系统里堆了一堆别人提的 bug 和需求,不知道归谁管 它会指到半路入口 /triage(分拣外来工作的那条道)
两个 skill 看起来差不多,分不清该用谁(比如 grill-megrill-with-docs 路由器干的就是区分「长得像、位置不同」的 skill
心里已经明确知道要用哪个 skill 不该 文档原话:skip the router and invoke it directly(跳过路由器,直接调那个 skill);多绕一层只是浪费一轮对话
想知道某个 skill 内部怎么干活 不该 地图只告诉你去哪,不替你读懂目的地;去读那个 skill 自己的 SKILL.md 或对应课程
路由器不替你按回车 0001 里有一条硬提醒:ask-matt 只负责指向某个 skill;真正启动, 仍需你亲手输入那个名字。它说「该走 /to-spec」,你就得自己敲 /to-spec—— 它不会、也没有权限替你点火。

两道锁: ask-matt/SKILL.md 的 frontmatter · ask-matt/agents/openai.yaml · 触发场景: docs/engineering/ask-matt.md 的「When to reach for it」一节

3. 路由器自己的词汇

ask-matt 不是词汇地板 skill(那是 domain-modelingcodebase-design 的角色), 但它有一小套自己的结构性词汇,整张地图都是用这些词画的。 这些词在 SKILL.md 里以小节标题和加粗词的形式出现,下面按原文压缩成表。 第一次读可以慢一点——后面每一节都在用这些词。

术语 定义(按 SKILL.md 原文压缩) 常见误用
Flow(流程) 一条穿过多个 skill 的路线(a path through the skills)。它强调的是「路」而不是单个工具:多数工作不是用一个 skill 完成的,而是沿着一条路依次经过几个 skill 把单个 skill 叫 flow——单个 skill 只是路上的一个点
Main flow(主流程) 多数工作走的那条默认路线:idea → ship(从一个想法到交付)。具体是 grill → spec → tickets → implement → review 这条链 以为所有工作都必须从主流程第 1 步开始——半路入口就是为「不是从想法开始」的情况准备的
On-ramp(半路入口) 一种「产生工作、然后并入主流程」的起始处境。原文是高速公路的上匝道意象:你从半路上了主路。共三条:triage、diagnosing-bugs、wayfinder 把 on-ramp 当成主流程的第 0 步——它们是可选入口,不是必经环节
Codebase health(代码库保养) 不是功能开发,是维护(upkeep)。这一格只有 improve-codebase-architecture 一个 skill 把架构保养当成一次性的项目——原文建议你「一有空就跑」,它是常驻习惯
Vocabulary underneath(词汇地板) 两个 model-invoked 的参考型 skill,跑在其它所有 skill「脚下」,各自是一套词汇的唯一权威出处:domain-modeling 管领域语言,codebase-design 管模块形状 拿它们当流程跑——它们不交付任何东西,只统一用词
Crossing sessions(跨会话) 把上下文从一个会话搬到另一个会话的两种手段:/handoff(写文件、换窗口)和 harness 自带的 /compact(同窗口内压缩) 把两者当同义词——一个换窗口,一个不换,后果完全不同(见第 7 节)
Standalone(独立工具) 完全不在主流程上的 skill(off the main flow entirely),想用就直接拿,不存在「先跑到主流程第几步」的前提 以为独立工具和主流程互斥——prototyperesearch 的产出恰恰是喂给主流程的
Precondition(前置条件) 跑第一条工程流程之前要先跑一次 /setup-matt-pocock-skills,把工单系统、triage 标签、文档布局配置好;自定义的工单系统也支持 跳过它直接跑 to-spec / triage——那些 skill 假设配置已经存在

地图上还会碰到几个来自 CONTEXT.md 的领域词和来自其它 skill 的术语,先在这里钉住, 后面不再重复解释:

结构词汇:ask-matt/SKILL.md 各小节标题 · 领域词:CONTEXT.md · smart zone 词条:aihero.dev/ai-coding-dictionary/smart-zone

4. 主流程逐步拆解:idea → ship

SKILL.md 对主流程的介绍只有一句话:「The route most work travels. You have an idea and want it built.」 (多数工作走的路线。你有个想法,想把它做出来。)下面按原文的三步加一个分支结构拆开讲, 每一步都标出它点名的 skill 和对应的课。

4.1 第 1 步:/grill-with-docs —— 用面试把想法磨清楚

主流程从/grill-with-docs开始:有代码库就从这里开始。 它是「有状态的」(stateful)——面试过程中学到的东西会留在 CONTEXT.md 和 ADR(架构决策记录)里,成为仓库的永久资产。没有代码库就改用 /grill-me(见第 7 节的独立工具)。两者跑的是同一个底层纪律 /grilling(面试基本功),区别只在 grill-with-docs 会留下书面记录 (paper trail)。

4.2 第一个分支:所有问题都能在对话里解决吗

面试过程中如果冒出一个问题,光靠嘴说不清——涉及状态机的手感、业务逻辑的实际行为、 一个必须亲眼看到的 UI——主流程允许你岔出去做一次原型, 来回都靠 /handoff 搭桥:

  1. /handoff 把当前对话压成一个 markdown 文件,岔出去;
  2. 拿着那个文件新开一个会话,在里面跑 /prototype,用一次性代码回答那个问题;
  3. /handoff 把学到的东西带回来,在原来的想法线程里引用它。

注意这个岔路是「双向桥」:出去一次 handoff,回来再一次 handoff。原型代码本身是消耗品, 答案才是要带回主流程的东西(prototype 的纪律是「留住答案,删掉代码」,见 0008)。

4.3 第二个分支:这是多会话的大活吗

分支 路线 关键动作
是(多会话大活) /to-spec/to-tickets → 每张票一次 /implement to-spec 把对话拧成一份需求文档;to-tickets 把它拆成曳光弹式工作票, 每张票声明自己的阻塞边。本地工单系统里,一张票就是 .scratch/<feature>/issues/ 下的一个文件, 按「先解阻塞」的顺序手工推进;真工单系统里,阻塞边变成原生阻塞链接, 任何一张没被挡住的票都可以随时抓起来做。每张票清空上下文后单独 /implement
否(小活) 直接 /implement 就在当前这个上下文窗口里做掉,不绕 spec 和 tickets

无论走哪个分支,/implement 的内部都是同一套纪律: 它驱动 /tdd 一次做一片红绿循环(red-green slice:先写一个失败测试,再写实现让它通过), 收尾时跑 /code-review——一场沿两条轴的 diff 审查(Standards 轴查编码规范,Spec 轴查是否符合需求), 审完才提交(commit)。

SKILL.md 还特意给 tddcode-review 留了两个「单用」出口: 只想先测试先行地做一个小行为、不想要完整需求文档 → 单独用 /tdd; 想拿一个分支或 PR 对着某个固定点审一遍 → 单独用 /code-review。 这两个 skill 虽然是 model-invoked 的纪律层成员,但人也可以点名启动。

你的想法
  │
  ▼
/grill-with-docs ──── 没代码库? → /grill-me(不留记录)
  │
  ├─ 有问题嘴说不清? ─ /handoff ─→(新会话)/prototype ─ /handoff ─→ 带回答案
  │
  ▼
多会话大活?
  ├─ 是 ─ /to-spec ─ /to-tickets ─(每张票清上下文)─ /implement × N
  │                                              │  内部驱动 /tdd
  └─ 否 ─ 直接 /implement ───────────────────────┤  收尾 /code-review
                                                 ▼
                                              commit

权威原文:ask-matt/SKILL.md 的「The main flow」一节 · 各站课程: 0003 grilling · 0006 handoff · 0008 prototype · 0009 to-spec · 0010 to-tickets · 0011 implement · 0012 tdd · 0013 code-review

5. 上下文卫生与 smart zone

主流程一节里夹着一段 Context hygiene(上下文卫生),它是整张地图上少有的 「纪律性」文字,值得单独一节。「上下文」指 AI 在一个会话里能看到的全部内容;窗口有限, 塞得太满,推理质量就下滑。原文定了几条硬规矩:

  1. 第 1 到第 3 步(grill → spec → tickets)放在同一个不中断的上下文窗口里—— 在 /to-tickets 跑完之前,不要 compact、不要清上下文。 理由:面试、需求文档、拆票这三件事是在同一套思考上层层累积的,中间断一次, 后面两步就站在残缺的推理上。
  2. 每次 /implement 都新开一个干净会话,只带那一张票进去—— 别拖着之前聊了几万字的旧上下文。
  3. 盯着 smart zone:如果会话在 /to-tickets 之前就逼近聪明区上限, 不要顶着下滑的推理质量硬撑——用 /handoff 移交,在新线程里继续。 原文的措辞是「don't push on degraded」(别在降级状态下硬推)。
为什么这三条写在路由器里 上下文卫生本来可以散在各 skill 里,但作者把它写进了 ask-matt 的主流程一节—— 因为「什么时候该断、什么时候不该断」是流程级的知识,不属于任何一个单点 skill。 这是读这张地图的正确姿势:它不只在回答「用哪个」,也在回答「走到哪一步该换窗口」。

权威原文:ask-matt/SKILL.md 的「Context hygiene」一段 · smart zone 词条:aihero.dev/ai-coding-dictionary/smart-zone · 0001 的转述:0001 系统地图第 4.2 节

6. 三条半路入口与代码库保养

不是每份工作都从「我有个想法」开始。bug 是别人报的、故障是半夜冒出来的、大项目是雾做成的—— 这些处境各自有一条匝道,把工作产生出来、再并上主流程

6.1 /triage —— 别人提的工作堆起来了

处境:工单系统里堆着别人报的 bug 和需求。/triage 把 issue 挨个推过分拣角色 (triage role,状态机标签),产出 agent-ready 的 issue, 之后由 /implement 认领。

只分拣「不是你写的」issue 原文用粗体强调:triage 只处理不是你创建的 issue——别人报的 bug、外来的需求、 任何原生抵达的东西。/to-tickets 拆出来的票生来就是 agent-ready 的, 不要再拿 triage 过一遍。这条规矩 0001 也单独列过,它是整张地图上最容易踩的坑之一。

6.2 /diagnosing-bugs —— 有东西坏了,而且不好修

处境:有难缠的 bug——第一眼看不透的那种、间歇性发作的 flake、在两个已知良好状态之间 悄悄溜进来的回归。/diagnosing-bugs 的纪律是:在没有拿到一个 紧密反馈环(tight feedback loop:一条已经能因为这个 bug 变红的命令)之前,拒绝做任何推测; 修复时必须带上回归测试。它的复盘(post-mortem)环节有一个出口:当真正的发现是 「代码里没有一条好接缝能锁住这个 bug」时,移交给 /improve-codebase-architecture

6.3 /wayfinder —— 大到、模糊到一个会话装不下的活

处境:一片巨大的、雾蒙蒙的工程——绿地项目(greenfield,从零开始的项目)或超大功能, 从这里到目的地的路还看不见。/wayfinder 是全系统认知负荷最高的一条流程: 它在工单系统上画一张共享地图——一个 wayfinder:map 父 issue 挂着若干决策票——然后一次解决一张,产出的是决策,不是交付物, 直到雾被推回去、路看清为止。

对比项 /grill-with-docs /wayfinder
处理的想法 一个会话能装下的想法 一个会话装不下的想法
产出 磨清楚的想法 + CONTEXT/ADR 记录 一张决策地图:一堆决策票逐个解决
节奏 主流程第 1 步,轻快 更慢、更密——原文叮嘱「只留给真正的大雾,永远不要用在范围清楚的功能上」

雾散之后,原文用了加粗的四个字:它移交,不建造(it hands off, it doesn't build)。 默认在 /to-spec 并上主流程——to-spec 会把地图上链好的决策 坍缩成一份可建造的计划,然后照常 /to-tickets/implement。 把地图直接捅进 /implement 会跳过这次坍缩、把链好的细节全部扔掉—— 只有当工程量最后证明真的很小时,才允许直接进 /implement

6.4 Codebase health:/improve-codebase-architecture

这一格不是功能开发,是保养。/improve-codebase-architecture 的建议使用频率是 「一有空就跑」(whenever you have a spare moment),目标是让代码库始终保持「对 agent 友好」。 它扫描出加深机会(deepening opportunity:把浅模块加深的重构候选); 你挑中一个,就产生了一个新想法,可以拿进主流程的 /grill-with-docs。 原文给了一个很顺手的比喻:它是「找到候选的勘察」(survey), /codebase-design 是「设计那个入选候选的工作台」(bench)—— 勘察找出值得加工的石头,工作台负责加工。

权威原文:ask-matt/SKILL.md 的「On-ramps」和「Codebase health」两节 · 各站课程: 0014 triage · 0015 diagnosing-bugs · 0016 wayfinder · 0017 improve-codebase-architecture · 0005 codebase-design

7. 五个独立工具与跨会话

Standalone(独立工具)完全不在主流程上——想用就直接拿,没有前置步骤。 地图上列了五个,外加一对跨会话手段。

Skill 干什么 和主流程的关系
grill-me grill-with-docs 同样无情的面试,但面向没有代码库的场景。无状态:本地什么都不存,不建 CONTEXT.md 主流程第 1 步的「无代码库」替身;任何不活在仓库里的计划或设计都能拿它磨 0003
prototype 一个一次性的程序,回答一个设计问题:这个状态模型手感对吗、这个 UI 该长什么样。从第一天起就是消耗品——留住答案,删掉代码 主流程第 2 步的岔路;但任何「纸面上争不清」的设计问题都可以随时用它 0008
research 把阅读的体力活外包给一个后台 agent:它对着一手材料调查一个问题,在仓库里留下一份带引用的 Markdown 文件。它读的时候你继续干活 产出的文件是拿进 /grill-with-docs 的输入——research 喂给思考,不代替思考 0007
teach 跨多个会话学一个概念,把当前目录当成有状态的学习工作区(你现在上的这门课就是它产出的形态) 无——纯学习工具 0021
writing-great-skills 写和改 skill 的参考手册 无——它是「维护这套系统本身」的工具 0020

7.1 /handoff vs /compact:换窗口,还是不换

「跨会话」一节把两个容易混淆的手段并排钉死:

/handoff /compact(harness 自带)
做什么 把当前对话压成一个 markdown 文件;你不在原地继续,而是新开一个会话、引用那个文件,把上下文运过去。两个方向都能用 留在同一个会话里,让前面的轮次被压缩成摘要
什么时候用 想要一个新会话,但当前对话必须保住(线程满了、或要岔出去做原型) 处在阶段之间有意的断点,且不介意丢掉逐字历史
禁忌 不要在阶段中途 compact——agent 会迷路
一句话 /handoff 是分叉(fork);/compact 是继续(continue)

7.2 一个不在这张地图上的 skill

诚实地指出一个观察:resolving-merge-conflicts(解合并冲突)出现在 0001 的纪律层名单里, 但没有出现在 ask-matt 的地图上——它的 SKILL.md 通篇没有给它格子。 这和文档的自我描述一致:ask-matt 除了 user-invoked skill 之外,只点名「你会按名字够到的」 那几个 model-invoked skill(tdd、diagnosing-bugs、prototype、code-review 和两块词汇地板), 并不追求罗列全部 22 个。解冲突这种「在 implement 途中撞见、由纪律层接管」的基本功, 不是你会站在路口问「我该不该用它」的东西——撞见冲突的那一刻,答案已经写脸上了。 读这张地图时记住:它是路由指南,不是完整名册;完整名册在 0001 和 .claude-plugin/plugin.json

权威原文:ask-matt/SKILL.md 的「Standalone」和「Crossing sessions」两节 · 文档自述点名范围:docs/engineering/ask-matt.md · 名册:0001 系统地图 · 冲突一课:0018 resolving-merge-conflicts

8. 副作用、依赖关系、地图对照表

8.1 会留下什么:什么都不留

0001 的全表对 ask-matt 的「会改什么」一栏写的是:什么都不改,只在对话里指路。 不写仓库里的文件,不动工单系统,不产生 git 提交,不写临时目录。 它是 22 个 skill 里最「干净」的一个——跑一百次 ask-matt,仓库的 diff 依然是空的。 这也符合路由器的本分:它回答「which one, and when」,真正的痕迹由它指到的那个 skill 留下。

8.2 依赖谁、被谁依赖

8.3 地图对照表:每个被点名的 skill 对应哪节课

这张表是 ask-matt 地图和整套课程的索引。路由器说「去 X」,你就去 X 的课深读。

地图格子 Skill 启动方式 深课
Precondition setup-matt-pocock-skills User 0002
Main flow 第 1 步 grill-with-docs(底层 grilling) User 0003
Main flow 第 2 步岔路 handoff User 0006
Main flow 第 2 步岔路 prototype Model 0008
Main flow 第 3 步 to-spec User 0009
Main flow 第 3 步 to-tickets User 0010
Main flow 交付段 implement User 0011
implement 内部纪律 tdd Model 0012
implement 收尾 code-review Model 0013
On-ramp:外来工作 triage User 0014
On-ramp:难缠的 bug diagnosing-bugs Model 0015
On-ramp:大雾工程 wayfinder User 0016
Codebase health improve-codebase-architecture User 0017
Vocabulary underneath domain-modeling Model 0004
Vocabulary underneath codebase-design Model 0005
Standalone grill-me User 0003
Standalone research Model 0007
Standalone teach User 0021
Standalone writing-great-skills User 0020
不在地图上 resolving-merge-conflicts Model 0018

8.4 用完之后,下一步去哪

  1. 拿到指路了 → 亲手输入它点名的那个 skill。路由器不替你按回车。
  2. 它把你放到主流程某一步 → 按第 5 节的上下文卫生安排窗口:grill/spec/tickets 同一窗口,implement 每票新窗口。
  3. 它把你放到 on-ramp → 记住并线点:triage 出 agent-ready 的 issue 给 implement;diagnosing-bugs 的复盘可移交 architecture;wayfinder 雾散后默认去 to-spec。
  4. 已经知道答案 → 下次直接调目标 skill,别绕路由器。

副作用一栏:0001 系统地图第 5.1 节 · 「只定向不执行」:docs/engineering/ask-matt.md

9. 行为不对时改哪里

路由器「行为不对」只有一种形态:指路指错了,或者指路过时了。 因为它没有任何执行逻辑,微调入口也只有一个文件的几段文字。

症状 去改 不要误改
某种处境被指到了错误的 skill ask-matt/SKILL.md 里对应的小节(主流程 / On-ramps / Standalone / Vocabulary underneath / Crossing sessions 哪一段写错改哪段) 被指错的那个 skill 的 SKILL.md——它的行为未必有问题,是地图画错了
新增、改名、删除了一个 user-reachable skill,地图没跟上 ask-matt/SKILL.mdAGENTS.md 明文的同步义务),同时记得 README 和 .claude-plugin/plugin.json 也有各自的名单 只改 docs 页——docs 是叙事版,地图正文在 SKILL.md
某个 skill 自己的干活方式不对 那个 skill 的 SKILL.md 和它的 sibling 文件 ask-matt——路由器管不到 skill 的内部行为
AI 居然自己加载了 ask-matt(不该发生) 检查 SKILL.md frontmatter 的 disable-model-invocation: true 是否还在;agents/openai.yamlallow_implicit_invocation: false 是否还在 description 的措辞——它对 user-invoked skill 不是触发开关
你在斜杠菜单里看到的 ask-matt 简介不准确 frontmatter 的 description 字段(人看的摘要);agents/openai.yamlinterface.short_description 地图正文——那只是展示层文字
docs 页和 SKILL.md 的说法不一致 SKILL.md 为准(docs 自称「Source is the map of record」),然后同步 docs/engineering/ask-matt.md 反过来拿 docs 去改 SKILL.md
改地图之前,先分清错在哪一层 0001 给过一个判断框架:嫌某个 skill 干活不对 → 改那个 skill(或它的底层纪律 skill); 嫌流程之间的指引不对 → 改 ask-matt 的对应段落; 嫌 skill 之间的配置不对(工单系统在哪、标签叫什么) → 改 docs/agents/ 下的配置文件。 路由器的问题永远只是「文字描述的地图」和「真实的 skill 集合」对不上——没有第三种故障模式。

10. 检索练习

先别往回翻,凭记忆答。选项长度刻意对齐,不会从版式泄题。答错的题回到对应小节核对原文。

自测(立即反馈)

1. ask-matt 的调用方式是?
2. 跑完一次 ask-matt,仓库里会留下什么痕迹?
3. 有代码库、有个模糊想法,主流程默认第 1 步是?
4. wayfinder 的决策地图清空之后,默认下一步是?
5. /to-tickets 拆出来的票,要不要再拿 /triage 过一遍?
6. /handoff 和 /compact 的区别是?
7. 按上下文卫生纪律,grill → spec → tickets 应该怎么安排窗口?
8. 发现 ask-matt 把某种处境指到了错误的 skill,先改什么?
额外提取练习(无选项) 合上本页,拿一张白纸默画整张地图:一条主流程(含两个分支)、三条 on-ramp(各自从什么处境出发、 在哪里并上主流程)、Codebase health 一格、两块词汇地板、五个独立工具、一对跨会话手段、一个前置条件。 画完对照第 4 到第 7 节,漏掉的格子就是你还没内化的部分。 再补一道:说出三个「ask-matt 管不着」的问题类型(提示:skill 内部行为、配置层、以及它自己的调用锁)。

11. 下一课与一手材料

本课主一手材料(请打开原文读,不要只背本页摘要):

速查页(本课同步): reference/ask-matt.html

导航: 上一课 0018 resolving-merge-conflicts (不在 ask-matt 地图上的那个纪律层 skill)。 总览仍回 0001 系统地图

建议下一课(0020): 0020 writing-great-skills —— 你已经会把这套系统当用户用了:知道每条路通到哪、每个 skill 留什么痕迹。 下一课换一个身份:当作者——怎么写出和这 22 个一样好的 skill, 以及写完怎么让 ask-matt 这张地图把你收录进去(还记得「router that lies」吗)。

老师就在会话里。 对本课任何一个论断有疑问——比如某个处境到底该走哪条匝道、某两个 skill 的边界在哪、 地图上哪句话和你仓库里的实际行为对不上——直接在对话里问。 回答会回到 ask-matt/SKILL.md 和相关 skill 的原文,不会临场编造。 做完检索练习后,回复「练习结果 / 哪里卡住 / 开 0020 或先补前面某课」,我们安排下一课。