Skill Learning

ask-matt

1. Bilingual SKILL.md

左右滑动可直接切换英文版与中文版;两种语言按段落自动对齐。英文中的蓝色虚线词语可点击查看解释。共标记 14 处。

入口 skill:ask-matt左右滑动切换语言 · 段落位置自动对齐
# Ask Matt
You don't remember every skill, so ask.
A **flow** is . Most paths run along one **main flow**, and two **** merge onto it. Everything else is standalone, or a vocabulary layer that runs underneath.
## The main flow: idea → ship
The route most work travels. You have an idea and want it built.
1. **`/grill-with-docs`** sharpens the idea by interview. Start here whenever you are **working in a working directory**: it's stateful, retaining what it learns in `GLOSSARY.md` and ADRs. (No working directory? Use `/grill-me` instead, covered under Standalone. Both run the same `/grilling` primitive; `grill-with-docs` is the one that , which makes it the better of the two whenever a repo is there to leave it in.) 2. **Branch: can you settle every question in conversation?** If a question needs a runnable answer (state, business logic, a UI you have to see), , bridged by **`/handoff`** in both directions (a prototype lives in its own directory, which is exactly what `/handoff` is for; see Phase boundaries): - **`/handoff`** out, then open a fresh session against that file, - **`/prototype`** to answer the question with throwaway code, - **`/handoff`** back what you learned, and reference it from the original idea thread. 3. **Branch: is this a multi-session build?** - **Yes** → **`/to-spec`** (turn the thread into a spec), then **`/to-tickets`** to split it into , each declaring its ****. Then work the tickets one of two ways: - **`/implement`** per ticket, **`/clear`ing context between each one**. On a local tracker that's one file per ticket under `.scratch/<feature>/issues/`, worked blockers-first by hand; on a real tracker the edges become native blocking links, so any ticket whose blockers are done can be grabbed. Each ticket is self-contained, so the last one's context is disposable. - **`/implement-spec`** for the whole spec in one run. It reads the tickets as a **task graph**, runs implementer subagents across the ready **frontier** in parallel, and lands everything on one **integration branch**. Reach for it when you'd rather orchestrate the build than drive each ticket yourself. - **No** → **`/implement`** right here, in the same context window.
Either way, the code gets built by driving **`/tdd`** (one red-green slice at a time) and closes out with **`/code-review`**, a two-axis review (Standards + Spec) of the diff. `/implement` runs both per ticket; `/implement-spec`'s implementers each drive `/tdd`, and it runs one `/code-review` over the integration branch. Reach for **`/tdd`** on its own when you just want to build a concrete behaviour test-first without a full spec, and **`/code-review`** on its own whenever you want to review a branch or PR against a fixed point.
When the work goes up as a pull request, **`/pr`** shapes the body: the smallest visual that shows the change, before/after evidence that it works, and a one-way or two-way door call. It's model-invoked, so the agent reaches for it whenever it writes a PR.
4. **`/retro`** closes the loop. After a build, and especially one that went sideways, it looks back over the session and suggests changes to the agent's **environment**, not the code: navigation pointers, automated checks, the coding standards `/code-review` enforces, steering files, tooling. Mechanical mistakes become deterministic checks; judgement calls become coding standards. The next build then starts from a better environment.
### Context hygiene
Keep steps 1–3 in **** (don't compact or clear until after `/to-tickets`) so the grilling, spec, and tickets all build on the same thinking. Each `/implement` then starts fresh, working from the ticket. Run `/retro` in the session it's looking back on, before you clear; after clearing, point it at that session's log instead.
The limit on this is the **[smart zone](https://www.aihero.dev/ai-coding-dictionary/smart-zone)**: the window (~150k tokens on state-of-the-art models) within which the model still reasons sharply. If a session approaches it before `/to-tickets`, don't push on degraded; `/compact` at the nearest phase boundary and carry on (see Phase boundaries).
##
A starting situation that generates work, then merges onto the main flow.
- **Bugs and requests piling up** → **`/triage`**. It moves issues through triage roles and produces agent-ready issues, which **`/implement`** later picks up.
Triage is only for issues **you didn't create**: bug reports, incoming feature requests, anything that arrives raw. Tickets that `/to-tickets` produced are already agent-ready, so **don't triage them**.
- **Something's broken** → **`/diagnosing-bugs`**. For the hard ones: the bug that resists a first glance, the intermittent flake, the regression that crept in between two known-good states. It refuses to theorise until it has a **** (one command that already goes red on *this* bug), then fixes with a regression test. Its post-mortem hands off to **`/improve-codebase-architecture`** when the real finding is that there's no good seam to lock the bug down.
- **A huge, foggy effort: a greenfield project or a huge feature build, too big for one session** → **`/wayfinder`**, the most cognitively demanding flow here. When the way from here to the destination isn't visible yet, it charts a **shared map** of **decision tickets** on the issue tracker and resolves them one at a time, , until the fog is pushed back and the way is clear. Where **`/grill-with-docs`** sharpens an idea you can hold in one session, wayfinder is for the idea you can't, and it's slower and denser, so save it for exactly that, never a well-scoped feature.
When the map clears, **it hands off, it doesn't build**: merge onto the main flow at **`/to-spec`**, which collapses the map's linked decisions into a buildable plan, then `/to-tickets` and `/implement` as usual. Looping the map straight into `/implement` skips that collapse and throws the linked detail away, so go straight to `/implement` only when the effort turned out genuinely small.
## Codebase health
Not feature work, just upkeep.
- **`/improve-codebase-architecture`** runs whenever you have a spare moment to keep the codebase good for agents to operate in. It surfaces ****; picking one _generates an idea_ you can take into the main flow at `/grill-with-docs`. It's the survey that finds the candidates; **`/codebase-design`** (below) is the bench you design the chosen one on.
## Vocabulary underneath
Two model-invoked references that run *beneath* the other skills, each the single source of truth for its vocabulary. Reach for them directly when the **words**, not the process, are the problem; or let the skills above pull them in.
- **`/domain-modeling`**: sharpen the project's *domain* language: challenge a fuzzy term, resolve an overloaded word ("account" doing three jobs), record a hard-to-reverse decision as an ADR. It's the active discipline `/grill-with-docs` drives to keep `GLOSSARY.md` a clean glossary. - **`/codebase-design`** is the deep-module vocabulary (module, interface, depth, seam, adapter, leverage, locality) for designing a module's *shape*: a lot of behaviour behind a small interface at a clean seam. `/tdd` and `/improve-codebase-architecture` both speak it.
## Phase boundaries
A **phase** is a chunk of work inside a session: the grilling, the implementation, the QA. At the **boundary** between two of them you have five options, and picking between them is the fuzziest decision in this whole map:
- **Continue**: stay put. Costs nothing, loses nothing. - **`/clear`**: empty the window, when nothing here matters to what's next. - **`/handoff`** writes a portable markdown file. Narrow: only for a **new harness**, a **new directory**, a **colleague**, or forking a side task **mid-phase**. What it buys is portability. - **Subagent**: send a tightly-scoped task to its own window and get a report back. - **`/compact`** compresses this context and seeds a fresh session with it. The **default**, at the bottom of the tree rather than the first reach.
Read [PHASE-BOUNDARIES.md](PHASE-BOUNDARIES.md) for the ordered tree: the five questions, the reasoning behind each branch, and why the primary-source cost makes **Continue** . Make the decision **at** a boundary; mid-phase, continue or split the rest into subagents.
## Standalone
Off the main flow entirely.
- **`/grill-me`**: the same relentless interview as `/grill-with-docs`, but **stateless**: it saves nothing locally and builds no `GLOSSARY.md`. Reach for it when you are **not working in a working directory** (sharpening a plan, a design, a piece of writing, anything with no repo under it). If you are in a working directory, use `/grill-with-docs` instead: it runs the same interview and , so it is strictly the better one. - **`/grilling`** is the interview primitive itself: rounds, the frontier, facts are the agent's job and decisions are yours. `/grill-me` and `/grill-with-docs` are the two named ways in, and `/triage`, `/wayfinder` and `/improve-codebase-architecture` all run it internally. Reach for it directly only when you want the interview with no wrapper around it. - **`/prototype`** is a small, throwaway program that answers one design question: does this state model feel right, or what should this UI look like. Throwaway is a constraint on how the code is written, not a promise to destroy it: the answer folds into the real code, and the prototype itself is kept as a **primary source** on a `prototype/<name>` branch out of main, pointed at from the implementation issue. It's the detour in step 2 of the main flow, but reach for it any time a design question is hard to settle on paper. - **`/research`**: delegate reading legwork to a **background agent**: it investigates a question against **primary sources**, then leaves a cited Markdown file in the repo. Keep working while it reads. The file it produces is something to take *into* the main flow at `/grill-with-docs`, since research feeds the thinking rather than replacing it. - **`/to-questionnaire`** comes in when the thing blocking you isn't in your head or the codebase but in **someone else's**, and it writes them a questionnaire to fill in. It's the inverse of `/grill-me`: instead of interviewing you about the subject, it interviews you about the **send** (who it's going to, what you need back) and aims the questions at the gap. What comes back is material for `/grill-with-docs` or `/to-spec`. - **`/wizard`** is for the steps only a **human** can take: provisioning infrastructure, setting up credentials or CI secrets, clicking through an unfamiliar third-party dashboard, running a one-off migration or cutover. It generates an interactive bash script that opens each URL, captures each value, and writes it into `.env` and GitHub secrets, so the procedure stops being something you re-explain to an agent every time. Model-invoked, so the agent reaches for it the moment it hits a wall only you can pass. If the agent could just do it itself, it should; this is for where a . - **`/wait-what`** is the corrective for a message that didn't land. Use it mid-conversation, inside any other skill, and the agent re-pitches what it just said with the context you were missing, in plain English, using the `GLOSSARY.md` vocabulary. It works after the fact; `/grill-with-docs` is the upfront cure, because a shared language agreed early is what stops the jargon arriving at all. - **`/teach`**: learn a concept over multiple sessions, using the current directory as a stateful workspace. - **`/writing-for-agents`** is the reference for writing documents agents consume: skills, AGENTS.md, pointed-at docs.
## Precondition
**`/setup-matt-pocock-skills`**: run before your first engineering flow to configure the issue tracker, triage labels, and doc layout the other skills assume. Custom issue trackers also work.
# 问 Matt
你不会记得每一个 skill,所以直接问吧。
**流程(flow)**是一条依次经过多个 skill 的路径。大多数路径沿着一条**主流程(main flow)**运行,另有两条**入口匝道(on-ramp)**汇入其中。其余内容要么独立运行,要么作为底层的词汇层。
## 主流程:想法 → 发布
这是大多数工作的行进路线。你有了一个想法,并希望把它构建出来。
1. **`/grill-with-docs`**——通过访谈把想法打磨清楚。只要你正**在一个工作目录中开展工作**,就从这里开始:它是有状态的,会把了解到的内容保留在 `GLOSSARY.md` 和架构决策记录(ADR)中。(没有工作目录?请使用 `/grill-me`——见“独立运行”一节。两者都运行同一个 `/grilling` 基础能力;只要有仓库可供留下记录,`grill-with-docs` 就会留下书面轨迹,因此它总是两者中更好的选择。) 2. **分支——你能否在对话中敲定所有问题?** 如果某个问题需要通过可运行的结果来回答(状态、业务逻辑,或者必须亲眼看到的 UI),就绕道经过一个原型,并在两个方向上都使用 **`/handoff`** 进行衔接(原型位于自己的目录中,而这恰好就是 `/handoff` 的用武之地——参见“阶段边界”): - 使用 **`/handoff`** 交接出去,然后基于该文件打开一个全新的会话; - 使用 **`/prototype`**,用一次性代码回答问题; - 再用 **`/handoff`** 把学到的内容交接回来,并从最初的想法讨论串中引用它。 3. **分支——这是一个跨多个会话的构建任务吗?** - **是** → 使用 **`/to-spec`**(把讨论串转化为规格说明),再用 **`/to-tickets`** 将其拆成示踪弹(tracer-bullet)工单,每张工单都声明自己的**阻塞边(blocking edges)**。然后通过以下两种方式之一处理这些工单: - 针对每张工单运行 **`/implement`**,并且**在各张工单之间使用 `/clear` 清空上下文**。在本地跟踪器中,每张工单对应 `.scratch/<feature>/issues/` 下的一个文件,并由人工按照阻塞者优先的顺序处理;在真正的跟踪器中,这些边会变成原生的阻塞链接,因此只要某张工单的阻塞项都已完成,就可以领取它。每张工单都是自包含的,所以最后一张工单留下的上下文也可以丢弃。 - 对整份规格一次运行 **`/implement-spec`**。它把工单读取为一张**任务图(task graph)**,让实现子 agent 并行处理已就绪的**前沿(frontier)**,并将所有成果落到一个**集成分支(integration branch)**上。当你更愿意编排整个构建,而不是亲自逐张推进工单时,请使用它。 - **否** → 就在这里、在同一个上下文窗口中运行 **`/implement`**。
无论哪种方式,代码都会通过驱动 **`/tdd`**(每次一个“红灯—绿灯”切片)来构建,并以 **`/code-review`** 收尾,对差异执行双轴审查(规范 + 规格)。`/implement` 会针对每张工单运行两者;`/implement-spec` 的每个实现子 agent 都会驱动 `/tdd`,并在集成分支上统一运行一次 `/code-review`。如果你只是想以测试优先方式构建某个具体行为,而不需要完整规格,可以单独使用 **`/tdd`**;如果你想相对于一个固定基准审查分支或 PR,则可以单独使用 **`/code-review`**。
当工作以拉取请求(PR)的形式提交时,**`/pr`** 会塑造正文:用最小的视觉内容展示变更,给出能证明其有效的前后对比证据,并说明这是单向门还是双向门决策。它由模型调用,所以 agent 每次编写 PR 时都会主动使用它。
4. **`/retro`** 负责闭环。构建完成后,尤其是构建过程出现偏航时,它会回顾会话并建议修改 agent 的**环境**而不是代码:导航指针、自动检查、由 `/code-review` 执行的编码规范、引导文件和工具。机械性错误会变成确定性检查;需要判断的问题会变成编码规范。下一次构建就能从一个更好的环境开始。
### 上下文卫生
让第 1–3 步处于**一个不中断的上下文窗口**中——在 `/to-tickets` 之后再压缩或清空——这样访谈、规格和工单才能建立在同一套思考之上。之后,每次 `/implement` 都从新鲜上下文开始,并以对应工单为依据开展工作。要在 `/retro` 所回顾的那个会话中、清空之前运行它;如果已经清空,就改为让它读取该会话的日志。
这里的上限是 **[智能区(smart zone)](https://www.aihero.dev/ai-coding-dictionary/smart-zone)**:在这个窗口内(最先进模型大约为 15 万 token),模型仍能敏锐推理。如果会话在抵达 `/to-tickets` 之前就接近该上限,不要在能力退化时硬撑——在最近的阶段边界执行 `/compact`,然后继续(见“阶段边界”)。
## 入口匝道
某种能够产生工作、然后汇入主流程的起始情境。
- **缺陷与请求不断堆积** → **`/triage`**。它会让议题依次经过多个分诊角色,并产出 agent 已可直接处理的议题,之后由 **`/implement`** 接手。
分诊只适用于**并非由你创建**的议题——缺陷报告、传入的功能请求,以及任何以原始状态抵达的内容。由 `/to-tickets` 产出的工单已经可以交给 agent,因此**不要再对它们进行分诊**。
- **某个东西坏了** → **`/diagnosing-bugs`**。它用于棘手问题:第一眼无法解决的缺陷、间歇性不稳定测试,以及悄悄出现在两个已知正常状态之间的回归问题。它会拒绝先做理论推测,直到拥有一个**紧密反馈闭环(tight feedback loop)**——一条能针对*这个*缺陷稳定变红的命令——然后通过回归测试完成修复。如果事后分析发现真正的问题是缺少一个能够锁定该缺陷的良好接缝(seam),它会把任务交给 **`/improve-codebase-architecture`**。
- **一项庞大而模糊的工作——一个全新项目或大型功能构建,大到无法在单个会话中完成** → **`/wayfinder`**,这是这里认知要求最高的流程。当从当前位置到目的地的路径还不可见时,它会在议题跟踪器上绘制一张由**决策工单(decision tickets)**组成的**共享地图**,并逐个解决它们——产出的是**决策,而不是交付物**——直到迷雾被推开、道路变得清晰。`/grill-with-docs` 用于打磨一个你能在单个会话中把握的想法,而 wayfinder 用于处理你无法在单个会话中把握的想法;它更慢、信息也更密集,所以只应在确实符合这种情境时使用,绝不要用于边界清晰的功能。
当地图变清晰后,**它会交接,而不会构建**:在 **`/to-spec`** 处汇入主流程,由它把地图中彼此链接的决策压缩成可构建的计划,之后照常运行 `/to-tickets` 和 `/implement`。让地图直接流入 `/implement` 会跳过这一步压缩,并丢掉相互链接的细节;只有当这项工作后来证明确实很小时,才直接进入 `/implement`。
## 代码库健康
这不是功能工作,而是维护工作。
- **`/improve-codebase-architecture`**——只要有空闲时间就运行它,让代码库始终适合 agent 操作。它会发现**深化机会(deepening opportunities)**;选择其中一个,就会*产生一个想法*,然后你可以在 `/grill-with-docs` 处将其带入主流程。它像一次勘测,用来找出候选对象;**`/codebase-design`**(见下文)则像一张工作台,用于设计选中的对象。
## 底层词汇
有两个由模型调用的参考 skill 运行在其他 skill 的*底层*——每个都是自身词汇的单一事实来源(single source of truth)。当问题出在**词语**而不是流程时,可以直接调用它们;也可以让上面的 skill 按需将它们引入。
- **`/domain-modeling`**——打磨项目的*领域*语言:质疑一个模糊术语,澄清一个含义过载的词(例如 `account` 同时承担三种含义),并将难以逆转的决策记录为 ADR。它是 `/grill-with-docs` 主动采用的纪律,用于让 `GLOSSARY.md` 保持为一份干净的术语表。 - **`/codebase-design`**——提供深模块(deep module)词汇(模块、接口、深度、接缝、适配器、杠杆作用、局部性),用于设计模块的*形状*:在一个干净的接缝处,用一个小接口隐藏大量行为。`/tdd` 和 `/improve-codebase-architecture` 都使用这套语言。
## 阶段边界
一个**阶段(phase)**是会话内部的一段工作——访谈、实现或质量保证(QA)。在两个阶段之间的**边界(boundary)**上,你有五个选项,而如何选择正是整张地图中最模糊的决策:
- **继续(Continue)**——留在原处。没有成本,也不会丢失任何内容。 - **`/clear`**——如果此处的任何内容对下一步都不重要,就清空窗口。 - **`/handoff`**——写出一个可移植的 Markdown 文件。它的适用范围很窄:仅用于**新的运行容器(harness)**、**新的目录**、**同事**,或者在**阶段中途**分叉出支线任务。它带来的价值是可移植性。 - **子 agent(Subagent)**——把一个范围严格受限的任务发送到它自己的窗口中,然后取回报告。 - **`/compact`**——压缩当前上下文,并用它为一个新会话提供初始信息。这是**默认选项**,应位于决策树底部,而不是一开始就伸手去拿的选项。
请阅读 [PHASE-BOUNDARIES.md](PHASE-BOUNDARIES.md),了解有顺序的决策树——五个问题、每条分支背后的推理,以及为什么主要来源(primary source)的成本使得“**继续**”成为最先应该排除的选项。要在边界处做决定;在阶段中途,要么继续,要么把余下工作拆给多个子 agent。
## 独立运行
完全位于主流程之外。
- **`/grill-me`**——与 `/grill-with-docs` 一样毫不松懈的访谈,但它是**无状态的**:不会在本地保存任何内容,也不会构建 `GLOSSARY.md`。当你**并非在工作目录中开展工作**时使用它——例如打磨计划、设计、文章,以及任何下方没有仓库的内容。如果你位于工作目录中,请改用 `/grill-with-docs`:它运行同样的访谈并留下书面轨迹,因此严格来说是更好的选择。 - **`/grilling`**——访谈基础能力本身:分轮进行、维护问题前沿(frontier),事实由 agent 负责,决策由你负责。`/grill-me` 和 `/grill-with-docs` 是两个具名入口,而 `/triage`、`/wayfinder` 和 `/improve-codebase-architecture` 都会在内部运行它。只有当你想要不带任何套壳的纯访谈时,才直接调用它。 - **`/prototype`**——一个小型的一次性程序,用于回答一个设计问题:这种状态模型感觉对吗,或者这个 UI 应该是什么样子。一次性是对代码编写方式的约束,并非销毁代码的承诺:答案会融入真实代码,而原型本身会作为**主要来源**保留在从 main 分出的 `prototype/<name>` 分支上,并由实现议题指向它。它是主流程第 2 步中的绕行路线,但只要某个设计问题很难在纸面上敲定,就可以使用它。 - **`/research`**——把阅读资料的腿脚工作委派给一个**后台 agent**:它会依据**主要来源**调查问题,然后在仓库中留下一个带引用的 Markdown 文件。在它阅读时继续你的工作。它产出的文件应当在 `/grill-with-docs` 处被带*入*主流程——研究为思考提供素材,但不能取代思考。 - **`/to-questionnaire`**——当阻塞你的内容不在你的脑中或代码库里,而在**别人的脑中**时,它会写出一份问卷请对方填写。它与 `/grill-me` 相反:不是就主题采访你,而是就**发送行为**采访你——要发给谁、你需要对方返回什么——然后让问题瞄准信息缺口。收到的回答可以成为 `/grill-with-docs` 或 `/to-spec` 的输入材料。 - **`/wizard`**——用于只有**人类**才能完成的步骤:配置基础设施、设置凭据或 CI secret、点击浏览陌生的第三方控制面板,以及运行一次性迁移或切换。它会生成一个交互式 bash 脚本,依次打开每个 URL、捕获每个值,并将它写入 `.env` 和 GitHub secrets——这样,该流程就不再是你每次都要向 agent 重新解释的东西。它由模型调用,因此一旦 agent 撞上一堵只有你能越过的墙,就会使用它。如果 agent 自己就能完成,它就应该自己做;这个 skill 用于真正需要人类参与闭环的地方。 - **`/wait-what`**——用于纠正一条未能让人理解的消息。可以在任何其他 skill 内部、对话进行中使用它,agent 会用你之前缺失的上下文和 `GLOSSARY.md` 中的词汇,以浅白英语重新表述刚才的内容。它在问题发生后生效;`/grill-with-docs` 才是事前的解法,因为尽早约定共享语言,才能从一开始就阻止术语突兀出现。 - **`/teach`**——使用当前目录作为有状态工作区,跨多个会话学习一个概念。 - **`/writing-for-agents`**——关于编写供 agent 使用的文档的参考资料:skill、`AGENTS.md`,以及由它们指向的文档。
## 前置条件
**`/setup-matt-pocock-skills`**——在第一次运行工程流程之前使用它,配置其他 skill 所假定的议题跟踪器、分诊标签和文档布局。也支持自定义议题跟踪器。

Entry SHA-256: 3f0f34614070aba3d9a7e2bd210718d78b9b942dd0f9af0c5869234fe34e16af

2. Why This Skill Is Clever

一句话核心机制

ask-matt 把一组容易被误读为命令清单的 Skill 组织成一张按起始情境、证据需求、构建规模和上下文边界导航的有向流程图:它不仅指出下一步,还明确支线如何汇流、并行构建如何集成,以及经验如何通过复盘反馈到下一轮。

触发与边界

直接来源: frontmatter 写明 Ask which skill or flow fits your situation,并设置 disable-model-invocation: true,所以这是用户主动调用的路由入口。它不是纯套壳:正文拥有完整步骤、选择条件、排除规则与输出关系,并未把整个任务委托给单一实现 Skill。

支持性上下文: agents/openai.yaml 同样设置 allow_implicit_invocation: false;仓库根 AGENTS.md 要求用户可达 Skill 的新增、改名、删除或流程位置变化都同步更新 ask-matt。这些文件解释了调用边界与维护机制,但不属于本报告展示的原文。

信息架构 / 执行顺序

  1. 定义 flow、main flow 与 on-ramps,先给读者一套最小导航词汇。
  2. 展开 idea → ship 主干,用“能否仅靠对话解决”和“是否跨会话”设置两个关键分支。
  3. 多会话分支再按控制方式分流:逐票运行 /implement,或由 /implement-spec 读取任务图并行编排。
  4. /pr 负责把实现证据塑造成可审阅的 PR,/retro 再把会话经验反馈到 agent 环境。
  5. 特殊起点、代码库维护、底层词汇、阶段边界和独立工具分别成组,避免混成一张扁平清单。
  6. 最后给出整个工程流程的前置配置。

最巧妙的设计点

1. 道路隐喻直接表达流程拓扑

“two on-ramps merge onto it”

直接来源: on-ramps、detour、merge 分别表示入口、短暂偏航和重新汇流。它们让读者看出原型与 wayfinder 都不是终点,而不是只记住扁平顺序。

2. 原型分支检查证据需求,而非工具偏好

“can you settle every question in conversation?”

直接来源: 只有状态、业务逻辑或必须亲眼看到的 UI 无法靠讨论敲定时,才绕道原型。设计解释: 好的路由问题应检查“缺少哪类证据”,而不是问用户“想不想做原型”。

3. 同一任务图支持两种控制模式

“work the tickets one of two ways”

直接来源: /implement 逐票执行、票间清空上下文;/implement-spec 则在就绪前沿上并行调度子 agent,并统一落到集成分支。设计解释: 路由没有把并行误写成另一套需求分解方法,而是让同一批自包含工单服务于人工推进和自动编排两种模式。

4. PR 与复盘把“完成”延伸成反馈回路

“/retro closes the loop”

直接来源: /pr 组织可审阅证据,/retro 把机械错误转成确定性检查、把判断问题转成编码规范。它们让一次构建的产物不只包含代码,还包含下一次构建可复用的环境改进。

5. 上下文被当作可分配的工程资源

“one unbroken context window”

直接来源: 访谈、规格与拆票共享连续思考;每张 /implement 工单从新鲜上下文启动;/retro 必须在被回顾的会话中运行,或显式读取日志。smart zone 与阶段边界则提供保留、压缩、交接或清空的决策点。

6. 路由可靠性来自否定边界

“don't triage them”

直接来源: 已由 /to-tickets 生成的工单不得再次分诊,wayfinder 也绝不用于边界清晰的功能。能排除相邻选项,路由才真正可执行。

防失败机制与 trade-off

明确不变量: 原型跨目录往返时双向 /handoff;多会话构建先规格再拆票;并行实现统一落入集成分支并做一次整体审查;疑难缺陷先建立针对该缺陷稳定变红的单命令反馈环;wayfinder 清图后先汇入 /to-spec;只有人类真正必须参与时才调用 /wizard。

解释与取舍: 路由覆盖完整,但首次阅读认知密度高;规格、工单、交接和集成分支增加中间产物,因此原文保留单会话直接 /implement 的短路径。它还依赖特定 Skill 名称、slash command、/clear、/compact、子 agent 与 frontmatter 调用语义,迁移到其他 harness 时必须重新映射。手工维护的路由也可能落后于依赖变化,仓库级同步规则只能降低而不能消除这种风险。

可迁移原则

今日实践题

选一份你现有的 Skill 路由文档:如果同一批任务既可人工逐项推进,也可由多个 agent 并行执行,它是否明确复用了同一任务图、声明了就绪条件、集成位置和最终整体审查?

证据说明

核心机制、流程顺序、引文与不变量来自本报告完整展示的 ask-matt/SKILL.md。调用策略和路由同步规则分别来自 agents/openai.yaml 与仓库 AGENTS.md,仅作为支持性上下文。关于“有向流程图”“控制模式”和“反馈回路”的表述属于工程设计解释。

Source & provenance
Repository path
skills/engineering/ask-matt/SKILL.md
Generated
2026-10-03 08:24 Asia/Shanghai
Upstream commit
d81f3a183412e71a5b1e84ca21bc1a35eea03a60
Source
View on GitHub