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.
See the whole fleet in one terminal view, with 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, and 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. - 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.