Claude Code 的多个终端终于能互相发消息了:跨会话消息上手指南

我经常同时开三四个终端跑 Claude Code:一个在前端改组件,一个在后端调 API,还有一个挂着漫长的测试或数据迁移。问题是,这些会话之间互不通信。前端改了一个接口名,后端那个 Claude 得等我切换过去、复制报错、重新解释上下文,才跟得上节奏。

8 月 7 日 Anthropic 推送了 Claude Code v2.1.224,给这个问题提供了一个官方解法:Cross-Session Messaging,也就是跨会话消息。只要在同一台 macOS 或 Linux 机器上,多个独立运行的 Claude Code 终端会话现在可以互相发现、发送纯文本消息。它不是子代理(subagent),也不是 Agent Team,而是「你自己启动的多个对等会话之间的一条短消息通道」。

这篇文章会带你升级到支持版本、查看有哪些会话在线、用三个真实工作流测一遍,并讲清楚权限边界和我认为不该用它的地方。

升级到 v2.1.224+

Claude Code 通常通过 npm 安装,升级命令和平时一样:

Bash
npm install -g @anthropic-ai/claude-code
claude --version

输出至少要是 2.1.224。如果低于这个版本,跨会话消息不会启用。

升级后不需要改配置文件,也不需要额外启动服务。只要系统满足 macOS 或 Linux,功能默认开启。Windows 原生版本目前不支持;通过 WSL 运行 Linux 版理论上可以,但我还没实测。

先看看你的会话都在哪

进入任意一个 Claude Code 会话,输入:

Bash
/list-agents

别名是 /peers。如果本机还有其他 Claude Code 进程在跑,它会列出可到达的会话名称。想知道自己这个会话的「收件地址」,用:

Bash
/status

这里有两个细节需要注意:

  1. 同机会话通过 Unix domain socket 通信,不经过 Anthropic 服务器。所以断网状态下,本机多个终端之间仍能传消息。
  2. 跨机器的消息只能回复、不能主动发起。也就是说,如果你在 MacBook 上收到来自远程服务器上 Claude Code 的消息,可以回一条;但不能从 MacBook 主动给那台服务器先发消息,除非你通过 Remote Control 手动介入。

三个能立刻用起来的场景

场景一:一个会话发现破坏性改动,通知另一个会话

假设你在终端 A 里重构了某个 API 的返回字段,终端 B 正在基于旧字段写前端逻辑。以前你得切到 B,手动复制错误信息。现在你可以直接对 A 说:

Markdown
通知正在处理前端支付页面的那个会话,/api/payment 的返回字段从 amount 改成了 amount_cents。

Claude 会调用 SendMessage,把这条信息发到终端 B。B 里的 Claude 会在两次工具调用之间读到消息,如果是在空闲状态,则会自动开启新一轮对话。你不需要离开当前终端。

场景二:并行 worktree 之间同步进度

我习惯用 Git worktree 同时处理同一个仓库的多个分支。每个 worktree 里开一个 Claude Code,问题是要记得哪个 worktree 改了什么。跨会话消息可以把这件事自动化一部分:

Markdown
告诉 payment-refactor worktree 里的会话,auth worktree 已经把 login 接口改成了 OAuth2,避免它重复实现。

它不会帮你合并代码,也不会自动解决冲突,但能减少「两个窗口重复造轮子」的情况。

场景三:长任务 worker 主动汇报状态

对于需要跑十几分钟甚至几小时的任务,我通常会开一个非交互式 worker:

Bash
claude -p "跑完整套集成测试,把结果发到另一个会话"

v2.1.224 里,claude -p worker 也会绑定同样的消息 socket。你可以在主会话里问它:

Bash
问问那个跑测试的 worker 现在进度到哪了。

worker 会把当前状态发回来。这比盯着日志刷屏舒服得多。

权限与安全:不是谁都能直接喊你

Anthropic 对这个功能做了比较谨慎的权限设计。消息有三种命运:

  • Delivered:直接交给 Claude;
  • Held:弹出 approval 对话框,等你确认,默认 5 分钟过期;
  • Refused:直接丢弃。

默认规则取决于两个会话的权限模式:

