[建议 / Feature] 会话间通信:同机跨会话 SendMessage / 会话发现(附 Claude Code 与 Codex 已落地形态调研)
Nobody has claimed this yet.
- Dominant language
- No language data
- Stars
- 22
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Description
背景
多会话并行是 ZCode 的典型用法(不同任务各开一个会话),但会话之间目前是孤岛:
- 跨会话唯一的机制是拉取式的
ReadSessionContext(按sess_*读持久化历史),没有推消息的能力; - 一个会话在等另一个会话的结果时,只能靠用户人肉复制粘贴;
- 并行会话对同一份代码改动时互相不知情,容易踩到对方。
Claude Code 已于近期落地了同机会话间通信(官方称 Agent Teams + cross-session messaging),形态已验证可行。建议 ZCode 引入同等能力,并复用既有设施以较小成本落地。
关联议题:#465(ZCODE_SESSION_ID 注入与 zcode:// 会话路由)、#326(深链跳转指定会话)、#344(会话自动接力)、#227(会话 Transcript 导出契约)、#447(后台子代理完成通知丢失)。
Claude Code 的具体形态(2026-09 调研,官方文档 + CHANGELOG)
第一层:Agent Teams(实验特性,env CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 默认关)
- lead 会话调 Agent 工具时带
name即派生 teammate;每个 teammate 是完整独立的会话(独立上下文窗口、加载项目上下文与 MCP/skills,不共享 lead 的聊天历史); - 邮箱投递:每个 agent 一个 JSON 收件箱(
~/.claude/teams/{team}/inboxes/{agent}.json),写入成功即视为送达,无轮询; - SendMessage 按名点对点直发:队友之间、用户对任意队友均可直发;
- 共享任务列表:pending / in_progress / completed 三态 + 依赖关系 + 文件锁防止领取竞争;队友自领未分配任务或由 lead 指派;
- 队友空闲时把最终答复随 idle 通知发回 lead;lead 负责拆任务、审批队友计划、转发权限请求、发送关闭请求(队友可拒绝);
- 展示形态:默认内嵌面板(下方 agent panel),可选 tmux / iTerm2 每队友一个分屏(
teammateMode/--teammate-mode); - hooks:
TeammateIdle、TaskCreated、TaskCompleted; - 已知限制(官方明示):
/resume、/rewind不恢复队友;每会话仅一个 team、不可嵌套;token 消耗显著高于单会话。
第二层:同机跨会话消息(任意会话对任意会话)
SendMessage/ListAgents两个工具:按 sessionId 向本机另一会话发消息、枚举本机在线会话;- 入站开关
crossSessionInbound:用户设置下校验失败则暂扣消息(不丢),托管设置下直接拒绝; - UI:跨会话来信默认折叠为一行
Message from @<sender>: <首行>,快捷键展开全文; - 与桌面端打通:Claude Desktop 转发的消息,对那个 session id 回
SendMessage仍能送达; - 子代理跨会话发消息时,回复投递到父会话对话流(职责归属清晰)。
Codex 的同类形态(2026-09 调研,openai/codex 源码 + release notes)
与 Claude Code 取向不同:root 中心的分层协作,agent 是"thread"而非完整进程会话:
- 角色定义文件:
~/.codex/agents/*.toml(name/description/model/sandbox_mode/[instructions]),角色可复用可分享(社区已有 130+ 现成角色库 awesome-codex-subagents); - 派生:
spawn_agent工具,参数含model、reasoning_effort、fork_turns——上下文继承是显式旋钮(fork_turns="none"即不带任何周围上下文给子 agent); - 两代协作协议(按
multi_agent_version配置切换):- V1:
send_input/wait_agent/resume_agent/close_agent - V2(现行 "Default collaboration mode"):
send_message/followup_task/interrupt_agent/list_agents(wait_agent可选,multi_agent_v2.wait_agent_enabled)
- V1:
- 结果精炼回传:主会话只接收子 agent 的精炼结论,中间输出(测试日志等)不回传,避免污染主上下文;
- 主动性:"proactive multi-agent delegation"——拆分派生的指令源自 model catalog,模型可自主决定委派;
- 沙箱按角色:每个角色的
sandbox_mode独立配置(可 read-only); - 每个 agent 是一个 thread(app-server 事件携带 senderThreadId / receiverThreadId / newThreadId / agentStatus,便于宿主 UI 渲染协作状态);
- 另有云端形态(Codex Web):Issue/PR 驱动、完全隔离沙箱、无 agent 间消息、靠 PR/commit 汇聚——与本地 thread 协作是两套并行设计。
两家对比启示:Claude Code 是对等互发(teammate 互聊 + 任意会话互发 + 共享任务列表),交互自由但 token 成本高;Codex 是root 中心 + 精炼回传(省 token、防上下文污染)+ 角色文件市场 + 上下文继承旋钮。建议 ZCode 方案同时吸收:邮箱互发与共享任务列表取 Claude Code,fork_turns 式上下文继承旋钮、角色定义文件与精炼回传取 Codex。
建议方案(映射到 ZCode 既有设施,可分三阶段)
阶段 1:最小闭环(跨会话消息)
- 会话发现:新增
ListSessions类工具,枚举本机在线会话(id、标题、运行状态)——数据源即现有会话管理(侧边栏同源); - 跨会话投递:
SendMessage(session_id, text),实现可直接采用 Claude Code 同款文件收件箱方案(~/.zcode/cli/下按会话建 inbox,写成功即送达),与 #465 建议注入的ZCODE_SESSION_ID天然衔接; - 入站开关:
config.json增加crossSessionInbound: off | ask | allow,默认 off 或首次弹卡询问; - UI:Desktop 已有多会话标签/侧边栏,来信渲染为折叠一行预览 + 可展开交互块(允许"引用回复")。
阶段 2:Agent Teams 形态
- Agent 工具支持
name派生常驻 teammate(完整会话,非现在的 task 级子代理);邮箱目录沿用阶段 1 机制(~/.zcode/cli/teams/{team}/inboxes/); - 共享任务列表 + 文件锁;
- Desktop 多会话 tab 是现成的展示面:teammate 即一个 tab,加"team 视图"聚合任务列表;
- 吸收 Codex 的三个好设计:角色定义文件(
~/.zcode/agents/*.md或 toml,可分享复用)、上下文继承旋钮(派生时显式控制带多少上下文,如fork_turns,防主会话历史无谓污染子代理)、精炼回传选项(子代理只回结论不回过程,控制 token 成本——Claude Code 官方也承认 teammate 模式 token 显著上升)。
阶段 3:与既有通道融合
- Bot 通道(微信/飞书/Telegram)收到的消息可回投给指定 session id(#399 多 Bot 会话映射问题的正向解法);
zcode://协议加会话路由后,外部工具可"给某会话发消息/恢复某会话"(与 #465、#326 合流);- 定时任务(cron automation)完成后把结果投递到指定会话而不是只能开新会话(#464 的 dispatch 问题也可顺带受益)。
安全与边界
- 入站默认关闭/白名单;跨会话消息对模型按不可信输入对待(提示注入面);
- 权限审批始终归各会话自身,不跨会话代批;
- 不自动合并两会话上下文(Claude Code 官方也明示 teammate 模式 token 显著上升,建议同样以消息传递而非共享上下文)。
收益
- 并行会话协作不需要人肉搬运:A 会话可问 B 会话"你那边改了哪些文件";
- 长任务的接力(#344)、多 Bot 归一(#399)、外部工具互操作(#465)都收敛到同一底层机制;
- 与竞品对齐且可利用后发优势:邮箱文件 + 入站开关 + 折叠预览这套形态已被验证,交互成本低。
调研来源(供参考):
- Claude Code 官方文档 Agent Teams:https://code.claude.com/docs/en/agent-teams
- Claude Code CHANGELOG(cross-session messaging / SendMessage / ListAgents / crossSessionInbound / 折叠预览等条目):https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the existing session management used by the sidebar and the current configuration in config.json, along with the related issues #465 and #326. Define the Phase 1 boundary around ListSessions, SendMessage, inbox delivery, and the crossSessionInbound setting; done should include delivery to a selected local session and the collapsed, expandable UI preview.
Written by the indexing model from the issue text.
Assessment
- Domain
- backend-api-design, desktop
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100