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.
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.
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.
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.
ACE_SECRET you generate and give to every host.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.
Keys stay in your Keychain and never reach the UI. Pick a model per message.
ace CLI, and your phone over the tailnetbun ace backup copies a channel anywhere.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.
Clone and install.
git clone https://github.com/githubnext/ace2 && cd ace2 bun install
Save a key, then start a channel in your project.
bun ace key set ANTHROPIC_API_KEY bun ace new --project ~/code/my-repo
Open the app.
bun app build && bun ace serve bun ace open
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
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.
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.