CLI reference

Every orch command, grouped by top-level verb, generated from the cobra tree.

orch CLI reference

Generated by go run ./cmd/orch-docs from cli.NewRoot() (client/internal/cli). 177 commands total, 118 hidden (see "Power-user / agent protocol" below).

orch#

OrcheMax (Orche) — run AI coding agents together on your projects

orch [flags]

OrcheMax — also Orchest; short name Orche — sits under the agents you already use (Claude, OpenCode, Cursor, Codex, …). It does not replace their UI. It adds shared-folder locks, a local LLM gateway (token savings + provider failover), and a simple way for sessions to hand off work.

The command-line name is still: orch

First-time setup

  1. Put orch.exe in any folder and add that folder to your user PATH (that folder stays empty of Orche files — PATH only)
  2. Create or cd into your code workspace
  3. Run: orch setup → defaults to this folder; projects/shared are relative names → writes orch.yaml + .orch/ here
  4. Optional: orch init → ordered layout (shared + projects), thin CLAUDE/TRACKER, git per folder

Connect LLM providers (user-wide — once for all workspaces) orch gateway setup --live --name … --url … --key-env MY_API_KEY → writes %LOCALAPPDATA%\Orchemax\ai.yaml → put the secret in a Windows User environment variable (not in yaml) orch gateway

Workspace orch.yaml can still override ai.providers if you need a special case.

Start working (from inside your workspace) See “Detected agents” below — open one with: orch orch ui # optional local web console orch workspace # show resolved workshop for this folder

Tips Type your prompt inside the agent UI — not as arguments to orch. Outside the workspace: loose mode (gateway OK; no locks/bus/project control). Agents that know Orche use MCP — see docs/PROTOCOL-AGENT.md. Bare "orch" prints this help. Use: orch --help Power-user / agent protocol commands are hidden from this list; they still work.

Docs: https://docs.orchemax.com

flag type default persistent help
--config string orch.yaml yes path to orch.yaml

orch agents#

Detect coding agents installed on your PATH

orch agents [flags]

Scans your PATH for known agent CLIs (Claude, OpenCode, Cursor, …) and records what was found. First-time setup can auto-add missing launch presets; later scans only propose changes until you apply.

orch agents scan # look for agents; write a snapshot orch agents show # print last scan orch agents apply # add newly found agents to orch.yaml (keeps your edits)

orch agents apply#

Add newly found agents to orch.yaml (never overwrites your edits)

orch agents apply [flags]

orch agents scan#

Scan PATH and save results (does not change orch.yaml yet)

orch agents scan [flags]

orch agents show#

Print the last agents scan

orch agents show [flags]

orch agents-md#

Regenerate AGENTS.md from the live ledger/board

orch agents-md [flags]

orch agents-md refresh#

Regenerate the workshop root AGENTS.md

orch agents-md refresh [flags]

Rebuilds AGENTS.md's Tools section from the registered MCP tools and its Ledger/Board sections from .workflow/LEDGER.md and .workflow/BOARD.md.

Non-clobber like every other seed: an existing non-empty AGENTS.md is left alone unless --force.

flag type default persistent help
--dry-run bool false no print what would happen without writing
--force bool false no overwrite an existing non-empty AGENTS.md

orch gateway#

Local LLM proxy: savings, providers, and agent connection helpers

orch gateway [flags]

