
I pushed 50 tickets to Linear before bed — a tech debt rewrite of an Electron app. Woke up to 30 merged PRs. 7,000 net lines deleted. Two days later, nothing has broken.
This is Symphony — OpenAI's open-source orchestrator for Codex agents. Point it at a Linear board and it turns tickets into pull requests.
I didn't even know how to properly test an Electron app. The agents figured it out — attaching to the running app over CDP via agent-browser, validating changes end-to-end, entirely self-directed. I'm learning how to test my own app by reading their logs.
Set it up
I maintain a fork that's easier to get started with (changes I made listed in README). From your project repo, run:
https://linear.app/docs/mcp
Then tell your agent: "set up Symphony for my repo."
For manual setup, follow the skill instruction manually.
The Linear board is your control surface
Everything happens through Linear. The board is the interface.
https://github.com/odysseus0/symphony
Push a ticket to Todo — an idle agent claims it within seconds. Move a ticket to Rework with review comments — the agent picks it back up and addresses feedback.
Start with a big idea, not individual tickets
If you already have a well-organized Linear board, point Symphony at it and go. If you don't, have your agent play tech lead — describe the feature and let it decompose the work into tickets with dependencies mapped out.
Give your agent access to Linear (official MCP setup) and hand it the big picture:
Break this into tickets in project [slug]. Scope each ticket to one reviewable PR. Include acceptance criteria. Set blocking relationships where order matters.
Push the batch to Todo and let Symphony parallelize across everything that isn't blocked.
My 50-ticket Electron rewrite started as one conversation: "here's the tech debt, here's what I want the codebase to look like after." The agent decomposed it, I reviewed the tickets, adjusted a few, and pushed them to Todo.
What to expect
Each worker gets its own workspace clone, reads the ticket, writes a plan as a Linear comment, implements, validates, and opens a PR.
npx skills add odysseus0/symphony -s symphony-setup -y
The planning step is worth watching. Before writing code, the agent posts its plan as a Linear comment. Catch bad plans before they become bad PRs. It will check off todos it is done during the run, and give you a demo video at the end!
One of my tickets asked for a ChatDisplay refactor — no mention of testing. The agent attached to the running Electron app over CDP via agent-browser, injected a temporary probe to force a render error, verified the failure was contained, clicked through recovery, screenshotted both states, and removed the probe. End-to-end validation of a UI change, entirely self-directed.
https://github.com/odysseus0/symphony/blob/main/.agents/skills/symphony-setup/SKILL.md
Tune on the fly
Cancel a ticket — the agent stops on the next poll. Move something back to Backlog to hold it. Push a batch to Todo to dispatch.
WORKFLOW.md hot-reloads within a second — no restart needed. Common adjustments:
-
agent.max_concurrent_agents — start at 2-3, scale up as you trust it
-
agent.max_turns — turn limit per ticket. Higher for complex work, lower to cap token spend.
What's actually doing the work
Most of what makes this effective isn't the orchestrator — it's the prompt in WORKFLOW.md. Symphony is plumbing: poll Linear, dispatch workers, manage slots. The prompt teaches the agent how to plan, test, handle review feedback, and constrain scope.
I'll dig into that prompt in a follow-up.



Link: http://x.com/i/article/2031521021342388224