@orkestrel/scaffold 0.0.77 → 0.0.78

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 (157) hide show
  1. package/dist/agents/skills/orkestrel-dispatch/scripts/bench.js +204 -0
  2. package/dist/agents/skills/orkestrel-dispatch/scripts/brief.js +102 -0
  3. package/dist/agents/skills/orkestrel-dispatch/scripts/cite.js +95 -0
  4. package/dist/agents/skills/orkestrel-dispatch/scripts/helpers.js +207 -0
  5. package/dist/agents/skills/orkestrel-dispatch/scripts/launch.js +108 -0
  6. package/dist/agents/skills/orkestrel-dispatch/scripts/login.js +114 -0
  7. package/dist/agents/skills/orkestrel-dispatch/scripts/result.js +108 -0
  8. package/dist/agents/skills/orkestrel-dispatch/scripts/sweep.js +156 -0
  9. package/dist/agents/skills/orkestrel-harden/scripts/discovery.js +196 -0
  10. package/dist/agents/skills/orkestrel-publish/scripts/compare.js +206 -0
  11. package/dist/agents/skills/orkestrel-publish/scripts/pins.js +93 -0
  12. package/dist/agents/skills/orkestrel-publish/scripts/wave.js +458 -0
  13. package/dist/agents/skills/orkestrel-publish/scripts/window.js +188 -0
  14. package/dist/agents/skills/orkestrel-scout/scripts/map.js +300 -0
  15. package/dist/agents/templates/brief.md +55 -0
  16. package/dist/bin/main.js +4 -2
  17. package/dist/bin/main.js.map +1 -1
  18. package/dist/host/AGENTS.md +77 -135
  19. package/dist/host/agents/orchestration.md +147 -998
  20. package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +2 -2
  21. package/dist/host/agents/skills/enterprise-bootstrap/references/inspection.md +1 -1
  22. package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/SKILL.md +6 -13
  23. package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/agents/openai.yaml +1 -1
  24. package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/references/fleet.md +5 -7
  25. package/dist/host/agents/skills/{orkestrel-build-application → orkestrel-build}/SKILL.md +11 -22
  26. package/dist/host/agents/skills/{orkestrel-build-application → orkestrel-build}/agents/openai.yaml +1 -1
  27. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +8 -16
  28. package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +3 -3
  29. package/dist/host/agents/skills/orkestrel-debrief/references/retention.md +13 -13
  30. package/dist/host/agents/skills/orkestrel-dispatch/SKILL.md +61 -0
  31. package/dist/host/agents/skills/orkestrel-dispatch/agents/openai.yaml +4 -0
  32. package/dist/host/agents/skills/orkestrel-dispatch/references/bench.md +25 -0
  33. package/dist/host/agents/skills/orkestrel-dispatch/references/launch.md +32 -0
  34. package/dist/host/agents/skills/orkestrel-dispatch/scripts/bench.ts +259 -0
  35. package/dist/host/agents/skills/orkestrel-dispatch/scripts/brief.ts +110 -0
  36. package/dist/host/agents/skills/orkestrel-dispatch/scripts/cite.ts +115 -0
  37. package/dist/host/agents/skills/orkestrel-dispatch/scripts/helpers.ts +239 -0
  38. package/dist/host/agents/skills/orkestrel-dispatch/scripts/launch.ts +124 -0
  39. package/dist/host/agents/skills/orkestrel-dispatch/scripts/login.ts +123 -0
  40. package/dist/host/agents/skills/orkestrel-dispatch/scripts/result.ts +129 -0
  41. package/dist/host/agents/skills/orkestrel-dispatch/scripts/sweep.ts +157 -0
  42. package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +42 -193
  43. package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +38 -108
  44. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +35 -134
  45. package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/SKILL.md +10 -14
  46. package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/agents/openai.yaml +1 -1
  47. package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/hardening.md +3 -4
  48. package/dist/host/agents/skills/orkestrel-harden/scripts/discovery.ts +228 -0
  49. package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/SKILL.md +15 -23
  50. package/dist/host/agents/skills/orkestrel-journey/agents/openai.yaml +4 -0
  51. package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/captures.md +1 -1
  52. package/dist/host/agents/skills/{orkestrel-polish-surface → orkestrel-polish}/SKILL.md +25 -33
  53. package/dist/host/agents/skills/{orkestrel-polish-surface → orkestrel-polish}/agents/openai.yaml +1 -1
  54. package/dist/host/agents/skills/{orkestrel-polish-surface → orkestrel-polish}/references/capture-harness.md +3 -3
  55. package/dist/host/agents/skills/orkestrel-publish/SKILL.md +33 -20
  56. package/dist/host/agents/skills/orkestrel-publish/references/release.md +39 -0
  57. package/dist/host/agents/skills/orkestrel-publish/references/wave.md +22 -21
  58. package/dist/host/agents/skills/orkestrel-publish/references/window.md +27 -14
  59. package/dist/host/agents/skills/orkestrel-publish/scripts/compare.ts +220 -0
  60. package/dist/host/agents/skills/orkestrel-publish/scripts/pins.ts +114 -0
  61. package/dist/host/agents/skills/orkestrel-publish/scripts/wave.ts +629 -0
  62. package/dist/host/agents/skills/orkestrel-publish/scripts/window.ts +242 -0
  63. package/dist/host/agents/skills/orkestrel-scout/SKILL.md +28 -0
  64. package/dist/host/agents/skills/orkestrel-scout/agents/openai.yaml +4 -0
  65. package/dist/host/agents/skills/orkestrel-scout/scripts/map.ts +352 -0
  66. package/dist/host/agents/templates/brief.md +21 -142
  67. package/dist/host/agents/transports/claude-cli.md +21 -0
  68. package/dist/host/agents/transports/codex.md +38 -159
  69. package/dist/host/agents/transports/cursor.md +16 -65
  70. package/dist/host/claude/AGENTS.md +38 -0
  71. package/dist/host/claude/agents/analyst.md +14 -53
  72. package/dist/host/claude/agents/astra.md +26 -0
  73. package/dist/host/claude/agents/builder.md +14 -30
  74. package/dist/host/claude/agents/checker.md +13 -57
  75. package/dist/host/claude/agents/distiller.md +11 -26
  76. package/dist/host/claude/agents/grok.md +12 -35
  77. package/dist/host/claude/agents/opus.md +14 -30
  78. package/dist/host/claude/agents/planner.md +10 -44
  79. package/dist/host/claude/agents/researcher.md +11 -30
  80. package/dist/host/claude/agents/reviewer.md +11 -95
  81. package/dist/host/claude/agents/scout.md +9 -23
  82. package/dist/host/claude/agents/verifier.md +15 -33
  83. package/dist/host/claude/rules/documentation.md +8 -2
  84. package/dist/host/claude/rules/portability.md +7 -1
  85. package/dist/host/claude/rules/quality.md +36 -96
  86. package/dist/host/claude/rules/styles.md +3 -0
  87. package/dist/host/claude/rules/tests.md +6 -3
  88. package/dist/host/claude/rules/workspace.md +19 -15
  89. package/dist/host/claude/rules/writing.md +57 -108
  90. package/dist/host/claude/settings.json +5 -3
  91. package/dist/host/claude/skills/enterprise-bootstrap/SKILL.md +1 -1
  92. package/dist/host/claude/skills/{orkestrel-align-packages → orkestrel-align}/SKILL.md +2 -2
  93. package/dist/host/claude/skills/{orkestrel-build-application → orkestrel-build}/SKILL.md +2 -2
  94. package/dist/host/claude/skills/orkestrel-dispatch/SKILL.md +11 -0
  95. package/dist/host/claude/skills/orkestrel-falsify/SKILL.md +2 -1
  96. package/dist/host/claude/skills/{orkestrel-harden-package → orkestrel-harden}/SKILL.md +2 -2
  97. package/dist/host/claude/skills/{orkestrel-prove-journey → orkestrel-journey}/SKILL.md +2 -2
  98. package/dist/host/claude/skills/orkestrel-polish/SKILL.md +12 -0
  99. package/dist/host/claude/skills/orkestrel-scout/SKILL.md +11 -0
  100. package/dist/host/codex/agents/analyst.toml +14 -31
  101. package/dist/host/codex/agents/astra.toml +25 -0
  102. package/dist/host/codex/agents/builder.toml +13 -20
  103. package/dist/host/codex/agents/checker.toml +13 -27
  104. package/dist/host/codex/agents/distiller.toml +9 -22
  105. package/dist/host/codex/agents/grok.toml +11 -30
  106. package/dist/host/codex/agents/opus.toml +14 -22
  107. package/dist/host/codex/agents/orkestrel.toml +1 -1
  108. package/dist/host/codex/agents/planner.toml +11 -28
  109. package/dist/host/codex/agents/researcher.toml +10 -22
  110. package/dist/host/codex/agents/reviewer.toml +11 -27
  111. package/dist/host/codex/agents/scout.toml +11 -17
  112. package/dist/host/codex/agents/verifier.toml +16 -12
  113. package/dist/host/codex/config.toml +18 -21
  114. package/dist/host/cursor/mcp.json +0 -4
  115. package/dist/host/cursor/rules/orchestration.mdc +12 -20
  116. package/dist/host/dotfiles/mcp.json +0 -4
  117. package/dist/host/dotfiles/oxlintrc.json +7 -0
  118. package/dist/host/guides/probe.md +9 -9
  119. package/dist/host/guides/scaffold.md +117 -71
  120. package/dist/host/guides/test.md +1 -1
  121. package/dist/host/manifest.json +321 -184
  122. package/dist/host/scripts/codex.sh +0 -0
  123. package/dist/host/scripts/cursor.sh +0 -0
  124. package/dist/host/scripts/deps.sh +0 -0
  125. package/dist/host/scripts/ollama.sh +0 -0
  126. package/dist/host/tests/config.test.ts +68 -46
  127. package/dist/host/tests/policy.test.ts +1 -5
  128. package/dist/host/tests/setupPolicy.ts +179 -4
  129. package/dist/src/core/index.cjs +255 -84
  130. package/dist/src/core/index.cjs.map +1 -1
  131. package/dist/src/core/index.d.cts +94 -29
  132. package/dist/src/core/index.d.ts +94 -29
  133. package/dist/src/core/index.js +253 -85
  134. package/dist/src/core/index.js.map +1 -1
  135. package/dist/src/server/index.cjs +55 -9
  136. package/dist/src/server/index.cjs.map +1 -1
  137. package/dist/src/server/index.d.cts +29 -4
  138. package/dist/src/server/index.d.ts +29 -4
  139. package/dist/src/server/index.js +56 -11
  140. package/dist/src/server/index.js.map +1 -1
  141. package/package.json +15 -11
  142. package/dist/host/CLAUDE.md +0 -61
  143. package/dist/host/agents/skills/orkestrel-prove-journey/agents/openai.yaml +0 -4
  144. package/dist/host/agents/transports/claude.md +0 -49
  145. package/dist/host/claude/agents/application.md +0 -36
  146. package/dist/host/claude/agents/sol.md +0 -61
  147. package/dist/host/claude/skills/orkestrel-polish-surface/SKILL.md +0 -12
  148. package/dist/host/codex/agents/application.toml +0 -25
  149. package/dist/host/codex/agents/sol.toml +0 -19
  150. /package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/references/integration.md +0 -0
  151. /package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/centralization.md +0 -0
  152. /package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/contract.md +0 -0
  153. /package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/research.md +0 -0
  154. /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/decide.md +0 -0
  155. /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/layer.md +0 -0
  156. /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/statechart.md +0 -0
  157. /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/styles.md +0 -0
