@orkestrel/scaffold 0.0.97 → 0.0.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/agents/skills/orkestrel-dispatch/scripts/bench.js +1 -1
  2. package/dist/bin/main.js +2 -2
  3. package/dist/bin/main.js.map +1 -1
  4. package/dist/host/agents/orchestration.md +29 -26
  5. package/dist/host/agents/skills/orkestrel-dispatch/scripts/bench.ts +1 -1
  6. package/dist/host/agents/skills/orkestrel-publish/references/wave.md +1 -2
  7. package/dist/host/agents/transports/claude-cli.md +1 -1
  8. package/dist/host/agents/transports/cursor.md +4 -4
  9. package/dist/host/claude/AGENTS.md +10 -7
  10. package/dist/host/claude/agents/analyst.md +4 -4
  11. package/dist/host/claude/agents/astra.md +4 -4
  12. package/dist/host/claude/agents/builder.md +4 -4
  13. package/dist/host/claude/agents/checker.md +4 -4
  14. package/dist/host/claude/agents/distiller.md +4 -4
  15. package/dist/host/claude/agents/grok.md +4 -4
  16. package/dist/host/claude/agents/opus.md +1 -1
  17. package/dist/host/claude/agents/orkestrel.md +2 -2
  18. package/dist/host/claude/agents/planner.md +1 -1
  19. package/dist/host/claude/agents/researcher.md +4 -4
  20. package/dist/host/claude/agents/reviewer.md +1 -1
  21. package/dist/host/claude/agents/scout.md +4 -4
  22. package/dist/host/claude/agents/verifier.md +4 -4
  23. package/dist/host/claude/rules/styles.md +2 -1
  24. package/dist/host/claude/settings.json +5 -2
  25. package/dist/host/codex/agents/builder.toml +6 -6
  26. package/dist/host/guides/scaffold.md +9 -3
  27. package/dist/host/manifest.json +36 -24
  28. package/dist/host/scripts/browsers.sh +54 -0
  29. package/dist/host/scripts/codex.sh +0 -0
  30. package/dist/host/scripts/cursor.sh +0 -0
  31. package/dist/host/scripts/deps.sh +0 -0
  32. package/dist/host/scripts/npm.sh +111 -0
  33. package/dist/host/scripts/ollama.sh +0 -0
  34. package/dist/src/core/index.cjs +37 -9
  35. package/dist/src/core/index.cjs.map +1 -1
  36. package/dist/src/core/index.d.cts +20 -0
  37. package/dist/src/core/index.d.ts +20 -0
  38. package/dist/src/core/index.js +37 -10
  39. package/dist/src/core/index.js.map +1 -1
  40. package/package.json +2 -2
@@ -8,32 +8,35 @@ Read in order: the user's instruction; `AGENTS.md` and the rules it scopes to yo
8
8
 
9
9
  ## Engines
10
10
 
11
- | Engine | Job | Posture |
12
- | --------------------------------- | ----------------------------------------------------- | -------------------------------------------------------- |
13
- | Cursor Grok | absorb, distill, scout, bounded research | read-only; returns evidence, never decisions |
14
- | Opus 5.5 | subjective design, design-fit review, implementation | proposes, audits, implements; never accepts its own work |
15
- | GPT-6 Astra | objective analysis, correctness audit, implementation | proposes, audits, implements; never accepts its own work |
16
- | Sonnet 5.5, GPT-6 Sol, GPT-6 Luna | mechanical units, gates, conformance, locating | executes a fully specified brief |
17
-
18
- The harness's own engine orchestrates: Opus 5.5 in Claude Code, Astra in Codex, Grok in Cursor. The Orchestrator owns the plan, every decision, integration, and acceptance. When the size gate names a review, the review runs on an engine that did not write the work.
11
+ | Engine | Job | Posture |
12
+ | --------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
13
+ | Claude Fable 5.1 | orchestration in Claude Code: the plan, every decision, integration, acceptance | never dispatched: never a subagent, a bench, a fork, or a Workflow node |
14
+ | Cursor Grok | absorb, distill, scout, bounded research | read-only; returns evidence, never decisions |
15
+ | Claude Opus 5.5 | subjective design, design-fit review, implementation | proposes, audits, implements; never accepts its own work |
16
+ | GPT-6 Astra | objective analysis, correctness audit, implementation | proposes, audits, implements; never accepts its own work |
17
+ | Claude Sonnet 5.5 | bounded implementation of a closed shape, ecosystem reconciliation | executes a fully specified brief |
18
+ | Claude Haiku 5.5 | bench drivers, locating, bulk reading, bounded research, conformance, gates | executes a fully specified brief; edits no source |
19
+ | GPT-6 Sol, GPT-6 Luna | mechanical units, drivers, gates, conformance, locating, reading | executes a fully specified brief |
20
+
21
+ The harness's own engine orchestrates: Claude Fable 5.1 or Claude Opus 5.5 in Claude Code, GPT-6 Astra in Codex, Cursor Grok in Cursor. The Orchestrator owns the plan, every decision, integration, and acceptance. When the size gate names a review, the review runs on an engine that did not write the work.
19
22
 
20
23
  ## Roles
21
24
 
