Skill Learning

ask-matt

1. Bilingual SKILL.md

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

入口 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`** — . Start here whenever you are **working in a working directory**: it's stateful, retaining what it learns in `CONTEXT.md` and ADRs. (No working directory? Use `/grill-me` — see 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 tracer-bullet tickets, each declaring its ****. 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 — kick off **`/implement`** per ticket, **`/clear`ing context between each one**. Each ticket is self-contained, so the last one's context is disposable. - **No** → **`/implement`** right here, in the same context window.
Either way, **`/implement`** builds each issue by driving **`/tdd`** internally — one red-green slice at a time — then closes out by running **`/code-review`**, a two-axis review (Standards + Spec) of the diff, before committing. **`/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 .
### Context hygiene
Keep steps 1–3 in **one unbroken context window** — 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.
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 (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 — producing **decisions, not deliverables** — . 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 — go straight to `/implement` only when the effort turned out genuinely small.
## Codebase health
Not feature work — upkeep.
- **`/improve-codebase-architecture`** — run whenever you have a spare moment to keep the codebase good for agents to operate in. It surfaces **deepening opportunities**; 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. 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 `CONTEXT.md` a clean glossary. - **`/codebase-design`** — 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`** — write 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`** — compress this context and seed 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 `CONTEXT.md`. 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`** — 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. it directly only when you want the interview with no wrapper around it. - **`/resolving-merge-conflicts`** — work an in-progress merge or rebase conflict hunk by hunk, resolving by **intent** traced to each side's primary source rather than by picking lines, then finish the operation. It never runs `--abort`. Standalone and off every flow: it when you are already mid-conflict. - **`/prototype`** — 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 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` — research feeds the thinking, it doesn't replace it. - **`/to-questionnaire`** — when the thing blocking you isn't in your head or the codebase but in **someone else's**, this 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`** — 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 human is genuinely in the loop. - **`/wait-what`** — 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 `CONTEXT.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`** — 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`**——通过访谈把想法打磨清楚。只要你正**在一个工作目录中开展工作**,就从这里开始:它是有状态的,会把了解到的内容保留在 `CONTEXT.md` 和架构决策记录(ADR)中。(没有工作目录?请使用 `/grill-me`——见“独立运行”一节。两者都运行同一个 `/grilling` 基础能力;只要有仓库可供留下记录,`grill-with-docs` 就会留下书面轨迹,因此它总是两者中更好的选择。) 2. **分支——你能否在对话中敲定所有问题?** 如果某个问题需要通过可运行的结果来回答(状态、业务逻辑,或者必须亲眼看到的 UI),就绕道经过一个原型,并在两个方向上都使用 **`/handoff`** 进行衔接(原型位于自己的目录中,而这恰好就是 `/handoff` 的用武之地——参见“阶段边界”): - 使用 **`/handoff`** 交接出去,然后基于该文件打开一个全新的会话; - 使用 **`/prototype`**,用一次性代码回答问题; - 再用 **`/handoff`** 把学到的内容交接回来,并从最初的想法讨论串中引用它。 3. **分支——这是一个跨多个会话的构建任务吗?** - **是** → 使用 **`/to-spec`**(把讨论串转化为规格说明),再用 **`/to-tickets`** 将其拆成示踪弹(tracer-bullet)工单,每张工单都声明自己的**阻塞边(blocking edges)**。在本地跟踪器中,每张工单对应 `.scratch/<feature>/issues/` 下的一个文件,并由人工按照阻塞者优先的顺序处理;在真正的跟踪器中,这些边会变成原生的阻塞链接,因此只要某张工单的阻塞项都已完成,就可以领取它——针对每张工单启动一次 **`/implement`**,并且**在各张工单之间使用 `/clear` 清空上下文**。每张工单都是自包含的,所以最后一张工单留下的上下文也可以丢弃。 - **否** → 就在这里、在同一个上下文窗口中运行 **`/implement`**。
无论哪种情况,**`/implement`** 都会在内部驱动 **`/tdd`** 来构建每个议题——每次完成一个“红灯—绿灯”切片——然后在提交前运行 **`/code-review`** 收尾,对差异进行双轴审查(规范 + 规格)。如果你只是想以测试优先方式构建某个具体行为,而不需要完整规格,可以单独使用 **`/tdd`**;如果你想相对于一个固定基准审查分支或 PR,则可以单独使用 **`/code-review`**。
### 上下文卫生
让第 1–3 步处于**一个不中断的上下文窗口**中——在 `/to-tickets` 之后再压缩或清空——这样访谈、规格和工单才能建立在同一套思考之上。之后,每次 `/implement` 都从新鲜上下文开始,并以对应工单为依据开展工作。
这里的上限是 **[智能区(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` 主动采用的纪律,用于让 `CONTEXT.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` 一样毫不松懈的访谈,但它是**无状态的**:不会在本地保存任何内容,也不会构建 `CONTEXT.md`。当你**并非在工作目录中开展工作**时使用它——例如打磨计划、设计、文章,以及任何下方没有仓库的内容。如果你位于工作目录中,请改用 `/grill-with-docs`:它运行同样的访谈并留下书面轨迹,因此严格来说是更好的选择。 - **`/grilling`**——访谈基础能力本身:分轮进行、维护问题前沿(frontier),事实由 agent 负责,决策由你负责。`/grill-me` 和 `/grill-with-docs` 是两个具名入口,而 `/triage`、`/wayfinder` 和 `/improve-codebase-architecture` 都会在内部运行它。只有当你想要不带任何套壳的纯访谈时,才直接调用它。 - **`/resolving-merge-conflicts`**——逐个冲突块处理进行中的合并或变基冲突,根据追溯到双方主要来源的**意图**进行解决,而不是挑选代码行,然后完成该操作。它绝不会运行 `--abort`。它独立运行,并且不属于任何流程:当你已经身处冲突过程之中时使用它。 - **`/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 会用你之前缺失的上下文和 `CONTEXT.md` 中的词汇,以浅白英语重新表述刚才的内容。它在问题发生后生效;`/grill-with-docs` 才是事前的解法,因为尽早约定共享语言,才能从一开始就阻止术语突兀出现。 - **`/teach`**——使用当前目录作为有状态工作区,跨多个会话学习一个概念。 - **`/writing-for-agents`**——关于编写供 agent 使用的文档的参考资料:skill、`AGENTS.md`,以及由它们指向的文档。
## 前置条件
**`/setup-matt-pocock-skills`**——在第一次运行工程流程之前使用它,配置其他 skill 所假定的议题跟踪器、分诊标签和文档布局。也支持自定义议题跟踪器。

Entry SHA-256: 3d38910535f5f01e15bc5fd7f6ca8880d628cd248741f08e6780dd7c1828e832

2. Why This Skill Is Clever

一句话核心机制

ask-matt 把一组容易被当成“命令清单”的 skill,重构成一张按工作阶段与决策边界导航的流程地图:先识别你在哪里,再告诉你该进入哪条路、何时分支、何时重新汇流。

触发与边界设计

信息架构与执行顺序

  1. 先定义 flowmain flowon-ramps,给读者一张最小概念地图。
  2. idea → ship 展开最常见的主干,并在步骤 2、3 设置两个关键分支。
  3. 再描述能汇入主干的特殊起点:积压议题、疑难缺陷、超大型模糊项目。
  4. 将“代码库健康”和“底层词汇”独立出来,避免把维护活动、概念参考误当成功能交付阶段。
  5. 单独处理 Phase boundaries:这不是业务阶段,而是上下文生命周期的控制面。
  6. 最后列出完全离开主线的 standalone 工具及整个系统的 precondition。

这是一种从高频主干 → 特殊入口 → 横切能力 → 边界控制 → 独立工具 → 前置条件的渐进式架构,比按字母排序更接近真实决策顺序。

最巧妙的设计点

1. 用道路隐喻表达“分支后重新汇流”

证据:two on-ramps merge onto itdetour through a prototypemerge onto the main flow at /to-spec

这里不是装饰性比喻。on-rampdetourmerge 分别对应入口、短暂偏航和重新汇流,准确表达了这些 skill 之间不是简单的先后列表,而是一个有向流程图。读者能迅速建立空间感:原型不是终点,wayfinder 也不负责构建。

2. 把“能否仅靠对话解决”设为原型分支的判据

证据:can you settle every question in conversation?

它没有用“要不要做原型”这种主观问题,而是问答案是否必须可运行、可观察。这个判据把原型从“看起来专业的额外步骤”变成一种证据获取手段。可迁移价值很高:好的路由问题应当检查信息需求,而不是询问用户偏好的工具。

3. 将上下文窗口当成需要显式管理的工程资源

证据:Keep steps 1–3 in one unbroken context window,以及 Each /implement then starts fresh

这段设计没有笼统地说“注意上下文”,而是给出保存与丢弃的准确边界:思考链条需要连续,执行工单需要隔离。它还用 smart zone 给出退化阈值,并规定在最近的 phase boundary 压缩,体现了“上下文也是架构”的思路。

4. 区分“决策产物”与“交付产物”

证据:wayfinder producing decisions, not deliverables,并且 it hands off, it doesn't build

这是重要的职责隔离。大型探索最常见的失败,是一边发现未知项一边直接写最终代码。该设计要求先清除决策迷雾,再由 /to-spec 把互相关联的决策压缩为可构建计划,避免探索上下文直接污染实现。

5. 将底层词汇设为单一事实来源

证据:each the single source of truth for its vocabulary

domain-modelingcodebase-design 不被描述为流程步骤,而是运行在流程“beneath”的词汇层。这样,多个执行 skill 可以共享“module / seam / domain term”等定义,而不用复制粘贴后逐渐漂移。这是文档系统中的依赖反转:上层流程依赖稳定语言,下层参考不依赖任何一条具体流程。

6. 用“何时不要用”增强路由可靠性

证据:don't triage themnever a well-scoped featureReach for it directly only when...

工具目录通常只描述正向能力,导致每个工具看起来都适用。这里持续给出反例和否定边界,使相邻 skill 具有真正可执行的区分度。路由文档的价值不只是“能选中”,还包括“能排除”。

防失败机制与 trade-off

防失败机制

可能的 trade-off

可迁移到 Jingtao 自己 skill 写作中的原则

  1. 先写用户能识别的情境,再写工具名。 用“某个东西坏了”比“运行诊断模块”更容易触发正确行为。
  2. 每个相邻能力都写正向触发 + 排除条件。 例如“适用于传入的原始议题;不适用于已经由规格拆出的工单”。
  3. 把流程画成有汇流点的图,而不是扁平命令列表。 明确主干、入口、绕行路线与返回位置。
  4. 把上下文保存策略写进步骤。 指明何处必须连续、何处应清空、何处需要 portable handoff。
  5. 区分探索、决策、规格与实现产物。 每个阶段只承诺它真正负责的输出。
  6. 共享概念放进底层词汇 skill。 多个流程都使用的术语,不要在每个 skill 中各写一个版本。

今日实践题

任选你现有的一份“工具合集/skill 路由”文档,回答三个问题:

  1. 用户能否只凭自己的起始情境找到入口,而不必先知道工具名?
  2. 每条支线是否写清了回到主流程的汇流点
  3. 两个最容易混淆的 skill,是否各有一句明确的 use whendo not use when

如果任一答案为“否”,请仿照原文的 on-ramp → detour → merge 结构,重写那一段路由说明。

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