Repository navigation
Peer Messaging
英文名:
peer-messaging· 领域:Agent 与编排 · 返回功能索引
你可能同时开着好几个 Claude 窗口:一个在改代码,一个在跑测试,一个在写文档。独立会话通信让它们互相知道彼此存在,并能发纯文本消息:
-
/peers列出同机其他会话; - Claude 用
SendMessage给另一个会话发消息; - 对方收到后显示
Peer · <发送者>,像收到一条新输入一样处理。
只在同一台机器、同一个配置目录内有效(Unix socket / Windows named pipe),不跨机器。
1. 起两个有名字的会话(名字方便辨认):
claude --name reviewer # 窗口 A
claude --name builder # 窗口 B2. 在 builder 里 /peers,能看到 reviewer:

3. 让 builder 发消息。 比如对 builder 说「测试通过后通知 reviewer 来看 api/server.ts」,它会调用 SendMessage。发送成功只代表已放进对方收件箱,不代表对方已处理:

4. reviewer 收到,显示发送者和内容,然后开始处理:

- 来信单独标记来源,不算用户指令,也不算权限批准——对方会话需要权限时照常问你。
- 只传纯文本:不会执行里面的斜杠命令,不带附件。
- Claude 的普通回复不会自动发给别人,只有显式
SendMessage才会。
| 值 | 效果 |
|---|---|
accept |
直接进入对方的处理队列 |
hold |
先暂存,等权限模式或设置变化后再判断 |
refuse |
拒绝 |
不设置时按「权限级别」自动判断:双方权限模式相同就接收,不同就暂存(例如一个普通会话发给一个 bypass 会话);对方被暂存或拒绝时,发送方会收到 [Cross-session delivery notice]。项目设置只能比用户设置更严格,仓库不能自己放宽。
{ "crossSessionInbound": "accept" }消息被暂存(hold)时,终端会话会弹出对话框 Held message from another session,显示发送者、暂存原因和消息原文:
| 选项 | 效果 |
|---|---|
Deny — drop it and tell the sender it was declined |
丢弃,发送方收到「已拒绝」的通知(默认选中,按 Esc 也是拒绝) |
Deliver this message to Claude |
交给 Claude 处理 |
桌面版和非交互会话不能弹框,暂存的消息会在一段时间后过期,不会送达。发送方在每次状态变化(暂存、放行、拒绝、过期)时都会收到 [Cross-session delivery notice],用 SendMessage 返回的 msg_id 对应是哪条消息。
想等另一个会话做完手上的事,不用反复问「好了没」:让 Claude 调用 SendMessage 时带 notify_when_idle: true。对方下次空闲或退出时,你这边会收到一条 [Cross-session idle notice],只通知一次。不带 message 就只订阅不发消息;带上就同时发消息并订阅。只能在主对话里用,子代理不行;对方长时间没有空闲信号时订阅会过期,同样会收到通知。
| 配置项 | 写法 | 说明 |
|---|---|---|
--name |
字符串 | 会话名,/peers 和 SendMessage.to 用 |
crossSessionInbound |
accept / hold / refuse
|
入站策略 |
--messaging-socket-path |
绝对 .sock 路径或 named pipe |
指定收件地址(高级集成用) |
--bare 和 SSH 本地界面默认不注册收件箱;不同 CLAUDE_CONFIG_DIR 的会话互相看不到。
画面来自实际运行:两个会话共用一个配置目录,模型回复由测试用假 API 生成。下方「详细说明」保留地址格式和判断规则细节。
以下内容自原 README 迁入,保持原文。
CLI 启动时(包括 -p 非交互模式)会注册同机 inbox;--bare 和 SSH local UI 默认不注册。会话发现使用同一个 ${CLAUDE_CONFIG_DIR:-~/.claude}/sessions registry,因此不同 CLAUDE_CONFIG_DIR 的 session 不会通过名称或 UUID 相互发现。可用 --name 设置易识别的 session 名称:
claude --name reviewer默认 endpoint 无需配置。高级集成可使用 --messaging-socket-path <endpoint> 覆盖:Unix 使用绝对 .sock 路径,Windows 使用 local named pipe;显式指定后也可让 --bare 启动 inbox,但 SSH local UI 仍不启动。显式 endpoint 绑定失败会终止启动;自动 endpoint 不可用时只记录 debug log,CLI 继续运行。
查看当前可发现的其他 session(仅在 messaging inbox 成功启动时显示,结果不包含当前进程):
/list-agents
/peers
模型侧的 ListAgents 和 SendMessage 默认 deferred,由 ToolSearch 按需加载。SendMessage.to 可使用列表中的 name、名称冲突时的 name [ref]、session UUID,或回复来信时复制其精确 from="uds:..." 地址。跨独立 session 只发送纯文本,不传递 Team 的 shutdown/plan approval 等结构化控制消息。普通 assistant 文本不会自动发送给 peer;发送成功只确认 transport write,不代表接收方已经接受或处理消息。Peer 输入保留独立 provenance,不作为用户指令或权限批准,也不会解析 slash commands 或 attachments。
入站策略可在用户级或项目级 settings 中配置:
{
"crossSessionInbound": "accept"
}可选值:
-
accept:消息进入接收方队列; -
hold:暂存,等待 permission class 或 settings 变化后重新判断; -
refuse:拒绝消息。
未配置时不是固定值:接收方尚无 permission context 时为 hold;已知发送方 permission class 时,同 class 为 accept、不同 class 为 hold;来信未声明 class 时,普通 prompting session 为 accept,bypass session 为 hold。project/local policy 只能比 user/managed policy 更严格,不能在仓库配置中放宽上层限制。
该协议仅用于同机 session:macOS/Linux 使用 Unix domain socket,Windows 使用 local named pipe;Remote Control、Direct Connect 和 SSH Remote 是独立 transport。
本页由 docs/features/peer-messaging.md 自动同步,请在仓库中修改。
- Agent SDK 与 stream-json 控制协议
- Agent Teams
- Agent 与后台任务
- 自动模式(Auto mode)
- 背景会话、daemon 与 agents 视图
- 自定义 UI / Branding 与 Status line
- 构建、发布与终端验收工具
- Channels
- Codex Apps
- 自动压缩窗口
- 调试日志
- /diff 视图
- Direct Connect
- Effort 档位
- 自主 Goal
- Hooks 事件、匹配与输出校验
- 快捷键与 Vim 模式
- MCP 配置与认证
- 记忆:auto memory 与 SQLite FTS5 检索
- 模型自动发现与 Gateway
- Mods 远程客户端(stream-json)
- Mods / Function Hooks
- Monitor 工具
- OpenAI / Codex provider
- 独立会话通信
- 权限规则、权限模式与 Safe mode
- 插件与 Marketplace
- Prompt context 与 Tool search
- 请求韧性:重试、回退模型与默认模型
- Bash 沙箱
- 定时任务:Cron、/loop 与 ScheduleWakeup
- 会话命令
- Skills
- SSH Remote
- 遥测与反馈
- 终端程序状态(OSC 7501)
- Terminal 工具
- 用量、成本与状态
- VS Code 插件
- Dynamic Workflow