这一版真正的主角是三条“收尾”技能:pr、implement-spec、retro。它们和一批破坏性改名一起,把整个技能集从“一堆能用的工具”变成了有一条明确主线的流水线。
主线被定型了。以前是一批各自独立的技能,现在 ask-matt(路由器)把 90% 的工作都指向同一条路径:
本次更新的三个重点技能,正好是这条链上最后、也是最缺的三段:怎么把工作合并进去(implement-spec)、怎么把 PR 讲清楚(pr)、怎么让下次更顺(retro)。
pr:规定 PR 描述的形状——最小可视化 + 前后对比证据 + 风险判定。只管 body,不开 PR。implement-spec:把 tickets 当任务图,按 frontier 并行跑实现子代理,全部落到一个 integration branch。retro:复盘这次会话,改进 agent 的工作环境而不是代码——导航指针、自动检查、评审标准。升级前必须先知道的三件事,都会静默影响本机行为:
| 变更 | 类型 | 你需要做什么 |
|---|---|---|
resolving-merge-conflicts 被移除,无替代品 |
删除 | 直接删本地目录。npx skills update 对“上游已删除”的技能是静默跳过的,会一直残留 |
CONTEXT.md / CONTEXT-MAP.md → GLOSSARY.md / GLOSSARY-MAP.md |
术语 | 用 git mv 改名的就文件。11 个技能现在只读 GLOSSARY.md,旧名字对它们不存在 |
跨技能调用从 "/skill" 散文改为显式 Call the Skill tool with "X" |
约定 | 不用你做,但要知道:很多技能内容因此重写了。也是 grill-me 现在只剩一行“去调用 grilling”的原因 |
diagnosing-bugs 的 post-mortem 交接就这样悄悄死掉了)。这次删掉散文交接、把硬依赖改成“叫人类去跑”。
pr/prPR 描述该长什么样
它是格式参考,不是工作流。不推分支、不开 PR、不决定改什么——只规定 agent 在写 PR body 时该用什么形状。
核心判断:默认的 PR body 是用散文描述 diff,这个技能要求用“能说清重点的最小可视化视图”。审阅者手上已经有 diff 了,body 的作用是让他读 diff 之前先看到 diff 的形状。
## Summary
<diagram, diff-sketch, or tree>
## Evidence
- **Before:** <screenshot/output/failing test run>
**After:** <screenshot/output/passing test run>
## Merge Danger
**Door:** <one-way or two-way>
**Blast Radius:** <one-word description>
伪代码(逻辑/算法)、调用树(运行控制流)、组件树(UI 结构 + 状态/模块边界)、浅文件树(职责划分/大重构)、Mermaid(交互/数据流)、shaped diff(形状已存在、重点是“改了什么”)。
把“这次合并安全吗?”从一个直觉变成一条可以被反驳的主张:
它同时告诉审阅者该在哪里花人类注意力:双向门 + 小爆炸半径就快读,单向门慢慢读。
show-me(humanlayer/skills)。上游在技能里带了 CREDITS.md 署名——顺带一提,本机也装了那个 show-me。
implement 结束于提交到当前分支;implement-spec 是唯一的例外。.github/pull_request_template.md。默认两边互相打架,得在仓库的 agent 文档里定优先级(比如把三段嵌进仓库模板)。implement-spec/implement-spec一次跑完整个 spec
它把 tickets 读成任务图而不是清单。blocking 边决定什么能开始,于是任何时刻都有一批“所有前置都已落地”的 tickets 构成frontier,frontier 上的全部同时开跑。节奏由图的形状决定,而不是它们在 tracker 上的排列顺序。
implement 的区别(这是这个技能存在的理由)implement | implement-spec | |
|---|---|---|
| 谁在调度 | 你:一个 ticket 一个会话,中间 clear,自己记着哪些解除了阻塞 | 一个编排会话 |
| 并行度 | 一次一个 | frontier 上有多少跑多少(后台子代理) |
| 你什么时候读 | 每个 ticket 落地就能读 | 最后统一评审 integration branch |
| 适用 | 小改动、没有真正的图 | 一个 spec 里 5+ 张 ticket |
tdd 建 ticket → 报告完成前把 integration tip 合并进自己分支。code-review 审 integration branch,所有问题交给一个实现子代理修。setup-matt-pocock-skills 配置;没配就停下让你跑它,而不是猜着用 gh。to-tickets 的写法)。没有边就是平图,所有 ticket 一起开跑。implement”。code-review 是拿代码对着整个 spec比的,所以只有在所有 ticket 都落地之后跑才有意义。中途跑的话,每张没建的 ticket 都会被读成失败 → agent 去建它 → 又触发一轮 review。有用户报过一张五 ticket 的特性,“review 和 fix 循环花了大约四小时”。如果看到第二轮全面 review 开始,直接叫它只做针对性检查然后停。
blockedSince 和 blockedOn。规避:让两张 frontier ticket 之间有 blocking 边(串行),或者在探索笔记里把要新增的名字钉死。
tdd 现在每个实现者都会跑,但没有 implement 那种“和你交互确认 seam”的步骤,所以 seam 要写进 spec 或 tickets。retro/retro复盘会话,改的是环境不是代码
它读这次会话自己的记录,找到 agent struggle 的那些时刻,然后按严重程度排序给出一份候选修复清单——改的是 agent 的工作环境,不是代码。
agent 交付的那个 bug、它花了二十次工具调用才找到的文件、评审漏掉的那条规则——retro 都不直接修。它问的是:仓库里是什么让这些事发生?什么样的检查、指针或标准能让它下次不发生?
| 会话里发生了什么 | 用什么修 |
|---|---|
| 找文件/事实花了很久 | 导航指针(从一个它已经会读的文件指出去) |
| 犯了一个工具本可以抓住的错 | 自动检查:lint 规则、类型、测试、pre-commit hook、CI job |
| 评审漏掉一个判断类错误 | CODING_STANDARDS.md 里给评审 agent 的规则 |
AGENTS.md / CLAUDE.md 太长 | 把其中的 steering 搬到标准或检查里 |
| 某次工具调用性价比极低 | 简化那个工具,或换掉它 |
| steering 文件里全是“改了等于没改”的行 | 删掉这些 no-ops |
| agent 拿不到它需要的信息 | 放宽访问:把 dev server 日志 tee 到文件、给只读访问 |
AGENTS.md:那是每个会话都加载的,不管相不相关。
CODING_STANDARDS.md。package.json/构建工具的 lint/check、CI workflow),所以“一个已经存在但没接上或悄悄坏掉的检查”才是 finding,而不是重新发明一遍。技能还要求先加载 writing-for-agents 拿写作风格。/retro 指向 session logs 里的那一次。AGENTS.md 越来越短而不是越来越长;检查本来就有、只是没接上——那 finding 是“接上它”而不是“再建一个”。
grilling 被重写了——从“一次问一个问题,多问会让人晕”改成按轮次问完整个 frontier(先把所有前置已定的问题一次问完,每问都附推荐答案,等你答完再算下一轮 frontier)。另外加了确认门:没确认达成共识之前不许动手;并且把事实(自己查)和决策(必须问你)分开——旧写法在“技能内部跑 grilling”的场景下被读成了“决策也可以自己答”。(今天你正好亲眼看了新版行为。)CLAUDE.md 里写明不许再加回来。tdd、diagnosing-bugs(新增“东西坏了”入口)、domain-modeling/codebase-design(“底层词汇”)、grilling,以及三条 on-ramp 和 phase boundary 决策树(PHASE-BOUNDARIES.md)。| 技能 | 状态 | 说明 |
|---|---|---|
wizard | 新增 | 生成交互式 bash 脚本,带你走只有人才能做的步骤(开通基础设施、配凭证/CI secret、点第三方控制台、一次性迁移)。model-invoked——agent 撞到“只有你能过的墙”时自己会拿出来用 |
to-questionnaire | 新增 | 答案不在你脑子里也不在代码里,而在别人脑子里时——它先拷问你的“寄送”(给谁、要拿回什么),再拿这份问卷去问对方。是 grill-me 的反面 |
wait-what | 新增 | 某句话没听懂时的纠错器:让 agent 用你缺的上下文、用 GLOSSARY.md 的词汇、用大白话重讲一遍 |
research | 新增 | 把读资料的体力活丢给后台 agent,只信一手来源,最后在仓库里留一个带引用的 Markdown |
code-review | 强化 | 原 review 改名毕业;Standards 轴新增一套常驻的 Fowler 坏味道基线(神秘命名、重复代码、依恋情结、数据泥团、基本类型偏执、重复 switch、霰弹式修改、发散式变化、夸夸其谈通用性、过长的消息链、中间人、被拒绝的遗赠),且有两条约束:仓库文档化的标准优先于基线,所有坏味道只作为判断项上报、绝不判硬违规 |
tdd | 重写 | 变成纯 reference;引入 seam 作为“测试放哪”的领头词(写测试前先和你确认);去掉 refactor 阶段(TDD 现在只有 red → green,重构归 code-review);新增“同义反复测试”反模式——断言用和实现一样的方式重算,天然通过、零信息量 |
prototype | 重写 | ① 逻辑分支的产物变成单个可分享的 HTML 文件(无构建、无服务,双击就能开,带状态面板、随时可点的自由玩法、以及分标签的引导式 walkthrough);② “丢弃”不再意味着删除——原型作为一手资料留在 prototype/<name> 分支上,实现 issue 里留指针 |
triage | 扩展 | 现在也能分诊外部 PR(把 PR 当成“带代码的 issue”),走同一套角色和状态机 |
wayfinder | 大改 | 由 decision-mapping 改名而来;地图搬到 issue tracker(一张 wayfinder:map issue,tickets 是它的子 issue,一个团队共享的 URL);加 ## Destination;区分 ## Not yet specified(雾)与 ## Out of scope;每张 ticket 标 HITL / AFK;新增第四种 task ticket 类型;无雾时提前退出 |
to-tickets | 合并 | to-plan + to-issues 合并进来,to-issues 删除;to-prd 改名 to-spec(“spec” 成为唯一贯穿术语) |
writing-for-agents | 改名 | 原 writing-great-skills;write-a-skill 更早被它替换掉。retro 开始前会先加载它 |
resolving-merge-conflicts | 删除 | 不再需要,也没有替代品——处理进行中的 merge/rebase 不需要专属技能。文档页保留并标注 archived |
in-progress/ 里还有一个 chief-of-staff,尚未发布,本机也没装。skills.sh 那种“复制可编辑文件、手工更新”的方式)。agents/openai.yaml 提供 Codex UI 元数据;user-invoked 技能用 policy.allow_implicit_invocation: false 对应 Claude 的 disable-model-invocation: true;仓库 AGENTS.md 变成 CLAUDE.md 的 symlink,让两边读同一份说明。writing-for-agents 曾被 Codex 的 allow_implicit_invocation: false 从模型可见列表里过滤掉,导致只有显式 $writing-for-agents 才能用。证据来自本机锁文件 C:\Users\GG_Bond\.agents\.skill-lock.json(55 技能 / 6 来源,其中 38 条来自 mattpocock/skills)与 2026-10-14 的更新记录。
C:\Users\GG_Bond\.agents\skills\,链接在 C:\Users\GG_Bond\.pi\agent\skills\(54 条链接 + 未纳管的 jp-vocab)。C:\ai\.agents\skills\ 现在是空的——更新后只走全局安装。2026-09-08(17 个)、2026-10-14(30 个,本次更新)、2026-09-05(7 个)。resolving-merge-conflicts 仍留在 C:\Users\GG_Bond\.agents\skills\ 并有链接在 C:\Users\GG_Bond\.pi\agent\skills\。npx skills update 对上游已删除的技能是静默跳过的,不会帮你清。手动删目录 + 链接:
rm -rf ~/.agents/skills/resolving-merge-conflicts
rm -rf ~/.pi/agent/skills/resolving-merge-conflicts
C:\ai\library\library\CONTEXT.mdC:\ai\library\performance\library\CONTEXT.mdgit mv(保留历史)改成 GLOSSARY.md。不改的话,domain-modeling、grill-with-docs、code-review、wait-what、tdd 等 11 个技能会当作它不存在。
implement-spec 真的能并行
它需要 harness 支持后台子代理 + 每个子代理一个 git worktree,否则只是更慢的 implement。本机有 pi-subagents(async + worktree 都支持),但有一点值得先验一下:这些技能是用 -a pi 装的,pi 是否尊重 disable-model-invocation: true 这个 frontmatter 字段(决定“只能你打”的边界)我没在文档里确认到——跑 skills-doctor 或直接问 pi 的 skills 文档。
C:\ai\_tmp\backup-project-skills-20261014\——22 个 8 月 4 日的旧技能副本(含已删除的 resolving-merge-conflicts 与已改名的 writing-great-skills),仅作对照用。C:\ai\_tmp\mp-skills\——v1.3.1 的完整克隆(含 docs/、CHANGELOG.md、.changeset/),跟上游缓存那份内容一致,想留一份离线参考就留它。pr 不读仓库的 .github/pull_request_template.md。如果之后要让 agent 在这个目录里写 PR,先在仓库的 agent 文档里说清谁优先(推荐:填仓库模板,把 Summary / Evidence / Merge Danger 三段嵌进去)。
skills-doctor # 本地:影子 / 悬空链接 / 锁文件 / 未纳管目录
skills-doctor --upstream # 再比上游:上游新增了什么(本机当前无网络,会全部跳过)
npx -y skills@latest update -g -y
--upstream 比的是名字,上游改名会同时显示成“新增 + 已删”,不代表真丢东西(本次 writing-great-skills → writing-for-agents 就是这种情况)。上游 HEAD 已包含 18 个 .changeset(全部是 patch),但尚未进入 CHANGELOG——也就是说下一版会来。挑几条影响使用方式的:
| 技能 | 将要发生的变化 |
|---|---|
code-review | 主动搜索仓库里的标准文件并把 CODING_STANDARDS.md / CONTRIBUTING.md 交给 Standards 子代理;两个子代理改为前台运行并使用它们的返回报告;tracker 路径不再硬编码 |
grilling | 每个问题的措辞改成“回答 yes 就等于接受推荐答案”,避免同意变成回答 no |
to-tickets | 每张 ticket 变成源 issue 的 sub-issue;blocker 是原生边时省略 ## Blocked by。需要重跑 /setup-matt-pocock-skills 刷新 docs/agents/issue-tracker.md |
wayfinder | 不再给地图和 tickets 贴 ready-for-agent;交叉引用只写真 issue id;research 分支不再开 PR;按 label 决定 ticket 的收尾方式 |
diagnosing-bugs | Phase 5 在信任“红”之前,先把强制变异与干净副本 diff 一遍——一个其实什么都没改的编辑不能冒充失败测试 |
implement | 拿到 ticket 引用后先去 tracker 取回并报出标题,引用有歧义就问;对 tdd/code-review 改用 Call the Skill tool with X 措辞 |
wizard | 模板修复若干:ask 改用 Readline(方向键可移光标)、write_env 单引号包裹值(空格/#/$/引号都能存活)、.env 是 symlink 时正确写入并保留文件权限、EOF 时不再死循环 |
handoff / teach | 明确给出临时目录($TMPDIR、否则 /tmp、Windows 上 %TEMP%);teach 的工作区写在你运行它的目录,且测验正确答案位置轮换 |
ask-matt | 陈述某个技能干什么、或建议跳过某一步之前,先去读那个技能的 SKILL.md,不再只信自己的一行摘要 |