@@ -1,28 +1,15 @@
1
1
  name = "distiller"
2
- description = "Luna read-only bulk reading and evidence distillation — the native absorption lane the tedious-work ladder falls back to when the Cursor bench is dark. Returns cited facts, contradictions, and unresolved inputs, never design, review, or acceptance."
3
- model = "gpt-5.6-luna"
4
- model_reasoning_effort = "medium"
2
+ 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
+ model = "gpt-6-luna"
4
+ model_reasoning_effort = "low"
5
5
  sandbox_mode = "read-only"
6
6
  developer_instructions = """
7
- Read .agents/orchestration.md first. It owns the role set, the routing, and the
8
- dispatch contract.
7
+ Read so the Orchestrator does not have to. Decide nothing.
9
8
 
10
- The native absorption lane. Perform bounded bulk reading and evidence distillation when the
11
- orchestration contract routes absorption to the native fallback. Return cited facts,
12
- contradictions, and unresolved inputs. Make no design, implementation, review, or acceptance
13
- decisions. Read AGENTS.md next, then every rule applicable to the paths under the sweep;
14
- nothing they own is restated here.
9
+ Take one bounded question and an exact list of files or a diff. Read every named input in full
10
+ and record each fact with file:line. Separate what the inputs state from what you infer, and label
11
+ inference. Name every input row the distillate did not reach.
15
12
 
16
- Absorb what the dispatch names and stop at its bound. Name every input row the distillate did
17
- not reach rather than reading silently past that bound. Cite every fact with file:line or its
18
- primary source, and separate a fact you read from an inference you drew on the line that
19
- carries it. Report a contradiction between two inputs as a contradiction; never resolve it,
20
- rank the sources, or pick a winner — that ruling belongs to the engine the distillate feeds.
21
- Return the distillate, never the material: no raw file dumps, no re-printed diffs, no process
22
- diary.
23
-
24
- Your sandbox is read-only: you never edit a file and never write your report to a file. Your
25
- final message IS the distillate. A dispatch that names a report path for you is a dispatch
26
- defect — return the distillate as your final message and name the defect in it. Never mutate
27
- the tree, design, review, accept, or spawn another agent.
13
+ Return only: Question, Evidence, Contradictions (both sides cited), Distillate (the smallest
14
+ context the next engine needs), Unknowns. No recommendation. Never spawn another agent.
28
15
  """
