Relay

Delegate the work. Own the outcome.

Multiple coding agents. Isolated workspaces. One place to review and ship.

How to verify a download ›

Or install from Terminal, with no macOS warning (what it does):

curl -fsSL https://aahannp.github.io/relay/install.sh | bash

First launch: macOS will warn you because the app isn't notarized yet. Here's the 10-second fix ›

Free and open source. For Macs with Apple silicon on macOS 13 or later. Requires Claude Code.

Live demo · nothing runs on your Mac
Agents Every agent and shell, side by side
★LeadLead agent · opusIdle
  1. create_task("Wishlist API")⎿ Created a1f3
  2. start_task(b27c)⎿ Started Wishlist page
  3. Three workers are on it.
CWishlist APIClaude Code / wishlist-apiIdle
  1. Write(src/api/wishlist.js)⎿ Wrote 28 lines
  2. Bash(node --test)⎿ pass 6 fail 0
  3. The wishlist API is in.
CWishlist pageClaude Code / wishlist-pageNeeds you
  1. Update(src/pages/product.html)⎿ 6 additions, 1 removal
  2. Write(src/pages/wishlist.html)⎿ Wrote 22 lines
  3. Allow Bash(npm install playwright)?
SScoutCode finder · haikuIdle
  1. Grep("formatPrice")⎿ Found 3 files
  2. formatPrice is in src/cart.js:9.

Relay's Agents view: a Lead, two workers and Scout in a grid of terminal panes, each worker in its own git branch. Type into any prompt and that agent answers.

Click into any pane and type. Or try one:

  • Claude Code
  • Codex
  • Gemini CLI
  • Cursor Agent
  • Any shell

Watch one goal become a team.

Try it: give the lead a goal, watch it split the work into tasks, then run the workers. Everything waits for your review.

1. Pick a goal for the lead