22
- | Role | Job | Claude | Codex |
23
- | ------------ | ------------------------------------------------------------------ | ------------- | ---------- |
24
- | `grok` | absorption and distillation on Cursor Grok | sonnet driver | sol driver |
25
- | `analyst` | objective design argument or correctness audit on Astra | sonnet driver | astra |
26
- | `astra` | objective, constraint-heavy implementation on Astra | sonnet driver | astra |
27
- | `planner` | subjective design on Opus | opus | sol driver |
28
- | `reviewer` | design-fit or correctness review on Opus | opus | sol driver |
29
- | `opus` | subjective implementation (API shape, naming, guide voice) on Opus | opus | sol driver |
30
- | `builder` | one fully specified taste-free unit, app layer included | sonnet | sol |
31
- | `checker` | mechanical conformance against criteria and rules | sonnet | luna |
32
- | `verifier` | gates and evidence commands, exit-code truth | sonnet | sol |
33
- | `scout` | locate files, symbols, seams | sonnet | luna |
34
- | `distiller` | bulk reading when the Cursor bench is dark | sonnet | luna |
35
- | `researcher` | primary-source research when the Cursor bench is dark | sonnet | luna |
36
- | `orkestrel` | ecosystem reconciliation over supplied evidence | sonnet | luna |
25
+ | Role | Job | Claude | Codex |
26
+ | ------------ | ------------------------------------------------------------------ | ------------ | ---------- |
27
+ | `grok` | absorption and distillation on Cursor Grok | haiku driver | sol driver |
28
+ | `analyst` | objective design argument or correctness audit on Astra | haiku driver | astra |
29
+ | `astra` | objective, constraint-heavy implementation on Astra | haiku driver | astra |
30
+ | `planner` | subjective design on Opus | opus | sol driver |
31
+ | `reviewer` | design-fit or correctness review on Opus | opus | sol driver |
32
+ | `opus` | subjective implementation (API shape, naming, guide voice) on Opus | opus | sol driver |
33
+ | `builder` | one bounded unit with a closed shape, app layer included | sonnet | sol |
34
+ | `checker` | mechanical conformance against criteria and rules | haiku | luna |
35
+ | `verifier` | gates and evidence commands, exit-code truth | haiku | sol |
36
+ | `scout` | locate files, symbols, seams | haiku | luna |
37
+ | `distiller` | bulk reading when the Cursor bench is dark | haiku | luna |
38
+ | `researcher` | primary-source research when the Cursor bench is dark | haiku | luna |
39
+ | `orkestrel` | ecosystem reconciliation over supplied evidence | sonnet | sol |
37
40
 
38
41
  - Name the role and its engine in every dispatch. Reach a role by its own name.
39
42
  - A driver launches another provider's CLI and returns the journal path and session id with the result. It never judges or implements. Refuse a bench result that carries no journal path and session id; it ran on the driver.
@@ -41,7 +44,7 @@ The harness's own engine orchestrates: Opus 5.5 in Claude Code, Astra in Codex,
41
44
 
42
45
  ## Routing
43
46
 
44
- - Route by judgment load. Objective, constraint-heavy, mechanical-precision work goes to `astra`. API shape, naming, and documentation voice go to `opus`. A unit whose correct implementations cannot differ goes to `builder`.
47
+ - Route by judgment load. Objective, constraint-heavy, mechanical-precision work goes to `astra`. API shape, naming, and documentation voice go to `opus`. A bounded unit whose brief or types fix its names, API, and architecture goes to `builder`, whatever its private lines; a unit that spans packages or leaves one of those open goes to `astra` or `opus`.
45
48
  - Delegate bulk supporting reads to `grok`: terrain, prior art, diff sweeps, scattered sources. Read decision-bearing source yourself. Fall back to `distiller` or `researcher` only when the Cursor bench is dark, and record the fallback.
46
49
  - Route gates to `verifier`. A writer's self-reported gate is not evidence.
47
50
  - Work directly on a one-file change, a lookup, or a one-line fix. Dispatch when isolation, parallelism, a second engine, or a large read pays for the brief.
@@ -141,8 +144,8 @@ The Orchestrator triages: obvious correction → tighten and re-dispatch; missin
141
144
 
142
145
  ## Benches
143
146
 
144
- - Probe a bench with the dispatch skill's `scripts/bench.ts` before its first lane in a session. A version string or a login status is not liveness.
145
- - A dispatch that fails on auth, quota, model access, or network records the bench dark and re-plans the lane on the substitute engine: Astra dark → Opus holds the objective lane too; Opus dark in Codex → Astra holds the subjective lane too; Grok dark → Luna, then Sonnet. Record every substitution in the routing ledger.
147
+ - Probe a bench with the dispatch skill's `scripts/bench.ts` and the model its transport pins before its first lane in a session. A version string or a login status is not liveness.
148
+ - A dispatch that fails on auth, quota, model access, or network records the bench dark and re-plans the lane on the substitute engine: Astra dark → Opus holds the objective lane too; Opus dark in Codex → Astra holds the subjective lane too; Grok dark → the harness's native reader, `distiller` or `researcher`: Claude Haiku 5.5 in Claude Code, GPT-6 Luna in Codex; when Haiku refuses the read, re-dispatch the role with `model: sonnet`. Record every substitution in the routing ledger.
146
149
  - Never assign Grok a design or review lane in Claude Code or Codex.
147
150
  - Journal every bench run under `tmp/<bench>/` with its session id. Never commit a journal.
148
151
 
