Symphony Setup
Set up
Symphony
— OpenAI's orchestrator that turns Linear tickets into pull requests via autonomous Codex agents.
Preflight checks
Run these checks first and
stop if any fail
— resolve before continuing:
codex
— run
codex --version
. Must be installed and authenticated.
mise
— run
mise --version
. Needed for Elixir/Erlang version management.
gh
— run
gh auth status
. Must be installed AND authenticated. Agents use
gh
to create PRs and close orphaned PRs. Silent failure without it.
LINEAR_API_KEY
— run
echo $LINEAR_API_KEY
(or
echo $LINEAR_API_KEY
in fish). Must be set in the current shell and persist across sessions (shell config, not just
export
).
Git clone auth
— the
after_create
hook runs
git clone
unattended. Verify the user's repo clone URL works non-interactively:
git clone --depth 1
npx skills add odysseus0/symphony -a codex -s linear land commit push pull debug --copy -y The --copy flag is required — symlinks would break in workspace clones. The -s flag excludes symphony-setup (meta-skill, not needed by workers). elixir/WORKFLOW.md — copy the entire file including the markdown body. The prompt body contains the state machine, planning protocol, and validation strategy that makes agents effective. Patch WORKFLOW.md frontmatter Two changes: 1. Project slug tracker : project_slug : "
" 2. after_create hook Replace entirely — the default clones the Symphony repo itself: hooks : after_create : | git clone --depth 1 . Leave everything else as-is. Sandbox, approval_policy, polling interval, and concurrency settings all have good defaults in the fork. App launch skill (if applicable) If the user's project has a UI or app that needs runtime testing, create .agents/skills/launch-app/SKILL.md in their repo:
name : launch - app description : Launch the app for runtime validation and testing.
Launch App < launch command and any setup steps specific to the user's project
< how to verify the app is running
< how to connect for testing — e.g., agent-browser URL, localhost port
The WORKFLOW.md prompt tells agents to "run runtime validation" for app-touching changes. Without this skill, agents won't know how to launch the app. For non-app repos (libraries, CLIs, APIs), skip this. Commit and push Commit .agents/skills/ , WORKFLOW.md , and launch-app skill (if created) to the user's repo and push. Push is critical — agents clone from the remote, so unpushed changes are invisible to workers. After pushing, verify: git log origin/$(git branch --show-current) --oneline -1 should show your commit. Linear custom states The workflow requires three non-standard states: Rework , Human Review , Merging (all type started ). During the auto-check in repo preparation, if any are missing, create them via the API using workflowStateCreate (see references/linear-graphql.md ). Confirm with the user before creating. No manual Linear UI steps needed. Pre-launch: check active tickets Before starting Symphony, query the project for all tickets in active states ( Todo , In Progress , Rework ). Symphony will immediately dispatch agents for every active ticket — not just new ones. List them for the user and confirm they're ready. If any tickets shouldn't be worked on yet, offer to move them to Backlog via issueUpdate before launching. Run cd < symphony-path
/elixir mise exec -- ./bin/symphony < repo-path
/WORKFLOW.md \ --i-understand-that-this-will-be-running-without-the-usual-guardrails The guardrails flag is required — Symphony runs Codex agents with danger-full-access sandboxing. Add --port
to enable the Phoenix web dashboard. LINEAR_API_KEY must be available in the shell environment when starting Symphony. If it's managed by sops-nix or similar, ensure it's sourced before running. Verify Have the user push a test ticket to Todo in Linear. Watch for the first worker to claim it. If it fails, run this checklist: LINEAR_API_KEY available in the shell running Symphony? codex authenticated? gh auth status passing? Repo clone URL works non-interactively? .agents/skills/ and WORKFLOW.md pushed to remote? Custom Linear states (Rework, Human Review, Merging) added? Getting started after setup Once Symphony is running, help the user with their first workflows: Break down a feature into tickets The user has a big feature idea. Help them break it into Linear tickets using linear_graphql (see the linear skill's SKILL.md for exact mutation patterns). For each ticket: Clear title and description with acceptance criteria Set dependencies between tickets using issueRelationCreate (type: blocks ) Assign to the Symphony project so agents can pick them up Start with tickets that have no blockers in Todo First run Push a few tickets to Todo and watch. Walk the user through what to expect: Agents claim tickets within seconds (polling interval) Each agent writes a plan as a Linear comment before implementing PRs appear on GitHub with the symphony label The Linear board updates as agents move tickets through states Tune on the fly WORKFLOW.md hot-reloads within ~1 second — no restart needed. Common adjustments: agent.max_concurrent_agents — scale up/down based on API limits or repo complexity agent.max_turns — increase for complex tickets, decrease to limit token spend polling.interval_ms — how often Symphony checks for new/changed tickets