跳转到正文

执行与 Subagent

每项任务在全新的上下文中运行。无污染。无假设。无继承的混乱。


为什么要使用全新的 Subagent?

当一个 AI agent 处理一项长任务时,它会积累上下文——先前的决策、早期的错误、以及一小时前执行某些步骤时形成的半成品假设。当它执行到计划中的第 15 项任务时,它可能已经(隐约或显著地)受到第 1 到第 14 项任务中所有内容的影响。

这被称为上下文污染,是 AI 辅助开发中导致级联失败的主要原因之一。任务 3 中的误解会悄无声息地传播。任务 7 中做出的错误假设会影响任务 8、9 和 10 中编写的代码。等到有人发现问题时,理清头绪的代价已经很高了。

Superpowers 通过 subagent 来解决这个问题:没有先前任务记忆的全新 AI 实例。每项任务都被分派给一个干净的上下文。之前发生的事情不存在。subagent 读取任务、读取相关代码,然后严格按照任务说明执行——不多也不少。

上下文隔离的三大优势

  1. 无错误传播 — 任务 3 中的错误不会影响任务 4。每项任务独立成功或失败。

  2. 无偏见的审查 — 审查已完成任务的 agent 对它正在审查的代码没有任何依附。它没有写这段代码,所以没有理由为问题辩解。

  3. 并行执行安全 — 互不依赖的任务可以同时分派。全新的上下文不会产生冲突。


控制器流程

控制器是主要的编排 agent——它负责管理计划执行循环。工作方式如下:

┌──────────────────────────────────────────────────────────────┐
│                     CONTROLLER LOOP                          │
│                                                              │
│  1. Load plan → identify next PENDING task                   │
│  2. Dispatch subagent with: task description + relevant code │
│  3. Subagent completes task → returns result + status        │
│  4. Controller runs TWO-STAGE REVIEW                         │
│  5. Handle status:                                           │
│     DONE           → mark task complete, continue           │
│     DONE_WITH_CONCERNS → log, continue with note            │
│     NEEDS_CONTEXT  → gather context, re-dispatch            │
│     BLOCKED        → stop, escalate to user                 │
└──────────────────────────────────────────────────────────────┘

加载计划

控制器读取完整的计划文档,并找到第一个状态为 Status: PENDING 的任务。它不会跳过步骤,不会重新排序,也不会为了"提高效率"而决定"合并"任务。计划是合约——控制器负责执行合约。

分派 Subagent

控制器创建 subagent 时,只提供该 subagent 所需的信息:

  • 任务描述
  • 要编写的确切代码(来自计划)
  • 要修改的确切文件
  • 要运行的确切命令

没有额外内容。没有先前任务的历史记录(除非该任务明确要求将其作为上下文)。subagent 的工作是干净地执行一项任务。


两阶段审查

在 subagent 完成任务后,控制器不会立即接受结果。它会运行两阶段审查:

阶段 1:规格符合性

"subagent 是否构建了任务规格中指定的内容?"

控制器将 subagent 的输出与任务描述进行比较:

  • 是否修改了正确的文件?
  • 是否使用正确的签名创建了正确的函数?
  • 是否编写了所需的测试?
  • 是否进行了任何超出范围的更改?

如果输出与规格不匹配,任务就没有完成。控制器记录偏差,然后带有说明重新分派,或升级给用户。

阶段 2:代码质量

"代码是否正确、可读且可维护?"

这与规格符合性独立评估。subagent 可以完美匹配规格,但仍然产出质量糟糕的代码:

  • 对明显情况缺少错误处理
  • 碰巧通过了指定测试但逻辑不正确
  • 命名规范与代码库不匹配
  • 安全问题

代码质量问题与符合性问题分开记录。一项任务可以是 DONE_WITH_CONCERNS——技术上完成但有需要审查者关注的备注。


状态协议

每项完成的任务返回以下四种状态之一:

DONE

任务已完成。代码符合规格。质量可接受。无需关注。继续下一项任务。

DONE_WITH_CONCERNS

任务技术上已完成且测试通过,但审查 agent 标记了一些值得人工关注的内容。示例:

  • 实现有效但使用了已废弃的 API
  • 测试覆盖率技术上通过但较弱
  • 引入了轻微的命名不一致