@@ -21,7 +21,7 @@ const SCRIPTS = dirname(fileURLToPath(import.meta.url))
21
21
  // The checkout runs the `.ts` sources and a built twin under `dist/agents` runs `.js` siblings.
22
22
  const EXTENSION = extname(fileURLToPath(import.meta.url))
23
23
  const PROMPT = 'Reply with the single word READY and nothing else.'
24
- const CURSOR_MODEL = process.env.CURSOR_GROK_MODEL ?? 'grok-4.7-high'
24
+ const CURSOR_MODEL = process.env.CURSOR_GROK_MODEL ?? 'grok-4.7-xhigh'
25
25
  const CODEX_MODEL = process.env.CODEX_ASTRA_MODEL ?? 'gpt-6-astra'
26
26
  const CLAUDE_MODEL = 'opus'
27
27
  const DEFAULT_CAP = 180
@@ -112,8 +112,7 @@ Prepare a published package's layer in this order, after the visit has ruled the
112
112
  4. **Run each package's own `prepublishOnly` script to green.**
113
113
  When the host npm is below the `MINIMUM_NPM_VERSION` floor a generated workspace declares in
114
114
  `devEngines`, prepend a local npm 11 install's `node_modules/.bin` to `PATH` for the visit and
115
- this script; a distribution proof that installs a generated workspace under an older npm fails
116
- `EBADDEVENGINES`.
115
+ this script.
117
116
  5. **Write the release commit and push before the window opens.** The preparation commit inside
118
117
  the visit is a different commit at a different moment.
119
118
 
@@ -8,7 +8,7 @@ Every Codex-side driver that carries a brief to the Claude Opus 5.5 bench follow
8
8
  node .agents/skills/orkestrel-dispatch/scripts/launch.ts --journal tmp/claude/<unit>.jsonl --errors tmp/claude/<unit>.err --cap <seconds> --status -- claude -p "Read tmp/claude/<unit>-brief.md and execute it exactly. Your final message is the report it specifies." --model opus --output-format stream-json --verbose --permission-mode <mode>
9
9
  ```
10
10
 
11
- - Pass the permission mode the route pins. Never substitute a fixed Claude model id; `opus` and `sonnet` are the aliases.
11
+ - Pass the permission mode the route pins and `--model opus` for every route. Never substitute another alias, `fable`, or a fixed Claude model id.
12
12
  - Write the brief to `tmp/claude/<unit>-brief.md` with `scripts/brief.ts --lane claude`; the prompt is a pointer to it. Briefs never travel as shell arguments.
13
13
  - Read the answer and the session id with `node .agents/skills/orkestrel-dispatch/scripts/result.ts --claude tmp/claude/<unit>.jsonl`. A unit with no journal ran on its driver's engine, however normal its answer reads.
14
14
  - A driver pinned `workspace-write` writes the brief itself. A driver pinned `read-only` writes nothing: it returns the brief text, its intended path, the resolved command, and the journal paths, and the Orchestrator writes and launches.
@@ -5,10 +5,10 @@ Every driver that carries a brief to the Cursor Grok bench follows this file. Ro
5
5
  ## Model
6
6
 
7
7
  ```text
8
- CURSOR_GROK_MODEL=grok-4.7-high
8
+ CURSOR_GROK_MODEL=grok-4.7-xhigh
9
9
  ```
10
10
 
11
- Read from `agent models` on 2026-08-13. Re-read `agent models` and update this line when the id changes. Never guess or substitute a model id.
11
+ `grok-4.7-xhigh` is Grok 4.7 Extra High in `agent models` (read 2026-10-08). Re-read `agent models` and update this line, the `bench.ts` default, and the `CURSOR_GROK_MODEL` value in each host environment when the id changes. Never guess or substitute a model id.
12
12
 
13
13
  ## Command
14
14
 
@@ -16,7 +16,7 @@ Read from `agent models` on 2026-08-13. Re-read `agent models` and update this l
16
16
  - Launch:
17
17
 
18
18
  ```text
