Claude Code 跨会话消息传递:工作原理、使用场景及安全注意事项

TL;DR

Claude Code 可以自动将一条纯文本消息从一个活动会话发送到另一个会话,从而允许会话之间相互警告破坏性变更、分享状态更新或回答被阻塞的问题,而无需手动复制粘贴。该功能遵循每个会话的入站控制、权限模式,并且可以被限制或完全禁用。


什么是跨会话消息传递

跨会话消息传递是 Claude Code 的一项内置功能,允许一个 Claude 实例向您拥有的另一个 Claude 会话发送文本消息。它不会传输对话历史、文件或结构化数据——仅传输消息文本。

  • 内部使用的工具ListAgents(发现可达的代理)和 SendMessage(传递消息)。用户永远不会直接调用这些工具。
  • 范围:适用于同一台机器上的独立会话、通过 Remote Control 跨机器通信,或向基于 Web 的 Claude Code 会话通信。它不能在远程会话上启动新对话;它只能回复传入的消息。

何时使用它

当一个会话在任务执行中获知了另一个会话需要的信息时,请使用消息功能。典型的模式包括:

使用场景 消息如何提供帮助
移交发现结果 一个会话发现了破坏性变更;Claude 对其进行总结并发送给依赖该变更的会话,避免了手动重新解释。
协调并行工作树 多个会话在同一个仓库的不同工作树上操作;Claude 相互通知已提交的变更。
从长期运行的工作中获取状态 迁移或测试运行可以向监控会话报告进度。
跨机器回复 笔记本电脑上的会话可以回答来自台式机会话的消息。

如果您需要恢复会话运行协调的代理团队监控多个会话远程控制会话推送外部事件,Claude Code 已经提供了专用功能(resume、agent teams、agent view、Remote Control、channels)。请仅在上述场景中使用跨会话消息传递。


消息是如何发送和传递的

  1. 发现 – Claude 调用 ListAgents 来查找可达的会话。
  2. 发送 – Claude 调用 SendMessage 并附带目标名称和消息文本。
  3. 传递 – 接收会话在当前轮次处理消息,或者在空闲时启动新轮次。
  4. 结果 – 入站控制决定消息是已送达 (Delivered)已挂起 (Held) 还是已拒绝 (Refused)

已送达的消息会传递给接收端的 Claude,并像普通提示词一样计入使用量。已挂起的消息会停留在队列中,直到您批准它们(或设置发生变化)。已拒绝的消息会被静默丢弃。


入站控制 (crossSessionInbound)

crossSessionInbound 设置决定了传入消息的默认处理方式:

行为
accept 所有消息均被送达。
hold 每条消息都会触发通知;您必须在送达前批准它。
refuse 消息被丢弃而不进行传递。

当没有明确的值适用时,Claude 会回退到权限模式类:

  • 绕过权限提示的会话(例如 autoacceptEdits)会导致传入消息被挂起,除非发送方也绕过了权限。
  • 提示权限的会话会立即传递消息。

如果挂起的消息被批准,它将被送达;如果过期(默认为 5 分钟)或您拒绝了它,它将被丢弃。一个会话最多可以挂起 100 条消息;较旧的消息会被丢弃。


跨机器消息传递限制

目的地 传输方式 可以发送的内容
同一台机器 直接 Unix-domain socket 新消息回复
您的另一台机器 (Remote Control) Anthropic 服务器 → Remote Control 仅限回复
Web 端 Claude Code Anthropic 服务器 仅限回复

发送到远程机器的消息是仅限回复的;会话无法与远程对等端发起新的交流。若要要求在任何跨机器消息离开主机前进行显式批准,请设置 isolatePeerMachines=true


安全与权限模型

  • 无隐含同意 – 传入的消息永远不代表用户的同意。它不能批准权限提示、更改配置文件或执行嵌入在文本中的命令。
  • 权限提示仍然会触发 – 如果执行消息操作需要接收会话所缺乏的权限,您会看到与其他操作相同的提示。
  • 工具拒绝 – 管理员可以通过在权限规则中拒绝 SendMessageListAgents 工具来完全阻止消息传递。
  • 潜在攻击面 – 正如 Hacker News 评论者所指出的,如果配置不当,暴露消息通道会增加远程代码执行的向量。适当的入站控制 (crossSessionInbound=holdrefuse) 和 isolatePeerMachines 可以减轻这种风险。

管理会话与名称

  • 使用 /list-agents(或 /peers)查看可达的会话及其名称。
  • 会话通过使用 /rename--name CLI 标志设置的名称进行寻址。如果名称冲突,Claude 会添加一个简短的标识符来消除歧义。
  • 只有绑定了收件箱 socket 的会话才会出现在列表中。在裸模式 (bare mode) 下的无头 claude -p 会话不会绑定 socket,因此无法接收消息。
  • 收件箱 socket 路径通过 CLAUDE_CODE_MESSAGING_SOCKET 暴露,并显示在 /statusPeer address 下。

来自社区的实用技巧

"我用 tmux、内存树和移交文件自己构建了这个功能。它最大限度地减少了重复的上下文并节省了 token 成本。" – eigenblake

"我编写了脚本,让 Claude 通过 Tailscale 在我的 Linux 机器集群中与其他模型通信。它运行良好,但有时需要手动干预以停止循环。" – Cyuonut

"我使用了该功能,并看到了像‘hold swarm, I prepare safe exfil’(暂停集群,我正在准备安全撤离)之类的消息。系统会节流重复消息,并将每个会话的待处理消息限制在 50 条,防止出现失控循环。" – dist-epoch

这些轶事证实,内置工具在提供与 Claude 权限系统更紧密集成的同时,其功能可与自定义编排(tmux、IRC、HTTP hooks)相媲美。


如何关闭消息传递

  • 停止接收 – 在用户、项目或管理设置中设置 crossSessionInbound=refuse
  • 停止发送/列出 – 为 SendMessageListAgents 添加权限拒绝规则。
  • 全组织禁用 – 管理设置可以结合这两种方法,确保没有任何会话可以发送或接收消息。

即使禁用,每个会话仍会绑定其收件箱 socket;消息只是被丢弃,不会产生可见的副作用。


可用性与要求

  • 版本 – 需要 Claude Code v2.1.224 或更高版本。
  • 操作系统 – 支持 macOS 和 Linux(包括 WSL 2)。不支持原生 Windows。
  • 供应商 – 不适用于 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud Agent Platform 或 Microsoft Foundry。
  • 功能标志 – 如果设置了任何环境变量 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICDISABLE_TELEMETRYDO_NOT_TRACKDISABLE_GROWTHBOOK 且其值为关闭底层标志的值,则该功能将被禁用。

使用 /list-agents(或 /peers)检查会话。如果命令无法识别,则该会话缺少所需的版本或功能标志。


局限性

  • 仅支持纯文本消息;结构化团队协议保留在代理团队内部。
  • 消息循环会被节流:短时间内相同的重复消息会被丢弃,且每个会话限制 50 条待处理消息。
  • 容器拥有隔离的文件系统;容器内的会话无法触达主机会话,除非它们共享同一个 socket 目录。

总结

Claude Code 的跨会话消息传递为独立的 Claude 会话提供了一种轻量级、具备权限意识的方式,用于协调工作、分享发现和报告状态,而无需手动复制粘贴。通过配置入站控制、隔离标志和权限规则,用户可以在便利性与安全性之间取得平衡。

Sources

相关

  • Dispatch
  • Dispatch
  • Dispatch
  • 项目
  • 项目