I. Overture

You bring the goal.
The factory plays it.

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.

Zero tokens, full pipeline: node bin/orchestra.ts demo
orchestra run

      

II. The film

One goal, start to finish, in 60 seconds.

An animated walkthrough of a single Orchestra run. Scrub, pause, or jump to a chapter.

Animated explainer of an Orchestra run A goal becomes a task graph, workers build in parallel worktrees, a judge checks hidden scenarios, a rejected task is repaired, tasks merge one by one, a librarian records lessons and the evolver promotes a better harness only after a measured gain.

0:00 / 1:00

    III. The ensemble

    Five players. Strict parts. Fresh context every take.

    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.

    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.

    Worker

    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.

    Judge

    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.

    Librarian

    default: sonnet · no tools

    After the run, distills repairs and failures into lessons with cited evidence, scoped by domain. The next run starts smarter.

    Evolver

    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

    Built for unattended work you can still trust.

    Parallel git worktrees

    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.

    Hidden holdout scenarios

    The judge checks work against scenarios workers cannot read. Enforced by the OS sandbox and a guard hook, not just a prompt.

    Self-correcting

    Judge rejections, merge conflicts and red post-merge tests all trigger a repair attempt with notes.

    Serialized merge queue

    Tasks merge one at a time onto orchestra/<run>/integration, with tests after each merge.

    Self-evaluating

    Every session is recorded in a cost ledger. orchestra stats reports first-pass yield, cost per merge and more, per harness version.

    Self-improving, with a seatbelt

    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>.

    Live dashboards

    A full-screen terminal board, a read-only web task board with dependency arrows, and a Claude Code statusline.

    Real isolation, opt-in

    OS sandbox (srt, Claude Code sandbox) or Docker with optional gVisor. Pre-flight self-test aborts if a blocked host is reachable.

    Budgets in code

    Each run has a spend cap (runBudgetUsd, default $20). Tasks stop when it is reached.

    5agent roles with separate context
    0build steps (Node runs TypeScript directly)
    0runtime dependencies
    MITlicensed and open source

    V. Quick start

    From clone to first merge in four steps.

    Needs Node 23.6+, git, and Claude Code with headless auth (orchestra doctor checks it). The demo needs none of the auth.

    1. 1

      Try the demo. No tokens spent.

      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 demo
    2. 2

      Install it

      As 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 link
    3. 3

      Initialise your repo

      Creates .orchestra/, seeds harness v1 and detects your test command.

      cd your-repo
      orchestra init
      orchestra doctor
    4. 4

      Run a goal, then land it

      Results 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>/integration

    VI. Docs

    The score, part by part.

    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.

    VII. How-tos

    How do I…

    …see it work without spending tokens?

    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).

    …review and land what Orchestra built?

    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>/integration
    …run in the background and check in later?
    orchestra run "<goal>" --detach
    orchestra watch     # live board, q to quit
    orchestra status    # one-shot snapshot
    …watch a run in the browser?
    orchestra run "<goal>" --serve   # dashboard for this run
    orchestra serve --port 4317        # or standalone, read-only
    …work safely on a repo I don't fully trust?

    Use 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 --unattended
    …roll back a harness change I don't like?

    Versions are append-only, so any one can be made current again.

    orchestra stats         # compare versions
    orchestra promote v1    # make v1 current again
    …see what Orchestra has learned about my repo?
    orchestra learnings
    orchestra learnings --domain cli
    orchestra learnings --domain global

    Lessons are plain JSON and Markdown in .orchestra/learnings/. You can read and edit them.

    …require a human sign-off on risky tasks?

    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>
    …benchmark whether a setting actually helps?

    The bench suite runs arms × goals × repeats with hidden checks and paired statistics.

    orchestra bench --verify-oracles
    orchestra bench --ablations
    Benchmark guide →

    VIII. Liner notes

    What's proven, and what isn't yet.

    • The full test suite runs against a simulator, no model calls.
    • Real end-to-end runs with the Claude Code sandbox merged 2 of 2 and 3 of 3 tasks, at $3.04 and $4.52.
    • Every new capability is opt-in and off by default.
    • Some sandbox backends (srt, docker, sandbox-exec) have not run a real worker yet.
    • Most research hypotheses are built but unmeasured.
    • No harness variant has been promoted from a real gain yet.

    𝄐 Finale

    Raise the baton.