The live map of your AI coding agents. Watch Claude Code, Codex, and opencode edit your repo in real time and catch collisions before they become merge conflicts.
1
stars
15
commits
Python
primary language
Aug 25, 2026
updated
Symphony is an open-source control room for AI coding agents. Watch Claude Code, Codex, and opencode edit your repository in real time, and catch two agents about to collide on the same file before it becomes a merge conflict.
Quickstart · How it works · Features · Deployment guide · Research

The current wave of LLM observability tools traces agents you build with SDKs: waterfalls, token cost, session replays for your own orchestrated code.
Symphony answers a different question, the one every team running coding agents actually has:
Who or what is touching my repo right now, and are they about to step on each other?
You do not instrument your code. You install a hook. From then on every edit any agent makes, across every teammate's machine, streams onto one shared, live map of your codebase.
This is not a new idea, it is a well-studied one that never had a product for the AI-agent era. Decades of HCI research (FASTDash at Microsoft Research, Manhattan, TeamWATCH) showed that a shared, real-time, spatial view of who-is-editing-what measurably improves team awareness and catches edit conflicts early. Symphony brings that to autonomous coding agents. See docs/RESEARCH.md for the citations.
your machines hosted backend browser
------------- -------------- -------
Claude Code \ live board
Codex >-- hook POST --> ingest API --> Supabase <== events ==> dashboard
opencode / (edit events) (FastAPI) (state + (SSE/WS) (web UI)
backplane)
Requires Python 3.11+ and a free Supabase project.
git clone https://github.com/itsloganmann/symphony.git
cd symphony
cp .env.example .env # fill in SUPABASE_URL, service key, and tokens
pip install -e ".[serve]"
# 1. Create the schema in your Supabase project
SUPABASE_PROJECT_ID=... SUPABASE_ACCESS_TOKEN=... \
python -m symphony.scripts.apply_supabase_schema
# 2. Run the server
python -m symphony # serves the dashboard on http://localhost:8000
# 3. Install the hook into your agents, from inside the repo you want on the board
python symphony/scripts/install_hooks.py --endpoint http://localhost:8000
Restart any open Claude Code, Codex, or opencode session so the hook loads, then start
editing. Open the dashboard, enter your SYMPHONY_READ_TOKEN, and watch the board light up.
To group agents under people (names, avatars, aliases), copy team.example.json to
team.json and edit it. Hosted deployment (Modal), the read API for agents, and the full
security posture are in the deployment guide.
Every setting is an environment variable. Only the first three are required.
| Variable | Required | Purpose |
|---|---|---|
SYMPHONY_SUPABASE_URL | yes | Supabase project URL |
SYMPHONY_SUPABASE_SERVICE_ROLE_KEY | yes | Server-side Supabase key (never sent to the browser) |
SYMPHONY_AUTH_TOKEN | yes | Bearer token for hooks and writes |
SYMPHONY_READ_TOKEN | recommended | Token browsers use to open the dashboard |
SYMPHONY_REPO_ROOT_LABEL | no | Repo name the board displays |
SYMPHONY_TEAM_FILE | no | Path to the team roster JSON (default team.json) |
SYMPHONY_SUPABASE_ANON_KEY | no | Enables realtime push |
SYMPHONY_SUPABASE_JWT_SECRET | no | Mints scoped realtime tokens |
OPENAI_API_KEY / ANTHROPIC_API_KEY | no | LLM enrichment (summaries, zones, ask) |
See .env.example for the full list.
Authorization: Bearer $SYMPHONY_AUTH_TOKEN. Only
/healthz is public.SYMPHONY_READ_TOKEN; the dashboard cookie does not authorize them.service_role. The service key
lives server-side and is redacted from all rendered HTML.Issues and pull requests are welcome. Symphony is built to be forked. See docs/DESIGN.md for the design system and docs/RESEARCH.md for the evidence base.
MIT. See LICENSE.
15 commits
Python
89.9%
PLpgSQL
9.2%
The live map of your AI coding agents. Watch Claude Code, Codex, and opencode edit your repo in real time and catch collisions before they become merge conflicts.
1
stars
15
commits
Python
primary language
Aug 25, 2026
updated
Symphony is an open-source control room for AI coding agents. Watch Claude Code, Codex, and opencode edit your repository in real time, and catch two agents about to collide on the same file before it becomes a merge conflict.
Quickstart · How it works · Features · Deployment guide · Research

