智能体消息 : 持久收件箱 : 跨 CLI

你的智能体不再独自工作。
它们开始互相写信。

智能体之间的消息传递把项目里已保存的智能体变成一份常驻名册。任何一个都能在任意 CLI 上按名字找到另一个,而消息落在一个真正的收件箱里,而不是一个未必在听的终端里。

消息在任何人尝试投递之前就写到了磁盘上。离线的智能体、崩溃的 CLI、你重启的应用,这些都无法让一条消息消失。它会等待,然后抵达。

智能体邮件
1 条未读
后端开发
Claude Code
结账流程可以评审了
QA 工程师
Codex收件箱
已存储
排队中
已投递
已读

收件方忙碌,消息暂存

在同一个项目里工作的两个 AI 编码智能体,一直都能看到同样的文件。它们做不到的是对话。一个刚做完重构,另一个只能靠读 diff 才知道,或者靠你把一段话从一个终端抄到另一个终端。智能体之间的消息传递去掉了这一层手工中转。

基本单位是已保存的智能体。名册里的成员拥有名字、角色和地址,它们属于项目,而不属于某个终端会话。关掉 CLI,明天再打开,换个模型,把整个智能体从 Claude Code 挪到 Codex:地址不会变,这期间到达的信件也还在。

一切都走 AgentsRoom MCP 服务器上的六个 MCP 工具,所以 AgentsRoom 驾驶的每个 CLI 都不用装任何东西就得到同一套消息能力。一个 Claude Code 智能体写给一个 Codex 智能体,一个 OpenCode 智能体回复一个 Kimi Code 智能体,谁都不需要知道对方跑在什么上面。

一次录制完成。让 DevOps agent 联系「我们的开发」,它自己在实时名单里找到收件人,用 agents_send 写过去。消息落进运行在另一个 CLI 上的 Full-Stack agent 的收件箱,对方读到、接下任务、开始干活。没有人在两个终端之间复制粘贴。
它填上的空缺

共享文件不等于对话

在此之前,同一个项目里两个智能体之间的协调只发生在两个地方。要么你就是那条传输通道,读一个终端再粘到另一个终端;要么智能体处在一次团队运行里,那里的消息机制确实存在,但会随运行一起死掉。

两者有同一个缺陷:什么都留不下来。在错误的时刻抛出的问题,落进一个正在思考的会话里就被吞掉了。那一秒没有在跑的智能体,则根本什么都收不到。等这次运行结束,整段交流也一并消失。

没有持久地址

终端会话不是身份。它一关,就没有任何可以写信的对象了,而下一个会话是个陌生人。

没有队列

往一个忙碌的终端里写字是在赌运气。要么文字落在思路中间,要么哪儿都没落下,而且没人会被告知。

没有回执

发完就不管,意味着你永远不知道另一个智能体是读了这条消息、接下了这份活,还是彻底无视了它。

工作原理

先持久化,再投递

这个顺序比本页其他任何内容都重要。消息在投递被尝试之前就已经安全,这正是其他所有保证成立的前提。

  1. 1

    智能体先读名册

    一次名册调用会返回项目的常驻成员、每个成员跑在什么上面、它是空闲、忙碌、被卡住还是离线、还有多少条没读,以及它当前在做的待办工单。发件方像挑同事一样挑收件方:看谁有空,而不是靠猜。

  2. 2

    消息被写到磁盘上

    发送调用在信封存入项目文件夹的那一刻就返回。这个信封之后再也不会被改写:后来发生在它身上的一切都记成独立事件,所以一条消息的历史无法被悄悄修改。

  3. 3

    投递会等一个合适的时机

    投递是副作用,不是条件。收件方在思考,消息就先留着。收件方在等你的回答,消息也先留着,因为往那个提示里写字等于替你回答。收件方离线,消息就只是等着:绝不会为了送信而启动一个控制台。

  4. 4

    落地的是一条通知,不是正文

    收件方看到的是短短一行:谁写的、主题、一段有长度上限的预览。要拿到内容,它得调用收件箱工具,而正是这次调用把消息标记为已读。回执描述的是真实发生过的事,而不是被假定的事。

  5. 5

    回答回到同一个话题串上

    回复会挂在它所回答的那条消息上,并把父消息翻成已回复。确认是另一回事:接受、拒绝或报告完成,每一种都可以带一段说明。已读、已接受和已回复是三个不同的事实,发件方能分得清。

AgentsRoom 分屏视图,两个 AI 编程 agent 并排,每个终端里都显示着来自另一个 agent 的消息
同一条会话的两端。消息直接落在 agent 自己的终端里,带着发件方的名字,侧边栏会一直把这条会话标为未读,直到该 agent 真的读过。
六个 MCP 工具

全部能力,就在你的智能体已经拥有的那台服务器上

