Insights·2026-08-25

跨会话消息 — Claude Code 会话之间互相发送消息的方法

跨会话消息让你正在运行的一个 Claude Code 会话把一段文字直接送到另一个会话。该功能于 2026 年 8 月 7 日随 2.1.224 版本进入 macOS 与 Linux(含 WSL 2 中的 Linux),原生 Windows 从 2.1.234 起可用。无需安装、无需开启:满足条件的会话已经在运行它。这个功能的关键在于没有单独的地址体系,会话名称本身就是地址。输入 /peers,第一行是本会话自己的名称,下面列出它能触达的会话,各自带着名称与工作目录。发送时你不需要自己调用工具,只要说「把我们刚定下的表结构告诉调研会话」,Claude 就会写好句子并发出。接收方在两次工具调用之间读取,因此正在运行的工具不会被打断;若该会话空闲,则以这条消息开启新一轮。等待时说一句「完成了就告诉我」即可挂上一次性的空闲通知,不必轮询。跨越边界的只有文字,文件与对话记录都不会跟着走;要整体搬运上下文,那是恢复会话该做的事,而不是消息。

세션 이름이 곧 주소 — /peers로 상대를 찾는다. claude -n 조사로 이름을 붙이고 /rename으로 바꾸며 /peers로 닿을 수 있는 세션을 확인하는 터미널 명령 요약 도식

什么是跨会话消息

同时开着两个以上 Claude Code 终端窗口时,这一刻必然到来。你在左边窗口改了数据库表结构,右边窗口毫不知情,继续按旧结构写代码。于是你把左边的结论选中,粘贴到右边。人成了两个会话之间的快递员。

跨会话消息把这份快递工作交给会话自己。一个会话里的 Claude 把一段文字发给另一个会话里的 Claude。按官方文档的说法,消息是一个 Claude 写给另一个 Claude 的文本,而不是对话记录或文件。

常见的使用场景有三种。其一,一方发现破坏性变更或做出决定后,把这件事传给受影响的会话。其二,多个工作树并行处理同一仓库时,互相告知已合入的内容。其三,让迁移、测试这类长时间任务向你正在盯着的会话回报状态。

条件只有版本和操作系统两项。没有安装步骤,也没有配置文件里的开关。满足条件的会话已经启用。

环境所需版本备注
macOS · Linux2.1.224 及以上含 WSL 2 中的 Linux
原生 Windows2.1.234 及以上使用命名管道而非套接字
自己另一台机器上的会话2.1.225 及以上两端都需连接到 Remote Control
空闲通知(notify_when_idle)2.1.236 及以上两个会话都需达到该版本
查看当前版本
claude --version

# 低于 2.1.224 则更新
claude update

会话名称即地址 — /peers

人们最先想找的是「对方的地址怎么写」。答案是没有地址要写。会话名称就是地址,你不必手工处理 IP、端口或令牌。

在提示符里输入 /peers 即可查看,输入 /list-agents 效果相同。第一行是本会话自己的名称,也就是其他会话呼叫它时使用的名字。下面依次列出它能触达的对象:本会话内运行的子代理、本会话的团队成员、同一台机器上你的其他 Claude Code 会话,以及在连接 Remote Control 时你的云端会话和其他机器上的会话。

同机会话的名称旁会一并显示工作目录。当几个会话名字相近时,就靠这个目录分辨哪个属于哪个项目。

想自己定名称有两种方式:启动时加 claude -n research,或在已开启的对话中输入 /rename research。不设名称时,Claude Code 会依据工作目录自动生成一个。若同名的会话已经在运行,后来者会得到一个变体名称,并会告知你这件事。

有一点要留意:列表中不包含本会话自己。若 Claude 误把消息发往自己的名称,会被拒绝并被告知目标就是当前会话。

给会话命名
# 启动时
claude -n research

# 在已开启的对话中
/rename research

# 查看可触达的对象(等同 /list-agents)
/peers

发送方式 — 用说的,不用自己调用工具

发送用的工具是 SendMessage,查找对象用的是 ListAgents。但你不必记住这两个名字,因为人从不直接调用它们。只要说出想让对方知道什么,Claude 就会找到目标并写好句子发出去。

措辞也不必由你决定。只说「把我们刚做的事解释给做支付 API 的那个会话」就够了,Claude 会自己写摘要。因此同一条指令说两次,发出去的句子每次都略有不同。

想指定对象时,在提示符里输入 @ 再加上名称开头的几个字母,正在运行的会话会以自动补全出现,选中后插入 @api-worker 这样的提及。这样 Claude 不必先列出会话就能直接发送。该自动补全需要 2.1.232 及以上版本。

Claude 也会自行判断后发送。即使你没有交代,只要它认为刚做的改动会破坏其他会话正在进行的工作,就会先去告知那一方。

你输入的提示示例
问一下另一个终端里的会话,迁移跑完了没有

把我们刚做的事解释给做支付 API 的那个会话

告诉 @api-worker 表结构迁移已经完成

接收方发生了什么,以及空闲通知