The current wave of LLM observability tools traces agents you build with SDKs: waterfalls, token cost, session replays for your own orchestrated code.
Symphony answers a different question, the one every team running coding agents actually has:
Who or what is touching my repo right now, and are they about to step on each other?
You do not instrument your code. You install a hook. From then on every edit any agent makes, across every teammate's machine, streams onto one shared, live map of your codebase.
This is not a new idea, it is a well-studied one that never had a product for the AI-agent era. Decades of HCI research (FASTDash at Microsoft Research, Manhattan, TeamWATCH) showed that a shared, real-time, spatial view of who-is-editing-what measurably improves team awareness and catches edit conflicts early. Symphony brings that to autonomous coding agents. See docs/RESEARCH.md for the citations.
your machines hosted backend browser
------------- -------------- -------
Claude Code \ live board
Codex >-- hook POST --> ingest API --> Supabase <== events ==> dashboard
opencode / (edit events) (FastAPI) (state + (SSE/WS) (web UI)
backplane)
Requires Python 3.11+ and a free Supabase project.
git clone https://github.com/itsloganmann/symphony.git
cd symphony
cp .env.example .env # fill in SUPABASE_URL, service key, and tokens
pip install -e ".[serve]"
# 1. Create the schema in your Supabase project
SUPABASE_PROJECT_ID=... SUPABASE_ACCESS_TOKEN=... \
python -m symphony.scripts.apply_supabase_schema
# 2. Run the server
python -m symphony # serves the dashboard on http://localhost:8000
# 3. Install the hook into your agents, from inside the repo you want on the board
python symphony/scripts/install_hooks.py --endpoint http://localhost:8000
Restart any open Claude Code, Codex, or opencode session so the hook loads, then start
editing. Open the dashboard, enter your SYMPHONY_READ_TOKEN, and watch the board light up.
To group agents under people (names, avatars, aliases), copy team.example.json to
team.json and edit it. Hosted deployment (Modal), the read API for agents, and the full
security posture are in the deployment guide.
Every setting is an environment variable. Only the first three are required.
| Variable | Required | Purpose |
|---|---|---|
SYMPHONY_SUPABASE_URL | yes | Supabase project URL |
SYMPHONY_SUPABASE_SERVICE_ROLE_KEY | yes | Server-side Supabase key (never sent to the browser) |
SYMPHONY_AUTH_TOKEN | yes | Bearer token for hooks and writes |
SYMPHONY_READ_TOKEN | recommended | Token browsers use to open the dashboard |
SYMPHONY_REPO_ROOT_LABEL | no | Repo name the board displays |
SYMPHONY_TEAM_FILE | no | Path to the team roster JSON (default team.json) |
SYMPHONY_SUPABASE_ANON_KEY | no | Enables realtime push |
SYMPHONY_SUPABASE_JWT_SECRET | no | Mints scoped realtime tokens |
OPENAI_API_KEY / ANTHROPIC_API_KEY | no | LLM enrichment (summaries, zones, ask) |
See .env.example for the full list.
Authorization: Bearer $SYMPHONY_AUTH_TOKEN. Only
/healthz is public.SYMPHONY_READ_TOKEN; the dashboard cookie does not authorize them.service_role. The service key
lives server-side and is redacted from all rendered HTML.Issues and pull requests are welcome. Symphony is built to be forked. See docs/DESIGN.md for the design system and docs/RESEARCH.md for the evidence base.
MIT. See LICENSE.
15 commits
Python
89.9%
PLpgSQL
9.2%