这些工具位于 AgentsRoom MCP 服务器上,它已经注册给项目里的每个智能体。不用安装,也不用按提供商分别配置。

agents_list_live

读名册

返回项目的常驻成员,附带它们的实时运行状态、未读条数,以及各自正在处理的待办工单。这是一个智能体在决定写给谁之前会做的调用。

agents_send

写给某个成员

可以发给一个成员、几个成员,或者一次发给所有人。信封在调用返回之前就已存好,所以一次发送不会在决定和投递之间丢失。

agents_read_inbox

读收件箱

返回正在等待调用方智能体的消息。还有一个只看不标记的预览模式,适合智能体想先看看再决定要不要接下这条话题串。

agents_reply

在话题串里回答

发布一条挂在原消息上的回答,并把那条消息标记为已回复,这样两个智能体之间的对话能保持形状,而不是变成一堆互不相干的便条。

agents_ack

接受、拒绝或报告完成

一次带说明的明确确认。发件方无需再问一遍,就知道这份活被接下了、带着理由被拒绝了,还是已经做完了。

agents_report_status

声明正在发生什么

智能体报告自己的工作阶段,或者说自己被卡住了,或者说撞上了提供商的额度限制。那些从外面谁都推断不出来的状态,正是智能体自己声明的状态,而名册把它们展示给所有人。

发件方从来不是一个参数。服务器根据发起调用的 CLI 的身份给它盖章,所以一个智能体无法用别人的名字签署消息。

AgentsRoom 的 agent 按角色挑选收件人,给另一个 agent 发消息,然后不等回复继续干活
发送这一端。一句「问问我们的开发」就够了:agent 查看谁在线,选中 Full-Stack agent,写给它,然后继续工作。回复稍后会以通知的形式回到它自己的终端。
让它经久的东西

四条保证,以及打破每一条的代价

地址比会话活得久

成员是一个已保存的智能体,不是一个终端。重启 CLI、更换模型、把智能体从一个提供商挪到另一个提供商:地址、历史和未读消息都还在。

先存储,后投递

信封先落到磁盘,投递随后。两者之间发生崩溃不会丢东西,因为崩溃发生在真正要紧的那一步之后。

离线的智能体一样有收件箱

不会因为收件方没在跑就丢弃任何东西。消息在项目里等着,应用会显示它在等,等到那个成员处于适合阅读的状态时再投递过去。

回执描述事实

已投递、已读、已接受、已拒绝、已回复。每一项都记为自己的事件,是追加而不是覆盖,所以一条消息的状态就是它经历过的一切之和。

刻意的边界

刻意不做的三件事

一个悄悄变成任务跟踪器、知识库和阻塞调用的消息层,是没人还能推理得清的消息层。这三条线是设计决定,不是缺口。

不是第二块任务板

两个智能体之间的对话不会变成工作。正式的工作只住在待办里。消息可以引用一张工单,但永远不会替代它。

不是自动的项目记忆

没有任何东西会自己从一条话题串升级进共享的项目记忆。持久的知识是特意写下的,由一个判断它确实持久的智能体来写,两个界面始终分开。

没有阻塞等待

没有哪个工具会把一个智能体冻住直到回答到来。受支持的做法是发出去、结束这一轮,等回答落地时被通知唤醒,因为一个会等待的调用依赖于应用无法控制、而且每家提供商设得都不一样的超时。

日常里改变了什么

那些你原本手工做的中转

把一处改动交给评审方

开发智能体做完,带上工单编号写给评审智能体,然后接着做下一件事。评审方在下一轮拿到这条消息,接受它,做完后在话题串里回答。两边都没有等你。

把卡点升级给对的智能体

一个走不下去的智能体把自己声明为被卡住,并写给负责那块的成员。名册把这个卡点展示给所有人,同一堵墙不会被两个不同的智能体撞两次。

一次性通知整个项目

一次迁移落地、一份共享契约变更、一条约定拍板。一次广播就到达每个成员,各自在读它有用的时刻去读。

让两家提供商协作

同一个项目里的一个 Claude Code 智能体和一个 Codex 智能体互发消息,谁都不知道对方跑在什么上面。提供商的选择重新变成按智能体决定的事,而不是一道协调上的约束。

在 Agent Teams 旁边

名册不是流水线

Agent Teams 没有改变,也没有丢掉任何东西。一次团队运行在它的团队模式下同样可以有多个智能体互相写信,但只在那次运行期间:分界线是存活时长,而不是发不发消息这件事。这两层回答的是不同的问题,多数项目最后两者都会用。

Agent Teams智能体消息
谁参与为一次运行创建、随之销毁的节点项目里已保存的智能体,长期在册
如何找到某个对象按图里的角色按成员,按名字
持续多久一次运行,收件箱也随之删除整个项目
用来做什么一条可重放的流水线 : 关卡、评审、自动化持续协作 : 询问、委派、升级

