A question suspends the run
A worker that reaches a judgement call it was not given stops there. The run is preserved, not restarted, so asking costs almost nothing.
You design the change, rule on the forks and read the diff. Cloud and local workers do the typing — under contract, in disposable worktrees, never guessing. Everything else a team needs comes with it.
Runs on your machine · Frontier tokens for the spec and the diff · Everything else cheap or local
| Run | Job | Agent | Task | State | Fidelity |
|---|---|---|---|---|---|
| r-4f19 | implement | codex | ATL-412 webhook retries | running | — |
| r-4f17 | implement | qwen3-32b · local | HBR-208 tenant cache | asking | — |
| r-4f12 | review · lens | claude | MER-117 duplicate records | accepted | 4 / 4 |
| r-4f08 | fix | grok | HBR-205 audit pagination | accepted | 3 / 4 |
| r-4f02 | summarize | llama3.1-8b · local | MER-114 export throttling | voided | — |
r-4f17 stopped and asked. “The spec says retry on a 5xx. Two existing callers also retry on a 429. Do I change them too, or scope the retry to the new path?” — waiting on your ruling, nothing guessed.
Every run, task, document and decision is one record — not an orchestration tool with a board bolted on.
A worker builds from your spec in a disposable worktree, stops at every judgement call and never pushes. You rule, read the diff and score it — and the score decides who gets the next job of that shape.
Every project on one board, whatever tracker each one actually runs. Tasks, documentation, decisions and cost in the same system as the runs — so a change is already attributed before you score it.
The worker typed. You designed it, ruled once, read the diff and scored it. Illustrated.
Swap the harness and the record stays. Bottega keeps the task, the contract, the evidence and the score independent of whoever does the work.
Bottega runs beside the agent you already use. Bring your own models.
curl -fsSL bottega.sh | sh
A change is decisions plus typing. The architect owns what the change means, which ambiguity resolves which way, and what must stay true. A worker owns the typing — and is contractually forbidden from deciding anything it was not given.
$ orch do implement ATL-412 \ --spec docs/webhook-retries.md \ --lens failure-paths compiling pack … project rules 12 job contract implement retrieval 9 files · 2 docs worktree .claude/worktrees/atl-412 routed to codex (0.82 accepted, n=41) run r-4f19 dispatched — detached
$ orch inbox r-4f17 qwen3-32b · local waiting 4m “Two existing callers retry on 429 too. Change them as well, or scope to the new path?” $ orch answer r-4f17 \ "Scope to the new path. File a note for the two callers; they are a separate change." ruling recorded · run resumed
Measured on your repositories, keyed to job shape, stack and review lens. Illustrated.
Three parts carry the load. Remove any one and delegation starts costing more than it saves.
A worker that reaches a judgement call it was not given stops there. The run is preserved, not restarted, so asking costs almost nothing.
A worker that stopped is never marked down for stopping. Penalise the question and workers learn to guess instead — which is the failure the contract exists to prevent.
Correct, tested code that solved a different problem is still a failure. That axis is judged on its own, on the four writing jobs.
A disposable checkout bounds what an agent can touch, and the run that provisions it releases it.
Each pass answers one named question. How many passes run is fixed up front, so review cannot balloon.
A heartbeat reports blocked, waiting or clear, so a stalled run is never mistaken for a working one.
The architect is the only seat that needs to be brilliant — and the only one billed like it. Below it the work is bounded enough that a cheap cloud agent or a model on your own GPU can do it, and a scored run tells you which ones actually can.
┌────────────────────────────────┐
│ A R C H I T E C T │
│ frontier model + harness │
│ designs · rules · judges │
└───────────────┬────────────────┘
spec · contract · rules │ ruling ▲ every decision
┌───────────────┬───────────────┴───┬───────────────┐
▼ ▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐
│ worker │ │ worker │ │ worker │ │ worker │
│ cloud │ │ cloud │ │ local 8B │ │ local 32B │
│ implement│ │ review │ │ survey │ │ fix │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │ │
└───────────────┴─────────┬─────────┴───────────────┘
▼
┌───────────────────────────────────────────┐
│ R E T R I E V A L │
│ vector index + reranker · local │
│ code · docs · rules · past runs │
└───────────────────────────────────────────┘
What the change means, which ambiguity resolves which way, and what must stay true. It reads every diff before anything lands.
One job, one worktree, one contract. It has no authority to choose between two reasonable designs — that fork comes back up.
A worker that can find the three files it needs does not need a huge context window — or a huge model.
Design and judgement are worth a frontier model. Reading files, writing the obvious implementation, searching the repository and summarising a diff are not — and they are most of the volume.
A worker reads it
Surveys come back as a conclusion with citations, not as forty files billed into your context.
Local, per query
Embedding and reranking run on hardware you already own. No per-token cost to find a file.
Routing decides
Scored runs show which jobs a cheap local model finishes acceptably — and which ones it cannot.
Design the change · rule on the forks · read the diff · score it
The four acts that are actually judgement. Everything around them is execution, and execution moves down the stack until the evidence says it should not.
The rest runs below.
An agent that greps its way through a repository burns paid context before it writes a line. Ask where a behaviour lives and get a short, ranked set of code, docs, project rules and relevant past runs — handed to the worker before it starts exploring.
$ orch find "where is a run marked void" embed bge-m3 · local 21 ms search 18,402 chunks 38 ms rerank bge-reranker · local 74 ms 1 orchestrator/src/scoring/void.ts:41 markVoid() — excludes the run from routing 2 orchestrator/src/scoring/score.ts:118 the --void flag path 3 .agents/rules/70-sessions.md:9 never score another session's runs 3 results · 133 ms · 0 tokens spent · illustrated
Each project keeps the tracker it already has — its own database, its own MCP server, its own conventions. Bottega speaks to each one over MCP and aggregates the result: one board, one cost view, one place where a run is already attributed to the task that caused it.
| Key | Task | Project | Source | State | Runs |
|---|---|---|---|---|---|
| ATL-412 | Retry failed webhook deliveries with backoff | atlas | hub · native | in run | 2 |
| HBR-205 | Paginate the audit log endpoint | harbor | mcp · app server | in review | 3 |
| MER-114 | Throttle large export jobs | meridian | mcp · issue tracker | asking | 4 |
| HBR-201 | Expire sessions on password change | harbor | mcp · app server | landed | 5 |
| ATL-409 | Backfill missing invoice totals | atlas | hub · native | in run | 1 |
| note | Rate limiter counts retries as new requests | atlas | hub · note | 3 sightings | — |
A project that already has a tracker does not need a second one. Bottega reads and writes each project's own system over MCP, and keeps the register of which project owns what.
Task-key prefix, landing branch, which concerns it keeps, and how to provision a worktree. The register is the authority — not a guess in a prompt.
A project's own database, a Laravel app's task tables, a hosted issue tracker, or Bottega's native store. The board does not care which.
Statuses, comments and new tasks go back to the system of record. The aggregate view never becomes a second source of truth.
Runs, tokens and time roll up to the task and to the project, so you can see what a feature cost and where the spend concentrated.
Plans, briefs and project rules live in one queryable store and hydrate into the tree, so a prompt cites a source instead of copying it.
One line, anchored to a file, run and commit. Repeat sightings are the promotion signal; nothing becomes a task by itself.
A worker notices a defect next door, a missing test, a smell it was not sent to fix. Turn each into a task and the board stops showing what is actually happening; tell the agent to stay quiet and the finding is lost. A note is the third option: one line, filed in a second, that never reaches the board on its own.
// during a run, costing nothing $ orch note "rate limiter counts retries as new requests" note 189 filed · 1 sighting anchored: harbor · HBR-205 · rate-limit.ts:64 // later, yours to dispose of $ hub note list --actionable 189 rate limiter counts retries … 3 sightings 204 export job has no timeout 1 sighting $ hub note promote 189 HBR-212 opened, carrying the note and its sightings as evidence
Bottega talks to your projects over MCP, and exposes its own surface the same way. Any agent in any harness can read the board, file a note, open a task or record evidence — without a bespoke integration per tool.
$ hub task list --all-projects --open atlas ATL-412 in run codex harbor HBR-205 in review claude meridian MER-114 asking qwen3-32b 3 projects · 4 trackers · one board
Register the project, point Bottega at its MCP server, and its work joins the board.
A workflow is a named sequence of steps, and each step declares the job that runs it, whether it may proceed on its own, and the evidence it must produce before the next step starts. Your project's own facts — trunk, tracker, gate, release rules — are composed in when the workflow is requested, so the same lifecycle behaves correctly in every repository without being rewritten for each one.
| # | Step | Job | Autonomy | Evidence floor |
|---|---|---|---|---|
| 1 | Rebase onto trunk | — | auto | command exit |
| 2 | Run independent review lenses | review-lens | auto | recorded artifact |
| 3 | Triage every finding | — | ask | human ruling |
| 4 | Apply accepted findings | implement | ask | command exit · artifact |
| 5 | Check acceptance criteria | — | auto | recorded artifact |
| 6 | Run the project gate | — | auto | command exit |
| 7 | Open the pull request | — | ask | command exit · artifact |
| 8 | Merge the pull request | — | ask | command exit · artifact |
| 9 | Promote the release | — | ask | command exit · artifact |
| 10 | Close the task | — | auto | tracker transition |
Three declarations per step remove the guesswork that makes agent workflows drift: what runs it, whether it may proceed alone, and what it must leave behind.
A step either names an orch job — review-lens, implement — and routes by scored evidence, or it is a plain command the step runs itself.
auto runs and continues. ask stops and waits for you. Triage, applying findings, opening, merging and promoting all stop — because each is a decision.
A command exit, a recorded artifact, a human ruling, or a tracker transition. A step that cannot meet its floor has not completed, whatever it reports.
A workflow is not copied into each repository and edited until it fits. It is composed on request: the steps come from the catalogue, and the project register supplies the facts — which branch is trunk, which tracker holds the task and the exact commands to drive it, which gate proves a commit, how releases merge.
$ orch workflow compose ship-task --project atlas workflow ship-task v4 · mode full catalogue v16 steps 10 (6 auto · 4 ask) needs key · branch · worktree
The lifecycle is covered end to end — from the plan that precedes a task to the release that closes it.
Turn an intent into a specification a worker could build against, with the decisions already ruled on.
Diagnose first, then change one thing. The diagnosis is evidence, not a description of evidence.
Independent lenses under a fixed round budget, each answering one named question.
Rebase, review, triage, gate, open, merge, promote, close — the ten steps above.
File a defect with reproduction, environment and an explicit statement of what is not established.
Bring the doc store and the tree back into agreement after the code has moved.
// any agent, any harness list_workflows() compose_workflow({ slug, project, mode }) get_workflow_step({ slug, project, n }) // the project's own knowledge list_docs({ scope }) global · stack · project get_doc({ subject }) project_brief() the agent fetches its own context instead of being handed a copy
Every workflow and every document is reachable over MCP, so an agent asks for the step it is on and gets that step's instructions, its job, its autonomy and its evidence floor — already composed for the project it is working in.
Register a project and its workflows compose themselves from its own facts.
Your technical documentation lives in a store that people read and agents query — the same text, the same version, at the same moment. Nobody maintains a second copy for the machines, and no worker builds against a document that stopped being true last month.
The usual arrangement is a wiki for the team and a pile of pasted context for the agents. The two drift immediately, and the drift is invisible until a worker confidently builds the wrong thing from a copy nobody remembered to update.
// a person hub serve → browse, search, edit // an agent, mid-run list_docs({ scope: "project" }) get_doc({ subject: "payments" }) project_brief() // the architect, writing a ruling down $ orch doc set --scope project \ --subject payments --file ruling.md revision recorded · readable by both
Scope is what keeps a prompt small without keeping it ignorant. The pack compiled for a run carries the documents that bear on it.
Standards that hold across every project — how work is reviewed, landed and recorded.
What applies because of the language, framework or toolchain in play.
This repository's architecture, conventions and domain knowledge.
Rules that agents read as files are written into the worktree from the store, so a hand-edited copy is replaced rather than quietly obeyed.
A run records the document revisions it was given, so a bad result can be traced to the text that caused it.
Docs sit in the same retrieval index as source and past runs, so “where is this decided?” is one question.
Long work outlives a session. When the window fills, the usual answer is automatic compaction — something summarises your context, you are not shown what it dropped, and you find out later by discovering what the next turn forgot. Bottega makes the handoff an artifact instead: written deliberately, reviewed by you, and chosen when it is picked up.
These are documents too — the same store as your technical docs, attached in different places: on the task, on the epic, and in a resume scope a new session can pick up.
A task carries its own documents — the specification it was built against, the research that settled a decision, the acceptance criteria. Attached to the key, so they travel with the work rather than sitting in one session's scrollback.
An epic's state — what is done, what is next, which rulings already stand — is a document with a handoff role, so the next session starts from the decisions rather than re-deriving them.
At a task or epic boundary — and before any clear or compaction — a brief is offered. It records where the work stands, what was ruled and what remains open, in your words, not a summariser's.
Open briefs are listed when a session starts, and a session never consumes one you did not pick. A handoff you did not choose is just another invisible context change.
The difference is control. Compaction is a lossy transform applied to your context without review. A brief is a document: you read it, you edit it, you decide when it is used — and it stays readable long after the session that wrote it is gone.
$ orch doc list --scope resume atlas · ATL-412 webhook retries open brief · written at the review boundary ────────────────────────────────────────── Where it stands Implemented and gated. Two lenses clean, one finding open on retry budgets. Rulings that stand · Retry only the new path; the two existing callers are a separate change (noted). · Backoff is capped, not unbounded. Open, needs a decision · Whether a 429 counts against the budget. Do not · Land while the budget question is open. ────────────────────────────────────────── resume it, or leave it and start fresh
Install Bottega, dispatch your first run, and connect the projects you already have.
What it takes to run Bottega today, and what it needs.
Dispatch a job, answer its question, score the result.
What a worker may do, and where it must stop.
How judgement becomes the routing table.
The local index and reranker that feed a worker.
Put every project on one board without migrating it.
The whole lifecycle as declared, composable steps.
One source of truth for people and models.
Task plans, epic handoffs and resume briefs.
One install command. You bring Bun, Git and an authenticated gh.
curl -fsSL bottega.sh | sh
That fetches the current release, verifies it against the digest published with it, unpacks it into your install root and links orch and hub onto your PATH.
gh auth login. The repository is private, so the installer downloads the release as you.If a prerequisite is missing the installer stops and names it, along with the command that clears it. It never installs a runtime on your machine on its own.
curl -fsSL bottega.sh | sh -s -- 0.1.0~/.local/share/bottega/<version> and points current at it.orch and hub into ~/.local/bin.Set BOTTEGA_HOME to install somewhere else. Re-running at the same version is safe: it reports the existing installation and leaves it alone.
orch --version
# Bottega 0.1.0 (e8489ee)
A release prints its version and the commit it was built from. A development checkout says so instead, so a bug report can never be ambiguous about which you are running.
orch init-db
hub migrate
Databases never live in the installation. They resolve to your per-user state directory —
$BOTTEGA_STATE_HOME, then $XDG_STATE_HOME, then
~/.local/state/bottega — with orch.db and hub.db under their own
concern directories. Upgrading never touches them.
Bottega does not hold your code. It keeps a register of the projects it may work on — each an existing Git checkout with its own task-key prefix, landing branch and worktree recipe.
orch project add ~/Projects/atlas
orch project list --json
The register is the authority on which prefix belongs to which project, which branch a pull request targets, and how a disposable worktree is provisioned.
Run the installer again for a newer version. Each version keeps its own directory and current is switched to the new one, so a rollback is moving that symlink back:
ln -sfn 0.1.0 ~/.local/share/bottega/current
Old versions are kept until you ask for them to go. --prune removes every version except the one in use; nothing is ever removed silently.
For working on Bottega itself, a checkout still works and is the supported development path:
git clone <your-remote>/bottega.git
cd bottega
bun install
git config core.hooksPath .githooks
./bin/orch init-db
The tracked hooks refuse AI attribution in commit messages. A checkout and an installed release are equally authorised to create the stores, and --version tells them apart.
Dispatch a job, answer the question it stops on, and score what comes back.
Work without a key cannot be attributed later, so every run needs one. File the task first:
hub task create "Retry failed webhook deliveries with backoff" --project atlas
The key comes back in the project's own prefix — ATL-412 here. It will follow the change into the branch, the commit subject and every run.
This is the part that does not delegate. A worker builds faithfully against a written spec; it cannot build against an intention. State what the change means, which way each known ambiguity resolves, and what must stay true afterwards.
orch do implement ATL-412 --spec docs/webhook-retries.md
orch do is detached by default: it prints a run id and returns. The pack compiled into the worker's prompt carries your project rules, the job contract and the retrieval context, so you are not pasting any of it in.
run r-4f19 dispatched — detached
A session that waits silently is indistinguishable from a dead one. Arm the heartbeat instead:
orchestrator/hooks/orch-heartbeat.sh <session-id>
It reports one of three states: blocked — a worker asked something; waiting — runs are live and nothing is needed; clear — nothing outstanding.
A worker that reaches a judgement call it was not given stops there. That is the contract working, not a failure.
orch inbox
orch answer r-4f19 "Scope to the new path. File a note for the two call sites."
The run resumes from where it stopped with your ruling in hand. Never continue a chain whose question is unanswered — resuming forces the guess the contract exists to prevent.
orch result r-4f19
orch score r-4f19 full right --note "…"
Score correctness and fidelity separately: a complete, tested change that solved a different problem is a fidelity failure however good the code is. Never score a run you did not read, and never score another session's runs — only the session that read the output can judge it.
--void, which keeps the run and its output but
excludes it from routing evidence. Scoring an agent down for your mistake teaches the router something false.
Workers never push. Run the gate on the rebased branch you are about to merge, open the pull request, and merge there.
What a worker may do, where it must stop, and why stopping is the point.
A change consists of decisions and execution. The architect decides what the change means, which ambiguity resolves which way, and what must remain true. A worker contributes execution and must not decide. Judge a delegation by whether a decision leaked to the worker — not by comparing models in the abstract.
These are product behaviour, not configuration. A workflow that needs different invariants is a different product.
The pack compiled for a run carries the job contract, the project's rules, and the retrieval context for the change. Research is handed down as a ruling, never as an open question — a networkless worker cannot answer "what is current best practice?", so the architect answers it first and states the conclusion.
orch inbox # what is waiting on you
orch answer <run> "…" # record the ruling, resume the run
orch continue <run> # only after the question is answered
How reading a diff becomes the evidence that picks the next worker.
Work routes from accepted and rejected runs on your repositories, keyed to the job shape, stack and review lens — not from a generic benchmark, a marketing claim or a global model average. Strength on one kind of work must not hide weakness on another.
Until a job has enough scored runs, it follows your declared preference. Past that threshold it routes by measured accepted rate.
orch pending # your unscored runs
orch result <run> # read it first
orch score <run> full right --note "…"
For a findings-producing review, score each finding's disposition rather than the run as a whole:
orch judge <run> full right \
--finding 1=accepted:high \
--finding 2=rejected:medium \
--note "…"
--void keeps the run and excludes it from routing.A change's tier comes from the higher of its risk and its cognitive size, and the tier fixes both the number of review lenses and a hard ceiling on rounds. At the ceiling, stop and ask — never dispatch another round, whatever the new findings' severity. A clean round ends the ladder.
A local index and reranker, so a worker starts with the right three files.
An agent that greps its way through a repository spends paid context before it writes a line, and a small model runs out of room before it reaches the answer. Retrieval moves that search onto hardware you already own: embedding and reranking cost GPU seconds, not tokens.
A vector search proposes candidates; a reranker reorders them so the top of the list is the part worth reading. Both stages run against your local model host. The result is packed into the worker's prompt — the architect never fetches it to paste it in, which would spend the exact context the delegation was avoiding.
orch find "where is a run marked void"
Put every project on one board without migrating a single task.
A project is registered with its main checkout path, its task-key prefix, its landing branch, which concerns it keeps and how to provision a worktree. The register — not a prompt, not a convention — is the authority.
orch project add ~/Projects/harbor
orch project list --json
Pull requests target the declared landing branch, never an optional production branch. The update verbs verify declared branches and refuse a mismatch.
A project may keep its own task tracker, doc store, workflows or review pipeline. Do not copy a Bottega mechanism into a project that can call Bottega, and do not migrate a project's tasks to put them on the board. Bottega connects to the project's own MCP server and aggregates the result.
hub.Statuses, comments and new tasks are written back to the system of record, so the aggregate board never becomes a second source of truth.
Each project registers its own servers and sees no other project's. Scoping is mechanism, not discipline: a project's agent cannot reach another project's surface because it was never given it.
Bottega exposes its own MCP surface, so an agent in any harness can read the board, open a task, file a note or record evidence without a bespoke integration per tool. A worker reaches this machine's MCP servers when the run is dispatched with MCP enabled — which is how it fetches its own context instead of being handed a copy.
orch note "heartbeat reads clear while a worker sits blocked"
hub note same <id> # a repeat sighting, not a duplicate row
hub note promote <id> # a human act — never scheduled
Project, run, branch, session, commit and any file anchor are derived when the note is filed. Repetition with cost is the promotion signal; the board never grows by itself.
Declared steps that cover a task's whole life, composed from your project's own facts.
Ask for a workflow and you get it resolved for the project you named — the steps from the shared catalogue, the facts from the project register.
orch workflow list
orch workflow compose ship-task --project atlas
Do not paste a workflow into a prompt or a repository file. A pasted copy stops matching the catalogue the moment either changes, and the drift is silent.
auto proceeds; ask stops for a ruling and nothing downstream runs until you give one.A workflow can stop at different depths. A mode selects how far this run goes — planning only, review only, or ship and promote — without becoming a second workflow that can drift from the first.
Documents are served in scopes, and a composed workflow names the ones that apply rather than embedding their text:
An agent fetches what it needs. The architect naming a source costs one line; pasting that source costs the whole document, on every later turn.
Work outlives a context window. Two things carry it, and both are artifacts you can read:
orch doc list --scope resume
orch doc get <subject>
Technical documentation your team and your models read from one place.
Every document has a scope, and the scope decides who is given it:
orch doc list --scope project
orch doc get <subject>
orch doc set --scope project --subject <name> --file <path>
Over MCP the same surface is list_docs, get_doc and set_doc, plus project_brief for the short orientation a worker needs before anything else. An unfiltered listing returns every body, so filter by scope.
Some documents are rules that agents read as files in the tree. Those are written into the working copy from the store, never edited in place:
orch canon hydrate
Edit the row in the store, hydrate, then commit what hydrate wrote. A file edited by hand is overwritten at the next hydrate and never becomes the rule.
A run records the document revisions it was given. When a result is wrong, you can tell whether the worker misread a good document or faithfully followed a bad one — which are different defects with different fixes.
The store drifts from the code like any documentation. The sync the docs workflow reconciles them deliberately rather than on a schedule, because a scheduled rewrite of documentation nobody read is how a store fills with confident nonsense.
Carrying work across sessions without losing the decisions that shaped it.
Context management uses the same doc store, in different places. What changes is where a document is attached and who picks it up.
A task carries its own documents: the specification a worker built against, the research that settled a decision, the acceptance criteria. They are attached to the key, so they survive every session that touches the task.
hub task doc new <KEY> --title "Specification"
hub task doc list <KEY>
Work larger than one task needs its state written down: what is done, what is next, which rulings already stand. That is a task document with a handoff role, so the next session starts from the decisions instead of re-deriving them — or worse, silently re-deciding them.
hub task doc new <KEY> --role handoff
A brief is offered at a task or epic boundary, and before any clear or compaction. It records:
orch doc list --scope resume
orch doc get <subject>
Open briefs are listed when a session starts. A session never consumes a brief you did not choose — otherwise it is just another invisible context change with better manners.
Automatic compaction is a lossy transform applied to your context, usually without showing you what it discarded. It is fine for chat and wrong for work, because the parts most easily dropped — a ruling you gave once, a constraint stated early, the reason an approach was rejected — are exactly the parts whose loss is expensive and silent.
The verbs you need, and where the authoritative flags live.
orch --help, orch <verb> --help and
hub --help own the flags and usage. This page names the verb a task needs; it does not copy the
flag tables, because a copy rots.
orch jobs — the job types and the axes each is scored on.orch guide — what to use for what, and what is still a guess.orch do <job> — dispatch. Detached by default; it prints a run id and returns.orch contract <job> — the preamble prepended to that job's prompt.orch wait / orch result — collect a detached run.orch inbox — questions waiting on a ruling.orch answer <run> — record the ruling and resume.orch pending — runs you dispatched and have not scored.orch score <run> — the verdict, with --void for your own harness errors.orch judge <run> — per-finding dispositions for a review.orch project list --json — the register: prefixes, landing branches, recipes.orch doctor — what is wrong with this installation.orch monitor — what is wrong on this machine, with --history.orch close-out — release terminal worktrees.hub task — create, move and close tasks.hub note — keep, promote, drop and merge observations.hub serve — the dashboard.