@azure-id/orc 1.7.1 → 1.8.1

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 (58) hide show
  1. package/CHANGELOG.md +3649 -3381
  2. package/README-id.md +923 -844
  3. package/README.md +836 -788
  4. package/bin/build-agents.js +43 -27
  5. package/bin/cli.js +701 -3
  6. package/bin/graph-extract.js +927 -0
  7. package/bin/graph-notes.js +188 -0
  8. package/bin/graph-query.js +808 -0
  9. package/bin/graph-resolve.js +178 -0
  10. package/bin/graph-signals.js +277 -0
  11. package/bin/graph.js +605 -0
  12. package/bin/verify-contracts.js +4669 -4553
  13. package/bin/verify-package.js +626 -616
  14. package/bin/webui/api.js +1419 -1414
  15. package/bin/webui/fixtures/index.js +579 -576
  16. package/bin/webui/fixtures/knowledge.js +316 -291
  17. package/bin/webui/i18n/en/knowledge.json +167 -151
  18. package/bin/webui/i18n/en/overview.json +101 -100
  19. package/bin/webui/i18n/id/knowledge.json +167 -151
  20. package/bin/webui/i18n/id/overview.json +101 -100
  21. package/bin/webui/js/panels/knowledge.js +1065 -1006
  22. package/bin/webui/js/panels/overview.js +492 -488
  23. package/package.json +39 -39
  24. package/templates/agents/MODEL-MAPPING.md +163 -158
  25. package/templates/agents/orc-executor-haiku-4-5.md +133 -121
  26. package/templates/agents/orc-executor-opus-4-7-high.md +134 -122
  27. package/templates/agents/orc-executor-opus-4-7-med.md +134 -122
  28. package/templates/agents/orc-executor-opus-4-8-high.md +134 -122
  29. package/templates/agents/orc-executor-opus-5-high.md +134 -122
  30. package/templates/agents/orc-executor-opus-5-low.md +134 -122
  31. package/templates/agents/orc-executor-opus-5-med.md +134 -122
  32. package/templates/agents/orc-executor-sonnet-4-6-high.md +134 -122
  33. package/templates/agents/orc-executor-sonnet-4-6-med.md +134 -122
  34. package/templates/agents/orc-executor-sonnet-5-high.md +134 -122
  35. package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +86 -0
  36. package/templates/hooks/README.md +444 -396
  37. package/templates/hooks/orc-graph-hook.js +336 -0
  38. package/templates/hooks/orc-statusline-render.js +922 -921
  39. package/templates/hooks/orc-statusline.js +1596 -1545
  40. package/templates/skills/_shared/README.md +4 -0
  41. package/templates/skills/_shared/code-graph.md +220 -0
  42. package/templates/skills/_shared/opus5-only.md +4 -0
  43. package/templates/skills/_shared/phases/execution.md +166 -147
  44. package/templates/skills/_shared/phases/planning.md +142 -135
  45. package/templates/skills/_shared/phases/preflight.md +132 -118
  46. package/templates/skills/_shared/phases/review.md +63 -53
  47. package/templates/skills/_shared/phases/ship.md +96 -88
  48. package/templates/skills/_shared/phases/trace.md +6 -0
  49. package/templates/skills/_shared/phases/wiki-consult.md +194 -189
  50. package/templates/skills/_shared/read-ladder.md +124 -102
  51. package/templates/skills/_shared/return-validation.md +259 -250
  52. package/templates/skills/orc/SKILL.md +255 -254
  53. package/templates/skills/orc-diy/references/flow-schema.md +101 -100
  54. package/templates/skills/orc-fast/SKILL.md +236 -229
  55. package/templates/skills/orc-mini/SKILL.md +267 -259
  56. package/templates/skills/orc-quick/SKILL.md +378 -361
  57. package/templates/skills/orc-quick/references/dispatch-gate.md +6 -0
  58. package/templates/skills/orc-wiki/references/staleness.md +294 -288
