Planner
default: opus · read-only
Reads the goal, file list, test command and past lessons. Writes the score: a task graph with dependencies and acceptance criteria, plus hidden given/when/then scenarios.
I. Overture
Orchestra is a self-improving multi-agent software factory built on Claude Code. It plans a task graph, builds in parallel git worktrees, judges every change against hidden scenarios, merges through a queue, learns from the run, and evolves its own harness only when a measured eval shows a gain.
node bin/orchestra.ts demo
II. The film
An animated walkthrough of a single Orchestra run. Scrub, pause, or jump to a chapter.
III. The ensemble
Each role is a versioned system prompt. Planners never code. Judges never edit. Durable state lives in git and .orchestra/, never in one long conversation.
default: opus · read-only
Reads the goal, file list, test command and past lessons. Writes the score: a task graph with dependencies and acceptance criteria, plus hidden given/when/then scenarios.
default: sonnet · own worktree
Implements exactly one task in its own git worktree. Sees the goal, its task, the criteria, learnings and any repair notes. Never sees the hidden scenarios.
default: opus · edits discarded
Scores the diff 0 to 1 against acceptance criteria and the hidden scenarios. Returns pass, a summary and issues. A reject becomes repair notes for the next attempt.
default: sonnet · no tools
After the run, distills repairs and failures into lessons with cited evidence, scoped by domain. The next run starts smarter.
default: opus · outside the run loop
Proposes a better harness. A Factory Eval replays past goals against the incumbent. No measured gain, no promotion. It cannot see or edit the frozen scorer.
IV. Features
Every task builds in its own worktree on orchestra/<run>/<task>. Your checkout is never touched. Results land on an integration branch you review and merge yourself.
The judge checks work against scenarios workers cannot read. Enforced by the OS sandbox and a guard hook, not just a prompt.
Judge rejections, merge conflicts and red post-merge tests all trigger a repair attempt with notes.
Tasks merge one at a time onto orchestra/<run>/integration, with tests after each merge.
Every session is recorded in a cost ledger. orchestra stats reports first-pass yield, cost per merge and more, per harness version.
The evolver proposes a harness change. A Factory Eval compares it with the incumbent, scored by a frozen scorer it cannot touch. Promotion needs a measured gain, and rollback is one command: orchestra promote <vN>.
A full-screen terminal board, a read-only web task board with dependency arrows, and a Claude Code statusline.
OS sandbox (srt, Claude Code sandbox) or Docker with optional gVisor. Pre-flight self-test aborts if a blocked host is reachable.
Each run has a spend cap (runBudgetUsd, default $20). Tasks stop when it is reached.
V. Quick start
Needs Node 23.6+, git, and Claude Code with headless auth (orchestra doctor checks it). The demo needs none of the auth.
Runs the full pipeline with a simulated runner in a temporary repo.
git clone https://github.com/deepskpathak/orchestra
cd orchestra
node bin/orchestra.ts demoAs a Claude Code plugin, or as a CLI in any terminal.
# Claude Code plugin
claude plugin marketplace add <path-to-orchestra>
claude plugin install orchestra@orchestra-local
# or plain CLI
cd <path-to-orchestra> && npm linkCreates .orchestra/, seeds harness v1 and detects your test command.
cd your-repo
orchestra init
orchestra doctorResults land on an integration branch. You decide when to merge.
orchestra run "Add a --json flag to the export command"
git log main..orchestra/<run>/integration
git merge orchestra/<run>/integrationVI. Docs
Short versions here. Every tab links to the full page in the repository.
Inside Claude Code, the plugin adds /orchestra:setup, /orchestra:run, /orchestra:serve, /orchestra:status, /orchestra:stats, /orchestra:bench and /orchestra:evolve. Full reference: README › Commands.
holdout/<run>.json outside every worktree..orchestra/worktrees/<run>/<task>, cut from the integration tip.orchestra/<run>/integration and re-runs tests.The frozen scorer grades eval replays for promotion. The integrity monitor inspects worker diffs for grading-surface edits, weakened tests and reward hacks. The evolver can neither see nor edit either one.
goal
│
planner ─► task graph + hidden scenarios
│
├─► worker A (worktree) ─┐
├─► worker B (worktree) ─┼─► tests + judge ─► merge queue ─► integration
└─► worker C (waits A) ──┘ │ fail
└─► repair notes ─► next attempt
│
librarian ─► learnings (read by the next run)
Read the architecture guide →
Role prompts (planner.md, worker.md, judge.md, librarian.md, evolver.md), config.json, and three small optional files: tools.md, style.md, checklist.md.
harness/<vN>/. Versions are append-only.archive.json records parent, rationale, eval score and status.passThreshold never goes down.orchestra stats # health per harness version
orchestra learnings # what this repo taught it
orchestra evolve # propose, eval, maybe promote
orchestra promote v1 # roll back any timeEvolution reruns past goals, so it costs roughly sample × 2 runs. Tune evolve.sample, evolve.every and evolve.candidates.
All four views read the same source of truth (run.json and events.jsonl), so they always agree.
orchestra watchLive board, redraws about every 150 ms. Press q to quit.
orchestra statusSnapshots for scripts and chat. --plain or --color.
orchestra serveRead-only, localhost port 4317 by default. Diffs, logs, past runs.
orchestra statuslineAn always-visible summary inside Claude Code.
Opt in with --sandbox auto|srt|claude or --sandbox docker. Workers can write only to the worktree and temp, cannot read credentials, .env* or the holdout, and reach only the model API plus sandbox.allowedHosts.
.git/hooks and .git/config read-only.--unattended refuses to start without a sandbox backend.src/guard.ts hook is a deny-list backstop that python, node, git remotes or DNS can bypass. Use a sandbox for anything you would not run by hand.
orchestra run "<goal>" --sandbox auto
orchestra run "<goal>" --sandbox docker --gvisor
orchestra run "<goal>" --unattendedTwo plain-JSON layers. Project config (.orchestra/config.json) controls concurrency, tools and budgets. Harness config controls models, retries and thresholds per role, and is versioned and evolvable.
concurrency3Maximum tasks running in parallel.
testCommandautoRun in each worktree and on the integration branch. Verification is much stronger with one.
runBudgetUsd20Spend cap per run.
judgeTiersoffA cheap judge first, escalating to the strong judge near the threshold.
verification.*offJudge panel, agentic judge, acceptance contracts, oracles, mutation score.
sandbox.allowedHosts[]Extra hosts sandboxed workers may reach (the model API is always allowed).
VII. How-tos
Use the demo, or point the simulator at your own repo.
orchestra demo
ORCHESTRA_RUNNER=fake orchestra run "Add a health endpoint"ORCHESTRA_FAKE_STEP_MS sets the simulated step delay (default 150).
Nothing touches your branch. The run prints exact commands when it finishes.
git log main..orchestra/<run>/integration
git diff main...orchestra/<run>/integration
git merge orchestra/<run>/integrationorchestra run "<goal>" --detach
orchestra watch # live board, q to quit
orchestra status # one-shot snapshotorchestra run "<goal>" --serve # dashboard for this run
orchestra serve --port 4317 # or standalone, read-onlyUse the Docker backend (no network by default) and optionally gVisor. Add hosts like a package registry only if needed.
orchestra run "<goal>" --sandbox docker --gvisor --unattendedVersions are append-only, so any one can be made current again.
orchestra stats # compare versions
orchestra promote v1 # make v1 current againorchestra learnings
orchestra learnings --domain cli
orchestra learnings --domain globalLessons are plain JSON and Markdown in .orchestra/learnings/. You can read and edit them.
Turn on oversight.riskTiers. High-risk tasks wait as awaiting_approval until a different person approves, then resume finishes deferred work.
orchestra approve <runId> <taskId> --by <name>
orchestra resume <runId>The bench suite runs arms × goals × repeats with hidden checks and paired statistics.
orchestra bench --verify-oracles
orchestra bench --ablationsVIII. Liner notes
𝄐 Finale