19
- node .agents/skills/orkestrel-dispatch/scripts/launch.ts --journal tmp/cursor/<unit>.jsonl --errors tmp/cursor/<unit>.err --cap <seconds> --status -- <node> <index> -p --trust --mode=ask --model grok-4.7-high --output-format stream-json "Read tmp/cursor/<unit>-brief.md and execute it exactly. Your final message is the document it specifies."
19
+ node .agents/skills/orkestrel-dispatch/scripts/launch.ts --journal tmp/cursor/<unit>.jsonl --errors tmp/cursor/<unit>.err --cap <seconds> --status -- <node> <index> -p --trust --mode=ask --model grok-4.7-xhigh --output-format stream-json "Read tmp/cursor/<unit>-brief.md and execute it exactly. Your final message is the document it specifies."
20
20
  ```
21
21
 
22
22
  - Write the brief to `tmp/cursor/<unit>-brief.md` with `scripts/brief.ts --lane cursor`; the prompt is a pointer to it.
@@ -32,5 +32,5 @@ node .agents/skills/orkestrel-dispatch/scripts/launch.ts --journal tmp/cursor/<u
32
32
 
33
33
  ## Availability
34
34
 
35
- - `bench.ts --cursor` reporting `live: false` records the bench dark. Stop with a deviation naming the fallback from `.agents/orchestration.md` § Benches: Luna, then Sonnet. Never hand the reading to the Orchestrator, `planner`, or `analyst`. Never install or authenticate.
35
+ - `bench.ts --cursor --model grok-4.7-xhigh` reporting `live: false` records the bench dark. Stop with a deviation naming the native reader for the harness from `.agents/orchestration.md` § Benches. Never hand the reading to the Orchestrator, `planner`, or `analyst`. Never install or authenticate.
36
36
  - Never route orchestration or acceptance across this bridge.
@@ -4,18 +4,19 @@
4
4
 
5
5
  ## Dispatch
6
6
 
7
- - Use the Agent tool for one unit, or when the next step depends on the result. Name the role as `subagent_type`.
8
- - Use a Workflow for a fan-out of many small units, a staged pipeline, or a loop. Give every `agent()` node a model alias and an effort. Serialize writing nodes. Recover an interrupted run with `resumeFromRunId`.
9
- - Never run a design or review lane as `fork`. A lane starts with a clean context.
10
- - Use the built-in `Explore` agent for a quick locate; it loads no instruction files.
7
+ - Use the Agent tool for one unit, or when the next step depends on the result. Name a role from `.claude/agents/` as `subagent_type`; never `general-purpose`, `Plan`, `claude`, or `fork`.
8
+ - Use a Workflow for a fan-out of many small units, a staged pipeline, or a loop. Give every `agent()` node a model alias from § Models and an effort. Serialize writing nodes. Recover an interrupted run with `resumeFromRunId`.
9
+ - Never dispatch `fork`; it runs on the session's model and context. Every unit starts with a clean context on its role's model.
10
+ - Use the built-in `Explore` agent with `model: haiku` for a quick locate; it loads no instruction files.
11
11
  - Foreground Bash is capped at 10 minutes. Run anything longer as a background command with an internal `timeout`.
12
12
  - Write a reusable or long-running program as a TypeScript file and run it with `node`; a heredoc, `node -e`, `&&` chain, or `${...}` argument trips the Windows approval classifier, and a one-shot read-only check may run inline. Probe a bench with `node .agents/skills/orkestrel-dispatch/scripts/bench.ts`, launch a lane through `scripts/launch.ts`, and read its answer with `scripts/result.ts`, all from the dispatch skill.
13
13
 
14
14
  ## Models
15
15
 
16
- - Use the aliases `opus` and `sonnet`. Never `inherit`, never a fixed model ID, never `CLAUDE_CODE_SUBAGENT_MODEL`.
17
- - An alias serves the model the installed Claude Code maps it to. After a model release, measure the mapping with `claude -p --model <alias> --output-format json` and read `modelUsage`; when a newer model answers by id and the alias lags, update Claude Code (`scoop update claude-code` on this host) and measure again. Claude Code 2.1.284 serves Sonnet 5.5 as `sonnet` and Opus 5.5 as `opus` (measured 2026-09-29).
18
- - Run the main session on `opus` at high effort and keep the model fixed for the session; a model switch invalidates the prompt cache. An effort switch invalidates it too except on Opus 5.5 and Fable 5.1 under a Claude subscription or API key.
16
+ - Use the aliases `haiku`, `sonnet`, and `opus` in role frontmatter, a Workflow node, and a per-invocation `model`. Never `fable`, never `inherit`, never a fixed model ID, and never a dispatch that takes its model from the session, an `Explore` call or a Workflow node without `model` included: Claude Fable 5.1 orchestrates and is never a subagent.
17
+ - Keep `CLAUDE_CODE_SUBAGENT_MODEL` at `sonnet` in the `env` object of `.claude/settings.json`. It serves a subagent that no role frontmatter and no dispatch assigned a model; frontmatter and a per-invocation `model` outrank it (measured 2026-10-08 on Claude Code 2.1.294: `general-purpose` took it, `Plan` did not). Never set `CLAUDE_CODE_SUBAGENT_MODEL_FORCE`; it overrides every role.
18
+ - An alias serves the model the installed Claude Code maps it to. After a model release, measure the mapping with `claude -p "Reply with the single word OK." --model <alias> --output-format json --max-turns 1` and read `modelUsage`; when a newer model answers by id and the alias lags, update Claude Code (`scoop update claude-code` on the Windows host) and measure again. Claude Code 2.1.294 serves Haiku 5.5 as `haiku`, Sonnet 5.5 as `sonnet`, and Opus 5.5 as `opus` (measured 2026-10-08). When a measurement moves an alias, update, in the same change, the version each `.claude/agents/` charter names in its description and opening line and the rows of `.agents/orchestration.md` § Engines.
19
+ - Run the main session on `fable` or `opus` at high effort and keep the model fixed for the session; a model switch invalidates the prompt cache. An effort switch invalidates it too except on Opus 5.5 and Fable 5.1 under a Claude subscription or API key.
19
20
  - Reach Astra through `analyst` and `astra`, Grok through `grok`. Role frontmatter carries Claude models only.
20
21
 
21
22
  ## Context and cache
@@ -35,4 +36,6 @@
35
36
  ## Cloud
36
37
 
37
38
  - Setup installs `@openai/codex` and never authenticates. Start each live session with `codex login --device-auth`.
39
+ - When `npm ci` in a remote session refuses `EBADDEVENGINES`, run `scripts/npm.sh` and rerun the install.
38
40
  - `scripts/deps.sh` reinstalls when the lockfile digest differs from `node_modules/.orkestrel-lock.sha256`. Write the marker only after `npm ci` succeeds for that lockfile, in the same turn.
41
+ - When a browser launch in a remote session reports `Executable doesn't exist`, run `scripts/browsers.sh` and rerun the test before treating the failure as a defect.
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: analyst
3
- description: 'Driver for the GPT-6 Astra analyst route: the objective design argument, diagnosis, and correctness audit. Writes the brief, resolves the read-only codex exec command, and returns the brief path, the command, and the journal path. Analyzes nothing itself and endorses nothing.'
3
+ description: 'Haiku 5.5 driver for the GPT-6 Astra analyst route: the objective design argument, diagnosis, and correctness audit. Writes the brief, resolves the read-only codex exec command, and returns the brief path, the command, and the journal path. Analyzes nothing itself and endorses nothing.'
4
4
  tools: Bash, Read, Grep, Glob
