panopticon
Agents write the code, you own what ships.
Panopticon is a terminal-native control plane for running multiple coding agents. It drives Claude Code, Codex, or pi for each task and gives you one place to supervise the fleet.
Quick install
pipx install panopticon-next
panopticon quickstart
Run quickstart from any directory. Connect a coding agent, select a repository, and open the dashboard. Missing prerequisites have a corrective action; your saved connection remains available when you resume. See Requirements and Install for details.
- 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 make approval points explicit and prevent Panopticon from advancing a task until the current stage is resolved.
- Isolated by default: each agent works in its own container on its own branch so concurrent tasks do not share workspaces.
Self-hosted: your infrastructure, your secrets, your repos. Workflows control Panopticon's state transitions; they do not restrict the commands an agent can execute. Use least-privilege credentials and forge branch protection as hard controls. Containers separate workspaces but are not a security boundary against a malicious or compromised agent. Quickstart writes a separate environment file for each repository. Reusable agent connections contain no GitHub token; repositories using the same Codex subscription share its rotating authentication directory.
New here? Follow the new-user walkthrough. For the mental model behind
the dashboard, read docs/overview.md.
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.
Requirements
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
Foreground setup offers Claude, Codex, or Pi. Pasting a token or API key requires no agent CLI on the host; install Claude Code or Codex locally only if you choose its native browser login. The task container supplies the agent CLI. Use Claude or Codex for the first GitHub walkthrough.
panopticon quickstart checks these first; run panopticon doctor to re-check any time.
Install
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. If
command -v pipx prints nothing, install pipx first:
# macOS
brew install pipx
# Ubuntu or Debian
sudo apt-get update
sudo apt-get install --yes pipx
Make commands installed by pipx available in future shells, then close this terminal and open a new one so the PATH change takes effect:
pipx ensurepath
In that new terminal, install Panopticon, then start setup:
pipx install panopticon-next
panopticon quickstart
You can verify the installed release with panopticon --version; it should print panopticon 0.2.12
without requiring a checkout or uv.
//: # (x-release-please-end)
The distribution is panopticon-next, but the command you run and the package you import are
both panopticon. To work from a checkout, run uv sync and then uv run panopticon doctor.
Quickstart
Run panopticon quickstart from any directory:
panopticon quickstart
Connect Claude, Codex, or Pi, then confirm a repository URL or local path. The current checkout is suggested when available; a checkout without an origin works locally, and a Git bundle is labeled a fixed snapshot. GitHub sources enable GitHub workflows; local and other sources use the local Git workflow.
Setup runs in the foreground. Claude can open its browser login and accept a hidden token paste; Codex browser login writes directly to a new private directory. GitHub workflow credentials are entered separately for the selected repository. A saved connection means credentials are configured; the first real task verifies provider access.
Use panopticon setup to connect an agent even before Docker or tmux is installed. To repair a
registered repository, open the repository screen and press s, or run
panopticon setup --repo <repo-id>. Repository repair requires the local task service. Pending
tasks remain paused after repair: select the one you want to start and press R. Running tasks
remain available. Existing explicit credentials are preserved unless you select replacement.
A second repository can use the saved agent connection. Credentials are configured on the current
host; a remote runner needs its own setup. Bare panopticon opens first-use setup when no stack
configuration exists and otherwise opens your fleet.
Quickstart enables task-service authentication automatically. On Linux, the task service binds to
0.0.0.0 so bridge containers can reach it; restrict reachable interfaces with a firewall or
encrypted, access-controlled transport before running on an untrusted network. On macOS it binds
to loopback. See docs/auth.md.
Your first task
This GitHub walkthrough currently requires a Claude or Codex task. On the dashboard:
- Create it. Press
n, pick the repo, and choosegithub-self-reviewedfor the shortest walkthrough: you perform its approval.github-peer-reviewedinstead requires another person to approve the PR. For a predictable test, enterAdd a hello-panopticon.txt file containing hello from Panopticon and do not change any other files.A new task row appears under the selected repo. - 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. - Respond when it needs you. The
turncolumn shows whether the agent is working or waiting on you. Presstto attach to its session, then detach withCtrl-b d(or your owntmuxprefix +d) to return to the same dashboard and highlighted task. - Open and approve the plan. When
plan.mdis ready, pressa, selectplan.md, and press Enter. Presstto attach again, give any correction, and invoke theadvanceoperation:/advancein Claude or$advancein Codex. The dashboard advances toITERATINGwhile the agent implements and tests the change. The workflow guide documents command syntax for the other harnesses and workflows they support. - Review what ships. The agent opens a PR; press
pon the dashboard to open it in your browser. For the example request, the PR should add onlyhello-panopticon.txt, containing one line:hello from Panopticon. Attach and invokeadvancewith the same harness-specific syntax to approve the self-reviewed gate. The task moves throughMERGING; success is a merged PR and aCOMPLETEdashboard task with no remaining task container. Configure GitHub branch protection as the hard merge control.
When you finish evaluating Panopticon, run panopticon stop. It stops Panopticon task containers
and its dedicated tmux server; stored configuration, credentials, task records, and artifacts
remain on disk. Verify teardown with:
docker ps --filter label=panopticon.task
tmux -L panopticon has-session 2>/dev/null; test $? -ne 0
Both checks exit successfully when teardown is complete: Docker lists no Panopticon task
containers and the dedicated tmux server is gone. Running panopticon stop again also succeeds.
Configuration
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 |
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file panopticon_next-0.2.12.tar.gz.
File metadata
- Download URL: panopticon_next-0.2.12.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e2e49e9cdc579279b7c0414974f7ed75b22676886b7459bb0b9d1660be90823
|
|
| MD5 |
7c6505a5489b2bb92d7684a7f04a057a
|
|
| BLAKE2b-256 |
78d8c25f6d6940e9483ee3ab14d09c920543df48765359446cbb643c7f384da8
|
Provenance
The following attestation bundles were made for panopticon_next-0.2.12.tar.gz:
Publisher:
release.yml on Unsupervisedcom/panopticon-next
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panopticon_next-0.2.12.tar.gz -
Subject digest:
9e2e49e9cdc579279b7c0414974f7ed75b22676886b7459bb0b9d1660be90823 - Sigstore transparency entry: 2827011567
- Sigstore integration time:
-
Permalink:
Unsupervisedcom/panopticon-next@a8e736467a86c98a7013923bf99184ba58f5f617 -
Branch / Tag:
refs/tags/v0.2.12 - Owner: https://github.com/Unsupervisedcom
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a8e736467a86c98a7013923bf99184ba58f5f617 -
Trigger Event:
release
-
Statement type:
File details
Details for the file panopticon_next-0.2.12-py3-none-any.whl.
File metadata
- Download URL: panopticon_next-0.2.12-py3-none-any.whl
- Upload date:
- Size: 399.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d97ef418d27b27ef589c7c27f3a2f0f9a0b313dc8cd960dc3768767a2e0754d
|
|
| MD5 |
d547715016fe674450613750baf9f36c
|
|
| BLAKE2b-256 |
4e16359d57763514a81d1544497ca93a4021bdf5d0ed0f2cbc3b06b2fb35b409
|
Provenance
The following attestation bundles were made for panopticon_next-0.2.12-py3-none-any.whl:
Publisher:
release.yml on Unsupervisedcom/panopticon-next
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panopticon_next-0.2.12-py3-none-any.whl -
Subject digest:
3d97ef418d27b27ef589c7c27f3a2f0f9a0b313dc8cd960dc3768767a2e0754d - Sigstore transparency entry: 2827011581
- Sigstore integration time:
-
Permalink:
Unsupervisedcom/panopticon-next@a8e736467a86c98a7013923bf99184ba58f5f617 -
Branch / Tag:
refs/tags/v0.2.12 - Owner: https://github.com/Unsupervisedcom
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a8e736467a86c98a7013923bf99184ba58f5f617 -
Trigger Event:
release
-
Statement type: