你刚装完 22 个 skill,新会话打开,光标在闪。手里有个模糊的想法,
或者一堆别人提的 bug,你盯着输入框想的第一个问题是:我现在该敲哪个斜杠命令?
ask-matt 就是为这个瞬间准备的:你用大白话描述处境,它告诉你该走哪条
flow(流程:一条穿过多个 skill 的路线)、从哪一步进、按什么顺序跑。
它自己什么都不干——不面试你、不写需求文档、不改代码,只负责指路。
学完这节课,你能默写出它的整张地图(一条主流程、三条半路入口、五个独立工具、两块词汇地板),
知道每条路之间在哪里并线,也知道当地图和现实脱节时,该去改哪个文件的哪一段。
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-matt 的 SKILL.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
ask-matt 是 user-invoked(只能人启动)的。这个事实写在两个地方,两道锁:
SKILL.md 的 frontmatter 里有一行 disable-model-invocation: true——
禁止模型(AI)主动调用这个 skill。
agents/openai.yaml 里有
policy.allow_implicit_invocation: false——
在 OpenAI 系的 harness 里同样禁止隐式(未经你点名的)调用。
文档把话说得很死:「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 会不会自己用它」的是上面那两行配置。
| 情境 | 该问 ask-matt 吗 |
为什么 |
|---|---|---|
| 有个想法,但完全不知道从哪里开始 | 该 | 它会把你放到主流程的第 1 步(有代码库 → /grill-with-docs) |
| 工单系统里堆了一堆别人提的 bug 和需求,不知道归谁管 | 该 | 它会指到半路入口 /triage(分拣外来工作的那条道) |
两个 skill 看起来差不多,分不清该用谁(比如 grill-me 和 grill-with-docs) |
该 | 路由器干的就是区分「长得像、位置不同」的 skill |
| 心里已经明确知道要用哪个 skill | 不该 | 文档原话:skip the router and invoke it directly(跳过路由器,直接调那个 skill);多绕一层只是浪费一轮对话 |
| 想知道某个 skill 内部怎么干活 | 不该 | 地图只告诉你去哪,不替你读懂目的地;去读那个 skill 自己的 SKILL.md 或对应课程 |
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」一节
ask-matt 不是词汇地板 skill(那是 domain-modeling 和 codebase-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),想用就直接拿,不存在「先跑到主流程第几步」的前提 | 以为独立工具和主流程互斥——prototype 和 research 的产出恰恰是喂给主流程的 |
| Precondition(前置条件) | 跑第一条工程流程之前要先跑一次 /setup-matt-pocock-skills,把工单系统、triage 标签、文档布局配置好;自定义的工单系统也支持 |
跳过它直接跑 to-spec / triage——那些 skill 假设配置已经存在 |
地图上还会碰到几个来自 CONTEXT.md 的领域词和来自其它 skill 的术语,先在这里钉住,
后面不再重复解释:
.scratch/ 目录下的 markdown 约定。
to-tickets 拆出来的一片交付。
wayfinder 专用的一种 issue——
挂在 wayfinder:map 父 issue 下的子 issue,装的是一个问题,
它的「解决」意味着做出一个决策,而不是交付一片代码。
needs-triage、ready-for-afk),每个角色对应工单系统里一个真实标签字符串。
to-tickets 拆出来的票,
每张都是端到端能跑通的一小片(像曳光弹一样从枪膛直穿到目标),而不是「先做完整层数据库再做完整层 UI」的水平切片。
结构词汇:ask-matt/SKILL.md 各小节标题 · 领域词:CONTEXT.md · smart zone 词条:aihero.dev/ai-coding-dictionary/smart-zone
SKILL.md 对主流程的介绍只有一句话:「The route most work travels. You have an idea and want it built.」
(多数工作走的路线。你有个想法,想把它做出来。)下面按原文的三步加一个分支结构拆开讲,
每一步都标出它点名的 skill 和对应的课。
主流程从/grill-with-docs开始:有代码库就从这里开始。
它是「有状态的」(stateful)——面试过程中学到的东西会留在 CONTEXT.md 和
ADR(架构决策记录)里,成为仓库的永久资产。没有代码库就改用
/grill-me(见第 7 节的独立工具)。两者跑的是同一个底层纪律
/grilling(面试基本功),区别只在 grill-with-docs 会留下书面记录
(paper trail)。
面试过程中如果冒出一个问题,光靠嘴说不清——涉及状态机的手感、业务逻辑的实际行为、
一个必须亲眼看到的 UI——主流程允许你岔出去做一次原型,
来回都靠 /handoff 搭桥:
/handoff 把当前对话压成一个 markdown 文件,岔出去;/prototype,用一次性代码回答那个问题;/handoff 把学到的东西带回来,在原来的想法线程里引用它。
注意这个岔路是「双向桥」:出去一次 handoff,回来再一次 handoff。原型代码本身是消耗品,
答案才是要带回主流程的东西(prototype 的纪律是「留住答案,删掉代码」,见 0008)。
| 分支 | 路线 | 关键动作 |
|---|---|---|
| 是(多会话大活) | /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 还特意给 tdd 和 code-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
主流程一节里夹着一段 Context hygiene(上下文卫生),它是整张地图上少有的 「纪律性」文字,值得单独一节。「上下文」指 AI 在一个会话里能看到的全部内容;窗口有限, 塞得太满,推理质量就下滑。原文定了几条硬规矩:
/to-tickets 跑完之前,不要 compact、不要清上下文。
理由:面试、需求文档、拆票这三件事是在同一套思考上层层累积的,中间断一次,
后面两步就站在残缺的推理上。
/implement 都新开一个干净会话,只带那一张票进去——
别拖着之前聊了几万字的旧上下文。
/to-tickets 之前就逼近聪明区上限,
不要顶着下滑的推理质量硬撑——用 /handoff 移交,在新线程里继续。
原文的措辞是「don't push on degraded」(别在降级状态下硬推)。
ask-matt 的主流程一节——
因为「什么时候该断、什么时候不该断」是流程级的知识,不属于任何一个单点 skill。
这是读这张地图的正确姿势:它不只在回答「用哪个」,也在回答「走到哪一步该换窗口」。
权威原文:ask-matt/SKILL.md 的「Context hygiene」一段 · smart zone 词条:aihero.dev/ai-coding-dictionary/smart-zone · 0001 的转述:0001 系统地图第 4.2 节
不是每份工作都从「我有个想法」开始。bug 是别人报的、故障是半夜冒出来的、大项目是雾做成的—— 这些处境各自有一条匝道,把工作产生出来、再并上主流程。
处境:工单系统里堆着别人报的 bug 和需求。/triage 把 issue 挨个推过分拣角色
(triage role,状态机标签),产出 agent-ready 的 issue,
之后由 /implement 认领。
/to-tickets 拆出来的票生来就是 agent-ready 的,
不要再拿 triage 过一遍。这条规矩 0001 也单独列过,它是整张地图上最容易踩的坑之一。
处境:有难缠的 bug——第一眼看不透的那种、间歇性发作的 flake、在两个已知良好状态之间
悄悄溜进来的回归。/diagnosing-bugs 的纪律是:在没有拿到一个
紧密反馈环(tight feedback loop:一条已经能因为这个 bug 变红的命令)之前,拒绝做任何推测;
修复时必须带上回归测试。它的复盘(post-mortem)环节有一个出口:当真正的发现是
「代码里没有一条好接缝能锁住这个 bug」时,移交给 /improve-codebase-architecture。
处境:一片巨大的、雾蒙蒙的工程——绿地项目(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。
这一格不是功能开发,是保养。/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
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 |
「跨会话」一节把两个容易混淆的手段并排钉死:
/handoff |
/compact(harness 自带) |
|
|---|---|---|
| 做什么 | 把当前对话压成一个 markdown 文件;你不在原地继续,而是新开一个会话、引用那个文件,把上下文运过去。两个方向都能用 | 留在同一个会话里,让前面的轮次被压缩成摘要 |
| 什么时候用 | 想要一个新会话,但当前对话必须保住(线程满了、或要岔出去做原型) | 处在阶段之间有意的断点,且不介意丢掉逐字历史 |
| 禁忌 | — | 不要在阶段中途 compact——agent 会迷路 |
| 一句话 | /handoff 是分叉(fork);/compact 是继续(continue) |
|
诚实地指出一个观察: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
0001 的全表对 ask-matt 的「会改什么」一栏写的是:什么都不改,只在对话里指路。
不写仓库里的文件,不动工单系统,不产生 git 提交,不写临时目录。
它是 22 个 skill 里最「干净」的一个——跑一百次 ask-matt,仓库的 diff 依然是空的。
这也符合路由器的本分:它回答「which one, and when」,真正的痕迹由它指到的那个 skill 留下。
AGENTS.md 的「router that lies」警告)。
这张表是 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 |
副作用一栏:0001 系统地图第 5.1 节 · 「只定向不执行」:docs/engineering/ask-matt.md
路由器「行为不对」只有一种形态:指路指错了,或者指路过时了。 因为它没有任何执行逻辑,微调入口也只有一个文件的几段文字。
| 症状 | 去改 | 不要误改 |
|---|---|---|
| 某种处境被指到了错误的 skill | ask-matt/SKILL.md 里对应的小节(主流程 / On-ramps / Standalone / Vocabulary underneath / Crossing sessions 哪一段写错改哪段) |
被指错的那个 skill 的 SKILL.md——它的行为未必有问题,是地图画错了 |
| 新增、改名、删除了一个 user-reachable skill,地图没跟上 | ask-matt/SKILL.md(AGENTS.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.yaml 的 allow_implicit_invocation: false 是否还在 |
description 的措辞——它对 user-invoked skill 不是触发开关 |
| 你在斜杠菜单里看到的 ask-matt 简介不准确 | frontmatter 的 description 字段(人看的摘要);agents/openai.yaml 的 interface.short_description |
地图正文——那只是展示层文字 |
| docs 页和 SKILL.md 的说法不一致 | 以 SKILL.md 为准(docs 自称「Source is the map of record」),然后同步 docs/engineering/ask-matt.md |
反过来拿 docs 去改 SKILL.md |
ask-matt 的对应段落;
嫌 skill 之间的配置不对(工单系统在哪、标签叫什么) → 改 docs/agents/ 下的配置文件。
路由器的问题永远只是「文字描述的地图」和「真实的 skill 集合」对不上——没有第三种故障模式。
先别往回翻,凭记忆答。选项长度刻意对齐,不会从版式泄题。答错的题回到对应小节核对原文。
本课主一手材料(请打开原文读,不要只背本页摘要):
skills/engineering/ask-matt/SKILL.md
—— 整张地图的权威原文:主流程、上下文卫生、on-ramps、codebase health、词汇地板、跨会话、standalone、前置条件。
skills/engineering/ask-matt/agents/openai.yaml
—— 调用锁的第二道:allow_implicit_invocation: false。
docs/engineering/ask-matt.md
—— 给人看的叙事版:「它不干活,只定向」「flow 而不是单个 skill」。
(线上版:aihero.dev/skills-ask-matt)
AGENTS.md
—— 「router that lies」同步义务的出处:改任何 user-reachable skill,就要回来改这张地图。
CONTEXT.md
—— Issue tracker / Issue / Decision ticket / Triage role 四个领域词的唯一定义。
速查页(本课同步): 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」吗)。
ask-matt/SKILL.md 和相关 skill 的原文,不会临场编造。
做完检索练习后,回复「练习结果 / 哪里卡住 / 开 0020 或先补前面某课」,我们安排下一课。