@azure-id/orc 1.7.0 → 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.
- package/CHANGELOG.md +3649 -3339
- package/README-id.md +923 -844
- package/README.md +836 -860
- package/bin/build-agents.js +43 -27
- package/bin/cli.js +701 -3
- package/bin/graph-extract.js +927 -0
- package/bin/graph-notes.js +188 -0
- package/bin/graph-query.js +808 -0
- package/bin/graph-resolve.js +178 -0
- package/bin/graph-signals.js +277 -0
- package/bin/graph.js +605 -0
- package/bin/verify-contracts.js +4669 -4527
- package/bin/verify-package.js +626 -616
- package/bin/webui/api.js +1419 -1414
- package/bin/webui/fixtures/index.js +579 -576
- package/bin/webui/fixtures/knowledge.js +316 -291
- package/bin/webui/i18n/en/knowledge.json +167 -151
- package/bin/webui/i18n/en/overview.json +101 -100
- package/bin/webui/i18n/id/knowledge.json +167 -151
- package/bin/webui/i18n/id/overview.json +101 -100
- package/bin/webui/js/panels/knowledge.js +1065 -1006
- package/bin/webui/js/panels/overview.js +492 -488
- package/package.json +39 -39
- package/templates/agents/MODEL-MAPPING.md +163 -158
- package/templates/agents/orc-executor-haiku-4-5.md +133 -113
- package/templates/agents/orc-executor-opus-4-7-high.md +134 -114
- package/templates/agents/orc-executor-opus-4-7-med.md +134 -114
- package/templates/agents/orc-executor-opus-4-8-high.md +134 -114
- package/templates/agents/orc-executor-opus-5-high.md +134 -114
- package/templates/agents/orc-executor-opus-5-low.md +134 -114
- package/templates/agents/orc-executor-opus-5-med.md +134 -114
- package/templates/agents/orc-executor-sonnet-4-6-high.md +134 -114
- package/templates/agents/orc-executor-sonnet-4-6-med.md +134 -114
- package/templates/agents/orc-executor-sonnet-5-high.md +134 -114
- package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +86 -0
- package/templates/hooks/README.md +444 -396
- package/templates/hooks/orc-graph-hook.js +336 -0
- package/templates/hooks/orc-statusline-render.js +922 -921
- package/templates/hooks/orc-statusline.js +1596 -1545
- package/templates/skills/_shared/README.md +4 -0
- package/templates/skills/_shared/code-graph.md +220 -0
- package/templates/skills/_shared/extra-dispatch.md +1 -1
- package/templates/skills/_shared/opus5-only.md +4 -0
- package/templates/skills/_shared/phases/execution.md +166 -145
- package/templates/skills/_shared/phases/planning.md +142 -135
- package/templates/skills/_shared/phases/preflight.md +132 -118
- package/templates/skills/_shared/phases/review.md +63 -53
- package/templates/skills/_shared/phases/rules.md +5 -0
- package/templates/skills/_shared/phases/ship.md +96 -88
- package/templates/skills/_shared/phases/trace.md +6 -0
- package/templates/skills/_shared/phases/wiki-consult.md +194 -189
- package/templates/skills/_shared/read-ladder.md +124 -102
- package/templates/skills/_shared/return-validation.md +259 -250
- package/templates/skills/orc/SKILL.md +255 -254
- package/templates/skills/orc/references/preflight-report.md +6 -0
- package/templates/skills/orc/subskills/orc-execution/SKILL.md +2 -1
- package/templates/skills/orc/subskills/orc-execution/core.md +9 -1
- package/templates/skills/orc-diy/references/flow-schema.md +101 -100
- package/templates/skills/orc-fast/SKILL.md +236 -229
- package/templates/skills/orc-mini/SKILL.md +267 -259
- package/templates/skills/orc-quick/SKILL.md +378 -360
- package/templates/skills/orc-quick/references/dispatch-gate.md +6 -0
- package/templates/skills/orc-wiki/references/staleness.md +294 -288
package/README.md
CHANGED
|
@@ -1,860 +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
|
-

|
|
10
|
-

|
|
12
|
-

|
|
13
|
-

|
|
14
|
-

|
|
15
|
-

