Watch your Claude Code subagents work — a live office for every conversation.
Project description
🎭 Claude Theater
Watch your Claude Code conversations and subagents work — a live office, in real time.
The demo office (claude-theater --demo): conversations and subagents at work, each agent walks in, sits, head-bobs while it types, then confetti on finish. A community visualizer for Claude Code — not affiliated with Anthropic.
Try it now, no Claude Code session required — pipx run claude-theater --demo
spins up the office above with synthetic agents.
Claude Theater reads the journals Claude Code writes for your conversations and the subagents they spawn, and renders them as a live office: every conversation is a room (titled by its subject), and inside it the conversation itself plus each subagent is a little character at a desk — avatar, name, the tool it's using right now, and a timer. Click any character to read its full task and result. When an agent finishes: confetti, a chime, and it quietly steps off the floor — and each room has its own show-finished toggle, so you control the history per conversation.
The UI is bilingual — English by default, Hebrew one click away (the choice
is remembered, and the layout flips to RTL). Adding another language is a single
edit to the I18N table in claude_theater.py; the server stays language-neutral.
Quick start
Zero install — run it straight from PyPI with pipx:
pipx run claude-theater
Or install it:
pipx install claude-theater # or: pip install claude-theater
claude-theater
Or run from a clone (pure standard library, nothing to install):
python -m claude_theater
Then open http://localhost:7333. On Windows you can also just run
start.cmd, which launches the server and opens your browser.
Requires Python 3.9+ and a Claude Code install that writes journals under
~/.claude/projects/.
VS Code extension
Prefer it inside your editor? vscode-extension/ packages Claude Theater as a
VS Code extension: it runs the server in the background (start/stop it from a
status-bar button) and opens the office in an interactive panel — no separate
terminal. The server is bundled into the extension, so it works without a
separate install. Build a .vsix with @vscode/vsce
(cd vscode-extension && npx @vscode/vsce package) and install it from the
Extensions view.
How it works
- Polls the journals Claude Code already writes — both the session files (your
conversations) and
**/subagents/agent-*.jsonl(the subagents they spawn). Claude Theater only reads them; it never starts or controls agents. - A single adapter,
parse_agent_event(line) -> Event, is the only code that touches the raw journal format. Everything else consumes the stableEvent, so a Claude Code format change is absorbed in one place. - Degrades, never crashes: corrupt lines are skipped (and counted), unknown keys are ignored, and an agent missing fields still shows up instead of vanishing.
- A non-blocking version banner appears when a journal comes from a Claude Code version this build hasn't been tested against — output may be partial, but the office keeps running.
Privacy
Your journals contain real conversation content, so Claude Theater is built to keep them on your machine:
- Binds to
127.0.0.1only — never reachable from the network. - Never transmits anything anywhere. No telemetry, no remote calls.
- The committed
fixtures/are 100% synthetic — no real prompts or results.
Development
python -m unittest discover -s tests # golden parser tests, zero dependencies
The tests run synthetic journal fixtures through the adapter and fail loudly if the format drifts. Contributing a journal sample from a new Claude Code build is the most valuable contribution — scrub every prompt and result first.
Compatibility
Tested against Claude Code 2.1.x. Newer builds will trigger the version banner; please open a format-drift report with a scrubbed sample so we can add a fixture and an adapter case.
License
MIT © 2026 Asaf Abramzon. "Claude" is a trademark of Anthropic; this is an independent, community project for Claude Code.
Project details
Release history Release notifications | RSS feed
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 claude_theater-0.1.0.tar.gz.
File metadata
- Download URL: claude_theater-0.1.0.tar.gz
- Upload date:
- Size: 298.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2f9d645cc3e432d54f08265eac58a59dd57f8d19d7e2b1c94c0e20aeaf0bf4b
|
|
| MD5 |
6bf88dac2a031fafa93f8ed4cb8cf80f
|
|
| BLAKE2b-256 |
d204222b005d2530de99748a5549f3da7522ce941fdf9def48048afd3bd75a9d
|
Provenance
The following attestation bundles were made for claude_theater-0.1.0.tar.gz:
Publisher:
release.yml on asafabram-ship-it/claude-theater
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
claude_theater-0.1.0.tar.gz -
Subject digest:
d2f9d645cc3e432d54f08265eac58a59dd57f8d19d7e2b1c94c0e20aeaf0bf4b - Sigstore transparency entry: 1757592417
- Sigstore integration time:
-
Permalink:
asafabram-ship-it/claude-theater@9f36fa49704a7d2627c3ae1b6497dcaabb80c2f9 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/asafabram-ship-it
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9f36fa49704a7d2627c3ae1b6497dcaabb80c2f9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file claude_theater-0.1.0-py3-none-any.whl.
File metadata
- Download URL: claude_theater-0.1.0-py3-none-any.whl
- Upload date:
- Size: 30.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35507e76a75d86a707414e45a96a834e7d5473bc3a7bc7ca255e322180efea1a
|
|
| MD5 |
89ff4268596bfd0dc854b54af0c2c578
|
|
| BLAKE2b-256 |
0d68b8e5d1f13c5065c753462ff519cf25c7aa4fbd520007fb78b16a2831c7d5
|
Provenance
The following attestation bundles were made for claude_theater-0.1.0-py3-none-any.whl:
Publisher:
release.yml on asafabram-ship-it/claude-theater
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
claude_theater-0.1.0-py3-none-any.whl -
Subject digest:
35507e76a75d86a707414e45a96a834e7d5473bc3a7bc7ca255e322180efea1a - Sigstore transparency entry: 1757592540
- Sigstore integration time:
-
Permalink:
asafabram-ship-it/claude-theater@9f36fa49704a7d2627c3ae1b6497dcaabb80c2f9 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/asafabram-ship-it
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9f36fa49704a7d2627c3ae1b6497dcaabb80c2f9 -
Trigger Event:
push
-
Statement type: