8 月 8 号,Claude 发布了一个新功能,现在两个 session 之间可以相互通信了。

如果你任务做到一半,想要重开一个窗口,一般这种情况下会重新介绍一下自己的身份,自己想要干啥,但现在不用了,你可以直接指派 Claude Code 来把这活干了就好。

我觉得这个功能很有用,希望 Codex、WorkBuddy、Trae、Qoder 等 Agent 赶紧推进下。

A 社还发布了一份官方文档,我看完了,给大家聊聊这篇文章都说了啥。


什么时候适合使用

官方列了四种比较典型的场景。

image-20260810163651801

第一种移交发现结果:当一个 session 发现了某种重大变更,Claude 会把结果总结给相关 session,不用你自己再解释一遍。

第二种是协调平行 Worktree:几个 session 在不同 Worktree 里处理同一个 Repo,其中一个完成并提交了修改,可以直接通知其他 session 。

第三种是获取长任务状态:比如一个 session 在跑迁移或测试,完成之后可以向你正在使用的 session 递交报告。你也可以让当前 session 主动问它做完没有。

第四种是跨机器回复。

这里要注意,另一台机器或者 Claude Code on the Web 上的 session,目前只能回复已经到达的 message,不能主动发起一段新的跨机器通信。

利用消息传递机制,可以在你自行启动并掌控的独立会话之间进行交互。下面是几种容易混淆的场景,Claude Code 都有单独的功能。

image-20260810170845771
  • 想在另一个终端恢复同一段对话,用 resume;
  • 想让 Claude 创建并监督一组团队协作成员,用 agent teams;
  • 想在一个地方查看和引导多个 session,用 agent view;
  • 想在手机或另一台设备上亲自操控 session,用 remote control;
  • 想把 CI 结果或聊天消息推送进 session,用 channels。

这几个功能看起来有点像,但他们做的事情不一样。


message 到底传了什么

我刚开始就理解错了,我以为传的是 context ,但其实不是。

session 之间传递的是一段 message,并不会把完整的 Conversation history、文件和 Context 一起传过去。

官方在开头就专门强调了。

image-20260810160847721

官方给出的 message 例子是:

Schema migration finished: the new column is tenant_id, and rebasing on main is safe now.

这句话就告诉了对方三件事:迁移已经跑完了,新字段叫 tenant_id,你那边现在可以放心 rebase。

另一个 session 收到的就是这条通知。message 里还会带上发送方的名字和一个回信地址,这样对方处理完之后,知道该把结果回复给谁。

至于迁移具体跑了哪些命令、改了哪些文件,为什么字段最后叫 tenant_id,另一个 session 一概不知道。

Claude Code 没有把整个 session 打包压缩。它只是让 Claude 根据当前对话,挑出对方需要知道的内容,重新写成一条 message 发过去。

如果你希望对方知道更多细节,就得明确让 Claude 一起写进 message 里。

我看到官方文档里提到 /resume 的时候,又有一个疑惑:跨 session 传递 message,和恢复 session 有关系吗?

没关系。

跨 session 发送的 message 相当于两个人之间传递小纸条,而 resume 相当于打开原来的笔记本。


一个负责找,一个负责传

Claude 在跨 session 发送 message 时,会使用两个工具:ListAgentsSendMessage

image-20260810171641728

ListAgents 用来发现它能找到谁,SendMessage 根据名称把 message 发给其中一个 session。

言简意赅之:一个负责找,一个负责传。

用户不需要自己调用这两个工具。直接对 Claude 说:

Ask the session running in my other terminal whether the migration finished

中文可以这样说:

问一下另一个终端里的 session,迁移是否完成了。

Claude 会找到目标,自己撰写实际发出去的 message。

官方还给了另一个 Prompt:

Explain what we just did to the session working on the payments API

中文可以写成:

把我们刚才做的事情,解释给正在处理 payments API 的 session。

这两段都是你发给当前 Claude 的 Prompt。另一个 session 最终收到什么,要看 Claude 根据当前 Context 写了什么。

而且Claude 也可以主动发送。

比如它刚做了一个会影响其他 Worktree 的修改,或者解决了另一个 session 正在等的问题,它可以在发现之后主动提醒对方,不用等你主动提醒。

message 到达接收方时,如果 Claude 正在执行任务,它会在两次工具调用之间读取,不会把正在运行的任务打断。

接收方处于空闲状态时,Claude Code 会直接使用这条 message 启动新的一轮。


Claude 会自己寻找目标,所以发送 message 之前,你不用先做任何操作。

