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)。请仅在上述场景中使用跨会话消息传递。
消息是如何发送和传递的
- 发现 – Claude 调用
ListAgents来查找可达的会话。 - 发送 – Claude 调用
SendMessage并附带目标名称和消息文本。 - 传递 – 接收会话在当前轮次处理消息,或者在空闲时启动新轮次。
- 结果 – 入站控制决定消息是已送达 (Delivered)、已挂起 (Held) 还是已拒绝 (Refused)。
已送达的消息会传递给接收端的 Claude,并像普通提示词一样计入使用量。已挂起的消息会停留在队列中,直到您批准它们(或设置发生变化)。已拒绝的消息会被静默丢弃。
入站控制 (crossSessionInbound)
crossSessionInbound 设置决定了传入消息的默认处理方式:
| 值 | 行为 |
|---|---|
accept |
所有消息均被送达。 |
hold |
每条消息都会触发通知;您必须在送达前批准它。 |
refuse |
消息被丢弃而不进行传递。 |
当没有明确的值适用时,Claude 会回退到权限模式类:
- 绕过权限提示的会话(例如
auto、acceptEdits)会导致传入消息被挂起,除非发送方也绕过了权限。 - 提示权限的会话会立即传递消息。
如果挂起的消息被批准,它将被送达;如果过期(默认为 5 分钟)或您拒绝了它,它将被丢弃。一个会话最多可以挂起 100 条消息;较旧的消息会被丢弃。
跨机器消息传递限制
| 目的地 | 传输方式 | 可以发送的内容 |
|---|---|---|
| 同一台机器 | 直接 Unix-domain socket | 新消息及回复 |
| 您的另一台机器 (Remote Control) | Anthropic 服务器 → Remote Control | 仅限回复 |
| Web 端 Claude Code | Anthropic 服务器 | 仅限回复 |
发送到远程机器的消息是仅限回复的;会话无法与远程对等端发起新的交流。若要要求在任何跨机器消息离开主机前进行显式批准,请设置 isolatePeerMachines=true。
安全与权限模型
- 无隐含同意 – 传入的消息永远不代表用户的同意。它不能批准权限提示、更改配置文件或执行嵌入在文本中的命令。
- 权限提示仍然会触发 – 如果执行消息操作需要接收会话所缺乏的权限,您会看到与其他操作相同的提示。
- 工具拒绝 – 管理员可以通过在权限规则中拒绝
SendMessage和ListAgents工具来完全阻止消息传递。 - 潜在攻击面 – 正如 Hacker News 评论者所指出的,如果配置不当,暴露消息通道会增加远程代码执行的向量。适当的入站控制 (
crossSessionInbound=hold或refuse) 和isolatePeerMachines可以减轻这种风险。
管理会话与名称
- 使用
/list-agents(或/peers)查看可达的会话及其名称。 - 会话通过使用
/rename或--nameCLI 标志设置的名称进行寻址。如果名称冲突,Claude 会添加一个简短的标识符来消除歧义。 - 只有绑定了收件箱 socket 的会话才会出现在列表中。在裸模式 (bare mode) 下的无头
claude -p会话不会绑定 socket,因此无法接收消息。 - 收件箱 socket 路径通过
CLAUDE_CODE_MESSAGING_SOCKET暴露,并显示在/status的 Peer address 下。
来自社区的实用技巧
"我用 tmux、内存树和移交文件自己构建了这个功能。它最大限度地减少了重复的上下文并节省了 token 成本。" – eigenblake
"我编写了脚本,让 Claude 通过 Tailscale 在我的 Linux 机器集群中与其他模型通信。它运行良好,但有时需要手动干预以停止循环。" – Cyuonut
"我使用了该功能,并看到了像‘hold swarm, I prepare safe exfil’(暂停集群,我正在准备安全撤离)之类的消息。系统会节流重复消息,并将每个会话的待处理消息限制在 50 条,防止出现失控循环。" – dist-epoch
这些轶事证实,内置工具在提供与 Claude 权限系统更紧密集成的同时,其功能可与自定义编排(tmux、IRC、HTTP hooks)相媲美。
如何关闭消息传递
- 停止接收 – 在用户、项目或管理设置中设置
crossSessionInbound=refuse。 - 停止发送/列出 – 为
SendMessage和ListAgents添加权限拒绝规则。 - 全组织禁用 – 管理设置可以结合这两种方法,确保没有任何会话可以发送或接收消息。
即使禁用,每个会话仍会绑定其收件箱 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_TRAFFIC、DISABLE_TELEMETRY、DO_NOT_TRACK或DISABLE_GROWTHBOOK且其值为关闭底层标志的值,则该功能将被禁用。
使用 /list-agents(或 /peers)检查会话。如果命令无法识别,则该会话缺少所需的版本或功能标志。
局限性
- 仅支持纯文本消息;结构化团队协议保留在代理团队内部。
- 消息循环会被节流:短时间内相同的重复消息会被丢弃,且每个会话限制 50 条待处理消息。
- 容器拥有隔离的文件系统;容器内的会话无法触达主机会话,除非它们共享同一个 socket 目录。
总结
Claude Code 的跨会话消息传递为独立的 Claude 会话提供了一种轻量级、具备权限意识的方式,用于协调工作、分享发现和报告状态,而无需手动复制粘贴。通过配置入站控制、隔离标志和权限规则,用户可以在便利性与安全性之间取得平衡。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- 项目
- 项目