Watch your Cursor agent conversations work — a live office, in real time.
code --install-extension <file>.vsixCopies a short prompt — paste it into Cursor (or another AI agent) to set this up for you.
Cursor Theater turns the conversations Cursor keeps for you into a glance: which projects have agents working, idle, or finished, and what each is doing right now.
state.vscdb).Safe by design: runs entirely locally, only reads your journals, opens no port, sends no telemetry. Port of Claude Theater by Asaf Abramzon.
Install: grab the latest .vsix from Releases → code --install-extension <file>.vsix.
Watch your Cursor agent conversations work — a live office, in real time.
Each Cursor instance/project is a room; every conversation inside it is a character at a desk — avatar, title, the tool it's using, and a timer. A community visualizer for Cursor — not affiliated with Anysphere.
Cursor Theater turns the conversations Cursor keeps for you into a glance: which projects have agents working, which are idle, which finished, and what each one is doing right now — without digging through transcripts.
It's a port of the excellent Claude Theater by Asaf Abramzon, re-pointed at Cursor's data and shipped as a native, server-less Cursor extension.
Safe by design: it runs entirely on your machine, only reads your local journals, and sends nothing anywhere (no telemetry). The extension opens no port at all. (more)
Cursor Theater groups conversations per Cursor instance / project (a room), with each conversation shown as a character at a desk. It works full-width in an editor tab and stays readable docked in a narrow side bar.
state.vscdb).No comments yet.
The extension runs no HTTP server and opens no port: it reads
~/.cursor/projects and Cursor's global state.vscdb directly, watches them for
changes, and pushes updates into a webview.
Install the prebuilt .vsix — download cursor-theater-<version>.vsix from the
latest release, then in
Cursor run Extensions: Install from VSIX…, or from a terminal:
cursor --install-extension cursor-theater-<version>.vsix
After installing you get an Activity Bar view, a dockable side-bar view, a
status-bar item (bottom-right), and a full editor-tab command
(Cursor Theater: Open in Editor).
Or build it from source (needs Node.js):
git clone https://github.com/udah1/cursor-theater
cd cursor-theater/extension
npm install
npm run package # produces cursor-theater-<version>.vsix
cursor --install-extension cursor-theater-*.vsix
The extension is the primary path, but the original single-file Python server is kept for two things the in-editor extension can't do:
fetch('/api/agents') when it isn't running inside a webview).ui/theater.html fresh on every request, so
you can edit the UI and just refresh the browser.python3 cursor_theater.py # scans ~/.cursor and opens http://localhost:7333
python3 cursor_theater.py --demo # synthetic office, no sessions needed
Requires Python 3.9+. Binds to
127.0.0.1only and is read-only.
~/.cursor/projects/**/*.jsonl transcripts and reads chat
titles/status/timestamps from Cursor's global state.vscdb via the read-only
sqlite3 CLI (json_extract, indexed — never loads the whole DB into memory). It
degrades gracefully (first message + file mtime) if sqlite3 is unavailable.ui/theater.html. The Python server
inlines it (build_ui.py) and the extension bundles it (npm run copy-ui), so
both front ends render the exact same page.postMessage.
Each Cursor window runs its own extension host, so opening the theater in several
windows is safe and independent — closing one never affects another.Your journals contain real conversation content, so Cursor Theater keeps them local:
127.0.0.1 only and is read-only, with a
loopback Host allowlist that blocks DNS-rebinding and a strict CSP.# extension
cd extension && npm install && npm run compile # then press F5 for an Extension Dev Host
# UI: edit ui/theater.html, then refresh the Python server in the browser.
# After a UI change, sync both consumers:
python3 build_ui.py # inline into cursor_theater.py
cd extension && npm run copy-ui
Note: the Python server and the extension have separate scan implementations (
cursor_theater.pyvsextension/src/scan.ts). If you change status/liveness logic, update both.
Cursor Theater is a fork of Claude Theater © Asaf Abramzon, adapted for Cursor. The original is a community project for Claude Code, not affiliated with Anthropic; this fork is a community project for Cursor, not affiliated with Anysphere.