Everyone on the link watches the same agent session as it runs. One person has the wheel, everyone else can suggest the next step, and the wheel can change hands mid-task.
Add a token-bucket rate limiter to the API
export function rateLimit({ rate, burst }: Limits) { const buckets = new Map<string, Bucket>(); return (req, res, next) => { const ok = take(buckets, req.ip, rate, burst); ok ? next() : res.status(429).end(); };
Screen-sharing an agent gets you an audience. Relay gets you a relay: exactly one person has the wheel, the server enforces it, and everyone else can suggest the next step or ask to drive.
The agent runs on your laptop, in a fresh clone of your current commit, on your own Claude credentials. What crosses the network is the session itself: the commands the agent runs and their output, the files it opens, and the edits it makes.
npx relayrun in any git repository. The agent works in a temporary clone of your current commit; the CLI connects out to the relay and prints a link. Nothing inbound, so no ports to open.
One counter, assigned in one function. Clients render in that order and never sort — which is why two browsers agree on what happened when.
Every tool call, result and plan update is broadcast as it happens. Join an hour in and you get the whole transcript first, then the live stream.
Every file the agent changes appears in the changes panel with its diff. Whoever has the wheel publishes the work as a branch in your repository, ready to check out, or as a pull request if relayrun was given a GitHub repo and token.
seq on every event, from a single function. Clients render in that order and never sort.--no-sandbox removes it, for sessions where you trust everyone with the link.The things worth knowing before you paste this into a terminal.
The files the agent reads go to the Anthropic API, exactly as in Claude Code. They also appear in the session transcript, so everyone with the link sees them and the relay keeps them for replay. Your repository as a whole is never uploaded.
It works in a temporary clone of your current commit, not your checkout. Its commands are sandboxed by default: writes stay in the session's folders, network reaches only package registries and GitHub, and your SSH keys, cloud credentials and secret environment variables are off-limits. Nothing reaches your repository until the driver publishes a branch.
Not while someone has the wheel. Watchers can suggest instructions and ask for the wheel; only the driver can send, stop or publish. The server checks every message, so a hand-crafted WebSocket frame gets the same answer as the button. When the wheel is free, anyone in the room can take it.
The agent goes offline with it. A run in progress stops, and the room stays open with the full transcript. When your laptop wakes, relayrun reconnects to the session on its own, as long as the session hasn't closed. Nothing runs while it sleeps: that's the trade for keeping the repository on your machine.
No. There's no Relay account and nothing to connect. You need Node 20.9 or later, a git repository, and an Anthropic API key or a Claude Code login. The sandbox runs on macOS, Linux and WSL2; Linux needs bubblewrap and socat.
Nothing from Relay. Runs bill your own Anthropic API key (pass --api-key) or run on your own Claude Code login. The key is only ever sent to Anthropic; Relay sees its last four characters, so the room can show which key is paying. If someone else will drive, use a key: Anthropic's terms don't allow routing other people's requests through a Free, Pro or Max plan.