Talk to orch from your agent
You type a sentence in your agent. The Chair turns it into MCP calls. This is what each sentence becomes.
You never type an MCP call. You type a sentence in whatever agent you opened with
orch claude, orch opencode, orch codex — and that seat, the Chair, turns
the sentence into tool calls on orch mcp.
These pages exist because the mapping is not obvious. "Open a worker" is not a shell
command; it is dispatch_worker. Knowing the mapping is how you phrase the sentence
so the Chair does the right thing on the first try.
Why the Chair is the one that calls tools#
The first interactive seat you open in a project is the Chair (role=chair).
Everything it spawns is a worker (ORCH_ROLE=worker). Only the Chair may fan out:
dispatch_worker denied: ORCH_ROLE=worker — only the Chair may spawn (use orch msg to the Chair)
That denial is not a bug to route around. One Chair per git project keeps a single owner of the ledger, the locks and the spawn budget. A worker that wants more hands asks for them through the bus instead of taking them.
What a worker may and may not do#
| Chair | Worker | |
|---|---|---|
Spawn: dispatch_worker, task_add, task_assign, task_run |
yes | no |
Claim an item: task_claim, task_release |
yes | yes — claiming your own item is not fan-out |
Bus: msg_send, msg_inbox, msg_ack, msg_peers, msg_roster |
yes | yes |
Blocking question: ask |
— | yes, to its Chair |
Answer one: ask_answer, ask_list |
yes | — |
| Locks, symbols, graph, context, memory, usage | yes | yes |
Report evidence: verify_report |
— | yes, before finishing |
Two rules sit under the whole table. A worker never opens another vendor CLI outside orch to "be a worker". A worker never invents a second bus — no vendor sockets, no side chats.
The recipe format#
Every page that follows uses the same five parts:
- Prompt — the sentence you type, in plain language.
- What the Chair does — one line: role check, project resolution, dispatch.
- MCP calls — real tool names and real parameter names, with the CLI equivalent where one exists.
- Expected response — the shape that comes back, per
client/docs/PROTOCOL-AGENT.md. - Gotchas — the denial, the gate, the preset that is not configured yet.
Arguments that carry your identity (holder, session, from_session) come from
.orch/ORCH_RUNTIME.md, which the seat injects. Do not invent them.
The eight recipes#
- Two workers that correct each other
- Ask another project how it solved X
- Claim a ledger item before you start
- Who calls this, and what breaks if I change it
- Stop reading whole files; compress what you read
- Show my usage and my leaks
- Promote my worktree
- Connect OpenCode to the gateway with my keys
Outside a bound workshop (loose mode) the lock and symbol tools return a soft-skip string instead of an error. Governance applies inside a bound workspace.