@azure-id/orc 0.55.0 โ†’ 0.55.2

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.
package/README.md CHANGED
@@ -1,485 +1,540 @@
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
- ![Version](https://img.shields.io/badge/version-0.55.0-blue.svg?style=for-the-badge)
10
- ![License](https://img.shields.io/badge/license-MIT-green.svg?style=for-the-badge)
11
- ![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg?style=for-the-badge)
12
- ![Claude Code](https://img.shields.io/badge/Claude_Code-Skills-purple.svg?style=for-the-badge)
13
- ![Dependencies](https://img.shields.io/badge/dependencies-zero-lightgrey.svg?style=for-the-badge)
14
- ![GitHub stars](https://img.shields.io/github/stars/azure-id/orc?style=for-the-badge&color=yellow)
15
-
16
- **Latest: v0.55.0** ยท updated 2026-08-26 ยท [full changelog](CHANGELOG.md)
17
-
18
- **๐Ÿ‡ฎ๐Ÿ‡ฉ [Baca dalam Bahasa Indonesia](README-id.md)**
19
-
20
- </div>
21
-
22
- ---
23
-
24
- > [!IMPORTANT]
25
- > **`orc-open` is released โ€” ORC for non-Claude agents.**
26
- > A provider-agnostic port of the pipeline:
27
- > **[github.com/azure-id/orc-open](https://github.com/azure-id/orc-open)**. Use it
28
- > if you run a different coding agent. This repository stays Claude Codeโ€“native.
29
-
30
- ---
31
-
32
- ## What ORC is
33
-
34
- You give ORC a feature โ€” or a requirements document. It works out what you
35
- meant, plans the work, sends each task to the **cheapest model that can still do
36
- it**, runs the tasks that do not collide **at the same time**, reviews the
37
- result, verifies it against a definition of done you signed off, and ships it.
38
-
39
- It writes its state to disk as it goes, so a long run survives a pause, a token
40
- limit, or a brand new chat session.
41
-
42
- **ORC is not a program that runs.** It is a set of markdown **skills**, **slash
43
- commands** and **subagent definitions** that Claude Code reads and follows. This
44
- zero-dependency npm package copies those files into your `.claude/` folder.
45
-
46
- ```text
47
- โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ you own scope + sign-off โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
48
- feature / doc โ”€โ”€โ–ถ intake โ”€โ–ถ analyze โ”€โ–ถ plan โ”€โ–ถ score โ”€โ–ถ โ‡‰ parallel waves โ‡‰ โ”€โ–ถ review โ”€โ–ถ verify โ”€โ–ถ ship
49
- (grounded) (per task) (cheapest capable model) (checkpointed to disk)
50
- ```
51
-
52
- ---
53
-
54
- ## ๐Ÿ‘€ See it run before you run it
55
-
56
- Every lane is written out as a **mocked run**: what you type, what ORC prints
57
- back, and the files that land on disk. Nothing was executed to make them โ€” they
58
- exist so you never have to spend tokens to find out what a command does.
59
-
60
- ### **โ–ถ [Start here: `mock-run/INDEX.md`](mock-run/INDEX.md)**
61
-
62
- Also available without leaving your machine:
63
-
64
- ```bash
65
- orc mock-run list # every walkthrough, in reading order
66
- orc mock-run show orc-pact # read one
67
- orc ui # โ–ธ Mocked Skill Use โ€” the same docs, searchable
68
- ```
69
-
70
- ---
71
-
72
- ## Why it works this way
73
-
74
- A single agent handed a real feature fails the same ways every time: it silently
75
- picks one reading of your request, runs the most expensive model on everything,
76
- forgets decisions when the context compacts, says "done" against a definition
77
- nobody wrote, cites code that does not exist, and leaves nothing to inspect.
78
-
79
- Those are **process problems** โ€” the ones teams solved with roles, reviews and
80
- written agreements. ORC writes that discipline down as skills:
81
-
82
- - **Coordinating and doing are different jobs.** The orchestrator never
83
- implements. Even a one-line change goes to a subagent, which keeps its own
84
- context lean for the whole run.
85
- - **Every task is scored, and the score picks the model.** You see the table
86
- before anything starts, and the agents are named and model-pinned, so what ran
87
- is a fact you can check.
88
- - **"Done" is written before the work starts.** Intake produces a signed-off
89
- spec whose definition of done becomes the final verification.
90
- - **Nothing is trusted, everything is attested.** `file:line` quotes, verbatim
91
- build output, anchored findings โ€” and the orchestrator spot-checks them, so a
92
- made-up citation bounces instead of riding into a task.
93
- - **Disk beats memory.** Eager checkpoints turn every pause into a clean resume,
94
- including in a fresh session.
95
- - **Rigor is a dial.** The same spine runs as `/orc-mini` (one subagent), `/orc`
96
- (real features), and `/orc-ultra` (advisor plus judgment gates).
97
- - **It learns.** Code patterns make executors write like your codebase, the wiki
98
- sharpens every future plan, and traces feed `/orc-retro`, which recalibrates
99
- the scoring from real runs.
100
-
101
- ---
102
-
103
- ## Quick start
104
-
105
- ```bash
106
- npm i -g https://github.com/azure-id/orc/archive/refs/heads/main.tar.gz
107
- ```
108
-
109
- Then, inside a project:
110
-
111
- ```bash
112
- orc init # install into ./.claude (this project)
113
- orc init --global # install into ~/.claude (all projects)
114
- orc onboarding # the whole walkthrough in the terminal โ€” no GitHub needed
115
- orc config # view or change settings (zero model tokens)
116
- orc ui # the local control panel
117
- orc --help # every command
118
- ```
119
-
120
- After installing:
121
-
122
- 1. Paste your team's PR template into `skills/orc/subskills/orc-pr/pr.md`.
123
- 2. Add `.claude/orc/run/` to your project `.gitignore`.
124
- 3. Run **`/agents`** to confirm your Claude Code accepts the agent model ids.
125
- 4. **Run your main session on Opus 5.** A subagent can never use a better model
126
- than your session. This is the most common cause of "it used the wrong
127
- model" โ€” see [model selection](guides/model-selection.md).
128
- 5. If a `/command` does not appear, your Claude Code may read commands from a
129
- different folder โ€” move the files in `commands/` there.
130
-
131
- <details>
132
- <summary><b>Staying up to date</b></summary>
133
-
134
- <br>
135
-
136
- `orc update` re-copies the files already in this package. It never uses the
137
- network. **`orc upgrade` is the one that pulls a new version**: it fetches the
138
- newest package first, then applies it. Your `.claude/orc.config.yaml` survives
139
- both.
140
-
141
- ```bash
142
- orc version # what you have, and whether something newer exists
143
- orc changelog # what you would GET by upgrading
144
- orc upgrade # fetch the latest, then update this project
145
- orc upgrade --global # the same for ~/.claude
146
- orc upgrade --from github:azure-id/orc # a fork, or any npm spec
147
- ```
148
-
149
- The update check reads the source over HTTPS, is cached for 24 hours, and fails
150
- silently when you are offline. Turn it off with `ORC_NO_UPDATE_CHECK=1`.
151
-
152
- You do not have to run a command to hear about it: the same notice appears
153
- inside Claude Code through ORC's hooks, at **zero model tokens** โ€” hooks are
154
- scripts Claude Code runs, not model turns.
155
-
156
- If the GitHub spec fails to install (common under **NVM**), `orc upgrade` retries
157
- with a plain tarball by itself.
158
-
159
- </details>
160
-
161
- > **"ORC cannot see my wiki"?** Run **`orc wiki sync`**, not a new scan. Docs
162
- > without a manifest are *unregistered*, not missing โ€” common when a scan stopped
163
- > at one of `/orc-wiki`'s pauses. Sync rebuilds the index from the docs you
164
- > already have, for free.
165
-
166
- > **"What does ORC actually know about my project?"** `orc wiki docs` lists every
167
- > registered doc, `orc wiki coverage` says how much of your code is written about
168
- > at all, and `orc pattern show <lang>` prints the conventions that go into every
169
- > agent that writes code here. All free, all read-only โ€”
170
- > **[`guides/knowledge-reads.md`](guides/knowledge-reads.md)**.
171
-
172
- ---
173
- ## Terminal Hook
174
- ORC have terminal hook to see: Context Window %, 5 Hour usage %, Weekly usage % and others you might see
175
-
176
- <img width="725" height="96" alt="image" src="https://github.com/user-attachments/assets/6a649c87-81ea-4fd9-9d0b-6bb4b97fe9cd" />
177
-
178
- <br>
179
-
180
- ---
181
-
182
- ## The lanes
183
-
184
- > [!TIP]
185
- > They chain naturally: **`/orc-brainstorm` โ†’ `/orc-grill` โ†’ `/orc-analyze` โ†’
186
- > `/orc-plan` โ†’ `/orc-route` โ†’ `/orc`**. You can start anywhere.
187
-
188
- ### Build something
189
-
190
- | Command | What it does | Mocked run |
191
- |---|---|---|
192
- | **`/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) |
193
- | **`/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) |
194
- | **`/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) |
195
- | **`/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) |
196
- | **`/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) |
197
- | **`/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) |
198
-
199
- ### Work out what to build
200
-
201
- | Command | What it does | Mocked run |
202
- |---|---|---|
203
- | **`/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) |
204
- | **`/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) |
205
- | **`/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) |
206
- | **`/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) |
207
- | **`/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) |
208
- | **`/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) |
209
- | **`/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) |
210
- | **`/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) |
211
-
212
- ### Teach ORC your project
213
-
214
- | Command | What it does | Mocked run |
215
- |---|---|---|
216
- | **`/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) |
217
- | **`/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) |
218
- | **`/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) |
219
- | **`/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) |
220
- | **`/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) |
221
-
222
- ### Check what happened
223
-
224
- | Command | What it does | Mocked run |
225
- |---|---|---|
226
- | **`/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) |
227
- | **`/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) |
228
- | **`/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) |
229
- | **`/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) |
230
- | **`/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) |
231
- | **`/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) |
232
- | **`/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) |
233
-
234
- ### Ship and hand over
235
-
236
- | Command | What it does | Mocked run |
237
- |---|---|---|
238
- | **`/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) |
239
- | **`/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) |
240
- | **`/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) |
241
-
242
- ---
243
-
244
- ## Documents that go somewhere
245
-
246
- `/orc-doc` writes the long document โ€” and Markdown is the deliverable because of
247
- where a Markdown file can actually go:
248
-
249
- | Target | Imports `.md`? |
250
- |---|---|
251
- | Notion ยท Obsidian ยท Google Docs ยท Coda ยท Craft ยท Apple Notes ยท GitHub | **natively** |
252
- | Docusaurus ยท Hugo ยท Jekyll ยท MkDocs | yes โ€” and these *want* YAML front matter |
253
- | Confluence | not natively. Plan for a marketplace importer app |
254
- | Microsoft OneNote | **no**. Convert to Word or PDF first |
255
-
256
- That table is load-bearing, not decoration: `orc doc lint --target` enforces the
257
- real limit of the place your document is going. Notion has three heading levels,
258
- so an H4 is an **error** there. A hard-wrapped paragraph is an error everywhere,
259
- because a wrap at 80 columns becomes a line break inside a Notion paragraph.
260
-
261
- Five base templates โ€” `prd` ยท `tsd` ยท `collaboration` ยท `report` ยท `workflow` โ€”
262
- each a floor rather than a cage. `orc doc templates` prints them; bring your own
263
- and its headings become the outline.
264
-
265
- **Full detail: [`guides/documents.md`](guides/documents.md).**
266
-
267
- ---
268
-
269
- ## `orc ui` โ€” the control panel
270
-
271
- A local web page for **everything in ORC that is not ai**. One boundary defines
272
- it: **it never runs a lane, never spawns `claude`, never calls a model API.**
273
- Everything it shows or writes is deterministic CLI output.
274
-
275
- <img width="1870" height="1269" alt="image" src="https://github.com/user-attachments/assets/207fe821-9aa6-430e-bdcc-968340cc687f" />
276
-
277
- > ๐ŸŽฌ **Video walkthrough โ€” not recorded yet.** The player belongs here; see
278
- > [`mock-run/media/README.md`](mock-run/media/README.md) for the two files to
279
- > drop in. Until then, the panel is written out screen by screen in
280
- > [`mock-run/orc-ui.md`](mock-run/orc-ui.md).
281
-
282
- ```bash
283
- orc ui # binds 127.0.0.1:9921 and opens a browser
284
- orc ui --port 9930 # an explicit port never auto-walks โ€” a collision is an error
285
- orc ui --no-open # print the URL only
286
- orc ui --idle 0 # disable the idle shutdown (default: 30 minutes)
287
- orc ui --fixtures # canned data, no project needed
288
- orc ui --stop # shut this project's server down
289
- ```
290
-
291
- | Panel | Shows | Can change |
292
- |---|---|---|
293
- | Overview | version, `orc doctor`, wiki tier, what is waiting โ€” plus **Worth doing**, one list of everything wanting a decision | โ€” |
294
- | Settings | every config key, grouped, each with its own control | staged edits, applied together |
295
- | Runs | run history as an accordion: a row opens in place into state-of-play, resume prompt, checkpoint, trace tail | โ€” |
296
- | **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` |
297
- | Stats | lane and agent usage, downgrades, and a **Cost** tab whose stacked bar keeps cache-read visible | โ€” |
298
- | Flow | the compiled DIY flow, its gate, and a stepper of every phase in order | `diy set`, `diy compile`, presets |
299
- | Crosslink | **Design** (the boundary as a graph) and **Settings** (each peer's freshness) | `crosslink add` / `remove` |
300
- | Promises ยท Boundary ยท Self-serve | the pact ledger, the boundary cards, and the surfaces a non-developer can change | `pact check`, `pact sync`, `handoff set` |
301
- | **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` |
302
- | **Mocked Skill Use** | every mocked run that ships with ORC, grouped and searchable, with a reading pane | โ€” |
303
- | Learn | the `orc onboarding` walkthrough, one section at a time | โ€” |
304
- | Experiment | every lane with a copy button; opens a Claude session in a terminal | โ€” |
305
- | Maintenance | `update`, `update --prune`, `doctor --fix`, `upgrade` | preview, then apply |
306
-
307
- - **The panel *is* the CLI.** It reads `orc <command> --json` and shells the real
308
- command for every write, so it cannot drift from the CLI โ€” it has no second
309
- copy of anything.
310
- - **A free action gets a button. A paid action gets a command to copy.**
311
- - **Nothing is automatic**, and a prune names **every** file. A count is not
312
- consent.
313
- - **Treated as a write surface**: loopback only, a fresh token per launch, a
314
- Host-header check against DNS rebinding, no CORS, POST-only mutations.
315
- - **Project-scoped, no `--global` config.** If a global install exists that could
316
- win skill resolution, every page carries a banner. It reports that; it never
317
- edits global config.
318
- - **English and Indonesian.** Only the panel's own words are translated โ€” config
319
- keys, model ids, paths, commands and doctor messages are printed exactly as the
320
- CLI wrote them, because a translated config key is a key that does not exist.
321
-
322
- Zero dependencies, zero build step: `node:http`, plain JavaScript, hand-written
323
- CSS.
324
-
325
- ---
326
-
327
- ## How the model is picked
328
-
329
- Each task is scored 0โ€“100 by **arithmetic, not judgement**: the planner reports
330
- facets (breadth, novelty, logic, test surface, cited risk, uncertainty) and a
331
- fixed published formula turns them into a number. A cited risk forces a floor of
332
- 70. The score maps through a published table to a **named, model-pinned agent**,
333
- so what ran is inspectable rather than requested in prose.
334
-
335
- > **The rule that catches everyone:** a subagent's model can never be higher than
336
- > your main session's. Run your session on Opus 5.
337
-
338
- **Full detail โ€” the bands, `opus5_only`, and the tier guard `orc init` installs:
339
- [guides/model-selection.md](guides/model-selection.md).**
340
-
341
- ---
342
-
343
- ## Configuration
344
-
345
- Settings are edited with the **`orc config` CLI** โ€” deterministic terminal I/O,
346
- so it costs **zero model tokens**.
347
-
348
- ```bash
349
- orc config # interactive menu
350
- orc config list # the effective config
351
- orc config recommend # read this repo, suggest ONE profile, with reasons
352
- orc config profile paranoid
353
- ```
354
-
355
- Your changes live in `.claude/orc.config.yaml`, which `orc update` never
356
- clobbers. `orc ui` โ–ธ Settings edits the same keys through the same validators.
357
-
358
- **Every key, with defaults and what each one does:
359
- [guides/configuration.md](guides/configuration.md).**
360
-
361
- ---
362
-
363
- ## What is inside the package
364
-
365
- ```
366
- templates/
367
- โ”œโ”€โ”€ skills/ 29 skills โ€” the lanes above, plus the ones with no command of
368
- โ”‚ their own: context-combiner, orc-advisor, orc-judge,
369
- โ”‚ orc-analyze-mini, and _shared/ (cross-lane contract prose)
370
- โ”œโ”€โ”€ commands/ 27 slash commands
371
- โ”œโ”€โ”€ hooks/ effort guard (PreToolUse) ยท statusline warning ยท behavior trace
372
- โ””โ”€โ”€ agents/ 40 model-pinned subagents + MODEL-MAPPING.md
373
- bin/cli.js installer, config editor, flow composer, run-state reader, and
374
- the deterministic half of every lane. Every read speaks --json
375
- bin/webui/ `orc ui` โ€” the local control panel: css/ + js/ + i18n/<lang>/ +
376
- fixtures/, one file per layer and per panel. Zero deps, no build step
377
- bin/mockrun-catalog.js the mocked-run catalogue (derived from the files on disk)
378
- mock-run/ the mocked runs themselves โ€” start at INDEX.md
379
- guides/ configuration ยท model selection ยท documents ยท knowledge reads ยท other AI models
380
- ```
381
-
382
- The `orc` skill is a thin **spine**: it loads a reference or a subskill only when
383
- that phase actually runs, so a small task never pays for the machinery of a big
384
- one.
385
-
386
- ---
387
-
388
- ## Longer guides
389
-
390
- Some lanes ship a full how-to next to the skill, in plain language:
391
-
392
- | Guide | Read it when |
393
- |---|---|
394
- | [ORC-QUICK](templates/skills/orc-quick/README.md) | you want the quick lane's complete worked runs |
395
- | [ORC-DIY](templates/skills/orc-diy/README.md) | you want to compose your own lane |
396
- | [ORC-WIKI](templates/skills/orc-wiki/README.md) | you want the knowledge base, and cross-repo crosslink setup |
397
- | [ORC-PR-SETUP](templates/skills/orc-pr-setup/README.md) | you want to split a big change into stacked PRs |
398
- | [ORC-PR-DRIVER](templates/skills/orc-pr-driver/README.md) | you have a stack plan and want to build, submit and merge it |
399
- | [Configuration](guides/configuration.md) ยท [Model selection](guides/model-selection.md) | you want every key, or the scoring bands |
400
- | [Other AI models](guides/extra-models.md) | you want part of the ladder to run somewhere other than Claude |
401
-
402
- Every skill also ships its own `SKILL.md` and `references/`. The guides above are
403
- the human-facing versions.
404
-
405
- ---
406
-
407
- ## Eval status
408
-
409
- The constellation is graded **end to end**, not file by file: one executable
410
- spec per lane, run against a sandboxed Express fixture, graded from on-disk
411
- evidence โ€” behavior traces, run folders and artifacts.
412
-
413
- The last full round was the **30-eval suite against the v0.34.0 payload**: 25
414
- filled result files and 38 trace files, with 5 evals never graded and 2 only
415
- partly graded โ€” all named in the report. Everything found there was either fixed
416
- in a later release or is still listed. Read it as a record of that round, not as
417
- a current audit: [EVAL-REPORT.md](EVAL-REPORT.md).
418
-
419
- ---
420
-
421
- ## Design principles
422
-
423
- - **Never implement at the top.** The orchestrator coordinates; scored subagents
424
- do the work.
425
- - **Bound the scope before parallelizing.** A misunderstanding is cheap to fix
426
- before five agents build on it.
427
- - **Disk over memory.** Every pause is a clean resume point.
428
- - **Pinned, inspectable models.** Named agents, models in frontmatter.
429
- - **Your codebase wins.** Learned patterns defer to your project; only security
430
- and correctness invariants are non-negotiable.
431
- - **Additive knowledge.** The wiki improves planning when it is there and costs
432
- nothing when it is not.
433
- - **Say what you do not know.** `UNCHECKABLE`, `no card`, `insufficient history`
434
- are real answers. A confident guess is worse than an honest gap.
435
-
436
- ---
437
-
438
- ## Changelog
439
-
440
- **Full history: [CHANGELOG.md](CHANGELOG.md)** โ€” or `orc changelog`, which prints
441
- only what is newer than the version you have.
442
-
443
- ### v0.55.0 โ€” a score is what a band needs, and four lanes do not have one _(2026-08-26)_
444
-
445
- **`/orc-quick`, `/orc-fast`, `/orc-doc` and `/orc-wiki` pin an agent to a
446
- position instead of scoring a task. `orc extra` routed them by reading that
447
- agent's score band โ€” arithmetic on a number nobody chose. It was wrong twice and
448
- dead once.**
449
-
450
- - **`orc extra role` holds six POSITIONS** โ€” `quick-executor` ยท `fast-executor` ยท
451
- `doc-writer` ยท `doc-checker` ยท `wiki-scanner-deep` ยท `wiki-scanner-light`. One
452
- connection and one model each, and a row's presence is the arming. All six are
453
- always listed: an unrouted one keeps its slot and reads as the Claude agent it
454
- falls back to.
455
- - **`orc extra resolve --slot` never touches a band**, and the Claude answer it
456
- carries is a pinned NAME rather than an interval. Nine hold-backs, each named.
457
- - **Precedence, one sentence:** extra decides *whether* a Claude agent runs at
458
- all; `opus5_only` and the score tables only decide *which* one runs where extra
459
- did not take it. Under a taken position `opus5_only` is not consulted โ€” and it
460
- stays fully live for every position with no row.
461
- - **The bridge accepts a slot** (`band` becomes `slot:<slot>`, so cost reporting
462
- splits per position for free) with **zero new engines, zero new dispatch paths
463
- and zero new agents**. A doc checker now resolves its OWN position, `/orc-wiki`
464
- can route at all, and `/orc-quick` gets a THIRD OPTION on its menu โ€” never a
465
- default, never sticky, re-asked after a failure.
466
- - **A second ladder in `orc ui โ–ธ Extra โ–ธ Routing`**, and **zero config keys
467
- added**.
468
-
469
- Before that: **v0.54.0 โ€” a failed dispatch is a POSITION, not a blank page**,
470
- **v0.53.4 โ€” the reload that dropped its own token**, **v0.53.3 โ€” the key it never
471
- sent**, **v0.53.2 โ€” the cost that was paid and never written down**, and
472
- **v0.53.1 โ€” "up to date" now names what it checked**.
473
- [Read them in the changelog](CHANGELOG.md).
474
-
475
- ---
476
-
477
- ## Requirements
478
-
479
- - **Claude Code** โ€” it reads the skills, commands and agents.
480
- - **Node 18+** โ€” for the installer only. The skills themselves have zero
481
- dependencies.
482
-
483
- ## License
484
-
485
- 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-0.55.2-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: v0.55.2** ยท updated 2026-08-27 ยท [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
+ > [!IMPORTANT]
28
+ > **`orc-open` is released โ€” ORC for non-Claude agents.**
29
+ > A provider-agnostic port of the pipeline:
30
+ > **[github.com/azure-id/orc-open](https://github.com/azure-id/orc-open)**. Use it
31
+ > if you run a different coding agent. This repository stays Claude Codeโ€“native.
32
+
33
+ ---
34
+
35
+ ## What ORC is
36
+
37
+ You give ORC a feature โ€” or a requirements document. It works out what you
38
+ meant, plans the work, sends each task to the **cheapest model that can still do
39
+ it**, runs the tasks that do not collide **at the same time**, reviews the
40
+ result, verifies it against a definition of done you signed off, and ships it.
41
+
42
+ It writes its state to disk as it goes, so a long run survives a pause, a token
43
+ limit, or a brand new chat session.
44
+
45
+ **ORC is not a program that runs.** It is a set of markdown **skills**, **slash
46
+ commands** and **subagent definitions** that Claude Code reads and follows. This
47
+ zero-dependency npm package copies those files into your `.claude/` folder.
48
+
49
+ ```text
50
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ you own scope + sign-off โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
51
+ feature / doc โ”€โ”€โ–ถ intake โ”€โ–ถ analyze โ”€โ–ถ plan โ”€โ–ถ score โ”€โ–ถ โ‡‰ parallel waves โ‡‰ โ”€โ–ถ review โ”€โ–ถ verify โ”€โ–ถ ship
52
+ (grounded) (per task) (cheapest capable model) (checkpointed to disk)
53
+ ```
54
+
55
+ ---
56
+
57
+ ## ๐Ÿ‘€ See it run before you run it
58
+
59
+ Every lane is written out as a **mocked run**: what you type, what ORC prints
60
+ back, and the files that land on disk. Nothing was executed to make them โ€” they
61
+ exist so you never have to spend tokens to find out what a command does.
62
+
63
+ ### **โ–ถ [Start here: `mock-run/INDEX.md`](mock-run/INDEX.md)**
64
+
65
+ Also available without leaving your machine:
66
+
67
+ ```bash
68
+ orc mock-run list # every walkthrough, in reading order
69
+ orc mock-run show orc-pact # read one
70
+ orc ui # โ–ธ Mocked Skill Use โ€” the same docs, searchable
71
+ ```
72
+
73
+ ---
74
+
75
+ ## Why it works this way
76
+
77
+ A single agent handed a real feature fails the same ways every time: it silently
78
+ picks one reading of your request, runs the most expensive model on everything,
79
+ forgets decisions when the context compacts, says "done" against a definition
80
+ nobody wrote, cites code that does not exist, and leaves nothing to inspect.
81
+
82
+ Those are **process problems** โ€” the ones teams solved with roles, reviews and
83
+ written agreements. ORC writes that discipline down as skills:
84
+
85
+ - **Coordinating and doing are different jobs.** The orchestrator never
86
+ implements. Even a one-line change goes to a subagent, which keeps its own
87
+ context lean for the whole run.
88
+ - **Every task is scored, and the score picks the model.** You see the table
89
+ before anything starts, and the agents are named and model-pinned, so what ran
90
+ is a fact you can check.
91
+ - **"Done" is written before the work starts.** Intake produces a signed-off
92
+ spec whose definition of done becomes the final verification.
93
+ - **Nothing is trusted, everything is attested.** `file:line` quotes, verbatim
94
+ build output, anchored findings โ€” and the orchestrator spot-checks them, so a
95
+ made-up citation bounces instead of riding into a task.
96
+ - **Disk beats memory.** Eager checkpoints turn every pause into a clean resume,
97
+ including in a fresh session.
98
+ - **Rigor is a dial.** The same spine runs as `/orc-mini` (one subagent), `/orc`
99
+ (real features), and `/orc-ultra` (advisor plus judgment gates).
100
+ - **It learns.** Code patterns make executors write like your codebase, the wiki
101
+ sharpens every future plan, and traces feed `/orc-retro`, which recalibrates
102
+ the scoring from real runs.
103
+
104
+ ---
105
+
106
+ ## Quick start
107
+
108
+ ORC is on npm as **[`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc)**.
109
+
110
+ ```bash
111
+ npm i -g @azure-id/orc # install
112
+ npm i -g @azure-id/orc@latest # update to the newest release
113
+ ```
114
+
115
+ <details>
116
+ <summary>Install straight from GitHub instead</summary>
117
+
118
+ <br>
119
+
120
+ ```bash
121
+ npm i -g https://github.com/azure-id/orc/archive/refs/heads/main.tar.gz
122
+ ```
123
+
124
+ </details>
125
+
126
+ Then, inside a project:
127
+
128
+ ```bash
129
+ orc init # install into ./.claude (this project)
130
+ orc init --global # install into ~/.claude (all projects)
131
+ orc onboarding # the whole walkthrough in the terminal โ€” no GitHub needed
132
+ orc config # view or change settings (zero model tokens)
133
+ orc ui # the local control panel
134
+ orc --help # every command
135
+ ```
136
+
137
+ After installing:
138
+
139
+ 1. Paste your team's PR template into `skills/orc/subskills/orc-pr/pr.md`.
140
+ 2. Add `.claude/orc/run/` to your project `.gitignore`.
141
+ 3. Run **`/agents`** to confirm your Claude Code accepts the agent model ids.
142
+ 4. **Run your main session on Opus 5.** A subagent can never use a better model
143
+ than your session. This is the most common cause of "it used the wrong
144
+ model" โ€” see [model selection](guides/model-selection.md).
145
+ 5. If a `/command` does not appear, your Claude Code may read commands from a
146
+ different folder โ€” move the files in `commands/` there.
147
+
148
+ <details>
149
+ <summary><b>Staying up to date</b></summary>
150
+
151
+ <br>
152
+
153
+ `orc update` re-copies the files already in this package. It never uses the
154
+ network. **`orc upgrade` is the one that pulls a new version**: it fetches the
155
+ newest package first, then applies it. Your `.claude/orc.config.yaml` survives
156
+ both.
157
+
158
+ ```bash
159
+ orc version # what you have, and whether something newer exists
160
+ orc changelog # what you would GET by upgrading
161
+ orc upgrade # fetch the latest, then update this project
162
+ orc upgrade --global # the same for ~/.claude
163
+ orc upgrade --from @azure-id/orc # explicitly from npm
164
+ orc upgrade --from github:azure-id/orc # a fork, or any npm spec
165
+ ```
166
+
167
+ Or update the package yourself and re-apply it:
168
+
169
+ ```bash
170
+ npm i -g @azure-id/orc@latest
171
+ orc update
172
+ ```
173
+
174
+ The update check reads the source over HTTPS, is cached for 24 hours, and fails
175
+ silently when you are offline. Turn it off with `ORC_NO_UPDATE_CHECK=1`.
176
+
177
+ You do not have to run a command to hear about it: the same notice appears
178
+ inside Claude Code through ORC's hooks, at **zero model tokens** โ€” hooks are
179
+ scripts Claude Code runs, not model turns.
180
+
181
+ If the GitHub spec fails to install (common under **NVM**), `orc upgrade` retries
182
+ with a plain tarball by itself.
183
+
184
+ </details>
185
+
186
+ > **"ORC cannot see my wiki"?** Run **`orc wiki sync`**, not a new scan. Docs
187
+ > without a manifest are *unregistered*, not missing โ€” common when a scan stopped
188
+ > at one of `/orc-wiki`'s pauses. Sync rebuilds the index from the docs you
189
+ > already have, for free.
190
+
191
+ > **"What does ORC actually know about my project?"** `orc wiki docs` lists every
192
+ > registered doc, `orc wiki coverage` says how much of your code is written about
193
+ > at all, and `orc pattern show <lang>` prints the conventions that go into every
194
+ > agent that writes code here. All free, all read-only โ€”
195
+ > **[`guides/knowledge-reads.md`](guides/knowledge-reads.md)**.
196
+
197
+ ---
198
+ ## Terminal Hook
199
+ ORC have terminal hook to see: Context Window %, 5 Hour usage %, Weekly usage % and others you might see
200
+
201
+ <img width="725" height="96" alt="image" src="https://github.com/user-attachments/assets/6a649c87-81ea-4fd9-9d0b-6bb4b97fe9cd" />
202
+
203
+ <br>
204
+
205
+ ---
206
+
207
+ ## The lanes
208
+
209
+ > [!TIP]
210
+ > They chain naturally: **`/orc-brainstorm` โ†’ `/orc-grill` โ†’ `/orc-analyze` โ†’
211
+ > `/orc-plan` โ†’ `/orc-route` โ†’ `/orc`**. You can start anywhere.
212
+
213
+ ### Build something
214
+
215
+ | Command | What it does | Mocked run |
216
+ |---|---|---|
217
+ | **`/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) |
218
+ | **`/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) |
219
+ | **`/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) |
220
+ | **`/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) |
221
+ | **`/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) |
222
+ | **`/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) |
223
+
224
+ ### Work out what to build
225
+
226
+ | Command | What it does | Mocked run |
227
+ |---|---|---|
228
+ | **`/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) |
229
+ | **`/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) |
230
+ | **`/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) |
231
+ | **`/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) |
232
+ | **`/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) |
233
+ | **`/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) |
234
+ | **`/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) |
235
+ | **`/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) |
236
+
237
+ ### Teach ORC your project
238
+
239
+ | Command | What it does | Mocked run |
240
+ |---|---|---|
241
+ | **`/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) |
242
+ | **`/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) |
243
+ | **`/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) |
244
+ | **`/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) |
245
+ | **`/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) |
246
+
247
+ ### Check what happened
248
+
249
+ | Command | What it does | Mocked run |
250
+ |---|---|---|
251
+ | **`/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) |
252
+ | **`/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) |
253
+ | **`/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) |
254
+ | **`/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) |
255
+ | **`/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) |
256
+ | **`/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) |
257
+ | **`/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) |
258
+
259
+ ### Ship and hand over
260
+
261
+ | Command | What it does | Mocked run |
262
+ |---|---|---|
263
+ | **`/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) |
264
+ | **`/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) |
265
+ | **`/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) |
266
+
267
+ ---
268
+
269
+ ## Documents that go somewhere
270
+
271
+ `/orc-doc` writes the long document โ€” and Markdown is the deliverable because of
272
+ where a Markdown file can actually go:
273
+
274
+ | Target | Imports `.md`? |
275
+ |---|---|
276
+ | Notion ยท Obsidian ยท Google Docs ยท Coda ยท Craft ยท Apple Notes ยท GitHub | **natively** |
277
+ | Docusaurus ยท Hugo ยท Jekyll ยท MkDocs | yes โ€” and these *want* YAML front matter |
278
+ | Confluence | not natively. Plan for a marketplace importer app |
279
+ | Microsoft OneNote | **no**. Convert to Word or PDF first |
280
+
281
+ That table is load-bearing, not decoration: `orc doc lint --target` enforces the
282
+ real limit of the place your document is going. Notion has three heading levels,
283
+ so an H4 is an **error** there. A hard-wrapped paragraph is an error everywhere,
284
+ because a wrap at 80 columns becomes a line break inside a Notion paragraph.
285
+
286
+ Five base templates โ€” `prd` ยท `tsd` ยท `collaboration` ยท `report` ยท `workflow` โ€”
287
+ each a floor rather than a cage. `orc doc templates` prints them; bring your own
288
+ and its headings become the outline.
289
+
290
+ **Full detail: [`guides/documents.md`](guides/documents.md).**
291
+
292
+ ---
293
+
294
+ ## `orc ui` โ€” the control panel
295
+
296
+ A local web page for **everything in ORC that is not ai**. One boundary defines
297
+ it: **it never runs a lane, never spawns `claude`, never calls a model API.**
298
+ Everything it shows or writes is deterministic CLI output.
299
+
300
+ <img width="1870" height="1269" alt="image" src="https://github.com/user-attachments/assets/207fe821-9aa6-430e-bdcc-968340cc687f" />
301
+
302
+ > ๐ŸŽฌ **Video walkthrough โ€” not recorded yet.** The player belongs here; see
303
+ > [`mock-run/media/README.md`](mock-run/media/README.md) for the two files to
304
+ > drop in. Until then, the panel is written out screen by screen in
305
+ > [`mock-run/orc-ui.md`](mock-run/orc-ui.md).
306
+
307
+ ```bash
308
+ orc ui # binds 127.0.0.1:9921 and opens a browser
309
+ orc ui --port 9930 # an explicit port never auto-walks โ€” a collision is an error
310
+ orc ui --no-open # print the URL only
311
+ orc ui --idle 0 # disable the idle shutdown (default: 30 minutes)
312
+ orc ui --fixtures # canned data, no project needed
313
+ orc ui --stop # shut this project's server down
314
+ ```
315
+
316
+ | Panel | Shows | Can change |
317
+ |---|---|---|
318
+ | Overview | version, `orc doctor`, wiki tier, what is waiting โ€” plus **Worth doing**, one list of everything wanting a decision | โ€” |
319
+ | Settings | every config key, grouped, each with its own control | staged edits, applied together |
320
+ | Runs | run history as an accordion: a row opens in place into state-of-play, resume prompt, checkpoint, trace tail | โ€” |
321
+ | **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` |
322
+ | Stats | lane and agent usage, downgrades, and a **Cost** tab whose stacked bar keeps cache-read visible | โ€” |
323
+ | Flow | the compiled DIY flow, its gate, and a stepper of every phase in order | `diy set`, `diy compile`, presets |
324
+ | Crosslink | **Design** (the boundary as a graph) and **Settings** (each peer's freshness) | `crosslink add` / `remove` |
325
+ | Promises ยท Boundary ยท Self-serve | the pact ledger, the boundary cards, and the surfaces a non-developer can change | `pact check`, `pact sync`, `handoff set` |
326
+ | **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` |
327
+ | **Mocked Skill Use** | every mocked run that ships with ORC, grouped and searchable, with a reading pane | โ€” |
328
+ | Learn | the `orc onboarding` walkthrough, one section at a time | โ€” |
329
+ | Experiment | every lane with a copy button; opens a Claude session in a terminal | โ€” |
330
+ | Maintenance | `update`, `update --prune`, `doctor --fix`, `upgrade` | preview, then apply |
331
+
332
+ - **The panel *is* the CLI.** It reads `orc <command> --json` and shells the real
333
+ command for every write, so it cannot drift from the CLI โ€” it has no second
334
+ copy of anything.
335
+ - **A free action gets a button. A paid action gets a command to copy.**
336
+ - **Nothing is automatic**, and a prune names **every** file. A count is not
337
+ consent.
338
+ - **Treated as a write surface**: loopback only, a fresh token per launch, a
339
+ Host-header check against DNS rebinding, no CORS, POST-only mutations.
340
+ - **Project-scoped, no `--global` config.** If a global install exists that could
341
+ win skill resolution, every page carries a banner. It reports that; it never
342
+ edits global config.
343
+ - **English and Indonesian.** Only the panel's own words are translated โ€” config
344
+ keys, model ids, paths, commands and doctor messages are printed exactly as the
345
+ CLI wrote them, because a translated config key is a key that does not exist.
346
+
347
+ Zero dependencies, zero build step: `node:http`, plain JavaScript, hand-written
348
+ CSS.
349
+
350
+ ---
351
+
352
+ ## How the model is picked
353
+
354
+ Each task is scored 0โ€“100 by **arithmetic, not judgement**: the planner reports
355
+ facets (breadth, novelty, logic, test surface, cited risk, uncertainty) and a
356
+ fixed published formula turns them into a number. A cited risk forces a floor of
357
+ 70. The score maps through a published table to a **named, model-pinned agent**,
358
+ so what ran is inspectable rather than requested in prose.
359
+
360
+ > **The rule that catches everyone:** a subagent's model can never be higher than
361
+ > your main session's. Run your session on Opus 5.
362
+
363
+ **Full detail โ€” the bands, `opus5_only`, and the tier guard `orc init` installs:
364
+ [guides/model-selection.md](guides/model-selection.md).**
365
+
366
+ ---
367
+
368
+ ## Configuration
369
+
370
+ Settings are edited with the **`orc config` CLI** โ€” deterministic terminal I/O,
371
+ so it costs **zero model tokens**.
372
+
373
+ ```bash
374
+ orc config # interactive menu
375
+ orc config list # the effective config
376
+ orc config recommend # read this repo, suggest ONE profile, with reasons
377
+ orc config profile paranoid
378
+ ```
379
+
380
+ Your changes live in `.claude/orc.config.yaml`, which `orc update` never
381
+ clobbers. `orc ui` โ–ธ Settings edits the same keys through the same validators.
382
+
383
+ **Every key, with defaults and what each one does:
384
+ [guides/configuration.md](guides/configuration.md).**
385
+
386
+ ---
387
+
388
+ ## What is inside the package
389
+
390
+ ```
391
+ templates/
392
+ โ”œโ”€โ”€ skills/ 29 skills โ€” the lanes above, plus the ones with no command of
393
+ โ”‚ their own: context-combiner, orc-advisor, orc-judge,
394
+ โ”‚ orc-analyze-mini, and _shared/ (cross-lane contract prose)
395
+ โ”œโ”€โ”€ commands/ 27 slash commands
396
+ โ”œโ”€โ”€ hooks/ effort guard (PreToolUse) ยท statusline warning ยท behavior trace
397
+ โ””โ”€โ”€ agents/ 40 model-pinned subagents + MODEL-MAPPING.md
398
+ bin/cli.js installer, config editor, flow composer, run-state reader, and
399
+ the deterministic half of every lane. Every read speaks --json
400
+ bin/webui/ `orc ui` โ€” the local control panel: css/ + js/ + i18n/<lang>/ +
401
+ fixtures/, one file per layer and per panel. Zero deps, no build step
402
+ bin/mockrun-catalog.js the mocked-run catalogue (derived from the files on disk)
403
+ mock-run/ the mocked runs themselves โ€” start at INDEX.md
404
+ guides/ configuration ยท model selection ยท documents ยท knowledge reads ยท other AI models
405
+ ```
406
+
407
+ The `orc` skill is a thin **spine**: it loads a reference or a subskill only when
408
+ that phase actually runs, so a small task never pays for the machinery of a big
409
+ one.
410
+
411
+ ---
412
+
413
+ ## Longer guides
414
+
415
+ Some lanes ship a full how-to next to the skill, in plain language:
416
+
417
+ | Guide | Read it when |
418
+ |---|---|
419
+ | [ORC-QUICK](templates/skills/orc-quick/README.md) | you want the quick lane's complete worked runs |
420
+ | [ORC-DIY](templates/skills/orc-diy/README.md) | you want to compose your own lane |
421
+ | [ORC-WIKI](templates/skills/orc-wiki/README.md) | you want the knowledge base, and cross-repo crosslink setup |
422
+ | [ORC-PR-SETUP](templates/skills/orc-pr-setup/README.md) | you want to split a big change into stacked PRs |
423
+ | [ORC-PR-DRIVER](templates/skills/orc-pr-driver/README.md) | you have a stack plan and want to build, submit and merge it |
424
+ | [Configuration](guides/configuration.md) ยท [Model selection](guides/model-selection.md) | you want every key, or the scoring bands |
425
+ | [Other AI models](guides/extra-models.md) | you want part of the ladder to run somewhere other than Claude |
426
+
427
+ Every skill also ships its own `SKILL.md` and `references/`. The guides above are
428
+ the human-facing versions.
429
+
430
+ ---
431
+
432
+ ## Eval status
433
+
434
+ The constellation is graded **end to end**, not file by file: one executable
435
+ spec per lane, run against a sandboxed Express fixture, graded from on-disk
436
+ evidence โ€” behavior traces, run folders and artifacts.
437
+
438
+ The last full round was the **30-eval suite against the v0.34.0 payload**: 25
439
+ filled result files and 38 trace files, with 5 evals never graded and 2 only
440
+ partly graded โ€” all named in the report. Everything found there was either fixed
441
+ in a later release or is still listed. Read it as a record of that round, not as
442
+ a current audit: [EVAL-REPORT.md](EVAL-REPORT.md).
443
+
444
+ ---
445
+
446
+ ## Design principles
447
+
448
+ - **Never implement at the top.** The orchestrator coordinates; scored subagents
449
+ do the work.
450
+ - **Bound the scope before parallelizing.** A misunderstanding is cheap to fix
451
+ before five agents build on it.
452
+ - **Disk over memory.** Every pause is a clean resume point.
453
+ - **Pinned, inspectable models.** Named agents, models in frontmatter.
454
+ - **Your codebase wins.** Learned patterns defer to your project; only security
455
+ and correctness invariants are non-negotiable.
456
+ - **Additive knowledge.** The wiki improves planning when it is there and costs
457
+ nothing when it is not.
458
+ - **Say what you do not know.** `UNCHECKABLE`, `no card`, `insufficient history`
459
+ are real answers. A confident guess is worse than an honest gap.
460
+
461
+ ---
462
+
463
+ ## Changelog
464
+
465
+ **Full history: [CHANGELOG.md](CHANGELOG.md)** โ€” or `orc changelog`, which prints
466
+ only what is newer than the version you have.
467
+
468
+ ### v0.55.2 - a gate that is never probed is a gate that is always off _(2026-08-27)_
469
+
470
+ **`/orc-quick` and `/orc-fast` documented the foreign-worker option and then
471
+ never went and looked for it.** Both carried the whole `orc extra` slot contract
472
+ but neither preflight ever ran the probe that answers whether a position is
473
+ held, so an armed `extra_enabled` plus a slot row still offered only the shipped
474
+ Claude executors.
475
+
476
+ - **orc-quick Q0 gains one PROBE** - `orc extra resolve --slot quick-executor
477
+ --json`, the single exception to "read no other key" - so the menu can render
478
+ line 3. Still an option: never a default, never sticky.
479
+ - **orc-fast F0 gains gate `d`** - `orc extra resolve --slot fast-executor
480
+ --json` - and prints the P0 `extra:` line where the prose always said it
481
+ would, naming the agent it displaces.
482
+ - **`/orc-doc` was never affected**: `orc doc next` resolves its targets in the
483
+ CLI, which is the shape the other two now borrow.
484
+
485
+ ### v0.55.1 โ€” ORC is on npm _(2026-08-27)_
486
+
487
+ **ORC is published as [`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc).**
488
+ The GitHub tarball still works and nothing about the payload changed โ€” this is
489
+ the install path getting a name.
490
+
491
+ - **`npm i -g @azure-id/orc`** is the install, and
492
+ **`npm i -g @azure-id/orc@latest`** is the update. `orc upgrade` already did
493
+ both steps for you and continues to; `--from @azure-id/orc` names npm
494
+ explicitly.
495
+ - **The GitHub tarball is now the fallback**, not the headline โ€” it is kept in
496
+ the Quick start behind a fold for forks and for anyone pinning a branch.
497
+
498
+ ### v0.55.0 โ€” a score is what a band needs, and four lanes do not have one _(2026-08-26)_
499
+
500
+ **`/orc-quick`, `/orc-fast`, `/orc-doc` and `/orc-wiki` pin an agent to a
501
+ position instead of scoring a task. `orc extra` routed them by reading that
502
+ agent's score band โ€” arithmetic on a number nobody chose. It was wrong twice and
503
+ dead once.**
504
+
505
+ - **`orc extra role` holds six POSITIONS** โ€” `quick-executor` ยท `fast-executor` ยท
506
+ `doc-writer` ยท `doc-checker` ยท `wiki-scanner-deep` ยท `wiki-scanner-light`. One
507
+ connection and one model each, and a row's presence is the arming. All six are
508
+ always listed: an unrouted one keeps its slot and reads as the Claude agent it
509
+ falls back to.
510
+ - **`orc extra resolve --slot` never touches a band**, and the Claude answer it
511
+ carries is a pinned NAME rather than an interval. Nine hold-backs, each named.
512
+ - **Precedence, one sentence:** extra decides *whether* a Claude agent runs at
513
+ all; `opus5_only` and the score tables only decide *which* one runs where extra
514
+ did not take it. Under a taken position `opus5_only` is not consulted โ€” and it
515
+ stays fully live for every position with no row.
516
+ - **The bridge accepts a slot** (`band` becomes `slot:<slot>`, so cost reporting
517
+ splits per position for free) with **zero new engines, zero new dispatch paths
518
+ and zero new agents**. A doc checker now resolves its OWN position, `/orc-wiki`
519
+ can route at all, and `/orc-quick` gets a THIRD OPTION on its menu โ€” never a
520
+ default, never sticky, re-asked after a failure.
521
+ - **A second ladder in `orc ui โ–ธ Extra โ–ธ Routing`**, and **zero config keys
522
+ added**.
523
+
524
+ Before that: **v0.54.0 โ€” a failed dispatch is a POSITION, not a blank page**,
525
+ **v0.53.4 โ€” the reload that dropped its own token**, **v0.53.3 โ€” the key it never
526
+ sent**, **v0.53.2 โ€” the cost that was paid and never written down**, and
527
+ **v0.53.1 โ€” "up to date" now names what it checked**.
528
+ [Read them in the changelog](CHANGELOG.md).
529
+
530
+ ---
531
+
532
+ ## Requirements
533
+
534
+ - **Claude Code** โ€” it reads the skills, commands and agents.
535
+ - **Node 18+** โ€” for the installer only. The skills themselves have zero
536
+ dependencies.
537
+
538
+ ## License
539
+
540
+ MIT โ€” the `license` field in `package.json` is the canonical statement.