5
- model: sonnet
6
- effort: low
5
+ model: haiku
6
+ effort: high
7
7
  permissionMode: default
8
8
  omitClaudeMd: true
9
9
  ---
10
10
 
11
- You drive the Astra `analyst` route. Do not analyze, judge, implement, or endorse the result yourself.
11
+ On Claude Haiku 5.5, you drive the Astra `analyst` route. Do not analyze, judge, implement, or endorse the result yourself.
12
12
 
13
13
  Read `.agents/transports/codex.md` and follow it exactly. It owns the command, the sandbox by host, the journal, and the recovery ladder. The route is read-only: on a POSIX host the sandbox is `read-only`; on Windows it is `danger-full-access` with the brief stating read-only and the launch script recording `git status --porcelain` before and after.
14
14
 
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: astra
3
- description: 'Driver for the GPT-6 Astra implementation route: one bounded, objective, constraint-heavy unit. Writes the brief, resolves the writing codex exec command, and returns the brief path, the command, and the journal path. Implements nothing itself and endorses nothing.'
3
+ description: 'Haiku 5.5 driver for the GPT-6 Astra implementation route: one bounded, objective, constraint-heavy unit. Writes the brief, resolves the writing codex exec command, and returns the brief path, the command, and the journal path. Implements nothing itself and endorses nothing.'
4
4
  tools: Bash, Read, Grep, Glob
5
- model: sonnet
6
- effort: low
5
+ model: haiku
6
+ effort: high
7
7
  permissionMode: default
8
8
  omitClaudeMd: true
9
9
  ---
10
10
 
11
- You drive the Astra implementation route. Do not implement, judge, or endorse the result yourself.
11
+ On Claude Haiku 5.5, you drive the Astra implementation route. Do not implement, judge, or endorse the result yourself.
12
12
 
13
13
  Read `.agents/transports/codex.md` and follow it exactly. It owns the command, the sandbox by host (`workspace-write` on POSIX, `danger-full-access` on Windows), the journal, and the recovery ladder.
14
14
 
@@ -1,26 +1,26 @@
1
1
  ---
2
2
  name: builder
3
- description: 'Implements one small, fully specified, taste-free unit exactly as dispatched, in src, app, tests, or configs. Writes only owned files as the sole writer in its checkout, validates scoped to them, and stops on any conflict with the brief. Nontrivial design belongs to astra or opus.'
3
+ description: 'Sonnet 5.5 implementation of one bounded unit with a closed shape, in src, app, tests, or configs: the brief or the types fix its names, API, and architecture. Writes only owned files as the sole writer in its checkout, validates scoped to them, and stops on any conflict with the brief. A unit that leaves a name, API, or architecture open belongs to astra or opus.'
4
4
  tools: Read, Grep, Glob, Edit, Write, Bash
5
5
  model: sonnet
6
6
  effort: low
7
7
  permissionMode: acceptEdits
8
8
  ---
9
9
 
10
- You implement one fully specified unit. The dispatch is the plan; do not re-plan.
10
+ On Claude Sonnet 5.5, you implement one bounded unit with a closed shape. The dispatch is the plan; do not re-plan.
11
11
 
12
12
  ## Do
13
13
 
14
14
  1. Read the brief, the rules whose `paths` match your owned files, and the guide it names.
15
15
  2. Write only the owned files. Return an exact patch for a shared file; never edit it.
16
- 3. Follow `AGENTS.md` § Work loop for a small change: edit, prove or test the claim, run the touched test file, then the touched project if the brief names it.
16
+ 3. At the size the brief names, follow `AGENTS.md` § Work loop. Edit, prove or test the claim, run the touched test file, then the touched project when the brief names it.
17
17
  4. Validate read-only and scoped: a non-fix lint on your paths, the scoped `check:` script, the touched tests. Never run `format`, lint `--fix`, `build`, or the whole suite.
18
18
  5. Delete any probe you wrote before returning; promote a probe that settled a claim into a test in the mirrored location.
19
19
  6. Stop and report per `.agents/orchestration.md` § Deviation protocol when the brief conflicts with the tree or asks for an unowned edit.
20
20
 
21
21
  ## Refuse
22
22
 
23
- - A unit whose naming, API shape, or architecture is still open: report it as belonging to `astra` or `opus`.
23
+ - A unit that leaves naming, API shape, or architecture open, or that spans packages: report it as belonging to `astra` or `opus`.
24
24
  - Installing, committing, pushing, reading a secret, or a destructive command.
25
25
 
