Agents write the code, you own what ships.
That's easy with one agent. Run a fleet of them and it breaks down: the fleet stalls waiting on you, and you lose track of which agent is doing what. Panopticon gives you one place to watch them all.
- A live dashboard of all your tasks, showing which agents are working and which are blocked waiting on you, so you stop cycling through terminals to find the one that's stuck.
- Configurable workflows that set the line between what an agent may do alone and what needs your sign-off, so agents run unattended without running unchecked. Other tools show you which agent is blocked; Panopticon decides when it blocks.
- Sandboxed by default: each agent works in its own container on its own branch (secrets and environment handled per repo), so it can work freely and nothing reaches main without your review.
Self-hosted and terminal-native: your infrastructure, your secrets, your repos. A ground-up rewrite of the cloude-cade prototype.
New here? docs/overview.md explains how the pieces fit together: the
mental model behind the dashboard.
The whole fleet in one terminal view — every task's state, whose turn it is (agent or you),
its container status, and its repo and slug:
══════════════════════════════════════════════════════════════════════════
panopticon 6 tasks
──────────────────────────────────────────────────────────────────────────
state turn container repo slug[memo]
ITERATING agent live web-api add-oauth[Add OAuth login]
PLANNING user live web-api fix-upload[Flaky S3 upload]
MERGING agent starting dashboard dark-mode[Dark-mode theme]
ITERATING user ⚠ down web-api migrate-db[Move to Postgres]
ORCHESTRATING agent live infra q3-cleanup[Q3 tech-debt]
PLANNING agent live infra └─ drop-py38[Drop Python 3.8]
COMPLETE agent – web-api ship-readme[README refresh]
──────────────────────────────────────────────────────────────────────────
t attach n new task x drop / search d detail ? help q quit
══════════════════════════════════════════════════════════════════════════
The turn column is color-coded live — green when the agent is working, yellow when it's your
move, red (⚠) when a task is blocked waiting on you — so you can tell at a glance which agents
need you. The container column tracks each agent's sandbox as it spawns (queued → … → live,
or down when one needs a respawn), and governed sub-tasks nest under their governor (└─).
Press t to drop into any task's session, ? for the full key list.
Panopticon runs the control plane on your host and each agent in its own container, so it shells out to a few host tools. You need:
- Python 3.11+
- Docker, with the daemon running
- tmux: the dashboard, console supervisor, and task sessions run on a dedicated
tmux -L panopticonserver - git: the session service clones a per-task workspace for each agent
- The
claudeCLI: first-time setup runsclaude setup-tokenon the host to mint the Claude auth token each agent uses inside its container. Minting a token needs a paid Claude subscription or Console login; anANTHROPIC_API_KEYworks instead. Seedocs/auth.md.
panopticon quickstart checks these first; run panopticon doctor to re-check any time. On macOS
you need Docker Desktop specifically; see docs/macos-setup.md.
Panopticon is a command-line app, so pipx is the recommended way to
install it: it puts the panopticon command on your PATH in its own isolated environment.
Plain pip works too.
# recommended: isolated, on your PATH
pipx install panopticon-app
# or with pip
pip install panopticon-appThe PyPI distribution is panopticon-app, but the command you run and the package you
import are both panopticon.
Run panopticon quickstart from inside the repo you want agents to work on: it registers
whatever repo you're in as the target for your tasks.
cd ~/code/my-project # the repo you want agents to work on
panopticon quickstart # first-time setup, then open the dashboardpanopticon quickstart checks your prerequisites, brings the stack up, registers the repo
you're in, and drops you into a setup-repo task; it will walk you through minting a
repo-specific Claude token (saved to the repo's env-file). Then you create tasks and watch your
fleet from the dashboard.
On the dashboard:
- Create it. Press
n, then pick the repo and a workflow.quickstartalready enabled the coding workflow that matches your repo:github-peer-reviewedfor a GitHub repo (opens a PR), orlocal-git-self-reviewedfor a local-only one (keeps commits local).spike(open-ended, no gates) is always available too. To use a different workflow, enable it for your repo in the repos form (pressg, edit the repo, and check the workflows you want). GitHub workflows need aGH_TOKENin the repo's env-file so the container'sghcan open PRs (seedocs/auth.md). Describe the work in a sentence or two; the workflow catalog explains how to choose. - Watch it start. The task's
containercolumn movesqueued → … → liveas the runner spawns its container; once it'slivethe agent starts on its own branch and begins planning automatically. Pressato open its plan when it's ready. - Respond when it needs you. The
turncolumn shows whether the agent is working or waiting on you. When it wants a decision, like signing off on that plan, presstto attach to its session and steer it; run/advancethere to approve its plan or to advance to the next stage in the workflow from whatever stage you're in. Detach any session withCtrl-b d(or your owntmuxprefix +d) to return to the dashboard. - Review what ships. For
github-peer-reviewedthe agent opens a PR (presspon the dashboard to open it in your browser); forlocal-git-self-reviewedit commits to the task branch for you to diff locally. Either way nothing lands until you/advanceit: you own what ships.
Panopticon stores its data under standard XDG locations, each overridable by an environment
variable (resolution is $PANOPTICON_* → $XDG_*_HOME/panopticon → the default below):
| What | Default location | Override |
|---|---|---|
| Database | ~/.local/share/panopticon/panopticon.db |
PANOPTICON_DB (or PANOPTICON_DATA) |
| Artifacts + per-task clones | ~/.local/share/panopticon/ |
PANOPTICON_DATA |
| Layers, secrets, workflows | ~/.config/panopticon/ |
PANOPTICON_CONFIG (workflows also via the --workflows-path flag) |
| Per-repo clone cache | ~/.cache/panopticon/repos/ |
PANOPTICON_CACHE |
- Bring it back up after a reboot or after you quit:
panopticon startstarts the services and opens the dashboard.panopticon consolere-attaches when the services are already running. - Stop everything:
panopticon stopremoves the task containers and the-L panopticontmux server. Your data under~/.local/share/panopticonis left in place. - Check your host:
panopticon doctorverifies Python, Docker (and a running daemon), tmux, git, and theclaudeCLI, printing a line per check and exiting non-zero if anything is missing. - Stuck?
docs/troubleshooting.mdcollects the common first-run failures — auth, missing tokens, a task stuck atawaiting, missing services — and where to fix each. - Upgrade:
pipx upgrade panopticon-app(orpip install --upgrade panopticon-app), thenpanopticon migrateto apply any new database migrations. - Uninstall:
panopticon stop, thenpipx uninstall panopticon-app. To remove state too, delete~/.local/share/panopticon,~/.config/panopticon, and~/.cache/panopticon, and remove thepanopticon-*Docker images.
MIT. See LICENSE.