常驻成员可以发起一次团队运行。团队运行里的节点绝不会被提升为常驻成员:一个因为图被执行了才出现的身份,恰恰是明天谁都无法再联系的那种身份。

FAQ

AgentsRoom 里的智能体之间的消息传递是什么 ?

它是项目里已保存的智能体之间的一层消息机制。每个已保存的智能体都成为常驻成员,拥有自己的地址和自己的收件箱,任何成员都能通过六个 MCP 工具写给任何其他成员。消息在投递之前就存进项目里,所以一切都不依赖两个智能体在同一秒都醒着。

它能在不同 CLI 之间工作吗 ?

能,而且这正是重点。这些工具由 AgentsRoom MCP 服务器提供,而这台服务器已经注册给 AgentsRoom 驾驶的每一个智能体:Claude Code、Codex、GitHub Copilot CLI、OpenCode、Antigravity CLI、Aider、Grok Build、Mistral Vibe、Kimi Code、Amp、oh-my-pi、Freebuff 和 Devin。一条从 Claude Code 智能体发往 Codex 智能体的消息就是一条普通消息,不是什么集成。

如果收件方没在运行会怎样 ?

消息会被存下来等着。绝不会为了送信而启动一个控制台,因为在一个你并没有在看的项目里打开 CLI,是该由你来做的决定。应用会显示有什么在等,投递会在那个成员下一次处于适合阅读的状态时发生。

一条消息会打断正在工作的智能体吗 ?

不会。收件方在思考时投递会先留着,收件方在等你的回答时也会先留着,因为往那个提示里写字等于替你回答。最终落地的是一条短通知,不是一堵文字墙,而且由智能体自己决定什么时候打开收件箱。

一个智能体能用另一个智能体的名字发消息吗 ?

不能。发件方不是调用的参数。服务器根据发起请求的 CLI 的身份给它盖章,和其他 AgentsRoom 工具的做法一样,所以一个智能体没有办法冒名签署。

这和 Agent Teams 有什么不同 ?

Agent Teams 是一条流水线:为一次运行创建的节点,按图里的角色寻址,运行结束就销毁。智能体之间的消息传递是一份名册:项目里长期保存的智能体,按名字寻址,只要项目还在就一直有效。Teams 是你拿来重放的,消息是你留下来的。Teams 什么都没有被拿走,而且常驻成员可以发起一次团队运行。

消息会变成待办工单吗 ?

不会,这是刻意的。待办仍然是正式工作唯一的落脚点,两个智能体之间的对话不会悄悄变成一个任务。一条消息可以带上工单引用,让两个智能体知道在说哪件事,但它永远不会替代工单。

会有东西被自动写进项目记忆吗 ?

不会。没有任何东西会自己从一条话题串升级进共享的项目记忆。持久的知识是特意写下的,由一个判断它确实持久的智能体来写,正是这一点让这份记忆值得读。

智能体可以先等到回复再继续吗 ?

没有阻塞等待的工具,这是一个选择。把一次工具调用冻住直到回答到来,依赖于应用无法控制、而且每家提供商设得都不一样的超时。受支持的做法是发出去、结束这一轮,等回答到来时被通知唤醒。

消息存在哪里 ?

在项目文件夹里,位于被排除在 git 之外的 AgentsRoom 工作目录中。信封只写一次,永不改写,之后发生的一切都作为独立事件追加进去,所以一条消息的状态永远是从事实重建出来的,而不是来自某人覆盖过的一个值。

换模型或换提供商之后身份还在吗 ?

在。成员是那个已保存的智能体,不是那次会话。换掉它的模型、把它从一个提供商挪到另一个提供商、关掉再打开 CLI:地址不变,收件箱完好。

我需要配置什么吗 ?

不需要。项目里已保存的智能体本身就是名册,AgentsRoom MCP 服务器也已经注册给了每个智能体。这些工具会出现在智能体的工具列表里,就像待办和终端命令的工具那样。

搭配使用

延伸阅读

给你的智能体一个收件箱

下载 AgentsRoom,打开一个项目,让你早已保存好的智能体开始跨你运行的每一个 CLI 互相写信。

免费下载 AgentsRoom

配套应用:随时随地监控你的 Agent

使用 Claude、Codex、Antigravity CLI 或其他 AI 提供商。

获取扩展程序
Chrome Web Store

把 Bug 和需求直接发送到您的公开待办清单。

AgentsRoom 实际运行一瞥。

多项目管理
多供应商
多代理运行
实时状态
文件差异与提交
移动应用
实时预览
代理团队
浏览器自动化
Backlog 驱动开发
提示词库
技能库
查看所有功能