这个项目能做什么
## postbag 是什么
postbag 是一个小型桥接工具,允许在同一台机器上运行的两个 AI 编码代理会话相互写信。这些会话可以来自同一供应商或不同供应商 —— 例如一个 Claude Code 会话和一个 Codex 会话,或者两个 Claude Code 会话,或两个 Codex 会话。每封信通过接收方供应商自身的唤醒机制(“门”)交付,附加到单个共享账本中,并计入由人类设定的信件预算中。
README 建议的典型用途包括:让一个代理审查另一个代理的 diff,在两个代理之间拆分任务并通过信件商定接口,或者在无需手动粘贴上下文的情况下获取第二意见。README 将分工定义为“文本通过 postbag 传输,代码通过 git 传输”。
## 工作原理
- `join` 将会话的“门”在账本中以某个名称注册。对于 Claude Code,这是其每个会话的信使套接字(messaging socket)和令牌;对于 Codex,则是线程 ID。
- `send` 敲击注册的门(套接字或 `codex queue`),然后在文件锁下附加信件,因此同时发送的信件会获得不同的编号并共享同一个预算。
- `open` 从一个正常的终端(在任何会话之外)启动下一次交换。一次交换中的信件是有编号的,且预算由包中的所有人共享。如果没有 `--limit`,一次交换包含 12 封信。
- `read` 打印当前在包中的名称、开启的交换以及记录。
- 位于 `~/.postbag/ledger.jsonl` 的账本是唯一的状态。没有守护进程、轮询、钩子、服务器或配置文件。在两个会话和终端中设置相同的 `POSTBAG_LEDGER` 即可创建一个独立的包。
接收方在唤醒时会收到一封带编号的信件、剩余计数、正文以及一个用于回复的命令(一个将回复内容通过 stdin 传递的 `send` 命令)。一次交换的最后一封信会提示不要回复,随后的发送请求将被拒绝,并告知代理停止操作并询问人类。
## 要求
Python 3.10 或更高版本,仅限标准库;可通过 `pipx install postbag` 安装。Claude Code 会话需要通过 `CLAUDE_CODE_MESSAGING_SOCKET` 和 `CLAUDE_CODE_MESSAGING_TOKEN` 导出其每个会话的信使套接字。Codex 会话需要 Codex 0.149 引入的 `queue` 命令、导出的 `CODEX_SESSION_ID` 以及可运行的 `codex queue --help`;`POSTBAG_CODEX` 可以指向非标准二进制文件。两个 Claude 会话不需要 Codex 二进制文件,两个 Codex 会话不需要 Claude 套接字。
## 验证与平台支持
README 报告在 macOS 上进行了实时验证:版本 1.0.2 配合 Claude Code 2.1.263 和来自 ChatGPT 桌面应用的 Codex 0.153.4;版本 1.1.0 配合两个真实的 Claude Code 2.1.263 会话,包括双向交换和预算耗尽后的拒绝。Linux 通过了 CI,但实时交付在 Linux 上被描述为未验证,Windows 则不支持。
## 限制与安全注意事项
- 账本保存了每个 Claude 会话令牌以及信件。写入时保持文件权限为 `0600`,新状态目录为 `0700`;现有的自定义目录则保持不变。`read` 会隐藏门字段,但 `cat` 不会,因此原始文件应避免进入 git、日志和截图。
- 信件在接收方会话中变成一个用户轮次,因此两个会话都应被信任处理该任务。postbag 本身不会将任何内容发送到机器之外,但供应商会话会像任何提示词一样将信件转发给其模型服务。
- 名称是地址而非身份验证。`open` 拒绝在会话内部运行。这些检查读取供应商的会话变量 —— 这是一个防止角色混淆的护栏,而非防止另一个以相同用户运行的进程的保护措施。
- 在测试版本中,观察到具有绕过权限的 Claude 可以实现无人值守交付;其他模式可能会将信件保留以待批准。Codex 需要写入账本和连接到 Claude 套接字的权限。
- “已交付”意味着通过“门”提交,而非已被阅读。提交与记录之间的超时或崩溃会导致信件状态不明,且没有确认机制或重试机制。
## 范围与兼容性
支持的配置是两个会话。三个或更多会话被描述为实验性;`read` 会提示这一点,且每封信随后会列出注册的名称。由 1.0 版本编写的账本可以在无需重写的情况下读取,旧版供应商对等端被读取为 `@claude` 和 `@codex`。不支持将 1.0 会话与 1.1 会话混合使用,因为 1.0 的 `send` 仅接受纯 `claude` 或 `codex`,因此无法运行 1.1 信件中携带的回复命令;两个会话都应升级并重新执行 `join`。重启后,会话必须以之前持有的名称再次 `join`,且回复命令将发送给运行该命令时持有该名称的人。
该仓库采用 MIT 许可,包含一个形式为 `CONCEPT.md` 的概念文档、变更日志、贡献指南以及一份列出该领域其他工具的研究文档。
评论
0 评分人数达到10人后显示
登录后参与讨论。