package/README.md CHANGED
@@ -1,788 +1,836 @@
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.7.1-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.7.1** · updated 2026-09-14 · [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-test`** | **Runs** the test against a running system - yours, or one you were given permission to touch. Sends the requests, writes down what came back, and stops. **The CLI executes and measures; the model designs and interprets.** Three verdicts, and **`unknown` is the honest one**. The OWASP API Top 10 (2023) as a **closed set** where a category it could not measure keeps its slot and never becomes a pass. It never edits the system it is testing. | [see it](mock-run/orc-test.md) |
291
- | **`/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) |
292
- | **`/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) |
293
- | **`/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) |
294
- | **`/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) |
295
-
296
- ### Ship and hand over
297
-
298
- | Command | What it does | Mocked run |
299
- |---|---|---|
300
- | **`/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) |
301
- | **`/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) |
302
- | **`/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) |
303
-
304
- ---
305
-
306
- ## Rules that keep the slop out
307
-
308
- ORC writes a lot of prose and a lot of code. Both come out carrying the same
309
- recognisable defaults: sentences that say nothing in a confident shape, and code
310
- that is longer, more defensive and more abstract than the task asked for.
311
- `orc rules` is the filter, and it has **two halves that never mix**.
312
-
313
- | Half | Who writes it | Where | Changes when |
314
- |---|---|---|---|
315
- | **ORC rules** | ORC | `.claude/skills/_shared/rules/` | `orc update` |
316
- | **Your rules** | you | `.claude/orc/rules.md` | you type |
317
-
318
- **65 shipped rules, read-only**, in four packs: `OSW` writing (23) · `OSC` code
319
- (22) · `OSD` delivery (10), which is what an agent reports about its OWN work ·
320
- `OSU` UI (10), which rides per TASK rather than per lane. Three tiers - **HARD**
321
- absolute, **PURPOSE** allowed with a written one-line reason, **LOCK** a
322
- consistency check.
323
-
324
- **Your rules are plain text**, three headings, as much under each as you want -
325
- and **they beat an ORC rule outright**:
326
-
327
- ```
328
- house rules > your rules > ORC rules
329
- ```
330
-
331
- The house rules are about CODE and behaviour. They say nothing about the words
332
- an agent writes, so they never overrule a writing rule. To switch an ORC rule
333
- off, name its id in a rule of your own; the override is then counted, printed at
334
- preflight, and stated inside every slice. **It is never silent.**
335
-
336
- ```bash
337
- orc rules # both halves, the ladder, the counts
338
- orc rules add --priority P0 --text "..." # your own, in your own words
339
- orc rules lint src/ README.md # free, zero tokens
340
- orc rules credits # every source, author and licence
341
- ```
342
-
343
- `orc rules lint` checks **13 of the 65** - the ones a string match can prove -
344
- and prints, every time, `not checked here: 52 rules. They need a reader, not a
345
- matcher.` A clean lint is not a clean review, and it says so.
346
-
347
- **The rules are other people's work, and the credit ships with them.** Adapted
348
- from [`petergyang/no-ai-slop`](https://github.com/petergyang/no-ai-slop) (MIT),
349
- [`miqdadbadjuber/anti-slop`](https://github.com/miqdadbadjuber/anti-slop) (MIT),
350
- [`ehmo/slopkit`](https://github.com/ehmo/slopkit),
351
- [`BioInfo/slopless`](https://github.com/BioInfo/slopless), Andrej Karpathy's
352
- `CLAUDE.md`, Matty Cartwright's Anti-Slop Writing Rules, and three papers on LLM
353
- code smells.
354
-
355
- **Full detail: [`guides/rules.md`](guides/rules.md).**
356
-
357
- ---
358
-
359
- ## Documents that go somewhere
360
-
361
- `/orc-doc` writes the long document — and Markdown is the deliverable because of
362
- where a Markdown file can actually go:
363
-
364
- | Target | Imports `.md`? |
365
- |---|---|
366
- | Notion · Obsidian · Google Docs · Coda · Craft · Apple Notes · GitHub | **natively** |
367
- | Docusaurus · Hugo · Jekyll · MkDocs | yes — and these *want* YAML front matter |
368
- | Confluence | not natively. Plan for a marketplace importer app |
369
- | Microsoft OneNote | **no**. Convert to Word or PDF first |
370
-
371
- That table is load-bearing, not decoration: `orc doc lint --target` enforces the
372
- real limit of the place your document is going. Notion has three heading levels,
373
- so an H4 is an **error** there. A hard-wrapped paragraph is an error everywhere,
374
- because a wrap at 80 columns becomes a line break inside a Notion paragraph.
375
-
376
- Five base templates — `prd` · `tsd` · `collaboration` · `report` · `workflow` —
377
- each a floor rather than a cage. `orc doc templates` prints them; bring your own
378
- and its headings become the outline.
379
-
380
- **Full detail: [`guides/documents.md`](guides/documents.md).**
381
-
382
- ---
383
-
384
- ## `orc ui` — the control panel
385
-
386
- A local web page for **everything in ORC that is not ai**. One boundary defines
387
- it: **it never runs a lane, never spawns `claude`, never calls a model API.**
388
- Everything it shows or writes is deterministic CLI output.
389
-
390
- <img width="1870" height="1269" alt="image" src="https://github.com/user-attachments/assets/207fe821-9aa6-430e-bdcc-968340cc687f" />
391
-
392
- > 🎬 **Video walkthrough — not recorded yet.** The player belongs here; see
393
- > [`mock-run/media/README.md`](mock-run/media/README.md) for the two files to
394
- > drop in. Until then, the panel is written out screen by screen in
395
- > [`mock-run/orc-ui.md`](mock-run/orc-ui.md).
396
-
397
- ```bash
398
- orc ui # binds 127.0.0.1:9921 and opens a browser
399
- orc ui --port 9930 # an explicit port never auto-walks — a collision is an error
400
- orc ui --no-open # print the URL only
401
- orc ui --idle 0 # disable the idle shutdown (default: 30 minutes)
402
- orc ui --fixtures # canned data, no project needed
403
- orc ui --stop # shut this project's server down
404
- ```
405
-
406
- | Panel | Shows | Can change |
407
- |---|---|---|
408
- | Overview | version, `orc doctor`, wiki tier, what is waiting — plus **Worth doing**, one list of everything wanting a decision | — |
409
- | Settings | every config key, grouped, each with its own control | staged edits, applied together |
410
- | Runs | run history as an accordion: a row opens in place into state-of-play, resume prompt, checkpoint, trace tail | — |
411
- | **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` |
412
- | Stats | lane and agent usage, downgrades, and a **Cost** tab whose stacked bar keeps cache-read visible | — |
413
- | Flow | the compiled DIY flow, its gate, and a stepper of every phase in order | `diy set`, `diy compile`, presets |
414
- | Crosslink | **Design** (the boundary as a graph) and **Settings** (each peer's freshness) | `crosslink add` / `remove` |
415
- | Promises · Boundary · Self-serve | the pact ledger, the boundary cards, and the surfaces a non-developer can change | `pact check`, `pact sync`, `handoff set` |
416
- | **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` |
417
- | **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` |
418
- | **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` |
419
- | **Mocked Skill Use** | every mocked run that ships with ORC, grouped and searchable, with a reading pane | — |
420
- | Learn | the `orc onboarding` walkthrough, one section at a time | — |
421
- | Experiment | every lane with a copy button; opens a Claude session in a terminal | — |
422
- | Maintenance | `update`, `update --prune`, `doctor --fix`, `upgrade` | preview, then apply |
423
-
424
- - **The panel *is* the CLI.** It reads `orc <command> --json` and shells the real
425
- command for every write, so it cannot drift from the CLI — it has no second
426
- copy of anything.
427
- - **A free action gets a button. A paid action gets a command to copy.**
428
- - **Nothing is automatic**, and a prune names **every** file. A count is not
429
- consent.
430
- - **Treated as a write surface**: loopback only, a fresh token per launch, a
431
- Host-header check against DNS rebinding, no CORS, POST-only mutations.
432
- - **Project-scoped, no `--global` config.** If a global install exists that could
433
- win skill resolution, every page carries a banner. It reports that; it never
434
- edits global config.
435
- - **English and Indonesian.** Only the panel's own words are translated — config
436
- keys, model ids, paths, commands and doctor messages are printed exactly as the
437
- CLI wrote them, because a translated config key is a key that does not exist.
438
-
439
- Zero dependencies, zero build step: `node:http`, plain JavaScript, hand-written
440
- CSS.
441
-
442
- ---
443
-
444
- ## Running part of the ladder somewhere else — `orc extra`
445
-
446
- **The orchestrator is always Claude.** What Extra changes is *who executes a
447
- slice*: a score band you own, or one of six named positions, can point at
448
- DeepSeek, GLM, Kimi, MiniMax, Qwen, a local Ollama, or a coding CLI you already
449
- have signed in (opencode, codex). Everything downstream — the smoke gate, the TDD
450
- gate, the reviewer, the worktree-delta check — is engine-blind, so nothing learns
451
- the work was foreign.
452
-
453
- **Off by default, and it cannot be armed until something has actually answered.**
454
-
455
- ```bash
456
- orc extra providers # the shipped, dated catalog — providers, never models
457
- orc extra tools # local CLIs: absent · outdated · unauthenticated · ready
458
- orc extra add ds --provider deepseek --engine api --env-key DEEPSEEK_API_KEY
459
- orc extra ping ds # the connection gate: a ladder, and nothing reads stronger than it is
460
- orc extra models ds --test <id> # a LISTED model can still be dead upstream
461
- orc extra health ds --model <id> # …and a working model is not one that FINISHES
462
- orc extra route set 40-55 ds/deepseek-chat # a score band
463
- orc extra role set doc-writer ds/deepseek-chat # or a named position
464
- orc config set extra_enabled true
465
- ```
466
-
467
- - **The catalog ships providers and never models.** A shipped model id is wrong
468
- within a quarter and wrong *silently* — a 404 mid-wave. `orc extra ping` reads
469
- the live list and caches it; nothing invents a name. Same for price: a cost
470
- figure ORC did not price itself is never printed, it reads as an em dash.
471
- - **Every armed run says so before wave 1.** Routing work off Claude silently is
472
- the failure this whole subsystem is shaped around.
473
- - **Two hard hold-backs**: a task with a cited `risk[]` (auth, money, migration,
474
- security, concurrency, data-integrity) stays on Claude unless you say
475
- otherwise, and a `/orc-boundary` REFUSE area holds even in `warn`.
476
- - **A foreign return is foreign input.** It is the only foreign class that edits
477
- your worktree, so what it says it did is a *claim*, checked against the tree.
478
- - **Your key never reaches a command line.** It travels on stdin into an
479
- encrypted vault, or it stays in an environment variable, or the tool holds its
480
- own — and the passphrase is a **deadline**, not a second factor.
481
- - **Six positions for the lanes that pin an agent instead of scoring a task**:
482
- `quick-executor` · `fast-executor` · `doc-writer` · `doc-checker` ·
483
- `wiki-scanner-deep` · `wiki-scanner-light`. A position with no row keeps its
484
- slot and reads as its pinned Claude agent — "I left the checker on Claude on
485
- purpose" and "there is no checker" must never look the same.
486
-
487
- **When a foreign worker fails, it is a position and not a blank page.** ORC
488
- journals the baseline *before the first byte leaves the machine*, so a worker cut
489
- off mid-write is **reconciled and resumed** — never re-dispatched from scratch
490
- onto a file that is already two-thirds written.
491
-
492
- - **`extra_stall_s` (default 180)** stops a worker that has produced nothing for
493
- that long. It is reset by observable progress — the worker's stream, its
494
- stderr, or a declared file that changed on disk — so it never fires on one that
495
- is merely slow. `stalled` is retryable, which is what makes the resume ORC's
496
- own spelling of typing `continue`.
497
- - **`extra_fallback_agent` (default `band`)** decides who picks the task up.
498
- `ask` stops and puts the menu to you; any installed agent name pins one. It
499
- changes *who*, never the score, the declared files or the acceptance criteria.
500
- - **Every dispatch writes its own spend record**, so a cost report never depends
501
- on a run remembering to narrate what it spent. `orc extra stats` merges the
502
- spend log, the traces and saved returns, and always says how many rows came
503
- from each.
504
-
505
- **`/orc-quick` is inert here** and announces it — that lane asks which agent
506
- before every dispatch, so no setting may pre-answer it. **`/orc-challenge` never
507
- routes foreign**: swapping a lens for a different model does not make the lane
508
- cheaper, it changes what is being measured.
509
-
510
- **The whole subsystem, with every command and key:
511
- [guides/extra-models.md](guides/extra-models.md).**
512
-
513
- ---
514
-
515
- ## How the model is picked
516
-
517
- Each task is scored 0–100 by **arithmetic, not judgement**: the planner reports
518
- facets (breadth, novelty, logic, test surface, cited risk, uncertainty) and a
519
- fixed published formula turns them into a number. A cited risk forces a floor of
520
- 70. The score maps through a published table to a **named, model-pinned agent**,
521
- so what ran is inspectable rather than requested in prose.
522
-
523
- > **The rule that catches everyone:** a subagent's model can never be higher than
524
- > your main session's. Run your session on Opus 5.
525
-
526
- **Full detail — the bands, `opus5_only`, and the tier guard `orc init` installs:
527
- [guides/model-selection.md](guides/model-selection.md).**
528
-
529
- ---
530
-
531
- ## Configuration
532
-
533
- Settings are edited with the **`orc config` CLI** — deterministic terminal I/O,
534
- so it costs **zero model tokens**.
535
-
536
- ```bash
537
- orc config # interactive menu
538
- orc config list # the effective config
539
- orc config recommend # read this repo, suggest ONE profile, with reasons
540
- orc config profile paranoid
541
- ```
542
-
543
- Your changes live in `.claude/orc.config.yaml`, which `orc update` never
544
- clobbers. `orc ui` ▸ Settings edits the same keys through the same validators.
545
-
546
- **Every key, with defaults and what each one does:
547
- [guides/configuration.md](guides/configuration.md).**
548
-
549
- ---
550
-
551
- ## What is inside the package
552
-
553
- ```
554
- templates/
555
- ├── skills/ 31 skill folders, 38 SKILL.md files (a lane may ship subskills) —
556
- │ the lanes above, plus the ones with no command of their own:
557
- │ context-combiner, orc-advisor, orc-judge, orc-analyze-mini,
558
- │ and _shared/ (cross-lane contract prose)
559
- ├── commands/ 29 slash commands
560
- ├── hooks/ effort guard (PreToolUse) · statusline warning · behavior trace
561
- └── agents/ 51 model-pinned subagents + MODEL-MAPPING.md
562
- bin/cli.js installer, config editor, flow composer, run-state reader, and
563
- the deterministic half of every lane. Every read speaks --json
564
- bin/webui/ `orc ui` — the local control panel: css/ + js/ + i18n/<lang>/ +
565
- fixtures/, one file per layer and per panel. Zero deps, no build step
566
- bin/mockrun-catalog.js the mocked-run catalogue (derived from the files on disk)
567
- mock-run/ the mocked runs themselves — start at INDEX.md
568
- guides/ configuration · model selection · documents · knowledge reads · other AI models
569
- ```
570
-
571
- The `orc` skill is a thin **spine**: it loads a reference or a subskill only when
572
- that phase actually runs, so a small task never pays for the machinery of a big
573
- one.
574
-
575
- ---
576
-
577
- ## Longer guides
578
-
579
- Some lanes ship a full how-to next to the skill, in plain language:
580
-
581
- | Guide | Read it when |
582
- |---|---|
583
- | [ORC-QUICK](templates/skills/orc-quick/README.md) | you want the quick lane's complete worked runs |
584
- | [ORC-DIY](templates/skills/orc-diy/README.md) | you want to compose your own lane |
585
- | [ORC-WIKI](templates/skills/orc-wiki/README.md) | you want the knowledge base, and cross-repo crosslink setup |
586
- | [ORC-PR-SETUP](templates/skills/orc-pr-setup/README.md) | you want to split a big change into stacked PRs |
587
- | [ORC-PR-DRIVER](templates/skills/orc-pr-driver/README.md) | you have a stack plan and want to build, submit and merge it |
588
- | [Rules](guides/rules.md) | you want the 65 anti-slop rules, the precedence ladder and the lint |
589
- | [Configuration](guides/configuration.md) · [Model selection](guides/model-selection.md) | you want every key, or the scoring bands |
590
- | [Other AI models](guides/extra-models.md) | you want part of the ladder to run somewhere other than Claude |
591
-
592
- Every skill also ships its own `SKILL.md` and `references/`. The guides above are
593
- the human-facing versions.
594
-
595
- ---
596
-
597
- ## Eval status
598
-
599
- The constellation is graded **end to end**, not file by file: one executable
600
- spec per lane, run against a sandboxed Express fixture, graded from on-disk
601
- evidence — behavior traces, run folders and artifacts.
602
-
603
- The last full round was the **30-eval suite against the v0.34.0 payload**: 25
604
- filled result files and 38 trace files, with 5 evals never graded and 2 only
605
- partly graded — all named in the report. Everything found there was either fixed
606
- in a later release or is still listed. Read it as a record of that round, not as
607
- a current audit: [EVAL-REPORT.md](EVAL-REPORT.md).
608
-
609
- ---
610
-
611
- ## Design principles
612
-
613
- - **Never implement at the top.** The orchestrator coordinates; scored subagents
614
- do the work.
615
- - **Bound the scope before parallelizing.** A misunderstanding is cheap to fix
616
- before five agents build on it.
617
- - **Disk over memory.** Every pause is a clean resume point.
618
- - **Pinned, inspectable models.** Named agents, models in frontmatter.
619
- - **Your codebase wins.** Learned patterns defer to your project; only security
620
- and correctness invariants are non-negotiable.
621
- - **Additive knowledge.** The wiki improves planning when it is there and costs
622
- nothing when it is not.
623
- - **Say what you do not know.** `UNCHECKABLE`, `no card`, `insufficient history`
624
- are real answers. A confident guess is worse than an honest gap.
625
-
626
- ---
627
-
628
- ## Changelog
629
-
630
- **Full history: [CHANGELOG.md](CHANGELOG.md)** — or `orc changelog`, which prints
631
- only what is newer than the version you have.
632
-
633
- ### v1.7.1 - the rules card now reaches the agent _(2026-09-14)_
634
-
635
- In v1.7.0, subagents and the preflight showed the house rules only. Your project
636
- rules and the ORC rules did not reach the agent.
637
-
638
- **The cause.** `orc rules slice` built the card correctly, but each place that
639
- builds an executor slice named only the `house_rules` card. `/orc` Phase 3 also
640
- did not load `rules.md`, and the `/orc` preflight had no `rules:` row.
641
-
642
- **The fix.**
643
-
644
- - **A new slice field, `rules_card`** - the `text` of
645
- `orc rules slice --lane <lane> --json`, put in verbatim directly under
646
- `house_rules` in `/orc`, `/orc-mini`, `/orc-fast`, `/orc-quick` and the
647
- Extra foreign dispatch.
648
- - **The executors read it** and return `rules_applied[]`, `rules_conflicts[]`
649
- and `rules_overridden[]`.
650
- - **The `/orc` preflight prints `rules:`** - the CLI `line`, verbatim.
651
- - **Guards** - `rules_card` is a registered contract token, and a test checks
652
- every dispatch site.
653
-
654
- **How to check it.** Run `orc rules slice --lane orc --json`. When
655
- `.claude/orc/rules.md` has rules, `line` shows `yours N lines` and `text`
656
- starts with `YOUR PROJECT'S RULES`. Run `orc update` in your project to get the
657
- fixed skills.
658
-
659
- <details>
660
- <summary><strong>Earlier releases</strong> — 115 of them, titles only. Full text in <a href="CHANGELOG.md">CHANGELOG.md</a>.</summary>
661
-
662
- - **v1.7.0** — the rules that keep the slop out · _2026-09-13_
663
- - **v1.6.0** — the rule that can finally say no · _2026-09-07_
664
- - **v1.5.0** — the lane that runs the test · _2026-09-07_
665
- - **v1.4.2** — the panel that stops reloading, and the fields you could not read back · _2026-09-05_
666
- - **v1.4.1** — the board you can actually use · _2026-09-05_
667
- - **v1.4.0** — the agent panel, and the number that was missing · _2026-09-04_
668
- - **v1.3.0** — build your own status line · _2026-09-04_
669
- - **v1.2.1** — the status line says what ORC is doing · _2026-09-04_
670
- - **v1.2.0** — a retry that cloned the agent, and a window you can watch empty · _2026-09-04_
671
- - **v1.1.0** — the wait, and a window ORC can finally see · _2026-08-31_
672
- - **v1.0.0** — config, phases and calls stop being prose · _2026-08-30_
673
- - **v0.56.1** — a worker that is alive and doing nothing · _2026-08-28_
674
- - **v0.56.0** — a rename moved the command, and nobody could reach the fix · _2026-08-27_
675
- - **v0.55.2** — a gate that is never probed is a gate that is always off · _2026-08-27_
676
- - **v0.55.1** — ORC is on npm · _2026-08-27_
677
- - **v0.55.0** — a score is what a band needs, and four lanes do not have one · _2026-08-26_
678
- - **v0.54.0** — a failed dispatch is a POSITION, not a blank page · _2026-08-25_
679
- - **v0.53.4** — the reload that dropped its own token · _2026-08-24_
680
- - **v0.53.3** — the key it never sent · _2026-08-24_
681
- - **v0.53.2** — the cost that was paid and never written down · _2026-08-24_
682
- - **v0.53.1** — "up to date" now names what it checked · _2026-08-23_
683
- - **v0.53.0** — the schema the provider rejected, and a routing table you can read · _2026-08-23_
684
- - **v0.52.0** — the connection that could not be used, and the routing nobody could see · _2026-08-23_
685
- - **v0.51.0** — the tools you already have, and a connection that proves itself · _2026-08-22_
686
- - **v0.50.0** — work that runs somewhere else · _2026-08-22_
687
- - **v0.49.5** — house rules are text, and the hand-back writes itself · _2026-08-21_
688
- - **v0.49.4** — the panel was being handed half an answer · _2026-08-20_
689
- - **v0.49.3** — coverage on a large repo · _2026-08-19_
690
- - **v0.49.2** — house rules, a run map before you pay, and three defects · _2026-08-18_
691
- - **v0.49.1** — the challenge council, and a `--json` that stops throwing things away · _2026-08-18_
692
- - **v0.49.0** — the document is a folder, and the file is a build artifact · _2026-08-17_
693
- - **v0.48.1** — one file per thing, and a document that can be finished · _2026-08-16_
694
- - **v0.48.0** — a document long enough to end a session, written anyway · _2026-08-13_
695
- - **v0.47.0** — the lane that refuses to produce · _2026-08-12_
696
- - **v0.46.1** — see a lane run before you pay for one · _2026-08-12_
697
- - **v0.46.0** — a lane that remembers, a lane that declines, and a lane that measures · _2026-08-10_
698
- - **v0.45.0** — `/orc-brainstorm`: for when you do not have the idea yet · _2026-08-10_
699
- - **v0.44.1** — apply when you say so, and a spotlight that survives a banner · _2026-08-09_
700
- - **v0.44.0** — the panel stops making you type what it already knows · _2026-08-09_
701
- - **v0.43.7** — the flow you can see, and a boundary you can read · _2026-08-09_
702
- - **v0.43.6** — `orc ui` in two languages, and panels that point at the right page · _2026-08-08_
703
- - **v0.43.5** — the update check works, and the UI teaches itself · _2026-08-08_
704
- - **v0.43.4** — a warning that finally clears, an Experiment panel, crosslink from the UI · _2026-08-08_
705
- - **v0.43.3** — `orc ui`: it tells you about updates, and 36 keys stop being a wall · _2026-08-08_
706
- - **v0.43.2** — `orc ui`: boxes stop colliding, because the container owns the gap · _2026-08-08_
707
- - **v0.43.1** — the panel's stylesheet and script actually reach the browser · _2026-08-08_
708
- - **v0.43.0** — `orc ui`: a control panel for everything that is not ai · _2026-08-08_
709
- - **v0.42.0** — Say what you mean, see what it costs, find your way back · _2026-08-08_
710
- - **v0.41.0** — A wiki that can tell you it is fresh, and TDD only where it can fail · _2026-08-06_
711
- - **v0.40.0** — Gotchas: repair memory that outlives the run · _2026-08-06_
712
- - **v0.39.0** — The read ladder, and foreign input that is evidence rather than instruction · _2026-08-06_
713
- - **v0.38.1** — `orc doctor --json` + handoff carry-over that says what is re-derived · _2026-08-06_
714
- - **v0.38.0** — `/orc-quick`: the quick lane, and the gate no config can collapse · _2026-08-05_
715
- - **v0.37.0** — Stacked pull requests: a measured ship gate + two standalone lanes · _2026-08-03_
716
- - **v0.36.0** — `opus5_only`: one model for every role, not just executors · _2026-08-02_
717
- - **v0.35.0** — `opus5_executor_only`: one model, effort as the cost dial · _2026-08-02_
718
- - **v0.34.8** — `orc pattern status` rejects a language key the payload has never heard of · _2026-08-01_
719
- - **v0.34.7** — DIY: a usable status contract, and compile docs that match the compiler · _2026-08-01_
720
- - **v0.34.6** — Analyze: the evidence gate now covers the rows a good analysis produces · _2026-08-01_
721
- - **v0.34.5** — Wiki: stop losing tags silently, let a delta clear its own delta · _2026-08-01_
722
- - **v0.34.4** — Planner: scorable facets, and TDD rules scoped to reality · _2026-08-01_
723
- - **v0.34.3** — Slice boundary: the worktree, not the editor · _2026-08-01_
724
- - **v0.34.2** — Trace subsystem: the pointer clobber, and a writer contract that holds · _2026-08-01_
725
- - **v0.34.1** — Install integrity: run state survives `orc update` · _2026-08-01_
726
- - **v0.34.0** — Opus 5: top scoring band, every core role, medium-effort session tier · _2026-07-25_
727
- - **v0.33.0** — Knowledge deepening + verification revamp · _2026-07-25_
728
- - **v0.32.0** — Trace revamp: narration is dispatched, not remembered · _2026-07-24_
729
- - **v0.31.0** — Execution-integrity revamp: plan handoff, attributable traces, facet scoring · _2026-07-23_
730
- - **v0.30.0** — Scoring revamp, Fable 5 role override, tier-aware guards, `orc onboarding` · _2026-07-23_
731
- - **v0.29.0** — Drift-prevention hardening: install manifest + prune, `orc doctor`, a real test suite · _2026-07-22_
732
- - **v0.28.1** — Defect fixes: package encoding, trace event routing, count/doc drift · _2026-07-22_
733
- - **v0.28.0** — Run integrity: rich full-lane traces, deterministic wave stop, visible knowledge gates · _2026-07-21_
734
- - **v0.27.0** — `/orc-poly`: plan one change across two-or-more repos without drift · _2026-07-20_
735
- - **v0.26.0** — Test-gen output pinned to a visible `test-generator/<change-slug>/` deliverable · _2026-07-19_
736
- - **v0.25.1** — Eval report: the full 17-lane suite graded against the v0.25.0 payload · _2026-07-18_
737
- - **v0.25.0** — Deterministic artifact detection: a generated wiki/pattern is never missed · _2026-07-18_
738
- - **v0.24.0** — Crosslink fused into wiki generation: always-on, per-scan-task, never wiped · _2026-07-18_
739
- - **v0.23.0** — Trace fix: SPAWN restored on the `Agent` tool, stale runs rotate to fresh files · _2026-07-18_
740
- - **v0.22.0** — `/orc-learn`: per-feature onboarding docs — learning.md + knowledge.md, wiki-deep, git-ignored · _2026-07-17_
741
- - **v0.21.0** — Statusline shows live subscription usage: 5h ↔ weekly, official numbers · _2026-07-16_
742
- - **v0.20.0** — One source of truth: generated executor agents + shared cross-lane contracts · _2026-07-16_
743
- - **v0.19.0** — Thin spines: skill compaction, budget lint, and a trace that logs every phase · _2026-07-16_
744
- - **v0.18.0** — `orc wiki sync`: the wiki registers itself — a paused scan is no longer an invisible wiki · _2026-07-15_
745
- - **v0.17.3** — Trace the wiki consult: Phase 1 now logs whether the run grounded in the wiki (and if it was stale) · _2026-07-14_
746
- - **v0.17.2** — Behavior-trace logging is permanent + the trace folder is now created deterministically · _2026-07-14_
747
- - **v0.17.1** — Complete cross-repo crosslink setup guide in the orc-wiki README · _2026-07-14_
748
- - **v0.17.0** — `orc crosslink`: cross-repo wiki references — advisory boundary contracts · _2026-07-14_
749
- - **v0.16.1** — Interactive `orc diy` composer + numbered picks in `orc config` · _2026-07-14_
750
- - **v0.16.0** — `/orc-diy`: build your own lane — CLI-composed flow, compiled, hard-gated · _2026-07-14_
751
- - **v0.15.0** — Wiki v2: evidence-anchored docs · per-file staleness registry · integrity gate · _2026-07-14_
752
- - **v0.14.0** — Postgres data-access playbook: cross-cutting query grounding · _2026-07-13_
753
- - **v0.13.0** — `/orc-claude`: local CLAUDE.md builder — fenced sections, fingerprint refresh, zero questions · _2026-07-12_
754
- - **v0.12.0** — Lossless context-combiner: conservation gate · overlap taxonomy · evidence freshness · _2026-07-12_
755
- - **v0.11.0** — `/orc-fast`: knowledge-gated speed lane + wiki freshness infrastructure · _2026-07-12_
756
- - **v0.10.1** — README: a fuller "Why ORC exists" · _2026-07-12_
757
- - **v0.10.0** — `/orc-ultra`: max-effort advisor + three judgment gates for ultra-complex work · _2026-07-12_
758
- - **v0.9.0** — Trust-but-verify the analyst→planner chain: quote-anchored evidence · coverage gate · anchored judgment · _2026-07-12_
759
- - **v0.8.1** — /orc-retro delivers upstream: PR/issue to the ORC repo, channel-gated · _2026-07-12_
760
- - **v0.8.0** — Close the loop: grounded intake · scoring anchors · OUTCOME marker · /orc-retro trace miner · eval harness · _2026-07-12_
761
- - **v0.7.0** — Evidence everywhere: grounded plans · verbatim proof · anchored findings · contract lint · trace fixes · _2026-07-12_
762
- - **v0.6.0** — P0–P3 ladder · house rules · deep playbooks + wired gates · 3 new languages · FE rule packs · security pass · _2026-07-11_
763
- - **v0.5.1** — Statusline false-degrade fix · _2026-07-11_
764
- - v0.5.0 — Code-pattern findings: executors match your house style, invariants always enforced
765
- - v0.4.5 — Rewrite weak worker descriptions (the real score lever)
766
- - v0.4.4 — Act on external review: raise sub-70 workers, fix cross-spine paths
767
- - v0.4.3 — `orc-analyze`: trim description under the 1024-char skill-spec limit
768
- - v0.4.2 — External-review pass: worked examples + sharper mini-analyst activation
769
- - v0.4.1 — `orc-mini`: faster, safer fast-lane — smoke gate, opt-in tests, trimmed ceremony
770
- - v0.4.0 — Opt-in Phase 6.5 Test Authoring (writes test cases, never runs them)
771
- - v0.3.0 — Opt-in behavior-trace logging + claimed-vs-actual model verification
772
- - v0.2.4 — `orc-analyze`: gather anchored adjacent-scope context (non-actionable)
773
- - v0.2.3 — Context Combiner: merge 2+ related analyses into one combined spec
774
- - v0.2.2 — Config: enforce per-key override-first resolution
775
- - v0.2.1 — Move config editing into the `orc config` CLI (zero-token); drop `/orc-config`
776
- - v0.2.0 — Doc-optional evidence-backed analyst + deep mode
777
-
778
- </details>
779
-
780
- ## Requirements
781
-
782
- - **Claude Code** — it reads the skills, commands and agents.
783
- - **Node 18+** — for the installer only. The skills themselves have zero
784
- dependencies.
785
-
786
- ## License
787
-
788
- 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.8.1-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.8.1** · updated 2026-09-16 · [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-test`** | **Runs** the test against a running system - yours, or one you were given permission to touch. Sends the requests, writes down what came back, and stops. **The CLI executes and measures; the model designs and interprets.** Three verdicts, and **`unknown` is the honest one**. The OWASP API Top 10 (2023) as a **closed set** where a category it could not measure keeps its slot and never becomes a pass. It never edits the system it is testing. | [see it](mock-run/orc-test.md) |
291
+ | **`/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) |
292
+ | **`/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) |
293
+ | **`/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) |
294
+ | **`/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) |
295
+
296
+ ### Ship and hand over
297
+
298
+ | Command | What it does | Mocked run |
299
+ |---|---|---|
300
+ | **`/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) |
301
+ | **`/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) |
302
+ | **`/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) |
303
+
304
+ ---
305
+
306
+ ## Rules that keep the slop out
307
+
308
+ ORC writes a lot of prose and a lot of code. Both come out carrying the same
309
+ recognisable defaults: sentences that say nothing in a confident shape, and code
310
+ that is longer, more defensive and more abstract than the task asked for.
311
+ `orc rules` is the filter, and it has **two halves that never mix**.
312
+
313
+ | Half | Who writes it | Where | Changes when |
314
+ |---|---|---|---|
315
+ | **ORC rules** | ORC | `.claude/skills/_shared/rules/` | `orc update` |
316
+ | **Your rules** | you | `.claude/orc/rules.md` | you type |
317
+
318
+ **65 shipped rules, read-only**, in four packs: `OSW` writing (23) · `OSC` code
319
+ (22) · `OSD` delivery (10), which is what an agent reports about its OWN work ·
320
+ `OSU` UI (10), which rides per TASK rather than per lane. Three tiers - **HARD**
321
+ absolute, **PURPOSE** allowed with a written one-line reason, **LOCK** a
322
+ consistency check.
323
+
324
+ **Your rules are plain text**, three headings, as much under each as you want -
325
+ and **they beat an ORC rule outright**:
326
+
327
+ ```
328
+ house rules > your rules > ORC rules
329
+ ```
330
+
331
+ The house rules are about CODE and behaviour. They say nothing about the words
332
+ an agent writes, so they never overrule a writing rule. To switch an ORC rule
333
+ off, name its id in a rule of your own; the override is then counted, printed at
334
+ preflight, and stated inside every slice. **It is never silent.**
335
+
336
+ ```bash
337
+ orc rules # both halves, the ladder, the counts
338
+ orc rules add --priority P0 --text "..." # your own, in your own words
339
+ orc rules lint src/ README.md # free, zero tokens
340
+ orc rules credits # every source, author and licence
341
+ ```
342
+
343
+ `orc rules lint` checks **13 of the 65** - the ones a string match can prove -
344
+ and prints, every time, `not checked here: 52 rules. They need a reader, not a
345
+ matcher.` A clean lint is not a clean review, and it says so.
346
+
347
+ **The rules are other people's work, and the credit ships with them.** Adapted
348
+ from [`petergyang/no-ai-slop`](https://github.com/petergyang/no-ai-slop) (MIT),
349
+ [`miqdadbadjuber/anti-slop`](https://github.com/miqdadbadjuber/anti-slop) (MIT),
350
+ [`ehmo/slopkit`](https://github.com/ehmo/slopkit),
351
+ [`BioInfo/slopless`](https://github.com/BioInfo/slopless), Andrej Karpathy's
352
+ `CLAUDE.md`, Matty Cartwright's Anti-Slop Writing Rules, and three papers on LLM
353
+ code smells.
354
+
355
+ **Full detail: [`guides/rules.md`](guides/rules.md).**
356
+
357
+ ---
358
+
359
+ ## Documents that go somewhere
360
+
361
+ `/orc-doc` writes the long document — and Markdown is the deliverable because of
362
+ where a Markdown file can actually go:
363
+
364
+ | Target | Imports `.md`? |
365
+ |---|---|
366
+ | Notion · Obsidian · Google Docs · Coda · Craft · Apple Notes · GitHub | **natively** |
367
+ | Docusaurus · Hugo · Jekyll · MkDocs | yes — and these *want* YAML front matter |
368
+ | Confluence | not natively. Plan for a marketplace importer app |
369
+ | Microsoft OneNote | **no**. Convert to Word or PDF first |
370
+
371
+ That table is load-bearing, not decoration: `orc doc lint --target` enforces the
372
+ real limit of the place your document is going. Notion has three heading levels,
373
+ so an H4 is an **error** there. A hard-wrapped paragraph is an error everywhere,
374
+ because a wrap at 80 columns becomes a line break inside a Notion paragraph.
375
+
376
+ Five base templates — `prd` · `tsd` · `collaboration` · `report` · `workflow` —
377
+ each a floor rather than a cage. `orc doc templates` prints them; bring your own
378
+ and its headings become the outline.
379
+
380
+ **Full detail: [`guides/documents.md`](guides/documents.md).**
381
+
382
+ ---
383
+
384
+ ## The code graph — `orc graph`
385
+
386
+ A local map of how your code is connected. It is **off by default**.
387
+
388
+ ```bash
389
+ orc config set code_graph on # code lanes build and use the map (free)
390
+ orc config set code_graph_notes wave # optional: one-sentence notes (costs tokens)
391
+ orc graph ctx OrderService.create # a card: callers, calls, SQL/HTTP/env effects
392
+ orc graph changes # what THIS diff touched, and how risky
393
+ orc graph cochange src/orders.js # what usually changes with this file
394
+ orc graph coverage src/orders.js # how much of it the parser really saw
395
+ ```
396
+
397
+ - **Structure is free.** The CLI parses the code. No model, no dependency.
398
+ Functions, methods, classes and route handlers (`GET /orders/:id`); a
399
+ middleware passed by name is a `used by` link.
400
+ - **Updates are small.** Git already hashes every file. Only the files whose hash
401
+ changed are parsed again — a teammate's change heals at the next preflight.
402
+ - **Every link says how sure it is:** `LOCAL`, `IMPORT`, `UNIQUE`, `AMBIGUOUS`
403
+ (every candidate listed) or `UNRESOLVED`. The graph never guesses.
404
+ - **A card has a token budget.** It never goes over it, and it says what it hid.
405
+ `--format tree` names each column once instead of on every row, and falls back
406
+ to the normal shape when a card is too small to pay for the header.
407
+ - **It shows where code is. It does not replace reading it.** Agents still read
408
+ the line range before they act. A card header says `coverage partial 327-466`
409
+ when the parser could not finish a file — **no recorded gap is not proof of
410
+ completeness**. A card also lists only the callers that NAME the symbol: one
411
+ that reaches it through an HTTP route or a string dispatch is not a link, so
412
+ **a card's silence is not proof of absence**.
413
+ - **Every answer carries a `generation`** — a number that goes up each time the
414
+ map changes. A card quoted back later can be placed in time.
415
+ - **It keeps itself current in three ways, and only one of them needs a lane to
416
+ remember a step.** A read repairs the files it is about to answer for; the
417
+ installed hook updates the map when a worker finishes; and every code lane
418
+ — `/orc`, `/orc-ultra`, `/orc-diy`, `/orc-mini`, `/orc-fast`, `/orc-quick` —
419
+ still builds it at preflight and updates it after each change. Other lanes
420
+ never call it. **Nothing runs on a timer and nothing runs in the background.**
421
+ - **The hook also hands a worker the anchors it would otherwise search for**, and
422
+ everything it hands over is labelled repository data, never an instruction.
423
+ Switch it off with `orc config set code_graph_hooks off`; the map still works.
424
+
425
+ The contract: `templates/skills/_shared/code-graph.md`. The hook:
426
+ `templates/hooks/README.md`.
427
+
428
+ > **It does not save tokens, and we measured that rather than guessing.** Across
429
+ > 242 real ORC lane windows, `Grep` and `Glob` results are **0.06%** of what a
430
+ > session adds to its context and every tool result together is 5.5%. A perfect
431
+ > locator — every whole-file read turned into a range read — would save **0.1% of
432
+ > a session**. Turn the map on because you want the cards: what calls what, what
433
+ > a change would touch, where the parser could not finish. Not for a number.
434
+ > The working is in `eval/graph-replay.js`, and it spends no tokens to re-run.
435
+
436
+ ## `orc ui` — the control panel
437
+
438
+ A local web page for **everything in ORC that is not ai**. One boundary defines
439
+ it: **it never runs a lane, never spawns `claude`, never calls a model API.**
440
+ Everything it shows or writes is deterministic CLI output.
441
+
442
+ <img width="1870" height="1269" alt="image" src="https://github.com/user-attachments/assets/207fe821-9aa6-430e-bdcc-968340cc687f" />
443
+
444
+ > 🎬 **Video walkthrough — not recorded yet.** The player belongs here; see
445
+ > [`mock-run/media/README.md`](mock-run/media/README.md) for the two files to
446
+ > drop in. Until then, the panel is written out screen by screen in
447
+ > [`mock-run/orc-ui.md`](mock-run/orc-ui.md).
448
+
449
+ ```bash
450
+ orc ui # binds 127.0.0.1:9921 and opens a browser
451
+ orc ui --port 9930 # an explicit port never auto-walks — a collision is an error
452
+ orc ui --no-open # print the URL only
453
+ orc ui --idle 0 # disable the idle shutdown (default: 30 minutes)
454
+ orc ui --fixtures # canned data, no project needed
455
+ orc ui --stop # shut this project's server down
456
+ ```
457
+
458
+ | Panel | Shows | Can change |
459
+ |---|---|---|
460
+ | Overview | version, `orc doctor`, wiki tier, what is waiting — plus **Worth doing**, one list of everything wanting a decision | — |
461
+ | Settings | every config key, grouped, each with its own control | staged edits, applied together |
462
+ | Runs | run history as an accordion: a row opens in place into state-of-play, resume prompt, checkpoint, trace tail | — |
463
+ | **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` |
464
+ | Stats | lane and agent usage, downgrades, and a **Cost** tab whose stacked bar keeps cache-read visible | — |
465
+ | Flow | the compiled DIY flow, its gate, and a stepper of every phase in order | `diy set`, `diy compile`, presets |
466
+ | Crosslink | **Design** (the boundary as a graph) and **Settings** (each peer's freshness) | `crosslink add` / `remove` |
467
+ | Promises · Boundary · Self-serve | the pact ledger, the boundary cards, and the surfaces a non-developer can change | `pact check`, `pact sync`, `handoff set` |
468
+ | **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` |
469
+ | **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` |
470
+ | **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` |
471
+ | **Mocked Skill Use** | every mocked run that ships with ORC, grouped and searchable, with a reading pane | — |
472
+ | Learn | the `orc onboarding` walkthrough, one section at a time | — |
473
+ | Experiment | every lane with a copy button; opens a Claude session in a terminal | — |
474
+ | Maintenance | `update`, `update --prune`, `doctor --fix`, `upgrade` | preview, then apply |
475
+
476
+ - **The panel *is* the CLI.** It reads `orc <command> --json` and shells the real
477
+ command for every write, so it cannot drift from the CLI — it has no second
478
+ copy of anything.
479
+ - **A free action gets a button. A paid action gets a command to copy.**
480
+ - **Nothing is automatic**, and a prune names **every** file. A count is not
481
+ consent.
482
+ - **Treated as a write surface**: loopback only, a fresh token per launch, a
483
+ Host-header check against DNS rebinding, no CORS, POST-only mutations.
484
+ - **Project-scoped, no `--global` config.** If a global install exists that could
485
+ win skill resolution, every page carries a banner. It reports that; it never
486
+ edits global config.
487
+ - **English and Indonesian.** Only the panel's own words are translated — config
488
+ keys, model ids, paths, commands and doctor messages are printed exactly as the
489
+ CLI wrote them, because a translated config key is a key that does not exist.
490
+
491
+ Zero dependencies, zero build step: `node:http`, plain JavaScript, hand-written
492
+ CSS.
493
+
494
+ ---
495
+
496
+ ## Running part of the ladder somewhere else — `orc extra`
497
+
498
+ **The orchestrator is always Claude.** What Extra changes is *who executes a
499
+ slice*: a score band you own, or one of six named positions, can point at
500
+ DeepSeek, GLM, Kimi, MiniMax, Qwen, a local Ollama, or a coding CLI you already
501
+ have signed in (opencode, codex). Everything downstream — the smoke gate, the TDD
502
+ gate, the reviewer, the worktree-delta check — is engine-blind, so nothing learns
503
+ the work was foreign.
504
+
505
+ **Off by default, and it cannot be armed until something has actually answered.**
506
+
507
+ ```bash
508
+ orc extra providers # the shipped, dated catalog — providers, never models
509
+ orc extra tools # local CLIs: absent · outdated · unauthenticated · ready
510
+ orc extra add ds --provider deepseek --engine api --env-key DEEPSEEK_API_KEY
511
+ orc extra ping ds # the connection gate: a ladder, and nothing reads stronger than it is
512
+ orc extra models ds --test <id> # a LISTED model can still be dead upstream
513
+ orc extra health ds --model <id> # …and a working model is not one that FINISHES
514
+ orc extra route set 40-55 ds/deepseek-chat # a score band
515
+ orc extra role set doc-writer ds/deepseek-chat # or a named position
516
+ orc config set extra_enabled true
517
+ ```
518
+
519
+ - **The catalog ships providers and never models.** A shipped model id is wrong
520
+ within a quarter and wrong *silently* — a 404 mid-wave. `orc extra ping` reads
521
+ the live list and caches it; nothing invents a name. Same for price: a cost
522
+ figure ORC did not price itself is never printed, it reads as an em dash.
523
+ - **Every armed run says so before wave 1.** Routing work off Claude silently is
524
+ the failure this whole subsystem is shaped around.
525
+ - **Two hard hold-backs**: a task with a cited `risk[]` (auth, money, migration,
526
+ security, concurrency, data-integrity) stays on Claude unless you say
527
+ otherwise, and a `/orc-boundary` REFUSE area holds even in `warn`.
528
+ - **A foreign return is foreign input.** It is the only foreign class that edits
529
+ your worktree, so what it says it did is a *claim*, checked against the tree.
530
+ - **Your key never reaches a command line.** It travels on stdin into an
531
+ encrypted vault, or it stays in an environment variable, or the tool holds its
532
+ own — and the passphrase is a **deadline**, not a second factor.
533
+ - **Six positions for the lanes that pin an agent instead of scoring a task**:
534
+ `quick-executor` · `fast-executor` · `doc-writer` · `doc-checker` ·
535
+ `wiki-scanner-deep` · `wiki-scanner-light`. A position with no row keeps its
536
+ slot and reads as its pinned Claude agent — "I left the checker on Claude on
537
+ purpose" and "there is no checker" must never look the same.
538
+
539
+ **When a foreign worker fails, it is a position and not a blank page.** ORC
540
+ journals the baseline *before the first byte leaves the machine*, so a worker cut
541
+ off mid-write is **reconciled and resumed** — never re-dispatched from scratch
542
+ onto a file that is already two-thirds written.
543
+
544
+ - **`extra_stall_s` (default 180)** stops a worker that has produced nothing for
545
+ that long. It is reset by observable progress — the worker's stream, its
546
+ stderr, or a declared file that changed on disk — so it never fires on one that
547
+ is merely slow. `stalled` is retryable, which is what makes the resume ORC's
548
+ own spelling of typing `continue`.
549
+ - **`extra_fallback_agent` (default `band`)** decides who picks the task up.
550
+ `ask` stops and puts the menu to you; any installed agent name pins one. It
551
+ changes *who*, never the score, the declared files or the acceptance criteria.
552
+ - **Every dispatch writes its own spend record**, so a cost report never depends
553
+ on a run remembering to narrate what it spent. `orc extra stats` merges the
554
+ spend log, the traces and saved returns, and always says how many rows came
555
+ from each.
556
+
557
+ **`/orc-quick` is inert here** and announces it — that lane asks which agent
558
+ before every dispatch, so no setting may pre-answer it. **`/orc-challenge` never
559
+ routes foreign**: swapping a lens for a different model does not make the lane
560
+ cheaper, it changes what is being measured.
561
+
562
+ **The whole subsystem, with every command and key:
563
+ [guides/extra-models.md](guides/extra-models.md).**
564
+
565
+ ---
566
+
567
+ ## How the model is picked
568
+
569
+ Each task is scored 0–100 by **arithmetic, not judgement**: the planner reports
570
+ facets (breadth, novelty, logic, test surface, cited risk, uncertainty) and a
571
+ fixed published formula turns them into a number. A cited risk forces a floor of
572
+ 70. The score maps through a published table to a **named, model-pinned agent**,
573
+ so what ran is inspectable rather than requested in prose.
574
+
575
+ > **The rule that catches everyone:** a subagent's model can never be higher than
576
+ > your main session's. Run your session on Opus 5.
577
+
578
+ **Full detail — the bands, `opus5_only`, and the tier guard `orc init` installs:
579
+ [guides/model-selection.md](guides/model-selection.md).**
580
+
581
+ ---
582
+
583
+ ## Configuration
584
+
585
+ Settings are edited with the **`orc config` CLI** — deterministic terminal I/O,
586
+ so it costs **zero model tokens**.
587
+
588
+ ```bash
589
+ orc config # interactive menu
590
+ orc config list # the effective config
591
+ orc config recommend # read this repo, suggest ONE profile, with reasons
592
+ orc config profile paranoid
593
+ ```
594
+
595
+ Your changes live in `.claude/orc.config.yaml`, which `orc update` never
596
+ clobbers. `orc ui` ▸ Settings edits the same keys through the same validators.
597
+
598
+ **Every key, with defaults and what each one does:
599
+ [guides/configuration.md](guides/configuration.md).**
600
+
601
+ ---
602
+
603
+ ## What is inside the package
604
+
605
+ ```
606
+ templates/
607
+ ├── skills/ 31 skill folders, 38 SKILL.md files (a lane may ship subskills) —
608
+ │ the lanes above, plus the ones with no command of their own:
609
+ │ context-combiner, orc-advisor, orc-judge, orc-analyze-mini,
610
+ │ and _shared/ (cross-lane contract prose)
611
+ ├── commands/ 29 slash commands
612
+ ├── hooks/ effort guard (PreToolUse) · statusline warning · behavior trace
613
+ └── agents/ 48 model-pinned subagents + MODEL-MAPPING.md
614
+ bin/cli.js installer, config editor, flow composer, run-state reader, and
615
+ the deterministic half of every lane. Every read speaks --json
616
+ bin/graph*.js the code graph: store, extraction, resolution + its cache, signals, notes
617
+ bin/webui/ `orc ui` — the local control panel: css/ + js/ + i18n/<lang>/ +
618
+ fixtures/, one file per layer and per panel. Zero deps, no build step
619
+ bin/mockrun-catalog.js the mocked-run catalogue (derived from the files on disk)
620
+ mock-run/ the mocked runs themselves — start at INDEX.md
621
+ guides/ configuration · model selection · documents · knowledge reads · other AI models
622
+ ```
623
+
624
+ The `orc` skill is a thin **spine**: it loads a reference or a subskill only when
625
+ that phase actually runs, so a small task never pays for the machinery of a big
626
+ one.
627
+
628
+ ---
629
+
630
+ ## Longer guides
631
+
632
+ Some lanes ship a full how-to next to the skill, in plain language:
633
+
634
+ | Guide | Read it when |
635
+ |---|---|
636
+ | [ORC-QUICK](templates/skills/orc-quick/README.md) | you want the quick lane's complete worked runs |
637
+ | [ORC-DIY](templates/skills/orc-diy/README.md) | you want to compose your own lane |
638
+ | [ORC-WIKI](templates/skills/orc-wiki/README.md) | you want the knowledge base, and cross-repo crosslink setup |
639
+ | [ORC-PR-SETUP](templates/skills/orc-pr-setup/README.md) | you want to split a big change into stacked PRs |
640
+ | [ORC-PR-DRIVER](templates/skills/orc-pr-driver/README.md) | you have a stack plan and want to build, submit and merge it |
641
+ | [Rules](guides/rules.md) | you want the 65 anti-slop rules, the precedence ladder and the lint |
642
+ | [Configuration](guides/configuration.md) · [Model selection](guides/model-selection.md) | you want every key, or the scoring bands |
643
+ | [Other AI models](guides/extra-models.md) | you want part of the ladder to run somewhere other than Claude |
644
+
645
+ Every skill also ships its own `SKILL.md` and `references/`. The guides above are
646
+ the human-facing versions.
647
+
648
+ ---
649
+
650
+ ## Eval status
651
+
652
+ The constellation is graded **end to end**, not file by file: one executable
653
+ spec per lane, run against a sandboxed Express fixture, graded from on-disk
654
+ evidence — behavior traces, run folders and artifacts.
655
+
656
+ The last full round was the **30-eval suite against the v0.34.0 payload**: 25
657
+ filled result files and 38 trace files, with 5 evals never graded and 2 only
658
+ partly graded — all named in the report. Everything found there was either fixed
659
+ in a later release or is still listed. Read it as a record of that round, not as
660
+ a current audit: [EVAL-REPORT.md](EVAL-REPORT.md).
661
+
662
+ ---
663
+
664
+ ## Design principles
665
+
666
+ - **Never implement at the top.** The orchestrator coordinates; scored subagents
667
+ do the work.
668
+ - **Bound the scope before parallelizing.** A misunderstanding is cheap to fix
669
+ before five agents build on it.
670
+ - **Disk over memory.** Every pause is a clean resume point.
671
+ - **Pinned, inspectable models.** Named agents, models in frontmatter.
672
+ - **Your codebase wins.** Learned patterns defer to your project; only security
673
+ and correctness invariants are non-negotiable.
674
+ - **Additive knowledge.** The wiki improves planning when it is there and costs
675
+ nothing when it is not.
676
+ - **Say what you do not know.** `UNCHECKABLE`, `no card`, `insufficient history`
677
+ are real answers. A confident guess is worse than an honest gap.
678
+
679
+ ---
680
+
681
+ ## Changelog
682
+
683
+ **Full history: [CHANGELOG.md](CHANGELOG.md)** — or `orc changelog`, which prints
684
+ only what is newer than the version you have.
685
+
686
+ ### v1.8.1 - the guard that only failed on Windows _(2026-09-16)_
687
+
688
+ `npm publish` could not run on Windows. The `prepack` guard reported nine
689
+ drifted executor agents, and `git status` reported no change at all.
690
+
691
+ **The cause was a line ending, not content.** `.gitattributes` says
692
+ `* text=auto`, so git stores the generated executor agents with LF and checks
693
+ them out native — a Windows clone holds CRLF. The generator read the template
694
+ as it is on disk, but injected the `effort:` frontmatter line with a hardcoded
695
+ LF. `bin/build-agents.js` now takes its line ending from the template, and
696
+ `--check` compares LF-normalized text, so the guard gives the same result in
697
+ either worktree. A test in `test/payload.test.js` holds the rule.
698
+
699
+ One test carried the same fault. `npm test` also runs on `prepack`, and the
700
+ statusline graph-component test sliced a hook's source to the next `\n}\n` — a
701
+ needle a CRLF checkout never contains. It now normalizes the source first.
702
+
703
+ No shipped payload changed. The generated agent files are byte-identical.
704
+
705
+ <details>
706
+ <summary><strong>Earlier releases</strong> — 117 of them, titles only. Full text in <a href="CHANGELOG.md">CHANGELOG.md</a>.</summary>
707
+
708
+ - **v1.8.0** — the code graph: a map of the code that stays fresh · _2026-09-16_
709
+ - **v1.7.1** — the rules card now reaches the agent · _2026-09-14_
710
+ - **v1.7.0** — the rules that keep the slop out · _2026-09-13_
711
+ - **v1.6.0** — the rule that can finally say no · _2026-09-07_
712
+ - **v1.5.0** — the lane that runs the test · _2026-09-07_
713
+ - **v1.4.2** — the panel that stops reloading, and the fields you could not read back · _2026-09-05_
714
+ - **v1.4.1** — the board you can actually use · _2026-09-05_
715
+ - **v1.4.0** — the agent panel, and the number that was missing · _2026-09-04_
716
+ - **v1.3.0** — build your own status line · _2026-09-04_
717
+ - **v1.2.1** — the status line says what ORC is doing · _2026-09-04_
718
+ - **v1.2.0** — a retry that cloned the agent, and a window you can watch empty · _2026-09-04_
719
+ - **v1.1.0** — the wait, and a window ORC can finally see · _2026-08-31_
720
+ - **v1.0.0** — config, phases and calls stop being prose · _2026-08-30_
721
+ - **v0.56.1** — a worker that is alive and doing nothing · _2026-08-28_
722
+ - **v0.56.0** — a rename moved the command, and nobody could reach the fix · _2026-08-27_
723
+ - **v0.55.2** — a gate that is never probed is a gate that is always off · _2026-08-27_
724
+ - **v0.55.1** — ORC is on npm · _2026-08-27_
725
+ - **v0.55.0** — a score is what a band needs, and four lanes do not have one · _2026-08-26_
726
+ - **v0.54.0** — a failed dispatch is a POSITION, not a blank page · _2026-08-25_
727
+ - **v0.53.4** — the reload that dropped its own token · _2026-08-24_
728
+ - **v0.53.3** — the key it never sent · _2026-08-24_
729
+ - **v0.53.2** — the cost that was paid and never written down · _2026-08-24_
730
+ - **v0.53.1** — "up to date" now names what it checked · _2026-08-23_
731
+ - **v0.53.0** — the schema the provider rejected, and a routing table you can read · _2026-08-23_
732
+ - **v0.52.0** — the connection that could not be used, and the routing nobody could see · _2026-08-23_
733
+ - **v0.51.0** — the tools you already have, and a connection that proves itself · _2026-08-22_
734
+ - **v0.50.0** — work that runs somewhere else · _2026-08-22_
735
+ - **v0.49.5** — house rules are text, and the hand-back writes itself · _2026-08-21_
736
+ - **v0.49.4** — the panel was being handed half an answer · _2026-08-20_
737
+ - **v0.49.3** — coverage on a large repo · _2026-08-19_
738
+ - **v0.49.2** — house rules, a run map before you pay, and three defects · _2026-08-18_
739
+ - **v0.49.1** — the challenge council, and a `--json` that stops throwing things away · _2026-08-18_
740
+ - **v0.49.0** — the document is a folder, and the file is a build artifact · _2026-08-17_
741
+ - **v0.48.1** — one file per thing, and a document that can be finished · _2026-08-16_
742
+ - **v0.48.0** — a document long enough to end a session, written anyway · _2026-08-13_
743
+ - **v0.47.0** — the lane that refuses to produce · _2026-08-12_
744
+ - **v0.46.1** — see a lane run before you pay for one · _2026-08-12_
745
+ - **v0.46.0** — a lane that remembers, a lane that declines, and a lane that measures · _2026-08-10_
746
+ - **v0.45.0** — `/orc-brainstorm`: for when you do not have the idea yet · _2026-08-10_
747
+ - **v0.44.1** — apply when you say so, and a spotlight that survives a banner · _2026-08-09_
748
+ - **v0.44.0** — the panel stops making you type what it already knows · _2026-08-09_
749
+ - **v0.43.7** — the flow you can see, and a boundary you can read · _2026-08-09_
750
+ - **v0.43.6** — `orc ui` in two languages, and panels that point at the right page · _2026-08-08_
751
+ - **v0.43.5** — the update check works, and the UI teaches itself · _2026-08-08_
752
+ - **v0.43.4** — a warning that finally clears, an Experiment panel, crosslink from the UI · _2026-08-08_
753
+ - **v0.43.3** — `orc ui`: it tells you about updates, and 36 keys stop being a wall · _2026-08-08_
754
+ - **v0.43.2** — `orc ui`: boxes stop colliding, because the container owns the gap · _2026-08-08_
755
+ - **v0.43.1** — the panel's stylesheet and script actually reach the browser · _2026-08-08_
756
+ - **v0.43.0** — `orc ui`: a control panel for everything that is not ai · _2026-08-08_
757
+ - **v0.42.0** — Say what you mean, see what it costs, find your way back · _2026-08-08_
758
+ - **v0.41.0** — A wiki that can tell you it is fresh, and TDD only where it can fail · _2026-08-06_
759
+ - **v0.40.0** — Gotchas: repair memory that outlives the run · _2026-08-06_
760
+ - **v0.39.0** — The read ladder, and foreign input that is evidence rather than instruction · _2026-08-06_
761
+ - **v0.38.1** — `orc doctor --json` + handoff carry-over that says what is re-derived · _2026-08-06_
762
+ - **v0.38.0** — `/orc-quick`: the quick lane, and the gate no config can collapse · _2026-08-05_
763
+ - **v0.37.0** — Stacked pull requests: a measured ship gate + two standalone lanes · _2026-08-03_
764
+ - **v0.36.0** — `opus5_only`: one model for every role, not just executors · _2026-08-02_
765
+ - **v0.35.0** — `opus5_executor_only`: one model, effort as the cost dial · _2026-08-02_
766
+ - **v0.34.8** — `orc pattern status` rejects a language key the payload has never heard of · _2026-08-01_
767
+ - **v0.34.7** — DIY: a usable status contract, and compile docs that match the compiler · _2026-08-01_
768
+ - **v0.34.6** — Analyze: the evidence gate now covers the rows a good analysis produces · _2026-08-01_
769
+ - **v0.34.5** — Wiki: stop losing tags silently, let a delta clear its own delta · _2026-08-01_
770
+ - **v0.34.4** — Planner: scorable facets, and TDD rules scoped to reality · _2026-08-01_
771
+ - **v0.34.3** — Slice boundary: the worktree, not the editor · _2026-08-01_
772
+ - **v0.34.2** — Trace subsystem: the pointer clobber, and a writer contract that holds · _2026-08-01_
773
+ - **v0.34.1** — Install integrity: run state survives `orc update` · _2026-08-01_
774
+ - **v0.34.0** — Opus 5: top scoring band, every core role, medium-effort session tier · _2026-07-25_
775
+ - **v0.33.0** — Knowledge deepening + verification revamp · _2026-07-25_
776
+ - **v0.32.0** — Trace revamp: narration is dispatched, not remembered · _2026-07-24_
777
+ - **v0.31.0** — Execution-integrity revamp: plan handoff, attributable traces, facet scoring · _2026-07-23_
778
+ - **v0.30.0** — Scoring revamp, Fable 5 role override, tier-aware guards, `orc onboarding` · _2026-07-23_
779
+ - **v0.29.0** — Drift-prevention hardening: install manifest + prune, `orc doctor`, a real test suite · _2026-07-22_
780
+ - **v0.28.1** — Defect fixes: package encoding, trace event routing, count/doc drift · _2026-07-22_
781
+ - **v0.28.0** — Run integrity: rich full-lane traces, deterministic wave stop, visible knowledge gates · _2026-07-21_
782
+ - **v0.27.0** — `/orc-poly`: plan one change across two-or-more repos without drift · _2026-07-20_
783
+ - **v0.26.0** — Test-gen output pinned to a visible `test-generator/<change-slug>/` deliverable · _2026-07-19_
784
+ - **v0.25.1** — Eval report: the full 17-lane suite graded against the v0.25.0 payload · _2026-07-18_
785
+ - **v0.25.0** — Deterministic artifact detection: a generated wiki/pattern is never missed · _2026-07-18_
786
+ - **v0.24.0** — Crosslink fused into wiki generation: always-on, per-scan-task, never wiped · _2026-07-18_
787
+ - **v0.23.0** — Trace fix: SPAWN restored on the `Agent` tool, stale runs rotate to fresh files · _2026-07-18_
788
+ - **v0.22.0** — `/orc-learn`: per-feature onboarding docs — learning.md + knowledge.md, wiki-deep, git-ignored · _2026-07-17_
789
+ - **v0.21.0** — Statusline shows live subscription usage: 5h ↔ weekly, official numbers · _2026-07-16_
790
+ - **v0.20.0** — One source of truth: generated executor agents + shared cross-lane contracts · _2026-07-16_
791
+ - **v0.19.0** — Thin spines: skill compaction, budget lint, and a trace that logs every phase · _2026-07-16_
792
+ - **v0.18.0** — `orc wiki sync`: the wiki registers itself — a paused scan is no longer an invisible wiki · _2026-07-15_
793
+ - **v0.17.3** — Trace the wiki consult: Phase 1 now logs whether the run grounded in the wiki (and if it was stale) · _2026-07-14_
794
+ - **v0.17.2** — Behavior-trace logging is permanent + the trace folder is now created deterministically · _2026-07-14_
795
+ - **v0.17.1** — Complete cross-repo crosslink setup guide in the orc-wiki README · _2026-07-14_
796
+ - **v0.17.0** — `orc crosslink`: cross-repo wiki references — advisory boundary contracts · _2026-07-14_
797
+ - **v0.16.1** — Interactive `orc diy` composer + numbered picks in `orc config` · _2026-07-14_
798
+ - **v0.16.0** — `/orc-diy`: build your own lane — CLI-composed flow, compiled, hard-gated · _2026-07-14_
799
+ - **v0.15.0** — Wiki v2: evidence-anchored docs · per-file staleness registry · integrity gate · _2026-07-14_
800
+ - **v0.14.0** — Postgres data-access playbook: cross-cutting query grounding · _2026-07-13_
801
+ - **v0.13.0** — `/orc-claude`: local CLAUDE.md builder — fenced sections, fingerprint refresh, zero questions · _2026-07-12_
802
+ - **v0.12.0** — Lossless context-combiner: conservation gate · overlap taxonomy · evidence freshness · _2026-07-12_
803
+ - **v0.11.0** — `/orc-fast`: knowledge-gated speed lane + wiki freshness infrastructure · _2026-07-12_
804
+ - **v0.10.1** — README: a fuller "Why ORC exists" · _2026-07-12_
805
+ - **v0.10.0** — `/orc-ultra`: max-effort advisor + three judgment gates for ultra-complex work · _2026-07-12_
806
+ - **v0.9.0** — Trust-but-verify the analyst→planner chain: quote-anchored evidence · coverage gate · anchored judgment · _2026-07-12_
807
+ - **v0.8.1** — /orc-retro delivers upstream: PR/issue to the ORC repo, channel-gated · _2026-07-12_
808
+ - **v0.8.0** — Close the loop: grounded intake · scoring anchors · OUTCOME marker · /orc-retro trace miner · eval harness · _2026-07-12_
809
+ - **v0.7.0** — Evidence everywhere: grounded plans · verbatim proof · anchored findings · contract lint · trace fixes · _2026-07-12_
810
+ - **v0.6.0** — P0–P3 ladder · house rules · deep playbooks + wired gates · 3 new languages · FE rule packs · security pass · _2026-07-11_
811
+ - **v0.5.1** — Statusline false-degrade fix · _2026-07-11_
812
+ - v0.5.0 — Code-pattern findings: executors match your house style, invariants always enforced
813
+ - v0.4.5 — Rewrite weak worker descriptions (the real score lever)
814
+ - v0.4.4 — Act on external review: raise sub-70 workers, fix cross-spine paths
815
+ - v0.4.3 — `orc-analyze`: trim description under the 1024-char skill-spec limit
816
+ - v0.4.2 — External-review pass: worked examples + sharper mini-analyst activation
817
+ - v0.4.1 — `orc-mini`: faster, safer fast-lane — smoke gate, opt-in tests, trimmed ceremony
818
+ - v0.4.0 — Opt-in Phase 6.5 Test Authoring (writes test cases, never runs them)
819
+ - v0.3.0 — Opt-in behavior-trace logging + claimed-vs-actual model verification
820
+ - v0.2.4 — `orc-analyze`: gather anchored adjacent-scope context (non-actionable)
821
+ - v0.2.3 — Context Combiner: merge 2+ related analyses into one combined spec
822
+ - v0.2.2 — Config: enforce per-key override-first resolution
823
+ - v0.2.1 — Move config editing into the `orc config` CLI (zero-token); drop `/orc-config`
824
+ - v0.2.0 — Doc-optional evidence-backed analyst + deep mode
825
+
826
+ </details>
827
+
828
+ ## Requirements
829
+
830
+ - **Claude Code** — it reads the skills, commands and agents.
831
+ - **Node 18+** — for the installer only. The skills themselves have zero
832
+ dependencies.
833
+
834
+ ## License
835
+
836
+ MIT — the `license` field in `package.json` is the canonical statement.