@orkestrel/scaffold 0.0.107 → 0.0.109

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 (164) hide show
  1. package/dist/agents/skills/orkestrel-dispatch/scripts/bench.js +326 -91
  2. package/dist/agents/skills/orkestrel-dispatch/scripts/brief.js +110 -14
  3. package/dist/agents/skills/orkestrel-dispatch/scripts/chain.js +280 -0
  4. package/dist/agents/skills/orkestrel-dispatch/scripts/cite.js +188 -26
  5. package/dist/agents/skills/orkestrel-dispatch/scripts/launch.js +142 -43
  6. package/dist/agents/skills/orkestrel-dispatch/scripts/login.js +240 -62
  7. package/dist/agents/skills/orkestrel-dispatch/scripts/patch.js +323 -0
  8. package/dist/agents/skills/orkestrel-dispatch/scripts/result.js +169 -32
  9. package/dist/agents/skills/orkestrel-dispatch/scripts/sweep.js +368 -27
  10. package/dist/agents/skills/orkestrel-falsify/scripts/mutate.js +560 -0
  11. package/dist/agents/skills/orkestrel-harden/scripts/discovery.js +1052 -205
  12. package/dist/agents/skills/orkestrel-harden/scripts/measure.js +361 -0
  13. package/dist/agents/skills/orkestrel-harden/scripts/titles.js +455 -80
  14. package/dist/agents/skills/orkestrel-parallel/scripts/cases.js +327 -0
  15. package/dist/agents/skills/orkestrel-publish/scripts/compare.js +298 -51
  16. package/dist/agents/skills/orkestrel-publish/scripts/pins.js +170 -13
  17. package/dist/agents/skills/orkestrel-publish/scripts/swap.js +956 -191
  18. package/dist/agents/skills/orkestrel-publish/scripts/wave.js +707 -112
  19. package/dist/agents/skills/orkestrel-publish/scripts/window.js +235 -41
  20. package/dist/agents/skills/orkestrel-scout/scripts/map.js +341 -54
  21. package/dist/agents/templates/brief.md +1 -1
  22. package/dist/bin/main.js +51 -46
  23. package/dist/bin/main.js.map +1 -1
  24. package/dist/host/AGENTS.md +26 -20
  25. package/dist/host/agents/orchestration.md +98 -58
  26. package/dist/host/agents/platforms/posix.md +15 -0
  27. package/dist/host/agents/platforms/windows.md +37 -0
  28. package/dist/host/agents/skills/orkestrel-align/SKILL.md +10 -13
  29. package/dist/host/agents/skills/orkestrel-align/references/fleet.md +4 -10
  30. package/dist/host/agents/skills/orkestrel-align/references/integration.md +1 -1
  31. package/dist/host/agents/skills/orkestrel-build/SKILL.md +16 -48
  32. package/dist/host/agents/skills/orkestrel-build/agents/openai.yaml +1 -1
  33. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +19 -16
  34. package/dist/host/agents/skills/orkestrel-debrief/agents/openai.yaml +1 -1
  35. package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +15 -28
  36. package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +5 -6
  37. package/dist/host/agents/skills/orkestrel-debrief/references/retention.md +12 -14
  38. package/dist/host/agents/skills/orkestrel-dispatch/SKILL.md +36 -24
  39. package/dist/host/agents/skills/orkestrel-dispatch/references/launch.md +14 -11
  40. package/dist/host/agents/skills/orkestrel-dispatch/scripts/bench.ts +366 -75
  41. package/dist/host/agents/skills/orkestrel-dispatch/scripts/brief.ts +126 -16
  42. package/dist/host/agents/skills/orkestrel-dispatch/scripts/chain.ts +323 -0
  43. package/dist/host/agents/skills/orkestrel-dispatch/scripts/cite.ts +220 -31
  44. package/dist/host/agents/skills/orkestrel-dispatch/scripts/launch.ts +176 -33
  45. package/dist/host/agents/skills/orkestrel-dispatch/scripts/login.ts +294 -59
  46. package/dist/host/agents/skills/orkestrel-dispatch/scripts/patch.ts +401 -0
  47. package/dist/host/agents/skills/orkestrel-dispatch/scripts/result.ts +199 -34
  48. package/dist/host/agents/skills/orkestrel-dispatch/scripts/sweep.ts +428 -27
  49. package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +10 -8
  50. package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +1 -5
  51. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +1 -1
  52. package/dist/host/agents/skills/orkestrel-falsify/scripts/mutate.ts +701 -0
  53. package/dist/host/agents/skills/orkestrel-harden/SKILL.md +16 -12
  54. package/dist/host/agents/skills/orkestrel-harden/references/bindings.md +23 -81
  55. package/dist/host/agents/skills/orkestrel-harden/references/centralization.md +4 -5
  56. package/dist/host/agents/skills/orkestrel-harden/references/contract.md +2 -0
  57. package/dist/host/agents/skills/orkestrel-harden/references/document.md +33 -0
  58. package/dist/host/agents/skills/orkestrel-harden/references/equivalence.md +6 -3
  59. package/dist/host/agents/skills/orkestrel-harden/references/hardening.md +8 -4
  60. package/dist/host/agents/skills/orkestrel-harden/references/research.md +2 -0
  61. package/dist/host/agents/skills/orkestrel-harden/scripts/discovery.ts +1272 -279
  62. package/dist/host/agents/skills/orkestrel-harden/scripts/measure.ts +425 -0
  63. package/dist/host/agents/skills/orkestrel-harden/scripts/titles.ts +603 -98
  64. package/dist/host/agents/skills/orkestrel-journey/SKILL.md +75 -98
  65. package/dist/host/agents/skills/orkestrel-journey/references/captures.md +54 -17
  66. package/dist/host/agents/skills/orkestrel-journey/references/decide.md +1 -20
  67. package/dist/host/agents/skills/orkestrel-journey/references/layer.md +21 -31
  68. package/dist/host/agents/skills/orkestrel-journey/references/styles.md +1 -1
  69. package/dist/host/agents/skills/orkestrel-parallel/SKILL.md +91 -30
  70. package/dist/host/agents/skills/orkestrel-parallel/agents/openai.yaml +2 -2
  71. package/dist/host/agents/skills/orkestrel-parallel/references/claude.md +34 -0
  72. package/dist/host/agents/skills/orkestrel-parallel/references/codex.md +29 -0
  73. package/dist/host/agents/skills/orkestrel-parallel/references/cursor.md +29 -0
  74. package/dist/host/agents/skills/orkestrel-parallel/references/t3.md +31 -0
  75. package/dist/host/agents/skills/orkestrel-parallel/scripts/cases.ts +389 -0
  76. package/dist/host/agents/skills/orkestrel-polish/SKILL.md +16 -20
  77. package/dist/host/agents/skills/orkestrel-polish/references/capture-harness.md +16 -26
  78. package/dist/host/agents/skills/orkestrel-publish/SKILL.md +12 -26
  79. package/dist/host/agents/skills/orkestrel-publish/agents/openai.yaml +2 -2
  80. package/dist/host/agents/skills/orkestrel-publish/references/adopt.md +23 -0
  81. package/dist/host/agents/skills/orkestrel-publish/references/release.md +4 -4
  82. package/dist/host/agents/skills/orkestrel-publish/references/wave.md +12 -10
  83. package/dist/host/agents/skills/orkestrel-publish/references/window.md +20 -25
  84. package/dist/host/agents/skills/orkestrel-publish/scripts/compare.ts +348 -59
  85. package/dist/host/agents/skills/orkestrel-publish/scripts/pins.ts +202 -22
  86. package/dist/host/agents/skills/orkestrel-publish/scripts/swap.ts +1061 -191
  87. package/dist/host/agents/skills/orkestrel-publish/scripts/wave.ts +812 -140
  88. package/dist/host/agents/skills/orkestrel-publish/scripts/window.ts +280 -38
  89. package/dist/host/agents/skills/orkestrel-scout/SKILL.md +3 -3
  90. package/dist/host/agents/skills/orkestrel-scout/scripts/map.ts +428 -70
  91. package/dist/host/agents/templates/brief.md +1 -1
  92. package/dist/host/agents/transports/claude-cli.md +3 -3
  93. package/dist/host/agents/transports/codex.md +3 -8
  94. package/dist/host/agents/transports/cursor.md +2 -3
  95. package/dist/host/claude/AGENTS.md +7 -10
  96. package/dist/host/claude/agents/analyst.md +3 -3
  97. package/dist/host/claude/agents/astra.md +3 -3
  98. package/dist/host/claude/agents/builder.md +1 -1
  99. package/dist/host/claude/agents/checker.md +1 -1
  100. package/dist/host/claude/agents/distiller.md +1 -1
  101. package/dist/host/claude/agents/grok.md +1 -1
  102. package/dist/host/claude/agents/opus.md +2 -2
  103. package/dist/host/claude/agents/orkestrel.md +57 -90
  104. package/dist/host/claude/agents/researcher.md +1 -1
  105. package/dist/host/claude/agents/reviewer.md +4 -0
  106. package/dist/host/claude/agents/scout.md +1 -1
  107. package/dist/host/claude/agents/verifier.md +1 -1
  108. package/dist/host/claude/rules/application.md +14 -21
  109. package/dist/host/claude/rules/architecture.md +34 -44
  110. package/dist/host/claude/rules/browser.md +3 -4
  111. package/dist/host/claude/rules/campaign.md +55 -0
  112. package/dist/host/claude/rules/documentation.md +26 -11
  113. package/dist/host/claude/rules/names.md +9 -4
  114. package/dist/host/claude/rules/patterns.md +6 -7
  115. package/dist/host/claude/rules/portability.md +2 -3
  116. package/dist/host/claude/rules/quality.md +4 -5
  117. package/dist/host/claude/rules/styles.md +2 -2
  118. package/dist/host/claude/rules/tests.md +57 -114
  119. package/dist/host/claude/rules/typescript.md +8 -10
  120. package/dist/host/claude/rules/workspace.md +21 -19
  121. package/dist/host/claude/rules/writing.md +3 -3
  122. package/dist/host/claude/skills/orkestrel-dispatch/SKILL.md +1 -1
  123. package/dist/host/claude/skills/orkestrel-harden/SKILL.md +1 -1
  124. package/dist/host/claude/skills/orkestrel-parallel/SKILL.md +1 -1
  125. package/dist/host/claude/skills/orkestrel-publish/SKILL.md +1 -1
  126. package/dist/host/claude/skills/orkestrel-scout/SKILL.md +1 -1
  127. package/dist/host/codex/agents/analyst.toml +9 -3
  128. package/dist/host/codex/agents/astra.toml +3 -4
  129. package/dist/host/codex/agents/builder.toml +1 -1
  130. package/dist/host/codex/agents/opus.toml +3 -4
  131. package/dist/host/codex/agents/orkestrel.toml +1 -1
  132. package/dist/host/codex/agents/researcher.toml +2 -2
  133. package/dist/host/codex/agents/verifier.toml +1 -1
  134. package/dist/host/codex/config.toml +3 -3
  135. package/dist/host/configs/helpers.ts +21 -1
  136. package/dist/host/configs/policy.ts +405 -16
  137. package/dist/host/cursor/rules/orchestration.mdc +1 -0
  138. package/dist/host/dotfiles/oxlintrc.json +141 -5
  139. package/dist/host/guides/agent.md +111 -134
  140. package/dist/host/guides/capture.md +801 -0
  141. package/dist/host/guides/probe.md +27 -8
  142. package/dist/host/guides/scaffold.md +152 -19
  143. package/dist/host/guides/study.md +534 -440
  144. package/dist/host/guides/test.md +111 -44
  145. package/dist/host/manifest.json +199 -242
  146. package/dist/host/tests/config.test.ts +1558 -219
  147. package/dist/host/tests/policy.test.ts +127 -1
  148. package/dist/host/tests/setupPolicy.ts +1389 -39
  149. package/dist/src/core/index.cjs +239 -87
  150. package/dist/src/core/index.cjs.map +1 -1
  151. package/dist/src/core/index.d.cts +123 -39
  152. package/dist/src/core/index.d.ts +123 -39
  153. package/dist/src/core/index.js +234 -86
  154. package/dist/src/core/index.js.map +1 -1
  155. package/dist/src/server/index.cjs +20 -27
  156. package/dist/src/server/index.cjs.map +1 -1
  157. package/dist/src/server/index.js +21 -28
  158. package/dist/src/server/index.js.map +1 -1
  159. package/package.json +11 -11
  160. package/dist/agents/skills/orkestrel-dispatch/scripts/helpers.js +0 -283
  161. package/dist/host/agents/skills/orkestrel-dispatch/references/bench.md +0 -25
  162. package/dist/host/agents/skills/orkestrel-dispatch/scripts/helpers.ts +0 -333
  163. package/dist/host/agents/skills/orkestrel-parallel/references/harnesses.md +0 -19
  164. package/dist/host/guides/supervisor.md +0 -4890
