Run AI agents as a team. Show your client a live page, not a status thread.
orch walks a graph of tasks and hands each one to the coding agent you route it to — Claude Code, Codex, Gemini, OpenCode, Antigravity or Muse — in parallel, each in its own git worktree. It checks every change before it is pushed, pauses a provider when its budget window fills, and publishes a page your client can open to see where the work stands.
Already installed? orch start "a habit tracker with streaks" goes from one sentence to agents working. orch dashboard --demo shows a finished project without touching yours.
orch run
nextjs-saas template, routed to three agents. A task starts only when everything it depends on is done; the client page counts what is finished.How it works
-
Write the work down
Start from an idea:
orch startsets the project up with the agent CLIs you have, and its planning skills take the idea through a PRD, an architecture and specs to a task graph — each phase a vertical slice that opens with a walking skeleton. Or write the specs yourself — phases, packages, tasks, the model for each and what it depends on — andorch atomizeturns them intotasks.json, showing the diff before anything is written. There are also five project templates, and you can try a spec in your browser.$ orch start "a SaaS starter with auth and billing" $ orch tasks Tasks (6 shown) ID STATUS BACKEND/MODEL DEPS F0.T1 todo claude/claude-sonnet-4-6 — F1.T1 todo claude/claude-sonnet-4-6 [F0.T1] F1.T2 todo claude/claude-sonnet-4-6 [F1.T1] F2.T1 todo claude/claude-sonnet-4-6 [F0.T1] F2.T2 todo claude/claude-sonnet-4-6 [F1.T1 F2.T1] F3.T1 todo claude/claude-sonnet-4-6 [F0.T1 F2.T1] -
Route each task to an agent
model_router.yamlmaps every model name to the CLI that runs it —claude,codex,gemini,opencode,agyormuse— with your own logins and your own keys.orch initasks each installed CLI which models it really has. Concurrency caps and a rolling token budget per provider decide how much runs at once; when a provider runs out of quota, its tasks fail over to another.orch estimatesays what the next run will cost and take before it starts, andorch router suggesttells you which route has worked for which kind of task.$ orch doctor Ready to `orch run`. $ orch explain Tasks: 6 total, 0 done (0%) todo 6 blocked 0 Ready to dispatch: 1 F0.T1 Next.js 14 App Router scaffold + Tailwind + shadcn/ui -
Run it
orch rundispatches every ready task at once, each in its own git worktree and branch. Before anything leaves your machine, the task's work runs the repository's checks and a read-only review by a different provider; what fails goes back to the same agent. Then it opens a pull request per task — or, withvcs.provider: local, merges into your branch with no remote at all — watches CI, retries what failed for a reason worth retrying, and blocks, with the reason written down, what should not be retried. Ctrl+C drains: nothing new starts, work in flight finishes.$ orch run $ orch tui $ orch events F2.T2 -
Steer it while it runs
Follow any agent's steps live — tool calls, text, errors. Stop a task, hold it, or redirect it with a note that reaches its next attempt. Review a finished task's diff in the dashboard and accept it or send it back. Add tasks or edit them, from the CLI or the dashboard, and the running
orch runpicks them up. What one task learns the hard way is written to.orch/knowledge/and reaches the prompts of the tasks after it.$ orch task stop --id F2.T2 --note "use the existing auth client" $ orch task accept --id F1.T2 $ orch task add --id F3.T2 --title "Billing webhooks" --model claude/claude-sonnet-4-6 --deps F3.T1 $ orch knowledge list -
Hand your client a link
orch publishwrites the client page as a static site — phases, blockers in plain language, how fresh the numbers are — to a folder or agh-pagesbranch, and keeps it current with--watch. The page it writes has no login and no API: it is files. If your client should watch it live instead, the dashboard's Share button opens a Cloudflare quick tunnel or Tailscale, and gives you a client link that only works with its token.$ orch publish --to git --watch $ orch dashboard --tunnel
What orch checks so you do not have to
- A second opinion before the push.
- The local verify runs your tests and linters in the task's worktree and asks another provider to review the diff. Only work that passes is pushed.
- Tests first, if you want them.
- With
dispatch.tddthe agent writes one failing test per acceptance criterion before the code.verify.e2ebrings the task's app up on its own port and runs Playwright against it, keeping the screenshot and video of what failed. - No secrets in a pull request.
- The pre-PR guard scans each diff: an API key, a private key or a
.envfile blocks the task; a strayconsole.logordebuggergets a warning. - Parallel tasks that do not collide.
- The conflict radar compares a task's files with the ones already running before it dispatches, and each new PR with the open ones. Warn, or wait your turn.
- An agent that stalls is noticed.
- A log that goes silent or an agent repeating the same call is flagged while the run goes on, with the command to stop it.
- Committed work is never thrown away.
- A retry keeps the earlier attempt's commits on their own branch, and a PR that conflicts with its base gets a conflict retry instead of a block.
- Agents stay in their folder.
- On Linux,
dispatch.sandboxconfines each agent to its worktree with Landlock. It is opt-in and does not limit the network. - Ready before you run.
orch doctorends with a verdict — ready, or the first blocker and how to fix it — and--smokesends a real throwaway task through every installed CLI.
A real run, in 29 seconds
orch init --template python-api, orch run with claude, two PRs with green CI, and the client page updating itself. What was set up off camera.What your client sees
The page is built from one snapshot of the project, written for someone who does not care what a worktree is.
- Progress by phase, in the names you gave them, and what was delivered this week.
- Blockers translated out of stack traces into sentences.
- An estimated delivery date, and how fresh the numbers are.
- Spend only if you choose to show it. It is off by default.
- Your agency's name, logo and colour instead of orch's, if you set them.
What you see
Your own screen answers three questions: which agents are working right now, what is waiting for you, and how much of each provider's budget window is left. Work shows the graph as a list, a board, phases and pace; Usage splits tokens by model, task and attempt; System lists the tools you are missing and how to install each.
Ctrl K opens a palette that jumps to a task, filters the board or copies the CLI command for what you are looking at. When a run ends it leaves a receipt — tasks, wall time, agent time and spend per provider, and a summary in plain words — that you can copy as Markdown or an image. In a terminal, orch tui shows the same run; to your own agent, orch mcp exposes it as tools.
Where orch stops
- It runs on your machine.
- No daemon and no hosted service. You start
orch run; it stops when the queue is empty or you stop it. - The agents are yours to install.
- orch drives the CLIs you already use and are signed in to. It never holds a model key.
- It is one operator's tool.
- Several projects at once, yes. Several people editing the same plan, no — that is a project tracker's job.
- It needs git, not GitHub.
- Pull requests go through
ghorglab. Without a remote,vcs.provider: localmerges finished tasks into your branch here.
Install
One command. orch is a single binary for Linux and macOS, on amd64 and arm64.
curl -fsSL https://raw.githubusercontent.com/Guria-Studio/orch/main/scripts/install.sh | sh
It downloads the latest release, checks it against checksums.txt, and puts orch in ~/.local/bin — set INSTALL_DIR for somewhere else.
Build from source instead
git clone https://github.com/Guria-Studio/orch
cd orch
make build
./bin/orch --version
Needs Go 1.25+ and pnpm.
Then, in a git repository: orch start "what you want to build" sets the project up, plans it and runs it, asking before it spends. To go step by step instead: orch init, orch install-skills --all to give your agent the planning skills, and orch doctor to check that every CLI your tasks route to is installed and signed in. orch dashboard --demo opens a finished project of its own, so you can look at the dashboard before you run anything. The manual walks through the rest.
Follow the build
A release a week, in the open: every change, what broke and the numbers behind it.
I am Héctor Rodríguez, a developer in Curitiba. I built orch because I was spending 30 to 40 minutes a week writing status updates for clients while the agents did the work.