A queue that keeps agents busy
Draft, queue and settle tasks across projects. The scheduler respects each agent's concurrency limit, so a fleet never stampedes a model or a machine.
CherryPi is self-hosted orchestration for a fleet of AI agents. Put the agency on your VPS, connect agents from any machine, and run every task, session and terminal from one place — without exposing a single inbound port.
Newest first · scheduler ready
Built for the machine you already own
The product
Not a chat window with extra steps. CherryPi gives a fleet of Pi workers projects, permissions, a queue, live terminals and a paper trail — while every agent keeps running on the machine it was installed on.
Draft, queue and settle tasks across projects. The scheduler respects each agent's concurrency limit, so a fleet never stampedes a model or a machine.
Watch Pi work in real time, send follow-up prompts, open a PTY or bring up the agent's desktop — all through the agency, all over one outbound tunnel.
Projects, teams, ownership, invitations and per-actor audit trails. Give people and agents exactly the access they need, and keep the history.
Token usage, total cost and run time land on the task, the agent and the project. Know what your fleet is doing without scraping logs.
Agents publish files, screenshots and structured results as task artifacts. Attachments and session history stay with the task when the run ends.
AGPL-3.0, Go and Vue. Bring your own database (SQLite or PostgreSQL), object storage and reverse proxy. No hosted control plane in the middle.
How it works
The agency owns accounts, projects, scheduling and history. Agents dial out over a single tunnel and serve their Pi sessions, PTYs and desktop through it. Put a TLS proxy in front of the agency and you are done.
HTTPS · session cookie
cherrypi-agency
Go + Vue · tunnel hub
SQLite · PostgreSQL · S3
no inbound ports
Run one container on a VPS. It serves the web app, API and tunnel hub; add a TLS reverse proxy in front.
Create the agent in the UI, copy its one-time personal access token, and start cherrypi-agent on the worker machine.
Create a project and a task, write the prompt, and let the scheduler start it when an agent has capacity.
Beginning of conversation
Reproduced locally. InviteView routes to /tasks before the session cookie is committed, so the first request is unauthenticated.
The fix awaits the session reload and only redirects when it succeeds. Added a Vitest regression for the blank-page case.
The unit of work
Prompts, follow-ups, session history, attachments and artifacts stay in the agency — not in a scrollback buffer on someone's laptop. Reassign a task, pause it, or come back tomorrow and continue where the agent stopped.
Send follow-up prompts to a live Pi session and keep the full reasoning trace.
Open a PTY, browse the agent's desktop, or read the task's terminal without SSH.
Publish task artifacts and attach files; the agency stores them with the task.
Move work between agents, people and projects with permissions and an audit trail.
Self-hosted by default
CherryPi ships as two containers and a set of environment variables. There is no hosted control plane, no vendor account and no telemetry phone-home. Point it at the database and bucket you already trust.
Start with a file, move to Postgres when the team grows.
Attachments and task artifacts stay in your object storage.
Bring the identity provider and mail server you already run.
Audit the server, the SPA, the agent and the tunnel.
Two containers, one tunnel
linux/amd6401 / agency · the exposed service
docker run -d --name cherrypi-agency \
--restart unless-stopped \
-p 8080:8080 \
-v "$PWD/agency_data:/root/.cherrypi-agency" \
-e CHERRYPI_ADMIN_PASSWORD='choose-a-long-password' \
-e CHERRYPI_PUBLIC_URL='https://cherrypi.example.com' \
ghcr.io/cherrypidotdev/cherrypi-agency:latest 02 / agent · behind NAT
docker run -d --name cherrypi-agent \
--restart unless-stopped \
-v "$PWD/cherrypi_data:/root/.cherrypi" \
-e CHERRYPI_AGENCY_URL='https://cherrypi.example.com' \
-e CHERRYPI_AGENT_TOKEN='pat_…' \
ghcr.io/cherrypidotdev/cherrypi-agent:latest Images: ghcr.io/cherrypidotdev/cherrypi-{agency,agent}
Latest release
Binaries for Linux and macOS, container images for the agency and agent, and release notes on GitHub. This page reads the latest tag directly from the public repository.
v0.6.0 · published Nov 4, 2026 · baked into this build
$ ghcr.io/cherrypidotdev/cherrypi-agency:v0.6.0
Questions
Still unsure? Open a discussion or read the operations guide before putting an agency on the public internet.
No. Agents dial out to the agency and keep a tunnel open. Only the agency needs to be reachable from a browser, which makes agents work behind NAT, on laptops, and on machines you do not expose to the internet.
The cherrypi-agent binary hosts the Pi harness, a parallel session manager, PTYs, a desktop bridge and the tunnel client. One agent can serve several concurrent sessions, subject to the limits you configure.
Yes. CherryPi is licensed under AGPL-3.0. Every commit on main is published as a complete, buildable source snapshot on GitHub, with releases, issues and discussions there.
Yes. The agency supports SQLite out of the box and PostgreSQL as a first-class alternative store. Configuration is environment-driven, including object storage for attachments.
GitHub Releases carry signed release notes, per-platform binaries and container images on GHCR. This page reads the latest release from the GitHub API; the binaries below always point at the current tag.
The documentation lives at docs.cherrypi.dev, with guides for installing the agency, connecting agents, configuration and the JavaScript SDK. The repository also ships a compose file for a local agency + agent.