子代理
Subagent 插件让 Agent 将边界明确的任务交给另一个模型上下文,并把结果带回父会话。使用前需要启用该插件。
明确委派范围
Section titled “明确委派范围”子代理适合独立调查、复核,以及文件归属清楚的改动。例如可以这样要求:
并行调查两个导入路径为什么失败。两项调查都只读,返回相关文件和证据,最后在这里汇总原因。父 Agent 决定是否委派,并负责检查和整合结果。把很小的任务拆开,或让多个 Agent 修改同一批文件,可能增加沟通成本。每个子代理也会产生独立的模型请求和 token 消耗。
上下文独立不等于文件隔离
Section titled “上下文独立不等于文件隔离”| 选项 | 效果 |
|---|---|
| 全新上下文 | 从任务说明开始,不继承父会话;这是默认方式 |
| 派生上下文 | 继承父会话,作为新任务的背景 |
| worktree 隔离 | 创建独立的 Git 工作目录;当前插件同时为此选项使用派生上下文 |
子代理默认共用工作区。仅使用全新上下文不会隔离文件。并行编辑时,应划清负责的文件或使用 worktree,并在开始前确定如何整合改动。
等待结果或并行继续
Section titled “等待结果或并行继续”插件的 spawn_agent 工具默认在后台执行。父 Agent 可以处理其他工作,子任务完成后通过通知带回结果。插件提供相应界面时,输入框上方会显示子任务状态。
下一步立即依赖结果时,父 Agent 可以设置 run_in_background: false。工具会等待并直接返回最终状态、输出和错误。前台等待十分钟后仍未结束的任务转为后台执行,不会因此取消子代理。
补充要求或停止子任务
Section titled “补充要求或停止子任务”可以要求父 Agent 向指定子任务补充说明或取消任务。插件通过 send_message 发送后续输入,通过 close_agent 取消。停止父会话当前回复,不能替代明确取消子任务。
重试与结果投递保证
Section titled “重试与结果投递保证”首次升级: 激活本版本前,先停止旧 Subagent 运行时及其尚未结束的工具调用,或重启 Wuu。旧运行时写索引时不使用比较并交换,不能与本版本的写入者安全混用。所有写入者都采用新协议后,才支持插件代重叠运行。
任务先保留关联记录,再创建子会话。重叠运行的插件代通过比较并交换更新记录,避免一个任务覆盖另一个任务的预留。同一会话、工具、调用 ID,以及宿主提供的回合和步骤标识的重试,会复用创建或后续请求;回执仍保留时,使用同一标识提交不同内容会被拒绝。后续输入沿用原子会话,向正在执行的回合补充要求,或启动新回合。
创建响应不确定时,恢复使用同一创建标识重试。取消则通过创建标识查找已经存在且归插件所有的子会话,不会为了取消而创建替代会话。尚未确定的接纳和取消仍占用预留名额。索引最多保留 128 条任务记录,每条保留的任务最多接受 128 个不同的后续调用标识,并保留最多 128 条反馈关联;已结清记录可以回收,为新任务腾出空间。
子任务结束与反馈送达是两个事件。已排队的反馈在重启后仍保持待投递;插件检查回执,并用同一请求标识重试宿主标记为可重试丢弃的反馈。投递已开始,或收到不可重试的终态回执,才结清反馈;这不代表模型已经理解或执行了结果。较早的注入反馈尚未确认送达时,父 Agent 仍可让同一个子代理执行下一步。旧反馈保留原来的目标与回复锚点;保留的反馈占满容量时,新工作会在接纳前被拒绝。结果正文留在宿主终态回执中,不复制进任务索引。嵌套反馈在接纳结果不确定时,从该回执重建相同的输入。
取消会抑制尚未接纳投递的反馈,并针对子任务已接纳的回合或队列项执行取消。已经在途或被父会话消费的反馈无法撤回。前台等待超时仍不会取消子代理。 在实际取消尚未确认时,close_agent 返回 cancelled: false, cancel_pending: true。如果较新的后续任务在取消被记录前先获准执行,关闭操作会返回 cancelled: false, superseded: true,不影响该新请求。取消失败或结果不确定时,恢复流程会重新检查同一请求,包括在取消到达前已开始运行的排队请求。
子代理仍受宿主的会话和权限规则约束。返回的结果是需要检查的证据,不是正确性的保证。整合前检查文件改动和测试;运行环境中断后,也不要假定任务已经完成。