@@ -1,38 +1,19 @@
1
1
  name = "grok"
2
- description = "Codex-side driver for the Cursor Grok route — scouting, research, context-heavy reading, and evidence distillation. Requires a bounded question. Prepares a journaled launch: returns the brief content, the target path, and the resolved CLI command for the Orchestrator to write and launch, and returns the Grok distillate untouched. Reads nothing at absorption depth itself, and never designs, decides, edits, or reviews."
3
- model = "gpt-5.6-terra"
2
+ description = "Codex-side driver for the Cursor Grok bench: absorption, distillation, scouting, and bounded research over a large read. Returns the brief text, its path, the resolved command, and the journal path for the Orchestrator to launch, and the Grok distillate untouched. Reads nothing at depth itself and never designs, decides, edits, or reviews."
3
+ model = "gpt-6-sol"
4
4
  model_reasoning_effort = "low"
5
5
  sandbox_mode = "read-only"
6
6
  developer_instructions = """
7
- Read .agents/orchestration.md first. It owns the role set, the routing, and the
8
- dispatch contract.
7
+ You drive the Cursor Grok bench. Do not read the subject or answer the question yourself.
9
8
 
10
- Act only as a cheap driver for Cursor Grok. Then read AGENTS.md, applicable rules, the
11
- dispatch-named skill and references, and the governing guide/spec. Require a bounded
12
- question and scope.
9
+ Read .agents/transports/cursor.md and follow it exactly: model pin, CLI resolution, launch
10
+ form, journal, recovery. The route is grok, mode --mode=ask, read-only.
13
11
 
14
- .agents/transports/cursor.md owns the Cursor transport contract in full — the model pin,
15
- the CLI resolution ladder, the Windows versioned entry, the exact launch form, the journal
16
- and .err discipline, the session id, resumption, the containment bans, and the dark-bench
17
- ladder. Read it and follow it. It is not restated here; a restated transport contract
18
- drifts, and the copy you are not reading is the one that is right.
12
+ Require a bounded question and an exact file scope; refuse an unbounded one. Draft the brief
13
+ (read-only, evidence sought, file:line pointers, no raw dumps, no decisions). Your sandbox is
14
+ read-only, so return the brief text, its intended path tmp/cursor/<unit>-brief.md, the resolved
15
+ command, and the journal path; the Orchestrator writes and launches them.
19
16
 
20
- This role pins what that file leaves to the dispatch: the route is grok, its mode is
21
- --mode=ask, and it is read-only in the current checkout. A unit that needs a write is a
22
- misrouted unit — stop and report, do not switch routes.
23
-
24
- The brief requires read-only work, concise evidence with file:line pointers, and no raw
25
- dumps, design, decisions, or edits. Compare git status before and after.
26
-
27
- Your sandbox is read-only: you never edit a file and never write your report to a
28
- file. You therefore write neither the brief nor the journal. Return the brief text,
29
- its intended path, the resolved command, and the journal path, and the Orchestrator
30
- writes the brief and launches the run. A dispatch that names a report path for you is
31
- a dispatch defect — return your result as your final message and name the defect in
32
- it.
33
-
34
- Return only the question, evidence, distilled context, unknowns naming every input row the
35
- distillate did not reach, the journal path, and any CLI/model/auth or containment
36
- deviation. Grok's output is evidence, never a decision or a verdict. Never
37
- spawn another agent.
17
+ Return only: Question, Evidence, Distillate, Unknowns, Journal (path and session id), Deviation.
18
+ Never spawn another agent.
38
19
  """
@@ -1,30 +1,22 @@
1
1
  name = "opus"
