Claude Code 并行 Agent 怎么选:五种方式、三个硬限制,以及 568 并发的传言
文档:
- Run agents in parallel: https://code.claude.com/docs/en/agents
- Agent SDK subagents: https://code.claude.com/docs/en/agent-sdk/subagents
Claude Code 有五种同时处理多任务的方式:subagents、agent view、agent teams、dynamic workflows、projects。差异在于你介入多深,以及工作跑在本机还是云端。
五种方式对照
| 方式 | 给你什么 | 什么时候用 |
|---|---|---|
| Subagents | 单个 session 内的委派 worker,在各自 context 里做侧任务,只返回摘要 | 侧任务会把搜索结果、日志、文件内容灌满主对话,而这些内容你不会再引用 |
| Agent view | 一个界面派发并监控后台 session,用 claude agents 打开。Research preview | 有几个独立任务想丢出去,一眼看状态,只在需要时介入 |
| Agent teams | 多个协调 session,共享 task list 与 agent 间消息,由 lead 管理。Experimental,默认关闭 | 想让 Claude 把项目拆分、指派,并保持 worker 同步 |
| Projects | claude.ai/code 或桌面应用里的持续对话。Claude 启动称为 thread 的并行云 session,给每个 thread 项目的 repo、指令与 memory。Pro/Max 上 Public beta | 工作跨越多天多周,机器关机也要继续跑 |
| Dynamic workflows | 一个脚本运行许多 subagent 并交叉验证结果,任务大到没法一回合协调 | 超出一把 subagent 的量,或想让结论互相验证:全代码库审计、500 文件迁移、交叉核对研究 |
所有方式里的 worker 都是 Claude session。要用别的工具,就把它作为 MCP server 暴露给 Claude。
三个支撑工具本身不是跑 agent 的方式:
- worktrees:给每个 session 独立 git checkout,并行 session 不编辑同一批文件。自己跑的 session 用它。从 agent view 派发的 session 在编辑文件前会移入自己的 worktree,你 spawn 的 subagent 也能各拿一个。
- cross-session messaging:让 Claude 列出并给本机、另一台机器或云端的其他 Claude Code session 发消息。
/batch:一个 skill,让 Claude 把一个大的改动拆成 5 到 30 个 worktree 隔离的 subagent,各自开一个 PR。
几个容易混的概念:background bash command 跑一条 shell 命令,不阻塞对话,也不 spawn agent;forked subagent 继承你完整对话上下文,用 /subtask 启动,要把整个 session 复制成新的后台 session 用 /fork;routine 在云端按计划跑 session,不是在本机并行。
并行跑多个 session 或 subagent 会成倍消耗 token。
怎么选
判断依据是三件事:谁协调、worker 之间要不要通信、是否编辑同一批文件。
谁协调。 Claude 在一次对话里委派并收集结果,用 subagents。你丢出独立任务稍后回来查看,用 agent view。Claude 规划、指派、监督一组 worker,用 agent teams。脚本持有计划而不是靠 Claude 逐回合判断,用 dynamic workflows。
worker 之间要通信吗。 Subagents 把结果汇报给 spawn 它们的对话,agent view 的 session 只汇报给你。agent team 里的 teammate 之间直接互发消息。
任务是否触碰同一批文件。 用 worktree 隔离。agent teams 不会把 teammate 隔离进 worktree,所以要按文件分区,让每个 teammate 拥有不同的文件集合。
三个硬限制:并发、深度、预算
| 限制 | 设置方式 | 默认 | 到限时做什么 |
|---|---|---|---|
| Depth | CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH | 主 agent 之下 3 层;设为 1 则 subagent 不能再 spawn | 最底层 subagent 无法 spawn,自己把委派的工作做完 |
| Concurrency | CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS | 同时 20 个 subagent,统计 Claude 用 Agent tool spawn 的每个 subagent | 拒绝 spawn,返回 Concurrent subagent limit reached,直到运行数降到限制以下。开启 ultracode 的 session 从不被拒 |
| Spend | TypeScript 里的 maxBudgetUsd,Python 里的 max_budget_usd | 无限制。与 total_cost_usd 比较,所以 subagent 请求计入 | 拒绝 spawn 更多 subagent,返回 Budget limit reached,停掉仍在跑的后台 subagent,并以 error_max_budget_usd 结束查询 |
subagents 默认在后台跑。省略 run_in_background 的 Agent tool 调用会启动后台 subagent;把 background 字段设为 true 可强制后台执行。v2.1.198 之前,后台默认是逐步放开的,Agent tool 调用可能同步执行。
subagent 继承主 session 的 extended thinking 配置;更早的版本里 subagent 内部的 extended thinking 是关的。
默认情况下 subagent 可以 spawn 自己的 subagent,最深到主对话以下三层。即使不定义自定义 subagent,Claude 也能 spawn 内置的 general-purpose subagent。把 Agent 加进 allowedTools,这些调用就自动批准。
Claude 通过 Agent tool 调用 subagent。要检测调用,找 name 为 "Agent" 的 tool_use block;subagent context 里发出的消息带 parent_tool_use_id 字段。subagent 可以 resume,恢复后的 subagent 保留完整对话历史,包括 tool call 与结果。
被夸大的 568
dynamic workflows 引擎把并发 agent() 调用限制在 min(16, cpu_cores − 2)。10 核机器最多同时跑 8 个 subagent,另有一个约 1000 个 agent 的 lifetime backstop 防止失控循环。流传很广的「568 个并发 subagent」来自一个 YouTube 演示,不是 Anthropic 文档。Claude Code 里真实的并行度由引擎硬限制决定,不取决于你画的组织结构有多大。
嵌套也有上限:subagent 链最多五层深;后续补丁把前台 subagent 纳入同一上限,后台默认行为在 v2.1.195–v2.1.201 落地。
subagents 适合每回合几个委派任务。要协调几十到几百个 agent,用 Workflow tool,它把编排挪到一个由 runtime 在对话上下文之外执行的脚本里。Workflow tool 在 TypeScript Agent SDK v0.3.149 及之后可用。
worktree 隔离 vs agent teams 不隔离
context 隔离是让一堆 agent 安全工作的基础。每个 subagent 在自己的 context window 里跑,有自己的 system prompt、特定工具访问和独立权限,只把摘要返回给 orchestrator,而不是完整工作状态。subagent 之间不共享内存状态,所以一个 research worker 可以读 50 个文件,把无关的读取全留在自己的 window 里,只交回一份干净摘要,orchestrator 的 context 保持精简。
但隔离不等于协调。文件级安全来自 git worktree:在 role 里设 isolation: worktree,或传 claude --worktree,Claude Code 会在 .claude/worktrees// 下创建独立 checkout,分支为 worktree-。agent view 自动把派发的 session 移入 worktree,/batch 把一个改动拆成 worktree 隔离的 subagent,各自开 PR。agent teams 增加了 file-locked task claiming,防止 teammate 抢同一个任务,但不会自动把 teammate 分配到各自的 worktree——文档明确要求操作者按文件分区。
内置 subagent 有 Explore 和 Plan,都是只读的,用来把搜索和规划挡在主 context window 之外。
实测取舍
subagents 适合一个复杂任务里的多条工作流,最终合成一个输出。parallel agents 适合独立任务:多个不相关的任务各自在独立 worktree 里跑独立的 claude -p 命令,只是恰好同时跑。区别在协调:subagents 由 orchestrator 协调,parallel agents 相互独立、互不知晓。合并责任也不同:subagents 由 orchestrator 合并输出,parallel agents 等 session 结束后你手动合并。
大多数任务里 3 到 5 个并发 subagent 是甜点区。再多,花在合并摘要上的时间就超过并行省下的。要让它并行,关键是说出 "in parallel using separate subagents"——不说 parallel,Claude Code 有时会顺序执行。
spawn 的三条规则:
- 只拆独立单元。两个 subagent 同时写同一个文件会 race。fan out 前先规划分区。
- 每个 subagent 有自己的范围和工具。research subagent 给只读文件工具和 web search;writer subagent 给 Edit 和 Bash,不给网络。
- 摘要要有界。告诉每个 subagent 你想要的摘要确切形状,lead 才能一致地合并。
每个 subagent 消耗自己的 token。5 个 subagent 并行跑,大约是 1 个 agent 顺序做同样工作的 5 倍 token。换来的是速度:并行跑完的时间等于最慢那个 agent 的时间,不是总和。
查看运行中的任务
- 后台 session:
claude agents打开 agent view。 - 当前 session 里的 subagent:命名后台 subagent 会出现在 @-mention typeahead 里,带状态。从 v2.1.198 起,
/agents不再打开面板,而是打印一条指向 subagent 文件位置的提示。名字相似,但/agents与claude agents是两回事。 - 当前 session 后台跑的任何东西:
/tasks列出每一项,可以查看、接入或停止。 - dynamic workflows:
/workflows列出运行中和已完成的 run、各自所处阶段,以及已完成的 agent 数。