如果接收会话正忙会怎样?正在运行的工具不会被打断。接收方的 Claude 在两次工具调用之间读取消息。若该会话空闲,Claude Code 就以这条消息开启新一轮。无论哪种情况,消息都会带着发送方的会话名称留在对话里。

实际上用得最多的不是消息本身,而是空闲通知。说一句「迁移会话跑完了告诉我」,Claude 就会通过 SendMessage 的 notify_when_idle 参数挂上订阅。等那个会话下次进入空闲或退出时,通知恰好来一次。这里的空闲指的是队列中没有任何内容的情况下结束了一轮。

订阅的好处在于便宜。只挂订阅而不附带消息时,被观察的会话既不会开启新一轮,也不消耗令牌;若对方已经空闲,通知会立即送达。重要的是双方都不会反复试探对方 —— 这个功能就是为取代轮询而生的。

有三条限制。只送一次。只能对同一台机器上的会话使用。而且只有主对话中的 Claude 才能订阅,子代理或团队成员尝试时会被告知未建立订阅。若 12 小时内没有任何信号,订阅便会失效,并会如实告知 Claude。

什么会跨过去,什么不会

对比两条传递路径的图示:同一台电脑内消息经由每个会话各自的 Unix 套接字直达,发往其他电脑或网页会话则会经过 Anthropic 服务器。

要安全地使用它,值得把边界看清楚一次。跨过去的只有纯文本。文件不会跟着走,累积的对话记录不会跟着走,权限也不会跟着走。接收会话只拿到那段文字,并不知道发送方读过什么、运行过什么。

所以想整体搬运上下文时,用的不是这个功能,而是恢复会话(claude --resume)。消息适用于「对方现在必须知道这个事实」的场合。

权限同样按会话各自独立。把在自己会话里被拒绝的操作交给旁边的会话去做,规则上是禁止的;而真正的强制落在接收方:来自其他会话的消息永远不能充当你的同意,接收方的 Claude 也被要求绝不因对方要求而修改 CLAUDE.md 或权限设置,正文里写上 /compact 之类的斜杠命令也只会作为纯文本抵达,不会执行。若消息要求的操作需要权限,仍会照常弹出与平时相同的确认框。

传输路径也因目的地而异。同一台机器内,通过每个会话各自绑定的 Unix 域套接字(原生 Windows 上是命名管道)直接送达,不经过服务器。发往你另一台机器或网页端的会话,则会经过 Anthropic 的服务器。若想完全阻止消息离开本机,可以开启 isolatePeerMachines,让每次外发都需要你批准。

项目是否跨越说明
消息正文会仅纯文本。结构化的团队协议消息只留在团队内部
文件、附件不会接收方须以自己的权限重新读取
对话记录不会要整体搬运请用 claude --resume
权限、批准不会消息既不能充当批准,也不能修改设置
斜杠命令不执行正文里的 /compact 等以纯文本抵达

默认并非「等待批准」— 以及收不到时的排查

一张 2×2 分类表,展示未设置 crossSessionInbound 时,接收会话与发送会话的权限模式组合分别导致直接传递、等待批准还是保留。

若「别的会话能对我的会话说话」让你不安,看清实际规则就能放心。crossSessionInbound 设置为接收方选定三种行为之一:accept 直接投递,hold 只显示提示而不投递,refuse 静默丢弃。除了改配置文件,也可以在 /config 的「来自你其他会话的消息」一行里选择。

常见的误解出在什么都不设置的情况。此时的默认并不是「一律等待批准」,而是比较两个会话的权限模式后逐条判断。若接收会话像平时那样会询问权限,消息就直接投递,只有当发送方声明自己跳过权限询问时才会转为等待批准。反之,若接收会话本身跳过权限询问,默认就是暂存,只有发送方同样跳过时才会投递。

批准框弹出后若你一直不回应,超过 dialogExpiry 期限时框会关闭并丢弃该消息,这个期限默认是五分钟。设为 never 则会一直等到会话结束。另外,因显式设置 hold 而暂存的消息不会过期,等到之后 accept 生效时会被投递。

最后是收不到时的排查顺序。若 /peers 本身无法识别,说明该会话没有这个功能,请先看 claude --version。若 /peers 可用但发出的消息没有抵达,原因就更具体了:SendMessage 或 ListAgents 上挂了拒绝规则;接收方的入站设置是暂存或拒绝;或者对方处在容器内这类不同的文件系统里。容器内的会话与宿主机上的会话彼此看不见,WSL 2 内的会话与同一台电脑上的原生 Windows 会话也是如此。

crossSessionInbound接收方行为
accept把抵达的消息原样投递给 Claude
hold只显示提示而不投递。之后 accept 生效时会释放
refuse不投递,直接丢弃
(未设置)比较两个会话的权限模式,逐条判断
收不到时的排查顺序
# 1) 该会话是否具备此功能
claude --version        # macOS/Linux 2.1.224+ / Windows 2.1.234+
/peers                  # 无法识别即表示没有该功能

# 2) 是否已绑定收件地址
/status                 # 查看 Peer address 一行

# 3) 接收方是否在阻拦(~/.claude/settings.json)
{ "crossSessionInbound": "accept" }