@@ -9,7 +9,7 @@
9
9
  - `*/types.ts` is authoritative for public APIs. Never undo a user's type edit.
10
10
  - `.agents/orchestration.md` governs agent operation and cannot weaken this file. Harness bridges (`.claude/AGENTS.md`, `.codex/config.toml`, `.cursor/rules/orchestration.mdc`) add harness mechanics only.
11
11
  - A skill under `.agents/skills/` is a procedure. Follow it when the user or a dispatch names it, or when its trigger fires. A skill cannot weaken this file or a rule.
12
- - Before editing, read: this file; each rule the Rule map scopes to the paths you touch; the named skill and the references it names; the matching guide under `guides/` and `ROADMAP.md` when present. Read nothing else up front.
12
+ - Before editing, read: this file; each rule whose `paths` frontmatter matches the paths you touch; the named skill and the references it names; the matching guide under `guides/` and `ROADMAP.md` when present. Read nothing else up front.
13
13
  - Rules state how to write. Guides state what to build. On conflict, stop and report the conflict.
14
14
  - A rule file's stated exception to a law in this file applies.
15
15
 
@@ -43,7 +43,7 @@ configs/ thin target wrappers around root Vite/TypeScript configuration
43
43
  - **NEVER** use mocks, behavioral fakes, module replacement, framework spies, or fake clocks for project-owned behavior. Use real implementations, recorders, temporary resources, protocol-faithful fixture servers, and inert data stubs.
44
44
  - **ALWAYS** make interface properties and public return collections readonly.
45
45
  - **ALWAYS** define reusable and public types in `*/types.ts` before implementation.
46
- - **ALWAYS** inspect the declared and installed `@orkestrel/*` capabilities before writing overlapping logic. Reuse a primitive whose semantics match; never wrap one to rename it.
46
+ - **ALWAYS** check whether an `@orkestrel` package already provides a capability before writing logic, a tool, or an instrument that could overlap it. Read the package guides first: `guides/README.md` maps them, and a target holds them under `node_modules/@orkestrel/scaffold/dist/host/guides/`. When a guide leaves the question open, read the package's source in a checkout beside the repository. When no checkout exists, read its repository at `https://github.com/orkestrel/<package>`, online or cloned under `tmp/`. Reuse a primitive whose semantics match; never wrap one to rename it.
47
47
  - **ALWAYS** finish the requested implementation: no stubs, deferred logic, or hidden follow-up.
48
48
  - **ALWAYS** write a script as TypeScript run by Node (`node path/to/script.ts`, type stripping, `node:` modules only): a skill script, a probe, a launcher, an instrument, a one-off tool. Never write a bash, PowerShell, or Python script. The Claude Code Cloud hooks under `scripts/` are the one bash exception, and that folder holds nothing else.
49
49
 
@@ -70,6 +70,10 @@ configs/ thin target wrappers around root Vite/TypeScript configuration
70
70
 
71
71
  ## Work loop
72
72
 
73
+ Types, tests, and implementation decide every step; comments, TSDoc, and guides follow the final implementation. Report results against the goal, and prefer the smallest change that reaches green over a perfect one.
74
+
75
+ Open a task with its goal, its acceptance criteria, and the cheapest pass/fail check that proves them. Before writing a fixture, proof, or tool around a command, run that command on real data. `.agents/orchestration.md` § Depth, breadth, and machinery sizes the effort and rules on what becomes a package.
76
+
73
77
  Size the change before touching a file. Take the largest row whose trigger applies: large, then medium, then small. Run only what the row names.
74
78
 
75
79
  | Size | Trigger | Do |
@@ -87,7 +91,7 @@ Within the size, in order:
87
91
  3. **Implement.** Conform to the types. Place each declaration in its kind file. Update the barrel.
88
92
  4. **Test.** Cover happy paths, edge cases, failures, and boundaries with deterministic tests against real implementations. For a defect, record the failing command and count before the fix and the same command green after.
89
93
  5. **Consolidate.** Remove duplication, nested functions, and superfluous wrappers without widening the API.
90
- 6. **Document.** Update the matching guide and parity. Prose comes last and stays short.
94
+ 6. **Document.** After the implementation is final, update the matching guide, comments, and TSDoc in one minimal pass. Before then, write, revise, and review no prose.
91
95
 
92
96
  Test ladder, narrowest first; stop at the boundary the change size names:
93
97
 
@@ -96,6 +100,7 @@ Test ladder, narrowest first; stop at the boundary the change size names:
96
100
  3. The touched project: `npm run test:<project>`, plus the `check:` script for that project where `package.json` declares one.
97
101
  4. Tree-wide gates, once, by `verifier`: `npm run format:check`, `npm run lint:check`, `npm run check`, `npm run build`, `npm test`.
98
102
 
103
+ - Run types and behavior tests before format, lint, and guide checks. A format, lint, or guide failure never stops a behavior run; fix it in the final pass.
99
104
  - Run the mutating `npm run lint` then `npm run format` only to converge before the non-mutating gates.
100
105
  - A writing unit stops at the project boundary and reports the commands it ran. `verifier` runs the tree-wide gates when dispatched for them and edits no source.
101
106
  - Never claim a gate passed without running it and reading its output bare, with no `| tail` or `| grep` behind it.
@@ -105,23 +110,24 @@ Test ladder, narrowest first; stop at the boundary the change size names:
105
110
 
106
111
  ## Rule map
107
112
 
108
- Each row is a normative extension of this file. Its `paths` frontmatter controls automatic loading; read the row when its subject matches your change.
109
-
110
- | Rule | Governs |
111
- | -------------------------------- | ---------------------------------------------------------------------- |
112
- | `.claude/rules/names.md` | Identifiers, API shape, acronyms, lifecycle vocabulary, files/folders |
113
- | `.claude/rules/typescript.md` | TypeScript syntax, imports, immutability, errors, TSDoc |
114
- | `.claude/rules/architecture.md` | Centralized files, exports, classes, modules, extension points, stores |
115
- | `.claude/rules/patterns.md` | Options, managers, emitters, guards, parsers, contracts |
116
- | `.claude/rules/tests.md` | Test behavior, helpers, probes, browser tests, Vitest configuration |
117
- | `.claude/rules/workspace.md` | Src/app environments, aliases, isolation, builds, scripts, tooling |
118
- | `.claude/rules/application.md` | App composition, entries, manifest safety, lifecycle, integration |
119
- | `.claude/rules/browser.md` | Vue/browser architecture and platform usage |
120
- | `.claude/rules/styles.md` | SCSS/CSS centralization, tokens, mixins, layers, naming |
121
- | `.claude/rules/portability.md` | Host branching, paths, line endings, processes, terminals, OS claims |
122
- | `.claude/rules/documentation.md` | Guides, parity, roadmap, showcase, examples, skill files |
123
- | `.claude/rules/writing.md` | Prose in guides, replies, commits, and instruction files |
124
- | `.claude/rules/quality.md` | Evidence, probes, instruments, performance, research, completion |
113
+ Each row is a normative extension of this file. A rule's `paths` frontmatter controls automatic loading, and `.claude/rules/writing.md` carries none and loads always. Read the row when its subject matches your change.
114
+
115
+ | Rule | Governs |
116
+ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
117
+ | `.claude/rules/names.md` | Identifiers, API shape, helper prefixes, acronyms, fleet name ownership, lifecycle vocabulary, files and folders |
118
+ | `.claude/rules/typescript.md` | TypeScript syntax, imports, types, immutability, bindings and state, errors, TSDoc |
119
+ | `.claude/rules/architecture.md` | Centralized files, declaration placement, kind purity, wrappers, functions, classes, middleware, plugins, stores, barrels |
120
+ | `.claude/rules/patterns.md` | Ecosystem reuse, options, managers, emitters, validation and contracts, foreign contracts |
121
+ | `.claude/rules/tests.md` | Test contract, cross-cutting proofs, probes, live-service and expensive proofs, shared helpers, browser tests, runner configuration |
122
+ | `.claude/rules/workspace.md` | Src/app environments, aliases, configuration, builds, test project matrix, typechecking scopes, scripts, policy instruments, text integrity |
123
+ | `.claude/rules/application.md` | App composition, CLI selections, entries, manifests, server runner |
124
+ | `.claude/rules/browser.md` | Vue and browser architecture: composables, reactivity, platform APIs |
125
+ | `.claude/rules/styles.md` | SCSS/CSS centralization, tokens, mixins, layers, folders, proofs, naming |
126
+ | `.claude/rules/portability.md` | Host branching, line endings, paths, processes, terminals, scripts and packaging, host claims |
127
+ | `.claude/rules/documentation.md` | Guides, parity, examples, agent-facing surfaces, skill files |
128
+ | `.claude/rules/writing.md` | Prose in guides, replies, commits, and instruction files |
129
+ | `.claude/rules/quality.md` | Evidence, probes, instruments, performance, ecosystem reuse, hardening, completion |
130
+ | `.claude/rules/campaign.md` | The `.orkestrel/` campaign folder: layout, content, session start, hand off and close |
125
131
 
126
132
  ## Writing
127
133
 
@@ -6,41 +6,44 @@ How agents are dispatched, parallelized, reviewed, and cleaned up. Every harness
6
6
 
7
7
  Read in order: the user's instruction; `AGENTS.md` and the rules it scopes to your paths; this file; the named skill; the guide. A harness bridge (`.claude/AGENTS.md`, `.codex/config.toml`, `.cursor/rules/orchestration.mdc`) adds mechanics and restates nothing here.
8
8
 
9
+ On a harness with no bridge, orchestrate natively, record the harness in the roster, and dispatch no writer or runner lane until a page under `.agents/skills/orkestrel-parallel/references/` answers that skill's bring-up questions for it.
10
+
9
11
  ## Engines
10
12
 
11
13
  Name the harness family and its access route: Claude through Claude Code or the Claude CLI; Codex through Codex native agents or the Codex CLI; Cursor through the Cursor CLI, with Grok 4.7 Extra High for the Grok bench. Classify GPT-6 Astra, GPT-6.1 Sol, and GPT-6 Luna as Codex-family engines, including when another harness hosts the Orchestrator.
12
14
 
13
- | Engine | Job | Posture |
14
- | ----------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
15
- | 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 |
16
- | Cursor Grok | context absorption, distillation, broad mapping, exploration | read-only; returns evidence, never decisions |
17
- | Claude Opus 5.5 | subjective design, design-fit review, implementation | proposes, audits, implements; never accepts its own work |
18
- | GPT-6 Astra | objective analysis, correctness audit, implementation | proposes, audits, implements; never accepts its own work |
19
- | Claude Sonnet 5.5 | bounded implementation of a closed shape, ecosystem reconciliation | executes a fully specified brief |
20
- | Claude Haiku 5.5 | bench drivers, small precise tasks, exact lookups, conformance, gates | executes a fully specified brief; edits no source |
21
- | GPT-6.1 Sol, GPT-6 Luna | mechanical units, drivers, small precise tasks, gates, exact lookups | executes a fully specified brief |
15
+ | Engine | Job | Posture |
16
+ | ----------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
17
+ | 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, except as the consultant the user names for a wording and coherence pass after research and technical review |
18
+ | Cursor Grok | context absorption, distillation, broad mapping, exploration | read-only; returns evidence, never decisions |
19
+ | Claude Opus 5.5 | subjective design, design-fit review, implementation | proposes, audits, implements; never accepts its own work |
20
+ | GPT-6 Astra | objective analysis, correctness audit, implementation | proposes, audits, implements; never accepts its own work |
21
+ | Claude Sonnet 5.5 | bounded implementation of a closed shape, ecosystem reconciliation | executes a fully specified brief |
22
+ | Claude Haiku 5.5 | bench drivers, small precise tasks, exact lookups, conformance, gates | executes a fully specified brief; edits no source |
23
+ | GPT-6.1 Sol, GPT-6 Luna | mechanical units, drivers, small precise tasks, gates, exact lookups | executes a fully specified brief |
22
24
 
23
25
  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 harness is Codex or the Orchestrator uses a Codex-family engine, use the Codex column: map Opus to GPT-6 Astra, Sonnet to GPT-6.1 Sol, and Haiku to GPT-6 Luna; execute mapped Astra roles natively without an Opus bench probe. Under this mapping, assign review to another agent in a clean context and forbid self-review, including when writer and reviewer both use Astra. For other harnesses, review runs on an engine that did not write the work.
24
26
 
25
27
  ## Roles
26
28
 
27
- | Role | Job | Claude | Codex |
28
- | ------------ | ---------------------------------------------------------- | ------------ | ----------- |
29
- | `grok` | absorption, distillation, broad mapping, exploration | haiku driver | luna driver |
30
- | `analyst` | objective design argument or correctness audit on Astra | haiku driver | astra |
31
- | `astra` | objective, constraint-heavy implementation on Astra | haiku driver | astra |
32
- | `planner` | subjective design | opus | astra |
33
- | `reviewer` | design-fit or correctness review | opus | astra |
34
- | `opus` | subjective implementation (API shape, naming, guide voice) | opus | astra |
35
- | `builder` | one bounded unit with a closed shape, app layer included | sonnet | sol |
36
- | `checker` | mechanical conformance against criteria and rules | haiku | luna |
37
- | `verifier` | gates and evidence commands, exit-code truth | haiku | luna |
38
- | `scout` | exact bounded lookup of files, symbols, seams | haiku | luna |
39
- | `distiller` | bulk reading when the Cursor bench is dark | haiku | luna |
40
- | `researcher` | primary-source research when the Cursor bench is dark | haiku | luna |
41
- | `orkestrel` | ecosystem reconciliation over supplied evidence | sonnet | sol |
29
+ | Role | Job | Capability | Claude | Codex |
30
+ | ------------ | ---------------------------------------------------------- | ------------ | ------------ | ----------- |
31
+ | `grok` | absorption, distillation, broad mapping, exploration | reader | haiku driver | luna driver |
32
+ | `analyst` | objective design argument or correctness audit on Astra | objective | haiku driver | astra |
33
+ | `astra` | objective, constraint-heavy implementation on Astra | objective | haiku driver | astra |
34
+ | `planner` | subjective design | subjective | opus | astra |
35
+ | `reviewer` | design-fit or correctness review | subjective | opus | astra |
36
+ | `opus` | subjective implementation (API shape, naming, guide voice) | subjective | opus | astra |
37
+ | `builder` | one bounded unit with a closed shape, app layer included | closed-shape | sonnet | sol |
38
+ | `checker` | mechanical conformance against criteria and rules | mechanical | haiku | luna |
39
+ | `verifier` | gates and evidence commands, exit-code truth | mechanical | haiku | luna |
40
+ | `scout` | exact bounded lookup of files, symbols, seams | mechanical | haiku | luna |
41
+ | `distiller` | bulk reading when the Cursor bench is dark | reader | haiku | luna |
42
+ | `researcher` | primary-source research when the Cursor bench is dark | reader | haiku | luna |
43
+ | `orkestrel` | ecosystem reconciliation over supplied evidence | closed-shape | sonnet | sol |
42
44
 
43
45
  - Name the role and its engine in every dispatch. Reach a role by its own name.
46
+ - On a harness with no column, map each capability to an engine in the roster and route by that map; add the harness's column here when it carries campaign work.
44
47
  - A driver launches another harness'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.
45
48
  - `.agents/transports/<harness>.md` owns each bench's invocation, sandbox, journal, and recovery. `.claude/agents/` and `.codex/agents/` hold one file per role.
46
49
 
@@ -49,21 +52,59 @@ The harness's own engine orchestrates: Claude Fable 5.1 or Claude Opus 5.5 in Cl
49
52
  - 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`.
50
53
  - Route all context absorption, distillation, broad mapping, and exploratory or fishing reads to `grok` on Cursor Grok 4.7 Extra High: terrain, prior art, diff sweeps, scattered sources. Keep decision-bearing reading with the decision owner. Fall back to `distiller` or `researcher` only when the Cursor bench is dark, and record the fallback; ease or cost never authorizes a fallback.
51
54
  - Keep small tedious precise tasks native: Claude Haiku in Claude, Codex Luna in Codex. Use `scout` for an exact bounded lookup; keep bench drivers, `checker`, and `verifier` on their mapped native engines. A bounded file scope does not turn context absorption or exploratory reading into a native lookup.
55
+ - Route a unit that authors path-containment, import-resolution-boundary, unescaped-input, or credential-exposure proofs to `opus` from the start where `opus` runs on Claude, and record the Codex bench dark for that unit only. Under native Codex roles, report a harness refusal through § Deviation protocol.
52
56
  - Route gates to `verifier`. A writer's self-reported gate is not evidence.
57
+ - Under the Codex mapping, put falsify lanes on Astra or Sol at high effort; keep Luna for gates and verifier runs, never for a lane that must resolve runtime claims.
53
58
  - Work directly on a one-file change or a one-line fix, subject to the preceding routing rules. Route standalone lookups through `scout`. Dispatch when isolation, parallelism, a second engine, or a large read pays for the brief.
54
59
 
55
60
  ## Sessions and consultation
56
61
 
57
62
  - Before launching a unit, check the roster for an existing session whose responsibility, model, permissions, workspace, and retained context fit the task, and resume it. Keep related tasks for one responsibility in that session.
58
63
  - Start a fresh session when no suitable session survives, the work is unrelated, or retained context would compromise the judgment. Use fresh contexts for independent review and the blind design round. An agent that helped design or implement the subject cannot independently review that contribution.
59
- - Record the session identity separately from its task, turn, process, and message address. Record each session's harness, provider, model, options, workspace, responsibility, owned paths, continuation address, latest task, and evidence paths in the roster, and preserve its prior task results.
64
+ - Record the session identity separately from its task, turn, process, and message address. Record each session's harness, provider, model, options, workspace, responsibility, owned paths, continuation address, most recent task, and evidence paths in the roster, and preserve its prior task results. The roster is `coord/roster.md` of the live `orkestrel-parallel` round, or `tmp/units/roster.md` when no round is live.
60
65
  - Treat a live writer as an agent with an active assignment and edit authority. A retained session without an assignment holds no resource merely by existing. Preserve an explicit hold until its owner releases it.
61
66
  - Continue a unit through compaction. Before a handoff or context limit, record decisions, changed instructions, source identity, unresolved questions, failed and passing evidence, active process identities, ownership, and the next action. Compaction neither completes a task nor releases its files or processes.
62
67
  - On continuation, the Orchestrator sends the next bounded objective and the facts changed after the last turn. The continued agent reads changed or missing authority and the source regions that objective needs, and rechecks mutable facts such as source state and process liveness. Do not repeat unchanged bulk reads merely because a unit resumes.
63
68
  - Consult a suitable peer when a consequential approach remains open, evidence conflicts, or repeated attempts stop narrowing a failure. Give the peer the question, relevant evidence, attempted approaches, constraints, and requested answer. Use an existing specialist when its context helps and a fresh peer when the question needs an independent challenge.
64
69
  - Keep consultation read-only and bounded. Ask for a recommendation, its evidence, uncertainty, and a concrete next check. The executor retains the work; the Orchestrator rules on scope and acceptance. Advice grants no authority and does not satisfy an independent review gate.
65
70
  - Resolve conflicting advice against the contract and observable evidence. Do not add consultation to routine steps or repeat it without a changed question or evidence.
66
- - When a requested transport fails, record the failure and whether a child was created. Before retrying an uncertain launch, inspect the recorded task or session. Use a permitted fallback with its actual model and options disclosed; retry a refused route only after a relevant condition changes.
71
+ - When a requested launch channel fails, record the failure and whether a child was created. Before retrying an uncertain launch, inspect the recorded task or session. Use a permitted fallback with its actual model and options disclosed; retry a refused route only after a relevant condition changes.
72
+
73
+ ## Memory
74
+
75
+ - Agent memory is per user and per machine; it travels with neither the repository nor the harness. Keep only machine-local facts and pointers to tracked files there: paths, accounts, engine availability, process ids.
76
+ - When a ruling, correction, or lesson arrives, write it to its tracked home in the same turn: ecosystem law in the scaffold repository, a package decision in its campaign folder, a harness mechanic on its page under `.agents/skills/orkestrel-parallel/references/`, a platform quirk on its page under `.agents/platforms/`. No tracked file cites memory.
77
+
78
+ ## Pace
79
+
80
+ - Spend process only where it changes a result. Launch, run, and report: no fixed clock windows, readiness-only turns, per-command acknowledgments, hash pins of a brief, or process queries beyond the recorded process ids.
81
+ - When a verifier lane fails in its harness rather than in the gate, run the gate once yourself and read its exit code; write no comparator, snapshot, or retry chain to obtain evidence.
82
+ - Keep valid receipts. Re-run a check only when its inputs, configuration, environment, or claim changed; never repeat a passing check to collect another receipt.
83
+ - Ask the user only for a decision that is theirs: scope, the spend ceiling and stop line § Hold the plan names, a conflicting ruling, a credential, publication, or a commit or push the law reserves. Decide routine matters yourself, such as time and lane allowances, retries, and order, and report them, with time in whole minutes.
84
+ - Never end a turn with work pending and nothing that will wake the session: run the work as a tracked background command or a child whose completion notifies, or schedule a wake. While a lane runs, continue independent work.
85
+
86
+ ## Hold the plan
87
+
88
+ - Open with the goal and acceptance criteria per `AGENTS.md` § Work loop, then estimate the scope: the units, the review and evidence each needs, and what stays out. When the estimate is large, agree with the user the estimate, the spend ceiling, and the stop line: how much lane time the work can take, and the point at which work stops and reports.
89
+ - Before each unit, name the plan step it serves. Cut a unit no step needs; set an unplanned idea aside in the plan and return to the step.
90
+ - Add a tracked file only where the request, the plan, or a rule names it.
91
+ - After every unit return, unexpected result, or user message, compare the work with the plan: mark what is done, restate the next step, and set aside what no longer serves the goal.
92
+ - When the work outgrows its estimate, stop, re-estimate, and bring the user the choice to cut, defer, or extend before continuing.
93
+ - When the user questions the plan, test it against the evidence in hand: reopen it where the evidence disagrees and report what changed; where the evidence holds, answer with that evidence.
94
+ - Answer a status question before dispatching more work, and close every report the same way: the goal, what is done against it, what is measured, what remains, and the next step.
95
+
96
+ ## Depth, breadth, and machinery
97
+
98
+ - Size the effort to the task before spending: a lookup takes one lane, routed per § Routing, and only open-ended work with independent, high-value parts fans out, per § Parallelism.
99
+ - Locate the evidence with short broad probes before any deep pass: a run of the shipped command, a census, a search. Go deep only on a defect or gap a run has shown, in one lane, with the narrowest instrument that answers it: a counting probe or a mutation.
100
+ - When a failure recurs, read the exact input and output of the failing case before adding capability, and fix the cause.
101
+ - Deepen in rounds and report a usable result after each. Stop at the first result that clears the acceptance criteria and name the gaps that remain.
102
+ - Prove a change in one consumer, with its gate green, before spreading it to the rest.
103
+ - Use the simplest method that can clear the criteria, starting with what an `@orkestrel` package already provides, looked up per `AGENTS.md` § Non-negotiable rules. Add machinery only after that method fails a measured check, and build nothing for a hypothetical need.
104
+ - Do a one-use step inline. Keep a tool one unit runs more than once as a throwaway under `tmp/`, deleted with the unit and never committed.
105
+ - When a second unit, package, or campaign needs a tool, move it out of `tmp/`: into a skill script under `.agents/skills/` when it only runs a procedure, and into its own package, with its own tests and release, when it carries correctness claims of its own or an identity consumers pin, replay, or audit. Write the promotion path and the removal path when you first build it.
106
+ - When a throwaway grows a mechanism per step instead of answering its question, stop and map it against the owning packages before building more.
107
+ - Ship the proven fix first, and run experiments behind it under a stated cap.
67
108
 
68
109
  ## Size gate
69
110
 
@@ -76,18 +117,19 @@ The harness's own engine orchestrates: Claude Fable 5.1 or Claude Opus 5.5 in Cl
76
117
  | large | one independent round: `planner` and `analyst`, same brief, clean contexts, blind to each other | disjoint units in parallel | one `orkestrel-falsify` round on the integrated result | `verifier` tree-wide, once |
77
118
 
78
119
  - Never run a review on a small change. Never run a second design round on the same brief.
79
- - A fix round re-audits the repaired claim only. A fix that adopted the reviewer's prescription verbatim closes with a mutation probe (disable the load-bearing line, watch the test fail, restore it). A fix that departs from it gets one pass by an independent reviewer per § Engines.
120
+ - A review judges types, tests, and implementation. It reports comment, TSDoc, or guide wording only where the text contradicts the final behavior, and no fix round opens for prose alone.
121
+ - A fix round re-audits the repaired claim only. A fix that adopted the reviewer's prescription verbatim closes with a mutation probe (disable the load-bearing line, watch the test fail, restore it); `node .agents/skills/orkestrel-falsify/scripts/mutate.ts --edits EDITS.md -- COMMAND` runs the probe and proves the restore. A fix that departs from it gets one pass by an independent reviewer per § Engines.
80
122
  - When review rounds at one seam keep surfacing defects without converging on their source, follow `.agents/skills/orkestrel-falsify/SKILL.md` § End the depth search.
81
123
  - An all-confirmed round ends the audit. A round needs an added or repaired claim to test; reviewer appetite is not a subject.
82
124
 
83
125
  ## Campaign
84
126
 
85
- A large change runs these phases once each, in order, and ends when the exit criterion written at the start is met.
127
+ A large change opens with a concise goal and its exit criterion, short enough to serve as a goal prompt. It runs these phases once each, in order, and ends when that exit criterion is met.
86
128
 
87
129
  1. **Absorb.** Map the terrain with the `orkestrel-scout` skill's `map.ts`, then `grok` distills it and the prior art. In an Orkestrel repository, `verifier` or another tool-capable role collects manifests, lockfiles, installed declarations, and registry readings, and `orkestrel` reconciles them.
88
- 2. **Design.** One independent round: `planner` (subjective) and `analyst` (objective) on one brief, clean contexts, blind to each other. Reconcile into one plan: units, owned files, dependencies, parallel and serial order, acceptance criteria, exit criterion, routing ledger.
130
+ 2. **Design.** One independent round: `planner` (subjective) and `analyst` (objective) on one brief, clean contexts, blind to each other. Reconcile into one plan: units, owned files, dependencies, parallel and serial order, acceptance criteria, exit criterion, ledger.
89
131
  3. **Implement.** Dispatch units per § Routing and § Parallelism.
90
- 4. **Integrate.** Apply returned patches to shared files serially. A type, mechanism, or criterion found here is a successor unit, never an integration edit.
132
+ 4. **Integrate.** Apply returned patches to shared files serially with `node .agents/skills/orkestrel-dispatch/scripts/patch.ts EDITS.md --plan`, then `--apply`. A type, mechanism, or criterion found here is a successor unit, never an integration edit.
91
133
  5. **Audit.** One `orkestrel-falsify` round on the integrated result, an independent reviewer per § Engines in each lane; add `checker` when the criteria are mechanical.
92
134
  6. **Verify.** `verifier` runs the tree-wide gates once.
93
135
  7. **Re-baseline.** Strike satisfied units, restate transformed ones, add units the exit criterion already required. A re-baseline never moves the exit criterion; that needs the user.
@@ -97,9 +139,12 @@ A large change runs these phases once each, in order, and ends when the exit cri
97
139
 
98
140
  - Parallelize independently owned work when useful progress can overlap. Reuse suitable sessions per § Sessions and consultation, bound each objective, and count coordination and verification costs when choosing the lanes. § Cache governs model and tool settings.
99
141
  - Judgment stays narrow: a design or review pass is at most the two lanes the size gate names, each in a clean context, blind to the other, and it runs once. Never fan judgment out further, and never run it as a loop.
142
+ - Keep every lane, in this session and in peer sessions on the same machine, within the host budget of `.agents/skills/orkestrel-parallel/SKILL.md` § Bound the host.
100
143
  - One writer per checkout, except under `orkestrel-parallel`: there, at most three writers share one checkout, each owns disjoint files and disjoint regions of shared files, and one runner lane owns every test, check, and build process. Otherwise give parallel writers disjoint owned files, and give a writer its own worktree under `tmp/worktrees/` only when two units must write the same files at once. Commit a checkpoint before a writing dispatch.
101
- - Shared files are report-only; a unit returns an exact patch. Under `orkestrel-parallel`, a writer edits its owned regions of a shared file directly.
102
- - Scope validation by the claim and its input dependencies, not by writer ownership alone. Under `orkestrel-parallel`, the runner owns checks and obtains the required write holds. Preserve valid receipts; rerun a check when its inputs, configuration, environment, or claim changed. Never run tree-wide `format`, lint `--fix`, or `build` beside a live writer.
144
+ - Fold every branch, clone, copy, or worktree an agent creates back into the original checkout's main branch with its changes left uncommitted there, so the user sees the whole difference from that branch. Commit inside the branch, clone, copy, or worktree as its unit needs, then remove it and delete its branch.
145
+ - In a checkout another session shares, read the branch and `git status` before a write, and stop and ask the user when another session's uncommitted work is present.
146
+ - Shared files are report-only; a unit returns an exact patch as an edit file that `.agents/skills/orkestrel-dispatch/scripts/patch.ts` applies. Under `orkestrel-parallel`, a writer edits its owned regions of a shared file directly.
147
+ - Scope validation by the claim and its input dependencies, not by writer ownership alone. Under `orkestrel-parallel`, the runner owns checks and obtains the required write holds; § Pace rules on reruns. Never run tree-wide `format`, lint `--fix`, or `build` beside a live writer.
103
148
  - One Grok lane at a time; queue the rest. An empty lane beside a live probe is starvation, not darkness.
104
149
  - The Orchestrator's own sweep is a writing dispatch: run it before or after the units, never beside them.
105
150
 
@@ -119,40 +164,32 @@ A large change runs these phases once each, in order, and ends when the exit cri
119
164
 
120
165
  Every working file lives under the checkout's gitignored `tmp/`, in the directory its kind names.
121
166
 
122
- | Directory | Holds |
123
- | ------------------------------------------ | -------------------------------------------------------------------------------------------------- |
124
- | `tmp/claude/`, `tmp/codex/`, `tmp/cursor/` | bench briefs, launch scripts, journals, `.err` files, last-message files, login logs, per harness |
125
- | `tmp/units/` | native unit briefs, reports, claims files, and campaign records |
126
- | `tmp/probes/` | runtime probes the `probe` Vitest project collects and the `probe` MCP server arms |
127
- | `tmp/type/` | the type stage's workspace mirror, owned by `@orkestrel/probe` |
128
- | `tmp/captures/` | screenshots, resolved-style snapshots, and other capture portfolios |
129
- | `tmp/browsers/` | the journeys a `browse` server saves, their runs and captures, and its profiles under `.profiles/` |
130
- | `tmp/worktrees/` | worktrees the Orchestrator creates for a parallel writer |
167
+ | Directory | Holds |
168
+ | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
169
+ | `tmp/claude/`, `tmp/codex/`, `tmp/cursor/` | bench briefs, launch scripts, journals, `.err` files, last-message files, login logs, per harness |
170
+ | `tmp/units/` | native unit briefs, reports, claims files, and unit records |
171
+ | `tmp/probes/` | runtime probes the `probe` Vitest project collects and the `probe` MCP server arms, and a skill script's scratch under its own subdirectory (`census/`, `lint/`, `mutate/`) |
172
+ | `tmp/type/` | the type stage's workspace mirror, owned by `@orkestrel/probe` |
173
+ | `tmp/captures/` | screenshots, resolved-style snapshots, and other capture portfolios |
174
+ | `tmp/browsers/` | the journeys a `browse` server saves, their runs and captures, and its profiles under `.profiles/` |
175
+ | `tmp/worktrees/` | worktrees the Orchestrator creates for a parallel writer |
131
176
 
132
177
  ## .orkestrel layout
133
178
 
134
- `.orkestrel/` is the campaign folder: tracked, deleted in the acceptance commit, never a home for a rule. A nested directory belongs to one package; a file at the top level belongs to the ecosystem.
135
-
136
- | Path | Holds |
137
- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
138
- | `.orkestrel/<package>/` | one package's live campaign: its `plan.md`, its routing ledger, the verdicts of its open seams, and its exposure records |
139
- | `.orkestrel/plan.md` | the live fleet campaign's plan: goal, exit criterion, packages, layer order, and the units each package owes |
140
- | `.orkestrel/ledger.md` | the fleet campaign's routing ledger: every dispatch, engine, and bench substitution across packages |
141
- | `.orkestrel/release.md` | the live release wave: its layers, each package's bump ruling with its evidence, the round each package landed in, and standing readings |
142
-
143
- - Write a file about one package under that package's directory and never at the top level; write a file about two or more packages at the top level and never under a package.
144
- - Delete a package directory in that campaign's acceptance commit and a top-level file when the wave or fleet campaign it records closes. `sweep.ts --report` lists both.
179
+ `.orkestrel/` is the campaign folder, never a home for a rule. `.claude/rules/campaign.md` owns its layout, its content, its deletion, and how a session starts from it and hands it off. Read that rule at the start of every session in a repository that has the folder, whether or not the harness loads it by path.
145
180
 
146
181
  ## Dispatch
147
182
 
148
183
  `orkestrel-dispatch` owns the brief template, launch mechanics for native and bench units, long-running commands, liveness, and recovery. Load it before a bench lane, a campaign unit, or any command that outlives the turn. The floor that follows binds every dispatch.
149
184
 
150
- - A small native unit's brief is the dispatch message: scope, law references, expected result. Write a brief file with the dispatch skill's `scripts/brief.ts` at `tmp/units/<unit>-brief.md` (native) or `tmp/<bench>/<unit>-brief.md` (bench) when the unit is a bench lane, belongs to a campaign, or may need re-running. A re-run gets `<unit>-brief-<n>.md`; never edit a launched brief.
185
+ - Write each brief per `.agents/skills/orkestrel-dispatch/SKILL.md` § Write the brief. A brief file lives at `tmp/units/<unit>-brief.md` (native) or `tmp/<bench>/<unit>-brief.md` (bench), and a re-run at `<unit>-brief-<n>.md`.
151
186
  - State in every brief: role and engine, one objective, the evidence slice, owned and off-limits files, the acceptance criteria cheap-first, the return shape, the deviation contract, and that the executor performs the work itself and spawns nothing.
152
187
  - Capture a campaign unit's report to `tmp/units/<unit>-report.md`, or read the bench's last-message file.
153
188
  - Launch every multi-minute command as a harness-tracked background command through `node .agents/skills/orkestrel-dispatch/scripts/launch.ts` under a cap sized from prior runs, and read a bench answer with that skill's `scripts/result.ts`. Every launcher, probe, and instrument is a TypeScript file run by `node`, never a shell or Python script. Read liveness from the artifact the work produces. Kill only a recorded process id, never a pattern, and confirm the process and its descendants are gone before another writer takes its files.
154
189
  - Probe a bench with the dispatch skill's `scripts/bench.ts` before its first lane, and re-read liveness at every dispatch after a failure.
155
190
  - Send a changed decision to every affected session before it continues, including an idle session selected for reuse. Preserve the original brief and supply a checked successor brief when scope or acceptance changes.
191
+ - Commit every tracked record edit before a dispatch whose entry reads `git status`, and edit only ignored files while that unit runs.
192
+ - `.agents/platforms/<platform>.md` owns the host shell's commands and quirks; read it before the first command on that host. On a host family with no page, write one from measurement before the first long command.
156
193
 
157
194
  ## Deviation protocol
158
195
 
@@ -163,14 +200,14 @@ The Orchestrator triages: obvious correction → tighten and re-dispatch; missin
163
200
  ## Benches
164
201
 
165
202
  - 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.
166
- - For a harness that uses a bench, record a dispatch that fails on auth, quota, model access, or network as bench dark and re-plan the lane: Astra bench dark → Claude Opus holds the objective lane too; Claude Opus bench dark → 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 under the Codex mapping. When Haiku refuses the read, re-dispatch the role with `model: sonnet`. Record every substitution in the routing ledger. For a native role failure, use § Deviation protocol without a Claude fallback prerequisite.
203
+ - For a harness that uses a bench, record a dispatch that fails on auth, quota, model access, or network as bench dark and re-plan the lane: Astra bench dark → Claude Opus holds the objective lane too; Claude Opus bench dark → 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 under the Codex mapping. When Haiku refuses the read, re-dispatch the role with `model: sonnet`. Record every substitution in the brief and in the commit that carries the unit. For a native role failure, use § Deviation protocol without a Claude fallback prerequisite.
167
204
  - Never assign Grok a design or review lane in Claude Code or Codex.
168
205
  - Journal every bench run under `tmp/<bench>/` with its session id. Never commit a journal.
169
206
 
170
207
  ## Cleanup
171
208
 
172
- - When a unit is accepted, carry its measurements, unresolved findings, and any instrument worth keeping into the commit message, the campaign ledger, or a test, then delete its `tmp/units/<unit>-*` files and its bench journals.
173
- - `.orkestrel/` holds only what § .orkestrel layout names. Delete a verdict when its seam closes and the package directory in the acceptance commit; git history is the archive.
209
+ - When a unit is accepted, carry its measurements, unresolved findings, and any instrument worth keeping into the commit message, a tracked design, or a test, then delete its `tmp/units/<unit>-*` files and its bench journals.
210
+ - `.claude/rules/campaign.md` owns what `.orkestrel/` holds and when each file goes; git history is the archive.
174
211
  - Delete a probe from the source tree before the unit returns; promote a probe that settled a claim into a test.
175
212
  - Run `node .agents/skills/orkestrel-dispatch/scripts/sweep.ts --report` at acceptance; it lists leftovers under `tmp/` and `.orkestrel/` by age and deletes nothing. Run the same script with `--tmp` after the last live unit exits; it deletes files older than its threshold and refuses while a journal is changing.
176
213
  - A campaign artifact never lives in the package it is about.
@@ -179,12 +216,15 @@ The Orchestrator triages: obvious correction → tighten and re-dispatch; missin
179
216
 
180
217
  - Keep the model, options, tools, and instruction prefix unchanged while they fit the task. Check the active provider and harness before claiming that a change preserves or invalidates caching. Treat a continued session as retained context, not as a cache hit; a cache hit depends on the provider, the prefix, and the retention window. Claim a saving only from recorded usage.
181
218
  - Keep the always-on instruction set small and load supporting rules by scope. When instructions change, use the harness's documented reload mechanism and tell affected agents what changed. Do not assume a file edit updates an active session.
182
- - Give reading and driver roles no instruction files (`omitClaudeMd` in Claude Code) when their charter carries the floor they need.
219
+ - Give reading and driver roles no instruction files when their charter carries the floor they need.
183
220
  - Route bulk reads per § Routing and keep only the distillate.
184
221
 
185
222
  ## Acceptance
186
223
 
187
224
  - No writer's and no bench's self-assessment is authoritative. The Orchestrator accepts after the review and the gates the size gate names.
188
225
  - Accept when the exit criterion is met and the gates are green. Reopening an accepted criterion is the user's instruction, not a reviewer's finding.
189
- - Substitute an engine only when the same session recorded the bench dark; name the fallback in the ledger.
226
+ - Before calling work ready, try the shipped result as the user will, on the build they run, and report what did not run.
227
+ - Substitute an engine only when the same session recorded the bench dark; name the fallback in the brief and the carrying commit.
228
+ - In a repository whose package the registry already serves, commit on the main branch and push it only on the user's go-ahead.
229
+ - Commit by explicit paths. Before a push, read `git log @{upstream}..` and push only commits meant to publish together; hold a push while a commit depends on an unpublished local pin.
190
230
  - Publishing is the user's decision and credential; `orkestrel-publish` owns the release procedure, the bump rules, and the dependency-tarball rules.
@@ -0,0 +1,15 @@
1
+ # POSIX host
2
+
3
+ The commands an agent runs on a Linux or macOS host. `.claude/rules/portability.md` owns product code that runs on these hosts; `.agents/skills/orkestrel-dispatch/references/launch.md` owns the portable launch and kill procedure this page serves.
4
+
5
+ ## Processes
6
+
7
+ - Read liveness with `kill -0 <pid>`; exit 0 means alive.
8
+ - List descendants by running `ps -A -o pid= -o ppid=`, taking the rows whose parent is the recorded pid, then each listed id in turn. Never take a pid from `pgrep -f` or `pkill -f`.
9
+ - Kill each listed id and the recorded pid with `kill -KILL <id>`. `launch.ts` kills only the command at its cap on this host; kill the listed descendants of a capped run by hand.
10
+ - No detach procedure is proven on this host. Before a run relies on one, prove that a detached run outlives the harness's idle stop, and record the procedure here with its date.
11
+
12
+ ## Shell
13
+
14
+ - Gate a command on the previous one with `&&`, and read `$?` immediately after the command it reports on.
15
+ - Pass arguments as an array from a TypeScript launcher rather than through shell quoting.
@@ -0,0 +1,37 @@
1
+ # Windows host
2
+
3
+ The commands an agent runs on a Windows host, and their quirks. `.claude/rules/portability.md` owns product code that runs on Windows; `.agents/skills/orkestrel-dispatch/references/launch.md` owns the portable launch and kill procedure this page serves.
4
+
5
+ ## Processes
6
+
7
+ - Read liveness with `Get-Process -Id <pid>` in PowerShell, or under Git Bash from the output of `tasklist //FI "PID eq <pid>" //NH`: a row naming the pid means alive, and the `INFO:` line means gone. Never read liveness from `tasklist`'s exit code, `kill -0`, or `ps -eo`.
8
+ - List descendants with `Get-CimInstance Win32_Process -Filter "ParentProcessId=<pid>"`, applied to each listed id in turn. Under Git Bash, run it through `powershell -NoProfile -Command`, and write every Windows slash option as `//`.
9
+ - Kill a recorded tree with `taskkill /pid <pid> /T /F`. `launch.ts` kills the tree at its cap on this host.
10
+ - Detach a run from the session's process tree with WMI: `Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments @{ CommandLine = '<command>' }`. The run starts under `WmiPrvSE.exe`, outside the session's job and process tree (verified 2026-10-16). It receives the user's registry environment, not the caller's, so pass each value it needs on its command line. Record its journal and pid-file paths before the launch.
11
+ - Spawn npm without a shell through its JavaScript entry: `node <node directory>/node_modules/npm/bin/npm-cli.js <arguments>`. A `.cmd` shim cannot start without a shell, and `launch.ts` reports exit `127`.
12
+ - A child CLI can leak orphaned `conhost.exe` processes and open console windows. Count them with `Get-Process conhost` at each launch while such a lane is live.
13
+
14
+ ## PowerShell 5.1
15
+
16
+ - Chain with `;` and gate with `if ($?) { ... }`; `&&` and `||` are parse errors.
17
+ - Edit text with the harness's file tools, never `Get-Content` piped through `-replace` into `Set-Content`. `-replace` matches case-insensitively, `Set-Content` writes the ANSI code page, `Set-Content -Encoding utf8` and `Out-File` write a byte-order mark, and the round trip turns non-ASCII punctuation into mojibake.
18
+ - Write a commit message to a file with the harness's file tool and commit with `git commit -F <file>`. A here-string carrying double quotes splits into stray arguments, and a byte-order mark in the file lands in the commit subject.
19
+ - Never pipe a command whose exit code gates the next step, a `node` probe included, into `Select-Object -First` or `-Last`. The cut pipeline kills the command early and leaves a misleading `$LASTEXITCODE`. Run it bare, read `$LASTEXITCODE`, or decide from `git status --porcelain` and `git rev-parse`.
20
+ - PowerShell drops a bare `--` before a native command, so `npm run <script> -- <arguments>` loses the separator. Run the tool's own entry with an argument array, or call `npm.cmd`.
21
+ - `Start-Process -ArgumentList` splits an element that contains spaces into several arguments. Put the launch in a TypeScript file run by `node`. `Start-Process` also detaches with no completion notice.
22
+ - Pass an absolute path to every .NET file call; `[System.IO.File]` resolves a relative path against the process directory, which `Set-Location` does not move.
23
+ - `Get-Content` without `-Encoding` reads a UTF-8 file with no byte-order mark as ANSI. Read with `-Encoding utf8` before concluding the bytes are corrupt.
24
+ - `*>` writes UTF-16LE. Redirect large output through a Node writer.
25
+ - Inside a double-quoted string, write `${name}:`; `$name:` parses as a drive reference.
26
+ - `Get-FileHash` prints uppercase hexadecimal, and Node's `createHash` prints lowercase. Compare digests case-insensitively.
27
+ - Redirecting a native command's standard error with `2>&1` wraps each line in an error record and sets `$?` to false on success. Let the harness capture standard error.
28
+
29
+ ## Release packs and terminals
30
+
31
+ - Git Bash ships no `script` binary, so an agent cannot give npm a TTY there; the operator runs a browser-authorized `npm login` or `npm publish` in a real terminal.
32
+ - A pack made on Windows records `0644` for an entry git tracks as `100755`. Compare release packs between hosts by paths, sizes, and content hashes, and report executable-mode differences separately.
33
+
34
+ ## Deleting untracked files
35
+
36
+ - When a sweep you run by hand deletes untracked files, send them to the Recycle Bin through a shell file operation with undo, never permanent deletion, and report what went there. Leave emptying the bin to the user; hand them `Clear-RecycleBin -Force`.
37
+ - Remove a worktree with `git worktree remove`. Delete a leftover `node_modules` junction without recursing into its target.
@@ -19,17 +19,15 @@ Invoke `$orkestrel-harden` for each package implementation unit. This skill owns
19
19
 
20
20
  ## Execute the campaign
21
21
 
22
- 1. **Create one registry.** Record the campaign goal, authoritative session, repositories, branches, dirty state, declared/resolved versions, dependency edges, guide state, write scope, and exclusions.
23
- 2. **Bound context.** Scout only packages and consumers relevant to the behavior. Use registry/canonical sources for the rest of the fleet.
24
- 3. **Trace the real flow.** Follow public types and one concrete consumer end to end. Identify where ergonomics break and which layer owns the reusable mechanism.
25
- 4. **Assign ownership.** Keep core host-independent. Keep server free of browser assumptions and browser free of Node assumptions. Keep product policy in applications.
26
- 5. **Judge downstream friction.** Treat consumer gymnastics as evidence, not automatic proof. Decide whether the consumer misused a coherent API or exposed a general upstream defect.
27
- 6. **Design in dependency order.** Update guides and types first in the lowest owning package, then update every affected consumer atomically. Do not add compatibility shims.
28
- 7. **Harden each unit.** Apply `$orkestrel-harden` to every touched package with the exact owned scope and acceptance criteria.
29
- 8. **Prove the round trip.** Put integration coverage at the highest package that can exercise the real composed behavior. Retain focused deterministic coverage in lower packages.
30
- 9. **Validate local changes safely.** When necessary, use built artifacts in an isolated consumer and prove the resolved graph. Restore temporary manifest/lockfile state.
31
- 10. **Verify topologically.** Run local gates for touched packages from dependencies to dependents and inspect relevant generated outputs.
32
- 11. **Review the campaign.** Run the review `.agents/orchestration.md` § Size gate names on the integrated result, with one cross-package architecture and ergonomics pass over the whole graph. Do not review each unit separately.
22
+ Run `.agents/orchestration.md` § Campaign for the phases, the review, and the gates, and `$orkestrel-harden` for each package unit. Record the live state of every relevant repository per [fleet.md](references/fleet.md) § Verify live state. This skill adds:
23
+
24
+ 1. **Trace the real flow.** Follow public types and one concrete consumer end to end. Identify where ergonomics break and which layer owns the reusable mechanism.
25
+ 2. **Assign ownership.** Keep core host-independent. Keep server free of browser assumptions and browser free of Node assumptions. Keep product policy in applications.
26
+ 3. **Judge downstream friction.** Treat consumer gymnastics as evidence, not automatic proof. Decide whether the consumer misused a coherent API or exposed a general upstream defect.
27
+ 4. **Prove the round trip.** Put integration coverage at the highest package that can exercise the real composed behavior. Retain focused deterministic coverage in lower packages.
28
+ 5. **Validate local changes safely.** When necessary, use built artifacts in an isolated consumer and prove the resolved graph, per [fleet.md](references/fleet.md) § Validate local packages.
29
+
30
+ The review is one cross-package architecture and ergonomics pass over the whole graph, not one per unit.
33
31
 