如果想看看它当前能联系到谁,可以输入:

/list-agents

也可以使用它的别名:

/peers

列表里会出现三类对象。

image-20260810171909467
  • 当前 session 里面运行的 Subagent;
  • 同一台机器上的其他 Claude Code session,包括后台 session;
  • Remote Control 连接后能看到的其他机器或 Web session。

两个不同机器怎么通信

在同一台机器上,Claude Code 会为每个 session 绑定一个 inbox socket

session 会在本地文件中注册自己。ListAgents 通过这些文件找到其他 session,SendMessage 再把 message 发到对方的 socket。

本机 session 之间的 message 不会经过 Anthropic 服务器。

image-20260810172136518

如果 session 在你的另一台机器上,message 会经过 Anthropic 服务器,再通过那台机器的 remote control 连接到达指定的 session。

如果是 Claude Code 的 web 网页版,会直接通过 Anthropic 服务器进入云端 session。

需要注意的是:上面这两种跨机器情况都只能回复,不能由当前 session 主动发起一段新的通信。

Claude Code 不会直接扫描整台电脑上运行了哪些 session。

每个 session 启动之后,会在当前文件系统里登记名称和 socket 地址,同时创建一个接收 message 的 inbox socket。

可以把注册文件理解成通讯录,把 inbox socket 理解成收件箱。

容器和宿主机默认使用两套独立的文件系统。虽然它们运行在同一台电脑上,但双方看到的是两本不同的通讯录,找不到对方登记的地址,自然也没办法把 message 送进对方的收件箱。

如果两个 session 都运行在同一个容器里,它们能看到同一份注册文件,也能访问对方的 socket,就可以正常通信。

如果你希望 message 离开当前机器之前必须经过确认,可以通过设置:

{
  "isolatePeerMachines": true
}

打开之后,即使 session 使用的是 bypassPermissions,跨机器 message 发送前也会请求批准。本机 session 之间发送 message 不受这个设置影响。


另一个 session 不能替你授权

两个 Claude 能相互通信之后,权限就成为一个需要考虑的问题

Claude Code 会明确告诉接收方,这条 message 来自另一个 session,不是用户本人。

image-20260810172413195

所以另一个 session 不能替你批准权限,也不能要求接收方修改 CLAUDE.md、权限设置和其他配置。

message 里面如果写了 /compact,接收方只会把它当成普通文本,而不会直接执行。

接收端会使用 crosssessionInbound 来决定收到 message 之后怎么处理。

image-20260810172450547

收到消息后,有三种处理方式。

accept 是直接交给 Claude,hold 是先暂存起来,refuse 是直接丢掉。

如果没有显式设置,Claude Code 会比较发送方和接收方的权限模式。

如果两边属于同一类权限模式时会正常送达。

如果权限类别不一样时,message 会先 Hold 暂存起来,等待用户批准。


官方文档里还有一个没那么起眼的地方。

使用 claude -p 启动的非交互 session,也会像普通 session 一样绑定 inbox socket。

image-20260810182028552

使用 claude -p,也会出现在 /list-agents 中,也可以接收其他 session 发来的 message。


怎么确认自己能用

跨 session message 要求 Claude Code v2.1.224 或更高版本。

目前支持 macOS、Linux 和 WSL 2,不支持原生 Windows。

满足条件之后不用手工开启,直接输入 /list-agents 或者 /peers 检查一下就可以了。

如果命令无法识别,先执行:

claude --version

然后再看平台和 Provider 提供商。

如果命令能用,但 message 没有送到,需要检查接收端的 crosssessionInboundSendMessage 权限,以及对面是不是一个只能回复的远端 session。

如果想完全关闭接收,可以把 crosssessionInbound 设置成 refuse

如果想把发送和查看名单也一起关闭,可以在 permissions 中拒绝 SendMessageListAgents

{
  "permissions": {
    "deny": ["SendMessage", "ListAgents"]
  },
  "crosssessionInbound": "refuse"
}

这里需要注意,SendMessage 同时用于给 Subagent 和 Agent Teams 成员发送消息。如果把它关了之后,这两类通信也会一起关闭。

另外,当前跨 session message 只支持纯文本。

而且 Claude Code 会限制重复发送,短时间内收到完全相同的 message 会直接丢弃。已经接收、正在等待 Claude 阅读的 message 最多 50 条。

我还是那句话,希望 Codex、WorkBuddy、Trae、Qoder 这些 Agent 赶紧推进下这个功能。

资料:

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