Inspiration
Every vibe coder hates these words pop up on their LLM: "Out of Credits" wait until your weekly/daily/5 hour credits reset. In every team there is a power user of ai, who will rapidly hit their credit/token limits far before everyone else does.
What if there was a way to get around these limits? And an easy way for 1 ai agent to hand off to other ai agent, with the full context
What it does
One coding conversation can move from one owned Codex worker to another. The Relay conversation ID stays the same. Each worker gets a new Codex thread, the committed files, and a written handoff. Walk the demo in order. Alex’s worker writes validator.py and stops at a safe boundary. A simulated usage limit checkpoints Git and writes HANDOFF.md. Sam’s approved worker reads that context, adds tests, and finishes only after five real unittest checks pass. Three things stay separate: the human Relay account, the worker owner, and the ChatGPT login. Project membership does not grant a worker. Enrollment never accepts a key, token, or auth folder. Say what a judge will see if they open the app. The credential-free demo is simulated inference with real Git files and real tests. On a machine with three signed-in ChatGPT profiles, the same handoff runs on the official Codex App Server.
How we built it
Python standard library HTTP server, SQLite, and server-side Git. No frontend framework. The workspace is a local Monaco editor, an agent timeline, and a constrained console. One scheduler owns the task. States run queued → running → pausing → checkpointed → handoff_pending → running → completed. A workspace lease and a generation check keep a single writer. Three adapters sit behind that scheduler. Simulation is the hackathon demo. Native mode talks to codex app-server over stdio, one isolated CODEX_HOME per profile. An optional Docker organization-API adapter is preserved and was not live-verified. A handoff is a Git commit, a versioned context snapshot, and a fresh Codex thread. The full transcript stays append-only in SQLite. The summary the next worker reads is a separate, lossy artifact with event references. Invite accounts, project roles, and a pinned local-owner login are separate from demo identity switching. Demo login cannot start native execution. Challenges we ran into A useful handoff needs the next agent to continue the work, while each ChatGPT subscription stays with its owner. Hosted cross-user subscription delegation stays disabled. Native continuation is the local owner explicitly choosing the next profile. Git and SQLite cannot commit together. A failed checkpoint keeps the files and the error, and the repo is never reset to throw the partial work away. Stopping a live turn is not instant. Relay waits for a native interrupt or container shutdown before it checkpoints and assigns the next worker. A restart does not replay an uncertain tool call. The Codex sandbox, credential homes, and Relay’s own data directory have to stay apart. Tools can write their workspace and cannot read another profile’s home or another worker’s files. “It passed tests” was easy to overclaim. Mocked App Server tests, the simulated demo, the real native smoke, and the unverified Docker path all had to stay labeled differently.
Accomplishments that we're proud of
Real native A → B → C on 2026-10-24. Three distinct ChatGPT accounts, one Relay conversation, two checkpointed handoffs, and seven generated tests passing. A restarted the proof and the transcript, checkpoints, and leases were still there. A real browser A → B on the local-owner dashboard, with five generated tests, separate from the simulated demo. The repeatable demo path: scripts/demo.py and Run handoff demo, including pending work when the only eligible worker is offline and a safe stop when an active worker opts out. The permission model. Workers are hidden unless shared, credential references never appear in HTTP responses, and events cannot be updated or deleted through the app. The test suite around grants, redaction, concurrent handoffs, cancellation, migration, and restart. Mocked protocol tests are not described as model inference.
What we learned
The durable object is the Relay conversation plus the Git checkpoint, not the provider thread. Continuing on another account means a new thread and a committed tree. Capacity, ownership, and identity are different checks. A usage limit on one worker does not reset or transfer anyone else’s quota, and an admin role does not spend another person’s subscription. Fail closed. Unknown quota stays unknown. An unsupported execution mode errors. If container cleanup cannot be confirmed, the writer lease stays held. A handoff document is only as good as the pending steps and test results inside it. Worker C’s value was reading B’s unfinished work, fixing a bad Unicode fixture, and rerunning the suite. 33What's next for Relay Verify the two paths that are still open: physical multi-computer access, and a live organization-API run through the Docker adapter. Publish the checkpoint as a reviewable pull request. Diffs and file history are already the review surface. Add real SSO, backups, and filesystem quotas before any deployment beyond one trusted organization. Keep automatic account rotation out until a provider-supported way exists for one person to continue work on another person’s subscription. The next step is a clearer owner prompt when the active profile reports a limit, then an explicit switch.
Log in or sign up for Devpost to join the conversation.