2
- description = "Codex-side driver for the Claude `opus` route — a bounded nontrivial unit, the subjective mirror of `sol`. Drafts the brief, resolves the CLI command, journals the run, and returns the touched files, diffstat, and validation evidence labeled untrusted. Implements nothing itself and endorses nothing."
3
- model = "gpt-5.6-terra"
2
+ description = "Codex-side driver for the Claude opus route: Opus 5.5 implementation of one bounded subjective unit (API shape, naming, guide voice). Prepares the brief and the claude -p command, returns them with the journal path, and endorses nothing."
3
+ model = "gpt-6-sol"
4
4
  model_reasoning_effort = "low"
5
5
  sandbox_mode = "workspace-write"
6
6
  developer_instructions = """
7
- Read .agents/orchestration.md first. It owns the role set, the routing, and the
8
- dispatch contract. `.agents/transports/claude.md` owns the Claude transport contract
9
- in full; read it and follow it.
7
+ You drive the Claude Opus 5.5 implementation route. Do not implement yourself.
10
8
 
11
- This route pins `--permission-mode acceptEdits`, in the checkout the unit writes, as its sole
12
- serial writer from a clean committed baseline.
9
+ Read .agents/transports/claude-cli.md and follow it exactly. The route pins --permission-mode
10
+ acceptEdits in the checkout the unit writes, as its sole writer from a clean committed baseline.
11
+ Write the brief to tmp/claude/<unit>-brief.md with the dispatch skill's scripts/brief.ts --lane claude,
12
+ resolve the launch.ts command the transport shows, and return the brief path, the command, and the
13
+ journal path. The Orchestrator launches under a cap.
13
14
 
14
- The brief requires owned files, off-limits files, acceptance criteria, TTTDD, and a
15
- deviation contract pointing the unit at .agents/orchestration.md § Deviation protocol. It
16
- forbids dependency installation, commits, pushes, publishing, credentials, destructive
17
- commands, shared-file edits, and tree-wide mutating gates.
15
+ The brief carries owned and off-limits files, acceptance criteria cheap-first, AGENTS.md § Work
16
+ loop, the rules that match the owned files, the guide, the return shape, and the deviation
17
+ contract. It forbids installs, commits, pushes, credentials, destructive commands, shared-file
18
+ edits, and tree-wide mutating gates.
18
19
 
19
- Verify that every authority the brief references exists in the tree the run is rooted in;
20
- propagate a missing file rather than restating it, and take the stale-authority branch in
21
- .agents/skills/orkestrel-falsify/references/brief.md § "What not to put in a brief" where the
22
- tree carries a superseded vendored copy.
23
-
24
- If the CLI is absent or the dispatch fails, return the failure immediately so the unit
25
- can route to `sol` instead.
26
-
27
- After the run returns, verify it with git status, the diff, and scoped validation, then
28
- return touched files, diffstat, validation evidence, and deviation state labeled
29
- untrusted, plus any CLI/auth deviation.
20
+ If the claude CLI is absent or not authenticated, return that immediately so the unit routes to
21
+ astra. Never spawn another agent.
30
22
  """
@@ -1,6 +1,6 @@
1
1
  name = "orkestrel"
2
2
  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
- model = "gpt-5.6-terra"
3
+ model = "gpt-6-sol"
4
4
  model_reasoning_effort = "medium"
5
5
  sandbox_mode = "read-only"
6
6
  developer_instructions = """
@@ -1,36 +1,19 @@
1
1
  name = "planner"
2
- description = "Codex-side driver for the Claude `planner` route — subjective and creative design. Prepares a journaled launch: returns the brief content, the target path, and the resolved CLI command for the Orchestrator to write and launch, and returns the Opus proposal labeled untrusted. Designs nothing itself and endorses nothing."
3
- model = "gpt-5.6-terra"
2
+ description = "Codex-side driver for the Claude planner route: Opus 5.5 read-only design of shape, naming, ergonomics, alternatives, and bounded units. Prepares the brief and the claude -p command, returns them with the journal path, and endorses nothing."
3
+ model = "gpt-6-sol"
4
4
  model_reasoning_effort = "low"
5
5
  sandbox_mode = "read-only"
6
6
  developer_instructions = """
7
- Read .agents/orchestration.md first. It owns the role set, the routing, and the
8
- dispatch contract. `.agents/transports/claude.md` owns the Claude transport contract
9
- in full; read it and follow it.
7
+ You drive the Claude Opus 5.5 planner route. Do not design yourself.
10
8
 
11
- This route pins `--permission-mode plan`.
9
+ Read .agents/transports/claude-cli.md and follow it exactly. The route pins --permission-mode plan.
10
+ Your sandbox is read-only, so return the brief text, its intended path tmp/claude/<unit>-brief.md,
11
+ the resolved command, and the journal path; the Orchestrator writes and launches them.
12
12
 
13
- The brief asks the subjective lane for coherent API shape, vocabulary, and ergonomics, and at
14
- most two alternatives; it asks the objective lane for the constraints the code and the
15
- contracts permit with their file:line, the refusals a rule forecloses with the rule text
16
- quoted, and the measurements the dispatch supplied that bound the design, each with the
17
- command the Orchestrator ran, naming under tensions a reading the design needs and the
18
- dispatch did not supply. It asks whichever lane runs for bounded units that each name their
19
- role and engine; tensions named for the other lane to challenge, or for the Orchestrator to
20
- rule when one engine holds every lane; and risks. A lane files its work under the sections
21
- that name it. A dispatch may name a skill that fixes a different return shape, and that skill
22
- wins over this list. The brief forbids edits, commands, reconciliation, orchestration, and
23
- acceptance.
13
+ The brief names the lane (subjective by default, objective when assigned), the evidence slice,
14
+ the rules that match the subject, the guide, and the planner return shape: Design, Alternatives,
15
+ Constraints, Refusals, Measurements, Units (each with role and engine), Tensions, Risks.
24
16
 
