跳转到内容

子代理

Subagent 插件让 Agent 将边界明确的任务交给另一个模型上下文,并把结果带回父会话。使用前需要启用该插件。

子代理适合独立调查、复核,以及文件归属清楚的改动。例如可以这样要求:

并行调查两个导入路径为什么失败。两项调查都只读,返回相关文件和证据,
最后在这里汇总原因。

父 Agent 决定是否委派,并负责检查和整合结果。把很小的任务拆开,或让多个 Agent 修改同一批文件,可能增加沟通成本。每个子代理也会产生独立的模型请求和 token 消耗。

选项效果
全新上下文从任务说明开始,不继承父会话;这是默认方式
派生上下文继承父会话,作为新任务的背景
worktree 隔离创建独立的 Git 工作目录;当前插件同时为此选项使用派生上下文

子代理默认共用工作区。仅使用全新上下文不会隔离文件。并行编辑时,应划清负责的文件或使用 worktree,并在开始前确定如何整合改动。

插件的 spawn_agent 工具默认在后台执行。父 Agent 可以处理其他工作,子任务完成后通过通知带回结果。插件提供相应界面时,输入框上方会显示子任务状态。

下一步立即依赖结果时,父 Agent 可以设置 run_in_background: false。工具会等待并直接返回最终状态、输出和错误。前台等待十分钟后仍未结束的任务转为后台执行,不会因此取消子代理。

可以要求父 Agent 向指定子任务补充说明或取消任务。插件通过 send_message 发送后续输入,通过 close_agent 取消。停止父会话当前回复,不能替代明确取消子任务。

首次升级: 激活本版本前,先停止旧 Subagent 运行时及其尚未结束的工具调用,或重启 Wuu。旧运行时写索引时不使用比较并交换,不能与本版本的写入者安全混用。所有写入者都采用新协议后,才支持插件代重叠运行。

任务先保留关联记录,再创建子会话。重叠运行的插件代通过比较并交换更新记录,避免一个任务覆盖另一个任务的预留。同一会话、工具、调用 ID,以及宿主提供的回合和步骤标识的重试,会复用创建或后续请求;回执仍保留时,使用同一标识提交不同内容会被拒绝。后续输入沿用原子会话,向正在执行的回合补充要求,或启动新回合。

创建响应不确定时,恢复使用同一创建标识重试。取消则通过创建标识查找已经存在且归插件所有的子会话,不会为了取消而创建替代会话。尚未确定的接纳和取消仍占用预留名额。索引最多保留 128 条任务记录,每条保留的任务最多接受 128 个不同的后续调用标识,并保留最多 128 条反馈关联;已结清记录可以回收,为新任务腾出空间。

子任务结束与反馈送达是两个事件。已排队的反馈在重启后仍保持待投递;插件检查回执,并用同一请求标识重试宿主标记为可重试丢弃的反馈。投递已开始,或收到不可重试的终态回执,才结清反馈;这不代表模型已经理解或执行了结果。较早的注入反馈尚未确认送达时,父 Agent 仍可让同一个子代理执行下一步。旧反馈保留原来的目标与回复锚点;保留的反馈占满容量时,新工作会在接纳前被拒绝。结果正文留在宿主终态回执中,不复制进任务索引。嵌套反馈在接纳结果不确定时,从该回执重建相同的输入。

取消会抑制尚未接纳投递的反馈,并针对子任务已接纳的回合或队列项执行取消。已经在途或被父会话消费的反馈无法撤回。前台等待超时仍不会取消子代理。 在实际取消尚未确认时,close_agent 返回 cancelled: false, cancel_pending: true。如果较新的后续任务在取消被记录前先获准执行,关闭操作会返回 cancelled: false, superseded: true,不影响该新请求。取消失败或结果不确定时,恢复流程会重新检查同一请求,包括在取消到达前已开始运行的排队请求。

子代理仍受宿主的会话和权限规则约束。返回的结果是需要检查的证据,不是正确性的保证。整合前检查文件改动和测试;运行环境中断后,也不要假定任务已经完成。

子代理是模型会话;后台命令是本机进程;定时任务则负责在未来投递工作。三者用途不同。