Describe the task. Review the pull request.
Paco runs coding agents on your own hardware. Each one works in an isolated sandbox until the job is done — editing files, running the app, committing, and opening a pull request you review. No vendor account, no API key.
What makes it different
Most of these are consequences of one decision: run it yourself, on a real machine, with real git.
-
Your Claude subscription
The agent is the Claude Code CLI, driven headlessly. It signs in with the subscription you already pay for — there is no API key to buy and no per-token bill from us.
-
A sandbox per session
Work happens in a Docker container against a workspace directory on the host. Because the workspace is a real directory, state survives container restarts without snapshots.
-
Real git, not a diff view
A session is a repository; a chat is a worktree on its own
chat/<id>branch. Two chats can touch the same file without colliding, and each ends in its own pull request. -
Destructive actions ask first
Reads, in-worktree edits and ordinary dev commands run untouched.
rm -rf, force pushes,sudoand writes outside the worktree stop and wait for you. -
Runs survive restarts
Each step is persisted to Postgres by the durable workflow engine, so a run outlives a reboot and can be resumed or cancelled rather than lost.
-
Work is tiered across models
An Opus-class model orchestrates while Sonnet and Haiku subagents do the mechanical work — which is where most of the token volume goes.
How it fits together
The agent runs on the host, with the chat’s worktree as its working directory. The container is where the generated app runs — so a dev server has to be started inside it to be reachable.
Browser → Next.js + durable workflow → Claude Code (host) → Docker sandbox
Installing it
One command on a Linux host running systemd. It adds the signed
Stack256 APT source and installs the paco package.
-
Run one command
Docker, PostgreSQL, nginx, a bundled Node runtime and a bundled Claude Code CLI all come with it — installed, configured and started before the command returns. There is nothing to wire together afterwards.
curl -fsSL https://apt.stack256.org/paco/install.sh | sudo sh -
Sign it into Claude
The one step an installer cannot do for you, because it needs your account. Until it is done, every turn fails with nothing to run.
sudo paco auth -
Open it
First run walks you through creating the admin account, confirming the address, and optionally setting up outgoing mail.
http://<this host’s address>/
The sandbox image is fetched for you. The first chat
pulls ghcr.io/stack256org/paco-sandbox, which is a few
gigabytes and happens once. Pre-pull it with
docker pull ghcr.io/stack256org/paco-sandbox:latest if
you would rather not wait at that moment.
What it needs
| Host | Linux with systemd, and root access |
|---|---|
| Architectures | amd64 and arm64 |
| Ports | 80 and 443, free — nginx owns both, and there is no flag to move them |
| Database | PostgreSQL, installed with the package and reached over a Unix socket — no TCP listener, no password |
| Containers | Docker, for chats — installed and wired up by the installer, not something you set up first |
| Model access | An existing Claude subscription, via paco auth |
| Updates | apt upgrade, like everything else on the host |
| Licence | Open source — every line readable in the repository |
Have a look at the code
Paco is the first of 256. If something here is wrong, or missing, the issue tracker is the right place for it.