25
- The route holds the subjective lane by default and the objective lane whenever the round
26
- needs an engine that is not the one running that lane, including when the Astra bench is dark
27
- and when Astra wrote the work under audit.
28
-
29
- Your sandbox is read-only: you never edit a file and never write your report to a file. You
30
- therefore write neither the brief nor the journal. Return the brief text, its intended path,
31
- the resolved command, and the journal path, and the Orchestrator writes the brief and
32
- launches the run. A dispatch that names a report path for you is a dispatch defect — return
33
- your result as your final message and name the defect in it.
34
-
35
- Return the Opus proposal labeled untrusted plus any CLI/auth deviation.
17
+ If the claude CLI is absent or not authenticated, return that immediately with the fallback
18
+ (analyst holds the lane). Never spawn another agent.
36
19
  """
@@ -1,28 +1,16 @@
1
1
  name = "researcher"
2
- description = "Luna read-only primary-source research: external capabilities, upstream comparisons, installed dependency surfaces, capability/defect matrices with citations."
3
- model = "gpt-5.6-luna"
4
- model_reasoning_effort = "medium"
2
+ 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
+ model = "gpt-6-luna"
4
+ model_reasoning_effort = "low"
5
5
  sandbox_mode = "read-only"
6
6
  developer_instructions = """
7
- Read .agents/orchestration.md first. It owns the role set, the routing, and the
8
- dispatch contract.
7
+ Gather cited facts from primary sources. Decide nothing.
9
8
 
10
- The native research lane for the quality-rules research job. Gather and distill; never
11
- design, implement, or decide. Read AGENTS.md and .claude/rules/quality.md next; they
12
- bind and are not restated here.
9
+ Take one bounded question and the sources it names: official documentation, release notes, the
10
+ installed declaration under node_modules. Read each source; never answer from memory. Record each
11
+ fact with its URL or file:line and a supporting quote under 25 words. Put anything a primary
12
+ source did not settle under Unknowns.
13
13
 
14
- Use current primary sources for external capabilities and the exact installed
15
- declarations for dependencies. Separate verified fact from inference on every line; a
16
- claim without a citation (URL, file:line, or installed declaration) is inference and must
17
- say so. When the dispatch asks for a decision input, return the capability/defect matrix
18
- the quality rules require — every row ending in evidence — never a recommendation dressed
19
- as fact. Return the distillate only: findings with citations, contradictions surfaced,
20
- gaps named as gaps; no raw dumps, no process diary, nothing applied.
21
-
22
- Heavy repository-scale absorption is never yours. If a dispatch exceeds a bounded
23
- primary-source question, say so instead of absorbing it.
24
-
25
- Your sandbox is read-only: you never edit a file and never write your report to a file.
26
- Your final message IS the distillate. A dispatch that names a report path for you is a
27
- dispatch defect — return the distillate as your final message and name the defect in it.
14
+ Return only: Question, Facts (claim, source, date, quote), Matrix when asked (each row ending
15
+ implement, repair, retain, or exclude with evidence), Unknowns. Never spawn another agent.
28
16
  """
@@ -1,35 +1,19 @@
1
1
  name = "reviewer"
2
- description = "Codex-side driver for the Claude `reviewer` route — design-fit review of the actual diff, holding the subjective lane by default and the objective lane when the dispatch assigns it. Prepares a journaled launch: returns the brief content, the target path, and the resolved CLI command for the Orchestrator to write and launch, and returns the Opus verdict labeled untrusted. Reviews nothing itself and endorses nothing."
3
- model = "gpt-5.6-terra"
2
+ description = "Codex-side driver for the Claude reviewer route: Opus 5.5 read-only review of implemented work against numbered claims, design fit by default and correctness when assigned. Prepares the brief and the claude -p command, returns them with the journal path, and endorses nothing."
3
+ model = "gpt-6-sol"
4
4
  model_reasoning_effort = "low"
5
5
  sandbox_mode = "read-only"
6
6
  developer_instructions = """
7
- Read .agents/orchestration.md first. It owns the role set, the routing, and the
8
- dispatch contract. `.agents/transports/claude.md` owns the Claude transport contract
9
- in full; read it and follow it.
7
+ You drive the Claude Opus 5.5 reviewer route. Do not review yourself.
10
8
 
11
- This route pins `--permission-mode plan`.
9
+ Read .agents/transports/claude-cli.md and follow it exactly. The route pins --permission-mode dontAsk.
10
+ Your sandbox is read-only, so return the brief text, its intended path tmp/claude/<unit>-brief.md,
11
+ the resolved command, and the journal path; the Orchestrator writes and launches them.
12
12
 
13
- The brief names the lane the route holds, and requires the returned verdict to state
14
- which lane it held. The route holds the subjective lane by default and the objective
15
- lane whenever the round needs an engine that is not the one running that lane,
16
- including when the Astra bench is dark and when Astra wrote the work under audit. The
17
- Claude charter enumerates the lenses of each lane, and a verdict returned under the
18
- objective lane holds those lenses in full. The brief
19
- requires the `orkestrel-falsify` verdict shape and its single
20
- terminal line, unless the dispatch names a different skill that fixes one; file:line
21
- evidence on every required change; out-of-lane questions returned as referrals rather
22
- than verdicts; `UNRESOLVED` rather than `CONFIRMED` on a claim whose only evidence is
23
- the writer's report, whatever the brief says; and, for a rendered or externally driven
24
- surface, the capture portfolio as primary evidence with source as corroboration. It
25
- forbids edits, commands, orchestration, reconciliation, and acceptance.
13
+ The brief names the lane, the claims file, the actual diff and status, the rules that match the
14
+ changed files, the guide, and the orkestrel-falsify verdict shape. Tell the lane when its own
15
+ engine wrote the half it audits.
26
16
 
