你的 AI 智能体的
本地大使馆

你的 Claude Code 会话与 Codex 任务,在同一台 Mac 上互发消息 — 通过一个记录每次过境的中立 broker。

LOCAL · SINGLE-USER · UNOFFICIAL — 与 ANTHROPIC 或 OPENAI 均无关联

npm install -g agent-embassy
在 GitHub 查看 ↗
claude-main工作中途提出问题
codex-embassy回合边界启动;回复直入 Claude 邮箱
dlv_9f3kAqTrM8… · Claude→Codex · queued → dispatching → transport_written → delivered (1.2s)
conv_a71xB4Nc… 已返回发送方 — 凭令牌回复,且只有令牌持有者可以回复

为什么

它为这三个时刻而存在

如果你同时运行这两个智能体,你早已熟悉它们。

工作中途

你的智能体有一个问题

Claude 碰到一个 Codex 已经做过的决定。不必你在两个窗口之间来回搬运上下文,它自己去问 — 并在等待回复期间继续工作。

人不在桌前

回复无需你在场即可送达

朝向 Codex 的问题会诚实等待任务空闲后的回合边界;返回 Claude 的答案则会立即进入其邮箱,即使 Claude 正繁忙。无需你盯着终端。

无需插件

智能体内部无需安装任何东西

Claude 完全不需要 Embassy 命令 — 其原生 ListAgents 与 SendMessage 即可发现并联系已注册的对端。Codex 任务只需运行一条 CLI 命令完成注册。仅此而已。

工作原理

五步建立一条可用路由

每条命令与已发布的 CLI 逐字一致。

embassy serve

启动 broker。它不开启任何网络监听 — 一切留在这台机器上。

embassy register-codex --alias codex-embassy@this-mac

在 Codex 任务内部运行 — 身份从任务继承,绝不冒充。请让你的智能体来执行。

embassy select-claude --alias claude-main@this-mac

将 Claude 会话与任务配对。配对是双向同意:只有配对双方可以通话。

embassy send-to-claude --from codex-embassy@this-mac --to claude-main@this-mac <<'MSG'

信封过境 — 正文经 stdin 传入,绝不作为参数。你会收到一个 dlv_ 回执和一个 conv_ 令牌。

embassy dashboard --live

看着回执结算,措辞诚实 — 或用 embassy status 获取一次性快照。

协议真相

这本台账不会奉承你

下面每一条声明的含义与字面完全一致 — 这正是产品本身。

delivered ≠ 已读

朝向 Codex 时,delivered 表示 App Server 已接受轮次;朝向 Claude 时,它表示原生邮箱写入完成。两者都不暗示正文被阅读、理解或执行。

方向决定投递时机

朝向 Codex 的消息等待空闲,或使用精确 STEER 的下一个工具调用边界;朝向 Codex 的等待可能显示为 held — 是进展而非成功 — 且 Embassy 绝不中途打断生成。朝向 Claude 的消息无论 Claude 繁忙还是空闲,都会立即进入其邮箱。transport_written 就是该方向的 delivered 边界,而非已读证据。

重启不再丢邮件

排队中的邮件在 broker 重启后幸存,并在路由恢复时恰好重发一次。崩溃时在途的消息结算为 ambiguous — 绝不悄然丢失,也绝不重复发送。

兼容性以证据为准

同主版本的已认证提供方可写;全部实时 schema 探测通过的同主版本构建显示为 schema-attested(schema_attested),且只有探测覆盖写入时才可写。Claude 探测覆盖原生写入路径。Codex 的有界写入前读取可能包括 initializethread/loaded/list 与注册时的 thread/resume,但绝不包括 turn/start;因此未测试的 Codex 0.x 保持 monitor-only。探测失败、主版本不同或版本证据无法建立安全主版本时,只封锁该提供方,broker 与另一提供方继续运行;探测绝不能跨主版本或未知主版本提升权限。主版本不同的告警要求使用支持它的 Embassy 发布版。Claude peerProtocol 1 按记录强制执行。注册表未知字段可以存在,但每个必需的已知字段仍严格验证;有界拒绝与观察到的空证据保持醒目。

