消息传递到您的其他 Claude Code 会话
让 Claude 列出并消息传递到您在此机器上的其他 Claude Code 会话,并到达您在其他机器或网络上的会话。
跨会话消息传递需要 macOS 和 Linux 上的 Claude Code v2.1.224 或更高版本,包括 WSL 2 内的 Linux。在原生 Windows 上,它需要 Claude Code v2.1.234 或更高版本。当会话满足要求时,消息传递功能默认启用,无需任何配置。请参阅可用性了解提供商要求以及如何确认会话具有此功能。
跨会话消息传递让 Claude 能够将消息从您的一个 Claude Code 会话传递到另一个。当一个会话中的更改破坏了另一个会话正在构建的内容时,Claude 可以在您注意到之前警告该会话。当一个会话解决了另一个会话被阻止的问题时,Claude 可以跨会话发送答案。
消息是一个 Claude 写给另一个 Claude 的文本片段,永远不包括发送者的对话历史或文件。要移动整个对话或其上下文,请恢复会话。
Claude 为此使用两个工具:ListAgents 用于发现它可以到达的代理,SendMessage 用于按名称将消息传递给其中一个。使用相同的 SendMessage 工具,Claude 也可以在单个会话或团队内消息传递到子代理和代理团队队友。本页涵盖您独立会话之间的消息。
何时使用跨会话消息传递
当您的一个会话有另一个会话在任务中期需要的内容时,使用消息传递。Claude 可以在看到需要时自动发送消息,例如在进行影响另一个会话正在进行的工作的更改后,或者您可以要求它发送一条。常见情况包括:
- 移交发现:当一个会话发现破坏性更改或做出决定时,Claude 为处理受影响区域的会话总结它,而不是您在那里重新解释。
- 协调并行 worktrees:当会话在单独的 worktrees 中处理同一存储库时,Claude 可以告诉其他会话已合并的内容。
- 获取长期运行工作的状态:让迁移或测试运行报告回您正在观看的会话,或从那里自己询问。如果该会话在此机器上,Claude 还可以在它下次空闲或退出时要求一条通知。
- 跨机器发送消息:到达您在另一台机器或网络上的一个会话。
在您自己启动和指导的独立会话之间使用消息传递。Claude Code 为运行或到达多个会话的其他每种方式都有专门的功能,因此请使用为您正在做的事情构建的功能:
- 要在另一个终端继续一个对话,或与新会话共享其上下文,请恢复会话
- 对于 Claude 生成和监督的协调团队会话,使用代理团队
- 要从一个地方观看和指导许多会话,使用代理视图
- 要从您的手机或另一台设备自己指导会话,而不是让会话相互发送消息,使用远程控制
- 要将外部事件(如 CI 结果或聊天消息)推送到会话中,使用频道
向另一个会话发送消息
当你的一个会话学到另一个会话需要的东西时,比如一个发现、一个状态或一个决定,Claude 会将其传递过去,而不是让你在终端之间复制粘贴。Claude 使用 ListAgents 发现目标,并使用 SendMessage 发送,所以你永远不需要自己调用这两个工具。Claude 可以在没有被要求的情况下决定发送消息,你也可以提示它发送一条消息。
要自己提示一条消息,告诉 Claude 你想让另一个会话知道或做什么。这个例子是你输入的提示,而不是 Claude 发送的消息:
询问在我的另一个终端中运行的会话迁移是否完成
Claude 会自己编写实际的消息,所以你的提示可以将内容留给 Claude。这个提示要求一个摘要而不指定其措辞,Claude 发送的内容会有所不同:
向处理支付 API 的会话解释我们刚刚做了什么
要自己命名目标,在你的提示中提及会话:输入 @ 后跟会话名称的首字母,然后从类型提前中选择会话,就像你 @-提及子代理 一样。需要 Claude Code v2.1.232 或更高版本。Claude Code 会插入提及,例如 @api-worker,并告诉 Claude 它命名的是哪个会话,所以 Claude 可以向该会话发送消息而无需先列出你的会话。这个提示用提及来命名目标:
让 @api-worker 知道架构迁移已完成
类型提前列出你在这台机器上的其他活跃会话。两种情况需要超过名称的首字母:
- 这台机器之外的会话:云会话或远程控制会话仅在 Claude 列出或向这台机器之外的会话发送消息后才会出现在类型提前中,所以请先要求 Claude 列出它们。
- 名称中有空格或字母、数字、连字符和下划线之外的其他字符:在双引号中输入,例如
@"release notes"。当你从类型提前中选择会话时,Claude Code 会为你插入引号。
你也可以在没有选择器的情况下输入提及。当多个活跃会话响应提及的名称时,Claude 会在发送前询问你指的是哪一个。
关于 Claude 编写的消息到达时的样子,包括一个例子,请参见 消息看起来像什么。
消息传递
接收 Claude 在活跃轮次期间的工具调用之间读取消息,所以运行的工具永远不会被中断。当接收会话处于空闲状态时,Claude Code 会用消息启动一个新轮次。
来自另一个会话的消息以纯文本形式到达。如果它用 @ 提及文件或 MCP 资源,Claude 会看到书写的提及,Claude Code 不会附加任何内容,无论消息是启动新轮次还是在轮次期间到达。Claude 仍然可以用自己的工具在接收机器上打开提及的路径,受该会话的权限限制。在 v2.1.251 之前,启动新轮次的消息中的 @ 提及会在接收端附加文件或 MCP 资源。
Claude Code 在以下情况下拒绝消息:
- 消息 超过大小限制。Claude Code 在发送会话中拒绝它,在它离开之前。
- 对这台机器上的会话的快速突发已达到 该会话的收件箱接受的内容。Claude Code 拒绝向该会话发送进一步的消息。
- 这台机器上的回复目标未通过安全检查,例如符号链接目标或不是预期进程的端点。拒绝发送跨会话消息 列出了这些检查。
- Claude 将消息寻址到此会话自己的名称,如 查看 Claude 可以到达的会话 下所述。
接收会话根据自己的 入站控制 检查每条到达的消息,检查以三种结果之一结束:
- 已传递:Claude Code 将消息传递给接收 Claude。
- 已保留:Claude Code 将消息搁置未传递。保留的消息仅在你批准它或稍后的模式或设置更改允许它时才到达 Claude。
- 已拒绝:Claude Code 在不传递的情况下丢弃消息。
一旦传递,消息就像你输入的提示一样计入 使用情况,接收 Claude 可以以相同的方式回复发送者,除了 单向跨机器情况。
权限边界保持每个会话。Claude 被指示永远不要要求另一个会话执行在其自己的会话中被拒绝或阻止的操作,或其自己的权限设置会阻止的操作,而是将该工作路由回你。在接收端,接收会话自己的权限提示和规则仍然适用 于消息要求的任何内容。
当另一个会话变为空闲时获得通知
Claude 可以要求你在这台机器上的一个会话在该会话下一次变为空闲或退出时发回一个通知。空闲在这里意味着会话完成了一个轮次,没有任何排队。当你在另一个会话中等待长任务并想听到它完成时而不是检查时使用它。需要两个会话中都有 Claude Code v2.1.236 或更高版本。
请求通知
告诉 Claude 你在等待什么。这个提示要求来自迁移会话的通知:
告诉我迁移会话何时完成它正在处理的工作
Claude 使用 SendMessage 工具的 notify_when_idle 输入进行订阅,要么附加到它正在发送的消息,要么单独进行。单独进行时,Claude Code 订阅而不在被监视的会话中启动轮次或花费令牌,如果该会话已经空闲,则立即发送通知。附加到消息时,Claude Code 首先传递消息,然后稍后发送通知。
每个会话显示什么
被监视的会话显示一行,说另一个进程要求在会话下一次空闲时被告知。要求会话显示通知为一行,命名被监视的会话。该行可以包括该会话轮次完成的时间和该轮次的单行状态。如果要求会话处于空闲状态,Claude Code 会用通知启动一个新轮次。
限制
通知是一次性的:Claude Code 从被监视的会话发送一次,两个会话都不会相互轮询。如果在 12 小时内没有通知到达,Claude Code 会删除订阅并告诉 Claude,所以它不会继续等待。
每一方的 入站控制 适用于像消息一样的通知:
- 任一方的
refuse:什么都不会到达。被监视的会话在不记录或回答的情况下删除请求,所以订阅在 12 小时后无答复过期,具有refuse的要求会话永远不会订阅。 - 任一方的
hold:通知到达时内容较少。被监视的会话省略单行状态,要求会话在你的记录中显示通知而不将其传递给 Claude。
只有你主要对话中的 Claude 可以订阅,并且仅限于你在这台机器上的会话。当子代理或代理团队队友设置 notify_when_idle 时,Claude Code 不会进行订阅并告诉它这样做。当 Claude 要求来自任何其他代理的通知时,例如队友、子代理或这台机器之外的会话,Claude Code 拒绝整个调用,包括附加到它的任何消息,并向 Claude 报告拒绝,以便它可以在没有请求的情况下重新发送消息。
查看 Claude 可以到达的会话
Claude 自己找到消息的目标,所以你不需要在要求它发送之前运行任何东西。要自己查看 Claude 可以到达的会话,请运行 /list-agents 命令。第一行(如果存在)是此会话自己的名称,你的其他会话用来向它发送消息的名称。下面的行是 Claude 可以到达的会话:
- 子代理:在当前会话内运行的代理。
- 队友:此会话自己的 代理团队 队友。在 v2.1.239 之前,队友没有出现在列表中,尽管 Claude 已经可以按名称向他们发送消息。
- 你的其他本地会话:在同一台机器上运行的 Claude Code 会话,包括 后台会话。会话仅在绑定 收件箱套接字 时才会出现。
- 你的云会话:你的 Claude Code on the web 会话,在此会话连接到 Remote Control 时显示。Claude Code 在列表中将它们标记为
cloud。 - 你在其他机器上的 Remote Control 会话:在此会话连接到 Remote Control 时显示,并标记为
Remote Control。Claude Code 显示offline作为 Remote Control 连接已断开的会话的状态。
此会话不是行之一。如果 Claude 将消息寻址到此会话自己的名称,Claude Code 会拒绝它并告诉 Claude 目标是当前会话。在 v2.1.239 之前,列表没有显示此会话的名称,Claude Code 将发送到它的消息报告为它找不到的代理。
当此会话连接到 Remote Control 时,Claude Code 从 /list-agents 输出中隐瞒你的本地会话的一些详细信息,而不改变 Claude 本身在寻找会话以发送消息时看到的内容:
- 工作目录:它省略每个本地会话的工作目录。
- 会话名称:它省略任何它不能归因于一个人的会话名称,所以没有名称的行读作
(unnamed session)。 - 第一行:它省略此会话自己的名称行,除非你在此终端输入了该名称,使用
--name或使用/rename和名称,因为你启动或最后恢复了会话。
当输出列出任何内容时,它以一个说明详细信息被隐瞒的注释结束。在会话自己的键盘上运行 /rename 后跟未使用的名称会给该会话一个出现在输出中的名称。
Claude Code 首先读取你的云和 Remote Control 会话列表最新的,并在每个会话后停止有界数量的页面。如果你的账户有超过适合的那些会话,Claude Code 不会列出较旧的,Claude 无法按名称向它们发送消息。当这种情况发生时,Claude Code 在列表中说明,Claude 在发送消息时看到相同的注释。
Claude 按名称寻址这台机器之外的会话,就像本地会话一样。有关这些消息如何传播,请参见 向其他机器上的会话发送消息。
会话响应你使用 /rename 命令或 --name 标志设置的名称。当你不设置一个时,Claude Code 自己命名会话。对于交互式会话,这是 运行会话列表 中显示的名称。
当你重命名会话时,Claude Code 也会更新你的其他会话用来查找会话名称的共享记录。如果它无法更新该记录,它会在 /rename 输出中警告你其他会话可能仍然显示旧名称。使用 --debug 运行会话,Claude Code 会记录失败更新的原因。
当你重命名会话或启动或恢复交互式会话时,使用这台机器上另一个活跃会话已经使用的名称,Claude Code 将名称留给已经拥有它的会话,并 将你的重命名为变体。会话仍然可以共享名称,例如当其中一个运行早期版本的 Claude Code 或共享名称是 Claude Code 生成的时。除非此会话连接到 Remote Control,Claude Code 在 /list-agents 输出中显示每个本地会话的工作目录,所以当它们在不同目录中运行时,你可以区分同名会话。Claude 以两种方式之一寻址消息,取决于有多少活跃会话响应该名称:
- 一个会话响应该名称:Claude Code 仅在名称上传递消息。
- 多个会话共享该名称,或 Claude Code 无法检查你的会话运行的所有地方:Claude 为其列表的每一行添加一个短标识符,并在地址中使用标识符。
向其他机器上的会话发送消息
消息如何传播,以及它是否通过 Anthropic 服务器,取决于目标会话运行的位置:
| 其他会话运行的位置 | 消息如何传播 |
|---|---|
| 在这台机器上 | 在 macOS 和 Linux 上通过每个会话的套接字,或在本机 Windows 上通过每个会话的命名管道,永远不通过 Anthropic 服务器 |
| 在你的另一台机器上 | 通过 Anthropic 服务器,通过该机器的 Remote Control 连接到达 |
| 在 Claude Code on the web 上 | 通过 Anthropic 服务器,直接到云会话 |
与你另一台机器上的会话开始对话需要 Claude Code v2.1.225 或更高版本和一个 出现在列表中 的目标。在 v2.1.225 之前,Claude 只能回复从一个到达的消息。
你可以向显示为 offline 的会话发送消息,其 列表 中的一个,其 Remote Control 连接已断开。发送通过,但消息仅在该会话的机器重新连接后到达。Claude 在发送时被告知这一点。
同机器传递在启用该功能的任何地方都有效。每个会话在磁盘上的文件中注册自己。当 Claude 列出或向你的本地会话发送消息时,Claude Code 读取这些文件以找到会话,所以两个会话只有在能看到相同文件时才能相互到达。
容器有自己的文件系统,所以容器内的会话和主机上的会话无法相互到达。同一容器内的两个会话仍然可以相互发送消息,包括在 自托管运行器 上。WSL 2 内的会话和同一计算机上的本机 Windows 会话也无法相互到达,因为它们在不同的主目录下注册并在不同的套接字类型上侦听。
当此会话连接到 Remote Control 时,当你向你另一台机器上的会话发送消息时,Claude Code 在该会话的对话中显示消息,在此会话的 Remote Control 名称下。该机器上的 Claude 可以回复该名称。例如,当此会话作为 laptop-graceful-unicorn 连接到 Remote Control 并且你向你的桌面发送消息时,你在桌面会话中看到消息在 laptop-graceful-unicorn 下。
如果此会话在 Claude 发送到这台机器之外的会话时未连接到 Remote Control,消息仍然通过,但没有 回复地址,所以接收 Claude 无法回答它。Claude 在发送时被告知这一点。
要在任何消息超出此机器之前要求你的批准,请设置 isolatePeerMachines。
会话如何处理传入消息
当会话 A 向会话 B 发送消息时,Claude Code 告诉 B 的 Claude 消息来自另一个会话,而不是来自您,并限制消息可以做什么:
- 它不能批准任何内容:来自另一个会话的消息永远不计为您的同意,因此它不能代表您回答待处理的权限提示。
- 它不能改变配置:Claude Code 指示接收 Claude 永远不要改变权限设置、
CLAUDE.md或其他配置,因为另一个会话要求。 - 命令不运行:消息文本中的命令,如
/compact,作为纯文本到达。Claude Code 永远不执行它。 - 权限提示仍然触发:如果对消息进行操作需要接收会话没有的权限,您会看到与任何其他工作相同的提示。
消息的样子
当消息到达时,Claude Code 在对话中将其显示为暗淡的单行预览,预览行之后保留在对话中。预览包含发送者的名称和消息的第一行,当它很长时用 … 切割,如 › Message from @api-worker: Schema migration finished (ctrl+o to expand)。在 v2.1.247 之前,Claude Code 显示到达的消息的完整内容而不是预览。
这两个中的任何一个都显示您完整的文本:
预览仅缩短您看到的内容。无论您是否展开它,Claude 都读取完整消息。
Claude 接收消息时带有发送者的名称和回复地址,除了单向跨机器消息,它不携带回复地址。除了名称和回复地址,接收 Claude 获得消息的文本,永远不是发送者的对话历史或文件。消息传递涵盖文本中的 @ 提及。
子代理编写的消息在发送会话的名称下到达,消息文本中标识了子代理。对它的回复到达该会话的主要对话,而不是子代理。
这个例子是一个 Claude 写给另一个的消息,当您展开它时其完整文本读作:
架构迁移已完成
新列是 tenant_id,在 main 上变基现在是安全的。
控制入站消息
设置 crossSessionInbound 以选择会话对来自您的其他会话的到达消息做什么:
| 值 | 行为 |
|---|---|
accept |
Claude Code 将每条消息传递给 Claude |
hold |
Claude Code 为每条消息显示通知,不传递它。如果稍后应用 accept,根据优先级规则,Claude Code 释放保留的消息 |
refuse |
Claude Code 删除每条消息而不传递它 |
除了编辑设置文件,您可以在 /config 行来自您的其他会话的消息中选择值。Claude Code 将您选择的值写入您的用户设置。该行需要 Claude Code v2.1.232 或更高版本,当托管设置或 --settings 标志设置密钥时不出现,因为用户设置值不会应用。Claude Code 拒绝此密钥的 /config crossSessionInbound=value 快捷方式。
要查看哪个值适用,请遵循设置参考中的 crossSessionInbound 优先级规则。当没有值适用时,Claude Code 根据两个会话的权限模式按消息决定。它将绕过权限提示的会话分组为一个类,每个其他会话分组为另一个。Plan Mode 在具有可用绕过权限的会话中计为绕过,auto、acceptEdits 和 dontAsk 计为提示:
- 接收会话提示权限:Claude Code 传递每条消息。它仅当发送会话将自己标识为绕过权限提示时才为您的批准保留一条。
- 接收会话绕过权限提示:Claude Code 为您的批准保留每条消息。它仅当发送会话也标识为绕过时才传递一条。
当默认保留消息时,Claude Code 在接收会话中打开批准对话。对话显示发送者和预览:
- 批准将该条消息传递给 Claude。
- 拒绝,或关闭对话,删除它。
- 当对话在
dialogExpiry截止日期后保持无答案时,Claude Code 关闭它并删除消息。截止日期默认为五分钟。 - 当没有终端附加到后台会话时,Claude Code 将对话保留在截止日期之后。在您附加后,如果对话在完整截止日期期间保持无答案,Claude Code 关闭它并删除消息。
- 如果此会话的权限模式类在消息被保留时改变,Claude Code 重新应用入站规则,传递它们现在接受的消息,并显示通知。
- 如果设置更改在消息被保留时使
refuse适用,Claude Code 删除每条保留的消息并向它可以到达的每个发送者报告拒绝。
当发送者是同一机器上的交互式会话时,Claude Code 在接收者保留消息时在那里显示通知,以及当接收者稍后传递、拒绝或过期它时的后续通知。如果接收者拒绝它,Claude Code 在那里显示通知,接收者不接受跨会话消息,并告诉发送者的 Claude 不要等待或重新发送。
Claude Code 最多保留 100 条消息,与传递队列分开,超过那个删除最旧的。
非交互式会话
Claude Code 为 claude -p 会话绑定收件箱套接字,如交互式会话,因此长期运行的 -p 工作者可以接收消息并出现在列表中。当您在裸模式中启动会话时,Claude Code 不绑定套接字,因此该会话无法接收消息,不出现在代理列表中。
-p 会话无法显示批准对话。当入站默认在那里保留消息时,Claude Code 为相同的 dialogExpiry 截止日期保留它,对话使用的默认值为五分钟:
- 在截止日期之前:如果模式或设置更改允许消息,Claude Code 传递它。
- 在截止日期之后:Claude Code 删除消息并向它可以到达的发送者报告它已过期。
设置 dialogExpiry 为 "never" 以保留默认保留的消息直到会话结束。由显式 hold 设置保留的消息不过期;Claude Code 仅当稍后应用 accept 时才传递它。
当会话以仍然保留的消息结束时,Claude Code 向它可以到达的每个发送者报告它们已过期。在 v2.1.225 之前,-p 会话中没有截止日期适用:保留的消息保持保留,除非运行期间的权限模式更改传递它,以及以保留的消息结束的会话不向其发送者报告任何内容。
要让 -p 工作者无人值守地接收消息,使用 crossSessionInbound 设置为 accept 在其 --settings 值中启动它。您的用户设置中的 accept 也有效,但适用于您运行的每个会话。
会话的收件箱套接字
当您期望的会话不在代理列表中时,当您想要脚本或钩子发布到会话中时,或当沙箱命令无法到达套接字时,阅读本部分。
Claude Code 为启用跨会话消息传递的每个会话绑定收件箱套接字,其他机器上的会话在其中传递消息。套接字是 macOS 和 Linux 上的 Unix 域套接字,包括 WSL 2 内的 Linux,以及原生 Windows 上的命名管道。对于哪些会话类型绑定一个,请参阅非交互式会话。
您可以在两个地方找到套接字的路径:
/status在Peer address行中显示它。路径以uds:为前缀。- Claude Code 将其导出到钩子和 Bash 命令作为
CLAUDE_CODE_MESSAGING_SOCKET环境变量:- 在以消息传递启动的会话中,Claude Code 在任何钩子运行之前导出变量,包括
SessionStart。 - 每个会话导出自己的套接字,永远不是从父会话继承的。
- 在以消息传递启动的会话中,Claude Code 在任何钩子运行之前导出变量,包括
在 macOS 和 Linux 上,Claude Code 将套接字限制为您的操作系统用户。在原生 Windows 上,它改为要求每个连接首先使用只有您的操作系统用户可以读取的密钥进行身份验证。无论哪种方式,在共享机器上,另一个用户的会话无法传递给它。
在 macOS 和 Linux 上,Claude Code 也拒绝在它无法接受的目录中创建套接字,例如另一个用户拥有的目录,并改为使用私有的每用户目录 /tmp/cc-socks-<uid>。当它无法接受任何目录时,会话运行而没有收件箱:Claude Code 显示通知,/status 在其 Peer address 行中显示 unavailable 和原因,--debug 日志记录完整拒绝。
除了套接字的路径,Claude Code 导出每个会话令牌作为 CLAUDE_CODE_MESSAGING_TOKEN。发布到自己会话的套接字的脚本可以发送 {"type":"auth","token":"<token>"} 作为其连接的第一行,其中 <token> 是 CLAUDE_CODE_MESSAGING_TOKEN 的值。Claude Code 是否需要该行取决于平台:
- macOS 和 Linux,包括 WSL 2:该行是可选的。Claude Code 接受有或没有它的连接。
- 原生 Windows:该行是必需的。Claude Code 关闭任何第一行不是有效身份验证行的连接,不从该连接传递任何内容。
仅在您发布的消息准备好时打开连接。Claude Code 关闭在 30 秒内未发送完整行的连接,因此首先捕获慢速命令的输出,然后打开连接以发送它。
下面的自己的子消息规则说明 Claude Code 何时查询令牌以及它如何处理它无法验证的消息。
Claude Code 通过套接字上到达的消息运行与任何其他对等消息相同的入站控制,有一个例外和一个先决条件:
- 自己的子消息:当没有
crossSessionInbound值适用时,Claude Code 传递它验证来自会话自己的子进程的消息,如钩子或 Bash 命令发布回自己会话的套接字。- 在 Linux 上,包括 WSL 2 内,Claude Code 可以通过进程证据验证,即使对于已经退出的子进程。在 macOS 上,它只能在发布进程仍在运行时通过这种方式验证,在 Claude Code 作为进程 ID 1 运行的容器中,它根本没有进程证据。在原生 Windows 上它也没有。
- 在 macOS 上发布进程已退出后,在 Claude Code 作为进程 ID 1 运行的容器中,该进程证据丢失,Claude Code 改为验证发送会话导出的
CLAUDE_CODE_MESSAGING_TOKEN在打开其连接的身份验证行中的子进程。在原生 Windows 上,该令牌是 Claude Code 验证自己的子消息的唯一方式。 - 当 Claude Code 无法以任何方式验证时,它将消息视为任何其他声称没有权限类的消息,因此绕过权限提示的会话为您的批准保留它。
- 沙箱会话:使用沙箱的 Unix 套接字设置
sandbox.network.allowAllUnixSockets和sandbox.network.allowUnixSockets控制 Bash 命令是否可以从沙箱内到达套接字。
限制跨会话消息传递
除了每条消息的默认值,您可以通过两种方式缩小消息传递。在任何消息离开机器之前要求您的批准,或为会话或组织关闭消息传递。
要求批准跨机器消息
设置 isolatePeerMachines 为 true 以要求您的明确批准,在任何 SendMessage 到达超出此机器的会话之前:
{
"isolatePeerMachines": true
}
设置此项后,Claude Code 在 Claude 的消息到达超出此机器的会话之前要求您的批准,即使在 bypassPermissions 模式中,它跳过普通权限提示。任何设置范围中的 true 适用,因此检查的项目文件可以打开要求但不关闭。Claude Code 不提示同一机器上的会话之间的消息。
关闭跨会话消息传递
接收和发送是单独的控制,因此关闭您需要的任何方向,或两者。对到达的消息使用 crossSessionInbound,对 Claude 可以发送或列出的内容使用权限规则:
- 停止接收:设置
crossSessionInbound为refuse,Claude Code 删除入站对等消息而不传递它们。从项目或本地设置,refuse适用于每个其他来源,从您的用户设置它适用,除非托管设置或--settings标志设置值。 - 停止发送和列出:添加权限拒绝规则命名
SendMessage和ListAgents。两者都采用没有说明符的裸工具名称。
管理员可以在托管设置中为组织关闭两个方向,结合拒绝规则与 refuse:
{
"permissions": {
"deny": ["SendMessage", "ListAgents"]
},
"crossSessionInbound": "refuse"
}
设置此项后,Claude Code 仍然为每个会话绑定收件箱套接字,但删除到达它的每条消息而不向 Claude 传递任何内容。拒绝 SendMessage 也删除向子代理和代理团队队友的消息传递,因为相同的工具服务两者。拒绝的会话在其自己的 /status 或同一机器上其他会话的列表中显示无可见更改,因此要确认它,检查适用于该会话的设置文件而不是其状态。
可用性
跨会话消息传递需要 macOS、Linux 和 WSL 2 上的 Claude Code v2.1.224 或更高版本,以及原生 Windows 上的 v2.1.234 或更高版本。可用性以及 Claude 可以向其发送消息的会话也取决于您的操作系统、提供商和配置:
-
操作系统:在 macOS、Windows 和 Linux 上可用,包括 WSL 2 内的 Linux。
-
此机器上的会话:在每个提供商上可用,包括 Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 和 Microsoft Foundry,以及在功能标志获取关闭的会话中运行。在这些提供商上,以及标志获取关闭时,同机器消息传递需要 Claude Code v2.1.248 或更高版本。Claude Code 通过您机器上的每个会话套接字传递这些消息,永远不通过 Anthropic 服务器。
要停止会话接收它们,设置
crossSessionInbound为refuse。 -
超出此机器的会话:Claude 从连接到远程控制的会话找到您的网络上的 Claude Code 会话和您在其他机器上的会话,这需要 claude.ai 登录作为此会话的活跃身份验证和其他远程控制要求。Claude 无法在 Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上使用 API 密钥或找到这些会话。
要检查会话,输入 /list-agents,也可用作 /peers。结果将没有该功能的会话与更窄的东西阻止消息的会话分开,如缺少 SendMessage 工具或拒绝的发送:
/list-agents无法识别:会话没有跨会话消息传递。通过上面的要求工作,从claude --version开始获取版本要求。/list-agents有效但发送未到达:消息传递启用,更窄的东西适用:- 拒绝规则:权限拒绝规则删除
SendMessage和ListAgents工具。 - 入站控制:接收会话的入站控制可以保留或删除您发送给它的内容。
- 云会话缺失:云会话仅在此会话连接到远程控制时出现。
- 其他机器会话缺失:您另一台机器上的会话仅在它使用远程控制运行且此会话也连接时出现。
- 其他机器会话
offline:向列为offline的会话发送消息通过,但仅在该会话的机器重新连接后到达。 - 较旧的云或其他机器会话缺失:Claude Code 首先读取这些会话列表最新的并在有限数量的页面后停止,因此 Claude 无法按名称向超过它们的会话发送消息。
- 启动对话:向其他机器上的会话发送消息涵盖与超出此机器的会话启动对话。
- 拒绝规则:权限拒绝规则删除
在具有消息传递的会话中,/status 也显示 Peer address 行,带有会话自己的收件箱地址,或 unavailable 和原因,当 Claude Code 无法设置收件箱时。
限制
这里的限制是消息传递通道本身的属性,在该功能运行的任何地方适用。对于平台和提供商差距,请改为参阅可用性。
- 仅纯文本:Claude 仅在会话之间发送纯文本。结构化代理团队协议消息保留在团队内。
- 同机器消息大小有上限:Claude Code 拒绝到此机器上的会话的消息,一旦其序列化形式超过约一百万个字符。拒绝命名确切大小。什么都不到达接收会话。
- 对一个会话的快速突发在发送者处被拒绝:一旦对此机器上的会话的快速突发消息达到该会话的收件箱接受的内容,Claude Code 拒绝发送会话中的进一步发送。拒绝命名突发并告诉 Claude 将其余的批处理为一条消息或等待。在 v2.1.236 之前,Claude Code 报告这些发送为已发送,而接收会话删除它们。
- 消息循环被限制:在接收会话中,Claude Code 对每个发送者的重复消息进行速率限制,删除在短窗口内到达的相同重复,并最多为 Claude 读取排队 50 条接受的消息。因此两个会话之间的消息循环自己停止。当速率限制、重复检查或队列上限从此机器上的交互式会话删除消息时,Claude Code 告诉该会话哪个删除了它,并告诉其 Claude 不要立即重新发送。