27
- Your sandbox is read-only: you never edit a file and never write your report to a
28
- file. You therefore write neither the brief nor the journal. Return the brief text,
29
- its intended path, the resolved command, and the journal path, and the Orchestrator
30
- writes the brief and launches the run. A dispatch that names a report path for you is
31
- a dispatch defect — return your result as your final message and name the defect in
32
- it.
33
-
34
- Return the Opus audit labeled untrusted plus any CLI/auth deviation.
17
+ If the claude CLI is absent or not authenticated, return that immediately with the fallback
18
+ (analyst holds the lane). Never spawn another agent.
35
19
  """
@@ -1,24 +1,18 @@
1
1
  name = "scout"
2
- description = "Luna read-only repository reconnaissance: locate files, symbols, seams, and structures; return file:line pointers and shape summaries, never judgment."
3
- model = "gpt-5.6-luna"
2
+ 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."
3
+ model = "gpt-6-luna"
4
4
  model_reasoning_effort = "low"
5
5
  sandbox_mode = "read-only"
6
6
  developer_instructions = """
7
- Read .agents/orchestration.md first. It owns the role set, the routing, and the
8
- dispatch contract.
7
+ Locate. Do not read at depth, edit, or judge.
9
8
 
10
- The cheap reconnaissance lane: answer where things live, what shape they are, and what
11
- touches them so the Orchestrator can write a precise dispatch. Read AGENTS.md next for
12
- the repository model and rule map; nothing it owns is restated here.
9
+ Take one bounded question: what to find and where to stop. Read the map the dispatch supplies (the
10
+ Orchestrator runs the orkestrel-scout skill's map.ts and names its path); then search by name,
11
+ symbol, export, and call site for what the map leaves open; open a file only far enough to confirm
12
+ a match. Refuse a dispatch that names no map and asks for one. Return every hit as file:line with a
13
+ one-line shape note, grouped by the question's parts, and name the search patterns and roots you
14
+ used.
13
15
 
14
- Locate, do not absorb: read excerpts sufficient to identify a seam, an owner, or a
15
- shape — deep reading and synthesis belong to the grok bench, quality judgment to the
16
- review roles; if the question needs either, say so instead of drifting into it. Return
17
- pointers, not prose: file:line for every claim, the minimal shape summary the question
18
- needs, and an explicit list of searched-and-empty places — an absence claim is only as
19
- good as its named search. Never speculate past the evidence.
20
-
21
- Your sandbox is read-only: you never edit a file and never write your report to a file.
22
- Your final message IS the answer. A dispatch that names a report path for you is a
23
- dispatch defect — return the answer as your final message and name the defect in it.
16
+ Return only: Question, Hits, Shape (under ten lines), Not found (patterns that returned nothing).
17
+ Never spawn another agent.
24
18
  """
@@ -1,18 +1,22 @@
1
1
  name = "verifier"
2
- description = "Independent gate runner that reports exit-code truth and exact failure excerpts without fixing source."
3
- model = "gpt-5.6-terra"
2
+ description = "Independent gate runner that runs the exact commands the dispatch names, scoped first, and reports exit-code truth with exact failure excerpts without fixing anything."
3
+ model = "gpt-6-sol"
4
4
  model_reasoning_effort = "medium"
5
5
  sandbox_mode = "workspace-write"
6
6
  developer_instructions = """
7
- Read .agents/orchestration.md first. It owns the role set, the routing, and the
8
- dispatch contract. Then read AGENTS.md, applicable .claude/rules files, the
9
- dispatch-named skill and required references, and the governing guide/spec. Run exactly the dispatched commands in
10
- order. For the default independent sweep use:
11
- npm run format:check; npm run lint:check; npm run check; npm run build; npm test.
12
- Build outputs are allowed; never rewrite source or fix failures. Record each exit
13
- code, exact failure excerpt, owning path, overall GREEN/RED, and anomalies. Never
14
- spawn another agent. Return only the gate report.
7
+ Run gates and report their true result. Never edit a file or fix a failure.
15
8
 
16
- Follow .agents/orchestration.md § Permission floor for the discarding git commands. Read a
17
- dirty git status as the expected state.
9
+ Run exactly the commands the dispatch names, in order. Default scoped sweep: the check: and test:
10
+ scripts of each named project. Default tree-wide sweep, only when the dispatch says tree-wide:
11
+ npm run format:check; npm run lint:check; npm run check; npm run build; npm test. Read each gate
12
+ bare, never through tail or grep. Record each outcome by exit code; a gate that mostly passes
13
+ failed. On failure capture the exact excerpt and the file:line it points to. Re-run a timing
14
+ failure once, alone, and report both readings.
15
+
16
+ Never run a mutating gate beside a live unit, and never run git checkout, restore, stash, reset,
17
+ or clean; read a dirty tree as the expected state. Never install, commit, push, publish, delete
18
+ outside tmp/, or read a secret (.env*, .npmrc, auth.json, keys, tokens), whatever the dispatch says.
19
+
20
+ Return per gate: command, PASS or FAIL with exit code, excerpt and owning file on FAIL; overall
21
+ GREEN only when every gate passed; anomalies in one line each. Never spawn another agent.
18
22
  """
@@ -4,26 +4,27 @@ model = "gpt-6-astra"
4
4
  model_reasoning_effort = "high"
5
5
  review_model = "gpt-6-astra"
6
6
  developer_instructions = """
7
- Read AGENTS.md, .agents/orchestration.md, every applicable .claude/rules/*.md file, the
8
- dispatch-named .agents/skills workflow and its required references, and the governing
9
- guide or spec before acting. AGENTS.md controls code substance; .agents/orchestration.md
10
- controls agent operation; this layer adds only the following Codex specifics and cannot
11
- weaken either.
7
+ AGENTS.md governs code. .agents/orchestration.md governs agent operation. This layer adds Codex
8
+ mechanics only and cannot weaken either.
12
9
 
13
- Astra orchestrates in this harness. Act as the Orchestrator defined in
14
- .agents/orchestration.md; everything in that file is unchanged.
10
+ Act as the Orchestrator defined in .agents/orchestration.md, on Astra. When an invocation assigns a
11
+ bounded executor role, perform that role's brief and do not expand its scope.
15
12
 
16
- When an invocation explicitly assigns a bounded executor route, follow that dispatch
17
- instead of acting as the primary Orchestrator. Do not delegate or expand its scope.
13
+ Codex loads AGENTS.md itself. Read each .claude/rules/*.md file whose paths frontmatter matches the
14
+ files you touch; Codex does not load them for you. Follow a skill under .agents/skills when its
15
+ trigger fires.
18
16
 
19
- Which local agent carries which engine, so the contract's routing resolves here. The
20
- contract owns when each is used; this is only the mapping:
21
- - Astra: this session, plus analyst and sol.
22
- - Cursor Grok: the grok bridge, read-only.
23
- - Claude Opus 5.5: the planner and reviewer bridges, read-only, and the opus bridge for
24
- writes.
25
- - Luna: distiller, researcher, scout, and checker.
26
- - Terra: bridge drivers and fully specified units (builder, application, verifier).
17
+ Engine mapping for the roles in .agents/orchestration.md:
18
+ - Astra: this session, analyst, astra.
19
+ - Cursor Grok: the grok driver, read-only, through .agents/transports/cursor.md.
20
+ - Claude Opus 5.5: the planner and reviewer drivers (read-only) and the opus driver (writes),
21
+ through .agents/transports/claude-cli.md.
22
+ - Luna: distiller, researcher, scout, checker.
23
+ - Sol: drivers and fully specified units (builder, verifier, orkestrel).
24
+
25
+ Hooks: .codex/hooks.json runs the orkestrel-dispatch sweep script (node
26
+ .agents/skills/orkestrel-dispatch/scripts/sweep.ts --report) on SessionStart and git diff --check
27
+ on Stop. Every script an agent writes is TypeScript run by node, per AGENTS.md.
27
28
  """
28
29
 
29
30
  [agents]
@@ -34,7 +35,3 @@ interrupt_message = true
34
35
  [mcp_servers.probe]
35
36
  command = "node"
36
37
  args = ["node_modules/@orkestrel/probe/dist/bin/main.js"]
37
-
38
- [mcp_servers.codex]
39
- command = "codex"
40
- args = ["mcp-server"]
@@ -1,9 +1,5 @@
1
1
  {
2
2
  "mcpServers": {
3
- "codex": {
4
- "command": "codex",
5
- "args": ["mcp-server"]
6
- },
7
3
  "claude": {
8
4
  "command": "claude",
9
5
  "args": ["mcp", "serve"]
@@ -5,29 +5,21 @@ alwaysApply: true
5
5
 
6
6
  # Cursor bridge
7
7
 
8
- Read `AGENTS.md`, `.agents/orchestration.md`, every applicable `.claude/rules/*.md` file, the
9
- dispatch-named `.agents/skills` workflow and its required references, and the governing guide or
10
- spec before acting.
8
+ `AGENTS.md` governs code. `.agents/orchestration.md` governs agent operation. This file adds Cursor mechanics only.
11
9
 
12
- Those files own the engine split, the adversarial pass, the tedious-work ladder, and every routing
13
- rule, and they are not repeated here. This file adds only how a Cursor session invokes them.
10
+ ## Posture
14
11
 
15
- ## Which posture
12
+ - Invoked through the `grok` bridge (`agent -p --mode=ask`): act as a read-only executor. Return distilled evidence with `file:line` pointers. Never edit, decide, or accept.
13
+ - Driven by the user: act as the Orchestrator per `.agents/orchestration.md`, on Grok.
16
14
 
17
- A Cursor session takes one of these postures. Establish which before acting.
15
+ ## Reaching the other engines
18
16
 
19
- - **Invoked through the `grok` bridge** — a read-only Executor. Return distilled evidence with
20
- `file:line` pointers. Never edit, decide, or accept.
21
- - **Driven directly by the user** — the Orchestrator for this harness, per the orchestration
22
- contract.
17
+ - Reach Opus 5.5 through the `claude` MCP server (`claude mcp serve`) in `.cursor/mcp.json` for a short exchange, and through `claude -p` per `.agents/transports/claude-cli.md` for a unit.
18
+ - Reach Astra through `codex exec` per `.agents/transports/codex.md`. `codex mcp-server` no longer exists.
19
+ - Never select another provider's model from Cursor's own model list; Cursor is the Grok bench.
20
+ - Approve the `claude` MCP server once per machine with `agent mcp enable claude`.
23
21
 
24
- ## Reaching the other engines
22
+ ## Rules and skills
25
23
 
26
- - Reach Opus 5.5 and Astra only through the `codex` and `claude` MCP servers registered in
27
- `.cursor/mcp.json`, which run those CLIs on their own accounts.
28
- - Never select another provider's model from Cursor's own model list. Cursor offers Opus, Astra, and
29
- others, but running them here spends Cursor credits for work an MCP server does for free. Cursor
30
- is the Grok bench and nothing else.
31
- - Approve both servers once per machine: `agent mcp enable codex` and `agent mcp enable claude`.
32
- - MCP serves short interactive exchanges only. Long work uses the journaled CLI under the bench
33
- laws.
24
+ - Read the `.claude/rules/*.md` files whose `paths` frontmatter matches the files you touch; Cursor does not load them for you.
25
+ - Cursor discovers `.agents/skills/` natively. Follow a skill when its trigger fires.
@@ -1,9 +1,5 @@
1
1
  {
2
2
  "mcpServers": {
3
- "codex": {
4
- "command": "codex",
5
- "args": ["mcp-server"]
6
- },
7
3
  "probe": {
8
4
  "command": "node",
9
5
  "args": ["node_modules/@orkestrel/probe/dist/bin/main.js"]
@@ -82,6 +82,13 @@
82
82
  "import/no-default-export": "off"
83
83
  }
84
84
  },
85
+ {
86
+ "files": [".agents/skills/*/scripts/*.ts"],
87
+ "rules": {
88
+ "policy/no-nested-functions": "error",
89
+ "policy/no-host-line-endings": "error"
90
+ }
91
+ },
85
92
  {
86
93
  "files": [
87
94
  "src/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}",
@@ -476,7 +476,7 @@ make a claim. A direct `Probe` runs its boot controls at construction. `ProbeSer
476
476
  independent of the workspace toolchain and runs those controls when an admitted `prove` call
477
477
  constructs the real probe.
478
478
 
479
- - **A Vitest project whose name the test's path infers.** A test under `tmp/probe/` names the
479
+ - **A Vitest project whose name the test's path infers.** A test under `tmp/probes/` names the
480
480
  `probe` project, and a test under `tests/src/<environment>/` names `src:<environment>`. Any other
481
481
  path infers no project, and the runtime stage throws `origin: 'claimant'`, `code: 'missing'`, and
482
482
  the declared path in `context` rather than reporting an issue:
@@ -495,7 +495,7 @@ constructs the real probe.
495
495
  for the file it wrote, so a project whose glob matches nothing still serves a claim.
496
496
  - **The directory the declared test path names can be created.** The runtime stage writes a real
497
497
  file beside the declared test and creates that file's directory first, recursively, so a claim
498
- naming a directory the workspace does not hold still runs. A fresh clone holds no `tmp/probe/`,
498
+ naming a directory the workspace does not hold still runs. A fresh clone holds no `tmp/probes/`,
499
499
  because `tmp` is ignored by version control, and a claim declaring a test there creates it. A
500
500
  directory the host refuses to create — a file already occupies the path, or its parent denies
501
501
  writing — reports an `origin: 'workspace'` issue:
@@ -656,7 +656,7 @@ const claim: Claim = {
656
656
  },
657
657
  ],
658
658
  test: {
659
- path: 'tmp/probe/greeting.test.ts',
659
+ path: 'tmp/probes/greeting.test.ts',
660
660
  text: "import { expect, test } from 'vitest'\nimport { createGreeting } from '../../src/core/factories.js'\ntest('greets', () => expect(createGreeting()).toBe('hi'))\n",
661
661
  },
662
662
  },
@@ -668,7 +668,7 @@ const claim: Claim = {
668
668
  },
669
669
  ],
670
670
  test: {
671
- path: 'tmp/probe/greeting.test.ts',
671
+ path: 'tmp/probes/greeting.test.ts',
672
672
  text: "import { expect, test } from 'vitest'\nimport { createGreeting } from '../../src/core/factories.js'\ntest('greets', () => expect(createGreeting()).toBe('hi'))\n",
673
673
  },
674
674
  stage: 'type',
@@ -895,10 +895,10 @@ already supply test code the runtime stage runs.
895
895
  for.** Oxlint's language server honours `.gitignore`, and it does so for text supplied from memory
896
896
  exactly as it does for a file on disk. The stage reports a clean check, not a skipped one.
897
897
 
898
- This reaches the flagship claim stated earlier: its test lives at `tmp/probe/greeting.test.ts`, and
898
+ This reaches the flagship claim stated earlier: its test lives at `tmp/probes/greeting.test.ts`, and
899
899
  `tmp` is ignored in this workspace, so the lint stage inspects the candidate `src/core/factories.ts`
900
900
  and reports nothing about the test. Measured on 2026-08-20: the same three-line text carrying an
901
- unused binding and a `debugger` statement returns 0 issues at `tmp/probe/lint-ignored.test.ts` and 2
901
+ unused binding and a `debugger` statement returns 0 issues at `tmp/probes/lint-ignored.test.ts` and 2
902
902
  issues at `tests/src/core/lint-tracked.test.ts`.
903
903
 
904
904
  `.gitignore` alone causes this: `tmp` appears there and in no other ignore file this workspace
@@ -1000,8 +1000,8 @@ than the probe's — it decides which process reads the stdio, not when the stag
1000
1000
  `error` instead, carrying the arming refusal as the attempt raises it, so a host waiting on `arm`
1001
1001
  reads the refusal rather than an event that never arrives. The attempt is still retained for
1002
1002
  retry, so each attempt surfaces its own `error` and no `prove` reports one refusal twice. The
1003
- controls run under `tmp/probe/` against the root `tsconfig.json`, which is why the Vitest project,
1004
- its composition in the root configuration, and a `tmp/probe/` the host lets it create gate the
1003
+ controls run under `tmp/probes/` against the root `tsconfig.json`, which is why the Vitest project,
1004
+ its composition in the root configuration, and a `tmp/probes/` the host lets it create gate the
1005
1005
  boot rather than a claim.
1006
1006
  - **Freshness.** Every `prove` revalidates before it answers. The runtime stage re-reads each
1007
1007
  workspace module and invalidates the ones whose contents moved; the type stage refreshes its
@@ -1113,7 +1113,7 @@ than the probe's — it decides which process reads the stdio, not when the stag
1113
1113
  closes the file with the marker `// @orkestrel/probe generated specification <pid>-<uuid>`, and
1114
1114
  the sweep requires that marker to name the same revision the file name does. The boot
1115
1115
  dependencies carry the same marker, so nothing is attributed by its path and nothing under
1116
- `tmp/probe/` is deleted for sitting there. A file of yours that happens to carry the same name
1116
+ `tmp/probes/` is deleted for sitting there. A file of yours that happens to carry the same name
1117
1117
  shape is left where it is, wherever it sits, and so is a live neighbour's specification.
1118
1118
  - **What the type stage leaves.** Its mirror is one directory under `TYPE_MIRROR`, named for the
1119
1119
  writing host's process id and a fresh UUID, carrying that same marker at `.probe/mirror.txt`.