|
|
16
|
-
|
|
17
|
-
**Latest: v1.
|
|
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
|
-
##
|
|
385
|
-
|
|
386
|
-
A local
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
orc
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
- **
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
**
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
with
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
**
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
-
|
|
712
|
-
|
|
713
|
-
-
|
|
714
|
-
|
|
715
|
-
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
- **
|
|
736
|
-
- **
|
|
737
|
-
- **
|
|
738
|
-
- **
|
|
739
|
-
- **
|
|
740
|
-
- **
|
|
741
|
-
- **
|
|
742
|
-
- **
|
|
743
|
-
- **
|
|
744
|
-
- **
|
|
745
|
-
- **v0.
|
|
746
|
-
- **v0.
|
|
747
|
-
- **v0.
|
|
748
|
-
- **v0.
|
|
749
|
-
- **v0.
|
|
750
|
-
- **v0.
|
|
751
|
-
- **v0.
|
|
752
|
-
- **v0.
|
|
753
|
-
- **v0.
|
|
754
|
-
- **v0.
|
|
755
|
-
- **v0.
|
|
756
|
-
- **v0.
|
|
757
|
-
- **v0.
|
|
758
|
-
- **v0.
|
|
759
|
-
- **v0.
|
|
760
|
-
- **v0.
|
|
761
|
-
- **v0.
|
|
762
|
-
- **v0.
|
|
763
|
-
- **v0.
|
|
764
|
-
- **v0.
|
|
765
|
-
- **v0.
|
|
766
|
-
- **v0.
|
|
767
|
-
- **v0.
|
|
768
|
-
- **v0.
|
|
769
|
-
- **v0.
|
|
770
|
-
- **v0.
|
|
771
|
-
- **v0.
|
|
772
|
-
- **v0.
|
|
773
|
-
- **v0.
|
|
774
|
-
- **v0.
|
|
775
|
-
- **v0.
|
|
776
|
-
- **v0.
|
|
777
|
-
- **v0.
|
|
778
|
-
- **v0.
|
|
779
|
-
- **v0.
|
|
780
|
-
- **v0.
|
|
781
|
-
- **v0.
|
|
782
|
-
- **v0.
|
|
783
|
-
- **v0.
|
|
784
|
-
- **v0.
|
|
785
|
-
- **v0.
|
|
786
|
-
- **v0.
|
|
787
|
-
- **v0.
|
|
788
|
-
- **v0.
|
|
789
|
-
- **v0.
|
|
790
|
-
- **v0.
|
|
791
|
-
- **v0.
|
|
792
|
-
- **v0.
|
|
793
|
-
- **v0.
|
|
794
|
-
- **v0.
|
|
795
|
-
- **v0.
|
|
796
|
-
- **v0.
|
|
797
|
-
- **v0.
|
|
798
|
-
- **v0.
|
|
799
|
-
- **v0.
|
|
800
|
-
- **v0.
|
|
801
|
-
- **v0.
|
|
802
|
-
- **v0.
|
|
803
|
-
- **v0.
|
|
804
|
-
- **v0.
|
|
805
|
-
- **v0.
|
|
806
|
-
- **v0.
|
|
807
|
-
- **v0.
|
|
808
|
-
- **v0.
|
|
809
|
-
- **v0.
|
|
810
|
-
- **v0.
|
|
811
|
-
- **v0.
|
|
812
|
-
-
|
|
813
|
-
-
|
|
814
|
-
-
|
|
815
|
-
-
|
|
816
|
-
-
|
|
817
|
-
-
|
|
818
|
-
-
|
|
819
|
-
-
|
|
820
|
-
-
|
|
821
|
-
-
|
|
822
|
-
-
|
|
823
|
-
-
|
|
824
|
-
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
- **
|
|
831
|
-
- **
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
- v0.4.5 — Rewrite weak worker descriptions (the real score lever)
|
|
838
|
-
- v0.4.4 — Act on external review: raise sub-70 workers, fix cross-spine paths
|
|
839
|
-
- v0.4.3 — `orc-analyze`: trim description under the 1024-char skill-spec limit
|
|
840
|
-
- v0.4.2 — External-review pass: worked examples + sharper mini-analyst activation
|
|
841
|
-
- v0.4.1 — `orc-mini`: faster, safer fast-lane — smoke gate, opt-in tests, trimmed ceremony
|
|
842
|
-
- v0.4.0 — Opt-in Phase 6.5 Test Authoring (writes test cases, never runs them)
|
|
843
|
-
- v0.3.0 — Opt-in behavior-trace logging + claimed-vs-actual model verification
|
|
844
|
-
- v0.2.4 — `orc-analyze`: gather anchored adjacent-scope context (non-actionable)
|
|
845
|
-
- v0.2.3 — Context Combiner: merge 2+ related analyses into one combined spec
|
|
846
|
-
- v0.2.2 — Config: enforce per-key override-first resolution
|
|
847
|
-
- v0.2.1 — Move config editing into the `orc config` CLI (zero-token); drop `/orc-config`
|
|
848
|
-
- v0.2.0 — Doc-optional evidence-backed analyst + deep mode
|
|
849
|
-
|
|
850
|
-
</details>
|
|
851
|
-
|
|
852
|
-
## Requirements
|
|
853
|
-
|
|
854
|
-
- **Claude Code** — it reads the skills, commands and agents.
|
|
855
|
-
- **Node 18+** — for the installer only. The skills themselves have zero
|
|
856
|
-
dependencies.
|
|
857
|
-
|
|
858
|
-
## License
|
|
859
|
-
|
|
860
|
-
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
|
+

|
|
10
|
+

|
|
11
|
+

|
|
12
|
+

|
|
13
|
+

|
|
14
|
+

|
|
15
|
+

|
|
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.
|