Self-hosted · Flutter-driven · Local AI CLIs

Anton.
Code on the go.

Anton — inspired by the custom server cluster Gilfoyle builds in Silicon Valley — is a personal developer-productivity platform. Stay in the loop with live planning & build sessions, or drop a ticket and walk away while an autonomous worker ships a PR. It runs on your infrastructure and shells out to local AI CLIs — no direct calls to any AI provider API.

3 Go binaries · + Flutter app · Android · iOS · macOS · Linux · Runs over Tailscale
Two modes, two moods

Two ways of working

How involved you want to be is the choice — Anton covers both ends.

MODE 01

Active development

Interactive Development Server · :8765

You're in the loop and care about the code as it changes. Plan a change conversationally, then drive a live build session — a real AI CLI in a terminal on the server, streamed to your phone. Watch it work, chat, answer prompts, and course-correct.

  • Conversational planning, then a live PTY build session
  • Persistent sessions — close the app, reconnect later
  • Files, git, and projects managed from the phone
MODE 02

Drop-and-walk-away

Ticketing Service · :8766

You have a reasonable prompt and no desire to babysit it. Write a ticket, refine it via AI chat until it's implementation-ready, and queue it. A worker picks it up and produces a PR end-to-end — you just review.

  • Autonomous review runs generate tickets on a schedule
  • Swipe to triage: queue, backlog, reject, or archive
  • Worker implements → reviews → tests → pushes a PR
Drop-and-walk-away, end to end

How a ticket flows

The queue is the integration boundary — the worker never touches the ticketing database directly, so workers can be added or moved without API changes.

1

Generate

An autonomous run reviews an opted-in project against a paradigm — security, performance, testing — and emits structured tickets. Or you write one by hand.

2

Refine

Open a ticket's AI chat to sharpen it into an implementation-ready prompt — the chat can edit the ticket's fields directly.

3

Triage

On the phone, swipe to queue, backlog, reject, or archive.

4

Queue

Send the ticket to the ordered implementation queue.

5

Implement

A worker claims it, branches a git worktree, implements, code-reviews the diff (looping if needed), generates & runs tests, and pushes a branch.

6

Review

The ticket shows Ready for Review with a tappable PR link — and a Docker preview URL when deploy is enabled.

Downloads

Get Anton

The mobile app is the primary UI for both modes. The server ships three Go binaries — each a single executable with a systemd unit.

Mobile app The primary client

🤖

Android

APK ·

Planning chat, build terminal, ticket triage, dashboard. Sideload the APK or grab the Play Store beta.

Download APK

iOS

TestFlight ·

The same Flutter client for iPhone & iPad. Join the TestFlight beta.

Open in TestFlight

Server Three binaries

macOS

Anton.app · menu-bar supervisor ·

A drag-to-install app that bundles and supervises all three services. Pick the DMG that matches your chip — then follow the macOS quick start (it's unsigned, so there's one extra command).

🐧

Linux

raw binaries · systemd units ·

All three binaries plus their systemd units. The worker can also run standalone on any approved machine.

x86-64 (tar.gz)
What's in the server bundle
  • antonInteractive Development Server — live planning & build sessions:8765
  • anton-ticketingTicketing Service — tickets, autonomous runs, queue, web dashboard:8766
  • anton-impl-serverImplementation worker — claims tickets, ships PRsoutbound
Quick start · macOS

Install on a MacBook

No Xcode, no Go toolchain, no building. Download the DMG, run one installer, and the menu bar app supervises all three services for you.

1

Get the DMG that matches your chip

There is no universal binary, so grab the right one. Check your architecture, then download Apple Silicon or Intel from the section above.

uname -m
# arm64  → Anton-arm64.dmg   (M1/M2/M3/M4)
# x86_64 → Anton-x86_64.dmg  (Intel)
2

Open the DMG and run the installer

Double-click Install Anton.command inside the DMG. It copies Anton to /Applications, clears the quarantine flag, re-signs the bundle locally, installs the Claude Code plugin, and launches it. If the installer itself is blocked, right-click it → Open.

3

Unsigned app? Clear the quarantine flag

!

Anton is an unsigned personal build — there's no Apple Developer signature or notarization. On a Mac that didn't build it, Gatekeeper blocks the first launch, usually with the misleading "Anton is damaged and can't be opened" error on Apple Silicon. Nothing is damaged.

macOS only blocks files carrying the download quarantine flag, which is attached by browsers, Mail, Messages, and AirDrop — so moving the app from one MacBook to another is exactly when you'll hit this. Transfer it with scp, rsync, curl, or a USB drive copied in Terminal and no quarantine is set at all.

If you dragged the app across manually, or the installer was blocked, run:

# strip the quarantine flag macOS attached on transfer
xattr -cr /Applications/Anton.app

# re-apply a local (ad-hoc) signature so Gatekeeper accepts it
codesign --force --deep --sign - /Applications/Anton.app

open /Applications/Anton.app
4

Check the menu bar

A ● Anton indicator appears in your top bar with all three services and start/stop controls. Anton shells out to local CLIs, so claude and git must be on your PATH — Homebrew and asdf paths are picked up automatically.

# where things live
~/Library/Application Support/Anton/config.json   # settings
~/Library/Logs/Anton/                             # logs
~/AntonProjects/                                  # project tree

Running Linux instead? The full server walkthrough is just below.

Full setup

Install in a few minutes

The mobile app reaches your services over WSS/HTTPS on your Tailscale network.

1

Run the services

On macOS, install Anton.app and it supervises all three — see the macOS quick start. On Linux, each service builds to one binary and ships a systemd unit:

# build a service (Go modules)
cd interactive-development-server && go build

# or install the release binaries to PATH
sudo install anton anton-ticketing anton-impl-server /usr/local/bin/

# start via systemd (units under each service-file/)
systemctl --user start anton anton-ticketing
2

Check status & pairing

Run ./anton-status anytime to see which services are up, the admin token, and the mobile pairing QR. Safe to re-run, always exits 0.

./anton-status
# → running services · admin token · pairing QR
3

Approve your worker

The Implementation Server self-registers with the ticketing service and waits for admin approval. Each worker has its own Ed25519 keypair and signs its requests — no shared secrets. Approve it once and it starts claiming queued tickets.

4

Pair the app

Install the mobile app and scan the pairing QR from anton-status (or enter your server URL over Tailscale). Create a project and start a live session, or file your first ticket.

Under the hood

How the pieces fit

Three independent Go binaries plus the Flutter app. Two services are stationary on the dev host; the worker runs on any approved machine and connects outbound. FCM is the only external cloud dependency — used solely to wake the app.

📱 Flutter mobile app
iOS · Android — the primary client
  • planning chat
  • build terminal
  • ticket triage + per-ticket chat
  • dashboard
WSS / HTTPS · over Tailscale
◆ anton
Interactive Development Server · :8765
  • Planning sessions (WS)
  • Build sessions in a PTY (WS)
  • Files · git · projects
  • FCM push when AI waits
◆ anton-ticketing
Ticketing Service · :8766
  • Autonomous ticket runs
  • Ticket lifecycle + triage
  • Per-ticket AI chat
  • Worker queue + embedded dashboard
claim / complete · Ed25519-signed HTTP
◆ anton-impl-server
Implementation Server · worker · any machine · outbound only
  • claim → git worktree
  • implement → review-loop
  • tests → push PR
  • Docker preview → report back
☁️ FCM data-only push wakes the app — your prompt content never leaves your server. AI CLIs (claude / opencode) run as local subprocesses.