子代理(实验)
子代理(Subagents)是一种任务并行机制:Agent 通过 agent.task 工具将复杂任务拆解为多个独立的子代理,每个子代理在隔离的上下文中执行各自的子任务,完成后由父 Agent 汇总结果。这在批量处理、多维度审查和并行信息收集等场景下显著提升效率。该功能处于实验阶段,agent.task 工具默认关闭,需在 TUI 设置(Ctrl+P > Settings > Subagents)中手动开启。
执行模型
子代理采用同步执行模型:父 Agent 发起所有子代理后进入等待状态,待全部子代理完成(或预算耗尽终止)后统一收集结果。每个子代理拥有独立的上下文窗口和工具调用配额,互不干扰,多个子代理之间可以并行执行。
| 特性 | 行为 |
|---|---|
| 执行方式 | 同步:父 Agent 等待所有子代理完成,汇总结果 |
| 工具权限 | 父会话可用工具、子代理描述符和网关权限共同约束;子代理不能越过父会话能力 |
| 工具预算 | 每子代理独立工具调用上限,耗尽即终止,已产生结果仍返回 |
| 步骤预算 | 每子代理独立推理步数上限 |
| 上下文 | 独立上下文窗口,不影响父 Agent |
| 并行 | 多子代理可并行执行 |
| 嵌套 | 不支持(子代理不能再创建子代理) |
权限控制
子代理不是通过 read、workspace、auto、yolo 这四级会话策略声明权限。它的有效工具集由三层共同决定:父会话当前实际可调用的工具、子代理描述符中的 allowedTools / deniedTools / readOnly 约束,以及工具网关的最终权限检查。
内置子代理目前以只读探索和只读审查为主,允许读取文件、搜索、加载 Skill,并可使用宿主暴露的已知只读 MCP 工具;它们不能写文件、执行 Shell、创建递归子代理或调用会产生写入副作用的工具。父会话本身不可见或被禁用的工具,子代理也不可见。
这种模型的核心规则很简单:子代理只能在父会话已经暴露的能力范围内进一步收窄,不能扩大权限。
预算机制
每个子代理独立享有工具调用预算和推理步骤预算。工具预算限制了子代理最多可以调用多少次工具(如读文件、搜索等),步骤预算则限制其推理步数。一旦任一预算耗尽,子代理立即终止,但已产生的结果仍会返回给父 Agent,不会完全丢失。这意味着在分配任务时,应预估子代理的复杂度并相应调整预算——过于简单的预算限制可能导致子代理在完成前被截断,而过于宽裕的预算则浪费资源。
适用场景
子代理最适合处理可独立并行的子任务。典型用例包括:批量处理多个文件(每个文件一个子代理)、从安全、性能、代码风格等不同维度并行审查同一段代码,或并行从多个来源收集信息。反之,如果子任务之间存在严格的串行依赖,或需要大量共享上下文才能完成紧密协作,则不适合使用子代理。
| 适合 | 不适合 |
|---|---|
| 批量文件处理 | 严格串行依赖 |
| 多维度代码审查(安全/性能/风格并行) | 需大量共享上下文的紧密协作 |
| 并行信息收集 | 简单单步操作(开销大于收益) |
| 独立模块并行测试 | 子代理间需要频繁交互 |
导出
26.9.11 不提供独立的子代理审计导出参数。父会话对话记录可见会话导出,不能将其视为完整子代理审计归档。
已知限制
子代理作为实验性功能存在若干限制。最值得注意的是不支持嵌套(即子代理不能再创建子代理),这限制了复杂任务的递归拆解。此外,子代理的上下文窗口独立且较小,适合聚焦的子任务而非大范围探索。它们不能访问父 Agent 的会话历史和记忆,并行子代理之间也无法直接共享结果——所有信息交换必须通过父 Agent 中转。
| 限制 | 说明 |
|---|---|
| 无嵌套 | 子代理不能再创建子代理 |
| 独立上下文 | 上下文窗口独立,与父 Agent 隔离 |
| 无记忆 | 不能访问父 Agent 会话历史和记忆 |
| 无直接共享 | 并行子代理结果需通过父 Agent 中转 |