@azure-id/orc 1.0.0 โ†’ 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +2437 -2367
  2. package/README.md +694 -631
  3. package/bin/cli.js +639 -0
  4. package/bin/verify-contracts.js +74 -0
  5. package/bin/verify-package.js +568 -563
  6. package/bin/webui/api.js +15 -0
  7. package/bin/webui/app.html +210 -207
  8. package/bin/webui/css/panels/wait.css +123 -0
  9. package/bin/webui/fixtures/index.js +7 -0
  10. package/bin/webui/fixtures/wait.js +97 -0
  11. package/bin/webui/i18n/en/nav.json +21 -20
  12. package/bin/webui/i18n/en/wait.json +41 -0
  13. package/bin/webui/i18n/id/nav.json +21 -20
  14. package/bin/webui/i18n/id/wait.json +41 -0
  15. package/bin/webui/js/01-i18n.js +151 -150
  16. package/bin/webui/js/panels/wait.js +253 -0
  17. package/package.json +1 -1
  18. package/templates/commands/orc-wait.md +19 -0
  19. package/templates/hooks/orc-statusline.js +39 -0
  20. package/templates/skills/_shared/phases/preflight.md +22 -0
  21. package/templates/skills/_shared/wait.md +240 -0
  22. package/templates/skills/orc/SKILL.md +6 -1
  23. package/templates/skills/orc-aftermath/SKILL.md +6 -1
  24. package/templates/skills/orc-analyze/SKILL.md +6 -1
  25. package/templates/skills/orc-boundary/SKILL.md +6 -1
  26. package/templates/skills/orc-brainstorm/SKILL.md +6 -1
  27. package/templates/skills/orc-budget/SKILL.md +6 -1
  28. package/templates/skills/orc-challenge/SKILL.md +6 -1
  29. package/templates/skills/orc-claude/SKILL.md +6 -1
  30. package/templates/skills/orc-diy/SKILL.md +6 -1
  31. package/templates/skills/orc-doc/SKILL.md +6 -1
  32. package/templates/skills/orc-explain/SKILL.md +5 -0
  33. package/templates/skills/orc-export/SKILL.md +5 -0
  34. package/templates/skills/orc-fast/SKILL.md +6 -1
  35. package/templates/skills/orc-grill/SKILL.md +6 -1
  36. package/templates/skills/orc-learn/SKILL.md +6 -1
  37. package/templates/skills/orc-mini/SKILL.md +6 -1
  38. package/templates/skills/orc-pact/SKILL.md +6 -1
  39. package/templates/skills/orc-pattern/SKILL.md +6 -1
  40. package/templates/skills/orc-poly/SKILL.md +6 -1
  41. package/templates/skills/orc-quick/SKILL.md +6 -1
  42. package/templates/skills/orc-retro/SKILL.md +6 -1
  43. package/templates/skills/orc-route/SKILL.md +6 -1
  44. package/templates/skills/orc-verify/SKILL.md +6 -1
  45. package/templates/skills/orc-wait/SKILL.md +163 -0
  46. package/templates/skills/orc-wiki/SKILL.md +6 -1
