多 Agent 协作:在 Control Room(原 War Room)里同时跑 Claude Code、Codex 和 Gemini CLI

在 MXterm Pro 里做多 Agent 协作,靠的是 AI Control Room 终端(也叫 AI War Room 终端):几个 AI 编程 Agent 各占一个真实的终端分屏,同在一个房间里互发消息、交接任务。点分屏标题栏里的 Control Room 按钮,就能把 Agent 加进来。Agent 会得到四个 mxt_room 工具:list_peers、send、read_inbox 和 claim(仅作提示的文件预留)。没有什么会自己运行,需要你提示 Agent 去用这些工具。
AI Control Room 到底是什么
Control Room 是右侧辅助面板里一个有名字的房间。用 Alt+Ctrl+B 切换面板(Mac 上是 ⌥⌘B)。要加成员,点分屏标题栏里的 Control Room 按钮,选择或新建房间;也可以在 Members 标签页里用“Add all active panes”。
Agent 加入时,会有一条介绍消息被输入到它的分屏里。随后 Members 标签页里出现这位成员的卡片,带一个“未握手”徽标,直到 Agent 第一次调用工具,之后换成状态圆点。
房间是一个共享的 MCP 服务器,两个 Agent 进程都连到它。看的是成员身份,不是物理位置。一个工作区里的 Claude Code 分屏,和另一个项目文件夹里的 Codex 分屏,可以共用一个房间,因为 Control Room 是消息机制,不是分屏布局。
可以同时开多个房间,每个房间有自己的成员名单和对话记录。一个分屏同一时间只在一个房间里。要换房间,就点它标题栏里的 Control Room 按钮,选另一个房间。
面板有两个标签页:Members(每位成员的名称、文件夹、Agent 图标和连接状态)和 Discussion(输入框加对话记录)。在输入框里,你作为 Moderator,选一个目标(某个 Agent 或“所有人”)和一种模式。
Probe 发送一条消息。Execute 把提示词粘贴到那一个 Agent 的终端里,并在那里运行。Agent 手里有同样两个工具,方向相反,所以它们也能向同伴发 probe,或者给同伴下发 execute。
相关指南Claude Code 和 Codex 的 Token 用量:Token Meter 读取什么Control Room 适合谁
只在一个仓库里跑一个 Agent,就不用看了。单个 Claude Code 或 Codex 分屏更简单,Control Room 只会多出一个你用不上的界面。
任务要拆给两个负责人时,它才派得上用场:后端接口契约变更需要前端确认;一个 bug 横跨两个微服务,而它们检出在两个不同的工作副本里;或者一个 Agent 实现,另一个在代码上线前审查 diff。
它还假定你能接受 CLI Agent 在较少监督下,一次连续运行几分钟的命令。Execute 模式的用处,是让交接用的提示词直接在同伴的终端里输入并运行,不用你重敲。如果你更想逐行看 Agent 运行的每条命令,就留在 Probe 模式,或者不用 Execute。
它只对支持 MCP 工具调用的 Agent 有用。MXterm Pro 每次启动时,会把自己的 MCP 服务器写进 Claude Code(~/.claude.json)、OpenAI Codex(~/.codex/config.toml)和 OMP 的配置。Grok 会读取 MXterm 写进 Claude Code 的 ~/.claude.json 里的那一项(已用 Grok 1.0.34 检查过)。
Gemini CLI 的服务器按项目配置:在该目录打开 Gemini 分屏时,写入 .gemini/settings.json。无论哪种 Agent,都必须跑在 MXterm Pro 的分屏里,因为用来向服务器证明 Agent 身份的 token 是每个分屏单独生成的(Claude Code、Codex 和 OMP 从环境变量读取,Gemini 从 settings.json 里的条目读取)。Agent 就是这样连上 mxt_room 工具的。
其他 CLI Agent 要手动指向该分屏的 MCP 地址和 token,能不能用,尚未验证。
Agent 之间到底怎么对话
介绍消息会让每个 Agent 先调用 mxt_room.list_peers。它第一次成功调用 Control Room,就确认了连接。在此之前,其他成员看到的是它尚未连接,也没法给它发消息。
四个工具是 list_peers、send、read_inbox 和 claim。list_peers 列出在场的成员。send 给同伴或 Moderator 发消息,模式“probe”用于讨论,模式“execute”用于交出一个可运行的任务。read_inbox 取出排给它的消息。claim 预留 Agent 即将编辑的文件,仅作提示。
probe 不会完整粘贴进接收方 Agent 的终端。只有一条排队中的 probe,且不超过 280 个字符、单行、不含 « »,才会内联进一行提醒(“[Control Room] Peer "X" sent probe message: « ... »”),Agent 不需要再调一次工具。更长的、多行的,或者和其他消息一起排队的,提醒只会让 Agent 去调用 read_inbox。
大小上限加上收件箱这层间接,避免跨 Agent 的闲聊悄悄撑大 Agent 的上下文窗口,而整段粘贴同伴的对话就会这样。
投递会等分屏空闲。MXterm Pro 会跟踪输出活动,大约安静 3 秒后才输入提醒。
如果你在分屏里输了一行还没发送,或者在最近 6 秒内在当前聚焦的分屏里按过键,MXterm Pro 会挂起投递,直到你提交或清空这一行,或者点分屏上的 立即投递。期间 Members 标签页会显示挂起的数量,所以排队的消息不会落进你正在输入的内容中间。
你,也就是运行 MXterm Pro 的人,同样是一个同伴。“Moderator”是固定的同伴,Agent 需要一个同伴 Agent 自己做不了的决定时,可以向它发 probe。发给 Moderator 的 execute 会被直接拒绝,因为那里没有可以运行的终端。
MXterm Pro 代同伴输入到分屏里的文本,会去掉 ANSI 转义序列和控制字符,内联显示的 probe 还会去掉 « » 分隔符。完整消息仍按原样留在收件箱里。这样能降低以下情况的可能性:同伴的文本被当成指令,或跳出提醒中的引用范围。但它不是安全边界。
实例:两个 Agent 协商 API 契约
典型的一次运行:一个 Claude Code 分屏开在后端仓库,一个 Codex 分屏开在前端仓库(或者两个都在同一个工作区)。用各分屏标题栏里的 Control Room 按钮,或 Members 标签页里的“Add all active panes”,把两个 Agent 加进房间。各自收到一条介绍消息,并显示“未握手”徽标,直到它第一次调用工具。
在 Claude 分屏里,你输入类似这样的话:“前端需要 /users 响应里带 created_at。和你的 Control Room 同伴讨论这次契约变更,谈妥后用 execute 模式把变更交给它。”
Claude 向 Codex 发 probe,Codex 读收件箱并回复,来回的过程显示在 Discussion 对话记录里。你可以实时观看,不用手动转述任何东西。
谈妥之后,Claude 给 Codex 发一条带具体改动的 execute。它会粘贴进 Codex 的分屏并在那里运行,不在 Claude 的分屏里。
移除立即生效。点成员卡片上的 X(或用它所在分屏的 Control Room 菜单)后,同伴再给它发任何消息,都会以“not in the Control Room.”失败。成员资格是立刻撤销的,不只是在界面上隐藏。
Git worktree 隔离,让 Agent 不踩彼此的分支
Worktree 隔离是创建工作区页面里一个需手动开启的独立复选框,默认关闭。勾选 为每个功能使用独立的 git worktree,并且在 git 仓库里时,这个新标签页中的每个 Agent 分屏都会创建在各自的 <repo>/.worktrees/<slug> worktree 里,而不是仓库根目录。
在不是 git 仓库的文件夹里,分屏会退回普通文件夹,并给出提示。无论哪种情况,普通 shell 分屏都留在仓库根目录。
MXterm Pro 会把 .worktrees/ 这个目录加进该仓库的 .gitignore 文件里。此外,每个 Agent 分屏还会各自新建一个分支,分支名形如 swarm/<adjective>-<noun>,比如 swarm/brave-otter 这种。
同一个房间里的两个 Agent 编辑同一个仓库时,这就派上用场了。每个 Agent 一个 git worktree,能降低以下情况的可能性:一个 Agent 改到一半的内容或切换分支,在任务途中混进同伴的 diff。生成的分支仍要你自己合并,因为 MXterm Pro 不会替你自动合并 worktree。
Report (.md) 导出
点 Discussion 标签页标题栏里、清除讨论 旁边的 报告 (.md),MXterm Pro 就会写出一份 Markdown 报告,而不只是原始聊天记录。
文件开头是一张成员名单表(Agent 名称、模型或 Agent id、工作目录)。接着是对话部分,连续的消息按 Agent 的每次发言,归在带时间戳的标题下。每条 execute,以及每条发给指定同伴的 probe,都标上 ⚡ EXECUTE 或 📢 PROBE 和目标。加入、离开等房间事件以系统事件行的形式出现。
文件有意不包含各分屏的终端 ID,因为这个值同时是该分屏的 MCP bearer token,而报告是要交给别人的,比如队友、工单或你自己的笔记。
导出在两个套餐上都是完整功能。MXterm Pro 限制的是房间里能放几个 Agent,不限制导出本身。
Free 与 Pro
默认情况下,Free 套餐把一个 Control Room 限制在 2 个成员。如果你想加第三个,MXterm Pro 会在客户端拦下这次加入,并提示你升级。它不会先悄悄放行、之后才失败。
Pro 取消这个上限:每个房间的 Agent 数量不限。房间数量从来没有上限。报告 (.md) 导出在两个套餐上一样,因为上限限制的是房间大小,不是房间建好之后你能用它做什么。
Control Room 与手动多终端、Warp 和多 Agent 框架对比
iTerm2 和 tmux 是基线:免费或开源,分屏扎实,完全可脚本化,除了你自己的机器没什么需要信任的。它们没有的是消息总线。
两个分屏里的两个 Agent 需要协调时,你就是消息总线。你把一个分屏里的错误复制出来,粘贴到另一个,还要记住谁同意了什么。除非你自己保存滚动缓冲区,否则没有任何东西记录这些交流。
Warp 是做得很精致的 AI 终端,自带多 Agent 编排:一个父 Agent 生成并协调子 Agent,子 Agent 可以运行 Claude Code 或 Codex。那是“生成并委派”的模式。Control Room 的形态不同:每个 Agent 由你自己在各自分屏里启动,Agent 之间以及和你这位 Moderator,通过共享房间互发消息。
AutoGen 或 CrewAI 这类框架是为 Agent 之间的编排而造的,结构上可以说比 probe/execute 消息总线更完整。但它们是 Python 库,要你写脚本,再从 notebook 或 CLI 入口运行。你得不到真正的 PTY 终端分屏:看着输出滚动,对话到一半跳进去输入。
这里的 AI Control Room 终端 提供的东西更窄:真实的终端分屏,每个 Agent 是一个活的 CLI 会话,而不是包了一层的 API 调用;再加上它们之间的消息总线和 Moderator 这个角色,全都停靠在你原本跑终端的窗口里。
它是手动在分屏之间转发的替代方案。如果你的问题是要脚本化编排,它替代不了编排框架。
开始之前要知道的限制
Control Room 不会自己发起辩论:你得提示某个 Agent 去 probe 它的同伴,并让对话继续下去。它是一条消息总线加一层界面,不是自主的多 Agent 规划器。
普通 shell 分屏可以加入房间,但它没有运行 MCP 客户端,所以输入框会禁用向它发 execute。粘贴过去的提示词只会被当成字面的 shell 命令运行。shell 分屏在房间里只是旁观者,不是真正的同伴。
每多一个 Agent,就多一个完整的 CLI 进程,各自消耗自己的模型额度,所以四个 Agent 的房间会跑四个独立的 Agent 会话。多 Agent 房间留给需要第二视角的任务,不要拿来做常规的单 Agent 工作。
开始使用
用各分屏标题栏里的 Control Room 按钮,把两个 Agent 加进房间。这也会把右侧面板打开到 Control Room 标签页(Alt+Ctrl+B,Mac 上是 ⌥⌘B)。先让两个 Agent 指向两个不同的文件夹,这样在尝试更复杂的事情之前,能把一次 probe 和一次 execute 完整看一遍。Control Room 页面给出概览,Agent 和 Control Room 文档是参考手册。
Free 套餐的 2 个成员上限,只有在任务需要第三个参与者时才会成为约束。
多分屏 SSH、Command Recipes(Cmd+J)和多 Agent 的 Control Room (原 War Room):先免费用。
常见问题
Free 套餐每个 Control Room 允许 2 个成员。加第三个会被拦下,升级到 Pro 后才行,Pro 没有成员上限。两个套餐都不限制房间数量。
要你来提示。Control Room 给 Agent 四个 MCP 工具(list_peers、send、read_inbox 和 claim),外加一个由人担任的 Moderator 角色。在你告诉某个 Agent 去 probe 它的同伴并让对话继续之前,没有任何东西会自己发起辩论。
MXterm Pro 会为 Claude Code、OpenAI Codex、Gemini CLI 和 OMP 注册自己的 MCP 服务器,Grok 会读取 MXterm 写进 Claude Code 配置里的那一项。其他 Agent 也能加入房间,但它能不能读到 Control Room 工具,尚未验证。普通 shell 分屏同样可以加入,但它没有运行 MCP 客户端,所以输入框不允许向它发 execute。
可以。点 Discussion 标签页标题栏里的“报告 (.md)”。它会写出一个 Markdown 文件,含一张成员名单表(Agent、模型、工作目录)和带时间戳的对话部分,其中每条 execute,以及每条发给指定同伴的 probe,会标为 EXECUTE 或 PROBE。Free 和 Pro 都是完整功能。
它的成员资格会立刻撤销。点 Members 标签页里它卡片上的 X,或用它所在分屏的 Control Room 菜单,之后任何同伴再给它发消息,工具调用都会失败,并提示“not in the Control Room”。这不只是界面上的变化。
不用。Worktree 隔离是创建工作区页面里一个需手动开启的独立复选框(“为每个功能使用独立的 git worktree”)。在 git 仓库里勾选后,该标签页中的每个 Agent 分屏都会在新的 swarm/<adjective>-<noun> 分支上,得到自己的 <repo>/.worktrees/<slug> 工作副本。它和 Control Room 搭配得很好,但不是必需的。