Symphony
github.com/itsloganmann/symphony- Category
- Developer Tools
- Rank
- No. 1950Tools index
Previous survey · No. 1838 ·
- Pricing
- Open Source
- Type
- TOOL
- Use case
- Coding
- Interfaces
- Web
- GitHub
- 3 stars
- Date
About
An open-source control room that visualizes AI coding agents (Claude Code, Codex, opencode) editing a repository in real time, flagging file collisions before they cause merge conflicts. It uses a lightweight install hook rather than SDK instrumentation, and adds a live 3D agent map, dependency blast-radius view, and optional LLM-generated work summaries.
What it does
Symphony puts a small script inside each teammate's coding agent that reports every file the agent touches to a shared Python server. The server keeps that state in your own Supabase database and pushes it to a browser board, so you can see which person and which agent holds which file right now. When a second agent is about to change a file someone else has claimed, the agent itself gets a warning in its context before it saves, and Slack can message both people.
Why it's ranked here
Most agent observability traces code you wrote against an SDK. Symphony watches off-the-shelf agents instead, and the collision warning reaches the agent, not just a dashboard someone may not be watching. The engineering behind that is careful: retried events cannot double count, alerts run off the edit path so they never slow an agent down, and untrusted names and paths are capped before they reach Slack or an agent prompt. MIT licensed, Python 3.11 or newer, self-hosted. The catch is that it assumes a team, a Supabase project and some operations work.
What's good
Old claims are ranked by age rather than dropped. A claim seen in the last 30 minutes reads as a hard conflict; older ones soften through one day, two days, a week and beyond, and an agent never gets warned about its own earlier edit. Slack alerts go to each person directly, fire once per file and group of people, and repeat at most every six hours. Security details are specific: request bodies are capped at 128 KB for hook calls, tokens are compared in constant time, and the token for the live event stream expires after an hour. AI summaries switch off cleanly without a key.
Tradeoffs
You need a Supabase project; there is no local-only storage mode. The installer appends to your global Claude Code and Codex hook settings and writes an opencode plugin into your home directory. File claims do not expire with age: they clear only when that agent pushes or the file leaves its uncommitted changes, so abandoned sessions linger as stale notices. The deployment guide says rate limiting is not enforced in the app. Optional AI features send board content to OpenAI or Anthropic, OpenAI first when both keys are set. Older internal naming from a previous project name is still visible in code and settings.
How to use it well
It fits a small team running several coding agents in parallel against one repository, where two agents quietly rewriting the same file is a real cost. Run the doctor check after installing, restart open agent sessions, and add the team roster so identities group under people. Keep the write token private, since the app leans on it instead of rate limits. It does not trace prompts, costs or agent reasoning in the way SDK tracing tools do, and a solo developer with one agent gets little from it.
Technical notes+
symphony/hooks.py mints a deterministic event id from runtime, session, tool, sorted paths and a nanosecond timestamp, so a spooled retry reuses its id and the ingest RPC's on-conflict-do-nothing makes delivery idempotent; git calls there run with 0.3 second timeouts. symphony/store.py talks to Supabase only through named RPCs over one pooled requests session. symphony/pre_edit_advisory.py tiers claims at 30 min, 24h, 48h and 7d, excludes the requester, and caps output at 6 editors and 2000 characters. symphony/conflict_alerts.py runs in a daemon thread, escapes Slack markup, and caps names at 8 and editors at 50. symphony/server.py streams bodies against per-route caps (16 MB tree, 24 MB ask) and compares tokens as bytes. symphony/llm.py tries OpenAI then Anthropic.
Observed
- License
- MIT (LICENSE, pyproject.toml)
- Language
- Python, requires 3.11 or newer
- Server framework
- FastAPI, with uvicorn as an optional serve extra
- Storage backend
- Supabase required, accessed only through service-role RPCs
- Supported agents
- Claude Code, Codex and opencode via installed hooks
- Deployment targets
- Local server or Modal, per symphony/README.md
- Rate limiting
- Not enforced in-app, per symphony/README.md
- LLM providers
- Optional OpenAI or Anthropic, OpenAI tried first (symphony/llm.py)
- Test runner
- pytest via the dev extra, testpaths set to tests in pyproject.toml
Read from README.md, pyproject.toml, LICENSE, docs/DESIGN.md, symphony/README.md, symphony/server.py, symphony/hooks.py, symphony/hook_auth.py, symphony/store.py, symphony/conflict_alerts.py, symphony/llm.py, symphony/pre_edit_advisory.py, .env.example, symphony/requirements.txt.
What it can do
Visualize AI coding agents editing a repository in real time
File-edit events from AI coding agents → Live dashboard view
Flag file edit collisions between agents before merge conflicts occur
File-edit events → Collision alerts
Display a live 3D map of agent activity
File-edit events → 3D agent map
Show dependency blast-radius view for edited files
Repository file dependencies → Blast-radius visualization
Generate LLM-based summaries of agent work
Agent activity/edit data → Text summary
Stream file-edit events into a self-hostable dashboard
File-edit events from AI coding agents → Shared dashboard data
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.