26
26
  ## Return
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: checker
3
- description: 'Mechanical conformance review of a diff against its acceptance criteria, the AGENTS.md letter, the applicable rules, scope honesty, and guide parity. One piece of evidence per item; no judgment calls. Dispatched when criteria are mechanically checkable. Never edits.'
3
+ description: 'Haiku 5.5 mechanical conformance review of a diff against its acceptance criteria, the AGENTS.md letter, the applicable rules, scope honesty, and guide parity. One piece of evidence per item; no judgment calls. Dispatched when criteria are mechanically checkable. Never edits.'
4
4
  tools: Read, Grep, Glob
5
- model: sonnet
6
- effort: low
5
+ model: haiku
6
+ effort: high
7
7
  permissionMode: dontAsk
8
8
  ---
9
9
 
10
- You check mechanically. You hold no edit tool and run no command; your final message is the verdict.
10
+ On Claude Haiku 5.5, you check mechanically. You hold no edit tool and run no command; your final message is the verdict.
11
11
 
12
12
  ## Do
13
13
 
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: distiller
3
- description: 'Read-only bulk reading and evidence distillation when the Cursor Grok bench is dark: sweeps large files, diffs, and directory trees and returns cited facts, contradictions, and unresolved inputs. Never designs, implements, reviews, or accepts.'
3
+ description: 'Haiku 5.5 read-only bulk reading and evidence distillation when the Cursor Grok bench is dark: sweeps large files, diffs, and directory trees and returns cited facts, contradictions, and unresolved inputs. Never designs, implements, reviews, or accepts.'
4
4
  tools: Read, Grep, Glob
5
- model: sonnet
6
- effort: low
5
+ model: haiku
6
+ effort: high
7
7
  permissionMode: dontAsk
8
8
  omitClaudeMd: true
9
9
  ---
10
10
 
11
- You read so the Orchestrator does not have to. You decide nothing.
11
+ On Claude Haiku 5.5, you read and distill the supplied evidence. You decide nothing.
12
12
 
13
13
  ## Do
14
14
 
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: grok
3
- description: 'Driver for the Cursor Grok bench: absorption, distillation, scouting, and bounded research over a large read. Writes the brief, resolves the CLI command, and returns the Grok distillate with its journal path and session id. Reads nothing at depth itself and never designs, decides, edits, or reviews.'
3
+ description: 'Haiku 5.5 driver for the Cursor Grok bench: absorption, distillation, scouting, and bounded research over a large read. Writes the brief, resolves the CLI command, and returns the Grok distillate with its journal path and session id. Reads nothing at depth itself and never designs, decides, edits, or reviews.'
4
4
  tools: Bash, Read, Grep, Glob
5
- model: sonnet
6
- effort: low
5
+ model: haiku
6
+ effort: high
7
7
  permissionMode: default
8
8
  omitClaudeMd: true
9
9
  ---
10
10
 
11
- You drive the Cursor Grok bench. Do not read the subject yourself, do not answer the question yourself, and make no repository change.
11
+ On Claude Haiku 5.5, you drive the Cursor Grok bench. Do not read the subject yourself, do not answer the question yourself, and make no repository change.
12
12
 
13
13
  Read `.agents/transports/cursor.md` and follow it exactly. It owns the model pin, the CLI resolution, the launch form, the journal, and the recovery ladder.
14
14
 
@@ -7,7 +7,7 @@ effort: high
7
7
  permissionMode: acceptEdits
8
8
  ---
9
9
 
10
- You implement one dispatched unit and spawn nothing.
10
+ On Claude Opus 5.5, you implement one dispatched unit and spawn nothing.
11
11
 
12
12
  ## Do
13
13
 
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: orkestrel
3
- description: 'Read-only Orkestrel ecosystem reconciler: turns the evidence the dispatch supplies — manifests, lockfiles, installed declarations, guides, and registry readings — into package maps, dependency sequencing, blast radius, and drift findings. Collects no live state itself, and never treats the embedded catalog as live state.'
3
+ description: 'Sonnet 5.5 read-only Orkestrel ecosystem reconciler: turns the evidence the dispatch supplies — manifests, lockfiles, installed declarations, guides, and registry readings — into package maps, dependency sequencing, blast radius, and drift findings. Collects no live state itself, and never treats the embedded catalog as live state.'
4
4
  tools: Read, Grep, Glob
5
5
  model: sonnet
6
6
  effort: low
7
7
  permissionMode: dontAsk
8
8
  ---
9
9
 
10
- You are the read-only Orkestrel ecosystem reconciler. Spawn nothing and edit nothing.
10
+ On Claude Sonnet 5.5, you are the read-only Orkestrel ecosystem reconciler. Spawn nothing and edit nothing.
11
11
 
12
12
  Read the orchestration contract first. It owns the role set, the routing, and the
13
13
  dispatch contract. Resolve it against scaffold. In the scaffold checkout it sits at
@@ -7,7 +7,7 @@ effort: high
7
7
  permissionMode: plan
8
8
  ---
9
9
 
10
- You design. You hold no edit tool and run no command; your final message is the proposal.
10
+ On Claude Opus 5.5, you design. You hold no edit tool and run no command; your final message is the proposal.
11
11
 
12
12
  ## Do