34
32
  ## Accept the result
35
33
 
@@ -40,7 +38,6 @@ Completion requires:
40
38
  - every changed public contract, consumer, test, and guide is aligned;
41
39
  - real round-trip behavior is proven at the correct layer;
42
40
  - package versions/ranges/guides are reported from live evidence;
43
- - every touched repository's requested local gates are green;
44
- - no in-scope work is deferred.
41
+ - every touched repository's requested local gates are green.
45
42
 
46
43
  Report the final package graph, ownership decisions, shipped behavior, exact verification, residual risk, and any user decision still required.
@@ -1,5 +1,7 @@
1
1
  # Fleet alignment
2
2
 
3
+ This reference governs fleet alignment across repositories: verifying live state, planning dependency order, and verifying consumers.
4
+
3
5
  ## Verify live state
4
6
 
5
7
  For every relevant repository, record:
@@ -29,19 +31,11 @@ Keep one authoritative session per package. Re-establish live state before actin
29
31
 
30
32
  ## Validate local packages
31
33
 
32
- When a dependent must verify a local package:
33
-
34
- - build the dependency;
35
- - consume its built artifact only in an isolated or explicitly authorized consumer;
36
- - prove every relevant resolution points to the intended artifact;
37
- - run the dependent's targeted then final local gates;
38
- - restore temporary overrides, manifest edits, and lockfile state.
39
-
40
- Do not treat an undeclared source-checkout import as consumer proof.
34
+ When a dependent must verify a local package, pin it to a built tarball in an isolated or explicitly authorized consumer, run the dependent's targeted then final local gates, and restore the pin, per `.agents/skills/orkestrel-publish/references/release.md` § Fix a dependency before it publishes. Do not treat an undeclared source-checkout import as consumer proof.
41
35
 
