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_SUBAGENTfeature 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 - 重构] 完成,在隔离分支中,请确认是否合并