Local-first orchestration runtime for multiple autonomous coding agents (Claude Code, Codex CLI, Gemini CLI, and more) collaborating on one software project.
Project description
Orkestra
Coordinate many agents. Deliver one verified result.
You already use coding agents — Claude Code, OpenAI Codex, Google Antigravity. Orkestra makes two or more of them work on the same project at once, safely: every task runs in its own isolated Git worktree, your test commands are the referee, and nothing lands until a different agent has reviewed it. Your branches are never touched; finished work waits on a side branch until you accept it.
See it in 60 seconds — free
uv tool install 'orkestra-runtime[tui]'
orkestra demo
No agent CLIs, no logins, no tokens spent — scripted fake agents drive the real engine so you can watch the whole lifecycle:
▸ The plan: two independent tasks run in PARALLEL, each in its own
isolated Git worktree, then a third task builds on both.
completed verification passed: PASS (exit 0): test -f feature_a.py
completed review by grace: changes requested (severity medium)
warning review requested changes (cycle 1)
completed review by grace: approved (severity none)
completed task feature-a done (agent ada)
completed all tasks done
▸ Done: 3 tasks planned, isolated, verified, cross-reviewed, integrated.
1 review rejection triggered a repair loop (bounded — never spins forever).
That rejection-then-repair is the point: agents check each other, the kernel keeps score, and you only see verified results.
Use it on your project
One guided command sets up everything — your agents, a quality preset, models and effort, the verification gate, even your spec:
cd my-project
orkestra start # answers a few questions, then (optionally) runs
Pick a preset — Faster, Balanced (recommended), Maximum
quality (which fields two Claude profiles, claude-deep + a fast
sidekick, alongside Codex and Antigravity at high effort) — or go Custom
and choose models per agent from live-discovered lists. If fewer than
two agent CLIs are signed in, start sets up practice mode with
built-in fake agents so the journey works on any machine, free.
Prefer the granular commands? They all still exist:
orkestra init . && orkestra doctor && orkestra run --watch
orkestra models # your lineup: model, effort, provenance
orkestra agents set claude --model sonnet --effort auto
While it runs: orkestra watch (live dashboard from any terminal),
orkestra status, orkestra pause / resume / cancel — state
survives crashes, Ctrl-C, and reboots.
When it finishes:
orkestra review # what was built: status, checks, changes
orkestra accept # bring it into your branch — asks before touching anything
(orkestra diff and orkestra merge remain as advanced aliases.)
If Orkestra needs you (budgets exhausted, a real decision), it stops and explains itself in plain language:
orkestra decisions # what happened, what it means, what to try
orkestra approve # picks the open decision, prompts you, done
orkestra resume
Effort is provider-neutral (auto | low | medium | high | max) and
validated against what each CLI genuinely supports — unsupported levels
are rejected with an explanation, never silently ignored.
Supported agents
| Agent | Adapter | Notes |
|---|---|---|
| Claude Code | claude-code |
Default director; structured output |
| OpenAI Codex CLI | codex-cli |
OS-level sandbox; effort tuning |
Google Antigravity CLI (agy) |
antigravity-cli |
Consumer-account Google adapter; effort tuning |
| Google Gemini CLI | gemini-cli |
API-key / Vertex / Enterprise auth only¹ |
| Anything else | external |
One small JSONL protocol, any language |
| Scripted fake | fake |
Powers the demo, tests, offline mode |
¹ Google moved individual-consumer OAuth to the Antigravity suite in
June 2026, so antigravity-cli is the default Google adapter.
Two agents minimum, no upper bound, no fixed roles: a director agent (default Claude Code, configurable) plans and delegates from measured evidence — including to itself.
What you can rely on
| Guarantee | How |
|---|---|
| Your branches are never modified | agents work in isolation; orkestra accept is the only step that touches your branch, it always asks first, and it refuses incomplete runs |
| Agents can't approve their own work | kernel-enforced implementer ≠ reviewer, across vendors |
| "Tests pass" claims mean nothing | the kernel runs your acceptance commands and reads exit codes itself |
| No surprise costs | per-agent token budgets, rate-limit-aware scheduling, live progress/cost line, everything bounded |
| Crashes lose nothing | SQLite state + idempotent transitions; orkestra resume reconciles and continues |
| Secrets stay out of logs | credential-shape redaction on everything persisted or exported |
| Your credentials are untouched | agents sign in through their own official CLIs; Orkestra never reads token stores |
Elevated modes exist, are loudly named (autonomy = "unsafe-full"), and
are never defaults. Details: docs/SECURITY_MODEL.md.
How it works (the part for skeptics)
Most multi-agent tools hard-code roles or put an LLM in charge of everything. Orkestra separates powers: intelligence proposes, determinism disposes.
- The director agent analyzes your spec, measures the available agents with objective probes, decomposes the work into a dependency graph, and proposes assignments — as schema-validated JSON, never free prose.
- The deterministic kernel (plain Python, no LLM) validates every proposal against policy, owns all state, dispatches work, enforces review independence, runs verification gates, and integrates results.
- Delegation is evidence-based: probe results and every task outcome land in a ledger; assignments re-rank as evidence accumulates. Scores without recorded evidence don't exist.
flowchart LR
D[dispatch] --> A[agent works in<br/>isolated worktree]
A --> C[kernel commits diff]
C --> V{verification gates<br/>your commands}
V -- fail --> R2[bounded retry / fallback agent]
V -- pass --> R{independent review<br/>different agent}
R -- changes requested --> A
R -- approve --> I[no-ff merge to<br/>integration branch]
I -- conflict --> A
flowchart TB
subgraph you [You]
CLI[orkestra CLI / TUI]
SPEC[SPEC.md]
end
subgraph kernel [Deterministic kernel — no LLM]
SCH[Scheduler + task DAG]
POL[Policy engine]
VER[Verification gates]
DB[(SQLite state)]
end
DIR[Director agent]
subgraph agents [Agent adapters]
A1[claude-code]
A2[codex-cli]
A3[antigravity-cli]
A4[external / fake]
end
SPEC --> DIR
CLI --> SCH
DIR -- schema-validated decisions --> POL --> SCH
SCH <--> DB
SCH --> A1 & A2 & A3 & A4
VER --> SCH
More diagrams (lifecycle, capability discovery, human gates): docs/CONCEPTS.md and docs/architecture/ARCHITECTURE.md.
Verified vs. experimental
Verified — 385 tests plus live cross-vendor runs with real Claude Code / Codex / Antigravity CLIs (including a gate-caught silent failure, automatic fallback repair, and cross-vendor review approvals), and dogfooding: Orkestra reviewed its own code, and that review's findings shipped as v0.1.1.
Experimental / limits — Antigravity's JSON output flag is undocumented upstream (adapter has a plain-text fallback); Gemini CLI is auth-limited by Google's consumer migration; the Docker sandbox covers external/fake agents only (vendor CLIs would need your credential stores mounted — refused, see ADR-0009); Windows untested. Providers' plan limits are yours: see docs/PROVIDERS.md, including a disclosed gray area in Antigravity's ToS.
Docs
Install · Quickstart · Concepts · Configuration · CLI · Troubleshooting · FAQ · Adapter protocol · Security model · Threat model · Roadmap
Contributing: CONTRIBUTING.md — kernel stays deterministic, no fixed-agent-count assumptions, evidence over self-report.
License
Claude is a trademark of Anthropic PBC; Codex and ChatGPT of OpenAI; Gemini and Antigravity of Google LLC. Orkestra is independent and not affiliated with or endorsed by any of them.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file orkestra_runtime-0.4.1.tar.gz.
File metadata
- Download URL: orkestra_runtime-0.4.1.tar.gz
- Upload date:
- Size: 280.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a6a90c5454c10007af7e33ed5c39ab9c77999da127e8800b87ff04c337f9338
|
|
| MD5 |
803cf884b36e0b4170d7b006f5c181f9
|
|
| BLAKE2b-256 |
080fc0c46e89ec2340f77f08e7db437c4d225921626128fcb2a427bd7f944ec0
|
Provenance
The following attestation bundles were made for orkestra_runtime-0.4.1.tar.gz:
Publisher:
publish-to-pypi.yml on andyyaro/orkestra
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
orkestra_runtime-0.4.1.tar.gz -
Subject digest:
9a6a90c5454c10007af7e33ed5c39ab9c77999da127e8800b87ff04c337f9338 - Sigstore transparency entry: 2242020841
- Sigstore integration time:
-
Permalink:
andyyaro/orkestra@898b419c586c690a0d6eccb1980db1cdfe1dcaf4 -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/andyyaro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@898b419c586c690a0d6eccb1980db1cdfe1dcaf4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file orkestra_runtime-0.4.1-py3-none-any.whl.
File metadata
- Download URL: orkestra_runtime-0.4.1-py3-none-any.whl
- Upload date:
- Size: 131.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69d8605512b5710d84aad97854cc6ec87f0aa92ffe30be6f933e32c99f7bf215
|
|
| MD5 |
8ce323ff9ddba510f5100ce7de86d71e
|
|
| BLAKE2b-256 |
b1843b8d2d16ef52544a306a84f083374745f2cfa131c0c442bcc3e317e77087
|
Provenance
The following attestation bundles were made for orkestra_runtime-0.4.1-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on andyyaro/orkestra
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
orkestra_runtime-0.4.1-py3-none-any.whl -
Subject digest:
69d8605512b5710d84aad97854cc6ec87f0aa92ffe30be6f933e32c99f7bf215 - Sigstore transparency entry: 2242021239
- Sigstore integration time:
-
Permalink:
andyyaro/orkestra@898b419c586c690a0d6eccb1980db1cdfe1dcaf4 -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/andyyaro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@898b419c586c690a0d6eccb1980db1cdfe1dcaf4 -
Trigger Event:
release
-
Statement type: