我同时运行 Claude Code 和 Codex,却总是丢失它们之间的线索——于是构建了一个位于 S3 存储桶中的无服务器协调层

Reddit r/AI_Agents 工具

摘要

tracecraft 是一个 CLI 工具,使用兼容 S3 的存储桶作为多个编码代理(如 Claude Code 和 Codex)的无状态协调层,支持原子任务认领、邮箱、共享内存和跨工具框架会话镜像。

同时运行多个编码代理——几个 Claude Code 实例,有时还有 Codex——协调总是临时凑合的。两个痛点让我抓狂:1. 它们抢同一份工作。两个代理都决定重构 api(.)py,结果一团糟。没有共享的“我来处理这个”机制。2. 它们无法通信,历史记录分散且与工具绑定。我不得不手动将一个终端输出粘贴到另一个终端,之后也没有谁做了什么事的统一记录。于是,我构建了 tracecraft——一个 CLI 工具,可将任何兼容 S3 的存储桶(AWS、R2、MinIO、B2、Wasabi 或 HuggingFace Buckets)变成协调层。无需服务器、无需数据库、无需守护进程;每次调用都是无状态的,所有状态都是你拥有的纯 JSON。协调原语: - 原子任务认领 —— 使用 S3 If-None-Match 条件写入,这样两个代理不会同时认领同一个步骤。先到先得,后者退出。无需锁服务。 - 邮箱 —— 代理之间发送直接消息和广播(每个都是 JSON 文件)。这部分取代了我的复制粘贴:一个代理执行 `tracecraft send developer "contract is in memory key design.contract"`,另一个读取其收件箱。 - 共享键值内存 + 带备注的交接给下一个代理。 我最满意的部分是工具框架适配器框架——它将会话转录镜像到同一个存储桶中,涵盖四个工具框架,通过一个接口适配它们: | 工具框架 | 会话存储 | 适配器 | |---|---|---| | Claude Code | ~/.claude/projects/.../<id>.jsonl | 字节偏移尾部 | | Codex | ~/.codex/sessions/.../rollout-*.jsonl | 字节偏移尾部 | | OpenClaw | <state>/agents/<id>/sessions/*.jsonl | 字节偏移尾部 | | Hermes | ~/.hermes/state.db (SQLite/WAL) | 只读,rowid 游标,合成 JSONL | 一个游标抽象让它们都适用:`read_new(cursor) -> (bytes, new_cursor)` —— 文件用字节偏移,Hermes 用 rowid,循环不关心具体哪种。添加第五个工具框架大约需要 50 行代码。 默认运行编辑(针对 AWS/Anthropic/OpenAI/HF/GitHub/Slack 的令牌形状)。 最终结果:一个存储桶同时保存协调事件(认领、消息、交接)和每个代理的推理轨迹,可以作为纯 JSON 浏览(包括在 HF Hub UI 中)。 直接说明这到底是什么:这些原语本身并不新颖——mcp_agent_mail/Beads 实现了邮箱+认领,Anthropic Agent Teams 实现了进程内认领。不同之处在于部署模式——无服务器、无关后端、状态存储在远程存储桶——因此不同机器/云上的代理默认就能协调。跨工具框架的会话镜像到同一位置是我从未在其他地方见过的。 已知不足:认领尚未设置 TTL;HF 存储桶采用尽力而为的认领(无条件写入);回放查看器尚未构建。 我实际会采纳的反馈: - 游标抽象对于工具框架层是正确选择吗,还是有更简洁的方案? - 接下来应该添加哪个工具框架? - “存储桶作为协调器”在大规模下会在哪些方面出现问题?
查看原文

相似文章

Boxes.dev

Product Hunt

Boxes.dev 允许你在自己的云环境中运行 Claude Code 和 Codex。