Overview
Symphony-style unattended issue orchestration for Pi. An Elixir/OTP daemon polls a Linear board for eligible issues, creates an isolated workspace per issue, launches a Pi coding worker in RPC mode, and lets it implement autonomously within repo-defined policy.
Adapted from OpenAI's Symphony, but built for Pi's extension model and designed around a repo-owned WORKFLOW.md contract that defines what workers can and can't do.
What it does
- Polls Linear for issues matching configurable filters
- Creates an isolated workspace per issue (git worktree)
- Launches a Pi worker in RPC mode with workspace-guard, proof-of-work, and Linear GraphQL extensions loaded
- Manages the full PR lifecycle — create or reuse PRs, self-review, merge execution
- Captures proof-of-work artifacts and surfaces status through a dashboard and JSON API
- Retries, reconciles, and recovers safely on failure
Architecture
Linear board
↓ poll
Orchestrator (Elixir/OTP)
↓ spawn per issue
Pi worker (RPC mode)
├── workspace-guard extension — enforces WORKFLOW.md policy
├── proof extension — captures artifacts
└── linear-graphql extension — updates issue status
↓
PR created → self-review → merge
The WORKFLOW.md contract is the key design choice. It lives in the repo being worked on and defines the prompt templates, allowed operations, quality bar, and merge policy. The orchestrator doesn't make decisions about implementation — it just enforces the contract and manages lifecycle.
Status
The core orchestration loop, PR automation, and merge execution are implemented. Not yet running in production — I'm using it in bursts for specific repos while I work out the rough edges around retry logic and worker recovery.
Installation
# Clone and set up
git clone https://github.com/tmustier/pi-symphony.git
cd pi-symphony
make setup
make check
See the dev docs for the full local development workflow. There's also a Pi skill for managing symphony runs from within a Pi session.
Why?
The end state I'm working toward is: file well-specified issues in Linear, walk away, come back to reviewed PRs. The hard part isn't getting agents to write code — it's getting them to stay within guardrails, produce evidence of correctness, and handle the messy parts (branch conflicts, flaky tests, partial implementations) without human babysitting.
Symphony is the infrastructure for that. It's not there yet, but the pieces are in place.