One agency, many agents
The agency owns the UI, accounts, projects and scheduling. Lightweight agents dial out over a tunnel, so they need no inbound port.
Deploy one central web app, connect workers on any machine, and run long-lived coding tasks from a browser.

The agency owns the UI, accounts, projects and scheduling. Lightweight agents dial out over a tunnel, so they need no inbound port.
Prompts, session history, attachments and artifacts live in the agency. Reassign a task to another agent and continue where it stopped.
Root terminals, browser desktops, per-agent concurrency limits, usage accounting and an inbox for everything that needs attention.
SQLite or PostgreSQL, any S3-compatible bucket, OIDC/LDAP/SMTP support and an AGPL-3.0 codebase you can audit.
Run the single-box stack from the repository:
docker compose up -d --buildThen open http://localhost:8080. The bundled agent connects automatically. Read the quickstart for the details.
Install the agency on a VPS, put it behind a TLS reverse proxy, and register agents from the UI:
Use the typed Connect API and the JavaScript SDK, or drive it with the same personal access tokens the browser and bundled Pi tools use.
flowchart LR
B["Browser"] -->|HTTPS| A["CherryPi agency<br/>Go + Vue SPA"]
A -->|SQLite / PostgreSQL| DB[("Agency data")]
A -->|S3| S3[("Attachments<br/>& artifacts")]
A <-->|outbound tunnel| W1["Agent<br/>machine A"]
A <-->|outbound tunnel| W2["Agent<br/>machine B"]
W1 --> P1["Pi sessions<br/>terminals"]
W2 --> P2["Pi sessions<br/>terminals"]Only the agency is reachable from the outside. Agents connect to it, report their health, and serve their task API over the same tunnel.