OpenAI Built Its Agent Orchestrator in Elixir. Here’s Why That Makes Sense.

Symphony turns Linear tickets into isolated, autonomous implementation runs with rich proof-of-work and safe landing. The surprising infrastructure bet that treats agent orchestration as a supervision problem.

openai/symphony • ~12.6k stars • Engineering preview • 14 min read

Key Takeaways
A vast conductor's podium overlooking dozens of small, identical mechanical workshops. Each workshop has a tiny agent figure working inside a glass-walled booth representing an isolated worktree. A single human figure at the podium holds a Linear ticket like a baton. Thin supervision threads connect only to the podium.
A conductor oversees isolated agent workshops from a podium, connected only by thin supervision threads.

Why OpenAI Chose Elixir for an AI Agent System

Most AI agent tooling lives in Python or TypeScript. OpenAI took a different path. Its reference implementation of Symphony is written almost entirely in Elixir.

This is not a gimmick. Orchestrating thousands of long-running, autonomous "implementation runs" — each tied to a Linear ticket, executing in isolation, producing rich artifacts, and landing safely — is fundamentally an operating systems problem.

The BEAM virtual machine and OTP supervision trees excel at exactly this: fault-tolerant, concurrent, long-lived processes with strong isolation guarantees.

95%+
Elixir
12.6k
Stars
~630k
Lines of code
1
Primary contributor

"Symphony turns project work into isolated, autonomous implementation runs, allowing teams to manage work instead of supervising coding agents."

— openai/symphony README
Extreme close-up of a single gear in a massive clockwork mechanism labeled Orchestrator. The gear has a thin OTP supervision tree etched on it. One arm is cracked but contained by a firewall line while neighboring arms continue turning smoothly. Metaphor for fault tolerance and isolation.
A cracked gear in the orchestrator's clockwork remains contained while others continue uninterrupted.

The Paradigm Shift: From Supervising Agents to Managing Work

Symphony builds directly on OpenAI's earlier "Harness Engineering" philosophy.

In February 2026, Ryan Lopopolo described building a million-line product with zero manually written code. The team's role shifted from writing code to designing environments that agents could successfully navigate.

"Humans steer. Agents execute."

With Symphony, that philosophy reaches its logical conclusion. Engineers no longer micromanage prompts or watch individual Codex sessions. They create high-level work items in Linear. The system takes over.

Inside an Implementation Run

A typical flow begins when the orchestrator polls Linear for new or updated tickets.

It spawns an isolated workspace using a Git worktree. An agent runner launches the Codex-powered agent inside this environment. The agent receives its instructions through declarative skill definitions and a WORKFLOW.md policy file.

The agent works, generates artifacts including walkthrough videos, complexity analysis, CI results, and self-review feedback. Status updates flow through the Phoenix LiveView dashboard. Once complete, a human reviews the proof-of-work package. Approved changes land safely through controlled merge steps.

The Clever Parts: Isolation, Skills, and Observability

Instead of heavy containerization, Symphony uses lightweight Git worktrees for isolation. A dedicated path_safety.ex module carefully validates all file system operations.

Agent capabilities are defined declaratively in .codex/skills/. Each skill ships with a SKILL.md file that teaches the LLM how to behave. This prompt-based capability injection keeps the core orchestrator clean.

defmodule SymphonyElixir.Codex.Skill do
  # Skills loaded from .codex/skills/*/SKILL.md
  # Used to inject capabilities into the agent at runtime
end

Token accounting, exponential backoff, and real-time observability are first-class concerns. The Phoenix LiveView dashboard provides immediate visibility without complex frontend state management.

Split composition. Left side shows chaotic desk with a human frantically prompting multiple robot coders at once. Right side shows a calm engineer at a large Linear board, with autonomous pods in the background completing tickets and dropping neatly packaged PRs into an inbox. Clear before/after contrast.
Before: frantic agent supervision. After: calm management of work items.

How Symphony Compares

Project Language Isolation Tracker Proof-of-Work Harness Required
Symphony Elixir (OTP) Git worktrees + path safety Linear (native) Rich (video, CI, review, complexity) Yes (opinionated)
ComposioHQ/agent-orchestrator TypeScript Git worktrees, Docker, k8s Multiple Moderate No
Aperant TypeScript Session-based Kanban-style Basic No
GitHub Copilot Agent Proprietary GitHub Actions Jira / Issues Platform-dependent Partial

Symphony stands apart through its deliberate infrastructure choices and tight coupling to mature harness engineering practices. It is less general-purpose but more production-minded in its assumptions about the surrounding codebase.

What It Means for Engineering Organizations

Symphony is still an engineering preview. It works best for teams that have already invested in agent-legible codebases with strong testing, CI, and invariants.

For those teams, it offers a glimpse of the future: engineers as high-level directors of work rather than supervisors of individual coding sessions.

The SPEC.md makes the system portable. Community ports are already appearing. The real signal is that reliable agent orchestration requires serious infrastructure thinking — the kind traditionally found in telecom and distributed systems.

"The primary job of our engineering team became enabling the agents to do useful work."

— Ryan Lopopolo, OpenAI