Orcho โ Production Harness for Agentic Software Delivery
Orcho is a production harness and control plane for agentic software delivery.
Run one task. Watch Orcho plan, implement, reject false-ready work, repair it, and prove what is ready to deliver.
๐ Documentation: docs.orcho.dev
Three commands to the first result: install, bootstrap, run. The recorded pipeline is deterministic mock mode using the real CLI and lifecycle; output is trimmed for pace. Interactive version with pause and scrub: docs.orcho.dev.
Use the coding agents you already trust. They remain the workers; Orcho owns the delivery protocol around them: plan โ implementation โ review โ repair โ final acceptance.
It is built for work that needs more structure than a single interactive agent session:
- one task or one coordinated change across several repositories;
- explicit phase topology through profiles;
- human/agent review gates with resume and retry;
- durable run state: plans, diffs, findings, metrics, evidence;
- CLI, SDK, and MCP control surfaces.
Which model runs which phase is fully configurable.
Default: Claude (PLAN / BUILD / FIX) + Codex (REVIEW / QA).
Assign registered runtimes such as Claude, a Claude-compatible GLM wrapper,
Codex, or Gemini to any phase via env vars, profiles, or config.local.json.
No engine fork is required for project-specific context. Orcho starts with a
safe generic fallback, and workspace init creates a language-neutral plugin
scaffold. Completing that scaffold for the project is the recommended setup:
it gives Orcho explicit architecture context, file hints, and authoritative
verification policy instead of making every run rediscover them.
Quick start โ your existing repository
With Python 3.12+, pipx, and one supported coding-agent CLI on PATH,
install Orcho once and initialise it from inside the repository you already
have:
pipx install orcho
cd ~/www/my-project
orcho workspace init
orcho run --mock --task "Describe and implement one small change"
orcho status
workspace init does not move, copy, or modify the repository layout. It
registers the canonical project path and stores Orcho's control state in an
external managed workspace. Later CLI commands resolve that workspace from
the current project directory; no --project flag, environment script, or
dedicated parent folder is required.
The mock run exercises the delivery pipeline without calling a model. For a
real run, remove --mock and make sure at least one supported coding-agent CLI
is available on PATH.
Detailed walkthrough: Getting started
Next step โ a shared product workspace
The in-place flow above is the fastest way to start. For a long-lived product, especially one split across repositories such as a backend and frontend, the recommended second step is to keep the related repositories under one intentional root and place the Orcho workspace there too:
~/work/my-product/
โโโ backend/
โโโ frontend/
โโโ workspace-orchestrator/ # created by Orcho
If the repositories already share a parent, use it. If they do not, reorganise them when that is practical; Orcho still accepts absolute paths, so this layout is a best practice rather than a requirement.
Initialise the product root:
orcho workspace init ~/work/my-product
Then either run commands from ~/work/my-product, where Orcho discovers the
workspace automatically, or activate it once in a Unix shell and run from any
directory:
source ~/work/my-product/workspace-orchestrator/orcho-env.sh
This gives mono-project and cross-project runs one place for aliases, policy, history, evidence, and MCP configuration. Cross-project work can then name the registered repositories explicitly:
orcho cross \
--task "Change the API contract and update the frontend" \
--projects backend frontend
workspace init registers the directory names as aliases, so repeating their
absolute paths is unnecessary. --projects remains explicit because one
workspace may contain more repositories than a particular change should touch.
See Connecting your project for the complete shared-workspace setup and configuration precedence.
Install
orcho is the native CLI distribution โ it installs the core CLI and the
MCP server (orcho-mcp). The recommended path is pipx, which keeps the CLI
isolated from any project environment. Pick your OS below, or jump to the
OS-agnostic Docker / direct engine
paths.
Prerequisites on every OS: Python 3.12+, and for real (non---mock) runs at
least one code-agent CLI (claude, codex, or gemini) available to Orcho.
claude-glm is an Orcho runtime identity that launches the installed plain
claude CLI with its GLM-compatible environment; it is not another executable
to install. See the Claude-compatible GLM guide.
pipx ensurepathupdatesPATHfor future shells, not the one you run it in. So afterensurepathyou must open a new terminal beforepipx(and the installedorcho) are onPATHโ this trips up first-time Windows setups in particular. Each block below marks exactly where to reopen the shell.
macOS
brew install pipx # skip if pipx is already installed
pipx ensurepath
# โป reopen your terminal so the installed `orcho` is on PATH:
pipx install orcho
orcho --help
Linux
python3 -m pip install --user pipx # or: sudo apt install pipx / sudo dnf install pipx
python3 -m pipx ensurepath
# โป reopen your terminal so `pipx` (and later `orcho`) are on PATH:
pipx install orcho
orcho --help
Windows
Native Windows is supported and exercised in CI. Install Python 3.12+ and Git for Windows first, then, in PowerShell:
py -m pip install --user pipx
py -m pipx ensurepath
# โป IMPORTANT: close this window and open a NEW PowerShell now โ `ensurepath`
# only updates PATH for new shells, so `pipx` is not found until you reopen.
pipx install orcho
orcho --help
Prefer a Unix shell? Install into WSL2 using the Linux steps above. Full Windows notes โ agent-CLI paths, WSL2 layout, and pipe-based output streaming โ are in docs/expert/05_windows.md.
Docker
OS-agnostic. Use Docker to try Orcho without installing its Python package or agent CLIs on the host:
docker pull ghcr.io/symphos-ai/orcho
alias orcho='docker run --rm -it \
-v "$PWD":/workspace \
-v ~/.orcho-auth:/agent-auth:ro \
ghcr.io/symphos-ai/orcho orcho'
orcho run --project /workspace --task "Add input validation to the login endpoint."
The image includes the core CLI and MCP server. See
orcho Docker docs
for credential bootstrap, MCP stdio setup, and custom project toolchains.
Direct engine dependency
OS-agnostic. Use pip when you intentionally want orcho-core in the active
virtualenv, CI image, devcontainer, or custom image:
python -m pip install orcho-core
The orcho distribution depends on orcho-core; most CLI users should start
with orcho, while integrators can depend on orcho-core directly. The
orcho[mcp]/orcho[all] extras remain as no-op back-compat aliases.
For source-checkout setup, tests, and contribution workflow, see CONTRIBUTING.md.
Try the golden mock demo
The fastest zero-API proof is the single-project CLI demo. It creates a disposable git-backed fixture, runs the full mock pipeline, rejects one false-ready implementation, repairs it, and writes the final evidence.
For an installed CLI, use the packaged demo bootstrap:
orcho demos bootstrap golden-api
orcho demos install golden-api is accepted as the same operation.
From an existing source checkout, run the shell bootstrap script directly:
examples/scripts/bootstrap_demo_1a.sh
Do not clone this repository next to a pipx install orcho only to obtain the
demo assets; that creates two Orcho copies on the machine and makes it too easy
to confuse the installed CLI with source-checkout code.
Then paste the printed orcho run ... --mock command and inspect:
orcho evidence --workspace /tmp/orcho_demo_1a/workspace-orchestrator
orcho status --workspace /tmp/orcho_demo_1a/workspace-orchestrator
orcho diff <run-id> --stat --workspace /tmp/orcho_demo_1a/workspace-orchestrator
Full walkthrough: docs/demos/demo-1a-single-project-cli.md. For QA, release smokes, SDK checks, and repeatable recordings, see the deterministic mock harness guide.
Go deeper
The getting-started guide covers platform prerequisites, MCP client setup, real provider runs, evidence inspection, and the optional shared-root layout for intentional cross-project work.
How it works
Task
โ Claude [PLAN] writes the implementation plan
โ Codex [validate_plan] audits the plan
โ Claude [BUILD] implements the code
โ Codex [REVIEW] reviews the diff
โ Claude [FIX] fixes the findings
โ Codex [final_acceptance] final verdict
Core commands
# One project
cd ~/my-project
orcho run --task "Add input validation to /api/login"
# Several projects at once
orcho cross --task "Add rate limiting: API + client" \
--projects api:~/api client:~/client
# No API calls (test)
orcho run --mock --task "..." --project ~/my-project
# Plan only (no code)
orcho run --profile planning --task "..." --project ~/my-project
# Resume an interrupted run
orcho run --resume 20260503_104135
# Status, history, metrics
orcho status | orcho history | orcho metrics
Configure the generated project plugin
workspace init prints the path to a generated plugin scaffold and its matching
agent-rule templates. The scaffold is deliberately inert: init has not
inspected the repository deeply enough to invent commands, environments, or
delivery policy safely.
Generic mode is sufficient for the first smoke run. For sustained use, copy
the generated scaffold to your-project/.orcho/multiagent/plugin.py, merge the
generated agent rules into the project's root instructions, and complete the
configuration from facts found in the repository:
If the project already has tests, linting, build checks, and CI, do not invent another quality system. Reuse those project-native commands in the plugin. CI remains the independent repository gate; the plugin lets Orcho select and run the relevant proof inside the task lifecycle, route a fixable failure back to repair, and attach durable receipts to readiness before delivery. It also keeps broad checks out of task prose, where planning and implementation agents can otherwise run them redundantly.
PLUGIN = {
"name": "My Project",
"language": "Python 3.12",
"architecture": "REST API. Routes: app/routes/, services: app/services/.",
"file_hints": ["app/routes/", "app/services/", "tests/"],
"verification_envs": {"project": {"python": "python"}},
"verification": {
"default_env": "project",
"commands": {"lint": {"run": ["python", "-m", "ruff", "check", "."], "cost": "fast"}},
"gate_sets": {"hygiene": {"commands": ["lint"], "default_policy": "require"}},
"selection": [{"always": ["hygiene"]}],
"schedule": [{"after_phase": "implement", "gate_sets": ["hygiene"], "action": "repair_loop"}],
},
}
This declares a command, selects it, gives it a scheduled identity, lets Orcho
execute it, records an immutable receipt, and uses that receipt for readiness.
Cost is evidence metadata: fast is bounded deterministic local feedback,
moderate needs more setup or time, slow is broad or expensive, and
unknown has no reliable predictable cost evidence. It never shortcuts
selection, execution, policy, or action. See the practical scheduled
verification guide. For worked
Python, PHP/Docker, and TypeScript/browser portfolios, see the public
quality gate strategy.
Without a configured project plugin, Orcho still runs, but it falls back to
generic context and has no project-owned scheduled verification contract.
For the full workflowโincluding read-only fine-tune suggestions,
agent-assisted repository discovery, and the engineer approval boundaryโsee
Configure the generated plugin scaffold.
Package layout
orcho-core/
โโโ cli/ โ CLI facade (orcho run / cross / statusโฆ)
โโโ sdk/ โ typed headless API for tools and embedders
โโโ pipeline/
โ โโโ project_orchestrator.py โ single-project pipeline
โ โโโ cross_project/ โ cross-project planning, dispatch, gates
โ โโโ runtime/ โ profiles, steps, state, runner
โ โโโ prompts/ โ composable prompt parts and contracts
โ โโโ control/ โ handoff, resume, operator decisions
โ โโโ engine/ โ sessions, logging, worktrees, run diff
โ โโโ evidence/ โ evidence bundle and renderers
โ โโโ profiles/ โ profile loading and validation
โ โโโ sandbox/ โ command isolation backends
โ โโโ skills/ โ skill discovery and injection
โ โโโ plugins.py โ PluginConfig + load_plugin()
โ โโโ checkpoint.py โ SQLite store (--resume)
โโโ core/
โ โโโ _prompts/ โ core prompt templates
โ โโโ _config/ โ packaged defaults
โ โโโ contracts/ โ plan/review/release schemas
โ โโโ infra/ โ config, platform, binary discovery
โ โโโ observability/ โ logging, metrics, trace
โ โโโ io/ โ retry, git helpers, prompt loader
โ โโโ context/ โ codemap builder (optional)
โโโ agents/ โ runtimes, registry, stream parsers
โโโ tests/ โ unit, integration, acceptance, SDK contract tests
Documentation
The user-facing portal is docs.orcho.dev โ start there.
The in-repo docs below are the contributor & deep reference: the canonical engineering contracts the portal links into. Ordered from general to specific.
| Level | For whom | Link |
|---|---|---|
| User | You want to use the system | docs/user/ |
| Expert | You tune prompts, plugins, and models | docs/expert/ |
| Integrator | You author profiles, gates, and adapters | docs/guides/ |
| Reference | Exact schemas and registries | docs/reference/ |
| Creator | You develop the engine itself | docs/creator/ |
Full index: docs/README.md.
Testing
pytest tests/ -q
pytest tests/unit/ -v
pytest tests/integration/ -v
Tests must not call real models. Use MockAgentProvider for
pipeline-flow scenarios.
Key principles
- Zero hardcoding โ all project context comes through
plugin.py - DRY engine โ
pipeline/engine/is shared by both orchestrators - 3-level prompts โ project โ workspace โ core (always overridable)
- Discoverable extension points โ
workspace initcreates safe.orcho/guides and templates without overwriting local edits - Resumable โ
--resumecontinues from the last checkpoint - Cross-platform โ macOS, Linux, Windows (native + WSL2)
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 orcho_core-0.8.0.tar.gz.
File metadata
- Download URL: orcho_core-0.8.0.tar.gz
- Upload date:
- Size: 1.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e99872523403f8692df6843da5e9e99c480a9e436b8bffb7e8a5e7aa696c663c
|
|
| MD5 |
04dab132f330b655ab041eda3f3eebed
|
|
| BLAKE2b-256 |
56041300593a2a42621ea9566595a22faa4deaac6f7393f95d2c24fc6680be6d
|
Provenance
The following attestation bundles were made for orcho_core-0.8.0.tar.gz:
Publisher:
release.yml on symphos-ai/orcho-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
orcho_core-0.8.0.tar.gz -
Subject digest:
e99872523403f8692df6843da5e9e99c480a9e436b8bffb7e8a5e7aa696c663c - Sigstore transparency entry: 2522701183
- Sigstore integration time:
-
Permalink:
symphos-ai/orcho-core@cf6db1f0e40661ac9bd634d68be28e5bb49550bc -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/symphos-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cf6db1f0e40661ac9bd634d68be28e5bb49550bc -
Trigger Event:
push
-
Statement type:
File details
Details for the file orcho_core-0.8.0-py3-none-any.whl.
File metadata
- Download URL: orcho_core-0.8.0-py3-none-any.whl
- Upload date:
- Size: 2.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea64a26ca9513fd9ec77f7a9c9b050d4767525eec7d0b32cf90a9ee96dcf850c
|
|
| MD5 |
4c7ce7f92a76fbfde5ee9fbe09d4857e
|
|
| BLAKE2b-256 |
a046cba05e4a47f09c237631e6a5df0ddbc900f0f200be3e32f71ffd4214bba2
|
Provenance
The following attestation bundles were made for orcho_core-0.8.0-py3-none-any.whl:
Publisher:
release.yml on symphos-ai/orcho-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
orcho_core-0.8.0-py3-none-any.whl -
Subject digest:
ea64a26ca9513fd9ec77f7a9c9b050d4767525eec7d0b32cf90a9ee96dcf850c - Sigstore transparency entry: 2522701317
- Sigstore integration time:
-
Permalink:
symphos-ai/orcho-core@cf6db1f0e40661ac9bd634d68be28e5bb49550bc -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/symphos-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cf6db1f0e40661ac9bd634d68be28e5bb49550bc -
Trigger Event:
push
-
Statement type: