• 正文
  • 相关推荐
申请入驻 产业图谱

Anthropic官方:session之间现在可以相互通信了

22小时前
134
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

各位小伙伴们大家好,我是 cxuan。

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

先给大家看一下官方发布的演示效果。

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

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

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

什么时候适合用

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

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

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

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

第四种是跨机器回复。

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

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

• 想在另一个终端恢复同一段对话,用 resume;

• 想让 Claude 创建并监督一组团队协作成员,用 agent teams;

• 想在一个地方查看和引导多个 session,用 agent view;

• 想在手机或另一台设备上亲自操控 session,用 remote control;

• 想把 CI 结果或聊天消息推送进 session,用 channels。

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

message 到底传了什么

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

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

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

官方给出的 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 时,会使用两个工具:ListAgents 和 SendMessage

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

列表里会出现三类对象。

• 当前 session 里面运行的 Subagent;

• 同一台机器上的其他 Claude Code session,包括后台 session;

• Remote Control 连接后能看到的其他机器或 Web session。

两个不同机器怎么通信

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

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

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

如果 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,不是用户本人。

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

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

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

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

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

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

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

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


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

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

使用 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 中拒绝 SendMessage 和 ListAgents

{
  "permissions": {
    "deny": ["SendMessage", "ListAgents"]
  },
  "crosssessionInbound": "refuse"
}
这里需要注意,SendMessage 同时用于给 Subagent 和 Agent Teams 成员发送消息。如果把它关了之后,这两类通信也会一起关闭。

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

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

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

如果这篇文章你觉得还不错,谢谢你的三连,也希望可以转发给同样关注 AI / 科技 / 开发效率的朋友。 我是 cxuan,我们下期再见。

资料:

• Claude Code:《message your other Claude Code sessions》。

• Claude Code:《Resume a session》。

相关推荐