package/README.md CHANGED
@@ -1,631 +1,694 @@
1
- <div align="center">
2
-
3
- # ๐Ÿ‹ ORC
4
-
5
- **An orchestrator skill constellation for [Claude Code](https://claude.com/claude-code).**
6
-
7
- *Intake โ†’ analyze โ†’ plan โ†’ score โ†’ parallel subagents โ†’ review โ†’ verify โ†’ ship.*
8
-
9
- ![npm](https://img.shields.io/npm/v/%40azure-id%2Forc?style=for-the-badge&color=cb3837&logo=npm)
10
- ![Version](https://img.shields.io/badge/version-1.0.0-blue.svg?style=for-the-badge)
11
- ![License](https://img.shields.io/badge/license-MIT-green.svg?style=for-the-badge)
12
- ![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg?style=for-the-badge)
13
- ![Claude Code](https://img.shields.io/badge/Claude_Code-Skills-purple.svg?style=for-the-badge)
14
- ![Dependencies](https://img.shields.io/badge/dependencies-zero-lightgrey.svg?style=for-the-badge)
15
- ![GitHub stars](https://img.shields.io/github/stars/azure-id/orc?style=for-the-badge&color=yellow)
16
-
17
- **Latest: v1.0.0** ยท updated 2026-08-30 ยท [full changelog](CHANGELOG.md)
18
-
19
- **On npm: [`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc)** โ€” `npm i -g @azure-id/orc`
20
-
21
- **๐Ÿ‡ฎ๐Ÿ‡ฉ [Baca dalam Bahasa Indonesia](README-id.md)**
22
-
23
- </div>
24
-
25
- ---
26
-
27
- > [!CAUTION]
28
- > **Upgrading from a version before v0.56.0? Do this once.**
29
- >
30
- > The package moved from the unscoped `orc` to **`@azure-id/orc`**. Both declare
31
- > the same `orc` command, and npm will not hand that command to the new package
32
- > while the old one still holds it โ€” so **every** install source fails with the
33
- > same error, and `orc upgrade` cannot fix itself:
34
- >
35
- > ```text
36
- > npm error code EEXIST
37
- > npm error File exists: C:\Users\you\AppData\Roaming\npm\orc
38
- > ```
39
- >
40
- > Run these two lines once. Nothing in your `.claude/` is touched, and your
41
- > `orc.config.yaml` survives:
42
- >
43
- > ```bash
44
- > npm uninstall -g orc # release the `orc` command from the old package
45
- > npm i -g @azure-id/orc # install the current one
46
- > orc update # re-apply into this project (add --global for ~/.claude)
47
- > ```
48
- >
49
- > **From v0.56.0 onward `orc upgrade` handles this for you** โ€” it removes the old
50
- > package first, then installs, and says so while it does it. `orc doctor` also
51
- > reports the old package by name if it is still there.
52
- >
53
- > Do **not** reach for `npm i -g -f`. `--force` overwrites the command file and
54
- > leaves the superseded package installed underneath, owning nothing and never
55
- > updated again.
56
-
57
- ---
58
-
59
- > [!IMPORTANT]
60
- > **`orc-open` is released โ€” ORC for non-Claude agents.**
61
- > A provider-agnostic port of the pipeline:
62
- > **[github.com/azure-id/orc-open](https://github.com/azure-id/orc-open)**. Use it
63
- > if you run a different coding agent. This repository stays Claude Codeโ€“native.
64
-
65
- ---
66
-
67
- ## What ORC is
68
-
69
- You give ORC a feature โ€” or a requirements document. It works out what you
70
- meant, plans the work, sends each task to the **cheapest model that can still do
71
- it**, runs the tasks that do not collide **at the same time**, reviews the
72
- result, verifies it against a definition of done you signed off, and ships it.
73
-
74
- It writes its state to disk as it goes, so a long run survives a pause, a token
75
- limit, or a brand new chat session.
76
-
77
- **ORC is not a program that runs.** It is a set of markdown **skills**, **slash
78
- commands** and **subagent definitions** that Claude Code reads and follows. This
79
- zero-dependency npm package copies those files into your `.claude/` folder.
80
-
81
- ```text
82
- โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ you own scope + sign-off โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
83
- feature / doc โ”€โ”€โ–ถ intake โ”€โ–ถ analyze โ”€โ–ถ plan โ”€โ–ถ score โ”€โ–ถ โ‡‰ parallel waves โ‡‰ โ”€โ–ถ review โ”€โ–ถ verify โ”€โ–ถ ship
84
- (grounded) (per task) (cheapest capable model) (checkpointed to disk)
85
- ```
86
-
87
- ---
88
-
89
- ## ๐Ÿ‘€ See it run before you run it
90
-
91
- Every lane is written out as a **mocked run**: what you type, what ORC prints
92
- back, and the files that land on disk. Nothing was executed to make them โ€” they
93
- exist so you never have to spend tokens to find out what a command does.
94
-
95
- ### **โ–ถ [Start here: `mock-run/INDEX.md`](mock-run/INDEX.md)**
96
-
97
- Also available without leaving your machine:
98
-
99
- ```bash
100
- orc mock-run list # every walkthrough, in reading order
101
- orc mock-run show orc-pact # read one
102
- orc ui # โ–ธ Mocked Skill Use โ€” the same docs, searchable
103
- ```
104
-
105
- ---
106
-
107
- ## Why it works this way
108
-
109
- A single agent handed a real feature fails the same ways every time: it silently
110
- picks one reading of your request, runs the most expensive model on everything,
111
- forgets decisions when the context compacts, says "done" against a definition
112
- nobody wrote, cites code that does not exist, and leaves nothing to inspect.
113
-
114
- Those are **process problems** โ€” the ones teams solved with roles, reviews and
115
- written agreements. ORC writes that discipline down as skills:
116
-
117
- - **Coordinating and doing are different jobs.** The orchestrator never
118
- implements. Even a one-line change goes to a subagent, which keeps its own
119
- context lean for the whole run.
120
- - **Every task is scored, and the score picks the model.** You see the table
121
- before anything starts, and the agents are named and model-pinned, so what ran
122
- is a fact you can check.
123
- - **"Done" is written before the work starts.** Intake produces a signed-off
124
- spec whose definition of done becomes the final verification.
125
- - **Nothing is trusted, everything is attested.** `file:line` quotes, verbatim
126
- build output, anchored findings โ€” and the orchestrator spot-checks them, so a
127
- made-up citation bounces instead of riding into a task.
128
- - **Disk beats memory.** Eager checkpoints turn every pause into a clean resume,
129
- including in a fresh session.
130
- - **Rigor is a dial.** The same spine runs as `/orc-mini` (one subagent), `/orc`
131
- (real features), and `/orc-ultra` (advisor plus judgment gates).
132
- - **It learns.** Code patterns make executors write like your codebase, the wiki
133
- sharpens every future plan, and traces feed `/orc-retro`, which recalibrates
134
- the scoring from real runs.
135
-
136
- ---
137
-
138
- ## Quick start
139
-
140
- ORC is on npm as **[`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc)**.
141
-
142
- ```bash
143
- npm i -g @azure-id/orc # install
144
- npm i -g @azure-id/orc@latest # update to the newest release
145
- ```
146
-
147
- <details>
148
- <summary>Install straight from GitHub instead</summary>
149
-
150
- <br>
151
-
152
- ```bash
153
- npm i -g https://github.com/azure-id/orc/archive/refs/heads/main.tar.gz
154
- ```
155
-
156
- </details>
157
-
158
- Then, inside a project:
159
-
160
- ```bash
161
- orc init # install into ./.claude (this project)
162
- orc init --global # install into ~/.claude (all projects)
163
- orc onboarding # the whole walkthrough in the terminal โ€” no GitHub needed
164
- orc config # view or change settings (zero model tokens)
165
- orc ui # the local control panel
166
- orc --help # every command
167
- ```
168
-
169
- After installing:
170
-
171
- 1. Paste your team's PR template into `skills/orc/subskills/orc-pr/pr.md`.
172
- 2. Add `.claude/orc/run/` to your project `.gitignore`.
173
- 3. Run **`/agents`** to confirm your Claude Code accepts the agent model ids.
174
- 4. **Run your main session on Opus 5.** A subagent can never use a better model
175
- than your session. This is the most common cause of "it used the wrong
176
- model" โ€” see [model selection](guides/model-selection.md).
177
- 5. If a `/command` does not appear, your Claude Code may read commands from a
178
- different folder โ€” move the files in `commands/` there.
179
-
180
- <details>
181
- <summary><b>Staying up to date</b></summary>
182
-
183
- <br>
184
-
185
- `orc update` re-copies the files already in this package. It never uses the
186
- network. **`orc upgrade` is the one that pulls a new version**: it fetches the
187
- newest package first, then applies it. Your `.claude/orc.config.yaml` survives
188
- both.
189
-
190
- ```bash
191
- orc version # what you have, and whether something newer exists
192
- orc changelog # what you would GET by upgrading
193
- orc upgrade # fetch the latest, then update this project
194
- orc upgrade --global # the same for ~/.claude
195
- orc upgrade --from @azure-id/orc # explicitly from npm
196
- orc upgrade --from github:azure-id/orc # a fork, or any npm spec
197
- ```
198
-
199
- Or update the package yourself and re-apply it:
200
-
201
- ```bash
202
- npm i -g @azure-id/orc@latest
203
- orc update
204
- ```
205
-
206
- The update check reads the source over HTTPS, is cached for 24 hours, and fails
207
- silently when you are offline. Turn it off with `ORC_NO_UPDATE_CHECK=1`.
208
-
209
- You do not have to run a command to hear about it: the same notice appears
210
- inside Claude Code through ORC's hooks, at **zero model tokens** โ€” hooks are
211
- scripts Claude Code runs, not model turns.
212
-
213
- `orc upgrade` tries the npm registry first, then a plain tarball, then the
214
- GitHub spec โ€” and it remembers which one worked. If the old unscoped `orc`
215
- package is still installed, it removes that first (announced), because npm
216
- cannot give the `orc` command to `@azure-id/orc` while another package owns it.
217
- See the caution at the top of this README for the one-time manual version.
218
-
219
- </details>
220
-
221
- > **"ORC cannot see my wiki"?** Run **`orc wiki sync`**, not a new scan. Docs
222
- > without a manifest are *unregistered*, not missing โ€” common when a scan stopped
223
- > at one of `/orc-wiki`'s pauses. Sync rebuilds the index from the docs you
224
- > already have, for free.
225
-
226
- > **"What does ORC actually know about my project?"** `orc wiki docs` lists every
227
- > registered doc, `orc wiki coverage` says how much of your code is written about
228
- > at all, and `orc pattern show <lang>` prints the conventions that go into every
229
- > agent that writes code here. All free, all read-only โ€”
230
- > **[`guides/knowledge-reads.md`](guides/knowledge-reads.md)**.
231
-
232
- ---
233
- ## Terminal Hook
234
- ORC have terminal hook to see: Context Window %, 5 Hour usage %, Weekly usage % and others you might see
235
-
236
- <img width="725" height="96" alt="image" src="https://github.com/user-attachments/assets/6a649c87-81ea-4fd9-9d0b-6bb4b97fe9cd" />
237
-
238
- <br>
239
-
240
- ---
241
-
242
- ## The lanes
243
-
244
- > [!TIP]
245
- > They chain naturally: **`/orc-brainstorm` โ†’ `/orc-grill` โ†’ `/orc-analyze` โ†’
246
- > `/orc-plan` โ†’ `/orc-route` โ†’ `/orc`**. You can start anywhere.
247
-
248
- ### Build something
249
-
250
- | Command | What it does | Mocked run |
251
- |---|---|---|
252
- | **`/orc`** | The full pipeline: intake โ†’ plan โ†’ scored parallel waves โ†’ review โ†’ verify โ†’ ship. Checkpoints eagerly; resumes in a fresh session. | [see it](mock-run/orc.md) |
253
- | **`/orc-ultra`** | The same, plus an Opus 5 **xhigh** advisor and three judgment gates. Deep analysis, patterns, tests and security forced on. Costly by design. | [see it](mock-run/orc-ultra.md) |
254
- | **`/orc-mini`** | One Sonnet 5 executor, a build + test smoke gate, ship. Skips full review and verify. Switches to the full flow mid-run on request. | [see it](templates/skills/orc-mini/examples/mini-run-mock.md) |
255
- | **`/orc-fast`** | The fastest lane. Needs a fresh wiki **and** a cached code pattern; then it skips the analyst and planner entirely. A missing prerequisite falls back to `/orc-mini` โ€” the chat never stops. | [see it](mock-run/orc-fast.md) |
256
- | **`/orc-quick`** | Ask for anything: a fix, a question, a defect hunt, a dependency bump, PR comments. Look โ†’ ask once โ†’ do. **It always asks which agent to dispatch**, and no setting can change that. | [see it](mock-run/orc-quick.md) |
257
- | **`/orc-diy`** | Your own lane, composed in the terminal with `orc diy` and compiled. Unconfigured or stale โ†’ it refuses and offers plain `/orc`. | [see it](mock-run/orc-diy.md) |
258
-
259
- ### Work out what to build
260
-
261
- | Command | What it does | Mocked run |
262
- |---|---|---|
263
- | **`/orc-brainstorm`** | You do not have the idea yet. It generates candidates against named thinking lenses with **no criticism while generating**, clusters them into a few real directions, stress-tests each, then recommends one and **waits โ€” it never picks for you**. Every menu ends with your own slot. | [see it](mock-run/orc-brainstorm.md) |
264
- | **`/orc-grill`** | You have one idea and it is still vague. It asks rounds of questions, **looks facts up itself** instead of making you recite your own codebase, and never answers its own question. Ends when *you* say the idea matches what you meant. | [see it](mock-run/orc-grill.md) |
265
- | **`/orc-analyze`** | A document or a request โ†’ a scope-bounded, code-grounded spec. Every claim carries `file:line` evidence or becomes a question. Deep mode adds parallel scouts. | [see it](templates/skills/orc-analyze/examples/analyze-mock.md) |
266
- | **`/orc-plan`** | A request or a spec โ†’ a real task plan: grounded files, dependencies, facets, and a test disposition per task. | [see it](mock-run/orc-plan.md) |
267
- | **`/orc-doc`** | Writes the long document โ€” a PRD, a TSD, a cross-team agreement, a status report or a runbook โ€” as portable Markdown that imports cleanly into Notion, Obsidian, Docs, Coda, Craft and GitHub. **ORC never reads the document body**: each section is its own file under `sections/`, each writer owns exactly one of them, each checker reads one bounded part, and `document.md` is a build artifact rebuilt for free. Every wave is a stop you can walk away from, and it resumes months later without you explaining anything twice. | [see it](mock-run/orc-doc.md) |
268
- | **`/orc-route`** | You have a plan โ€” which lane should build it? It names one lane, the runners-up with what each costs you, and any lane that is impossible with the condition blocking it. **It refuses to route a sentence**, because that would be guessing. | [see it](mock-run/orc-route.md) |
269
- | **`/orc-explain`** | "Wait, what?" It says the last message again: the point first, then the background it assumed, then every ORC-only word defined in your project's terms. | [see it](mock-run/orc-explain.md) |
270
- | **`/orc-poly`** | One change across two or more repos, without drift. Peer source is read-only; it freezes the shared boundary into a contract and writes one plan per repo. It never builds. | [see it](templates/skills/orc-poly/examples/poly-run-mock.md) |
271
-
272
- ### Teach ORC your project
273
-
274
- | Command | What it does | Mocked run |
275
- |---|---|---|
276
- | **`/orc-wiki`** | Scans your codebase into a persistent `wiki/`, evidence-anchored, and points `CLAUDE.md` at it. Freshness is computed on read, never stored. Expensive and opt-in โ€” it always warns first. | [see it](templates/skills/orc-wiki/examples/wiki-run-mock.md) |
277
- | **`/orc-pattern`** | Learns your real conventions per language, so executors write code that matches your codebase. Your conventions win; security and correctness invariants always carry through. | [see it](mock-run/orc-pattern.md) |
278
- | **`/orc-learn`** | Onboarding docs for a human, one feature at a time, `file:line`-anchored. Local and git-ignored. | [see it](templates/skills/orc-learn/examples/learn-run-mock.md) |
279
- | **`/orc-claude`** | Builds or refreshes this repo's `CLAUDE.md` from verified facts. Zero questions; your own content is never trimmed. | [see it](templates/skills/orc-claude/examples/claude-run-mock.md) |
280
- | **`/orc-export`** | Compiles the wiki, patterns, `PACT.md` and boundary cards into a portable `AGENTS.md` โ€” derived, fingerprinted, `--check`able. So ORC is not a trap. | [see it](mock-run/orc-export.md) |
281
-
282
- ### Check what happened
283
-
284
- | Command | What it does | Mocked run |
285
- |---|---|---|
286
- | **`/orc-challenge`** | Grades a **finished** artifact โ€” a TSD, a PRD, an ADR, an API contract, a README, a module โ€” against a goal **you** state, then **stops and makes you fix it in a different session**. ORC judges, you fix, ORC re-judges: **it never fixes what it judged**, because a session that just wrote the fix would grade its own homework. **And it never guesses what "good" means here.** | [see it](mock-run/orc-challenge.md) |
287
- | **`/orc-pact`** | The promises your project makes, and which are in doubt right now. Four states, all **computed on read**: HOLDING ยท DRIFTED ยท **UNCHECKABLE** (the honest state โ€” never a failure) ยท BROKEN. It never invents a promise and never retires one for you. | [see it](mock-run/orc-pact.md) |
288
- | **`/orc-boundary`** | What ORC should **not** try here, and exactly what would change that. EXECUTE ยท ESCALATE ยท REFUSE, per area. **A REFUSE always names what would make it a yes.** It gates ORC's own dispatch, never your instructions. | [see it](mock-run/orc-boundary.md) |
289
- | **`/orc-verify`** | Verifies only your git-modified changes: build, tests, diff sanity, findings on a P0โ€“P3 ladder. Read-only. | [see it](templates/skills/orc-verify/examples/verify-mock.md) |
290
- | **`/orc-aftermath`** | Did what we shipped hold up? Graded from the repository's own future: churn, reverts, deleted tests, broken promises. **Churn is a signal, never a verdict**, and it never names a person. | [see it](mock-run/orc-aftermath.md) |
291
- | **`/orc-budget`** | What a run costs, in the unit you are billed in. A **token vector** โ€” fresh input, cache write, cache read, output, never blended โ€” shown four ways: tokens, dollars, percent of your 5-hour window, and context risk. Needs a plan, not a sentence. | [see it](mock-run/orc-budget.md) |
292
- | **`/orc-retro`** | Mines the behavior traces into a calibration report and files it upstream as a PR. | [see it](templates/skills/orc-retro/examples/retro-mock.md) |
293
-
294
- ### Ship and hand over
295
-
296
- | Command | What it does | Mocked run |
297
- |---|---|---|
298
- | **`/orc-pr-setup`** | Decides where a big change gets cut into stacked pull requests: ordered layers, each with a purpose, a file list and a measured budget. It stops and asks at every uncertain seam, and never touches git. | [see it](mock-run/orc-pr-setup.md) |
299
- | **`/orc-pr-driver`** | Executes that plan: a branch per layer, a **mandatory green gate at each layer's own base**, `gh stack submit`, then restack and bottom-up merge. | [see it](mock-run/orc-pr-setup.md) |
300
- | **`/orc-handoff`** | For someone who does not read code. The grade comes from **whether a cheap check exists**, not from the file type. It shows the undo command *before* it writes, and never touches a red file. | [see it](mock-run/orc-handoff.md) |
301
-
302
- ---
303
-
304
- ## Documents that go somewhere
305
-
306
- `/orc-doc` writes the long document โ€” and Markdown is the deliverable because of
307
- where a Markdown file can actually go:
308
-
309
- | Target | Imports `.md`? |
310
- |---|---|
311
- | Notion ยท Obsidian ยท Google Docs ยท Coda ยท Craft ยท Apple Notes ยท GitHub | **natively** |
312
- | Docusaurus ยท Hugo ยท Jekyll ยท MkDocs | yes โ€” and these *want* YAML front matter |
313
- | Confluence | not natively. Plan for a marketplace importer app |
314
- | Microsoft OneNote | **no**. Convert to Word or PDF first |
315
-
316
- That table is load-bearing, not decoration: `orc doc lint --target` enforces the
317
- real limit of the place your document is going. Notion has three heading levels,
318
- so an H4 is an **error** there. A hard-wrapped paragraph is an error everywhere,
319
- because a wrap at 80 columns becomes a line break inside a Notion paragraph.
320
-
321
- Five base templates โ€” `prd` ยท `tsd` ยท `collaboration` ยท `report` ยท `workflow` โ€”
322
- each a floor rather than a cage. `orc doc templates` prints them; bring your own
323
- and its headings become the outline.
324
-
325
- **Full detail: [`guides/documents.md`](guides/documents.md).**
326
-
327
- ---
328
-
329
- ## `orc ui` โ€” the control panel
330
-
331
- A local web page for **everything in ORC that is not ai**. One boundary defines
332
- it: **it never runs a lane, never spawns `claude`, never calls a model API.**
333
- Everything it shows or writes is deterministic CLI output.
334
-
335
- <img width="1870" height="1269" alt="image" src="https://github.com/user-attachments/assets/207fe821-9aa6-430e-bdcc-968340cc687f" />
336
-
337
- > ๐ŸŽฌ **Video walkthrough โ€” not recorded yet.** The player belongs here; see
338
- > [`mock-run/media/README.md`](mock-run/media/README.md) for the two files to
339
- > drop in. Until then, the panel is written out screen by screen in
340
- > [`mock-run/orc-ui.md`](mock-run/orc-ui.md).
341
-
342
- ```bash
343
- orc ui # binds 127.0.0.1:9921 and opens a browser
344
- orc ui --port 9930 # an explicit port never auto-walks โ€” a collision is an error
345
- orc ui --no-open # print the URL only
346
- orc ui --idle 0 # disable the idle shutdown (default: 30 minutes)
347
- orc ui --fixtures # canned data, no project needed
348
- orc ui --stop # shut this project's server down
349
- ```
350
-
351
- | Panel | Shows | Can change |
352
- |---|---|---|
353
- | Overview | version, `orc doctor`, wiki tier, what is waiting โ€” plus **Worth doing**, one list of everything wanting a decision | โ€” |
354
- | Settings | every config key, grouped, each with its own control | staged edits, applied together |
355
- | Runs | run history as an accordion: a row opens in place into state-of-play, resume prompt, checkpoint, trace tail | โ€” |
356
- | **Knowledge** | **five tabs**: the wiki's tier AND its **contents** (every doc, what it covers, how often it is read), coverage against your tracked files, the code patterns with the conflicts the codifier flagged, repair memory with a **preview-then-apply** prune, and a read-only view of the linked repos | `wiki sync`, `gotcha prune` |
357
- | Stats | lane and agent usage, downgrades, and a **Cost** tab whose stacked bar keeps cache-read visible | โ€” |
358
- | Flow | the compiled DIY flow, its gate, and a stepper of every phase in order | `diy set`, `diy compile`, presets |
359
- | Crosslink | **Design** (the boundary as a graph) and **Settings** (each peer's freshness) | `crosslink add` / `remove` |
360
- | Promises ยท Boundary ยท Self-serve | the pact ledger, the boundary cards, and the surfaces a non-developer can change | `pact check`, `pact sync`, `handoff set` |
361
- | **Docs** | every `/orc-doc` document as a **ribbon** โ€” one block per section, sized by its length and coloured by its state โ€” plus the section files with their sub-parts, the wave strip, the lint health card and the wave preview | `doc compile` ยท `doc migrate` |
362
- | **Extra** | **six tabs**: the connection setup, the local tools and their state, the band ladder and the six positions, spending per profile per band, and **Recovery** โ€” every dispatch that never reported back, with what it left on disk | `extra add` / `ping` / `route` / `role` |
363
- | **Challenge** | every `/orc-challenge` cycle: the frozen goal, the council roster and what each lens raised, the findings with their dispositions, and whether the pass is computed or blocked | `challenge record` ยท `accept` ยท `rebut` |
364
- | **Mocked Skill Use** | every mocked run that ships with ORC, grouped and searchable, with a reading pane | โ€” |
365
- | Learn | the `orc onboarding` walkthrough, one section at a time | โ€” |
366
- | Experiment | every lane with a copy button; opens a Claude session in a terminal | โ€” |
367
- | Maintenance | `update`, `update --prune`, `doctor --fix`, `upgrade` | preview, then apply |
368
-
369
- - **The panel *is* the CLI.** It reads `orc <command> --json` and shells the real
370
- command for every write, so it cannot drift from the CLI โ€” it has no second
371
- copy of anything.
372
- - **A free action gets a button. A paid action gets a command to copy.**
373
- - **Nothing is automatic**, and a prune names **every** file. A count is not
374
- consent.
375
- - **Treated as a write surface**: loopback only, a fresh token per launch, a
376
- Host-header check against DNS rebinding, no CORS, POST-only mutations.
377
- - **Project-scoped, no `--global` config.** If a global install exists that could
378
- win skill resolution, every page carries a banner. It reports that; it never
379
- edits global config.
380
- - **English and Indonesian.** Only the panel's own words are translated โ€” config
381
- keys, model ids, paths, commands and doctor messages are printed exactly as the
382
- CLI wrote them, because a translated config key is a key that does not exist.
383
-
384
- Zero dependencies, zero build step: `node:http`, plain JavaScript, hand-written
385
- CSS.
386
-
387
- ---
388
-
389
- ## Running part of the ladder somewhere else โ€” `orc extra`
390
-
391
- **The orchestrator is always Claude.** What Extra changes is *who executes a
392
- slice*: a score band you own, or one of six named positions, can point at
393
- DeepSeek, GLM, Kimi, MiniMax, Qwen, a local Ollama, or a coding CLI you already
394
- have signed in (opencode, codex). Everything downstream โ€” the smoke gate, the TDD
395
- gate, the reviewer, the worktree-delta check โ€” is engine-blind, so nothing learns
396
- the work was foreign.
397
-
398
- **Off by default, and it cannot be armed until something has actually answered.**
399
-
400
- ```bash
401
- orc extra providers # the shipped, dated catalog โ€” providers, never models
402
- orc extra tools # local CLIs: absent ยท outdated ยท unauthenticated ยท ready
403
- orc extra add ds --provider deepseek --engine api --env-key DEEPSEEK_API_KEY
404
- orc extra ping ds # the connection gate: a ladder, and nothing reads stronger than it is
405
- orc extra models ds --test <id> # a LISTED model can still be dead upstream
406
- orc extra health ds --model <id> # โ€ฆand a working model is not one that FINISHES
407
- orc extra route set 40-55 ds/deepseek-chat # a score band
408
- orc extra role set doc-writer ds/deepseek-chat # or a named position
409
- orc config set extra_enabled true
410
- ```
411
-
412
- - **The catalog ships providers and never models.** A shipped model id is wrong
413
- within a quarter and wrong *silently* โ€” a 404 mid-wave. `orc extra ping` reads
414
- the live list and caches it; nothing invents a name. Same for price: a cost
415
- figure ORC did not price itself is never printed, it reads as an em dash.
416
- - **Every armed run says so before wave 1.** Routing work off Claude silently is
417
- the failure this whole subsystem is shaped around.
418
- - **Two hard hold-backs**: a task with a cited `risk[]` (auth, money, migration,
419
- security, concurrency, data-integrity) stays on Claude unless you say
420
- otherwise, and a `/orc-boundary` REFUSE area holds even in `warn`.
421
- - **A foreign return is foreign input.** It is the only foreign class that edits
422
- your worktree, so what it says it did is a *claim*, checked against the tree.
423
- - **Your key never reaches a command line.** It travels on stdin into an
424
- encrypted vault, or it stays in an environment variable, or the tool holds its
425
- own โ€” and the passphrase is a **deadline**, not a second factor.
426
- - **Six positions for the lanes that pin an agent instead of scoring a task**:
427
- `quick-executor` ยท `fast-executor` ยท `doc-writer` ยท `doc-checker` ยท
428
- `wiki-scanner-deep` ยท `wiki-scanner-light`. A position with no row keeps its
429
- slot and reads as its pinned Claude agent โ€” "I left the checker on Claude on
430
- purpose" and "there is no checker" must never look the same.
431
-
432
- **When a foreign worker fails, it is a position and not a blank page.** ORC
433
- journals the baseline *before the first byte leaves the machine*, so a worker cut
434
- off mid-write is **reconciled and resumed** โ€” never re-dispatched from scratch
435
- onto a file that is already two-thirds written.
436
-
437
- - **`extra_stall_s` (default 180)** stops a worker that has produced nothing for
438
- that long. It is reset by observable progress โ€” the worker's stream, its
439
- stderr, or a declared file that changed on disk โ€” so it never fires on one that
440
- is merely slow. `stalled` is retryable, which is what makes the resume ORC's
441
- own spelling of typing `continue`.
442
- - **`extra_fallback_agent` (default `band`)** decides who picks the task up.
443
- `ask` stops and puts the menu to you; any installed agent name pins one. It
444
- changes *who*, never the score, the declared files or the acceptance criteria.
445
- - **Every dispatch writes its own spend record**, so a cost report never depends
446
- on a run remembering to narrate what it spent. `orc extra stats` merges the
447
- spend log, the traces and saved returns, and always says how many rows came
448
- from each.
449
-
450
- **`/orc-quick` is inert here** and announces it โ€” that lane asks which agent
451
- before every dispatch, so no setting may pre-answer it. **`/orc-challenge` never
452
- routes foreign**: swapping a lens for a different model does not make the lane
453
- cheaper, it changes what is being measured.
454
-
455
- **The whole subsystem, with every command and key:
456
- [guides/extra-models.md](guides/extra-models.md).**
457
-
458
- ---
459
-
460
- ## How the model is picked
461
-
462
- Each task is scored 0โ€“100 by **arithmetic, not judgement**: the planner reports
463
- facets (breadth, novelty, logic, test surface, cited risk, uncertainty) and a
464
- fixed published formula turns them into a number. A cited risk forces a floor of
465
- 70. The score maps through a published table to a **named, model-pinned agent**,
466
- so what ran is inspectable rather than requested in prose.
467
-
468
- > **The rule that catches everyone:** a subagent's model can never be higher than
469
- > your main session's. Run your session on Opus 5.
470
-
471
- **Full detail โ€” the bands, `opus5_only`, and the tier guard `orc init` installs:
472
- [guides/model-selection.md](guides/model-selection.md).**
473
-
474
- ---
475
-
476
- ## Configuration
477
-
478
- Settings are edited with the **`orc config` CLI** โ€” deterministic terminal I/O,
479
- so it costs **zero model tokens**.
480
-
481
- ```bash
482
- orc config # interactive menu
483
- orc config list # the effective config
484
- orc config recommend # read this repo, suggest ONE profile, with reasons
485
- orc config profile paranoid
486
- ```
487
-
488
- Your changes live in `.claude/orc.config.yaml`, which `orc update` never
489
- clobbers. `orc ui` โ–ธ Settings edits the same keys through the same validators.
490
-
491
- **Every key, with defaults and what each one does:
492
- [guides/configuration.md](guides/configuration.md).**
493
-
494
- ---
495
-
496
- ## What is inside the package
497
-
498
- ```
499
- templates/
500
- โ”œโ”€โ”€ skills/ 31 skill folders, 38 SKILL.md files (a lane may ship subskills) โ€”
501
- โ”‚ the lanes above, plus the ones with no command of their own:
502
- โ”‚ context-combiner, orc-advisor, orc-judge, orc-analyze-mini,
503
- โ”‚ and _shared/ (cross-lane contract prose)
504
- โ”œโ”€โ”€ commands/ 29 slash commands
505
- โ”œโ”€โ”€ hooks/ effort guard (PreToolUse) ยท statusline warning ยท behavior trace
506
- โ””โ”€โ”€ agents/ 51 model-pinned subagents + MODEL-MAPPING.md
507
- bin/cli.js installer, config editor, flow composer, run-state reader, and
508
- the deterministic half of every lane. Every read speaks --json
509
- bin/webui/ `orc ui` โ€” the local control panel: css/ + js/ + i18n/<lang>/ +
510
- fixtures/, one file per layer and per panel. Zero deps, no build step
511
- bin/mockrun-catalog.js the mocked-run catalogue (derived from the files on disk)
512
- mock-run/ the mocked runs themselves โ€” start at INDEX.md
513
- guides/ configuration ยท model selection ยท documents ยท knowledge reads ยท other AI models
514
- ```
515
-
516
- The `orc` skill is a thin **spine**: it loads a reference or a subskill only when
517
- that phase actually runs, so a small task never pays for the machinery of a big
518
- one.
519
-
520
- ---
521
-
522
- ## Longer guides
523
-
524
- Some lanes ship a full how-to next to the skill, in plain language:
525
-
526
- | Guide | Read it when |
527
- |---|---|
528
- | [ORC-QUICK](templates/skills/orc-quick/README.md) | you want the quick lane's complete worked runs |
529
- | [ORC-DIY](templates/skills/orc-diy/README.md) | you want to compose your own lane |
530
- | [ORC-WIKI](templates/skills/orc-wiki/README.md) | you want the knowledge base, and cross-repo crosslink setup |
531
- | [ORC-PR-SETUP](templates/skills/orc-pr-setup/README.md) | you want to split a big change into stacked PRs |
532
- | [ORC-PR-DRIVER](templates/skills/orc-pr-driver/README.md) | you have a stack plan and want to build, submit and merge it |
533
- | [Configuration](guides/configuration.md) ยท [Model selection](guides/model-selection.md) | you want every key, or the scoring bands |
534
- | [Other AI models](guides/extra-models.md) | you want part of the ladder to run somewhere other than Claude |
535
-
536
- Every skill also ships its own `SKILL.md` and `references/`. The guides above are
537
- the human-facing versions.
538
-
539
- ---
540
-
541
- ## Eval status
542
-
543
- The constellation is graded **end to end**, not file by file: one executable
544
- spec per lane, run against a sandboxed Express fixture, graded from on-disk
545
- evidence โ€” behavior traces, run folders and artifacts.
546
-
547
- The last full round was the **30-eval suite against the v0.34.0 payload**: 25
548
- filled result files and 38 trace files, with 5 evals never graded and 2 only
549
- partly graded โ€” all named in the report. Everything found there was either fixed
550
- in a later release or is still listed. Read it as a record of that round, not as
551
- a current audit: [EVAL-REPORT.md](EVAL-REPORT.md).
552
-
553
- ---
554
-
555
- ## Design principles
556
-
557
- - **Never implement at the top.** The orchestrator coordinates; scored subagents
558
- do the work.
559
- - **Bound the scope before parallelizing.** A misunderstanding is cheap to fix
560
- before five agents build on it.
561
- - **Disk over memory.** Every pause is a clean resume point.
562
- - **Pinned, inspectable models.** Named agents, models in frontmatter.
563
- - **Your codebase wins.** Learned patterns defer to your project; only security
564
- and correctness invariants are non-negotiable.
565
- - **Additive knowledge.** The wiki improves planning when it is there and costs
566
- nothing when it is not.
567
- - **Say what you do not know.** `UNCHECKABLE`, `no card`, `insufficient history`
568
- are real answers. A confident guess is worse than an honest gap.
569
-
570
- ---
571
-
572
- ## Changelog
573
-
574
- **Full history: [CHANGELOG.md](CHANGELOG.md)** โ€” or `orc changelog`, which prints
575
- only what is newer than the version you have.
576
-
577
- ### v1.0.0 - config, phases and calls stop being prose _(2026-08-30)_
578
-
579
- **Still on the unscoped `orc` package?** Do this once first โ€” your `orc upgrade`
580
- is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
581
- the top of this file.
582
-
583
- - **Step 1 โ€” release the command from the old package:** `npm uninstall -g orc`
584
- - **Step 2 โ€” install the current package:** `npm i -g @azure-id/orc`
585
- - **Step 3 โ€” re-apply it to your project:** `orc update`
586
-
587
- **Nothing you configure changes meaning, and no command you run is renamed.**
588
- Three things actually change behaviour; everything else is ORC finally reading
589
- its own payload the way it has been telling you to read yours.
590
-
591
- - **The score to model table ends `opus-5-low [65,90)` ยท `opus-5-med [90,100]`.**
592
- Two bands in six now want an Opus 5 main session where one in eight did.
593
- - **A foreign worker that stalls twice in one run steps aside** for the rest of
594
- that run. Two clocks, never merged; it writes no new measurement and never
595
- writes your config; a promote is a watermark, not a mute, and needs a reason.
596
- - **`orc diy init` defaults to `opus-5-high`.** The old default silently
597
- collapsed the top third of your ladder onto one agent before you chose
598
- anything.
599
-
600
- The structural half - **config, phases and calls stop being prose**:
601
-
602
- - **`orc lane config <lane>`** answers what a lane's config resolved to, with
603
- every shadow already worded. A lane never merges the config file itself again,
604
- and **a rank below a resolved rank is not read at all**.
605
- - **`orc lane phases <lane>`** and **`orc lane calls --all`** do the same for the
606
- shared phase library and the CLI call catalogue - one canonical copy each,
607
- where there were 14-59 restatements per call.
608
- - **`orc ui` renders all of it**: a rank ladder showing which setting ANSWERED,
609
- the lanes that read each key, a Lanes panel, and Extra โ–ธ Recovery's demotion
610
- row with Promote. `orc doctor` gains `lane-keys-drifted`.
611
-
612
- **It did not make the payload smaller** - 208 files became 291, 26,507 lines
613
- became 33,204. Most waves measured as correctness, not deduplication. What
614
- changed is that there is now one place to fix each of these, and a lint that
615
- fails when a copy grows back. Two planned deletions were **measured and
616
- refused**, and the test suite's four-wave flake was diagnosed - with the honest
617
- caveat that three green runs are the gate and not proof.
618
-
619
- **Full entry: [CHANGELOG.md](CHANGELOG.md).**
620
-
621
- ---
622
-
623
- ## Requirements
624
-
625
- - **Claude Code** โ€” it reads the skills, commands and agents.
626
- - **Node 18+** โ€” for the installer only. The skills themselves have zero
627
- dependencies.
628
-
629
- ## License
630
-
631
- MIT โ€” the `license` field in `package.json` is the canonical statement.
1
+ <div align="center">
2
+
3
+ # ๐Ÿ‹ ORC
4
+
5
+ **An orchestrator skill constellation for [Claude Code](https://claude.com/claude-code).**
6
+
7
+ *Intake โ†’ analyze โ†’ plan โ†’ score โ†’ parallel subagents โ†’ review โ†’ verify โ†’ ship.*
8
+
9
+ ![npm](https://img.shields.io/npm/v/%40azure-id%2Forc?style=for-the-badge&color=cb3837&logo=npm)
10
+ ![Version](https://img.shields.io/badge/version-1.0.0-blue.svg?style=for-the-badge)
11
+ ![License](https://img.shields.io/badge/license-MIT-green.svg?style=for-the-badge)
12
+ ![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg?style=for-the-badge)
13
+ ![Claude Code](https://img.shields.io/badge/Claude_Code-Skills-purple.svg?style=for-the-badge)
14
+ ![Dependencies](https://img.shields.io/badge/dependencies-zero-lightgrey.svg?style=for-the-badge)
15
+ ![GitHub stars](https://img.shields.io/github/stars/azure-id/orc?style=for-the-badge&color=yellow)
16
+
17
+ **Latest: v1.0.0** ยท updated 2026-08-30 ยท [full changelog](CHANGELOG.md)
18
+
19
+ **On npm: [`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc)** โ€” `npm i -g @azure-id/orc`
20
+
21
+ **๐Ÿ‡ฎ๐Ÿ‡ฉ [Baca dalam Bahasa Indonesia](README-id.md)**
22
+
23
+ </div>
24
+
25
+ ---
26
+
27
+ > [!CAUTION]
28
+ > **Upgrading from a version before v0.56.0? Do this once.**
29
+ >
30
+ > The package moved from the unscoped `orc` to **`@azure-id/orc`**. Both declare
31
+ > the same `orc` command, and npm will not hand that command to the new package
32
+ > while the old one still holds it โ€” so **every** install source fails with the
33
+ > same error, and `orc upgrade` cannot fix itself:
34
+ >
35
+ > ```text
36
+ > npm error code EEXIST
37
+ > npm error File exists: C:\Users\you\AppData\Roaming\npm\orc
38
+ > ```
39
+ >
40
+ > Run these two lines once. Nothing in your `.claude/` is touched, and your
41
+ > `orc.config.yaml` survives:
42
+ >
43
+ > ```bash
44
+ > npm uninstall -g orc # release the `orc` command from the old package
45
+ > npm i -g @azure-id/orc # install the current one
46
+ > orc update # re-apply into this project (add --global for ~/.claude)
47
+ > ```
48
+ >
49
+ > **From v0.56.0 onward `orc upgrade` handles this for you** โ€” it removes the old
50
+ > package first, then installs, and says so while it does it. `orc doctor` also
51
+ > reports the old package by name if it is still there.
52
+ >
53
+ > Do **not** reach for `npm i -g -f`. `--force` overwrites the command file and
54
+ > leaves the superseded package installed underneath, owning nothing and never
55
+ > updated again.
56
+
57
+ ---
58
+
59
+ > [!IMPORTANT]
60
+ > **`orc-open` is released โ€” ORC for non-Claude agents.**
61
+ > A provider-agnostic port of the pipeline:
62
+ > **[github.com/azure-id/orc-open](https://github.com/azure-id/orc-open)**. Use it
63
+ > if you run a different coding agent. This repository stays Claude Codeโ€“native.
64
+
65
+ ---
66
+
67
+ ## What ORC is
68
+
69
+ You give ORC a feature โ€” or a requirements document. It works out what you
70
+ meant, plans the work, sends each task to the **cheapest model that can still do
71
+ it**, runs the tasks that do not collide **at the same time**, reviews the
72
+ result, verifies it against a definition of done you signed off, and ships it.
73
+
74
+ It writes its state to disk as it goes, so a long run survives a pause, a token
75
+ limit, or a brand new chat session.
76
+
77
+ **ORC is not a program that runs.** It is a set of markdown **skills**, **slash
78
+ commands** and **subagent definitions** that Claude Code reads and follows. This
79
+ zero-dependency npm package copies those files into your `.claude/` folder.
80
+
81
+ ```text
82
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ you own scope + sign-off โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
83
+ feature / doc โ”€โ”€โ–ถ intake โ”€โ–ถ analyze โ”€โ–ถ plan โ”€โ–ถ score โ”€โ–ถ โ‡‰ parallel waves โ‡‰ โ”€โ–ถ review โ”€โ–ถ verify โ”€โ–ถ ship
84
+ (grounded) (per task) (cheapest capable model) (checkpointed to disk)
85
+ ```
86
+
87
+ ---
88
+
89
+ ## ๐Ÿ‘€ See it run before you run it
90
+
91
+ Every lane is written out as a **mocked run**: what you type, what ORC prints
92
+ back, and the files that land on disk. Nothing was executed to make them โ€” they
93
+ exist so you never have to spend tokens to find out what a command does.
94
+
95
+ ### **โ–ถ [Start here: `mock-run/INDEX.md`](mock-run/INDEX.md)**
96
+
97
+ Also available without leaving your machine:
98
+
99
+ ```bash
100
+ orc mock-run list # every walkthrough, in reading order
101
+ orc mock-run show orc-pact # read one
102
+ orc ui # โ–ธ Mocked Skill Use โ€” the same docs, searchable
103
+ ```
104
+
105
+ ---
106
+
107
+ ## Why it works this way
108
+
109
+ A single agent handed a real feature fails the same ways every time: it silently
110
+ picks one reading of your request, runs the most expensive model on everything,
111
+ forgets decisions when the context compacts, says "done" against a definition
112
+ nobody wrote, cites code that does not exist, and leaves nothing to inspect.
113
+
114
+ Those are **process problems** โ€” the ones teams solved with roles, reviews and
115
+ written agreements. ORC writes that discipline down as skills:
116
+
117
+ - **Coordinating and doing are different jobs.** The orchestrator never
118
+ implements. Even a one-line change goes to a subagent, which keeps its own
119
+ context lean for the whole run.
120
+ - **Every task is scored, and the score picks the model.** You see the table
121
+ before anything starts, and the agents are named and model-pinned, so what ran
122
+ is a fact you can check.
123
+ - **"Done" is written before the work starts.** Intake produces a signed-off
124
+ spec whose definition of done becomes the final verification.
125
+ - **Nothing is trusted, everything is attested.** `file:line` quotes, verbatim
126
+ build output, anchored findings โ€” and the orchestrator spot-checks them, so a
127
+ made-up citation bounces instead of riding into a task.
128
+ - **Disk beats memory.** Eager checkpoints turn every pause into a clean resume,
129
+ including in a fresh session.
130
+ - **Rigor is a dial.** The same spine runs as `/orc-mini` (one subagent), `/orc`
131
+ (real features), and `/orc-ultra` (advisor plus judgment gates).
132
+ - **It learns.** Code patterns make executors write like your codebase, the wiki
133
+ sharpens every future plan, and traces feed `/orc-retro`, which recalibrates
134
+ the scoring from real runs.
135
+
136
+ ---
137
+
138
+ ## Quick start
139
+
140
+ ORC is on npm as **[`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc)**.
141
+
142
+ ```bash
143
+ npm i -g @azure-id/orc # install
144
+ npm i -g @azure-id/orc@latest # update to the newest release
145
+ ```
146
+
147
+ <details>
148
+ <summary>Install straight from GitHub instead</summary>
149
+
150
+ <br>
151
+
152
+ ```bash
153
+ npm i -g https://github.com/azure-id/orc/archive/refs/heads/main.tar.gz
154
+ ```
155
+
156
+ </details>
157
+
158
+ Then, inside a project:
159
+
160
+ ```bash
161
+ orc init # install into ./.claude (this project)
162
+ orc init --global # install into ~/.claude (all projects)
163
+ orc onboarding # the whole walkthrough in the terminal โ€” no GitHub needed
164
+ orc config # view or change settings (zero model tokens)
165
+ orc ui # the local control panel
166
+ orc --help # every command
167
+ ```
168
+
169
+ After installing:
170
+
171
+ 1. Paste your team's PR template into `skills/orc/subskills/orc-pr/pr.md`.
172
+ 2. Add `.claude/orc/run/` to your project `.gitignore`.
173
+ 3. Run **`/agents`** to confirm your Claude Code accepts the agent model ids.
174
+ 4. **Run your main session on Opus 5.** A subagent can never use a better model
175
+ than your session. This is the most common cause of "it used the wrong
176
+ model" โ€” see [model selection](guides/model-selection.md).
177
+ 5. If a `/command` does not appear, your Claude Code may read commands from a
178
+ different folder โ€” move the files in `commands/` there.
179
+
180
+ <details>
181
+ <summary><b>Staying up to date</b></summary>
182
+
183
+ <br>
184
+
185
+ `orc update` re-copies the files already in this package. It never uses the
186
+ network. **`orc upgrade` is the one that pulls a new version**: it fetches the
187
+ newest package first, then applies it. Your `.claude/orc.config.yaml` survives
188
+ both.
189
+
190
+ ```bash
191
+ orc version # what you have, and whether something newer exists
192
+ orc changelog # what you would GET by upgrading
193
+ orc upgrade # fetch the latest, then update this project
194
+ orc upgrade --global # the same for ~/.claude
195
+ orc upgrade --from @azure-id/orc # explicitly from npm
196
+ orc upgrade --from github:azure-id/orc # a fork, or any npm spec
197
+ ```
198
+
199
+ Or update the package yourself and re-apply it:
200
+
201
+ ```bash
202
+ npm i -g @azure-id/orc@latest
203
+ orc update
204
+ ```
205
+
206
+ The update check reads the source over HTTPS, is cached for 24 hours, and fails
207
+ silently when you are offline. Turn it off with `ORC_NO_UPDATE_CHECK=1`.
208
+
209
+ You do not have to run a command to hear about it: the same notice appears
210
+ inside Claude Code through ORC's hooks, at **zero model tokens** โ€” hooks are
211
+ scripts Claude Code runs, not model turns.
212
+
213
+ `orc upgrade` tries the npm registry first, then a plain tarball, then the
214
+ GitHub spec โ€” and it remembers which one worked. If the old unscoped `orc`
215
+ package is still installed, it removes that first (announced), because npm
216
+ cannot give the `orc` command to `@azure-id/orc` while another package owns it.
217
+ See the caution at the top of this README for the one-time manual version.
218
+
219
+ </details>
220
+
221
+ > **"ORC cannot see my wiki"?** Run **`orc wiki sync`**, not a new scan. Docs
222
+ > without a manifest are *unregistered*, not missing โ€” common when a scan stopped
223
+ > at one of `/orc-wiki`'s pauses. Sync rebuilds the index from the docs you
224
+ > already have, for free.
225
+
226
+ > **"What does ORC actually know about my project?"** `orc wiki docs` lists every
227
+ > registered doc, `orc wiki coverage` says how much of your code is written about
228
+ > at all, and `orc pattern show <lang>` prints the conventions that go into every
229
+ > agent that writes code here. All free, all read-only โ€”
230
+ > **[`guides/knowledge-reads.md`](guides/knowledge-reads.md)**.
231
+
232
+ ---
233
+ ## Terminal Hook
234
+ ORC have terminal hook to see: Context Window %, 5 Hour usage %, Weekly usage % and others you might see
235
+
236
+ <img width="725" height="96" alt="image" src="https://github.com/user-attachments/assets/6a649c87-81ea-4fd9-9d0b-6bb4b97fe9cd" />
237
+
238
+ <br>
239
+
240
+ ---
241
+
242
+ ## The lanes
243
+
244
+ > [!TIP]
245
+ > They chain naturally: **`/orc-brainstorm` โ†’ `/orc-grill` โ†’ `/orc-analyze` โ†’
246
+ > `/orc-plan` โ†’ `/orc-route` โ†’ `/orc`**. You can start anywhere.
247
+
248
+ ### Build something
249
+
250
+ | Command | What it does | Mocked run |
251
+ |---|---|---|
252
+ | **`/orc`** | The full pipeline: intake โ†’ plan โ†’ scored parallel waves โ†’ review โ†’ verify โ†’ ship. Checkpoints eagerly; resumes in a fresh session. | [see it](mock-run/orc.md) |
253
+ | **`/orc-ultra`** | The same, plus an Opus 5 **xhigh** advisor and three judgment gates. Deep analysis, patterns, tests and security forced on. Costly by design. | [see it](mock-run/orc-ultra.md) |
254
+ | **`/orc-mini`** | One Sonnet 5 executor, a build + test smoke gate, ship. Skips full review and verify. Switches to the full flow mid-run on request. | [see it](templates/skills/orc-mini/examples/mini-run-mock.md) |
255
+ | **`/orc-fast`** | The fastest lane. Needs a fresh wiki **and** a cached code pattern; then it skips the analyst and planner entirely. A missing prerequisite falls back to `/orc-mini` โ€” the chat never stops. | [see it](mock-run/orc-fast.md) |
256
+ | **`/orc-quick`** | Ask for anything: a fix, a question, a defect hunt, a dependency bump, PR comments. Look โ†’ ask once โ†’ do. **It always asks which agent to dispatch**, and no setting can change that. | [see it](mock-run/orc-quick.md) |
257
+ | **`/orc-wait`** | Wall-clock pause without losing the run. You see the window is nearly full, type `/orc-wait 30`, and ORC hands the run back to disk, waits in detached hops that **cost zero tokens**, and picks up where it stopped. Three modes decide how much finishes first: `safe` ยท `soft` (forces the checkpoint) ยท `hard` (fastest, can lose an in-flight return). `/orc-wait block <reason>` tells it not to stop you at all. | โ€” |
258
+ | **`/orc-diy`** | Your own lane, composed in the terminal with `orc diy` and compiled. Unconfigured or stale โ†’ it refuses and offers plain `/orc`. | [see it](mock-run/orc-diy.md) |
259
+
260
+ ### Work out what to build
261
+
262
+ | Command | What it does | Mocked run |
263
+ |---|---|---|
264
+ | **`/orc-brainstorm`** | You do not have the idea yet. It generates candidates against named thinking lenses with **no criticism while generating**, clusters them into a few real directions, stress-tests each, then recommends one and **waits โ€” it never picks for you**. Every menu ends with your own slot. | [see it](mock-run/orc-brainstorm.md) |
265
+ | **`/orc-grill`** | You have one idea and it is still vague. It asks rounds of questions, **looks facts up itself** instead of making you recite your own codebase, and never answers its own question. Ends when *you* say the idea matches what you meant. | [see it](mock-run/orc-grill.md) |
266
+ | **`/orc-analyze`** | A document or a request โ†’ a scope-bounded, code-grounded spec. Every claim carries `file:line` evidence or becomes a question. Deep mode adds parallel scouts. | [see it](templates/skills/orc-analyze/examples/analyze-mock.md) |
267
+ | **`/orc-plan`** | A request or a spec โ†’ a real task plan: grounded files, dependencies, facets, and a test disposition per task. | [see it](mock-run/orc-plan.md) |
268
+ | **`/orc-doc`** | Writes the long document โ€” a PRD, a TSD, a cross-team agreement, a status report or a runbook โ€” as portable Markdown that imports cleanly into Notion, Obsidian, Docs, Coda, Craft and GitHub. **ORC never reads the document body**: each section is its own file under `sections/`, each writer owns exactly one of them, each checker reads one bounded part, and `document.md` is a build artifact rebuilt for free. Every wave is a stop you can walk away from, and it resumes months later without you explaining anything twice. | [see it](mock-run/orc-doc.md) |
269
+ | **`/orc-route`** | You have a plan โ€” which lane should build it? It names one lane, the runners-up with what each costs you, and any lane that is impossible with the condition blocking it. **It refuses to route a sentence**, because that would be guessing. | [see it](mock-run/orc-route.md) |
270
+ | **`/orc-explain`** | "Wait, what?" It says the last message again: the point first, then the background it assumed, then every ORC-only word defined in your project's terms. | [see it](mock-run/orc-explain.md) |
271
+ | **`/orc-poly`** | One change across two or more repos, without drift. Peer source is read-only; it freezes the shared boundary into a contract and writes one plan per repo. It never builds. | [see it](templates/skills/orc-poly/examples/poly-run-mock.md) |
272
+
273
+ ### Teach ORC your project
274
+
275
+ | Command | What it does | Mocked run |
276
+ |---|---|---|
277
+ | **`/orc-wiki`** | Scans your codebase into a persistent `wiki/`, evidence-anchored, and points `CLAUDE.md` at it. Freshness is computed on read, never stored. Expensive and opt-in โ€” it always warns first. | [see it](templates/skills/orc-wiki/examples/wiki-run-mock.md) |
278
+ | **`/orc-pattern`** | Learns your real conventions per language, so executors write code that matches your codebase. Your conventions win; security and correctness invariants always carry through. | [see it](mock-run/orc-pattern.md) |
279
+ | **`/orc-learn`** | Onboarding docs for a human, one feature at a time, `file:line`-anchored. Local and git-ignored. | [see it](templates/skills/orc-learn/examples/learn-run-mock.md) |
280
+ | **`/orc-claude`** | Builds or refreshes this repo's `CLAUDE.md` from verified facts. Zero questions; your own content is never trimmed. | [see it](templates/skills/orc-claude/examples/claude-run-mock.md) |
281
+ | **`/orc-export`** | Compiles the wiki, patterns, `PACT.md` and boundary cards into a portable `AGENTS.md` โ€” derived, fingerprinted, `--check`able. So ORC is not a trap. | [see it](mock-run/orc-export.md) |
282
+
283
+ ### Check what happened
284
+
285
+ | Command | What it does | Mocked run |
286
+ |---|---|---|
287
+ | **`/orc-challenge`** | Grades a **finished** artifact โ€” a TSD, a PRD, an ADR, an API contract, a README, a module โ€” against a goal **you** state, then **stops and makes you fix it in a different session**. ORC judges, you fix, ORC re-judges: **it never fixes what it judged**, because a session that just wrote the fix would grade its own homework. **And it never guesses what "good" means here.** | [see it](mock-run/orc-challenge.md) |
288
+ | **`/orc-pact`** | The promises your project makes, and which are in doubt right now. Four states, all **computed on read**: HOLDING ยท DRIFTED ยท **UNCHECKABLE** (the honest state โ€” never a failure) ยท BROKEN. It never invents a promise and never retires one for you. | [see it](mock-run/orc-pact.md) |
289
+ | **`/orc-boundary`** | What ORC should **not** try here, and exactly what would change that. EXECUTE ยท ESCALATE ยท REFUSE, per area. **A REFUSE always names what would make it a yes.** It gates ORC's own dispatch, never your instructions. | [see it](mock-run/orc-boundary.md) |
290
+ | **`/orc-verify`** | Verifies only your git-modified changes: build, tests, diff sanity, findings on a P0โ€“P3 ladder. Read-only. | [see it](templates/skills/orc-verify/examples/verify-mock.md) |
291
+ | **`/orc-aftermath`** | Did what we shipped hold up? Graded from the repository's own future: churn, reverts, deleted tests, broken promises. **Churn is a signal, never a verdict**, and it never names a person. | [see it](mock-run/orc-aftermath.md) |
292
+ | **`/orc-budget`** | What a run costs, in the unit you are billed in. A **token vector** โ€” fresh input, cache write, cache read, output, never blended โ€” shown four ways: tokens, dollars, percent of your 5-hour window, and context risk. Needs a plan, not a sentence. | [see it](mock-run/orc-budget.md) |
293
+ | **`/orc-retro`** | Mines the behavior traces into a calibration report and files it upstream as a PR. | [see it](templates/skills/orc-retro/examples/retro-mock.md) |
294
+
295
+ ### Ship and hand over
296
+
297
+ | Command | What it does | Mocked run |
298
+ |---|---|---|
299
+ | **`/orc-pr-setup`** | Decides where a big change gets cut into stacked pull requests: ordered layers, each with a purpose, a file list and a measured budget. It stops and asks at every uncertain seam, and never touches git. | [see it](mock-run/orc-pr-setup.md) |
300
+ | **`/orc-pr-driver`** | Executes that plan: a branch per layer, a **mandatory green gate at each layer's own base**, `gh stack submit`, then restack and bottom-up merge. | [see it](mock-run/orc-pr-setup.md) |
301
+ | **`/orc-handoff`** | For someone who does not read code. The grade comes from **whether a cheap check exists**, not from the file type. It shows the undo command *before* it writes, and never touches a red file. | [see it](mock-run/orc-handoff.md) |
302
+
303
+ ---
304
+
305
+ ## Documents that go somewhere
306
+
307
+ `/orc-doc` writes the long document โ€” and Markdown is the deliverable because of
308
+ where a Markdown file can actually go:
309
+
310
+ | Target | Imports `.md`? |
311
+ |---|---|
312
+ | Notion ยท Obsidian ยท Google Docs ยท Coda ยท Craft ยท Apple Notes ยท GitHub | **natively** |
313
+ | Docusaurus ยท Hugo ยท Jekyll ยท MkDocs | yes โ€” and these *want* YAML front matter |
314
+ | Confluence | not natively. Plan for a marketplace importer app |
315
+ | Microsoft OneNote | **no**. Convert to Word or PDF first |
316
+
317
+ That table is load-bearing, not decoration: `orc doc lint --target` enforces the
318
+ real limit of the place your document is going. Notion has three heading levels,
319
+ so an H4 is an **error** there. A hard-wrapped paragraph is an error everywhere,
320
+ because a wrap at 80 columns becomes a line break inside a Notion paragraph.
321
+
322
+ Five base templates โ€” `prd` ยท `tsd` ยท `collaboration` ยท `report` ยท `workflow` โ€”
323
+ each a floor rather than a cage. `orc doc templates` prints them; bring your own
324
+ and its headings become the outline.
325
+
326
+ **Full detail: [`guides/documents.md`](guides/documents.md).**
327
+
328
+ ---
329
+
330
+ ## `orc ui` โ€” the control panel
331
+
332
+ A local web page for **everything in ORC that is not ai**. One boundary defines
333
+ it: **it never runs a lane, never spawns `claude`, never calls a model API.**
334
+ Everything it shows or writes is deterministic CLI output.
335
+
336
+ <img width="1870" height="1269" alt="image" src="https://github.com/user-attachments/assets/207fe821-9aa6-430e-bdcc-968340cc687f" />
337
+
338
+ > ๐ŸŽฌ **Video walkthrough โ€” not recorded yet.** The player belongs here; see
339
+ > [`mock-run/media/README.md`](mock-run/media/README.md) for the two files to
340
+ > drop in. Until then, the panel is written out screen by screen in
341
+ > [`mock-run/orc-ui.md`](mock-run/orc-ui.md).
342
+
343
+ ```bash
344
+ orc ui # binds 127.0.0.1:9921 and opens a browser
345
+ orc ui --port 9930 # an explicit port never auto-walks โ€” a collision is an error
346
+ orc ui --no-open # print the URL only
347
+ orc ui --idle 0 # disable the idle shutdown (default: 30 minutes)
348
+ orc ui --fixtures # canned data, no project needed
349
+ orc ui --stop # shut this project's server down
350
+ ```
351
+
352
+ | Panel | Shows | Can change |
353
+ |---|---|---|
354
+ | Overview | version, `orc doctor`, wiki tier, what is waiting โ€” plus **Worth doing**, one list of everything wanting a decision | โ€” |
355
+ | Settings | every config key, grouped, each with its own control | staged edits, applied together |
356
+ | Runs | run history as an accordion: a row opens in place into state-of-play, resume prompt, checkpoint, trace tail | โ€” |
357
+ | **Knowledge** | **five tabs**: the wiki's tier AND its **contents** (every doc, what it covers, how often it is read), coverage against your tracked files, the code patterns with the conflicts the codifier flagged, repair memory with a **preview-then-apply** prune, and a read-only view of the linked repos | `wiki sync`, `gotcha prune` |
358
+ | Stats | lane and agent usage, downgrades, and a **Cost** tab whose stacked bar keeps cache-read visible | โ€” |
359
+ | Flow | the compiled DIY flow, its gate, and a stepper of every phase in order | `diy set`, `diy compile`, presets |
360
+ | Crosslink | **Design** (the boundary as a graph) and **Settings** (each peer's freshness) | `crosslink add` / `remove` |
361
+ | Promises ยท Boundary ยท Self-serve | the pact ledger, the boundary cards, and the surfaces a non-developer can change | `pact check`, `pact sync`, `handoff set` |
362
+ | **Docs** | every `/orc-doc` document as a **ribbon** โ€” one block per section, sized by its length and coloured by its state โ€” plus the section files with their sub-parts, the wave strip, the lint health card and the wave preview | `doc compile` ยท `doc migrate` |
363
+ | **Extra** | **six tabs**: the connection setup, the local tools and their state, the band ladder and the six positions, spending per profile per band, and **Recovery** โ€” every dispatch that never reported back, with what it left on disk | `extra add` / `ping` / `route` / `role` |
364
+ | **Challenge** | every `/orc-challenge` cycle: the frozen goal, the council roster and what each lens raised, the findings with their dispositions, and whether the pass is computed or blocked | `challenge record` ยท `accept` ยท `rebut` |
365
+ | **Mocked Skill Use** | every mocked run that ships with ORC, grouped and searchable, with a reading pane | โ€” |
366
+ | Learn | the `orc onboarding` walkthrough, one section at a time | โ€” |
367
+ | Experiment | every lane with a copy button; opens a Claude session in a terminal | โ€” |
368
+ | Maintenance | `update`, `update --prune`, `doctor --fix`, `upgrade` | preview, then apply |
369
+
370
+ - **The panel *is* the CLI.** It reads `orc <command> --json` and shells the real
371
+ command for every write, so it cannot drift from the CLI โ€” it has no second
372
+ copy of anything.
373
+ - **A free action gets a button. A paid action gets a command to copy.**
374
+ - **Nothing is automatic**, and a prune names **every** file. A count is not
375
+ consent.
376
+ - **Treated as a write surface**: loopback only, a fresh token per launch, a
377
+ Host-header check against DNS rebinding, no CORS, POST-only mutations.
378
+ - **Project-scoped, no `--global` config.** If a global install exists that could
379
+ win skill resolution, every page carries a banner. It reports that; it never
380
+ edits global config.
381
+ - **English and Indonesian.** Only the panel's own words are translated โ€” config
382
+ keys, model ids, paths, commands and doctor messages are printed exactly as the
383
+ CLI wrote them, because a translated config key is a key that does not exist.
384
+
385
+ Zero dependencies, zero build step: `node:http`, plain JavaScript, hand-written
386
+ CSS.
387
+
388
+ ---
389
+
390
+ ## Running part of the ladder somewhere else โ€” `orc extra`
391
+
392
+ **The orchestrator is always Claude.** What Extra changes is *who executes a
393
+ slice*: a score band you own, or one of six named positions, can point at
394
+ DeepSeek, GLM, Kimi, MiniMax, Qwen, a local Ollama, or a coding CLI you already
395
+ have signed in (opencode, codex). Everything downstream โ€” the smoke gate, the TDD
396
+ gate, the reviewer, the worktree-delta check โ€” is engine-blind, so nothing learns
397
+ the work was foreign.
398
+
399
+ **Off by default, and it cannot be armed until something has actually answered.**
400
+
401
+ ```bash
402
+ orc extra providers # the shipped, dated catalog โ€” providers, never models
403
+ orc extra tools # local CLIs: absent ยท outdated ยท unauthenticated ยท ready
404
+ orc extra add ds --provider deepseek --engine api --env-key DEEPSEEK_API_KEY
405
+ orc extra ping ds # the connection gate: a ladder, and nothing reads stronger than it is
406
+ orc extra models ds --test <id> # a LISTED model can still be dead upstream
407
+ orc extra health ds --model <id> # โ€ฆand a working model is not one that FINISHES
408
+ orc extra route set 40-55 ds/deepseek-chat # a score band
409
+ orc extra role set doc-writer ds/deepseek-chat # or a named position
410
+ orc config set extra_enabled true
411
+ ```
412
+
413
+ - **The catalog ships providers and never models.** A shipped model id is wrong
414
+ within a quarter and wrong *silently* โ€” a 404 mid-wave. `orc extra ping` reads
415
+ the live list and caches it; nothing invents a name. Same for price: a cost
416
+ figure ORC did not price itself is never printed, it reads as an em dash.
417
+ - **Every armed run says so before wave 1.** Routing work off Claude silently is
418
+ the failure this whole subsystem is shaped around.
419
+ - **Two hard hold-backs**: a task with a cited `risk[]` (auth, money, migration,
420
+ security, concurrency, data-integrity) stays on Claude unless you say
421
+ otherwise, and a `/orc-boundary` REFUSE area holds even in `warn`.
422
+ - **A foreign return is foreign input.** It is the only foreign class that edits
423
+ your worktree, so what it says it did is a *claim*, checked against the tree.
424
+ - **Your key never reaches a command line.** It travels on stdin into an
425
+ encrypted vault, or it stays in an environment variable, or the tool holds its
426
+ own โ€” and the passphrase is a **deadline**, not a second factor.
427
+ - **Six positions for the lanes that pin an agent instead of scoring a task**:
428
+ `quick-executor` ยท `fast-executor` ยท `doc-writer` ยท `doc-checker` ยท
429
+ `wiki-scanner-deep` ยท `wiki-scanner-light`. A position with no row keeps its
430
+ slot and reads as its pinned Claude agent โ€” "I left the checker on Claude on
431
+ purpose" and "there is no checker" must never look the same.
432
+
433
+ **When a foreign worker fails, it is a position and not a blank page.** ORC
434
+ journals the baseline *before the first byte leaves the machine*, so a worker cut
435
+ off mid-write is **reconciled and resumed** โ€” never re-dispatched from scratch
436
+ onto a file that is already two-thirds written.
437
+
438
+ - **`extra_stall_s` (default 180)** stops a worker that has produced nothing for
439
+ that long. It is reset by observable progress โ€” the worker's stream, its
440
+ stderr, or a declared file that changed on disk โ€” so it never fires on one that
441
+ is merely slow. `stalled` is retryable, which is what makes the resume ORC's
442
+ own spelling of typing `continue`.
443
+ - **`extra_fallback_agent` (default `band`)** decides who picks the task up.
444
+ `ask` stops and puts the menu to you; any installed agent name pins one. It
445
+ changes *who*, never the score, the declared files or the acceptance criteria.
446
+ - **Every dispatch writes its own spend record**, so a cost report never depends
447
+ on a run remembering to narrate what it spent. `orc extra stats` merges the
448
+ spend log, the traces and saved returns, and always says how many rows came
449
+ from each.
450
+
451
+ **`/orc-quick` is inert here** and announces it โ€” that lane asks which agent
452
+ before every dispatch, so no setting may pre-answer it. **`/orc-challenge` never
453
+ routes foreign**: swapping a lens for a different model does not make the lane
454
+ cheaper, it changes what is being measured.
455
+
456
+ **The whole subsystem, with every command and key:
457
+ [guides/extra-models.md](guides/extra-models.md).**
458
+
459
+ ---
460
+
461
+ ## How the model is picked
462
+
463
+ Each task is scored 0โ€“100 by **arithmetic, not judgement**: the planner reports
464
+ facets (breadth, novelty, logic, test surface, cited risk, uncertainty) and a
465
+ fixed published formula turns them into a number. A cited risk forces a floor of
466
+ 70. The score maps through a published table to a **named, model-pinned agent**,
467
+ so what ran is inspectable rather than requested in prose.
468
+
469
+ > **The rule that catches everyone:** a subagent's model can never be higher than
470
+ > your main session's. Run your session on Opus 5.
471
+
472
+ **Full detail โ€” the bands, `opus5_only`, and the tier guard `orc init` installs:
473
+ [guides/model-selection.md](guides/model-selection.md).**
474
+
475
+ ---
476
+
477
+ ## Configuration
478
+
479
+ Settings are edited with the **`orc config` CLI** โ€” deterministic terminal I/O,
480
+ so it costs **zero model tokens**.
481
+
482
+ ```bash
483
+ orc config # interactive menu
484
+ orc config list # the effective config
485
+ orc config recommend # read this repo, suggest ONE profile, with reasons
486
+ orc config profile paranoid
487
+ ```
488
+
489
+ Your changes live in `.claude/orc.config.yaml`, which `orc update` never
490
+ clobbers. `orc ui` โ–ธ Settings edits the same keys through the same validators.
491
+
492
+ **Every key, with defaults and what each one does:
493
+ [guides/configuration.md](guides/configuration.md).**
494
+
495
+ ---
496
+
497
+ ## What is inside the package
498
+
499
+ ```
500
+ templates/
501
+ โ”œโ”€โ”€ skills/ 31 skill folders, 38 SKILL.md files (a lane may ship subskills) โ€”
502
+ โ”‚ the lanes above, plus the ones with no command of their own:
503
+ โ”‚ context-combiner, orc-advisor, orc-judge, orc-analyze-mini,
504
+ โ”‚ and _shared/ (cross-lane contract prose)
505
+ โ”œโ”€โ”€ commands/ 29 slash commands
506
+ โ”œโ”€โ”€ hooks/ effort guard (PreToolUse) ยท statusline warning ยท behavior trace
507
+ โ””โ”€โ”€ agents/ 51 model-pinned subagents + MODEL-MAPPING.md
508
+ bin/cli.js installer, config editor, flow composer, run-state reader, and
509
+ the deterministic half of every lane. Every read speaks --json
510
+ bin/webui/ `orc ui` โ€” the local control panel: css/ + js/ + i18n/<lang>/ +
511
+ fixtures/, one file per layer and per panel. Zero deps, no build step
512
+ bin/mockrun-catalog.js the mocked-run catalogue (derived from the files on disk)
513
+ mock-run/ the mocked runs themselves โ€” start at INDEX.md
514
+ guides/ configuration ยท model selection ยท documents ยท knowledge reads ยท other AI models
515
+ ```
516
+
517
+ The `orc` skill is a thin **spine**: it loads a reference or a subskill only when
518
+ that phase actually runs, so a small task never pays for the machinery of a big
519
+ one.
520
+
521
+ ---
522
+
523
+ ## Longer guides
524
+
525
+ Some lanes ship a full how-to next to the skill, in plain language:
526
+
527
+ | Guide | Read it when |
528
+ |---|---|
529
+ | [ORC-QUICK](templates/skills/orc-quick/README.md) | you want the quick lane's complete worked runs |
530
+ | [ORC-DIY](templates/skills/orc-diy/README.md) | you want to compose your own lane |
531
+ | [ORC-WIKI](templates/skills/orc-wiki/README.md) | you want the knowledge base, and cross-repo crosslink setup |
532
+ | [ORC-PR-SETUP](templates/skills/orc-pr-setup/README.md) | you want to split a big change into stacked PRs |
533
+ | [ORC-PR-DRIVER](templates/skills/orc-pr-driver/README.md) | you have a stack plan and want to build, submit and merge it |
534
+ | [Configuration](guides/configuration.md) ยท [Model selection](guides/model-selection.md) | you want every key, or the scoring bands |
535
+ | [Other AI models](guides/extra-models.md) | you want part of the ladder to run somewhere other than Claude |
536
+
537
+ Every skill also ships its own `SKILL.md` and `references/`. The guides above are
538
+ the human-facing versions.
539
+
540
+ ---
541
+
542
+ ## Eval status
543
+
544
+ The constellation is graded **end to end**, not file by file: one executable
545
+ spec per lane, run against a sandboxed Express fixture, graded from on-disk
546
+ evidence โ€” behavior traces, run folders and artifacts.
547
+
548
+ The last full round was the **30-eval suite against the v0.34.0 payload**: 25
549
+ filled result files and 38 trace files, with 5 evals never graded and 2 only
550
+ partly graded โ€” all named in the report. Everything found there was either fixed
551
+ in a later release or is still listed. Read it as a record of that round, not as
552
+ a current audit: [EVAL-REPORT.md](EVAL-REPORT.md).
553
+
554
+ ---
555
+
556
+ ## Design principles
557
+
558
+ - **Never implement at the top.** The orchestrator coordinates; scored subagents
559
+ do the work.
560
+ - **Bound the scope before parallelizing.** A misunderstanding is cheap to fix
561
+ before five agents build on it.
562
+ - **Disk over memory.** Every pause is a clean resume point.
563
+ - **Pinned, inspectable models.** Named agents, models in frontmatter.
564
+ - **Your codebase wins.** Learned patterns defer to your project; only security
565
+ and correctness invariants are non-negotiable.
566
+ - **Additive knowledge.** The wiki improves planning when it is there and costs
567
+ nothing when it is not.
568
+ - **Say what you do not know.** `UNCHECKABLE`, `no card`, `insufficient history`
569
+ are real answers. A confident guess is worse than an honest gap.
570
+
571
+ ---
572
+
573
+ ## Changelog
574
+
575
+ **Full history: [CHANGELOG.md](CHANGELOG.md)** โ€” or `orc changelog`, which prints
576
+ only what is newer than the version you have.
577
+
578
+ ### v1.1.0 - the wait, and a window ORC can finally see _(2026-08-31)_
579
+
580
+ **Still on the unscoped `orc` package?** Do this once first โ€” your `orc upgrade`
581
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
582
+ the top of this file.
583
+
584
+ - **Step 1 โ€” release the command from the old package:** `npm uninstall -g orc`
585
+ - **Step 2 โ€” install the current package:** `npm i -g @azure-id/orc`
586
+ - **Step 3 โ€” re-apply it to your project:** `orc update`
587
+
588
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
589
+
590
+ Until now the only thing in ORC that could see how full your 5-hour and 7-day
591
+ windows were was the statusline, which drew a string and threw the numbers away.
592
+ So a lane started a wave with no idea it was about to run out, and the wave
593
+ stopped in the middle.
594
+
595
+ - **`/orc-wait`** - a wall-clock pause that does not lose the run. Type
596
+ `/orc-wait 30` and ORC writes the hand-back, waits in detached hops, and picks
597
+ the run up where it stopped. **The waiting costs zero tokens** - a detached
598
+ command does it, and no model runs. It never dispatches an agent to wait,
599
+ because an agent would spend the very window you are waiting for.
600
+ - **Three modes, and they differ in one thing only: how much finishes first.**
601
+ `safe` finishes the current wave and loses nothing. `soft` stops at the next
602
+ turn but **forces** the checkpoint - and if that write fails it does not stop.
603
+ `hard` stops at the next turn with the hand-back alone.
604
+ - **`/orc-wait block <reason>`** - the veto. It tells ORC not to stop this run at
605
+ all. The reason is required, it is never written to your config, and it is
606
+ re-printed with its age at every gate it suppresses.
607
+ - **`orc usage check`** - one reader, three answers: `0` ok, `1` low, `2`
608
+ unknown. **The worst window decides.** A weekly window at 96% is not a green
609
+ light because the 5-hour one is at 20%.
610
+ - **`orc ui` gains a Wait panel** - your windows, a wait in progress, a standing
611
+ block and its age. It cannot start a wait: a wait lives in a Claude Code
612
+ session, and the panel never runs a lane.
613
+ - **Every lane supports it, in one release.** 24 spines carry the contract, each
614
+ naming what it checkpoints and where its safe point is - generated from one
615
+ registry, so a spine cannot disagree with the CLI.
616
+
617
+ > [!CAUTION]
618
+ > **`/orc-wait ... hard` can lose work.** It stops at the first moment ORC can
619
+ > act - it does not wait for the current wave, phase or gate to finish, and it
620
+ > dispatches nothing, so it writes `RESUME.md` and skips the checkpoint. What
621
+ > you can lose: a dispatch that was in flight (its file writes may still land,
622
+ > but its return is never validated), the checkpoint, and that phase's trace
623
+ > packet. Use `hard` when losing the current wave is cheaper than losing the
624
+ > window; use `soft` when you can spare a few seconds; use no keyword at all
625
+ > when you can wait for the wave to end.
626
+ >
627
+ > **A wait longer than one hour ends the prompt cache.** The first turn after it
628
+ > re-reads your whole context at full input price, exactly when your quota is
629
+ > lowest. When the context is large ORC stops and offers a fresh session
630
+ > instead - **it cannot clear its own context**, only offer the swap.
631
+ >
632
+ > **`/orc-wait block` moves the risk to you, deliberately.** It suppresses every
633
+ > computed stop for the rest of the run. If the window empties mid-wave, the
634
+ > wave stops in the middle and you keep the pieces.
635
+ >
636
+ > **Nothing here is on by default.** `usage_gate` ships `off` and
637
+ > `wait_default_mode` ships `ask`. A fresh install behaves exactly as it did
638
+ > before this release. You choose every stop.
639
+
640
+ ### v1.0.0 - config, phases and calls stop being prose _(2026-08-30)_
641
+
642
+ **Still on the unscoped `orc` package?** Do this once first โ€” your `orc upgrade`
643
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
644
+ the top of this file.
645
+
646
+ - **Step 1 โ€” release the command from the old package:** `npm uninstall -g orc`
647
+ - **Step 2 โ€” install the current package:** `npm i -g @azure-id/orc`
648
+ - **Step 3 โ€” re-apply it to your project:** `orc update`
649
+
650
+ **Nothing you configure changes meaning, and no command you run is renamed.**
651
+ Three things actually change behaviour; everything else is ORC finally reading
652
+ its own payload the way it has been telling you to read yours.
653
+
654
+ - **The score to model table ends `opus-5-low [65,90)` ยท `opus-5-med [90,100]`.**
655
+ Two bands in six now want an Opus 5 main session where one in eight did.
656
+ - **A foreign worker that stalls twice in one run steps aside** for the rest of
657
+ that run. Two clocks, never merged; it writes no new measurement and never
658
+ writes your config; a promote is a watermark, not a mute, and needs a reason.
659
+ - **`orc diy init` defaults to `opus-5-high`.** The old default silently
660
+ collapsed the top third of your ladder onto one agent before you chose
661
+ anything.
662
+
663
+ The structural half - **config, phases and calls stop being prose**:
664
+
665
+ - **`orc lane config <lane>`** answers what a lane's config resolved to, with
666
+ every shadow already worded. A lane never merges the config file itself again,
667
+ and **a rank below a resolved rank is not read at all**.
668
+ - **`orc lane phases <lane>`** and **`orc lane calls --all`** do the same for the
669
+ shared phase library and the CLI call catalogue - one canonical copy each,
670
+ where there were 14-59 restatements per call.
671
+ - **`orc ui` renders all of it**: a rank ladder showing which setting ANSWERED,
672
+ the lanes that read each key, a Lanes panel, and Extra โ–ธ Recovery's demotion
673
+ row with Promote. `orc doctor` gains `lane-keys-drifted`.
674
+
675
+ **It did not make the payload smaller** - 208 files became 291, 26,507 lines
676
+ became 33,204. Most waves measured as correctness, not deduplication. What
677
+ changed is that there is now one place to fix each of these, and a lint that
678
+ fails when a copy grows back. Two planned deletions were **measured and
679
+ refused**, and the test suite's four-wave flake was diagnosed - with the honest
680
+ caveat that three green runs are the gate and not proof.
681
+
682
+ **Full entry: [CHANGELOG.md](CHANGELOG.md).**
683
+
684
+ ---
685
+
686
+ ## Requirements
687
+
688
+ - **Claude Code** โ€” it reads the skills, commands and agents.
689
+ - **Node 18+** โ€” for the installer only. The skills themselves have zero
690
+ dependencies.
691
+
692
+ ## License
693
+
694
+ MIT โ€” the `license` field in `package.json` is the canonical statement.