你刚 clone 了一个仓库,想让 AI 用这套工程流程帮你干活。正式开工前,要先在这个仓库里跑一次 /setup-matt-pocock-skills:
它会一边翻你的仓库、一边问你几组问题,把「issue(工作票)放在哪个系统、分拣标签叫什么、领域文档怎么摆」这三件事定下来,
写成 docs/agents/ 下的几个配置文件,并在 CLAUDE.md 或 AGENTS.md 里加一段指路说明。
这节课把它的 SKILL.md 和自带的模板文件逐段拆开:它会看什么、问什么、写什么、写出来的东西被谁读。
学完你应当能预判它会写出的每个文件,并且分得清什么时候直接手改文件、什么时候才值得重跑它。
在 Lesson 0001 的三层地图里,
setup-matt-pocock-skills 独占配置层——0001 打的比方是「开店前的装修」:
它在你的每个目标仓库里跑一次,把约定写成文件。
它自己不写业务代码、不发工单、不做分拣状态机;
它只产出其它工程 skill 假定已经存在的那些配置。
| 从哪个角度看 | 它是怎样的 | 依据在哪 |
|---|---|---|
| 谁能启动它(这套词汇里叫「调用轴」) | User(只能人启动):文件开头的元数据区(frontmatter)里有 disable-model-invocation: true;Codex 一侧还有 policy.allow_implicit_invocation: false。两个开关的意思一样:AI 不许自己启动它 |
SKILL.md frontmatter · openai.yaml |
| 怎么启动 | 你在目标仓库里输入 /setup-matt-pocock-skills;AI 不会自己触发它,别的 skill 也不能在正文里写一句话来调它(0001 讲过的 prose 调用对「只能人启动」的 skill 不适用) |
docs 页;invocation.md |
| 它是什么形态 | 一段靠对话推进的流程说明(prompt-driven:AI 照着提示词一边探索一边和你确认),不是每次吐出完全一样结果的脚手架脚本 | SKILL.md:「Explore, present… confirm… then write」(探索 → 汇报 → 确认 → 才写) |
| 它配置哪三件事 | issue tracker(工单放哪个系统)· triage labels(分拣标签叫什么)· domain docs(领域文档怎么摆、怎么用) | SKILL.md 开篇三条 |
| 在 ask-matt 地图里的位置 | 工程流程开始之前跑一次的准备工作;就算你的工单系统不在内置名单里(自定义 tracker),也通过它来写配置 | ask-matt/SKILL.md |
docs/agents/*(以及 ## Agent skills 里的指路说明),再决定是调 gh、调 glab、往 .scratch/ 写文件,还是按你描述的「Other」流程操作。
这样工单系统的细节只写在一个地方,而不是硬编码进每个 skill。
这个仓库里还有一份写给人看的说明(agent 干活时以 SKILL.md 为准,这份只是同一内容的通俗版,别拿它当行为依据):
docs/engineering/setup-matt-pocock-skills.md
· 发布后的 URL 长这样:https://aihero.dev/skills-setup-matt-pocock-skills
它的 description 原文只有一句: Run once before first use of the other engineering skills.(在第一次使用其它工程 skill 之前跑一次。) 写给人看的文档说得更明确:每个目标仓库一次,在第一次用任何其它工程 skill 之前。
好几个只能人启动的工程 skill,在正文第一屏就写明「我依赖 setup 产出的配置」;缺了配置,它们会反过来要求你先跑 setup:
| 下游 skill | 它对 setup 的依赖是怎么写的 | 缺配置时会发生什么 |
|---|---|---|
| to-spec | 「issue tracker and triage label vocabulary should have been provided — run /setup-matt-pocock-skills if not」(工单系统和标签词汇「应该已经配好了」,没配就去跑 setup) |
不知道把需求文档(PRD)发到 GitHub / GitLab / .scratch 的哪一处;也不知道 ready-for-agent 这个角色名对应你 tracker 上的哪个字符串 |
| to-tickets | 同上;发布票的时候「How depends on the tracker setup configured」(具体怎么发,取决于 setup 配了什么工单系统) | 依赖关系用错形式——该用平台原生依赖的地方写成本地文件号,或反过来;票写到错误的位置 |
| triage | 角色名是内部统一的标准名;真实标签字符串「mapping should have been provided — run setup if not」(映射关系应该已经配好);外部 PR 要不要进分拣队列,读的是 issue-tracker 配置 | 可能新建一套重复标签,或者漏掉本该分拣的外部 PR |
| wayfinder | map(决策地图)、子票、blocking(谁挡谁)、frontier(没被任何依赖挡住、现在就能开工的票)全都「随工单系统而变」;具体操作读 tracker 文档里的 Wayfinding operations 一节;没配置就默认当本地 markdown 处理 | 在 GitHub 仓库里却默认往本地 .scratch 写地图(或者反过来) |
| code-review | 缺 docs/agents/issue-tracker.md 就要求你先跑 setup;commit 里提到的 issue,按该文档的流程去取 |
审查「需求符合度」这条轴时,对不上真实工单的内容 |
写给人看的文档里有一段「It's working if」(怎么算配置成功),可以直接当验收标准用:
docs/agents/ 下出现 issue-tracker.md 和 domain.md(装了 triage 的话还有 triage-labels.md),
且 CLAUDE.md 或 AGENTS.md 里出现 ## Agent skills 这一段;
之后 triage / to-tickets 能直接作用在正确的位置、打正确的标签,而不是靠猜或反复问你。
docs/agents/*.md 就行(怎么改见第 10 节)。npx skills add … --skill=setup-matt-pocock-skills 只是把这个 skill 装进你的 AI 运行环境(harness,比如 Claude Code 或 Codex);
它不会顺手配置你的业务仓库。真正的配置动作,是你在目标仓库里再手动跑一次 /setup-matt-pocock-skills。
SKILL.md 的流程是固定骨架,五步必须按顺序推进。提问节奏是「一组一问」——一次只问一组问题,你答完才进下一组,不会一口气甩给你一张大表单。
整个流程贯穿三条原则: 推荐答案写在最前面(你回一个词,比如 yes,就算接受); 探索阶段已经有答案的问题整组跳过(没装 triage 就不问 B;仓库不是 monorepo,C 就直接按默认布局写、不问你); 先确认再写(第 3 步的草稿你可以改,改完它才落笔)。
SKILL.md 列了一张「看现状、不假设」的信号清单。下表把每个信号对应到它影响的后续决定:
| 探查对象 | 它要回答的问题 | 影响后面哪一步 |
|---|---|---|
git remote -v、.git/config |
是 GitHub 吗?是 GitLab 吗(含自建实例)?用的是哪个 remote? | A 组的默认推荐:是 GitHub 就推荐 GitHub,是 GitLab 就推荐 GitLab,都不是才谈 local 或 other |
根目录 AGENTS.md、CLAUDE.md |
存在吗?里面已经有 ## Agent skills 这一段吗? |
第 4 步选哪个文件来写;已有这一段就在原位置更新内容,不重复追加 |
根目录 CONTEXT.md、CONTEXT-MAP.md |
领域文档已经存在吗?是不是已经分成了多个 context? | C 组汇报现状时会提到;domain 模板不管哪种情况,都会写「怎么用」的规则 |
docs/adr/、src/*/docs/adr/ |
ADR(架构决策记录)的摆法看起来像不像多 context? | 佐证「这是不是 monorepo / 多 context」的判断 |
docs/agents/ |
这个 skill 以前的输出还在吗(即以前跑过吗)? | 算重跑还是首次;汇报时要明说「已经有配置了」 |
.scratch/ |
是否已有「用本地 markdown 文件当 issue」的约定? | A 组可能因此推荐 Local markdown |
triage skill 是否安装 |
同目录有没有 triage 的 skill 文件夹,或者 harness 的可用技能列表里有没有 triage | 决定 B 组问不问;也决定写不写 triage-labels.md 和 Agent skills 里的 Triage 小段 |
| Monorepo 信号 | pnpm-workspace.yaml、package.json 里的 workspaces 字段、packages/* 下各包自带 src/ |
只有「真的很大的多包仓」才会把 multi-context 作为选项端出来;默认一律 single-context(几乎所有仓库都是) |
docs/agents/、有 CLAUDE.md 但没有 Agent skills 段、triage 已安装、没有 monorepo 信号——探到这一步,后面要问哪几组问题、每组推荐什么答案,基本已经定了。
汇报完仓库现状,就按顺序一组一组地问:一次一组、你答完再进下一组。 每组都先把推荐答案摆在最前面;只有真正需要你做决定的分叉点,才附一行解释。
SKILL 原文的意思是这样的:「issue tracker」就是这个仓库的 issue(工作项)放在哪里。to-tickets、triage、to-spec、qa这些 skill 都要读写它——所以得让它们知道: 是调gh issue create,还是往.scratch/写 markdown 文件,还是按你描述的其它流程。 选你实际用来跟踪工作的那个地方。
默认怎么推荐:这套 skill 是为 GitHub 设计的。remote 指向 GitHub,就推荐 GitHub;指向 GitLab(gitlab.com 或自建实例),就推荐 GitLab;其它情况(或你有自己的偏好),端出四个选项。所谓模板(skill 里叫 seed),就是 skill 自带的成品文件,setup 时照抄或按你的回答微调后写进你的仓库:
| 选项 | issue 放在哪 | 用什么操作 | 抄进仓库的模板 |
|---|---|---|---|
| GitHub | 这个仓库的 GitHub Issues | gh 命令行 |
issue-tracker-github.md,抄成 docs/agents/issue-tracker.md |
| GitLab | 这个仓库的 GitLab Issues | glab 命令行 |
issue-tracker-gitlab.md |
| Local markdown | .scratch/<feature>/ 目录下的文件 |
直接读写 markdown 文件 | issue-tracker-local.md |
| Other(Jira、Linear 等) | 由你定义 | 你用一段自然语言描述的工作流 | 没有模板:setup 根据你的描述,从零写出 docs/agents/issue-tracker.md |
选择会记录在 docs/agents/issue-tracker.md。
GitHub / GitLab 模板里有一个开关叫「PRs / MRs as a request surface」——意思是「把外部人提的 PR 也当作需要分拣的请求入口」,默认是关的(off);setup 过程中不会主动提这个开关。
你如果想让外部 PR 进分拣队列,事后自己在文件里把它改成 yes。
triage skill 没安装 → 整组问题完全跳过。
没装的 skill 不需要标签词汇。同时:不写 docs/agents/triage-labels.md,
## Agent skills 里也省略 ### Triage labels 这一小段。
如果 triage 已安装,只问一个问题:
Do you want to keep the default triage labels?(要保留默认的分拣标签吗?推荐回答:yes)
默认有五个角色,标签字符串就等于角色名本身:
needs-triage、needs-info、ready-for-agent、ready-for-human、wontfix。
答 yes → 照模板 triage-labels.md 原样写入。
答 no(常见原因:你的 tracker 上已经有 bug:triage 这类标签)→ setup 会收集一份一一对应的替换表(overrides),让 triage 去打你已有的标签,而不是新建一套重复标签。
这张映射表的意思是:左列是这套 skills 内部统一使用的标准角色名(canonical name,skill 之间约定好的叫法);右列是你的 tracker 上真实存在的标签字符串; skill 说到某个角色时,查右列。以后要改,只改右列就行,不用动 skill 源码。
CONTEXT.md,加上 docs/adr/。几乎所有仓库都适合这样 → 不提问,直接按此写。CONTEXT-MAP.md 当目录,指向每个 context 各自的 CONTEXT.md,并跟你确认要哪种布局。
注意:setup 写的是 docs/agents/domain.md 里的使用规则和布局说明,
它不会顺手创建 CONTEXT.md 本体。
domain 模板写得很明白:文件不存在就静默继续,不建议你「先建一个空的 CONTEXT」。
真正负责创建术语表和 ADR 的是 /domain-modeling(由 /grill-with-docs、/improve-codebase-architecture 等在需要时才调用它来创建)。
三份内置模板结构差不多:先约定常规操作(创建 / 读取 / 列表 / 评论 / 打标签 / 关闭),
再约定「发布 / 拉取」各是什么意思,最后附一节给 /wayfinder 专用的 Wayfinding operations(寻路操作集)。
选 Other 则完全依赖你写的那段自然语言描述——wayfinder / to-tickets 能不能顺利干活,取决于你那段描述有没有覆盖同样的操作。
| 操作 | GitHub 模板 | GitLab 模板 | Local 模板 |
|---|---|---|---|
| 创建 issue / 发布 | gh issue create(多行正文用 heredoc 传) |
glab issue create(用 --description 传正文;也可以加 -- 打开编辑器写) |
在 .scratch/<feature-slug>/ 下新建一个文件(目录不存在就顺手建) |
| 读取一张票 | gh issue view <n> --comments |
glab issue view <n> --comments |
读用户给的路径或编号对应的那个文件 |
| 列表 / 过滤 | gh issue list 加 json/jq,按标签和状态过滤 |
glab issue list -F json 加标签过滤 |
扫 .scratch/ 的目录结构 |
| 评论 | gh issue comment |
glab issue note(GitLab 把评论叫 note) |
在文件末尾的 ## Comments 小节追加 |
| 打标签 | gh issue edit --add-label / --remove-label |
glab issue update --label / --unlabel |
改文件顶部的 Status: 行(角色字符串见 triage-labels 配置) |
| 关闭 | gh issue close(可以顺带带一条评论) |
先 issue note 再 issue close(close 命令本身不带评论参数) |
按约定改 Status 或归档(具体由使用它的 skill 解读) |
| PR/MR 作为请求入口 | 开关默认 no;设成 yes 后用 gh pr 系列命令,只把外部作者的 PR 算进来(作者身份是 CONTRIBUTOR / FIRST_TIME / NONE 的) |
默认 no;设成 yes 时用 glab mr,过滤掉 member/owner 之外的 |
本地 markdown 没有 PR 这个概念 |
| # 编号的歧义 | issue 和 PR 共用一套数字编号,光看 #123 分不清;要先 gh pr view 试一下,不是 PR 再当 issue 处理 |
issue 和 MR 的编号是分开的;知道自己在看哪一边就能消歧 | 直接用路径或文件号,没有歧义 |
.scratch/<feature-slug>/.scratch/<feature-slug>/spec.md.scratch/<feature-slug>/issues/<NN>-<slug>.md,从 01 开始编号——禁止把所有票合并成一个文件Status: 行## Comments 小节三份模板都定义了六件事:map(决策地图)、child ticket(子票)、blocking(谁挡谁)、frontier(没被挡住、现在就能开工的票)、claim(认领)、resolve(解决)。 这就是 wayfinder 敢说自己「不挑工单系统」(tracker-agnostic)的真正底气:它的正文只讲概念,具体物理操作以 setup 写进你仓库的这一节为准。
| GitHub | GitLab | Local | |
|---|---|---|---|
| Map(地图) | 单独一条 issue,打标签 wayfinder:map |
同左(有 epic 功能的档位可以用 epic 来装地图;普通带标签的 issue 哪里都能用) | .scratch/<effort>/map.md |
| Child(子票) | 优先用 GitHub 的 sub-issue 功能;没有的话,在地图正文里放任务列表、子 issue 正文写 Part of #<map>;再打标签 wayfinder:<type> |
描述顶部写 Part of #<map>,加类型标签 |
issues/NN-slug.md;文件里用 Type: 和 Status: 行 |
| Blocking(谁挡谁) | 优先用原生的 dependencies API(注意要用 database id,不是 # 编号);不行就在正文写 Blocked by: |
用 quick action /blocked_by #n(需要 Premium 及以上);不行就在正文写一行 |
写 Blocked by: NN, NN;被依赖的文件全部 resolved 之后,这张票才算解锁 |
| Claim(认领) | gh issue edit --add-assignee @me(会话里第一次写操作时认领) |
glab issue update --assignee @me |
把 Status: 改成 claimed 并保存,然后再开始干活 |
| Resolve(解决) | 评论写下答案 → 关闭 → 在地图的 Decisions-so-far 小节追加一条指向结论的引用 | note → 关闭 → 同样追加 | 写 ## Answer 并把 Status: 改成 resolved → 更新 map.md |
Blocked by 编号。ready-for-agent(映射后的真实字符串)。
票的内容模板是一样的,变的只是依赖关系的物理形式——这正是 setup 存在的理由。
写入任何文件之前,setup 必须把下面这些东西完整亮出来,而且你可以改:
CLAUDE.md 或 AGENTS.md 的 ## Agent skills 整段全文docs/agents/issue-tracker.md 全文docs/agents/domain.md 全文docs/agents/triage-labels.md 全文——仅当 triage 已安装且 B 组问过| 路径 | 什么时候写 | 内容从哪来 | 它管什么 |
|---|---|---|---|
docs/agents/issue-tracker.md |
每次都写 | github / gitlab / local 三份模板之一;选 Other 时则是你口述的那段描述 | 发布、拉取、打标签、wayfinding 这些操作以它为准 |
docs/agents/domain.md |
每次都写 | domain.md 模板(按 single / multi 布局) | 规定探索前先读什么、术语表怎么用、输出和 ADR 冲突时怎么办 |
docs/agents/triage-labels.md |
仅当 triage 已安装且 B 组问过 | triage-labels 模板,加上你给的替换 | 五个角色名 → 你 tracker 上的真实标签字符串 |
CLAUDE.md 或 AGENTS.md 里的 ## Agent skills 段 |
每次都写(具体写哪个文件,按下面的选择规则) | 第 4 步的模板;Triage 小段按条件决定加不加 | 给 agent 看的简短指路,指回 docs/agents |
AI 在探索代码库之前应该先读:
CONTEXT.md;如果根目录有 CONTEXT-MAP.md,先读它,再读相关 context 的 CONTEXTdocs/adr/ 里和手头工作相关的 ADR;multi-context 布局还要查 src/<context>/docs/adr/缺这些文件就静默继续——不报警,也不逼你先建空文件。
给领域概念起名字时:用术语表里的词,不要漂移到「术语表明确说不要用」的同义词。想用的概念不在表里,只有两种可能:要么你在发明这个项目根本不用的叫法,要么它该交给 /domain-modeling 补进术语表。
输出和已有 ADR 冲突时:必须明确说出来,禁止悄悄覆盖。
| 布局 | 结构(模板示意) |
|---|---|
| Single(默认) | / → CONTEXT.md + docs/adr/ + src/ |
| Multi(CONTEXT-MAP 在根目录) | 根目录 CONTEXT-MAP.md + 系统级的 docs/adr/;各 src/<ctx>/CONTEXT.md 与 src/<ctx>/docs/adr/ |
## Agent skills 这段写进哪个文件、怎么写CLAUDE.md → 只编辑它AGENTS.md → 编辑它CLAUDE.md 时绝不顺手新建 AGENTS.md(反过来也一样)。
已有 ## Agent skills 段 → 在原来的位置更新内容,不追加第二份;也不要动这一段之外你自己写的内容。
## Agent skills
### Issue tracker
[one-line summary of where issues are tracked]. See `docs/agents/issue-tracker.md`.
### Triage labels
[one-line summary of the label vocabulary]. See `docs/agents/triage-labels.md`.
### Domain docs
[one-line summary of layout — "single-context" or "multi-context"]. See `docs/agents/domain.md`.
### Triage labels 小段和 triage-labels.md 同一个条件:只有 triage 已安装且 B 组问过才出现。
每行 one-line summary 要写你确认后的真实选择(比如「GitHub Issues via gh」),不要留个空壳占位。
历史上,其它 skill 是通过这一段来找到 tracker 文档位置的——先看指路说明再去找文件,而不是把路径写死在 skill 里。
wayfinder 等 skill 就曾从「写死 docs/agents/issue-tracker.md」改成跟着同一个指路走,免得文档挪了位置之后悄悄退回本地 tracker 的行为。
作者级排错经验:如果 AI 找错了工单系统,先看 ## Agent skills 指的对不对,再看被指的那个文件的内容。
收尾时 AI 应该:宣布 setup 完成;点名哪些工程 skill 会读这些文件;
提醒以后可以直接手改 docs/agents/*.md;只有换工单系统或推倒重来才需要重跑这个 skill。
| 配置文件 | 谁读它 | 读它做什么(依据各 skill 的 SKILL.md) |
|---|---|---|
issue-tracker.md |
to-spec | 把综合好的 PRD / spec 发布到配置好的工单系统,并打上 ready-for-agent 标签 |
| to-tickets | 按工单系统的形式发布多张票和 blocking 关系——本地就是文件路径,远程就是 issue | |
| triage | 查询、改标签、评论、关闭;还有可选的「外部 PR 入口」和 # 编号消歧规则 | |
| wayfinder | 专读 Wayfinding operations 那一节:地图、子票、blocking、frontier、认领、解决 | |
| code-review | 从 commit 里的 issue 引用出发,按文档里的流程把相关工单拉下来,服务「需求符合度」这条审查轴 | |
triage-labels.md |
triage | 标准角色名 → 真实标签字符串;发票时打上映射后的 ready-for-agent 等标签 |
domain.md |
一批 skill 的「先读术语表 / ADR」习惯 |
to-spec / to-tickets / tdd / diagnosing-bugs /
improve-codebase-architecture / triage 探索时都尊重词汇和 ADR;
要主动改模型则走 domain-modeling(它按需才创建 CONTEXT/ADR,和 domain.md 的「缺失就静默」正好一致)
|
另:implement 流程收尾会调 code-review,所以也间接依赖 tracker 文档;
grill-with-docs 通过 domain-modeling 写 CONTEXT/ADR,布局要和 domain.md 声明的 single / multi 一致。
docs/agents/issue-tracker.md 和 ## Agent skills 的指路,
不是先去改 to-tickets 的全文。triage-labels.md 的右列。/domain-modeling。
| 你想改什么 | 正确动作 | 不要做的 |
|---|---|---|
| 标签字符串(你的 tracker 已有自己的一套) | 编辑 docs/agents/triage-labels.md 的右列 |
为改一个标签重跑整个 setup |
| 打开「外部 PR/MR 也进分拣队列」 | 在 issue-tracker 文档里把 PRs/MRs as request surface 设成 yes | 指望 setup 对话主动问这个(默认不提) |
| 补全 Other tracker 的 CLI 细节 | 丰富 issue-tracker.md 里的描述(创建 / 列表 / 评论 / blocking / wayfinding 都写清) |
只写一句「我们用 Jira」,却指望 wayfinder 自己猜出 API |
| 把布局说明从 single 改成 multi-context | 改 domain.md 的结构段,并且真的建好 CONTEXT-MAP、把 CONTEXT 拆成多份 |
只改 domain.md 却从不创建 CONTEXT-MAP(规则和现实脱节) |
| 在 GitHub ↔ GitLab ↔ Local ↔ Other 之间换 | 重跑 setup(或者等价地:整体替换 issue-tracker.md,并同步更新 Agent skills 摘要) | 只改 Agent skills 那一行摘要,底下却留着旧的操作文档 |
| 推倒重来 | 重跑 skill,在 Confirm 阶段好好审草稿 | 手搓第二份 ## Agent skills,造成重复段落 |
| Agent skills 摘要过时了 | 和 docs/agents 的内容一起更新那几行 one-liner | 摘要写着 GitHub、文件里却是 local(指路说谎) |
SKILL.md 的收尾段是权威分界,原文:
edit docs/agents/*.md directly later — re-running this skill is only necessary if they want to switch issue trackers or restart from scratch.
翻译过来:以后直接改 docs/agents/*.md 就行;只有换工单系统、或者想推倒重来,才需要重跑这个 skill。
| 错误 | 为什么糟 | 正确姿势 |
|---|---|---|
| 没跑 setup 就直接 to-spec / to-tickets | 下游 skill 自己也会要求你先 setup;否则行为全靠猜 | 先跑 /setup-matt-pocock-skills |
| 以为 setup 会顺手创建 CONTEXT.md | domain.md 明确是按需才创建;缺文件就静默 | 需要术语表时用 grill-with-docs / domain-modeling |
| 不是 monorepo 却硬上 multi-context | 违反「几乎总是 single」的默认;AI 会去找不存在的 CONTEXT | 只有探索发现信号时才讨论 multi |
| 没装 triage 却写了 triage-labels | 违反 B 的跳过规则和条件写入规则 | 未安装就两处都省(不写文件、不写小段) |
| 同时维护 CLAUDE.md 和 AGENTS.md 两套 Agent skills | 违反「只编辑已存在的那个」 | 只认一个文件为准 |
| 跳过 Confirm 直接写 | 你失去改草稿的机会;容易写错 tracker | 坚持走第 3 步 |
| 默认打开「PR 作为请求入口」 | SKILL 要求默认关,且 setup 不主动提 | 需要时事后手改文件 |
| Local 下把所有票写进一个文件 | local 模板和 to-tickets 都禁止合并文件 | issues/NN-slug.md,一票一文件 |
| 以为把 setup skill 装进 harness 就算配置好了目标仓库 | 安装 ≠ 在仓库里写出配置 | 在目标仓库里跑一次它 |
先尽量不回看上文。每题选项长度对齐。核对后回到对应章节补洞。
本课主一手材料(请打开原文读,不要只背本页):
skills/engineering/setup-matt-pocock-skills/SKILL.md
—— 流程、A/B/C 三组提问、写入规则、收尾段的分界(agent 干活时以它为准)
allow_implicit_invocation: false
docs/engineering/setup-matt-pocock-skills.md
—— 写给人看的版本(什么时候跑、要做哪三个决定、怎么算配置成功)
.agents/invocation.md
—— 两种启动方式的约定;只能人启动的 skill 不能被别的 skill 调用
建议下一课(0003):
grilling 一族——grilling 这套基本功(面试纪律的全文所在),加上 grill-me / grill-with-docs 两个写得很薄的入口(正文只有几行,实际纪律都在被调用的文件里)。
配置层就绪后,主流程通常从「把模糊想法问清楚」开始;深课会拆「一次只问一个问题」的纪律,以及它和 domain-modeling 的分工边界。
SKILL.md / 模板文件的原文,而不是临场编造。
做完检索练习后,回复练习结果 / 卡住的地方 / 「开 0003」,我们进下一课。