To do0

    In progress0

      Review0

        Done0

          Live1 running0 working0 in review

          1. Open a project. Point Relay at any git repo.
          2. Give the lead a goal. It plans tasks and starts a worker in a fresh worktree for each one.
          3. Review and merge. Read every diff, merge what's good, discard the rest.

          Built for the way agents really work.

          Every pane is a real terminal running the agent's own CLI, so Claude Code keeps your login and your subscription. Relay adds what's missing around it: a plan, a place for each worker, and the final say for you.

          16agents and shells in one grid, each showing if it's working, idle or needs you.
          4agent CLIs out of the box: Claude Code, Codex, Gemini and Cursor.
          1git worktree for every worker, so no two agents edit the same files.
          0API keys. It drops them before an agent starts, so you stay on your plan.

          Why not just open a few terminals?

          You can run Claude Code in a few tabs, and it's the same agent in Relay. The difference is what happens between the tabs.

          • Files

            Several terminalsEvery session edits the same folder, so one agent can overwrite another's work.

            RelayEach worker gets its own git worktree and branch, so they never clash.

          • Planning

            Several terminalsYou split the work and brief each tab. The sessions don't know about each other.

            RelayA lead agent splits a goal into tasks on a shared Board and starts a worker for each.

          • Talking

            Several terminalsYou copy and paste between tabs.

            RelayAgents message each other or read each other's chat. Messages are signed, show in the pane, and are rate-limited.

          • Status

            Several terminalsYou click through tabs to see who's done.

            RelayOne grid shows who's working, idle or needs you, and a notification tells you when one does.

          • Review

            Several terminalsYou find each branch and diff it yourself.

            RelayEvery worker's diff is in one Review tab. You merge or discard.

          • Cost

            Several terminalsYou run /cost in each session.

            RelayEach Claude pane shows its context and cost so far. Spend keeps the history.

          • Who did what

            Several terminalsYou keep track in your head.

            RelayThe Graph shows who started whom and who messaged whom.

          • The agent

            Several terminalsThe claude CLI with your login.

            RelayThe same claude CLI with your login and plan. Nothing new to learn.

          For one quick job on its own, a single terminal is fine. Relay pays off when several agents work on the same project.

          Plan. Build. Review. Merge.

          One window for the whole loop, from a goal to code on your branch.

          Lead agent and Board

          Give it a goal. Watch it split the work.

          The lead writes tasks on a shared board and starts a worker for each one. Agents comment on their cards and move them to Review when they're done.

          To do 2

          1. Claude Code⑂ search
          2. Codex⑂ order-email

          In progress 2

          1. Claude Code⑂ wishlist-ui
          2. Claude Code⑂ wish-tests

          Review 1

          1. Claude Code⑂ wish-api

          Done 1

          1. Gemini CLI⑂ rounding

          Drag a card to a column, or click it and then a column. Arrow keys move a focused card.

          Graph

          See who's doing what, live.

          Every agent is a node. Lines show who messaged whom and who started whom, and new messages travel along them. Drag one around, or click it to read its terminal.

          Spend

          Know what every day cost.

          Your Claude Code use at API list prices, with 35 days of history and a breakdown by model, hour, project and session.

          Today$13.58217 replies
          This week$45.29
          This month$119.73

          Today by token type

          Input$0.03
          Cache write$7.25
          Cache read$2.26
          Output$4.04

          Sample data · estimated at API list prices

          Artifacts

          The pages your agents make, kept.

          Reports, checklists and charts land in one place. Sort them into folders, open them in a browser, or publish one to GitHub Pages in a click.

          Heart button: keyboard checkPublish
          Review · wishlist page
          Heart button: keyboard check

          Every way to reach and press the new heart button, checked with only a keyboard and VoiceOver.

          Tab reaches the heart after Add to cartPass
          Space and Enter toggle itPass
          VoiceOver reads “Save to wishlist, toggle button”Pass
          aria-pressed updates after savingFixed
          Focus ring visible in dark modePass

          A team of specialists

          A learning coach, a frontend expert and a quick code finder, each on its own model. Add your own.

          Agents that talk

          They message each other by name, catch up on each other's chats, and copy themselves to split a job.

          Files and a real editor

          A file tree and VS Code's Monaco editor, for the project or any agent's worktree.

          Browser panes

          Keep your dev server next to the agents. Capture a screen, mark it up, hand it over.

          Voice and ⌘K

          Talk to your agents with on-device voice input, or reach anything from the command palette.

          The board, anywhere

          One claude mcp add line gives the same board tools to Claude Code anywhere on your Mac.

          Every diff. Your call.

          Each worktree is compared with where it branched, side by side. Try it: pick a worktree, then commit, merge or discard it.

          Agent worktrees

          src/api/routes.js
          1import { route } from "./router.js";1import { route } from "./router.js";
          2import { cart } from "../cart.js";2import { cart } from "../cart.js";
          3import * as wishlist from "./wishlist.js";
          34
          4route("GET", "/cart", req => cart.get(req.shopper) ?? []);5route("GET", "/cart", req => cart.get(req.shopper) ?? []);
          10});11});
          12
          13route("GET", "/wishlist", req => wishlist.list(req.shopper));
          14route("POST", "/wishlist/:id", req => wishlist.add(req.shopper, req.params.id));
          15route("DELETE", "/wishlist/:id", req => wishlist.remove(req.shopper, req.params.id));

          Merging asks first.

          And it stops cleanly on conflicts, leaving your branch as it was.

          Fix it yourself.

          Change a line in the built-in editor before you commit.

          Nothing slips past.

          Worktrees an agent made on its own show up too, with who made them.

          Sixteen themes. Every pane follows.

          Ten dark, six light, the same palettes as the app. Pick one and watch both panes repaint, just as open panes do in Relay.

          Dark
          Light

          Pick a theme to repaint the panes

          CWishlist APIClaude Code / wishlist-api-e76cIdle
          1. Read(src/api/routes.js)⎿ Read 24 lines
          2. Write(src/api/wishlist.js)⎿ Wrote 28 lines
          3. Bash(node --test)⎿ pass 6 fail 0
          4. The wishlist API is in: three routes, in memory for now.
          BBrownerFrontend expert / wishlist-pageWorking
          1. Update(src/pages/product.html)⎿ 6 additions, 1 removal
          2. Write(src/pages/wishlist.html)⎿ Wrote 22 lines
          3. Bash(npx playwright screenshot /wishlist)⎿ Saved wishlist.png
          4. ✻ Testing the heart button… (41s · esc)

          Private by design.

          Relay runs on your Mac. Beyond the agents you start, it only reaches GitHub: to check for a new release, and to publish a page when you ask.

          Local only

          The server listens on 127.0.0.1. Every request needs this install's secret and must come from Relay's own page.

          A key per agent

          Each agent gets its own token that only reaches its board tools. The master secret never goes in its config.

          You stay in charge

          Agents start in "Ask me" mode. A lead can't type into or stop others without your OK, and merging always asks.

          The Mac app uses the hardened runtime, with Electron's run-as-Node and inspector switches turned off. One honest caveat: an agent with shell access runs as you, so it can read what you can. Real isolation would need a separate macOS user.

          Where it stands.

          What's stable, what's still settling, and what's next. The full list is in the README.

          Stable
          • Claude Code and shell panes, up to 16 at once
          • Lead agent, Board and a git worktree per worker
          • Review: diffs, commit, merge, discard
          • Agents that message, read and copy each other
          • Graph, Spend, Files, Artifacts, themes, update check
          • Token meter on each Claude pane, workers on Sonnet (since 1.8.3)
          • Release builds on GitHub Actions, with a signed attestation (since 1.9.0)
          Experimental
          • Lead upkeep: auto-compact and hand-over (off by default)
          • Voice input (Mac app only, on-device)
          • Codex, Gemini CLI and Cursor Agent panes (no board tools yet; Gemini and Cursor untested)
          • Task Notes link (needs the Task Notes app)
          • Browser version, npm start
          Planned
          • Apple notarization (no date yet)
          • Hooks that tell the lead when something is done, like a PR merging
          • A Windows app

          Questions? Answers.

          What do I need to run it?

          A Mac with Apple silicon on macOS 13 (Ventura) or later, and Claude Code installed and signed in. Codex, Gemini CLI and Cursor Agent are optional: install any of them and they show up in the New menu. They run in their own panes with your own logins, but only Claude Code agents get the board's tools.

          ComponentNeeded?Tested with
          Mac with Apple siliconRequiredApple silicon. There's no Intel download.
          macOS 13 or laterRequired (Electron 44's minimum)macOS 26.4
          Claude Code claudeRequired2.1.302
          Codex CLI codexOptional0.146.0
          Gemini CLI geminiOptionalSupported, not tested
          Cursor Agent cursor-agentOptionalSupported, not tested
          gitFor worktrees and Review2.50.1
          How is this different from a few Claude Code terminals?

          It runs the same claude CLI, with your login. What it adds: a git worktree for each worker, a lead that plans on a shared Board, agents that can message each other, one grid for status, one Review tab for every diff, and cost per pane. For one quick job, a single terminal is fine. See the comparison.

          How do I know the download is safe?

          Check its SHA-256 against GitHub's, look at how it's signed, and compare the app's code with the source at that version. The verify guide has every command, and what we found when we ran them on 1.8.2.

          Does it need an API key, or cost anything extra?

          No. Relay is free and MIT-licensed, and agents run in real terminals with your own CLI logins, so Claude Code uses your normal subscription. The Spend view shows what the same work would cost at API prices, so you can see where it went.

          macOS says Relay can't be opened / not verified

          That's expected on first launch. Relay is open source and unsigned, because it isn't enrolled in Apple's developer program yet, so macOS can't verify who made it. Either of these fixes it:

          1. Click Done, open System Settings → Privacy & Security, scroll down and click Open Anyway next to Relay, then confirm.
          2. Or run this in Terminal:
            xattr -dr com.apple.quarantine "/Applications/Relay.app"
          Where does my data live?

          The board, settings and secret are in ~/Library/Application Support/Relay (or …/Agent Desk if you used Relay when it was called Agent Desk). Agent worktrees and screenshots go in .agent-desk/ inside each project, which is kept out of git.

          How does it update?

          The version pill next to the logo checks GitHub releases. When a newer one is out it says Update, and one click downloads the new .dmg to your Downloads folder.

          Can I build it myself, or run it on an Intel Mac?

          You can build it yourself: clone a release tag, then run npm ci and npm run app. npm start runs it in your browser instead, and npm run dist builds a .dmg. Build it yourself has the exact steps. There's no Intel download, and building on an Intel Mac hasn't been tested.

          Get Relay.

          Open a repo. Give the lead its first goal. Review what comes back.

          Free and open source under the MIT licence. For Macs with Apple silicon on macOS 13 or later. Requires Claude Code. Verify a download