Symphony
TL;DR
Symphony is an Apache-2.0 project from OpenAI: a language-agnostic spec plus an experimental Elixir reference implementation that polls an issue tracker, makes a workspace per issue and runs Codex in app-server mode. The README calls it a low-key engineering preview for trusted environments. It suits teams that already manage work in Linear or GitHub Issues.
Key facts
| Type | Orchestrator |
|---|---|
| Languages / SDKs | Elixir |
| License | Apache-2.0 |
| Pricing model | Open source, free |
| Orchestration pattern | Other |
| GitHub stars | 27,483 (as of 2026-09-30) |
| GitHub forks | 2,849 |
| Last push | 2026-09-15 |
| Latest release | v0.0.3 |
| Repository | openai/symphony |
| Website | openai.com |
| Documentation | github.com |
| Last verified | 2026-09-30 |
Key features
- Polls a configured tracker for candidate issues; the Elixir implementation includes adapters for Linear, GitHub Issues, Jira Cloud, Asana and GitLab. (source)
- Creates a workspace directory per issue and starts
codex app-serverinside it, sending a workflow prompt and continuing turns until the issue leaves its active state. (source) WORKFLOW.mdkeeps policy in the repository: YAML front matter for tracker, workspace, hooks, concurrency and Codex settings, plus the Markdown prompt. (source)- The spec calls for bounded-concurrency dispatch, exponential backoff on transient failures and restart recovery from tracker and filesystem state without a database. (source)
- Provider-native tools (
linear_graphql,github_api,jira_rest,asana_api,gitlab_api) run host-side with the tracker credential, which is stripped from the Codex child process. (source) - An optional Phoenix LiveView dashboard and JSON API show runtime state, including issues blocked waiting for operator input. (source)
- The bundled workflow uses Linear states such as Human Review, Merging and Rework so a person approves before an agent lands the PR. (source)
Architecture and orchestration pattern
Pattern: Other
Symphony is a long-running service, not a chat tool. The specification (Draft v1, language-agnostic) defines an orchestrator that reads work from an issue tracker, keeps claim and retry state, creates an isolated workspace for each issue and runs one coding-agent session per issue. Ticket writes such as state changes, comments and PR links are normally done by the agent through tracker tools that Symphony executes with the configured credential.
The Elixir/OTP reference implementation launches Codex in app-server mode with a workflow prompt. Workspaces are directories under workspace.root, bootstrapped by a hooks.after_create script (the example runs git clone), so isolation is per-issue checkouts plus Codex's sandbox settings. If an issue reaches a terminal state, the agent is stopped and its workspaces are cleaned up.
State lives in the running orchestrator and in the tracker: blocked entries are kept in memory only and are cleared on restart, after which active issues can be dispatched again. Coordination between agents is indirect, through the tracker's states and comments.
Human in the loop
The bundled workflow moves a ticket to Human Review when a PR is attached and validated, waits for a person, and only runs the land skill after the person moves it to Merging; Rework returns it to the agent. Codex approval defaults are strict: the Elixir implementation rejects sandbox approvals, rule approvals and MCP elicitations unless configured otherwise, and if Codex reports that input or approval is required the issue is shown as blocked in the dashboard and API. Moving an issue to a terminal state stops its agent.
Harnesses it can drive
- Codex (evidence)
Protocols
| Protocol | Support | Note |
|---|---|---|
| MCP | Unknown | No MCP client or server is documented. Related mentions only: the bundled WORKFLOW.md lets the agent use a configured Linear MCP server or the injected linear_graphql tool, and the Elixir app-server code treats Codex MCP elicitation requests as needing operator input. |
| A2A | Unknown | Searched the README, SPEC.md, Elixir README and file names for 'a2a' and 'agent2agent'; nothing found. |
| AG-UI | Unknown | Searched the README, SPEC.md and Elixir README for 'ag-ui'; nothing found. |
Best for
- Teams whose work is already ticketed in Linear, GitHub Issues, Jira, Asana or GitLab and who want Codex to pick up tickets automatically. (shortlist)
- Running several ticket-scoped Codex sessions concurrently with a human approval state before merge. (shortlist)
- Teams that want a written spec to reimplement in their own language and harden themselves. (shortlist)
Not for
- Production use as-is: the Elixir README calls it prototype software for evaluation, and the top-level README says it is for trusted environments.
- Teams using Claude Code, OpenCode or other agents: the reference implementation launches Codex only.
- Interactive, hands-on pairing with an agent; Symphony is a background scheduler driven by tracker states.
Quickstart
git clone https://github.com/openai/symphony
cd symphony/elixir
mise trust
mise install
mise exec -- mix setup
mise exec -- mix build
mise exec -- ./bin/symphony ./WORKFLOW.md # Prerequisites: mise (Elixir/Erlang), codex, git, and a tracker token
export LINEAR_API_KEY=... # Linear personal API key
git clone https://github.com/openai/symphony
cd symphony/elixir
mise trust && mise install
mise exec -- mix setup && mise exec -- mix build
# WORKFLOW.md (copied into your repo) starts with YAML front matter like:
# tracker: {kind: linear, provider: {project_slug: "..."}}
# workspace: {root: ~/code/workspaces}
# hooks: {after_create: "git clone git@github.com:your-org/your-repo.git ."}
# agent: {max_concurrent_agents: 10, max_turns: 20}
# codex: {command: codex app-server}
mise exec -- ./bin/symphony ./WORKFLOW.md --port 4000 # --port enables the dashboard
Common pitfalls
- Symphony Elixir is prototype software for evaluation; the README recommends implementing your own hardened version from SPEC.md, and the top-level README says trusted environments only.
- The bundled workflow depends on non-standard Linear statuses (Rework, Human Review, Merging) that you must create in Team Settings.
- The
codex,gitand tracker credentials must be present on the host, including with the Burrito executables. - Workflows that run package managers need
networkAccess: trueincodex.turn_sandbox_policy, otherwise the Codex turn sandbox may deny DNS. - If
WORKFLOW.mdis missing or has invalid YAML at startup, Symphony does not boot; a later invalid reload keeps the last good workflow. - Blocked entries are in memory only, so a restart can make still-active issues dispatch candidates again.
Pros
- Manages work at the ticket level: agents get their own workspace per issue and proof of work is expected before a human approves. (source)
- Language-agnostic spec lets teams write their own implementation, alongside the Elixir reference. (source)
- Safer Codex defaults: workspace-write sandbox and approval requests rejected unless configured. (source)
- Five tracker adapters, with tracker credentials kept out of the Codex child process. (source)
- Apache-2.0 licensed under the openai organization, with Burrito executables for macOS and Linux (arm64 and x86_64). (source)
Cons
- OpenAI calls it a low-key engineering preview for trusted environments, and the Elixir implementation prototype software for evaluation only. (source)
- The reference implementation is tied to Codex app-server; other agents need your own implementation. (source)
- Tracker tools run with the configured token's full permissions;
project_slugscopes scheduling reads, not raw tool calls. (source) - Blocked-issue state is memory-only and cleared on restart. (source)
- Release versions are 0.0.x (v0.0.3 on 2026-09-15), so interfaces may change. (source)
Alternatives
FAQ
Does Symphony support MCP?
No MCP client or server is documented for Symphony itself, so the record marks it unknown. The bundled workflow lets the agent use a Linear MCP server if one is configured, and MCP elicitation requests from Codex are treated as needing operator input.
Which coding agents does it run?
The Elixir reference implementation starts Codex in app-server mode. The spec describes a generic coding-agent session, so other agents would need your own implementation.
Is Symphony free?
The code is Apache-2.0 and no paid product is documented. Running it uses your own Codex and tracker accounts.
Does it use git worktrees?
Not in the docs read. It creates a workspace directory per issue and the example hook runs git clone into it; the repository's .codex/worktree_init.sh only sets up the Elixir project for development.
Is it ready for production?
OpenAI describes it as a low-key engineering preview for trusted environments, and the Elixir README recommends implementing your own hardened version from SPEC.md.