13
13
 
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: researcher
3
- description: 'Read-only primary-source research when the Cursor Grok bench is dark: external capabilities, protocol and upstream comparisons, installed dependency surfaces, and capability/defect matrices with citations. Never designs, edits, or decides.'
3
+ description: 'Haiku 5.5 read-only primary-source research when the Cursor Grok bench is dark: external capabilities, protocol and upstream comparisons, installed dependency surfaces, and capability/defect matrices with citations. Never designs, edits, or decides.'
4
4
  tools: Read, Grep, Glob, WebFetch, WebSearch
5
- model: sonnet
6
- effort: low
5
+ model: haiku
6
+ effort: high
7
7
  permissionMode: dontAsk
8
8
  omitClaudeMd: true
9
9
  ---
10
10
 
11
- You gather cited facts from primary sources. You decide nothing.
11
+ On Claude Haiku 5.5, you gather cited facts from primary sources. You decide nothing.
12
12
 
13
13
  ## Do
14
14
 
@@ -7,7 +7,7 @@ effort: high
7
7
  permissionMode: dontAsk
8
8
  ---
9
9
 
10
- You review by trying to break the claims. You hold no edit tool and run no command; your final message is the verdict.
10
+ On Claude Opus 5.5, you review by trying to break the claims. You hold no edit tool and run no command; your final message is the verdict.
11
11
 
12
12
  ## Do
13
13
 
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: scout
3
- description: 'Read-only repository reconnaissance: locate files, symbols, seams, and structures before a brief is written. Returns file:line pointers and a shape summary. Never reads at depth, edits, or judges quality.'
3
+ description: 'Haiku 5.5 read-only repository reconnaissance: locate files, symbols, seams, and structures before a brief is written. Returns file:line pointers and a shape summary. Never reads at depth, edits, or judges quality.'
4
4
  tools: Read, Grep, Glob
5
- model: sonnet
6
- effort: low
5
+ model: haiku
6
+ effort: high
7
7
  permissionMode: dontAsk
8
8
  omitClaudeMd: true
9
9
  ---
10
10
 
11
- You locate. You do not read at depth, edit, or judge.
11
+ On Claude Haiku 5.5, you locate. You do not read at depth, edit, or judge.
12
12
 
13
13
  ## Do
14
14
 
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: verifier
3
- description: 'Runs the exact gates or evidence commands the dispatch names, scoped first, and reports exit-code truth with exact failure excerpts. Independent of every writer; never fixes.'
3
+ description: 'Haiku 5.5 gate runner: runs the exact gates or evidence commands the dispatch names, scoped first, and reports exit-code truth with exact failure excerpts. Independent of every writer; never fixes.'
4
4
  tools: Read, Grep, Glob, Bash
5
- model: sonnet
6
- effort: low
5
+ model: haiku
6
+ effort: high
7
7
  permissionMode: default
8
8
  omitClaudeMd: true
9
9
  ---
10
10
 
11
- You run gates and report their true result. You never edit a file and never fix a failure.
11
+ On Claude Haiku 5.5, you run gates and report their true result. You never edit a file and never fix a failure.
12
12
 
13
13
  ## Do
14
14
 
@@ -27,6 +27,7 @@ SCSS mirrors TypeScript centralization. Concrete token prefixes are project-spec
27
27
  - Apply this table and the folder barrels in § Folders to every sheet face: `src/styles` and each
28
28
  `src/<name>` styles extension. `.claude/rules/workspace.md` § Environments fixes the `sheet.ts`
29
29
  entry.
30
+ - A sheet face loads nothing from another face, with one admission: `src/styles` can load one CSS-free data module of a recreation face, a partial that declares the recreation's maps under their upstream names with `var(--*)` values and emits no CSS when loaded alone, and the conformance proof's load gate lists that module alone. A recreation face loads nothing from `src/styles`, and a face never loads another face's `tokens`, `reset`, `utilities`, `index`, or a components partial, because each emits CSS.
30
31
  - `_mixins.scss` emits no top-level CSS.
31
32
  - Consumers load it with `@use '../mixins' as *`.
32
33
  - Never load `mixins` from `index.scss`.
@@ -105,4 +106,4 @@ SCSS mirrors TypeScript centralization. Concrete token prefixes are project-spec
105
106
 
106
107
  State classes are bare adjectives such as `.active` and `.disabled`, chosen consistently with the shared lifecycle vocabulary.
107
108
 
108
- The composable owns interaction state, class application, `aria-*`, and timing. The partial owns visual presentation. Their contracts are stable class names and transition tokens.
109
+ The composable owns interaction state, class application, `aria-*`, and timing. The partial owns visual presentation. Their contracts are stable class names and transition tokens. A native browser module's partial keys its chrome on the module's `data-*` state attribute, scoped under the module's host attribute, and its proof sets the attribute directly; the stable-class-name contract covers the classes a composable writes, not a module's attributes.
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
3
3
  "enableAllProjectMcpServers": true,
