ace

A tool for building software with AI agents. It runs on your own machine, and your team can work in it with you.

An experiment from GitHub Next
Open source, MIT licensed
expect rough edges
over Tailscale luke-studio mara-mbp desk-mini
YOU
MODEL PROVIDERAnthropic or OpenAI, with your key
DIRECTORYyour Cloudflare account · lists channels, no content
YOUR MACHINE · nate-mbp
CHANNELS
+ new channel
sidebar-spacing
fix-login
nightly-evals
ARCHIVED
sidebar-spacing
#sidebar-spacinglane sidebar-spacing
N
nate
Tighten the sidebar spacing, and check dark mode.
✳
agent
read src/sidebar.tsx
edit sidebar.tsx, tokens.css, theme.css
run bun test
✓ 48 passed · +42 −17
L
luke luke-studio
Looks right. Can you open a PR?
✳
agent
gh pr create
#212 · checks passed
merged into main
+ New taskArchive channel
Message
~/code/my-app
+42 −17 · 3 files
LUKE’S SCREEN · luke-studio
#sidebar-spacingon nate-mbp
N
nate
Tighten the sidebar spacing, and check dark mode.
✳
agent
edit sidebar.tsx, tokens.css, theme.css
✓ 48 passed · +42 −17
L
luke
Looks right. Can you open a PR?
Message
Pull request #212

    make the sidebar tighter agent · sidebar.tsx
    1
    Build with agentsSay what you want in a chat. Agents read the code, edit it, run your tests and open a pull request.
    ~/code/my-app your laptop, or a desk mini
    2
    On your machineYour repo, your shell, your model key. There’s no Ace service to sign up for.
    you luke mara
    3
    With your teamTeammates on your Tailscale network open the same channel from their own machines.

    A channel, with everyone in it.

    Ace looks like a chat app because work starts as a conversation. Underneath, each channel has a real checkout, a shell, a diff and a pull request, and agents work in them alongside you.

    One channel, open on a teammate’s laptop while it runs on the desk mini.
    1. 1
      CHANNELSYours and your teammates’, across every host, in one sidebar.
    2. 2
      PEOPLEAnyone on your tailnet can open a channel, read along and post.
    3. 3
      AGENTSParticipants too. They read, run commands, edit and test.
    4. 4
      TABSChat, Plan, Diff and Terminal: views on the same work.
    5. 5
      LANE & PREach task gets its own lane and lands as a pull request.

    How a piece of work moves.

    A channel can split into child chats, where subagents work side by side. Each piece of work gets its own lane, so nobody steps on anyone else’s checkout, and everything lands on main through a pull request.

    #ui-polish a channel chat child chat child chat subagents work here
    a lane each
    mainlands as a PR
    CHATTalk with teammates and agents.
    PLANWhat’s being done, and in what order.
    DIFFEvery change in the lane, reviewable.
    TERMINALA real shell on the host.
    BROWSERead the project’s files.
    PREVIEWSee the running app in a browser.

    Where it runs.

    Every channel runs on one host. Channel traffic goes from host to host over your tailnet. The directory only answers “who has which channel”, so a channel stays listed when its host is asleep, and the app shows it as offline instead of losing it.

    channel traffic, host to host over the tailnetlistings only, to the directorya teammate opening a channel

    You host the directory.

    Ace doesn’t run any servers. For a team to share one view of its channels, someone deploys a directory into an account the team controls.

    WHAT IT HOLDS
    Your projects, hosts, and where each channel lives. No channel content: messages, code and diffs stay on hosts.
    WHERE IT RUNS
    A Cloudflare Worker with a Durable Object, in your own Cloudflare account.
    HOW HOSTS AUTH
    A shared ACE_SECRET you generate and give to every host.
    WITHOUT ONE
    Teammates still see each other’s channels while their hosts are online; sleeping hosts’ channels drop out of view.
    OTHER PROVIDERS
    Cloudflare is the only one today. To run it somewhere else, fork Ace or send a pull request adding a provider.
    HOSTED CHANNELS
    Optional. The same kind of deploy gives a channel an always-on home; its tools still run on the host that created it.

    Your tailnet is the team.

    The people and machines on your tailnet can see each other’s channels and join them. Tailscale names the person behind every connection.

    Channels start shared, so teammates can ask the agent for things too. bun ace share <channel> off stops new invocations; everyone can still read along and post.

    Bring your own keys.

    Keys stay in your Keychain and never reach the UI. Pick a model per message.

    PROVIDERS
    Anthropic and OpenAI, from the environment or Keychain
    CLIENTS
    The macOS app, a browser app, the ace CLI, and your phone over the tailnet
    STORAGE
    Durable, on the host. bun ace backup copies a channel anywhere.

    Setting it up.

    You need Bun 1.4 or later, a Git repository and a model provider key. For a team: Tailscale, and a Cloudflare account for the directory.

    1. Clone and install.

      git clone https://github.com/githubnext/ace2 && cd ace2
      bun install
    2. Save a key, then start a channel in your project.

      bun ace key set ANTHROPIC_API_KEY
      bun ace new --project ~/code/my-repo
    3. Open the app.

      bun app build && bun ace serve
      bun ace open
    4. Deploy the directory to your Cloudflare account and point each host at it.TEAMS

      SECRET=$(openssl rand -hex 32)
      printf %s "$SECRET" | bun ace key set ACE_SECRET
      cd services/directory && bunx wrangler deploy
      printf %s "$SECRET" | bunx wrangler secret put ACE_SECRET
      bun ace directory https://ace-directory.<you>.workers.dev

    Agents run as you.

    Channels and lanes are not sandboxes.

    Ace runs agents with the privileges of the user running the host. They can execute shell commands and change files beyond the project. Sharing a channel lets teammates run commands on its host.

    Only let people you’d trust with the machine onto your tailnet, and keep the host’s gateway on loopback or your private tailnet. Never expose it to the public internet.

    FORK

    Ace is an experiment from GitHub Next, and it’s built in Ace: every change is made in a channel, on a lane, and lands as a pull request.

    It’s MIT licensed and there’s no service behind it. Clone it, change what doesn’t suit your team, add the hosting provider you need. Expect rough edges; it moves fast, and we’d love to hear what you find.