42
36
  ## Align guides and verification
43
37
 
44
- Refresh dependency guides through the current scaffold workflow when the owning repository and scope permit it. Report drift rather than hand-editing a vendored guide whose canonical source lives elsewhere.
38
+ Refresh dependency guides with `scaffold catalog` when the owning repository and scope permit it. Report drift rather than hand-editing a vendored guide whose canonical source lives elsewhere.
45
39
 
46
40
  Run package-local verification from dependencies to dependents. A passing lower package does not prove its consumer; a passing consumer does not replace lower-package invariants.
47
41
 
@@ -42,6 +42,6 @@ Place each proof at the highest useful layer:
42
42
 
43
43
  Use the actual packages and transports. Use temporary resources or protocol-faithful fixture servers for deterministic network boundaries. Use the real external service when its behavior is the claim. Never simulate an owned package with a mock or fake.
44
44
 
45
- When the claim is that a foreign client can consume the stack — an editor, an agent CLI, a third-party protocol client — one representative real client of that class drives the surface end to end before the claim ships. Record the exact commands, the authentication and approval model that client needed, and every part of the surface it could not reach. Protocol-level tests prove the protocol; only the client proves the integration.
45
+ Prove a claim that a foreign client can consume the stack per `.agents/skills/orkestrel-harden/references/hardening.md` § Use real implementations.
46
46
 
47
47
  Test both successful composition and contract disagreement: invalid options, unavailable capability, partial failure, abort/cleanup, version mismatch, and lifecycle ordering where applicable.