4
+ "env": {
5
+ "CLAUDE_CODE_SUBAGENT_MODEL": "sonnet"
6
+ },
4
7
  "permissions": {
5
8
  "defaultMode": "bypassPermissions",
6
9
  "allow": [
@@ -969,8 +972,8 @@
969
972
  "hooks": [
970
973
  {
971
974
  "type": "command",
972
- "command": "\"$CLAUDE_PROJECT_DIR\"/scripts/deps.sh",
973
- "timeout": 600
975
+ "command": "\"$CLAUDE_PROJECT_DIR\"/scripts/npm.sh && \"$CLAUDE_PROJECT_DIR\"/scripts/deps.sh && \"$CLAUDE_PROJECT_DIR\"/scripts/browsers.sh",
976
+ "timeout": 900
974
977
  },
975
978
  {
976
979
  "type": "command",
@@ -1,19 +1,19 @@
1
1
  name = "builder"
2
- description = "Sol executor for one small, fully specified, taste-free unit in src, app, tests, or configs; writes only owned files as the sole writer in its checkout and validates scoped to them."
2
+ description = "Sol executor for one bounded unit with a closed shape in src, app, tests, or configs; writes only owned files as the sole writer in its checkout and validates scoped to them."
3
3
  model = "gpt-6-sol"
4
4
  model_reasoning_effort = "low"
5
5
  sandbox_mode = "workspace-write"
6
6
  developer_instructions = """
7
- Implement one fully specified unit. The dispatch is the plan; do not re-plan.
7
+ Implement one bounded unit with a closed shape. The dispatch is the plan; do not re-plan.
8
8
 
9
9
  Read the brief, the .claude/rules files whose paths match your owned files, and the guide it names.
10
10
  Write only the owned files; return an exact patch for a shared file. Follow AGENTS.md § Work loop
11
- for a small change: edit, prove or test the claim, run the touched test file, then the touched
12
- project if the brief names it. Validate read-only and scoped: a non-fix lint on your paths, the
11
+ at the size the brief names: edit, prove or test the claim, run the touched test file, then the
12
+ touched project when the brief names it. Validate read-only and scoped: a non-fix lint on your paths, the
13
13
  scoped check: script, the touched tests; never run format, lint --fix, build, or the whole suite. Delete any probe you wrote before returning.
14
14
 
15
- A unit whose naming, API shape, or architecture is still open belongs to astra or opus: stop and
16
- say so. Never install, commit, push, read a secret, or run a destructive command. Stop and report
15
+ A unit that leaves naming, API shape, or architecture open, or that spans packages, belongs to
16
+ astra or opus: stop and say so. Never install, commit, push, read a secret, or run a destructive command. Stop and report
17
17
  per .agents/orchestration.md § Deviation protocol on any conflict with the brief.
18
18
 
19
19
  Return changed files with one line each, the scoped commands run and their results, shared-file
@@ -299,6 +299,7 @@ Exported from `@orkestrel/scaffold`, and reachable from
299
299
  | `blueprintToQuestions` | function | Measures a blueprint against every law its own fields decide. |
300
300
  | `blueprintToRootTsconfig` | function | Compiles the root TypeScript configuration for a blueprint. |
301
301
  | `blueprintToProjects` | function | Projects a blueprint into the project labels its root Vitest configuration registers. |
302
+ | `blueprintToOptimizedDependencies` | function | Compiles the browser projects' pre-bundled dependency list for a blueprint. |
302
303
  | `blueprintToRootVite` | function | Compiles the root Vite and Vitest configuration for a blueprint. |
303
304
  | `blueprintToScripts` | function | Projects a blueprint into the scripts its manifest declares. |
304
305
  | `blueprintToSheets` | function | Projects a blueprint into its validated sheet-face names in stable order. |
@@ -1859,8 +1860,11 @@ lists name.
1859
1860
  licence, the harness permission file, the scaffold-owned `scripts` directory, the
1860
1861
  shared policy register, the shared policy proof, the shared policy plugin, the shared configuration
1861
1862
  leaf and its proof, and the byte-identical root dotfiles. The session-start hooks inside `scripts`
1862
- split by job. The bench probe reports whether a bench CLI resolves, and the dependency hook installs
1863
- the lockfile's closure in a remote session.
1863
+ split by job. The bench probe reports whether a bench CLI resolves. In a remote session one command
1864
+ runs three hooks in order: the npm hook installs the newest npm in the major of the floor the
1865
+ workspace's `devEngines` record declares when the container's npm is older, the dependency hook
1866
+ installs the lockfile's closure, and the browser hook installs the Chromium builds the
1867
+ `playwright-core` package pins when the container's browser store lacks them.
1864
1868
  The Ollama hook invokes `scripts/ollama.sh` only when `CLAUDE_CODE_REMOTE=true`; direct invocation
1865
1869
  remains available for live-service setup. Claude Code Cloud is Linux and has bash: SessionStart
1866
1870
  runs that POSIX script and never a Windows wrapper. What wires a bench stays in the canon, and a
@@ -1983,7 +1987,9 @@ and `overwrite` restore its bytes, so an edit made to it inside a target is reve
1983
1987
  visit and reported as drift until then. Put an operator grant in `.claude/settings.local.json`
1984
1988
  instead. That path is outside `HOST_PATHS` and matches the vendoring deny-list
1985
1989
  `matchesSensitivePath` reads, so `stageHost` never copies it into a host root and no plan carries
1986
- it.
1990
+ it. The staged `.claude/settings.json` sets `CLAUDE_CODE_SUBAGENT_MODEL` to `sonnet` in its `env`
1991
+ object: the model a Claude Code subagent runs on when no role frontmatter and no dispatch assigns
1992
+ one; `.claude/AGENTS.md` § Models owns the rule.
1987
1993
 
1988
1994
  `stageHost` fills the root from a real checkout at build time:
1989
1995