a cross-provider orchestrator for AI coding agents, built on herdr. run, coordinate, and schedule agents (claude, codex, …) as managed, addressable processes — each lives at a path, settles on a turn boundary, and cleans up on a policy you choose. drive it from the CLI, the TypeScript SDK, or the installable skill that teaches any agent the vocabulary.
grab a prebuilt orcr from GitHub releases — macOS (macos-arm64,
macos-x64) and Linux (linux-x64); each orcr-<version>-<platform>.tar.gz ships a .sha256:
tar -xzf orcr-<version>-<platform>.tar.gz && mv orcr /usr/local/bin/or build from source (Rust ≥ 1.89):
cargo install orchestratr # installs the `orcr` binary
# or, from a checkout:
cargo build --release # → target/release/orcrthe SDK isn't on npm yet — orcr scaffold sets up a project with @orchestratr/sdk
pre-installed (pinned to the CLI's version); see quickstart (SDK).
orcr needs a running herdr on your PATH with the claude/codex integrations installed
(orcr server status shows what's available). only orcr scaffold and the SDK need Node
(≥ 20).
# spawn an agent (naming is mandatory: --name or --path). prints "<path> <uuid>".
orcr agent run --name reviewer -a codex -p "Review src/auth.ts for auth bugs. Say DONE."
orcr agent wait reviewer # block until it settles
orcr agent logs reviewer --last-response # read its answer
orcr agent send reviewer "Also check the refresh-token path."
orcr agent kill "review/**" -y # clean up a subtree
orcr top # live, view-only dashboard of the path treepaths are relative to your scope (/ = absolute); * = one segment, ** = any depth.
orcr scaffold my-workflow && cd my-workflow
npx tsx workflow.tsimport { orcr } from "@orchestratr/sdk";
await orcr.scope("review", async () => {
const reviewers = await Promise.all(files.map((f, i) =>
orcr.agent.run({ agent: "claude", path: `fanout/file_${i}`, gc: "immediate",
prompt: `Review ${f}. Write findings to $ORCR_AGENT_DATA_DIR/response.md, then say DONE.` })));
await orcr.agent.wait("fanout/*");
// read each reviewers[i].dataDir/response.md, then synthesize …
});the SDK is a typed client of the socket API — anything the CLI can do, the SDK can do. see
skill/references/sdk.md.
orcr loop create nightly "0 2 * * *" --timeout 25m -- \
~/.orcr/workflows/nightly/node_modules/.bin/tsx ~/.orcr/workflows/nightly/run.ts
orcr loop ls- identity — every agent has a permanent
uuidand a humanpath; the last segment is its name. children nest under your scope; glob patterns operate on subtrees. - completion —
waitsettles on turn-complete (live agents) orended (completed)(--gc immediate). never parse terminal output; use--last-responseor the file convention. - data —
~/.orcr/data/mirrors the path tree; each agent gets$ORCR_AGENT_DATA_DIR(seeskill/references/files.md). - the skill —
skill/SKILL.mdteaches any agent the orcr vocabulary (decision ladder, hot path, guard rails, provider routing).
cargo test # unit + fast tests
cargo clippy --all-targets # lint
(cd sdk/ts && npm install && npm test && npm run codegen:check) # SDK tests + drift check
ORCR_E2E=1 cargo test -- --test-threads=1 # e2e against live herdr + the mock providerthe SDK installs locally via orcr scaffold (which pins @orchestratr/sdk to the CLI's own
version) — set ORCR_SDK_SPEC to a local file:/tarball path for offline installs.
orchestratr is dual-licensed:
- open source — GNU AGPL-3.0-or-later.
- commercial — for organizations that cannot comply with the AGPL; contact
hey@orchestratr.dev.
see LICENSE for the full text.
