[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6RVX8RFDCSHXGHNRS4WVEWT":3,"skill-same:01M6RVX8RFDCSHXGHNRS4WVEWT":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":23,"linkOnly":24,"markdownContent":25,"markdownBody":26,"frontMatter":27,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":38,"ownerHtmlUrl":39,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":40,"install":41,"resources":54},"01M6RVX8RFDCSHXGHNRS4WVEWT","subagent-driven-development",null,"当在当前会话中执行包含独立任务的实现计划时使用","rzx007\u002FVykor","rzx007","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F22313722?v=4","01M6RVGB3GJ05PGEFHQ34TV6T0","Danovan","01M6RVGB7F20SDKPMEN9RS3N0N",3,"MIT","https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsubagent-driven-development\u002FSKILL.md",[],[19,20,21,22],"development","subagent driven development","subagent","driven","2026-11-10 10:12:30",false,"---\nname: subagent-driven-development\ndescription: 当在当前会话中执行包含独立任务的实现计划时使用\nversion: \"1.0.0\"\nlicense: MIT\nmetadata:\n  hermes:\n    tags: [agents, development]\n---\n\n# 子智能体驱动开发\n\n通过为每个任务分派一个全新的实现子智能体来执行计划：每个任务完成后做一次任务审查（规格合规性 + 代码质量），全部任务结束后再做一次覆盖整个分支的宽范围审查。\n\n**为什么用子智能体：** 你把任务委派给具有隔离上下文的专用智能体。通过精心设计它们的指令和上下文，确保它们专注并成功完成任务。它们绝不应继承你会话的上下文或历史记录——你要精确构造它们所需的一切。这样也能为你自己保留用于协调工作的上下文。\n\n**核心原则：** 每个任务一个全新子智能体 + 任务审查（规格 + 质量）+ 结尾宽范围审查 = 高质量、快速迭代\n\n**旁白：** 工具调用之间最多说一句简短的旁白——进度账本和工具结果本身就是记录。\n\n**持续执行：** 不要在任务之间停下来向你的人类伙伴确认。不间断地执行计划里的所有任务。唯一该停下的理由是：你无法解决的 BLOCKED 状态、确实妨碍推进的歧义，或所有任务已完成。\"我该继续吗？\"之类的询问和进度小结都在浪费他们的时间——他们让你执行计划，那就执行。\n\n## 何时使用\n\n```dot\ndigraph when_to_use {\n    \"有实现计划?\" [shape=diamond];\n    \"任务基本独立?\" [shape=diamond];\n    \"留在当前会话?\" [shape=diamond];\n    \"subagent-driven-development\" [shape=box];\n    \"executing-plans\" [shape=box];\n    \"手动执行或先头脑风暴\" [shape=box];\n\n    \"有实现计划?\" -> \"任务基本独立?\" [label=\"是\"];\n    \"有实现计划?\" -> \"手动执行或先头脑风暴\" [label=\"否\"];\n    \"任务基本独立?\" -> \"留在当前会话?\" [label=\"是\"];\n    \"任务基本独立?\" -> \"手动执行或先头脑风暴\" [label=\"否 - 紧密耦合\"];\n    \"留在当前会话?\" -> \"subagent-driven-development\" [label=\"是\"];\n    \"留在当前会话?\" -> \"executing-plans\" [label=\"否 - 并行会话\"];\n}\n```\n\n**与 Executing Plans（并行会话）的对比：**\n- 同一会话（无上下文切换）\n- 每个任务全新子智能体（无上下文污染）\n- 每个任务后做审查（规格合规性 + 代码质量），结尾做宽范围审查\n- 更快的迭代（任务间无需人工介入）\n\n## 流程\n\n```dot\ndigraph process {\n    rankdir=TB;\n\n    subgraph cluster_per_task {\n        label=\"每个任务\";\n        \"分派实现子智能体 (.\u002Fimplementer-prompt.md)\" [shape=box];\n        \"实现者有疑问?\" [shape=diamond];\n        \"回答问题，提供上下文\" [shape=box];\n        \"实现者实现、测试、提交、自审\" [shape=box];\n        \"生成审查包，分派任务审查者 (.\u002Ftask-reviewer-prompt.md)\" [shape=box];\n        \"规格 ✅ 且质量通过?\" [shape=diamond];\n        \"发现与计划原文冲突?\" [shape=diamond];\n        \"询问人类伙伴以哪个为准\" [shape=box];\n        \"第 R\u002F5 轮修复: R≤3 唤回原实现者; R≥4 换全新实现者 + 更强模型\" [shape=box];\n        \"分派定向复审 (.\u002Fre-review-prompt.md)\" [shape=box];\n        \"所有发现都已解决?\" [shape=diamond];\n        \"R = 5?\" [shape=diamond];\n        \"逐条裁定未解决的发现\" [shape=box];\n        \"存在承重的发现?\" [shape=diamond];\n        \"停止: 向人类伙伴报告 BLOCKED\" [shape=box];\n        \"把发现连同裁定搁置进账本\" [shape=box];\n        \"往账本追加完成行，标记待办完成\" [shape=box];\n    }\n\n    \"准备: 工作树、查账本、读计划、起飞前审查\" [shape=box];\n    \"还有任务?\" [shape=diamond];\n    \"分派最终代码审查者 (..\u002Frequesting-code-review\u002Fcode-reviewer.md)\" [shape=box];\n    \"最终审查有发现? 一次修复分派、一次定向复审、裁定残留项\" [shape=box];\n    \"最终审查干净: 删除本计划的工作区\" [shape=box];\n    \"使用 superpowers:finishing-a-development-branch\" [shape=box style=filled fillcolor=lightgreen];\n\n    \"准备: 工作树、查账本、读计划、起飞前审查\" -> \"分派实现子智能体 (.\u002Fimplementer-prompt.md)\";\n    \"分派实现子智能体 (.\u002Fimplementer-prompt.md)\" -> \"实现者有疑问?\";\n    \"实现者有疑问?\" -> \"回答问题，提供上下文\" [label=\"是\"];\n    \"回答问题，提供上下文\" -> \"实现者实现、测试、提交、自审\";\n    \"实现者有疑问?\" -> \"实现者实现、测试、提交、自审\" [label=\"否\"];\n    \"实现者实现、测试、提交、自审\" -> \"生成审查包，分派任务审查者 (.\u002Ftask-reviewer-prompt.md)\";\n    \"生成审查包，分派任务审查者 (.\u002Ftask-reviewer-prompt.md)\" -> \"规格 ✅ 且质量通过?\";\n    \"规格 ✅ 且质量通过?\" -> \"往账本追加完成行，标记待办完成\" [label=\"是\"];\n    \"规格 ✅ 且质量通过?\" -> \"发现与计划原文冲突?\" [label=\"否\"];\n    \"发现与计划原文冲突?\" -> \"询问人类伙伴以哪个为准\" [label=\"是\"];\n    \"询问人类伙伴以哪个为准\" -> \"第 R\u002F5 轮修复: R≤3 唤回原实现者; R≥4 换全新实现者 + 更强模型\";\n    \"发现与计划原文冲突?\" -> \"第 R\u002F5 轮修复: R≤3 唤回原实现者; R≥4 换全新实现者 + 更强模型\" [label=\"否\"];\n    \"第 R\u002F5 轮修复: R≤3 唤回原实现者; R≥4 换全新实现者 + 更强模型\" -> \"分派定向复审 (.\u002Fre-review-prompt.md)\";\n    \"分派定向复审 (.\u002Fre-review-prompt.md)\" -> \"所有发现都已解决?\";\n    \"所有发现都已解决?\" -> \"往账本追加完成行，标记待办完成\" [label=\"是\"];\n    \"所有发现都已解决?\" -> \"R = 5?\" [label=\"否\"];\n    \"R = 5?\" -> \"第 R\u002F5 轮修复: R≤3 唤回原实现者; R≥4 换全新实现者 + 更强模型\" [label=\"否 - 进入下一轮\"];\n    \"R = 5?\" -> \"逐条裁定未解决的发现\" [label=\"是 - 熔断触发\"];\n    \"逐条裁定未解决的发现\" -> \"存在承重的发现?\";\n    \"存在承重的发现?\" -> \"停止: 向人类伙伴报告 BLOCKED\" [label=\"是\"];\n    \"存在承重的发现?\" -> \"把发现连同裁定搁置进账本\" [label=\"否\"];\n    \"把发现连同裁定搁置进账本\" -> \"往账本追加完成行，标记待办完成\";\n    \"往账本追加完成行，标记待办完成\" -> \"还有任务?\";\n    \"还有任务?\" -> \"分派实现子智能体 (.\u002Fimplementer-prompt.md)\" [label=\"是\"];\n    \"还有任务?\" -> \"分派最终代码审查者 (..\u002Frequesting-code-review\u002Fcode-reviewer.md)\" [label=\"否\"];\n    \"分派最终代码审查者 (..\u002Frequesting-code-review\u002Fcode-reviewer.md)\" -> \"最终审查有发现? 一次修复分派、一次定向复审、裁定残留项\";\n    \"最终审查有发现? 一次修复分派、一次定向复审、裁定残留项\" -> \"最终审查干净: 删除本计划的工作区\";\n    \"最终审查干净: 删除本计划的工作区\" -> \"使用 superpowers:finishing-a-development-branch\";\n}\n```\n\n## 准备\n\n确保工作发生在一个隔离的工作区里：用 superpowers:using-git-worktrees 创建一个，或者核实已有的那个。没有你人类伙伴的明确同意，绝不在 main\u002Fmaster 分支上开始实现。\n\n会话记忆无法在上下文压缩（compaction）中存活。在真实会话里，丢失了位置的控制者曾重新分派整段已经完成的任务序列——这是观察到的最昂贵的失败。把进度记在一个账本文件里，而不只是记在待办里。\n\n- **每个计划拥有自己的工作区：** 技能启动时，运行本技能的 `scripts\u002Fsdd-workspace PLAN_FILE`——它会打印这个计划专属的、被 git 忽略的目录（`\u003Crepo-root>\u002F.superpowers\u002Fsdd\u002F\u003C计划文件名>\u002F`），**本计划**的一切产物都放在那里：账本、简报、报告、审查包。别的计划的目录不属于你，不读也不写。\n- 到 `\u003C工作区>\u002Fprogress.md` 查本计划的账本。如果它的第一行点名的是你的计划文件，那么带有 `Task \u003CN>: complete` 行的任务就是**已完成**——不要重新分派它们；从第一个没有该行的任务处继续。如果某个任务的最后一行是一轮修复，说明它正卡在修复循环中：从下一轮继续。如果账本第一行点名的是**另一个**计划文件——或者你在旧的扁平路径 `.superpowers\u002Fsdd\u002Fprogress.md` 发现了一个游离的账本——那是别人的进度：原地别动，另起你自己的新账本。\n- 创建账本时，把它的身份写在第一行：`# SDD ledger — plan: \u003C计划文件路径>`。\n- 这个账本是你的恢复地图：它点名的那些提交，即使你的上下文已经不记得创建过它们，也确实存在于 git 中。压缩之后，相信账本和 `git log`，而不是你自己的记忆。\n- `git clean -fdx` 会毁掉这个工作区（它是被 git 忽略的临时文件）；万一发生了，就从 `git log` 恢复。\n\n把计划**读一遍**，记下它的上下文和全局约束，并为每个任务建一条待办。\n\n在分派任务 1 之前，把计划通扫一遍找冲突：\n\n- 互相矛盾的任务，或与计划的\"全局约束\"矛盾的任务\n- 计划明确要求、但审查标准会判为缺陷的东西（比如一个什么都不断言的测试、一整块逻辑的逐字复制）\n\n把你找到的所有问题**一次性打包成一个问题**呈现给你的人类伙伴——每条发现都并列上要求它的那段计划原文，问以哪个为准——在执行开始之前问，而不是执行过程中每发现一个就打断一次。如果扫描是干净的，就不要多说，直接开始。审查循环仍然是那些只有在实现中才浮现的冲突的兜底网。\n\n## 模型选择\n\n在能胜任的前提下，为每个角色选用最弱的模型，以节省成本、提升速度。\n\n**机械性实现任务**（孤立的函数、清晰的规格、1-2 个文件）：用快而便宜的模型。计划写得好时，大多数实现任务都是机械性的。\n\n**集成与判断类任务**（跨文件协调、模式匹配、调试）：用标准模型。\n\n**架构与设计类任务**：用可用的最强模型。覆盖整个分支的最终审查就属于这一类——用可用的最强模型去分派它，不要用会话默认模型。\n\n**审查任务**：用同样的判断来选模型，并按 diff 的体量、复杂度和风险来缩放。一个小的机械性 diff 不需要最强模型；一个微妙的并发改动需要。小修复 diff 的定向复审用便宜到中档的层级即可。\n\n**修复循环的升级（第 4-5 轮）**：用比那个卡住了的实现者**至少高一档**的模型。\n\n**分派子智能体时永远显式指定模型。** 省略模型会继承你会话的模型——往往是最强也最贵的那个——这会悄无声息地让本节的努力全部失效。\n\n**轮次数比 token 单价更要紧。** 墙钟时间和上下文成本是随子智能体花掉多少轮次而增长的，而最便宜的模型在多步工作上经常要花 2-3 倍轮次——总账反而更贵。审查者、以及依据散文式描述工作的实现者，都以中档模型为下限。当任务的计划原文里已经包含了要写的完整代码时，实现就是抄写加测试：这种实现者用最便宜的层级。单文件的机械性修复也用最便宜的层级。\n\n**任务复杂度信号（实现类任务）：**\n- 涉及 1-2 个文件且规格完整 → 便宜模型\n- 涉及多个文件且有集成考量 → 标准模型\n- 需要设计判断或对代码库的广泛理解 → 最强模型\n\n## 任务循环\n\n你粘进分派提示词里的一切、以及子智能体打印回来的一切，都会在本次会话余下的时间里常驻你的上下文，并且在之后每一轮被重新读一遍。**产物要用文件来交接。**\n\n### 1. 分派实现者\n\n分派之前记录 BASE（`git rev-parse HEAD`）——审查包和各轮修复的 diff 都要用它。\n\n- **任务简报：** 分派实现者之前，运行本技能的 `scripts\u002Ftask-brief PLAN_FILE N`——它把该任务的完整文本抽取到一个唯一命名的文件并打印路径。组织你的分派，让这份简报保持为需求的唯一来源。你的分派应包含：(1) 一行说明这个任务在项目中的位置；(2) 简报路径，引入语为\"先读这个——它是你的需求，里面有要逐字使用的精确取值\"；(3) 简报无从知晓的、来自前序任务的接口和决策；(4) 你对简报中注意到的任何歧义的裁定；(5) 报告文件路径和报告契约。精确取值（数字、魔法字符串、签名、测试用例）只出现在简报里。**绝不**让子智能体去读整个计划文件。\n- **报告文件：** 实现者的报告文件按简报来命名（简报 `…\u002Ftask-N-brief.md` → 报告 `…\u002Ftask-N-report.md`），并写进分派提示词。实现者把完整报告写在那里，只回传状态、提交、一行测试小结和疑虑。\n- 一个分派提示词描述的是**一个任务**，不是会话的历史。不要把累积的前序任务小结（\"任务 1-3 之后的状态\"）粘进后面的分派——真实会话里曾出现过 42k 字符的分派，其中 99% 是粘贴的历史。一个全新的子智能体需要的是：它的任务、它要碰的接口、以及全局约束。别无其他。\n- 如果前面某个任务把一条发现搁置在本任务要碰的区域，就在分派里带上指向那条账本记录的指针。\n- **记下分派结果里实现者的智能体身份**——第 1-3 轮修复要唤回这个智能体。\n- 绝不并行分派多个实现子智能体（会冲突）。\n\n模板：[implementer-prompt.md](implementer-prompt.md)\n\n### 2. 处理报告\n\n实现子智能体会回传四种状态之一。分别处理：\n\n**DONE：** 生成审查包（在本技能目录下运行 `scripts\u002Freview-package PLAN_FILE BASE HEAD`——它会打印出自己写入的那个唯一文件路径；BASE 是你在分派实现者之前记录下来的那个提交——**绝不用** `HEAD~1`，那会悄悄丢掉多提交任务里除最后一个之外的所有提交），然后把打印出的路径交给任务审查者去分派。\n\n**DONE_WITH_CONCERNS：** 实现者完成了工作但提出了疑虑。继续之前先读这些疑虑。如果疑虑关乎正确性或范围，在审查之前先处理掉。如果只是观察（比如\"这个文件变大了\"），记下来，继续走审查。\n\n**NEEDS_CONTEXT：** 实现者需要没被提供的信息。补上缺失的上下文并重新分派。\n\n**BLOCKED：** 实现者无法完成任务。评估这个阻塞：\n1. 如果是上下文问题，补充上下文并用同一个模型重新分派\n2. 如果任务需要更多推理，用更强的模型重新分派\n3. 如果任务太大，拆成更小的块\n4. 如果是计划本身错了，上报给人类\n\n**绝不**忽视一次上报，也**绝不**在什么都没改的情况下强迫同一个模型重试。如果实现者说它卡住了，那就一定有东西需要改变。\n\n如果实现者提问——不论是开始前还是任务中途——清楚完整地回答，需要时补充上下文，不要催着它进入实现。\n\n### 3. 审查任务\n\n逐任务审查是**任务范围内的关卡**。宽范围审查只做一次，在最终的整分支审查那里。绝不跳过任务审查，也绝不接受一份缺少任一结论的报告——规格合规性**和**任务质量两者都必须有。实现者的自审永远不能替代任务审查；两者都需要。\n\n- **把 diff 作为文件交给审查者：** 运行本技能的 `scripts\u002Freview-package PLAN_FILE BASE HEAD`，把它打印出的文件路径交给审查者（若没有 bash：对该区间跑 `git log --oneline`、`git diff --stat`、`git diff -U10`，重定向到一个唯一命名的文件）。这些输出永远不会进入你自己的上下文，而审查者在一次 Read 调用里就能看到提交列表、stat 摘要和带上下文的完整 diff。用你在分派实现者之前记录下的 BASE——**绝不用** `HEAD~1`，那会悄悄截断多提交任务。**绝不**在没有 diff 文件的情况下分派任务审查者。\n- **审查者的输入：** 任务审查者拿到三个路径——同一份简报文件、报告文件、审查包——外加约束该任务的全局约束。\n- 你交给审查者的全局约束块是它的**注意力透镜**。从计划的\"全局约束\"一节或规格里**逐字**抄下有约束力的需求：精确的取值、精确的格式，以及组件之间被明确规定的关系（\"与 X 相同的布局\"、\"匹配 Y\"）。审查者的模板里已经带了流程规则（YAGNI、测试卫生、审查方法）——约束块是用来装**这个项目**的规格所要求的东西的。\n- 不要在没有具体的、任务专属的理由时，加上\"检查所有用法\"或\"有用的话跑一下竞态测试\"这类开放式指令\n- 不要让审查者重跑实现者已经在同一份代码上跑过的测试——实现者的报告承载着测试证据\n- **不要替审查者预先给发现定性**——绝不指示审查者忽略或不要标记某个具体问题。如果你认为某条发现会是误报，让审查者提出来，然后在审查循环里裁定它。如果你正在写的提示词里出现了\"不要标记\"、\"不要把 X 当缺陷\"、\"顶多按 Minor 处理\"、\"计划选择了\"——停下：你正在预先定性，而且通常是为了让自己少走一轮审查循环。\n\n任务审查者可能报告\"⚠️ 无法从 diff 核实\"的条目——那些活在未改动代码里、或者跨任务的需求。这些不阻塞审查的其余部分，但在标记任务完成之前**你必须自己逐条解决它们**：你掌握着审查者所缺的计划和跨任务上下文。如果你确认某一条是真实的缺口，就把它当作规格审查失败来处理——它和其他发现一起进入修复循环。\n\n模板：[task-reviewer-prompt.md](task-reviewer-prompt.md)\n\n### 4. 修复循环\n\n当审查报告规格 ❌、任何 Critical 或 Important 发现、或者你确认为真实缺口的 ⚠️ 条目时，循环触发。\n\n循环开始之前，有两条路会立刻离开它：\n\n- **Minor 发现**随手记进进度账本（`Task \u003CN>: minor (deferred): \u003C一句话>`），并把最终的整分支审查指向那份清单，让它去甄别哪些必须在合并前修掉。**没人读的汇总等于静默丢弃。** Minor 发现永远不进入循环。\n- 被标为\"计划要求的\"发现——或任何与计划原文所要求的内容冲突的发现——和任何计划矛盾一样，属于**人类的决定**：把这条发现和那段计划原文一起呈现，问以哪个为准。不要因为计划要求就驳回这条发现，也不要在没问过的情况下分派一个与计划相违的修复。\n\n其他一切都进入循环。**一轮修复 = 一次修复分派 + 一次定向复审。每个任务最多五轮。**\n\n**第 1-3 轮——唤回原来那个实现者（resume）。** 把未解决的发现**逐字**发给它。它的上下文是完整的：它知道任务、知道代码、知道自己做过的选择。如果你的运行环境无法给一个活着的子智能体再发消息，就分派一个全新实现者，带上简报路径、报告文件路径和那些发现——无论走哪条路，报告文件都是那份持久化记忆。\n\n**第 4-5 轮——用更强的模型分派一个全新实现者**（按\"模型选择\"），带上简报路径、报告文件路径、未解决的发现，以及这样的框定语：\"某个此前的实现者尝试过这个任务 [N] 次；现在它归你了。读报告文件了解已经试过什么。\"一个熬过三次唤回的循环，通常意味着实现者看不见自己的问题——换新眼睛加提升能力，一步到位。\n\n**每一轮，无论走哪条路：** 实现者修复、重跑覆盖被改动代码的测试、把修复报告追加到**同一个**报告文件、回传那个简短契约。重新分派审查者之前，先确认修复报告里含有覆盖用的测试、跑过的命令、以及输出；三者齐备才分派复审。在修复消息里点名覆盖用的测试文件——一行的修复不需要整包套件。\n\n**复审是定向的。** 运行 `scripts\u002Freview-package PLAN_FILE FIX_BASE HEAD`，其中 FIX_BASE 是上一次审查所看到的那个 head，然后用 [re-review-prompt.md](re-review-prompt.md) 分派，附上发现清单、简报、报告文件和打印出的 diff 路径。复审者对每条发现给出 ADDRESSED 或 NOT ADDRESSED 的结论，并且**只**标记修复 diff 里的新破坏。修复 diff 里新出现的 Critical\u002FImportant 破坏加入未解决发现清单。范围外的观察作为延后的 Minor 进账本——它们永远不延长循环。\n\n**每轮结束后**往账本追加：\n`Task \u003CN>: fix round \u003CR>\u002F5 (\u003CX> addressed, \u003CY> open — \u003C发现的一句话概括>; commits \u003Ca7>..\u003Cb7>)`\n\n**绝不在控制者会话里自己修发现**——你的上下文要保持干净以供协调，而且控制者的修复会跳过审查。\n\n**熔断。** 当第 5 轮的复审仍然留下未解决的发现时，**停止分派**。你自己逐条裁定这些未解决的发现——你掌握着审查者所缺的计划和跨任务上下文：\n\n- **审查者错了，或者这一点是可争议的：** 搁置它——`Task \u003CN>: parked — \u003C发现> — ruling: \u003C为什么代码可以维持原样>`。最终审查会看到双方说法。\n- **是真实的，但下游没有任何东西建立在它之上：** 同样搁置，裁定里写明它是真的、被延后了。\n- **真实且承重**——后面的任务建立在它之上，或者它揭示了一个计划缺陷：**停止**。追加 `Task \u003CN>: BLOCKED — \u003C原因>`，并连同这条发现、与之冲突的计划原文、以及修复历史一起报告给你的人类伙伴。把一个结构性失败搁置掉，会让每个依赖它的任务都建立在它之上，并且把一个最终审查同样无法修复的问题丢给最终审查。\n\n**只在触及上限时才裁定。** 为了结束循环而提早裁定，只是换了个名字的\"预先定性\"。每一次裁定都是一条账本记录——**静默丢弃是禁止的**。\n\n### 5. 完成任务\n\n当审查干净地返回——或者在触及上限时每条未解决的发现都已带着裁定被搁置——在你做其他记账的同一条消息里，往账本追加完成行：\n\n- `Task \u003CN>: complete (commits \u003Cbase7>..\u003Chead7>, review clean)`\n- 熔断触发过的话：`Task \u003CN>: complete (commits \u003Cbase7>..\u003Chead7>, \u003CK> parked)`\n\n然后标记待办完成，继续下一个。**绝不**在审查还有未解决的 Critical\u002FImportant 问题、而它们既没被修复也没在上限处带裁定搁置时，就进入下一个任务。\n\n## 最终审查\n\n覆盖整个分支的最终审查也拿到一个审查包：运行 `scripts\u002Freview-package PLAN_FILE MERGE_BASE HEAD`（MERGE_BASE = 分支起点的那个提交，例如 `git merge-base main HEAD`），把打印出的路径放进最终审查的分派里，这样最终审查者读一个文件就行，不必用 git 命令重新推导整个分支的 diff。用可用的最强模型分派（见\"模型选择\"），使用 superpowers:requesting-code-review 的 [code-reviewer.md](..\u002Frequesting-code-review\u002Fcode-reviewer.md)。把它指向账本里那些\"延后的 Minor\"和\"已搁置\"的行，让它甄别哪些必须在合并前修掉。\n\n如果覆盖整个分支的最终审查返回了发现，用**一个**修复子智能体带着**完整的**发现清单去分派——不要一条发现一个修复者。逐条发现各派一个修复者，每个都要重建上下文、重跑测试套件；真实会话里，一次最终审查的修复浪潮花掉的成本超过它全部任务的总和。然后对这波修复跑**恰好一次**定向复审（对修复区间跑 `scripts\u002Freview-package PLAN_FILE FIX_BASE HEAD`，用 [re-review-prompt.md](re-review-prompt.md)）。残留的发现按任务循环里熔断那套来裁定：带裁定搁置，或者在承重项上停下。**没有第二波修复**——残留的承重发现会在 finishing-a-development-branch 呈现选项时浮到你人类伙伴面前。\n\n## 收尾\n\n当覆盖整个分支的最终审查干净、且它的修复已合并时，删除**本计划**的工作区（`rm -rf \u003C工作区>`）——现在 git 历史就是记录了。同级目录属于别的计划，别去动它们。\n\n使用 superpowers:finishing-a-development-branch。\n\n## 常见的合理化借口\n\n| 借口 | 现实 |\n|------|------|\n| \"规格合规性上差不多就行了\" | 审查者发现了规格差距 = 未完成。修掉，或者走到上限去裁定——只有这两个出口。 |\n| \"我自己修就好了，分派是额外开销\" | 控制者的修复会污染你的上下文并跳过审查。唤回实现者。 |\n| \"再来一轮就收敛了\" | 过了上限，轮次不会收敛——那个失败是结构性的。裁定并分流。 |\n| \"反正审查者总会再挑出新东西\" | 定向复审只核实修复，它不能到处乱逛。未改动代码上的新发现进账本，不进循环。 |\n| \"这条发现明显错了，我直接丢掉\" | 你只在上限处裁定，而且每条裁定都是账本记录。静默丢弃是禁止的。 |\n| \"修复很小，跳过复审吧\" | 未经审查的修复正是回归产生的方式。每一轮都以一次定向复审结束。 |\n| \"审查把循环拖慢了\" | 没有审查的循环只是未经核实的空转。审查是这个循环的刹车和方向盘。 |\n| \"记账本是额外开销\" | 账本是能在压缩中存活下来的东西。没有账本的控制者曾重新分派整段已完成的任务序列。 |\n\n## 示例工作流\n\n```\n你：我正在用子智能体驱动开发来执行这个计划。\n\n[准备：工作树已核实]\n[把计划文件读一遍：docs\u002Fsuperpowers\u002Fplans\u002Ffeature-plan.md]\n[解析工作区：scripts\u002Fsdd-workspace docs\u002Fsuperpowers\u002Fplans\u002Ffeature-plan.md —— 里面没有账本，全新开始]\n[为所有任务创建待办]\n\n任务 1：Hook 安装脚本\n\n[对任务 1 运行 task-brief；分派实现者，附带简报 + 报告路径 + 上下文]\n\n实现者：\"开始之前——这个 hook 应该装在用户级还是系统级？\"\n\n你：\"用户级（~\u002F.config\u002Fsuperpowers\u002Fhooks\u002F）\"\n\n实现者：[稍后]\n  - 实现了 install-hook 命令\n  - 加了测试，5\u002F5 通过\n  - 自审：发现漏了 --force 标志，已补上\n  - 已提交\n\n[运行 review-package PLAN_FILE BASE HEAD；把打印出的路径交给任务审查者去分派]\n任务审查者：规格 ✅ —— 所有需求都满足，没有多余的东西。\n  优点：测试覆盖良好，代码整洁。问题：无。任务质量：通过。\n\n[账本：Task 1: complete (commits a1b2c3d..d4e5f6a, review clean)]\n\n任务 2：恢复模式\n\n[对任务 2 运行 task-brief；分派实现者，附带简报 + 报告路径 + 上下文]\n\n实现者：[无疑问]\n  - 加了 verify\u002Frepair 模式\n  - 8\u002F8 测试通过\n  - 已提交\n\n[运行 review-package PLAN_FILE BASE HEAD；把打印出的路径交给任务审查者去分派]\n任务审查者：规格 ❌：\n  - 缺失：进度上报（规格说\"每 100 项上报一次\"）\n  问题（Important）：魔法数字（100）\n\n[第 1 轮修复：唤回原实现者，带上这两条发现]\n实现者：加了进度上报，把 PROGRESS_INTERVAL 提成了常量。\n  重跑了 test\u002Frecovery.test.js —— 10\u002F10 通过。修复报告已追加。\n\n[运行 review-package PLAN_FILE FIX_BASE HEAD；分派定向复审]\n复审者：缺失进度上报 —— ADDRESSED（src\u002Frecovery.js:41）。\n  魔法数字 —— ADDRESSED（src\u002Frecovery.js:7）。新破坏：无。\n  结论：所有发现均已解决。\n\n[账本：Task 2: fix round 1\u002F5 (2 addressed, 0 open; commits d4e5f6a..b7c8d9e)]\n[账本：Task 2: complete (commits d4e5f6a..b7c8d9e, review clean)]\n\n...\n\n[所有任务之后]\n[运行 review-package PLAN_FILE MERGE_BASE HEAD；分派最终代码审查者，用最强模型]\n最终审查者：所有需求都满足。延后的 Minor 已甄别：没有阻塞合并的。\n\n[删除本计划的工作区 —— 现在记录活在 git 里]\n\n搞定！使用 superpowers:finishing-a-development-branch。\n```\n","# 子智能体驱动开发\n\n通过为每个任务分派一个全新的实现子智能体来执行计划：每个任务完成后做一次任务审查（规格合规性 + 代码质量），全部任务结束后再做一次覆盖整个分支的宽范围审查。\n\n**为什么用子智能体：** 你把任务委派给具有隔离上下文的专用智能体。通过精心设计它们的指令和上下文，确保它们专注并成功完成任务。它们绝不应继承你会话的上下文或历史记录——你要精确构造它们所需的一切。这样也能为你自己保留用于协调工作的上下文。\n\n**核心原则：** 每个任务一个全新子智能体 + 任务审查（规格 + 质量）+ 结尾宽范围审查 = 高质量、快速迭代\n\n**旁白：** 工具调用之间最多说一句简短的旁白——进度账本和工具结果本身就是记录。\n\n**持续执行：** 不要在任务之间停下来向你的人类伙伴确认。不间断地执行计划里的所有任务。唯一该停下的理由是：你无法解决的 BLOCKED 状态、确实妨碍推进的歧义，或所有任务已完成。\"我该继续吗？\"之类的询问和进度小结都在浪费他们的时间——他们让你执行计划，那就执行。\n\n## 何时使用\n\n```dot\ndigraph when_to_use {\n    \"有实现计划?\" [shape=diamond];\n    \"任务基本独立?\" [shape=diamond];\n    \"留在当前会话?\" [shape=diamond];\n    \"subagent-driven-development\" [shape=box];\n    \"executing-plans\" [shape=box];\n    \"手动执行或先头脑风暴\" [shape=box];\n\n    \"有实现计划?\" -> \"任务基本独立?\" [label=\"是\"];\n    \"有实现计划?\" -> \"手动执行或先头脑风暴\" [label=\"否\"];\n    \"任务基本独立?\" -> \"留在当前会话?\" [label=\"是\"];\n    \"任务基本独立?\" -> \"手动执行或先头脑风暴\" [label=\"否 - 紧密耦合\"];\n    \"留在当前会话?\" -> \"subagent-driven-development\" [label=\"是\"];\n    \"留在当前会话?\" -> \"executing-plans\" [label=\"否 - 并行会话\"];\n}\n```\n\n**与 Executing Plans（并行会话）的对比：**\n- 同一会话（无上下文切换）\n- 每个任务全新子智能体（无上下文污染）\n- 每个任务后做审查（规格合规性 + 代码质量），结尾做宽范围审查\n- 更快的迭代（任务间无需人工介入）\n\n## 流程\n\n```dot\ndigraph process {\n    rankdir=TB;\n\n    subgraph cluster_per_task {\n        label=\"每个任务\";\n        \"分派实现子智能体 (.\u002Fimplementer-prompt.md)\" [shape=box];\n        \"实现者有疑问?\" [shape=diamond];\n        \"回答问题，提供上下文\" [shape=box];\n        \"实现者实现、测试、提交、自审\" [shape=box];\n        \"生成审查包，分派任务审查者 (.\u002Ftask-reviewer-prompt.md)\" [shape=box];\n        \"规格 ✅ 且质量通过?\" [shape=diamond];\n        \"发现与计划原文冲突?\" [shape=diamond];\n        \"询问人类伙伴以哪个为准\" [shape=box];\n        \"第 R\u002F5 轮修复: R≤3 唤回原实现者; R≥4 换全新实现者 + 更强模型\" [shape=box];\n        \"分派定向复审 (.\u002Fre-review-prompt.md)\" [shape=box];\n        \"所有发现都已解决?\" [shape=diamond];\n        \"R = 5?\" [shape=diamond];\n        \"逐条裁定未解决的发现\" [shape=box];\n        \"存在承重的发现?\" [shape=diamond];\n        \"停止: 向人类伙伴报告 BLOCKED\" [shape=box];\n        \"把发现连同裁定搁置进账本\" [shape=box];\n        \"往账本追加完成行，标记待办完成\" [shape=box];\n    }\n\n    \"准备: 工作树、查账本、读计划、起飞前审查\" [shape=box];\n    \"还有任务?\" [shape=diamond];\n    \"分派最终代码审查者 (..\u002Frequesting-code-review\u002Fcode-reviewer.md)\" [shape=box];\n    \"最终审查有发现? 一次修复分派、一次定向复审、裁定残留项\" [shape=box];\n    \"最终审查干净: 删除本计划的工作区\" [shape=box];\n    \"使用 superpowers:finishing-a-development-branch\" [shape=box style=filled fillcolor=lightgreen];\n\n    \"准备: 工作树、查账本、读计划、起飞前审查\" -> \"分派实现子智能体 (.\u002Fimplementer-prompt.md)\";\n    \"分派实现子智能体 (.\u002Fimplementer-prompt.md)\" -> \"实现者有疑问?\";\n    \"实现者有疑问?\" -> \"回答问题，提供上下文\" [label=\"是\"];\n    \"回答问题，提供上下文\" -> \"实现者实现、测试、提交、自审\";\n    \"实现者有疑问?\" -> \"实现者实现、测试、提交、自审\" [label=\"否\"];\n    \"实现者实现、测试、提交、自审\" -> \"生成审查包，分派任务审查者 (.\u002Ftask-reviewer-prompt.md)\";\n    \"生成审查包，分派任务审查者 (.\u002Ftask-reviewer-prompt.md)\" -> \"规格 ✅ 且质量通过?\";\n    \"规格 ✅ 且质量通过?\" -> \"往账本追加完成行，标记待办完成\" [label=\"是\"];\n    \"规格 ✅ 且质量通过?\" -> \"发现与计划原文冲突?\" [label=\"否\"];\n    \"发现与计划原文冲突?\" -> \"询问人类伙伴以哪个为准\" [label=\"是\"];\n    \"询问人类伙伴以哪个为准\" -> \"第 R\u002F5 轮修复: R≤3 唤回原实现者; R≥4 换全新实现者 + 更强模型\";\n    \"发现与计划原文冲突?\" -> \"第 R\u002F5 轮修复: R≤3 唤回原实现者; R≥4 换全新实现者 + 更强模型\" [label=\"否\"];\n    \"第 R\u002F5 轮修复: R≤3 唤回原实现者; R≥4 换全新实现者 + 更强模型\" -> \"分派定向复审 (.\u002Fre-review-prompt.md)\";\n    \"分派定向复审 (.\u002Fre-review-prompt.md)\" -> \"所有发现都已解决?\";\n    \"所有发现都已解决?\" -> \"往账本追加完成行，标记待办完成\" [label=\"是\"];\n    \"所有发现都已解决?\" -> \"R = 5?\" [label=\"否\"];\n    \"R = 5?\" -> \"第 R\u002F5 轮修复: R≤3 唤回原实现者; R≥4 换全新实现者 + 更强模型\" [label=\"否 - 进入下一轮\"];\n    \"R = 5?\" -> \"逐条裁定未解决的发现\" [label=\"是 - 熔断触发\"];\n    \"逐条裁定未解决的发现\" -> \"存在承重的发现?\";\n    \"存在承重的发现?\" -> \"停止: 向人类伙伴报告 BLOCKED\" [label=\"是\"];\n    \"存在承重的发现?\" -> \"把发现连同裁定搁置进账本\" [label=\"否\"];\n    \"把发现连同裁定搁置进账本\" -> \"往账本追加完成行，标记待办完成\";\n    \"往账本追加完成行，标记待办完成\" -> \"还有任务?\";\n    \"还有任务?\" -> \"分派实现子智能体 (.\u002Fimplementer-prompt.md)\" [label=\"是\"];\n    \"还有任务?\" -> \"分派最终代码审查者 (..\u002Frequesting-code-review\u002Fcode-reviewer.md)\" [label=\"否\"];\n    \"分派最终代码审查者 (..\u002Frequesting-code-review\u002Fcode-reviewer.md)\" -> \"最终审查有发现? 一次修复分派、一次定向复审、裁定残留项\";\n    \"最终审查有发现? 一次修复分派、一次定向复审、裁定残留项\" -> \"最终审查干净: 删除本计划的工作区\";\n    \"最终审查干净: 删除本计划的工作区\" -> \"使用 superpowers:finishing-a-development-branch\";\n}\n```\n\n## 准备\n\n确保工作发生在一个隔离的工作区里：用 superpowers:using-git-worktrees 创建一个，或者核实已有的那个。没有你人类伙伴的明确同意，绝不在 main\u002Fmaster 分支上开始实现。\n\n会话记忆无法在上下文压缩（compaction）中存活。在真实会话里，丢失了位置的控制者曾重新分派整段已经完成的任务序列——这是观察到的最昂贵的失败。把进度记在一个账本文件里，而不只是记在待办里。\n\n- **每个计划拥有自己的工作区：** 技能启动时，运行本技能的 `scripts\u002Fsdd-workspace PLAN_FILE`——它会打印这个计划专属的、被 git 忽略的目录（`\u003Crepo-root>\u002F.superpowers\u002Fsdd\u002F\u003C计划文件名>\u002F`），**本计划**的一切产物都放在那里：账本、简报、报告、审查包。别的计划的目录不属于你，不读也不写。\n- 到 `\u003C工作区>\u002Fprogress.md` 查本计划的账本。如果它的第一行点名的是你的计划文件，那么带有 `Task \u003CN>: complete` 行的任务就是**已完成**——不要重新分派它们；从第一个没有该行的任务处继续。如果某个任务的最后一行是一轮修复，说明它正卡在修复循环中：从下一轮继续。如果账本第一行点名的是**另一个**计划文件——或者你在旧的扁平路径 `.superpowers\u002Fsdd\u002Fprogress.md` 发现了一个游离的账本——那是别人的进度：原地别动，另起你自己的新账本。\n- 创建账本时，把它的身份写在第一行：`# SDD ledger — plan: \u003C计划文件路径>`。\n- 这个账本是你的恢复地图：它点名的那些提交，即使你的上下文已经不记得创建过它们，也确实存在于 git 中。压缩之后，相信账本和 `git log`，而不是你自己的记忆。\n- `git clean -fdx` 会毁掉这个工作区（它是被 git 忽略的临时文件）；万一发生了，就从 `git log` 恢复。\n\n把计划**读一遍**，记下它的上下文和全局约束，并为每个任务建一条待办。\n\n在分派任务 1 之前，把计划通扫一遍找冲突：\n\n- 互相矛盾的任务，或与计划的\"全局约束\"矛盾的任务\n- 计划明确要求、但审查标准会判为缺陷的东西（比如一个什么都不断言的测试、一整块逻辑的逐字复制）\n\n把你找到的所有问题**一次性打包成一个问题**呈现给你的人类伙伴——每条发现都并列上要求它的那段计划原文，问以哪个为准——在执行开始之前问，而不是执行过程中每发现一个就打断一次。如果扫描是干净的，就不要多说，直接开始。审查循环仍然是那些只有在实现中才浮现的冲突的兜底网。\n\n## 模型选择\n\n在能胜任的前提下，为每个角色选用最弱的模型，以节省成本、提升速度。\n\n**机械性实现任务**（孤立的函数、清晰的规格、1-2 个文件）：用快而便宜的模型。计划写得好时，大多数实现任务都是机械性的。\n\n**集成与判断类任务**（跨文件协调、模式匹配、调试）：用标准模型。\n\n**架构与设计类任务**：用可用的最强模型。覆盖整个分支的最终审查就属于这一类——用可用的最强模型去分派它，不要用会话默认模型。\n\n**审查任务**：用同样的判断来选模型，并按 diff 的体量、复杂度和风险来缩放。一个小的机械性 diff 不需要最强模型；一个微妙的并发改动需要。小修复 diff 的定向复审用便宜到中档的层级即可。\n\n**修复循环的升级（第 4-5 轮）**：用比那个卡住了的实现者**至少高一档**的模型。\n\n**分派子智能体时永远显式指定模型。** 省略模型会继承你会话的模型——往往是最强也最贵的那个——这会悄无声息地让本节的努力全部失效。\n\n**轮次数比 token 单价更要紧。** 墙钟时间和上下文成本是随子智能体花掉多少轮次而增长的，而最便宜的模型在多步工作上经常要花 2-3 倍轮次——总账反而更贵。审查者、以及依据散文式描述工作的实现者，都以中档模型为下限。当任务的计划原文里已经包含了要写的完整代码时，实现就是抄写加测试：这种实现者用最便宜的层级。单文件的机械性修复也用最便宜的层级。\n\n**任务复杂度信号（实现类任务）：**\n- 涉及 1-2 个文件且规格完整 → 便宜模型\n- 涉及多个文件且有集成考量 → 标准模型\n- 需要设计判断或对代码库的广泛理解 → 最强模型\n\n## 任务循环\n\n你粘进分派提示词里的一切、以及子智能体打印回来的一切，都会在本次会话余下的时间里常驻你的上下文，并且在之后每一轮被重新读一遍。**产物要用文件来交接。**\n\n### 1. 分派实现者\n\n分派之前记录 BASE（`git rev-parse HEAD`）——审查包和各轮修复的 diff 都要用它。\n\n- **任务简报：** 分派实现者之前，运行本技能的 `scripts\u002Ftask-brief PLAN_FILE N`——它把该任务的完整文本抽取到一个唯一命名的文件并打印路径。组织你的分派，让这份简报保持为需求的唯一来源。你的分派应包含：(1) 一行说明这个任务在项目中的位置；(2) 简报路径，引入语为\"先读这个——它是你的需求，里面有要逐字使用的精确取值\"；(3) 简报无从知晓的、来自前序任务的接口和决策；(4) 你对简报中注意到的任何歧义的裁定；(5) 报告文件路径和报告契约。精确取值（数字、魔法字符串、签名、测试用例）只出现在简报里。**绝不**让子智能体去读整个计划文件。\n- **报告文件：** 实现者的报告文件按简报来命名（简报 `…\u002Ftask-N-brief.md` → 报告 `…\u002Ftask-N-report.md`），并写进分派提示词。实现者把完整报告写在那里，只回传状态、提交、一行测试小结和疑虑。\n- 一个分派提示词描述的是**一个任务**，不是会话的历史。不要把累积的前序任务小结（\"任务 1-3 之后的状态\"）粘进后面的分派——真实会话里曾出现过 42k 字符的分派，其中 99% 是粘贴的历史。一个全新的子智能体需要的是：它的任务、它要碰的接口、以及全局约束。别无其他。\n- 如果前面某个任务把一条发现搁置在本任务要碰的区域，就在分派里带上指向那条账本记录的指针。\n- **记下分派结果里实现者的智能体身份**——第 1-3 轮修复要唤回这个智能体。\n- 绝不并行分派多个实现子智能体（会冲突）。\n\n模板：[implementer-prompt.md](implementer-prompt.md)\n\n### 2. 处理报告\n\n实现子智能体会回传四种状态之一。分别处理：\n\n**DONE：** 生成审查包（在本技能目录下运行 `scripts\u002Freview-package PLAN_FILE BASE HEAD`——它会打印出自己写入的那个唯一文件路径；BASE 是你在分派实现者之前记录下来的那个提交——**绝不用** `HEAD~1`，那会悄悄丢掉多提交任务里除最后一个之外的所有提交），然后把打印出的路径交给任务审查者去分派。\n\n**DONE_WITH_CONCERNS：** 实现者完成了工作但提出了疑虑。继续之前先读这些疑虑。如果疑虑关乎正确性或范围，在审查之前先处理掉。如果只是观察（比如\"这个文件变大了\"），记下来，继续走审查。\n\n**NEEDS_CONTEXT：** 实现者需要没被提供的信息。补上缺失的上下文并重新分派。\n\n**BLOCKED：** 实现者无法完成任务。评估这个阻塞：\n1. 如果是上下文问题，补充上下文并用同一个模型重新分派\n2. 如果任务需要更多推理，用更强的模型重新分派\n3. 如果任务太大，拆成更小的块\n4. 如果是计划本身错了，上报给人类\n\n**绝不**忽视一次上报，也**绝不**在什么都没改的情况下强迫同一个模型重试。如果实现者说它卡住了，那就一定有东西需要改变。\n\n如果实现者提问——不论是开始前还是任务中途——清楚完整地回答，需要时补充上下文，不要催着它进入实现。\n\n### 3. 审查任务\n\n逐任务审查是**任务范围内的关卡**。宽范围审查只做一次，在最终的整分支审查那里。绝不跳过任务审查，也绝不接受一份缺少任一结论的报告——规格合规性**和**任务质量两者都必须有。实现者的自审永远不能替代任务审查；两者都需要。\n\n- **把 diff 作为文件交给审查者：** 运行本技能的 `scripts\u002Freview-package PLAN_FILE BASE HEAD`，把它打印出的文件路径交给审查者（若没有 bash：对该区间跑 `git log --oneline`、`git diff --stat`、`git diff -U10`，重定向到一个唯一命名的文件）。这些输出永远不会进入你自己的上下文，而审查者在一次 Read 调用里就能看到提交列表、stat 摘要和带上下文的完整 diff。用你在分派实现者之前记录下的 BASE——**绝不用** `HEAD~1`，那会悄悄截断多提交任务。**绝不**在没有 diff 文件的情况下分派任务审查者。\n- **审查者的输入：** 任务审查者拿到三个路径——同一份简报文件、报告文件、审查包——外加约束该任务的全局约束。\n- 你交给审查者的全局约束块是它的**注意力透镜**。从计划的\"全局约束\"一节或规格里**逐字**抄下有约束力的需求：精确的取值、精确的格式，以及组件之间被明确规定的关系（\"与 X 相同的布局\"、\"匹配 Y\"）。审查者的模板里已经带了流程规则（YAGNI、测试卫生、审查方法）——约束块是用来装**这个项目**的规格所要求的东西的。\n- 不要在没有具体的、任务专属的理由时，加上\"检查所有用法\"或\"有用的话跑一下竞态测试\"这类开放式指令\n- 不要让审查者重跑实现者已经在同一份代码上跑过的测试——实现者的报告承载着测试证据\n- **不要替审查者预先给发现定性**——绝不指示审查者忽略或不要标记某个具体问题。如果你认为某条发现会是误报，让审查者提出来，然后在审查循环里裁定它。如果你正在写的提示词里出现了\"不要标记\"、\"不要把 X 当缺陷\"、\"顶多按 Minor 处理\"、\"计划选择了\"——停下：你正在预先定性，而且通常是为了让自己少走一轮审查循环。\n\n任务审查者可能报告\"⚠️ 无法从 diff 核实\"的条目——那些活在未改动代码里、或者跨任务的需求。这些不阻塞审查的其余部分，但在标记任务完成之前**你必须自己逐条解决它们**：你掌握着审查者所缺的计划和跨任务上下文。如果你确认某一条是真实的缺口，就把它当作规格审查失败来处理——它和其他发现一起进入修复循环。\n\n模板：[task-reviewer-prompt.md](task-reviewer-prompt.md)\n\n### 4. 修复循环\n\n当审查报告规格 ❌、任何 Critical 或 Important 发现、或者你确认为真实缺口的 ⚠️ 条目时，循环触发。\n\n循环开始之前，有两条路会立刻离开它：\n\n- **Minor 发现**随手记进进度账本（`Task \u003CN>: minor (deferred): \u003C一句话>`），并把最终的整分支审查指向那份清单，让它去甄别哪些必须在合并前修掉。**没人读的汇总等于静默丢弃。** Minor 发现永远不进入循环。\n- 被标为\"计划要求的\"发现——或任何与计划原文所要求的内容冲突的发现——和任何计划矛盾一样，属于**人类的决定**：把这条发现和那段计划原文一起呈现，问以哪个为准。不要因为计划要求就驳回这条发现，也不要在没问过的情况下分派一个与计划相违的修复。\n\n其他一切都进入循环。**一轮修复 = 一次修复分派 + 一次定向复审。每个任务最多五轮。**\n\n**第 1-3 轮——唤回原来那个实现者（resume）。** 把未解决的发现**逐字**发给它。它的上下文是完整的：它知道任务、知道代码、知道自己做过的选择。如果你的运行环境无法给一个活着的子智能体再发消息，就分派一个全新实现者，带上简报路径、报告文件路径和那些发现——无论走哪条路，报告文件都是那份持久化记忆。\n\n**第 4-5 轮——用更强的模型分派一个全新实现者**（按\"模型选择\"），带上简报路径、报告文件路径、未解决的发现，以及这样的框定语：\"某个此前的实现者尝试过这个任务 [N] 次；现在它归你了。读报告文件了解已经试过什么。\"一个熬过三次唤回的循环，通常意味着实现者看不见自己的问题——换新眼睛加提升能力，一步到位。\n\n**每一轮，无论走哪条路：** 实现者修复、重跑覆盖被改动代码的测试、把修复报告追加到**同一个**报告文件、回传那个简短契约。重新分派审查者之前，先确认修复报告里含有覆盖用的测试、跑过的命令、以及输出；三者齐备才分派复审。在修复消息里点名覆盖用的测试文件——一行的修复不需要整包套件。\n\n**复审是定向的。** 运行 `scripts\u002Freview-package PLAN_FILE FIX_BASE HEAD`，其中 FIX_BASE 是上一次审查所看到的那个 head，然后用 [re-review-prompt.md](re-review-prompt.md) 分派，附上发现清单、简报、报告文件和打印出的 diff 路径。复审者对每条发现给出 ADDRESSED 或 NOT ADDRESSED 的结论，并且**只**标记修复 diff 里的新破坏。修复 diff 里新出现的 Critical\u002FImportant 破坏加入未解决发现清单。范围外的观察作为延后的 Minor 进账本——它们永远不延长循环。\n\n**每轮结束后**往账本追加：\n`Task \u003CN>: fix round \u003CR>\u002F5 (\u003CX> addressed, \u003CY> open — \u003C发现的一句话概括>; commits \u003Ca7>..\u003Cb7>)`\n\n**绝不在控制者会话里自己修发现**——你的上下文要保持干净以供协调，而且控制者的修复会跳过审查。\n\n**熔断。** 当第 5 轮的复审仍然留下未解决的发现时，**停止分派**。你自己逐条裁定这些未解决的发现——你掌握着审查者所缺的计划和跨任务上下文：\n\n- **审查者错了，或者这一点是可争议的：** 搁置它——`Task \u003CN>: parked — \u003C发现> — ruling: \u003C为什么代码可以维持原样>`。最终审查会看到双方说法。\n- **是真实的，但下游没有任何东西建立在它之上：** 同样搁置，裁定里写明它是真的、被延后了。\n- **真实且承重**——后面的任务建立在它之上，或者它揭示了一个计划缺陷：**停止**。追加 `Task \u003CN>: BLOCKED — \u003C原因>`，并连同这条发现、与之冲突的计划原文、以及修复历史一起报告给你的人类伙伴。把一个结构性失败搁置掉，会让每个依赖它的任务都建立在它之上，并且把一个最终审查同样无法修复的问题丢给最终审查。\n\n**只在触及上限时才裁定。** 为了结束循环而提早裁定，只是换了个名字的\"预先定性\"。每一次裁定都是一条账本记录——**静默丢弃是禁止的**。\n\n### 5. 完成任务\n\n当审查干净地返回——或者在触及上限时每条未解决的发现都已带着裁定被搁置——在你做其他记账的同一条消息里，往账本追加完成行：\n\n- `Task \u003CN>: complete (commits \u003Cbase7>..\u003Chead7>, review clean)`\n- 熔断触发过的话：`Task \u003CN>: complete (commits \u003Cbase7>..\u003Chead7>, \u003CK> parked)`\n\n然后标记待办完成，继续下一个。**绝不**在审查还有未解决的 Critical\u002FImportant 问题、而它们既没被修复也没在上限处带裁定搁置时，就进入下一个任务。\n\n## 最终审查\n\n覆盖整个分支的最终审查也拿到一个审查包：运行 `scripts\u002Freview-package PLAN_FILE MERGE_BASE HEAD`（MERGE_BASE = 分支起点的那个提交，例如 `git merge-base main HEAD`），把打印出的路径放进最终审查的分派里，这样最终审查者读一个文件就行，不必用 git 命令重新推导整个分支的 diff。用可用的最强模型分派（见\"模型选择\"），使用 superpowers:requesting-code-review 的 [code-reviewer.md](..\u002Frequesting-code-review\u002Fcode-reviewer.md)。把它指向账本里那些\"延后的 Minor\"和\"已搁置\"的行，让它甄别哪些必须在合并前修掉。\n\n如果覆盖整个分支的最终审查返回了发现，用**一个**修复子智能体带着**完整的**发现清单去分派——不要一条发现一个修复者。逐条发现各派一个修复者，每个都要重建上下文、重跑测试套件；真实会话里，一次最终审查的修复浪潮花掉的成本超过它全部任务的总和。然后对这波修复跑**恰好一次**定向复审（对修复区间跑 `scripts\u002Freview-package PLAN_FILE FIX_BASE HEAD`，用 [re-review-prompt.md](re-review-prompt.md)）。残留的发现按任务循环里熔断那套来裁定：带裁定搁置，或者在承重项上停下。**没有第二波修复**——残留的承重发现会在 finishing-a-development-branch 呈现选项时浮到你人类伙伴面前。\n\n## 收尾\n\n当覆盖整个分支的最终审查干净、且它的修复已合并时，删除**本计划**的工作区（`rm -rf \u003C工作区>`）——现在 git 历史就是记录了。同级目录属于别的计划，别去动它们。\n\n使用 superpowers:finishing-a-development-branch。\n\n## 常见的合理化借口\n\n| 借口 | 现实 |\n|------|------|\n| \"规格合规性上差不多就行了\" | 审查者发现了规格差距 = 未完成。修掉，或者走到上限去裁定——只有这两个出口。 |\n| \"我自己修就好了，分派是额外开销\" | 控制者的修复会污染你的上下文并跳过审查。唤回实现者。 |\n| \"再来一轮就收敛了\" | 过了上限，轮次不会收敛——那个失败是结构性的。裁定并分流。 |\n| \"反正审查者总会再挑出新东西\" | 定向复审只核实修复，它不能到处乱逛。未改动代码上的新发现进账本，不进循环。 |\n| \"这条发现明显错了，我直接丢掉\" | 你只在上限处裁定，而且每条裁定都是账本记录。静默丢弃是禁止的。 |\n| \"修复很小，跳过复审吧\" | 未经审查的修复正是回归产生的方式。每一轮都以一次定向复审结束。 |\n| \"审查把循环拖慢了\" | 没有审查的循环只是未经核实的空转。审查是这个循环的刹车和方向盘。 |\n| \"记账本是额外开销\" | 账本是能在压缩中存活下来的东西。没有账本的控制者曾重新分派整段已完成的任务序列。 |\n\n## 示例工作流\n\n```\n你：我正在用子智能体驱动开发来执行这个计划。\n\n[准备：工作树已核实]\n[把计划文件读一遍：docs\u002Fsuperpowers\u002Fplans\u002Ffeature-plan.md]\n[解析工作区：scripts\u002Fsdd-workspace docs\u002Fsuperpowers\u002Fplans\u002Ffeature-plan.md —— 里面没有账本，全新开始]\n[为所有任务创建待办]\n\n任务 1：Hook 安装脚本\n\n[对任务 1 运行 task-brief；分派实现者，附带简报 + 报告路径 + 上下文]\n\n实现者：\"开始之前——这个 hook 应该装在用户级还是系统级？\"\n\n你：\"用户级（~\u002F.config\u002Fsuperpowers\u002Fhooks\u002F）\"\n\n实现者：[稍后]\n  - 实现了 install-hook 命令\n  - 加了测试，5\u002F5 通过\n  - 自审：发现漏了 --force 标志，已补上\n  - 已提交\n\n[运行 review-package PLAN_FILE BASE HEAD；把打印出的路径交给任务审查者去分派]\n任务审查者：规格 ✅ —— 所有需求都满足，没有多余的东西。\n  优点：测试覆盖良好，代码整洁。问题：无。任务质量：通过。\n\n[账本：Task 1: complete (commits a1b2c3d..d4e5f6a, review clean)]\n\n任务 2：恢复模式\n\n[对任务 2 运行 task-brief；分派实现者，附带简报 + 报告路径 + 上下文]\n\n实现者：[无疑问]\n  - 加了 verify\u002Frepair 模式\n  - 8\u002F8 测试通过\n  - 已提交\n\n[运行 review-package PLAN_FILE BASE HEAD；把打印出的路径交给任务审查者去分派]\n任务审查者：规格 ❌：\n  - 缺失：进度上报（规格说\"每 100 项上报一次\"）\n  问题（Important）：魔法数字（100）\n\n[第 1 轮修复：唤回原实现者，带上这两条发现]\n实现者：加了进度上报，把 PROGRESS_INTERVAL 提成了常量。\n  重跑了 test\u002Frecovery.test.js —— 10\u002F10 通过。修复报告已追加。\n\n[运行 review-package PLAN_FILE FIX_BASE HEAD；分派定向复审]\n复审者：缺失进度上报 —— ADDRESSED（src\u002Frecovery.js:41）。\n  魔法数字 —— ADDRESSED（src\u002Frecovery.js:7）。新破坏：无。\n  结论：所有发现均已解决。\n\n[账本：Task 2: fix round 1\u002F5 (2 addressed, 0 open; commits d4e5f6a..b7c8d9e)]\n[账本：Task 2: complete (commits d4e5f6a..b7c8d9e, review clean)]\n\n...\n\n[所有任务之后]\n[运行 review-package PLAN_FILE MERGE_BASE HEAD；分派最终代码审查者，用最强模型]\n最终审查者：所有需求都满足。延后的 Minor 已甄别：没有阻塞合并的。\n\n[删除本计划的工作区 —— 现在记录活在 git 里]\n\n搞定！使用 superpowers:finishing-a-development-branch。\n```\n",{"name":5,"license":15,"version":28,"metadata":29,"description":7},"1.0.0",{"hermes":30},{"tags":31},[32,19],"agents","main","11fa3057bb1aff51d77b97648803dec2b2ea62d9",".claude\u002Fskills\u002Fsubagent-driven-development",2,"https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor","https:\u002F\u002Frzx007.github.io\u002FVykor\u002F","https:\u002F\u002Fgithub.com\u002Frzx007","2026-11-11 16:54:22",{"source":8,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add rzx007\u002FVykor --skill subagent-driven-development",{"tool":47,"command":48},"bunx","bunx skills add rzx007\u002FVykor --skill subagent-driven-development",{"tool":50,"command":51},"pnpm","pnpm dlx skills add rzx007\u002FVykor --skill subagent-driven-development","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsubagent-driven-development\u002FSKILL.md",true,[55,61,65,71,75,79],{"path":56,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":59,"sourceHtmlUrl":60},"implementer-prompt.md","REFERENCE","参考文档",5569,"https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsubagent-driven-development\u002Fimplementer-prompt.md",{"path":62,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":63,"sourceHtmlUrl":64},"re-review-prompt.md",4550,"https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsubagent-driven-development\u002Fre-review-prompt.md",{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"scripts\u002Freview-package","SCRIPT","脚本",1469,"https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsubagent-driven-development\u002Fscripts\u002Freview-package",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"scripts\u002Fsdd-workspace",1586,"https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsubagent-driven-development\u002Fscripts\u002Fsdd-workspace",{"path":76,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":77,"sourceHtmlUrl":78},"scripts\u002Ftask-brief",1416,"https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsubagent-driven-development\u002Fscripts\u002Ftask-brief",{"path":80,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":81,"sourceHtmlUrl":82},"task-reviewer-prompt.md",7872,"https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsubagent-driven-development\u002Ftask-reviewer-prompt.md",[84,104,116,139,151,164],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":100,"publishedAt":23},"01M6RVYYTPGG9WWWV4QAY0YEY3","writing-skills","当创建新技能、编辑现有技能或在部署前验证技能是否有效时使用","https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fwriting-skills\u002FSKILL.md",[90,95],{"categoryNo":91,"categoryName":92,"taxonomyType":93,"taxonomyTypeDesc":94},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[101,102,103],"writing skills","writing","documentation",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":112,"publishedAt":23},"01M6RVYE486HE8NQ2M4G5DNG63","writing-plans","当你有规格说明或需求用于多步骤任务时使用，在动手写代码之前","https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fwriting-plans\u002FSKILL.md",[110,111],{"categoryNo":91,"categoryName":92,"taxonomyType":93,"taxonomyTypeDesc":94},{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},[113,114,102,115,103],"plans","writing plans","planning",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":125,"publishedAt":23},"01M6RVY778PEDPWQ0DCM25QW3A","workflow-runner","在 Claude Code \u002F OpenClaw \u002F Cursor 中直接运行 agency-orchestrator YAML 工作流——无需 API key，使用当前会话的 LLM 作为执行引擎。当用户提供 .yaml 工作流文件或要求多角色协作完成任务时触发。","https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fworkflow-runner\u002FSKILL.md",[122],{"categoryNo":123,"categoryName":124,"taxonomyType":93,"taxonomyTypeDesc":94},"01JBSEEDCAT000000000000023","Skill与智能体开发",[126,127,128,129,130,131,132,133,134,135,136,137,138],"workflow runner","runner","workflow","协作","文件","agency","orchestrator","cursor","api","execution","yaml","code","openclaw",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":23},"01M6RVY4NR6RRPV174AB706A13","verification-before-completion","在宣称工作完成、已修复或测试通过之前使用，在提交或创建 PR 之前——必须运行验证命令并确认输出后才能声称成功；始终用证据支撑断言","https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fverification-before-completion\u002FSKILL.md",[],[146,147,148,149,150],"verification before completion","verification","quality","pr","testing",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":157,"publishedAt":23},"01M6RVY1ZQ6ADVCZGBS371HD88","using-superpowers","在开始任何对话时使用——确立如何查找和使用技能，要求在任何响应（包括澄清性问题）之前调用 Skill 工具","https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fusing-superpowers\u002FSKILL.md",[],[158,159,160,161,162,163],"superpowers","using superpowers","对话","Meta","工具","getting-started",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":23},"01M6RVXJFEQ00P7XBQ8FBEKKJ2","using-git-worktrees","当需要开始与当前工作区隔离的功能开发，或在执行实现计划之前使用——通过原生工具或 git worktree 回退机制确保隔离工作区存在","https:\u002F\u002Fgithub.com\u002Frzx007\u002FVykor\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fusing-git-worktrees\u002FSKILL.md",[],[171,172,173,174,175,128,176,177,162],"using git worktrees","git","git worktrees","worktrees","Using git","worktree","git worktree"]