AgentTool:必要时派出「分身」去处理

任务类型定义(Task.ts)

type TaskType =
  | 'local_bash'        // 本地终端命令
  | 'local_agent'       // 本地子 Agent
  | 'remote_agent'      // 远程 Agent(云端执行,Ant 内部专用)
  | 'in_process_teammate' // 协作者 Agent(多 Agent 协同)
  | 'local_workflow'    // 本地工作流
  | 'monitor_mcp'       // MCP 监控
  | 'dream'             // 未公开用途

type TaskStatus = 'pending' | 'running' | 'completed' | 'failed' | 'killed'

启动决策:谁来决定?

是 Claude 自己决定的,通过传不同参数给 AgentTool。代码只做路由,不做主动判断。Anthropic 把"任务调度的智慧"放在系统提示词里教给 Claude,而不是写死在代码规则里。

路由决策树

调用 AgentTool
  │
  ├── team_name + name 都有?
  │     └── → 多 Agent 团队(Teammate):tmux 独立进程,有颜色标识
  │
  ├── isolation = 'remote'(仅 Ant 内部)
  │     └── → 远程 CCR 云端执行,生成 sessionUrl,后台运行
  │
  ├── isolation = 'worktree'
  │     └── → 创建独立 git worktree,Agent 在隔离副本中工作
  │
  ├── run_in_background = true(或 agent 定义中 background: true)
  │     └── → local_agent 异步后台执行
  │           超过 2 秒显示 Background Hint 提示
  │           超过 120 秒自动转后台(实验性功能)
  │
  └── 默认
        └── → local_agent 同步执行(阻塞,等待结果)

subagent_type 路由

  • 用户显式指定 → 直接用
  • 未指定 + Fork 实验开启(FORK_SUBAGENT feature gate)→ 子 Agent 继承父 Agent 系统提示(节省 token)
  • 未指定 + 正常模式 → 默认 general-purpose

安全 Guard 机制

  • in-process teammate 不能启动后台 Agent(生命周期绑定父进程)
  • in-process teammate 不能再生成新的 teammate(团队 roster 是扁平结构)
  • Fork 子 Agent 不能再次 Fork(递归保护)

完整示例

场景:用户说"帮我重构代码,同时写测试"

第一步:Claude 自己拆任务

Claude 判断这是两件独立的事,可以并行。于是决定调用两次 AgentTool,分别创建两个子 Agent。

第二步:每次调用 AgentTool,代码做路由判断

Agent A(重构代码)——Claude 传入的参数:

{
  description: "refactor codebase",
  prompt: "重构 src/utils 目录下的代码",
  isolation: "worktree",         ← 高风险操作,需要隔离
  run_in_background: true        ← 后台运行,不阻塞主线程
}

路由结果:创建一个独立的 git 分支副本,Agent A 在副本里改代码,改坏了也不影响主分支。

Agent B(写测试)——Claude 传入的参数:

{
  description: "write tests",
  prompt: "为 src/utils 写单元测试",
  run_in_background: true        ← 后台运行,没有 isolation
}

路由结果:local_agent 异步后台执行,直接在当前目录新增测试文件(只新增,无破坏风险,不需要 worktree)。

为什么 Agent A 要 worktree,Agent B 不用?

Agent A 重构Agent B 写测试
操作性质大量修改现有代码,风险高只新增测试文件,风险低
是否 worktree是(在副本里改,坏了无所谓)否(直接写新文件)

第三步:运行时用户体验

你:帮我重构代码,同时写测试

Claude:好的,我已启动两个后台任务:
  [Agent A - 重构] 运行中... (worktree 隔离)
  [Agent B - 写测试] 运行中...

(2 秒后,界面出现 Background Hint 提示条)

你可以继续问我其他问题。

(几分钟后)
  ✓ [Agent B - 写测试] 完成
  ✓ [Agent A - 重构] 完成,在隔离分支中,请确认是否合并