The Orche gateway is a small local proxy (default http://127.0.0.1:8788). Agents talk to Orche; Orche talks to your providers. That enables token savings and failover across the URLs you configured.

Typical flow orch gateway setup --live --name … --url … --key-env MY_API_KEY orch gateway # start the proxy (same as: orch gateway run) orch gateway connect claude # print settings to paste into your agent orch gateway show # list providers (secrets hidden) orch gateway usage # calls / tokens / savings (no prompt text)

Power users can edit ai.providers and ai.passthrough in orch.yaml instead of setup.

Docs: https://docs.orchemax.com/how-to/gateway-keys-and-connect/

orch gateway autostart#

Keep the gateway running on Windows (optional scheduled task)

orch gateway autostart [flags]

orch gateway autostart install#

Write .orch/run-gateway.ps1 + register OrchGateway watchdog task

orch gateway autostart install [flags]

Generates .orch/run-gateway.ps1 (loads User API key env + optional .orch/keys.env) and registers a Current-User minute watchdog scheduled task (no elevation; replaces HeadroomDev/OmniRouteDev). Script no-ops if the gateway port is already listening. Use --dry-run to print script + task XML without writing or registering.

flag type default persistent help
--dry-run bool false no print script+XML; do not write or register
--every int 5 no watchdog interval minutes
--name string OrchGateway no schtasks task name

orch gateway autostart status#

Show whether OrchGateway task is registered

orch gateway autostart status [flags]
flag type default persistent help
--name string OrchGateway no schtasks task name

orch gateway autostart uninstall#

Remove OrchGateway scheduled task

orch gateway autostart uninstall [flags]
flag type default persistent help
--dry-run bool false no print actions only
--name string OrchGateway no schtasks task name
--remove-script bool false no also delete .orch/run-gateway.ps1

orch gateway connect#

Point agents at this gateway (OpenCode writes config automatically)

orch gateway connect [claude|openai|opencode|commandcode] [flags]

Connects agent apps to the local OrcheMax gateway.

orch gateway connect opencode # writes ~/.config/opencode/opencode.json (automatic) orch gateway connect commandcode # prints env for Command Code orch gateway connect openai # prints env + OpenCode snippet orch gateway connect claude # prints Anthropic env

OpenCode is applied automatically. Other agents still need a one-time paste.

Start the gateway first: orch gateway

orch gateway enable#

Turn on gateway savings and auto-route for agent runs

orch gateway enable [flags]

Updates orch.yaml so agent runs can use the local gateway (token savings). Creates a workspace gateway key file if needed and prints the next step.

Stub mode costs $0. For real providers: orch gateway setup --live … orch gateway

flag type default persistent help
--live bool false no set ai.mode=live (needs provider via gateway setup)

orch gateway key#

Manage virtual keys agents use to call the local gateway

orch gateway key [flags]

orch gateway key issue#

Create a gateway key (secret is printed once — save it)

orch gateway key issue [flags]
flag type default persistent help
--budget-day int64 0 no per-key daily token budget (0 = unlimited)
--label string `` no optional label
--models string `` no comma-separated model allowlist (empty = any)

orch gateway key list#

List gateway keys (secrets are never shown again)

orch gateway key list [flags]

orch gateway key revoke#

Revoke a gateway key by id

orch gateway key revoke <id> [flags]

orch gateway keys#

Manage upstream provider API keys (a rotation ring per provider)

orch gateway keys [flags]

Keys live in the same vault as everything else (machine-home keys.env), one env var per provider — several keys, comma-separated, is a rotation ring the gateway already knows how to fail over into on 429s (see: orch gateway status).

Never prints a full key: add/list/remove only ever show a hint ("sk-…abcd").

orch gateway keys add#

Add a key to a provider's rotation ring (probes connectivity first)

orch gateway keys add <provider> [key] [flags]

orch gateway keys list#

List configured keys per provider (hints and tier only)

orch gateway keys list [provider] [flags]

orch gateway keys remove#

Remove a key from a provider's ring by hint

orch gateway keys remove <provider> <hint> [flags]

orch gateway presets#

List known LLM upstream URLs (for setup / agents)

orch gateway presets [flags]

Prints the built-in catalog of OpenAI-compat / Anthropic endpoints Orche knows. Agents should use this when the user asks to add another LLM provider. Secrets never go in chat — user fills keys.env or Windows User env.

orch gateway run#

Start the local LLM proxy (same as: orch gateway)

orch gateway run [flags]

orch gateway setup#

Add an LLM provider to the user-wide catalog (ai.yaml)

orch gateway setup [flags]

Writes one LLM provider into your user config (machine-home ai.yaml), shared by every workspace. Secrets stay in OS User environment variables.

Example set OPENROUTER_API_KEY=… # Windows: User environment variable orch gateway setup --live
--name openrouter
--url https://openrouter.ai/api/v1
--model qwen/qwen3-32b
--key-env OPENROUTER_API_KEY
--tier cheap
--priority 10

Prefer --key-env over --api-key so secrets never sit in yaml. Then start the proxy: orch gateway

File: %LOCALAPPDATA%\Orchemax\ai.yaml (override with ORCH_HOME)

A workspace orch.yaml may still list ai.providers to override this user catalog. Claude / Anthropic Messages: ai.passthrough.anthropic in the same user file (or workspace override).

flag type default persistent help
--api-key string `` no API key inline (prefer --key-env)
--key-env string `` no environment variable that holds the API key
--live bool false no also set ai.mode=live
--model string `` no default model id
--name string `` no provider name
--priority int 0 no lower number = tried first when a provider fails
--tier string `` no local|free|cheap|paid
--url string `` no provider API base URL (…/v1)

orch gateway show#

List providers from orch.yaml (API keys hidden)

orch gateway show [flags]

orch gateway status#

Per-provider live/cooldown state, key-ring position, rotation and cooldown counts

orch gateway status [flags]

Reads /v1/providers/stats from the running gateway (orch gateway). Counters are in-memory and reset when the gateway restarts — this is "since start", not a historical ledger (see: orch gateway usage for that). Never shows keys.

orch gateway usage#

Show gateway call stats and token savings (never stores prompts)

orch gateway usage [flags]
flag type default persistent help
--limit int 20 no recent attempts to list
--push bool false no push content-free rollup to Orchemax (server link required)

orch home#

Show where account files live vs this workspace's .orch folder

orch home [flags]

orch init#

Prepare an ordered workshop (projects, shared, AI doctrine, git)

orch init [flags]

Run inside a bound workshop (after orch setup / orch workspace).

Asks docs locale, shared folders, project/apps, optional git identities, and whether to install orch guard hooks. Seeds English thin CLAUDE.md + DEV_PRACTICES.md + GATES.md + per-project TRACKER, installs sealed orch-* skills, git-inits each project/shared (never the workshop root), and wires includeIf identities when profiles are given.

Existing workshop: decline the recommended layout and enter your real shared/product paths. To replace doctrine after a wipe, delete old CLAUDE.md / AGENTS.md / gates docs (or pass --force).

orch init orch init --recommend # suggest shared// + projects// orch init --dry-run orch init --force # overwrite non-empty seeded docs

Docs: https://docs.orchemax.com/how-to/organise-a-workshop/

flag type default persistent help
--dry-run bool false no print plan without writing
--force bool false no overwrite non-empty seeded doctrine files
--recommend bool false no default to recommended shared// + projects// layout

orch project#

Register projects in orch.yaml (does not create folders)

orch project [flags]

orch project add#

Register an existing folder as a project

orch project add <path> [flags]

Register an existing folder. Relative paths resolve from cwd first, then workspace root. Examples: orch project add . orch project add products/saint cd products && orch project add saint

flag type default persistent help
--kind string `` no optional kind label (e.g. go, web)
--name string `` no optional short name (default: folder name)

orch project list#

List registered projects (shows a project's running Chair, if any)

orch project list [flags]

orch project remove#

Unregister a project (does not delete folders)

orch project remove <path-or-name> [flags]

orch server#

Link this workspace to your OrcheMax account (optional)

orch server [flags]

orch server entitlements#

Pull policy hints from server (fallback: local policy when offline)

orch server entitlements [flags]

Store token and verify ping

orch server link [flags]
flag type default persistent help
--token string `` no bearer token
--url string `` no server base URL (default server.url)

orch server login#

Sign in to OrcheMax and link this device

orch server login [flags]
flag type default persistent help
--device string `` no device id (default cli-)
--password string `` no account password
--url string `` no Orchemax base URL
--username string `` no account username

orch server notices#

Fetch member notices from server (channels are server-side)

orch server notices [flags]

orch server push-event#

Push a work event to the server

orch server push-event [flags]
flag type default persistent help
--agent string `` no agent id
--session string `` no session id
--type string task_done no event type

orch server status#

Ping server.url healthz

orch server status [flags]

Remove local server token/link state

orch server unlink [flags]

orch setup#

Bind this folder as your Orche workspace (orch.yaml + .orch)

orch setup [flags]

Run from your code workspace (create it and cd there first).

Orche will: • Use the current folder as the workspace (press Enter), or another path you type • Write orch.yaml and .orch/ here • Ask for optional project/shared folders as relative names (e.g. billing, shared) • Remind you that live agents need LLM provider API keys (env vars) — optional add one row • Put orch.exe's folder on your user PATH if needed (PATH only — no files there)

After setup: orch init (ordered layout + AI doctrine) → set the key env var → orch gateway → orch opencode | claude | … Outside the workspace Orche runs loose (gateway/optimizations; no locks/bus). More providers later: orch gateway setup --help

--prune-path skips the interactive wizard and only reconciles the user PATH, dropping dead orch entries (old installs, leftover go-build/Temp dogfood dirs) while never touching entries orch cannot attribute to itself. Add --dry-run to print what would be removed without changing anything.

Docs: https://docs.orchemax.com/quickstart/

flag type default persistent help
--dry-run bool false no With --prune-path, print what would be removed without changing PATH
--prune-path bool false no Only reconcile the user PATH (drop dead orch entries), skip the interactive wizard

orch shared#

Register shared folders in orch.yaml by language (does not create folders)

orch shared [flags]

orch shared add#

Register an existing folder under shared.

orch shared add <path> [flags]

Path only. Language defaults to workspace.primary_languages (or the only shared.* bucket). Pass --lang only to override (e.g. assets for css/js). Example: orch shared add C:\Dev\my-workshop\features

flag type default persistent help
--lang string `` no optional language bucket (default: workspace.primary_languages or sole shared.*)

orch shared list#

List shared folders by language

orch shared list [flags]

orch shared remove#

Unregister a shared folder (does not delete folders)

orch shared remove <path> [flags]
flag type default persistent help
--lang string `` no optional — limit remove to one language bucket

orch ui#

Open the local web console (background by default)

orch ui [flags]

Starts a small local web UI (default http://127.0.0.1:8790) for usage, settings, and status. By default the UI runs in the background, the browser opens, and your terminal returns. Use --foreground to keep the server in this terminal (Ctrl+C stops it). Everything it edits also lives in orch.yaml.

flag type default persistent help
--foreground bool false no keep UI in this terminal (Ctrl+C stops it)
--no-browser bool false no do not open the browser (background mode)

orch usage#

Tokens by session, worker and model, plus bytes crush kept off the wire

orch usage [flags]
flag type default persistent help
--format string table no table|json
--governance bool false no print conflict_rate/duplicate_rate per session instead (item 38: cross-session file collisions, clone advisories)
--leaks bool false no print leak telemetry per session instead (item 26: rereads, repeats, oversized results, silent streaks)
--limit int 0 no also include the N most recent attempts (json)

orch version#

Print version

orch version [flags]

orch workspace#

Show the workshop for this folder, or initialize another path

orch workspace [path] [flags]

Workshop = folder with orch.yaml + .orch/ (where you run orch day to day).

orch workspace # print resolved workshop for the current folder orch workspace # create/init that folder as a workshop (then cd there) orch workspace show orch workspace use

orch.exe on PATH is unrelated — it does not store a workspace pointer. Outside a workshop: loose mode. Relative paths are from the current directory.

orch workspace show#

Print the workspace this install is bound to

orch workspace show [flags]

orch workspace use#

Point this install at a workspace folder

orch workspace use [path] [flags]

orch worktree#

Git worktree lifecycle for orch sessions (status, prune, promote)

orch worktree [flags]

Repos are first-class: each dispatch session gets branch orch/ under paths.worktrees. Promote merges into the base branch (fail-closed on conflicts). Never auto-pushes to remote.

orch worktree base#

Show resolved base branch for promote

orch worktree base [flags]
flag type default persistent help
--base string `` no override base branch
--project string `` no git repo path

orch worktree promote#

Merge orch/ into base (fail-closed on conflicts; no auto-push)

orch worktree promote <session> [flags]
flag type default persistent help
--base string `` no base branch
--event bool true no emit content-free orch.git.promote when linked
--guard-ddl bool true no require seeder/repository companions for DDL in the session branch
--project string `` no git repo path
--strategy string merge no merge|rebase

orch worktree prune#

Remove orphan worktree dirs and orphan orch/* branches

orch worktree prune [flags]
flag type default persistent help
--base string `` no base branch hint
--project string `` no git repo path

orch worktree remove#

Remove a session worktree and its orch/ branch

orch worktree remove <session> [flags]
flag type default persistent help
--base string `` no unused
--project string `` no git repo path

orch worktree status#

List orch session worktrees (dirty / orphan flags)

orch worktree status [flags]
flag type default persistent help
--base string `` no base branch (default: ORCH_GIT_BASE or main/master)
--json bool false no JSON output
--project string `` no git repo path (default: registered project / workspace)

Power-user / agent protocol#

118 commands. Not part of the default orch --help listing — they exist for agent-driven workflows and power users, and can change without a deprecation cycle. Collapsed by default; expand to read.

Show hidden commands

orch agy#

Open agy in your project (interactive)

orch agy [flags]

Starts agy with its normal chat UI in the project for your current folder.

Just run: orch agy

Then type your message inside agy — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent agy --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id

orch ask#

Answer blocking questions raised by workers

orch ask [flags]

orch ask answer#

Answer an open ask; the blocked worker resumes immediately

orch ask answer <id> [flags]
flag type default persistent help
--answer string `` no the answer (must be one of the offered options, when the ask has any)
--by string `` no who answered (default human)

orch ask list#

List asks (default: the open ones)

orch ask list [flags]
flag type default persistent help
--limit int 50 no max rows
--session string `` no filter by asker or addressee session
--status string open no open|answered|timeout|all

orch chair#

Configure orchestration guidance for your main (lead) agent session

orch chair [flags]

Optional rules for how the lead session should break work into tasks and coordinate workers. You can accept or reject each suggestion.

orch chair setup # interactive Y/n orch chair show orch chair install # write skill/guidance files agents can discover

orch chair install#

Write guidance files + MCP from chair.guidance flags

orch chair install [flags]
flag type default persistent help
--dry-run bool false no list paths without writing
--target string all no all|project|claude|cursor|commandcode|opencode (comma-ok)

orch chair setup#

Suggest guidance flags (Y/n), save orch.yaml, reinstall project files

orch chair setup [flags]
flag type default persistent help
--yes bool false no accept all suggestions without prompts

orch chair show#

Show effective chair.guidance flags

orch chair show [flags]

orch claude#

Open claude in your project (interactive)

orch claude [flags]

Starts claude with its normal chat UI in the project for your current folder.

Just run: orch claude

Then type your message inside claude — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent claude --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id

orch codex#

Open codex in your project (interactive)

orch codex [flags]

Starts codex with its normal chat UI in the project for your current folder.

Just run: orch codex

Then type your message inside codex — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent codex --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id

orch commandcode#

Open commandcode in your project (interactive)

orch commandcode [flags]

Starts commandcode with its normal chat UI in the project for your current folder.

Just run: orch commandcode

Then type your message inside commandcode — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent commandcode --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id

orch context#

Configure how large prompts are compressed to save tokens

orch context [flags]

orch context setup#

Suggest context flags (Y/n) and save orch.yaml

orch context setup [flags]
flag type default persistent help
--yes bool false no accept all suggestions without prompts

orch context show#

Show effective context.guidance flags

orch context show [flags]

orch copilot#

Open copilot in your project (interactive)

orch copilot [flags]

Starts copilot with its normal chat UI in the project for your current folder.

Just run: orch copilot

Then type your message inside copilot — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent copilot --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id

orch cursor#

Open cursor in your project (interactive)

orch cursor [flags]

Starts cursor with its normal chat UI in the project for your current folder.

Just run: orch cursor

Then type your message inside cursor — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent cursor --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id

orch daemon#

Background local service for the workspace database (advanced)

orch daemon [flags]

orch discover#

Suggest projects and shared folders from your workspace (you confirm)

orch discover [flags]

orch discover apply#

Confirm proposal into orch.yaml (registers paths only)

orch discover apply [flags]
flag type default persistent help
--all bool false no apply every project + shared suggestion
--project stringSlice [] no project id(s) to register from proposal

orch discover run#

Scan workspace and write .orch/discover.proposal.json

orch discover run [flags]

orch discover show#

Print saved discover proposal

orch discover show [flags]

orch dispatch#

Run one agent once without its interactive UI (automation)

orch dispatch [flags]

Runs an agent headlessly with a prompt (CI / scripts).

For the normal interactive agent UI, prefer: orch claude | orch opencode | orch commandcode | orch cursor | …

flag type default persistent help
--actor string `` no policy actor (default: ORCH_ACTOR or local)
--agent string default no agent id (.agents/.md)
--force bool false no bypass clarify_before_spawn ledger gate
--inplace bool false no run in project root (shared disk; multi-agent coord)
--keep-worktree bool false no keep worktree after run
--name string `` no session display name (default: agent id; like claude -n)
--project string `` no git repo path (default: registered project containing cwd)
--prompt string `` no prompt text
--prompt-file string `` no read prompt from file
--session string `` no session id (default: timestamp-agent)
--task string `` no chair task id (updates agent_tasks)
--timeout int 0 no agent timeout seconds (0=agents.timeout_sec / ORCH_AGENT_TIMEOUT_SEC)

orch gateway login#

experimental

Sign the gateway in to a provider account (only where the provider allows it)

orch gateway login <openai|copilot> [flags]

Experimental — not a product feature. Signs the gateway in with your own plan so upstream calls are billed to it instead of an API key.

orch gateway login openai # ChatGPT/Codex, OAuth PKCE on a loopback callback orch gateway login copilot # GitHub Copilot, device flow (RFC 8628)

Tokens are stored in machine-home with 0600 and never printed. Anthropic is not offered: claude.ai plan credentials are never collected or intermediated.

orch gateway logout#

experimental

Forget a stored provider account login

orch gateway logout <openai|copilot> [flags]

Experimental — not a product feature. Forgets a stored provider account login.

orch grok#

Open grok in your project (interactive)

orch grok [flags]

Starts grok with its normal chat UI in the project for your current folder.

Just run: orch grok

Then type your message inside grok — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent grok --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id

orch guard#

Local guardrail checks

orch guard [flags]

orch guard add-all#

Deny blanket git add (-A/.) when cwd is a shared repo

orch guard add-all [git-command] [flags]

Field lesson: on shared layers, git add -A steals other sessions' WIP. Pass the shell command (default reads first arg). Soft-skip when cwd is not under a registered shared path.

orch guard artifacts#

Deny disposable build junk (.dcu, .o, .exe, …) beside source

orch guard artifacts [files...|dir] [flags]

Field lesson: compiler outputs next to shared units poison multi-agent floors. Flags staged paths or walks a directory (skips tests/, out/, build/, .git). Extensions: .dcu .dcp .o .obj .exe .map .pyc .class .local … and Delphi Unit.pas.1 backups.

orch guard code-lang#

Check code identifiers/strings against workspace.code_lang

orch guard code-lang [root] [flags]

Uses workspace.code_lang from orch.yaml (owner decision for shipping code): en — identifiers + user-visible strings in English; comments may be any language unset — skip other — skip until a checker exists

Spanish UI copy belongs in i18n dictionaries (paths like i18n/, es.json are exempt). Field lesson: chatting in Spanish with the LLM must not put Spanish into identifiers or raises.

orch guard comment#

Deny if exported shared symbols lack a one-line purpose comment

orch guard comment <shared-file> [flags]

orch guard control-bytes#

Deny invisible control bytes in source (except tab/LF/CR)

orch guard control-bytes [files...] [flags]

orch guard ddl#

Require seeder/repository companion for migration/CREATE TABLE changes

orch guard ddl [files...] [flags]

orch guard dup#

Deny if file duplicates a shared symbol; report copied function bodies (clones)

orch guard dup <file> [flags]

orch guard encoding#

Deny missing UTF-8 charset / mojibake in HTML and email templates

orch guard encoding [files...] [flags]

LLMs often forget charset when writing HTML or emails (especially non-English copy). Checks: meta charset=utf-8 or Content-Type charset=utf-8; classic mojibake patterns (café). FireDAC / Delphi WideString rules stay workshop-specific — not this gate.

orch guard hooks#

Install git pre-commit/pre-push hooks that run orch guard

orch guard hooks [flags]

orch guard hooks install#

Write .git/hooks/pre-commit + pre-push (orch-marked)

orch guard hooks install [repo] [flags]

orch guard hooks run#

Run pre-commit checks on staged files (used by git hooks)

orch guard hooks run [repo] [flags]

orch guard hooks status#

Show whether orch git hooks are installed

orch guard hooks status [repo] [flags]

orch guard hooks uninstall#

Remove orch-marked pre-commit/pre-push hooks only

orch guard hooks uninstall [repo] [flags]

orch guard ide-hook#

Internal: Claude/Cursor wire entry (soft-skip outside workshop)

orch guard ide-hook [flags]

orch guard lang#

Check workshop docs against workspace.locale

orch guard lang [root] [flags]

Uses workspace.locale from orch.yaml (owner decision for docs/prose): en — deny Spanish markers in docs es — Spanish docs allowed (English-only docs check off) unset — skip

This is separate from workspace.code_lang (see orch guard code-lang). Chat/docs may be Spanish while code stays English.

orch guard lock#

Deny if shared/** path has no valid lock for --holder

orch guard lock <path> [flags]
flag type default persistent help
--holder string `` no session/agent holding the lock

orch guard profile#

Show or set guard.profile in orch.yaml

orch guard profile [lite|shared|strict|bring|none] [flags]

orch guard shared-brand#

Deny product brand / products/ references inside shared layers

orch guard shared-brand [files...] [flags]

orch guard tracker#

Validate TRACKER state table (T1–T4: status · SPEC · evidence · no prose)

orch guard tracker [TRACKER.md|dir] [flags]

Agnostic checks inspired by workshop field experience: T1 — only SPEC|TODO|WIP|DONE|VERIFIED|BLOCKED|DROPPED T2 — SPEC rows must point at an existing .md T3 — VERIFIED rows need real evidence (not empty/ok/done) T4 — table present ⇒ no narrative dump (>12 consecutive prose lines)

Prose-only trackers without a status table soft-skip (exit 0). When PATH is a directory, walks **/TRACKER.md (bounded).

orch guard unwire#

Remove orch-marked IDE hooks (and optionally git hooks)

orch guard unwire [flags]
flag type default persistent help
--git bool false no also uninstall orch git hooks under project/shared

orch guard wire#

Install marked git/Claude/Cursor adapters for this workshop

orch guard wire [flags]
flag type default persistent help
--claude bool false no wire ~/.claude/settings.json (user scope; soft-skip outside workshop)
--cursor bool false no wire workshop .cursor/hooks.json
--git bool false no install git pre-commit/pre-push on project+shared repos
--profile bool false no use guard.profile from orch.yaml

orch harness#

Detect AI tools and workshop doctrine surfaces

orch harness [flags]

orch harness scan#

Agents on PATH + Claude/Cursor/OpenCode settings + doctrine files

orch harness scan [flags]

orch hook#

Internal: harness context hooks (Claude Code, OpenCode)

orch hook [flags]

Wired by orch guard wire, each gated by its own orch.yaml consent: post-tool Claude Code PostToolUse and OpenCode tool.execute.after — context.hooks.post_tool (legacy scalar context.hooks: true) pre-compact Claude Code PreCompact — context.hooks.pre_compact Copilot CLI (postToolUse.modifiedResult) and Cursor (updated_mcp_tool_output) expose the same capability but orch has no wiring path for either harness yet, so neither is installed. Codex CLI cannot replace tool output at all.

orch hook post-tool#

Internal: shrink a tool result read from stdin (PostToolUse)

orch hook post-tool [flags]

orch hook pre-compact#

Internal: condense workshop memory before the harness compacts (PreCompact)

orch hook pre-compact [flags]

Runs the same condenser as orch memory condense on .workflow/BOARD.md and .orch/LAST_SESSION.md. Native compaction summarizes the whole transcript and keeps no original; condensing first means the board survives byte-for-byte in its ## Clarified sections and open checkboxes, with the original kept beside the file. Enabling context.hooks.pre_compact is the owner's standing consent for that.

orch index#

Index shared code into the symbol registry

orch index [flags]

orch index shared#

Scan paths.shared and upsert symbols

orch index shared [flags]
flag type default persistent help
--watch bool false no fsnotify reindex with 300ms debounce

orch inventory#

Check registered shared folders against the symbol index

orch inventory [flags]

orch kimi#

Open kimi in your project (interactive)

orch kimi [flags]

Starts kimi with its normal chat UI in the project for your current folder.

Just run: orch kimi

Then type your message inside kimi — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent kimi --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id

orch ledger#

Check the requirements list before spawning lots of work

orch ledger [flags]

orch ledger board#

Print the ledger with (claimed: ) next to claimed items (task_claim); never rewrites the file

orch ledger board <file> [flags]

orch ledger check#

Validate ## Clarified + checkbox items (exit 1 on fail)

orch ledger check [dir] [flags]

orch lock#

Lock shared folders so two agents do not edit the same files

orch lock [flags]

orch lock acquire#

Acquire lock on shared path (holder=session id)

orch lock acquire <path> [flags]
flag type default persistent help
--holder string `` no session id holding the lock
--ttl-min int 15 no TTL minutes

orch lock release#

Release lock (holder must match, or --holder *); reindexes symbols + notifies peers

orch lock release <path> [flags]
flag type default persistent help
--holder string `` no session id

orch lock status#

Show one lock or list held locks

orch lock status [path] [flags]

orch mcp#

Start the orch tools server for agents (stdio)

orch mcp [flags]

orch memory#

Save and recall durable notes for agents (local)

orch memory [flags]

orch memory condense#

Shrink oversized workshop memory files through the gateway (never automatic)

orch memory condense [flags]

Condenses .workflow/BOARD.md and .orch/LAST_SESSION.md when they pass the size threshold. ## Clarified and ## Ownership sections and every open checkbox item are preserved byte-for-byte — only narration and finished notes are summarized. The original is kept beside the file. Requires a running gateway (orch gateway) with a working upstream.

flag type default persistent help
--dry-run bool false no report what would change without writing
--file stringSlice [] no file(s) to condense (default: BOARD.md and LAST_SESSION.md)
--model string `` no model to summarize with (default: the gateway's own choice)
--threshold-bytes int 0 no only condense files larger than this (default 16384)

orch memory conflicts#

List active memories with same type+title but different body

orch memory conflicts [flags]

orch memory export#

Export estate as OKF-lite markdown (v0.2-compatible)

orch memory export [dir] [flags]
flag type default persistent help
--all bool false no include expired/superseded
--limit int 5000 no max rows

orch memory forget#

Expire a memory (soft)

orch memory forget <id> [flags]

orch memory import#

Import OKF-lite markdown into the estate

orch memory import [dir] [flags]

orch memory list#

List recent active memories

orch memory list [flags]
flag type default persistent help
--limit int 20 no max rows
--type string `` no filter type

orch memory recall#

Search saved memories

orch memory recall [query...] [flags]
flag type default persistent help
--limit int 8 no max hits
--type string `` no filter type

orch memory remember#

Store a typed memory

orch memory remember [text...] [flags]
flag type default persistent help
--no-supersede bool false no do not supersede same type+title
--source string `` no source agent/session
--tags string `` no comma tags
--title string `` no short title (default: truncated body)
--type string fact no memory type

orch memory supersede#

Mark old memory superseded by new id

orch memory supersede <old-id> <new-id> [flags]

orch memory sweep#

Expire memories past retention_days

orch memory sweep [flags]

orch mimo#

Open mimo in your project (interactive)

orch mimo [flags]

Starts mimo with its normal chat UI in the project for your current folder.

Just run: orch mimo

Then type your message inside mimo — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent mimo --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id

orch msg#

Send messages between agent sessions

orch msg [flags]

orch msg ack#

Ack message as recipient (session and/or agent must match)

orch msg ack <id> [flags]
flag type default persistent help
--agent string `` no recipient agent
--session string `` no recipient session

orch msg age#

Backdate message created_at (dogfood / tests)

orch msg age <id> [flags]
flag type default persistent help
--hours int 2 no hours in the past

orch msg gc#

Purge old bus history (acked/unread/log/notices) per bus.* retention

orch msg gc [flags]

orch msg handoff#

Write brief under data/handoffs and send kind=handoff

orch msg handoff [flags]
flag type default persistent help
--body string `` no alias for summary
--from-agent string `` no sender agent
--from-session string `` no sender session
--summary string `` no handoff summary
--to-agent string `` no target agent
--to-session string `` no optional target session

orch msg inbox#

List messages for session and/or agent

orch msg inbox [flags]
flag type default persistent help
--agent string `` no agent id
--limit int 50 no max rows
--session string `` no session id
--unread bool true no only unread

orch msg log#

Show bus activity log (.orch/bus.log)

orch msg log [flags]
flag type default persistent help
--follow, -f bool false no follow new lines (Ctrl+C to stop)
--tail, -n int 40 no last N lines (0 = all)

orch msg peers#

List other sessions (optional: family view with --session)

orch msg peers [flags]
flag type default persistent help
--format string table no table|json (roster mode)
--session string `` no from-session → project kinship roster (parent/child/sibling)

orch msg read#

Mark message read (legacy; prefer ack)

orch msg read <id> [flags]

orch msg roster#

Show parent/child/sibling sessions for a session

orch msg roster [flags]
flag type default persistent help
--format string table no table|json
--session string `` no from-session id

orch msg send#

Send a note, handoff, or alert to another session or agent

orch msg send [flags]
flag type default persistent help
--body string `` no short message body
--from-agent string `` no sender agent id
--from-session string `` no sender session id
--kind string note no note|handoff|alert
--name string `` no target display name / session / agent when using --to-role
--parent-id int64 0 no optional parent message id (thread)
--payload string `` no optional file path (brief)
--to-agent string `` no target agent id
--to-role string `` no parent|child|sibling (requires --from-session)
--to-session string `` no target session id

orch msg stale#

List unread alerts older than --older-min

orch msg stale [flags]
flag type default persistent help
--older-min int 15 no alert age in minutes

orch notify-hook#

Command Code hook: drain orch bus/notices → additionalContext JSON (stdout)

orch notify-hook [flags]
flag type default persistent help
--agent string `` no orch agent id (baked by inject)
--session string `` no orch session id (baked by inject)

orch opencode#

Open opencode in your project (interactive)

orch opencode [flags]

Starts opencode with its normal chat UI in the project for your current folder.

Just run: orch opencode

Then type your message inside opencode — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent opencode --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id

orch refine#

Suggest small harness/prompt improvements from recent runs

orch refine [flags]

Looks at recent run evidence and can propose tiny updates to memory or prompt notes. Default is a dry-run proposal; pass --apply to write. Undo reverses the last apply. Does not rewrite your core orch.yaml guidance.

flag type default persistent help
--apply bool false no apply patches (default is dry-run proposal only)
--instructions string `` no focus observation / policy to persist
--log-tail int 80 no bus.log + .orch-agent.log lines to scan for fail/error/timeout
--scope string global no local|global (recorded; workspace store is shared)

orch refine history#

List recent refine events

orch refine history [flags]
flag type default persistent help
--limit int 20 no max events

orch refine run#

Propose (and optionally apply) refine patches

orch refine run [flags]
flag type default persistent help
--apply bool false no apply patches (default is dry-run proposal only)
--instructions string `` no focus observation / policy to persist
--log-tail int 80 no bus.log + .orch-agent.log lines to scan for fail/error/timeout
--scope string global no local|global (recorded; workspace store is shared)

orch refine show#

Show supplemental prompt_notes.md

orch refine show [flags]

orch refine undo#

Undo last applied refine (forget memories / strip matching prompt lines)

orch refine undo [flags]

orch resume#

Load a session snapshot from SQLite

orch resume <session-id> [flags]

orch session#

Session commands

orch session [flags]

orch session last#

Print .orch/LAST_SESSION.md (resume card for your last seat)

orch session last [flags]

orch session leadership#

Content-free CTO 1-pager from local gateway usage + session pulses

orch session leadership [flags]
flag type default persistent help
--out string `` no write markdown to file instead of stdout

orch session list#

List session snapshots

orch session list [flags]

orch session rename#

Set display name (like claude /rename)

orch session rename <session-id> <name> [flags]

orch session seal#

Write .orch/LAST_SESSION.md from a snapshot (default: newest)

orch session seal [session-id] [flags]

orch symbols#

Query the shared symbol registry

orch symbols [flags]

orch symbols arch#

Directories with symbol counts and the edge counts between them

orch symbols arch [flags]

orch symbols impact#

Symbols in changed files plus their callers (default: the working tree diff)

orch symbols impact [path...] [flags]
flag type default persistent help
--range string `` no revision range, e.g. main...HEAD

Search shared symbols

orch symbols search <q> [flags]
flag type default persistent help
--project string `` no registered project id — only hits under that project's path

orch symbols seed#

Write missing orch:export tags from language AST (bootstrap)

orch symbols seed [path...] [flags]

No args → all shared. folders. With paths → those folders only. Idempotent; purpose is always exported. Reindexes each rooted folder.

orch symbols snippet#

One symbol body by line range instead of the whole file

orch symbols snippet <symbol> [flags]
flag type default persistent help
--max-lines int 120 no cap on body lines

orch symbols trace#

Callers and callees of one symbol, with a confidence per edge

orch symbols trace <symbol> [flags]
flag type default persistent help
--depth int 2 no hops, 1-5
--direction string both no callers|callees|both

orch task#

Create and run tasks for worker agents

orch task [flags]

orch task add#

Create a task (optionally pre-assign agent)

orch task add [flags]
flag type default persistent help
--agent string `` no optional assignee
--body string `` no task body / prompt
--body-file string `` no read body from file
--context string `` no standing background for the worker (not an instruction)
--context-file string `` no read context from file
--criterion stringSlice [] no acceptance criterion (repeatable); comes back met/not in the verification report
--ledger string `` no ledger item ref
--title string `` no short title

orch task assign#

Assign task to an agent

orch task assign <id> <agent> [flags]

orch task claim#

Atomically claim one ledger checklist item (shared_locks key ledger:#)

orch task claim <ledger-file> <item-number> [flags]
flag type default persistent help
--holder string `` no session id claiming the item
--ttl-min int 15 no TTL minutes

orch task done#

Mark task done/failed

orch task done <id> [done|failed] [flags]

orch task list#

List tasks

orch task list [flags]
flag type default persistent help
--limit int 50 no max rows
--status string `` no filter: open|assigned|running|done|failed

orch task release#

Release a ledger item claim (holder must match, or --holder *)

orch task release <ledger-file> <item-number> [flags]
flag type default persistent help
--holder string `` no session id

orch task run#

Dispatch assigned task (chair → agent session)

orch task run <id> [flags]
flag type default persistent help
--actor string `` no policy actor (default: ORCH_ACTOR or local)
--force bool false no bypass clarify_before_spawn ledger gate
--inplace bool false no run in project root (shared disk)
--keep-worktree bool false no keep worktree after run
--name string `` no session display name (default: agent id)
--project string `` no git repo path (default: registered project containing cwd)
--session string `` no session id (default: task-)
--timeout int 0 no agent timeout seconds (0=agents.timeout_sec)

orch zcode#

Open zcode in your project (interactive)

orch zcode [flags]

Starts zcode with its normal chat UI in the project for your current folder.

Just run: orch zcode

Then type your message inside zcode — do not pass the prompt as orch arguments. For a one-shot scripted run without the UI, use: orch dispatch --agent zcode --prompt "…"

Orche stays underneath (session, tools, locks, gateway when enabled). One running interactive agent counts as one active seat until you quit.

flag type default persistent help
--actor string `` no policy actor
--force-chair bool false no allow a second live Chair in the same project (ghost seats after kill are auto-cleared)
--name string `` no session display name
--project string `` no override project (default: registered project containing cwd)
--session string `` no session id