Team/Swarm 系统:多 Agent 组队协作
一句话理解
前面讲的"子 Agent"是临时的——干完活就没了。而 Team(团队)是一种持久的多 Agent 协作模式:一个 Leader(领导)可以创建一个团队,招募多个 Teammate(队友),它们各自独立运行,通过邮箱系统通信,遇到需要审批的操作还会向 Leader 请示。
比喻:子 Agent 像是你临时叫来帮忙的朋友,帮完就走。Team 像是你组建了一个项目组——有组长、有组员、有通讯群、有审批流程,项目没结束就一直运转。
整体架构
团队的生命周期
团队配置文件
每个团队有一个 JSON 配置文件,记录团队的所有信息:
存储路径:
Agent ID 命名规则
团队中每个成员都有唯一的 ID,格式为 名字@团队名:
Teammate 的创建
邮箱系统:团队的通信中枢
进程内邮箱
对于 in-process 类型的 Teammate,使用内存中的 Mailbox 类:
消息类型
邮箱中的消息有多种类型,通过谓词函数识别:
权限同步:Teammate 怎么请示 Leader
当 Teammate 需要执行一个需要审批的操作(如删除文件、执行危险命令),流程如下:
权限请求还会持久化到磁盘(便于审计):
计划审批流程
Teammate 可以被配置为 planModeRequired: true,这意味着它必须先提交计划,得到 Leader 审批后才能执行:
安全设计:只有
team-lead发出的审批才会被接受。Teammate 不能伪造其他成员的审批消息。
两种运行后端
Teammate 有两种运行方式:
In-Process(进程内)
- 通过 AsyncLocalStorage 实现上下文隔离
- 消息通过内存中的 Mailbox 类直接投递,无需文件 I/O
- 消耗同一进程的内存
Tmux/iTerm2(终端面板)
- 每个 Teammate 是独立的 Claude Code 进程
- 消息通过文件系统通信:
~/.claude/teams/{team}/inboxes/{name}.ndjson - 用户可以直接看到每个 Teammate 的终端输出
内存管理:50 条消息上限
团队场景下 Teammate 可能运行数百轮。为了防止内存爆炸:
背景:实测发现一个有 292 个 Agent 的大型会话占用了 36.8GB 内存。每个 Agent 在 500+ 轮后占 ~20MB。所以 UI 只保留最近 50 条,详细历史存磁盘。
Coordinator 模式 vs Team 模式
Claude Code 有两种多 Agent 模式,设计思路不同:
团队共享记忆
团队有自己的共享记忆空间(详见第 7 章 Memory 系统):
记忆的归属规则:
安全规则:API 密钥、凭据等敏感信息永远不写入团队记忆。
Leader 的收件箱轮询
Leader 通过 useInboxPoller 每秒检查一次收件箱:
团队创建的完整代码
小结
Team/Swarm 系统的核心设计思想是"自治 + 审批":
- 自治运行:每个 Teammate 有独立的上下文、独立的 AbortController、独立的消息历史
- 邮箱通信:统一的消息系统,支持进程内直投和文件系统轮询两种模式
- 权限审批:Teammate 遇到危险操作需要通过邮箱向 Leader 请示
- 计划审批:可选的 plan mode,Teammate 先提计划、Leader 审批后才能执行
- 内存安全:UI 层只保留 50 条消息,防止大规模团队导致内存溢出
- 安全边界:只有 Leader 的审批才生效、团队记忆不存敏感信息、路径遍历防御
比喻:这就像一个远程团队的工作模式。每个人在自己的电脑上工作(独立上下文),通过 Slack(邮箱系统)沟通,重要决策需要组长在 Jira 上审批(权限/计划审批),共享文档放在 Notion 上(团队记忆),新人入职和离职都有流程(创建/删除)。

