One terminal.
One Kanban board.
Four AI coding agents.
Codex · Claude Code · Gemini · Pi — pick per ticket, run in parallel inside isolated git worktrees, watch live in a Jira-style TUI you never have to leave your terminal for.
› columns are your tracker's states · cards show active agent, turn count, last event, accumulated tokens · ● running, ↻ retry queued, ✓ done.
> Why Symphony
A thin layer on top of OpenAI's battle-tested Symphony orchestrator — with four agents, a Jira-style TUI, and operator-grade tooling.
No vendor lock-in
Swap Codex ↔ Claude Code ↔ Gemini ↔ Pi with one YAML line. New agents drop in behind a thin AgentBackend Protocol — four steps, no orchestrator changes.
Live progress
Turn count, last event, accumulated tokens, and rate-limit headroom for every running card. No more "is it stuck or just thinking?" — and no SaaS dashboard to log into.
Parallel by default
Every ticket gets its own git worktree workspace. Agents can't step on each other. Headless mode mirrors progress to a Markdown file you can tail -F.
No SaaS, no API key to try
File-based Markdown Kanban means tickets live in git next to your code. Linear is supported as a drop-in tracker — you don't need it.
Battle-tested core
Forked from OpenAI's Symphony reference implementation. Orchestrator, scheduler, retry, workspace lifecycle, and prompt renderer are all upstream.
Operator-grade tooling
symphony doctor catches the five most common first-run failures in one pass. symphony service runs the orchestrator as a managed background daemon. A web viewer adds Pause / Resume.
> Try it in 60 seconds
No AI CLI required — Symphony ships a fake-agent demo so you can see the Kanban move before installing anything else.
-
01
Install
One command. Isolated venv via
pipx; nothing leaks into your global Python. -
02
Launch the TUI
Point Symphony at any
WORKFLOW.md. Columns become Kanban lanes, cards become tickets. -
03
Watch agents pick up tickets
Move a card to In Progress; the configured agent claims it, runs in its own git worktree, and streams turn counts + tokens live.
# 1. install (isolated, no global Python pollution) $ pipx install oh-my-symphony # 2. (optional) run the built-in demo with a fake agent $ symphony tui ./examples/WORKFLOW.fake.md # 3. then point it at your real workflow $ symphony tui ./WORKFLOW.md # 4. health-check your install (catches the 5 most common first-run failures) $ symphony doctor
> Agent matrix
Each backend is a thin adapter over the agent's official CLI. Set agent.kind in your WORKFLOW.md — or mix backends per ticket.
| Agent | CLI invocation | Transport | Resume | Best for |
|---|---|---|---|---|
| Codex | codex app-server | JSON-RPC stdio · multi-turn | native | Original Symphony agent · long codebase sessions |
| Claude Code | claude -p --output-format stream-json | NDJSON events · per-turn subprocess | --resume | Complex multi-file refactors · long planning |
| Gemini | gemini -p "" | one-shot per turn · stdin → stdout | stateless | Quick edits · large-context one-shots |
| Pi | pi --mode json -p "" | JSONL events · per-turn subprocess | --session | Multi-backend (Anthropic / OpenAI / Gemini / Bedrock under one CLI) |
# pick an agent — one YAML line agent: kind: claude_code # or: codex | gemini | pi model: claude-sonnet-4-6 # or mix per ticket via card front-matter
> Who this is for
Solo devs
Running unattended overnight refactors across dozens of tickets while you sleep. macOS keep-awake stops the lock screen from killing your pipeline.
Teams
Parallelizing bug fixes, doc updates, or migration tickets across multiple coding agents simultaneously — without juggling four chat windows.
Researchers & reviewers
Comparing how Codex, Claude Code, Gemini, and Pi tackle the same task side by side — identical prompts, identical workspaces.
Stop juggling AI coding CLIs.
One terminal. One Kanban. Four agents working in parallel — visible, isolated, and yours.