发送方接收方默认行为
prompting(会征求同意)promptingdelivered
promptingbypass(自动执行)held
bypasspromptingheld
bypassbypassheld

也就是说,只要有一方开了 bypass 模式,消息就不会自动通过。这个设计很克制,避免了高权限会话之间互相「遥控」。

如果你想手动控制,可以在 CLAUDE.md 或项目配置里加:

JSON
{
  "crossSessionInbound": "accept"
}

可选值有 acceptholdrefuse。更严格一点,可以开启 isolatePeerMachines: true,这样即使 bypass 模式下,消息离开本机前也需要你批准。注意这个开关只能收紧、不能放宽;项目级配置一旦设为 true,个人设置不能覆盖为 false。

限制与不建议使用的场景

跨会话消息能解决的只是「短通知」,不是完整的上下文共享。以下情况我不建议依赖它:

  1. 需要传文件、传代码块、传对话历史:它只传纯文本。要传递完整上下文,请用 resume 恢复同一会话,或者用共享文件/外部记忆工具。
  2. 要求 100% 送达:官方文档明确说 delivery 不保证。如果消息涉及关键状态同步,还是写文件或走 CI webhook 更可靠。
  3. 把 Claude Code 当分布式任务调度器:它没有队列、没有重试、没有持久化。一个会话最多 hold 100 条消息,inbox 上限 50 条,超出会按 FIFO 丢弃。
  4. 组织内未开启托管设置就直接全队启用:企业管理员可以在 managed settings 里全局禁用 SendMessageListAgents。如果你是团队管理员,最好先确认策略再推广。

另一个容易踩的坑:容器里的会话和宿主机上的会话互相不可见,因为它们不共享同一个文件系统 socket。如果你在 Docker 里跑 Claude Code,别指望它能跟宿主机会话通信。

我的判断

这个功能本身不算革命性,但它切中了一个真实的痛点:多个 Agent 同时跑的时候,人成了唯一的交换机。Claude Code 用 Unix socket 把本机通信做成本地、无需配置、尊重权限的短消息通道,是比「复制粘贴」和「共享 Markdown 文件轮询」更干净的方案。

不过它也提醒我们:Agent 之间能互相发消息之后,权限边界比功能本身更重要。prompting 与 bypass 模式的交叉默认 held、isolatePeerMachines 只能收紧,这些设计说明 Anthropic 在试着把安全做进通道里,而不是靠用户每次手动点同意。

对普通开发者来说,我建议先从「长任务 worker 汇报状态」和「并行 worktree 同步进度」两个场景开始试。等熟悉了权限规则,再考虑更复杂的用法。

参考与延伸阅读

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

推荐阅读

  • Claude Code 的多个终端终于能互相发消息了:跨会话消息上手指南

    Claude Code v2.1.224 在 macOS 与 Linux 上新增跨会话消息:多个独立终端里的 Agent 可以互相发现、发送文本。本文带你升级 CLI、用 /list-agents 查…

  • 蚂蚁百灵 Ling-3.0-flash 开源了:124B/5.1B MoE,单台 DGX Spark 能跑,开发者怎么接?

    如果你最近已经被国产大模型的“八周五连发”轰炸得有点麻木,那蚂蚁集团 8 月 7 日这条消息还是值得单独拎出来说:旗下百灵大模型团队把新一代原生混合推理模型 Ling-3.0-flash 的权重正式放…

  • 扎克伯格终于对 AI 编程下手了:Muse Code 测试版上手,一条命令让 Agent 替你改代码

    8 月 5 日,Meta 正式发布了自己的第一款终端 AI 编程智能体——Muse Code。不是模型 API,不是网页聊天,而是直接钻进你终端、能读你代码库、能自己规划任务并执行的那类工具。 在这之…

  • ChatGPT 免费版终于「解禁」了:无限对话 + GPT-5.6 Luna + 思考按钮,一文看懂怎么用

    如果你用 ChatGPT 的免费版,大概率遇到过这种情况:聊到一半,屏幕突然弹出一行灰字——”您已达到使用上限”。那种被硬生生打断思路的感觉,跟看电影看到高潮突然插播广告差不多…