I run Claude Code + Codex in parallel and kept losing the thread between them - built a no-server coordination layer that lives in an S3 bucket

Reddit r/AI_Agents Tools

Summary

tracecraft is a CLI that uses an S3-compatible bucket as a stateless coordination layer for multiple coding agents like Claude Code and Codex, enabling atomic task claims, mailboxes, shared memory, and cross-harness session mirroring.

Running more than one coding agent at once — a couple of Claude Code instances, sometimes Codex — the coordination was always ad hoc. Two pains drove me nuts: 1. They grab the same work. Both agents decide to refactor api(.)py and you get a mess. No shared "I've got this" between separate processes/machines. 2. They can't talk, and the history is scattered + tool-locked. I was hand-pasting output from one terminal into another, and afterward had no single record of who did what. So I built tracecraft — a CLI that turns any S3-compatible bucket (AWS, R2, MinIO, B2, Wasabi, or HuggingFace Buckets) into a coordination layer. No server, no DB, no daemon; every call is stateless and all state is plain JSON you own. Coordination primitives: \- Atomic task claims — S3 If-None-Match conditional write, so two agents can't both claim the same step. First wins, second backs off. No lock service. \- A mailbox — agents send each other direct messages and broadcasts (each a JSON file). This is the bit that replaced my copy-pasting: one agent does \`tracecraft send developer "contract is in memory key design.contract"\`, the other reads its inbox. \- Shared key-value memory + handoffs with a note for the next agent. The part I'm most happy with is the harness adapter framework — it mirrors each agent's full session transcript into the same bucket, across four harnesses behind one interface: | harness | session storage | adapter | |---|---|---| | Claude Code | \~/.claude/projects/.../<id>.jsonl | byte-offset tail | | Codex | \~/.codex/sessions/.../rollout-\*.jsonl | byte-offset tail | | OpenClaw | <state>/agents/<id>/sessions/\*.jsonl | byte-offset tail | | Hermes | \~/.hermes/state.db (SQLite/WAL) | read-only, rowid cursor, synthesize JSONL | One cursor abstraction makes them all fit: \`read\_new(cursor) -> (bytes, new\_cursor)\` — byte offset for files, rowid for Hermes, the loop doesn't care which. Adding a 5th harness is \~50 lines. Redaction (token shapes for AWS/Anthropic/OpenAI/HF/GitHub/Slack) runs by default. End result: one bucket holds both the coordination events (claims, messages, handoffs) AND each agent's reasoning trace, browsable as plain JSON (including in the HF Hub UI). Straight about what this is: the primitives themselves aren't novel — mcp\_agent\_mail/Beads do mailbox+claims, Anthropic Agent Teams ships in-process claims. What's different is the deployment model — server-less, backend-agnostic, state in a remote bucket — so agents on different machines/clouds coordinate by default. The cross-harness session mirroring into the same place is the part I haven't seen elsewhere. Known gaps: no TTL on claims yet; HF buckets get best-effort claims (no conditional write); replay viewer not built yet. Feedback I'd actually use: \- is the cursor abstraction the right call for the harness layer, or is there a cleaner one? \- which harness should I add next? \- where does "bucket as coordinator" break down at scale?
Original Article

Similar Articles

How I got Claude Code and Codex to pursue goals over weeks

Reddit r/AI_Agents

The author built SmithersBot, an open-source agent harness that orchestrates Claude Code and Codex to pursue long-term goals over weeks by breaking plans into tasks, requiring approvals, and using checkpoints to avoid degradation.

Boxes.dev

Product Hunt

Boxes.dev allows you to run Claude Code and Codex in your own cloud environment.