代理无网络监听

embassy serve 不绑定任何端口。可选组件是唯一的 loopback 监听者 — 精确 127.0.0.1,默认稳定端口 41961 或单次命令的 --port,可从多个浏览器直接访问,并在可信单用户机器上有意不设身份认证。

路由消息是一条新的输入路径

把任何到达的内容当作接收方的不可信输入 — 与对待任何工具结果相同的纪律。

delivered

该方向的提供方边界已跨越:App Server 接受了朝向 Codex 的轮次,或 Claude 原生邮箱接受了朝向 Claude 的写入。两者都不表示已读。

unconfirmed

Embassy 无法确认该方向的投递边界。不是失败;也不是成功。它保持 unconfirmed,而不是去猜。

ambiguous

关于结算的信号相互矛盾。与 failed 不同 — broker 报告它所知道的,而不是看起来整洁的。

expired

消息期限在结算前已过。终态,并在台账中连同导致它的期限一起可见。

v1.1.0路由现在可以在 App Server 端点重新生成后继续存活。更新日志 ↗

仪表盘

看着大使馆运转

可选的实时仪表盘:broker 健康状态、交换面板、每条投递的生命周期、同意拓扑与诚实的诊断 — 包括有界保留、只属于本机的消息正文。静态快照 — gateway-dashboard.html 及其 gateway-dashboard.zh-CN.html 孪生页 — 保持仅元数据,完全不需要服务器。

Embassy 实时仪表盘总览页:流已连接的状态条、broker 与两个连接器的健康芯片、兼容性芯片,以及在 paired inbound 同意模式下将 embassy-pm@this-mac 与 codex-embassy-main@this-mac 配对的交换面板。
真实的仪表盘状态 — 总览页,仅元数据。本次版本落地期间截取自实时伴随程序。

词汇表

每个词都言之有物

注册与配对

权限模型。Codex 任务自行注册;Claude 会话与之配对。双方同意,且只有配对双方可以通话 — 除非你刻意开放。

台账

每次投递的回执,状态措辞绝不夸大。当你问"我的消息在哪里"时,它是权威记录。

邮袋

转运。途中密封:broker 只搬运消息,不阅读消息。

领事馆

路线图:更多智能体运行时,在同样的同意规则下加入。同一座大使馆,更多面旗帜。

给智能体

教你的智能体这套协议

embassy-peer 技能教会智能体如何寻址对端、解读回执、并用会话令牌回复。安装后用 $embassy-peer 调用。

# Claude Code
cp -R "$(npm root -g)/agent-embassy/skills/embassy-peer" ~/.claude/skills/
# Codex
cp -R "$(npm root -g)/agent-embassy/skills/embassy-peer" ~/.codex/skills/

快速开始

五分钟内跑起来

先说要求:macOS · Node ≥ 20 · 当前 agent-embassy 版本 · 声明 peerProtocol 1 的 Claude Code · 托管 Codex App Server;它们都在同一台机器、同一 OS 用户下。提供方要可写,主版本必须受当前 Embassy 支持;其他主版本仍可见,但在支持它的 Embassy 发布版出现前保持 monitor-only。仅单用户、仅同机。Claude 侧不需要任何 Embassy 命令(原生 ListAgents/SendMessage);只有 conv_ 令牌持有者可以 reply

$ npm install -g agent-embassy
$ embassy serve
# 在你的 Codex 任务内部 — 请让智能体来运行:
$ embassy register-codex --alias codex-embassy@this-mac
# 操作者:从 `embassy status` 的 availablePeers 中选一个名字:
$ embassy select-claude --alias claude-main@this-mac
# 在 Codex 任务内 — 正文经 stdin 传入,绝不作为参数:
$ embassy send-to-claude --from codex-embassy@this-mac --to claude-main@this-mac --expects-reply <<'MSG'
Which auth middleware did you settle on?
MSG
# 观察回执结算(可选):
$ embassy dashboard --live