工作继续进行,但关注点被记录下来,供人工在计划结束时或下一个审查检查点进行审查。

NEEDS_CONTEXT

由于 subagent 遇到了无法用所提供信息解决的问题,任务无法完成。这不是失败——这是对需要更多信息的诚实报告。示例:

  • 指定的文件不存在,且任务没有说要创建它
  • 导入的模块不在代码库中
  • 任务引用的函数签名与现有函数不匹配

控制器收集缺少的上下文并重新分派。

BLOCKED

有根本性的问题阻止了进展。示例:

  • 一项依赖任务被标记为 DONE,但它本应创建的代码不存在
  • 测试以当前任务无法解释的方式失败
  • 计划中的设计假设被证明是错误的

当任务返回 BLOCKED 时,控制器停止执行并升级给用户。这是一个强制机制,防止 AI 对计划层面的问题做出单方面决定。


按复杂度选择模型

并非所有任务都需要相同级别的 AI 能力。Superpowers 建议将任务复杂度与模型层级匹配:

任务类型示例推荐模型层级
机械性添加 import、重命名变量、更新配置值较小/较快的模型
集成性将两个现有系统连接起来、添加新的 API 端点中等模型
架构性设计新的抽象、重构核心数据模型最强模型

对机械性任务使用较小的模型可以降低成本和延迟。对架构性任务使用最强模型可确保重要决策获得最佳推理。任务复杂度通常在计划中描述,也可以从任务描述中推断出来。


并行 Agent 分派

计划中的某些任务是相互独立的——完成任务 4 不依赖于任务 5 的完成。在这些情况下,控制器可以同时分派多个 subagent。

并行分派规则

  1. 无共享状态 — 并行运行的任务不得写入同一文件或修改同一数据库记录
  2. 无顺序依赖 — 如果任务 B 和任务 A 并行运行,任务 B 不得需要任务 A 的输出
  3. 明确声明 — 并行任务应在计划中标记([PARALLEL_GROUP: A]),这样控制器就知道它们可以安全地一起运行
  4. 审查仍然适用 — 每个并行任务在完成时独立经过两阶段审查
### Task 6: Write auth middleware test [PARALLEL_GROUP: 1]
### Task 7: Write order validator test [PARALLEL_GROUP: 1]
### Task 8: Write cart service test [PARALLEL_GROUP: 1]

// Tasks 6, 7, and 8 can be dispatched simultaneously.
// Task 9 must wait for all three to complete.

何时不应并行化

  • 当任务修改同一文件时(合并冲突代价高昂)
  • 当一项任务的输出改变了另一项任务的环境时
  • 当不确定时(不确定时默认顺序执行)

备用方案:在没有 Subagent 的情况下执行计划

某些环境不支持 subagent 分派——AI 工具在单一上下文模式下运行,无法生成独立进程。

在这些情况下,使用 executing-plans 技能(而不是 subagent 分派流程)。executing-plans 技能通过以下方式在单一上下文中模拟 subagent 纪律:

  • 将每项任务视为一个清晰的单元,并明确重置上下文
  • 在每项任务后应用相同的两阶段审查
  • 使用相同的状态协议
  • 在执行当前任务时绝不提前查看未来任务

结果比真正的 subagent 稍微少一点隔离,但流程纪律提供了大部分相同的好处。

/executing-plans [path to plan document]

常见执行失败及预防方法

失败情况原因预防措施
任务完成但测试不通过Subagent 验证了文件存在,而不是测试通过审查关卡必须运行测试,而不仅仅是检查文件是否存在
DONE_WITH_CONCERNS 积累控制器尽管有顾虑仍继续运行设定阈值——如果积累了 N 个顾虑,暂停并审查
BLOCKED 任务被跳过控制器尝试绕过被阻塞的任务BLOCKED 始终停止执行——没有变通方法
并行任务冲突两个任务写入同一文件明确标记并行组;在分派前检查是否有共享状态
执行期间计划偏离Subagent "改进"了计划Subagent 必须严格遵循计划,不得解读或改进

subagent 模型借鉴自优秀的工程管理实践: 给每位工程师一项清晰、自包含的任务,在其代码合并前审查他们的工作,并且绝不让一位工程师的困惑成为整个团队的问题。