@orkestrel/scaffold 0.0.36 → 0.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/host/CLAUDE.md +2 -0
- package/dist/host/agents/orchestration.md +51 -24
- package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +7 -2
- package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +3 -0
- package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +6 -0
- package/dist/host/agents/skills/orkestrel-human-journey/SKILL.md +9 -1
- package/dist/host/claude/agents/analyst.md +6 -3
- package/dist/host/claude/agents/checker.md +1 -1
- package/dist/host/claude/agents/codex.md +13 -9
- package/dist/host/claude/agents/grok.md +3 -2
- package/dist/host/claude/agents/orkestrel.md +13 -10
- package/dist/host/claude/agents/planner.md +2 -1
- package/dist/host/claude/agents/reviewer.md +15 -14
- package/dist/host/claude/agents/sol.md +4 -2
- package/dist/host/claude/rules/quality.md +2 -1
- package/dist/host/claude/rules/tests.md +1 -0
- package/dist/host/codex/agents/analyst.toml +5 -5
- package/dist/host/codex/agents/claude.toml +34 -0
- package/dist/host/codex/agents/grok.toml +3 -3
- package/dist/host/codex/agents/opus.toml +16 -20
- package/dist/host/codex/agents/planner.toml +12 -17
- package/dist/host/codex/agents/reviewer.toml +13 -18
- package/dist/host/guides/guide.md +193 -98
- package/dist/host/manifest.json +6 -1
- package/dist/host/scripts/codex.sh +0 -0
- package/dist/host/scripts/cursor.sh +0 -0
- package/dist/host/scripts/deps.sh +0 -0
- package/dist/host/scripts/ollama.sh +0 -0
- package/dist/host/tests/config.test.ts +10 -7
- package/dist/src/core/index.cjs +2 -2
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.js +2 -2
- package/dist/src/core/index.js.map +1 -1
- package/package.json +2 -2
package/dist/host/CLAUDE.md
CHANGED
|
@@ -11,6 +11,8 @@ follows it. This file adds only what Claude Code does differently, and cannot we
|
|
|
11
11
|
- Use the Agent tool for a single dispatch, including when later control flow depends on its result.
|
|
12
12
|
- Use a Workflow for a deterministic fan-out, staged pipeline, or loop. Serialize writing nodes.
|
|
13
13
|
- Recover an interrupted Workflow with `resumeFromRunId`.
|
|
14
|
+
- Foreground Bash is hard-capped at 10 minutes regardless of its timeout parameter. Launch anything
|
|
15
|
+
that can exceed it as a harness-tracked background command.
|
|
14
16
|
- Never dispatch an adversarial lane with a context-inheriting subagent type such as `fork`. A lane
|
|
15
17
|
must start clean, or it inherits the Orchestrator's framing and stops being independent.
|
|
16
18
|
|
|
@@ -54,15 +54,16 @@ reasoning effort.
|
|
|
54
54
|
|
|
55
55
|
## The adversarial pass
|
|
56
56
|
|
|
57
|
-
Two lanes run on every design round
|
|
57
|
+
Two lanes run on every design round; an audit round runs the lanes the execution loop's step 5
|
|
58
|
+
names, on the same clean-context terms.
|
|
58
59
|
|
|
59
60
|
| Lane | Argues |
|
|
60
61
|
| -------------- | --------------------------------------------------------------------------- |
|
|
61
62
|
| **Subjective** | Shape, taste, naming, ergonomics, design fit, what the API should feel like |
|
|
62
63
|
| **Objective** | Correctness, constraints, and what the code and contracts actually permit |
|
|
63
64
|
|
|
64
|
-
**
|
|
65
|
-
a lane.
|
|
65
|
+
**A required lane always runs.** Never collapse two required lanes into one. Never let an engine's
|
|
66
|
+
absence stand in for a required lane.
|
|
66
67
|
|
|
67
68
|
### Clean contexts
|
|
68
69
|
|
|
@@ -162,6 +163,9 @@ when the role file already pins it.
|
|
|
162
163
|
job to a bench means shipping that catalog across, which costs more than the bench saves.
|
|
163
164
|
- `codex` is the shared Sol transport contract, not a route. `analyst` and `sol` are the named
|
|
164
165
|
bridges; both bind that contract by reference and pin only their route and sandbox.
|
|
166
|
+
- Mirroring is by work class, not filename. A transport contract is provider-specific:
|
|
167
|
+
`.claude/agents/codex.md` carries the Sol transport on the Claude side, `.codex/agents/claude.toml`
|
|
168
|
+
the Opus transport on the Codex side, and each side's bridges bind their own by reference.
|
|
165
169
|
- Opus and Sol roles use high effort. Native cheap-tier roles use low or medium. Bridge drivers use
|
|
166
170
|
the cheapest tier that can run a CLI.
|
|
167
171
|
- Never route orchestration or acceptance across a bridge.
|
|
@@ -284,18 +288,23 @@ lane instead of re-dispatching against a session-start answer that no longer hol
|
|
|
284
288
|
fully specified taste-free unit to `builder`. Never route implementation to an engine the unit's
|
|
285
289
|
judgment load exceeds.
|
|
286
290
|
4. **Integrate.** Evaluate each distillate against its acceptance criteria, apply shared-file
|
|
287
|
-
patches serially, and route cross-cutting findings.
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
+
patches serially, and route cross-cutting findings. Integration applies exact returned patches
|
|
292
|
+
and mechanical conflict resolution only. A new type, mechanism, behavior, or acceptance
|
|
293
|
+
criterion discovered at integration is a successor brief routed to a writer, never an
|
|
294
|
+
integration edit.
|
|
295
|
+
5. **Audit adversarially.** Audit every nontrivial implementation with at least one lane whose
|
|
296
|
+
engine did not write it. Run the second lane when the first returns FAIL, when the subject is a
|
|
297
|
+
rendered or externally driven surface, or when the unit's claims span both correctness and
|
|
298
|
+
shape. Dispatch `checker` when the acceptance criteria are mechanical — counts, paths, parity
|
|
299
|
+
rows, scope honesty. Record in the round's verdict file when a lane or the checker did not run.
|
|
291
300
|
- State the audit's subject as numbered falsifiable claims and require per-claim verdicts with
|
|
292
|
-
evidence, per the Falsification law in `.claude/rules/quality.md` and the
|
|
293
|
-
dispatch
|
|
301
|
+
evidence, per the Falsification law in `.claude/rules/quality.md` and the `orkestrel-falsify`
|
|
302
|
+
value set, unless the dispatch names a different skill that fixes another.
|
|
294
303
|
- In a fix round, give the unit to an auditor engine that did not write it.
|
|
295
304
|
- Run the `orkestrel-falsify` skill for multi-round audits. It owns the brief anatomy, the
|
|
296
305
|
successor-brief rule, the verdict shape and its single terminal line, and the reconciliation
|
|
297
306
|
discipline.
|
|
298
|
-
- Reconcile
|
|
307
|
+
- Reconcile the lanes that ran. Drop, on the record, any finding no lane can substantiate.
|
|
299
308
|
6. **Verify.** Have one independent `verifier` run the authoritative gates.
|
|
300
309
|
7. **Re-baseline.** Reconcile the remaining plan against what the phase revealed, before dispatching
|
|
301
310
|
the next one.
|
|
@@ -369,11 +378,18 @@ The harness bridge names the concrete mechanism for each of these.
|
|
|
369
378
|
- Send a decision taken mid-campaign to every unit already in flight whose brief it invalidates. An
|
|
370
379
|
executor cannot see a change made after it was dispatched, so it writes the state its brief
|
|
371
380
|
described and the defect surfaces as its own.
|
|
372
|
-
-
|
|
373
|
-
|
|
381
|
+
- Retention is uniform for every unit, whatever engine ran it, including an Orchestrator-owned
|
|
382
|
+
integration, fix, probe, or capture unit: copy the brief, the returned report or distillate, the
|
|
383
|
+
audit verdict, the exact executed script or instrument, and the acceptance evidence into
|
|
384
|
+
`.orkestrel/<package>/` as the unit is dispatched and as it returns, then sweep only the `tmp/`
|
|
385
|
+
launch copies. A capture claim's instrument is acceptance evidence; the frames may be swept once
|
|
386
|
+
the record transcribes them, because the committed instrument re-produces the film. **Bench
|
|
387
|
+
laws** rule 4 owns journals and points here for everything durable.
|
|
374
388
|
- Promote anything that must outlive the campaign into a durable artifact before the sweep — a
|
|
375
389
|
commit message, a guide, a rule, a retrospective. What is only in a swept file did not survive,
|
|
376
390
|
and a debrief that must quote the record verbatim has nothing to quote.
|
|
391
|
+
- Land a process rule stated as binding mid-campaign in the owning rule or contract file in the
|
|
392
|
+
same commit that states it. A campaign artifact is evidence, never a rule's home.
|
|
377
393
|
|
|
378
394
|
### Where campaign artifacts live
|
|
379
395
|
|
|
@@ -447,7 +463,8 @@ wrong is right to stop.
|
|
|
447
463
|
fix the criterion to the property you want rather than to the number you saw.
|
|
448
464
|
- Read the acceptance criteria against the off-limits list, line by line. Every criterion closes
|
|
449
465
|
using owned files alone. A criterion that needs an off-limits file gets that file granted or gets
|
|
450
|
-
struck.
|
|
466
|
+
struck. A file the change will break that appears in neither list is an unscoped file; grant it or
|
|
467
|
+
strike the criterion.
|
|
451
468
|
- Give a small unrelated obligation its own unit. Ride it along in a large one and its scope error
|
|
452
469
|
blocks the primary work, which is a whole unit lost to a detail.
|
|
453
470
|
- Ask what the change will do to the facts you just measured. A criterion fixed to a measured set is
|
|
@@ -471,9 +488,10 @@ wrong is right to stop.
|
|
|
471
488
|
already settled. Where a read-only lane needs executed evidence, produce it separately and hand it
|
|
472
489
|
over: the Orchestrator supplies the evidence and the lane rules on it.
|
|
473
490
|
- Scope a fleet-wide refactor by the files that **consume** a symbol, not by the files that declare
|
|
474
|
-
it. A criterion
|
|
475
|
-
|
|
476
|
-
|
|
491
|
+
it. A criterion that removes a symbol, or that makes an existing state or fixture shape
|
|
492
|
+
unreachable, closes only when every consumer that exercises it is owned, so a brief scoped to the
|
|
493
|
+
declaration alone sends the unit into a typecheck break in a file it cannot edit. Count the
|
|
494
|
+
importers before writing the owned list.
|
|
477
495
|
|
|
478
496
|
### Carry every finding
|
|
479
497
|
|
|
@@ -513,8 +531,9 @@ command that outlives the turn that started it. Every law here binds all of them
|
|
|
513
531
|
launch whose tail is the evidence.
|
|
514
532
|
- Keep network-dependent work out of sandboxed bench execs. Bench sandboxes deny network, so
|
|
515
533
|
lockfile generation, real installs, and live fetches belong to the Orchestrator's own tracked
|
|
516
|
-
commands or
|
|
517
|
-
the signature of this misroute, not of a slow
|
|
534
|
+
commands or to the native `implementer` or `builder` as an ordinary dispatched writing unit. A
|
|
535
|
+
bench exec hanging on `npm` until its cap fires is the signature of this misroute, not of a slow
|
|
536
|
+
bench.
|
|
518
537
|
- A Workflow journals identically and dies identically, so give it the same watch — with one
|
|
519
538
|
correction. A workflow journal writes only at agent start and result, so its mtime goes quiet for
|
|
520
539
|
minutes during healthy work, and the liveness signal is the newest subagent transcript instead. A
|
|
@@ -546,6 +565,10 @@ nothing.
|
|
|
546
565
|
- Kill by process id, never by pattern. `pkill -f` matches the relaunch that is already starting, so
|
|
547
566
|
the pattern that cleans up the old run kills the new one and the cleanup reads as a launch
|
|
548
567
|
failure.
|
|
568
|
+
- A killed `codex exec` is dead only when its process tree is dead: walk the children with
|
|
569
|
+
`ps --ppid` and confirm the `codex-code-mode-host` child is gone. Before dispatching a substitute
|
|
570
|
+
writer, check the owned files' modification times against the baseline — a live orphan is still
|
|
571
|
+
writing the tree the substitute is about to own.
|
|
549
572
|
- Read a failure against what was running when it happened, not against what you believe was
|
|
550
573
|
running. The check costs one command and is the only thing that separates a real failure from
|
|
551
574
|
self-inflicted contention.
|
|
@@ -584,12 +607,9 @@ transport.
|
|
|
584
607
|
running" always has a first-class answer instead of a recollection of a command.
|
|
585
608
|
4. **Ephemeral streams, durable records.** A journal proves a bench is alive and recovers an
|
|
586
609
|
interrupted session. Keep journals under `tmp/`, never commit them, and sweep them at acceptance
|
|
587
|
-
after the final gate evidence is recorded.
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
only the `tmp/` copy. None of it is reproducible from the diff, and a debrief has no primary
|
|
591
|
-
source without it. This rule owns retention for the whole contract; **Dispatch anatomy**
|
|
592
|
-
points here rather than answering it.
|
|
610
|
+
after the final gate evidence is recorded. Durable retention — brief, distillate, verdict,
|
|
611
|
+
instrument, acceptance evidence — is owned by **Dispatch anatomy**; this rule owns only the
|
|
612
|
+
journal stream.
|
|
593
613
|
|
|
594
614
|
### Recovering a dark bench
|
|
595
615
|
|
|
@@ -682,6 +702,9 @@ flag is what stops the gate chain running a second time inside the five minutes.
|
|
|
682
702
|
|
|
683
703
|
### Reaching the approval
|
|
684
704
|
|
|
705
|
+
- Launch the login chain only when the user has signalled they are at the keyboard and will click
|
|
706
|
+
within ten minutes. An approval URL expires unclicked in about ten to fifteen minutes, and an
|
|
707
|
+
overnight gap expires the session credential with it.
|
|
685
708
|
- Run `npm login` before any publish. `npm publish` does not open the browser flow: unauthenticated
|
|
686
709
|
it returns `E404` on `PUT`, which reads as a missing package rather than a missing credential.
|
|
687
710
|
- Pass `--browser=false` to `npm login` and to every `npm publish`. Without it npm prints
|
|
@@ -691,6 +714,8 @@ flag is what stops the gate chain running a second time inside the five minutes.
|
|
|
691
714
|
untouched.
|
|
692
715
|
- Hold stdin open and write nothing to it. Use a fifo held open by a long `sleep`. EOF drops npm to
|
|
693
716
|
the same legacy prompt a stray newline does.
|
|
717
|
+
- A login log showing the spinner and then a legacy `Username:` prompt is an expired attempt, not a
|
|
718
|
+
prompt to answer: kill it by process id and mint a fresh flow.
|
|
694
719
|
- Run the login and every publish under `script -qfc '<command>' <log>`. npm offers the approval only
|
|
695
720
|
when it sees a TTY; without one it fails `EOTP` with no way to answer.
|
|
696
721
|
- Expect two approvals. `npmjs.com/login/cli/<id>` authenticates the session; `npmjs.com/auth/cli/<id>`
|
|
@@ -749,6 +774,8 @@ flag is what stops the gate chain running a second time inside the five minutes.
|
|
|
749
774
|
implicit engines, fixed Claude model IDs, or verbose completed-work residue.
|
|
750
775
|
- Evidence a claim about a rendered or externally driven surface with its capture or a real foreign
|
|
751
776
|
client driving it, never with source alone. Where no such surface exists this law is inert.
|
|
777
|
+
- When the Orchestrator writes any part of a unit, that part is briefed, owned, and audited like any
|
|
778
|
+
other part, and its auditor is an engine the Orchestrator does not share.
|
|
752
779
|
- Final acceptance belongs only to the Orchestrator, after independent audit and gate evidence.
|
|
753
780
|
- Accept when the plan's exit criterion is met and the gates are green, not when the last engine
|
|
754
781
|
runs out of appetite. Reopening an accepted criterion is the user's instruction, not an auditor's
|
|
@@ -58,8 +58,13 @@ a practice that worked so it repeats.
|
|
|
58
58
|
src, does src carry application policy, does either duplicate a declared ecosystem
|
|
59
59
|
primitive? Package promotion: what grew into a reusable mechanism that belongs in an
|
|
60
60
|
existing package or justifies a new one — mapped dependency-first so promotion order
|
|
61
|
-
is executable.
|
|
62
|
-
|
|
61
|
+
is executable. Sweep test infrastructure both ways: name every local test helper or
|
|
62
|
+
fixture whose semantics an installed shared-package export already covers (compare
|
|
63
|
+
against the declarations each repository compiles with, and adopt rather than keep),
|
|
64
|
+
and name every instrument two or more packages built independently (count a value set
|
|
65
|
+
fed through one proof loop as one implementation, whether the set sits beside the
|
|
66
|
+
loop or its assertions are spelled out one by one). Every row ends implement, repair,
|
|
67
|
+
retain, or intentionally exclude, with evidence.
|
|
63
68
|
4. **Process retrospective.** Walk the campaign record for both failure and success:
|
|
64
69
|
dispatches that deviated and why; recoveries that worked (codify the mechanism that
|
|
65
70
|
saved them); estimates versus observed durations; audit rounds that caught real
|
|
@@ -73,3 +73,6 @@ delta from the prior round. A tier passes when its models complete the goal with
|
|
|
73
73
|
failed calls and no out-of-band reading (no source excavation, no filesystem search —
|
|
74
74
|
watch for it in the transcript; it means the surface leaked its teaching job to the
|
|
75
75
|
repository).
|
|
76
|
+
|
|
77
|
+
A re-film that drives the surface with live models is a field pass: it carries the
|
|
78
|
+
scoreboard and each lane's journal path like any other round.
|
|
@@ -11,9 +11,15 @@ seeing the other's answer before both return:
|
|
|
11
11
|
|
|
12
12
|
- **Subjective** (design-fit engine): coherence of the role model, charter voice, whether
|
|
13
13
|
each role's job is one job, whether the skill family reads as one system.
|
|
14
|
+
- The subjective lenses, so the lane can state its coverage: role-job singularity;
|
|
15
|
+
charter voice against dispatched usage; lane-swap residue; bridge minimalism;
|
|
16
|
+
vocabulary drift across mirrored files; skill-family seams.
|
|
14
17
|
- **Objective** (correctness engine): evidence-only sweeps of the actual files and the
|
|
15
18
|
campaign record — the lanes below.
|
|
16
19
|
|
|
20
|
+
Each lane returns numbered findings, most severe first, and exactly one terminal line:
|
|
21
|
+
`INSTRAUDIT <LANE>: <n> findings`.
|
|
22
|
+
|
|
17
23
|
Reconcile into rulings; every divergence gets a ruled row with the reason. Convergent
|
|
18
24
|
findings adopt without contest; a finding neither lane can substantiate dies on the
|
|
19
25
|
record.
|
|
@@ -40,6 +40,8 @@ Read the current files in this order:
|
|
|
40
40
|
6. **Commit a value through an act a person performs:** Enter, Tab away, or a named button. Report a
|
|
41
41
|
surface that commits on a timer, on an unpredictable event, or only after work the person cannot
|
|
42
42
|
observe as a surface finding, and never work around it in the layer.
|
|
43
|
+
7. **Type only what a person would.** Journeys carry trusted input; adversarial payloads belong to
|
|
44
|
+
the transport family and the parser suites.
|
|
43
45
|
|
|
44
46
|
## Build or verify the journey layer
|
|
45
47
|
|
|
@@ -66,7 +68,10 @@ placement and scope `.claude/rules/tests.md` fixes.
|
|
|
66
68
|
- Type keystroke by keystroke where the keystrokes are the subject; fill in one operation where the
|
|
67
69
|
text is only a payload the person pastes.
|
|
68
70
|
- Poll every fact the application produces asynchronously until it converges. Never assert one from
|
|
69
|
-
a single read after the action.
|
|
71
|
+
a single read after the action. A poll's predicate must be able to go false-to-true after the
|
|
72
|
+
action it observes; a predicate already true when the poll starts binds nothing.
|
|
73
|
+
- Assert the state the flow must reach, never the transient path taken to it. A criterion that bans
|
|
74
|
+
a harmless transient over-refuses and breaks on the next honest implementation.
|
|
70
75
|
- Assert the negative beside the positive whenever a value replaces another: the new sentence is
|
|
71
76
|
present **and** the old one is gone.
|
|
72
77
|
- After a confirmed destructive action, assert through trusted input that focus landed on a visible,
|
|
@@ -104,6 +109,9 @@ Follow [captures.md](references/captures.md) for the state registry and its plac
|
|
|
104
109
|
theme-and-viewport variant matrix, the always-on filename proof, the capture-run membership proof,
|
|
105
110
|
and how a state that exists only during an activation is captured.
|
|
106
111
|
|
|
112
|
+
When a capture and a green suite disagree, the capture is the evidence and the fixture is the
|
|
113
|
+
defect.
|
|
114
|
+
|
|
107
115
|
Route review of the portfolio to the `orkestrel-polish-surface` campaign. Do not judge it here.
|
|
108
116
|
|
|
109
117
|
## Accept
|
|
@@ -36,7 +36,8 @@ Everything `.agents/orchestration.md`'s dispatch contract requires, plus:
|
|
|
36
36
|
never saw. Propagate the missing file; do not restate its contents in the brief.
|
|
37
37
|
- For an audit: the subject as numbered falsifiable claims, and the skill that fixes the verdict
|
|
38
38
|
shape. The Falsification section of `.claude/rules/quality.md` owns the method and the evidence
|
|
39
|
-
each verdict carries
|
|
39
|
+
each verdict carries. The verdict shape defaults to `orkestrel-falsify`; a dispatch may name a
|
|
40
|
+
different skill that fixes another. That skill owns the value set and the terminal line. Point at
|
|
40
41
|
both; restate neither.
|
|
41
42
|
|
|
42
43
|
## Launching
|
|
@@ -52,8 +53,10 @@ work-class rule. Persist the thread id the moment a response carries it.
|
|
|
52
53
|
|
|
53
54
|
## Return
|
|
54
55
|
|
|
55
|
-
The brief path, the resolved command, the journal path
|
|
56
|
-
|
|
56
|
+
The brief path, the resolved command, and the journal path — and nothing else. Never a cap. The
|
|
57
|
+
Orchestrator launches the exec and reads Sol's answer from the `--output-last-message` file itself;
|
|
58
|
+
you never wait for it, relay it, or endorse it. A follow-up on a finished exec is a fresh dispatch,
|
|
59
|
+
not a continuation.
|
|
57
60
|
|
|
58
61
|
Never edit, implement, reconcile, accept, commit, push, install, read a credential, or spawn any
|
|
59
62
|
agent.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: checker
|
|
3
|
-
description:
|
|
3
|
+
description: "Mechanical conformance review — acceptance criteria, AGENTS.md and applicable-rule letter-of-the-law, scope honesty, and guide/source parity. Reads the actual diff, stays evidence-first, and is dispatched when a unit's acceptance criteria are mechanically checkable. Never edits."
|
|
4
4
|
tools: Read, Grep, Glob
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: low
|
|
@@ -62,9 +62,9 @@ never travel as shell arguments. Return the exact resolved command with a pointe
|
|
|
62
62
|
repository, and `--output-schema <file>` when the Orchestrator supplies one.
|
|
63
63
|
- The journal at `tmp/codex/<unit>.jsonl` is the live progress record and its mtime is
|
|
64
64
|
the liveness signal the Orchestrator watches. Never re-print the stream into your report.
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
- The Orchestrator reads Sol's answer from the `--output-last-message` file rather than
|
|
66
|
+
stdout, and records the session id (`thread_id` in the journal's opening events)
|
|
67
|
+
beside the result; a follow-up on a finished exec is a fresh dispatch.
|
|
68
68
|
|
|
69
69
|
## The exec sandbox denies network
|
|
70
70
|
|
|
@@ -73,6 +73,10 @@ endpoint — lockfile generation, real installs, live fetches — belongs to the
|
|
|
73
73
|
Orchestrator's own tracked commands or a network-capable native agent. Never put it in a
|
|
74
74
|
brief. A Sol exec hanging on `npm` until its cap fires is this misroute, not a slow bench.
|
|
75
75
|
|
|
76
|
+
The namespace has its own loopback, so a host daemon on `127.0.0.1` is unreachable and a bind can
|
|
77
|
+
fail `EPERM`. It has no IPv6, so `::1` fails `EAFNOSUPPORT`. Any proof that must reach a daemon,
|
|
78
|
+
bind a port, or drive a built server belongs outside the exec.
|
|
79
|
+
|
|
76
80
|
## The exec sandbox mounts `.git` read-only
|
|
77
81
|
|
|
78
82
|
A `workspace-write` exec can write the working tree and cannot write `.git`. Every command
|
|
@@ -107,9 +111,9 @@ and after. Require evidence for every claim and return unsupported claims as dro
|
|
|
107
111
|
|
|
108
112
|
An audit brief states its subject as a numbered list of falsifiable claims rather than a
|
|
109
113
|
diff to read, and requires Sol to attempt refutation. The Falsification section of
|
|
110
|
-
`.claude/rules/quality.md` owns the method and the evidence each verdict carries.
|
|
111
|
-
|
|
112
|
-
terminal line. Point the brief at both; restate neither.
|
|
114
|
+
`.claude/rules/quality.md` owns the method and the evidence each verdict carries. The verdict shape
|
|
115
|
+
defaults to `orkestrel-falsify`; a dispatch may name a different skill that fixes another. That
|
|
116
|
+
skill owns the value set and the terminal line. Point the brief at both; restate neither.
|
|
113
117
|
|
|
114
118
|
## Implementer route
|
|
115
119
|
|
|
@@ -118,9 +122,9 @@ baseline, with owned files, off-limits files, and a deviation contract. The brie
|
|
|
118
122
|
dependency installation, commits, pushes, publishing, credentials, destructive commands,
|
|
119
123
|
shared-file edits, and tree-wide mutating gates.
|
|
120
124
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
125
|
+
The Orchestrator verifies the finished exec with direct evidence — git status, the diff,
|
|
126
|
+
scoped validation — and carries touched files, diffstat, and deviation state into
|
|
127
|
+
integration and review.
|
|
124
128
|
|
|
125
129
|
## Routing exclusion — defensive negative-test units
|
|
126
130
|
|
|
@@ -40,8 +40,9 @@ that never happened. The versioned entry has no console dependency and no such f
|
|
|
40
40
|
|
|
41
41
|
Read an empty shim run as a launch failure until its log is checked for that trace.
|
|
42
42
|
|
|
43
|
-
If nothing responds the bench is dark. Stop with a deviation naming the fallback
|
|
44
|
-
reading to the Orchestrator, `planner`, or
|
|
43
|
+
If nothing responds the bench is dark. Stop with a deviation naming the fallback from the root
|
|
44
|
+
tedious-work ladder — Luna, then Sonnet. Never hand the reading to the Orchestrator, `planner`, or
|
|
45
|
+
`analyst`. Never install or authenticate.
|
|
45
46
|
|
|
46
47
|
Create `tmp/cursor/` first. Write any brief longer than a couple of sentences to
|
|
47
48
|
`tmp/cursor/<unit>-brief.md` and make the prompt a pointer to it; briefs never travel as
|
|
@@ -38,20 +38,21 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
38
38
|
| ----------------------- | -------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
39
39
|
| `@orkestrel/abort` | `0.0.6` | L1 | `@orkestrel/contract` `^0.0.11` |
|
|
40
40
|
| `@orkestrel/agent` | `0.0.15` | L5 | `@orkestrel/abort` `^0.0.6`, `@orkestrel/budget` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/queue` `^0.0.8`, `@orkestrel/timeout` `^0.0.6`, `@orkestrel/tool` `^0.0.10`, `@orkestrel/workflow` `^0.0.11`, `@orkestrel/workspace` `^0.0.4` |
|
|
41
|
+
| `@orkestrel/brief` | `0.0.1` | L4 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/interpret` `^0.0.8`, `@orkestrel/reason` `^0.0.5` |
|
|
41
42
|
| `@orkestrel/browser` | `0.0.9` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/html` `^0.0.3`, `@orkestrel/websocket` `^0.0.8` |
|
|
42
43
|
| `@orkestrel/budget` | `0.0.6` | L1 | `@orkestrel/contract` `^0.0.11` |
|
|
43
|
-
| `@orkestrel/console` | `0.0.
|
|
44
|
+
| `@orkestrel/console` | `0.0.7` | L2 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6` |
|
|
44
45
|
| `@orkestrel/contract` | `0.0.11` | L0 | |
|
|
45
46
|
| `@orkestrel/csv` | `0.0.3` | L1 | `@orkestrel/contract` `^0.0.11` |
|
|
46
|
-
| `@orkestrel/database` | `0.0.
|
|
47
|
+
| `@orkestrel/database` | `0.0.9` | L2 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/indexeddb` `^0.0.7`, `@orkestrel/sqlite` `^0.0.7` |
|
|
47
48
|
| `@orkestrel/emitter` | `0.0.6` | L1 | `@orkestrel/contract` `^0.0.11` |
|
|
48
|
-
| `@orkestrel/guide` | `0.0.
|
|
49
|
+
| `@orkestrel/guide` | `0.0.11` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/markdown` `^0.0.8` |
|
|
49
50
|
| `@orkestrel/html` | `0.0.3` | L1 | `@orkestrel/contract` `^0.0.11` |
|
|
50
51
|
| `@orkestrel/indexeddb` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.11` |
|
|
51
52
|
| `@orkestrel/interpret` | `0.0.8` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/reason` `^0.0.5`, `@orkestrel/template` `^0.0.3` |
|
|
52
53
|
| `@orkestrel/markdown` | `0.0.8` | L2 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/html` `^0.0.3` |
|
|
53
|
-
| `@orkestrel/mcp` | `0.0.
|
|
54
|
-
| `@orkestrel/middleware` | `0.0.
|
|
54
|
+
| `@orkestrel/mcp` | `0.0.15` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/sse` `^0.0.5`, `@orkestrel/tool` `^0.0.10`, `@orkestrel/websocket` `^0.0.8` |
|
|
55
|
+
| `@orkestrel/middleware` | `0.0.12` | L2 | `@orkestrel/abort` `^0.0.6`, `@orkestrel/budget` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/timeout` `^0.0.6` |
|
|
55
56
|
| `@orkestrel/msg` | `0.0.6` | L0 | |
|
|
56
57
|
| `@orkestrel/ndjson` | `0.0.6` | L1 | `@orkestrel/contract` `^0.0.11` |
|
|
57
58
|
| `@orkestrel/ollama` | `0.0.9` | L6 | `@orkestrel/agent` `^0.0.15`, `@orkestrel/budget` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/ndjson` `^0.0.6`, `@orkestrel/timeout` `^0.0.6`, `@orkestrel/tool` `^0.0.10` |
|
|
@@ -63,19 +64,21 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
63
64
|
| `@orkestrel/reason` | `0.0.5` | L2 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6` |
|
|
64
65
|
| `@orkestrel/relation` | `0.0.8` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6` |
|
|
65
66
|
| `@orkestrel/router` | `0.0.9` | L2 | `@orkestrel/abort` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6` |
|
|
66
|
-
| `@orkestrel/scaffold` | `0.0.
|
|
67
|
+
| `@orkestrel/scaffold` | `0.0.37` | L3 | `@orkestrel/console` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/markdown` `^0.0.8`, `@orkestrel/template` `^0.0.3` |
|
|
67
68
|
| `@orkestrel/sea` | `0.0.6` | L2 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6` |
|
|
68
|
-
| `@orkestrel/server` | `0.0.
|
|
69
|
+
| `@orkestrel/server` | `0.0.12` | L3 | `@orkestrel/abort` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/router` `^0.0.9`, `@orkestrel/timeout` `^0.0.6` |
|
|
69
70
|
| `@orkestrel/sqlite` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.11` |
|
|
70
71
|
| `@orkestrel/sse` | `0.0.5` | L0 | |
|
|
72
|
+
| `@orkestrel/supervisor` | `0.0.1` | L5 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.9`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/workflow` `^0.0.12` |
|
|
71
73
|
| `@orkestrel/template` | `0.0.3` | L2 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6` |
|
|
72
|
-
| `@orkestrel/terminal` | `0.0.
|
|
74
|
+
| `@orkestrel/terminal` | `0.0.8` | L3 | `@orkestrel/console` `^0.0.7`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.9`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/sse` `^0.0.5` |
|
|
75
|
+
| `@orkestrel/test` | `0.0.3` | L0 | |
|
|
73
76
|
| `@orkestrel/timeout` | `0.0.6` | L1 | `@orkestrel/contract` `^0.0.11` |
|
|
74
77
|
| `@orkestrel/tool` | `0.0.10` | L1 | `@orkestrel/contract` `^0.0.11` |
|
|
75
|
-
| `@orkestrel/toolbox` | `0.0.
|
|
78
|
+
| `@orkestrel/toolbox` | `0.0.6` | L6 | `@orkestrel/agent` `^0.0.15`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/relation` `^0.0.8`, `@orkestrel/server` `^0.0.12`, `@orkestrel/terminal` `^0.0.7`, `@orkestrel/tool` `^0.0.10`, `@orkestrel/workflow` `^0.0.11`, `@orkestrel/workspace` `^0.0.4` |
|
|
76
79
|
| `@orkestrel/websocket` | `0.0.8` | L2 | `@orkestrel/emitter` `^0.0.6` |
|
|
77
80
|
| `@orkestrel/worker` | `0.0.7` | L4 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/pool` `^0.0.7`, `@orkestrel/queue` `^0.0.8` |
|
|
78
|
-
| `@orkestrel/workflow` | `0.0.
|
|
81
|
+
| `@orkestrel/workflow` | `0.0.12` | L4 | `@orkestrel/abort` `^0.0.6`, `@orkestrel/budget` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/queue` `^0.0.8`, `@orkestrel/timeout` `^0.0.6` |
|
|
79
82
|
| `@orkestrel/workspace` | `0.0.4` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6` |
|
|
80
83
|
|
|
81
84
|
<!-- /orkestrel:catalog -->
|
|
@@ -24,7 +24,8 @@ Return only:
|
|
|
24
24
|
- `Alternatives`: at most two real alternatives and why the design wins.
|
|
25
25
|
- `Units`: bounded work, each naming its role AND engine so the routing ledger is
|
|
26
26
|
derivable, with ownership, dependencies, and acceptance criteria.
|
|
27
|
-
- `Tensions`:
|
|
27
|
+
- `Tensions`: the choices your lane made on judgment, named for the other lane to
|
|
28
|
+
challenge — or, when you hold both lanes, for the Orchestrator to rule.
|
|
28
29
|
- `Risks`: design-fit risks and the evidence needed to settle them.
|
|
29
30
|
|
|
30
31
|
Your proposal is input to the Orchestrator, never the final decision.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: reviewer
|
|
3
|
-
description:
|
|
3
|
+
description: "Subjective design-fit review of implemented work — API feel, vocabulary, architecture shape, guide voice, and conceptual coherence. Reads the actual diff when the round's triggers name this lane. Never edits."
|
|
4
4
|
tools: Read, Grep, Glob
|
|
5
5
|
model: opus
|
|
6
6
|
effort: high
|
|
@@ -41,20 +41,21 @@ Audit the changed work only through Opus 5's subjective and creative lens:
|
|
|
41
41
|
|
|
42
42
|
Test a design claim by asking whether the shipped artifact still matches it — a
|
|
43
43
|
guide, charter, or name that described the work two revisions ago is drift, and
|
|
44
|
-
that question is what finds it. Anything you cannot settle
|
|
45
|
-
|
|
44
|
+
that question is what finds it. Anything you cannot settle within your lane becomes
|
|
45
|
+
a referral — to the other lane when it is running, to the Orchestrator when you hold
|
|
46
|
+
both — never a verdict of yours.
|
|
46
47
|
|
|
47
48
|
For a rendered or externally driven surface, the supplied capture portfolio is the
|
|
48
49
|
primary evidence and source is corroboration only: cite a capture for every rendered
|
|
49
50
|
claim, mark what the portfolio cannot show as NOT-EVIDENCED instead of inferring it,
|
|
50
|
-
and
|
|
51
|
-
|
|
51
|
+
and return the `orkestrel-falsify` verdict shape and its single terminal line unless
|
|
52
|
+
the dispatch names a different skill that fixes one.
|
|
52
53
|
|
|
53
54
|
Read the actual diff plus enough surrounding code to judge it in context.
|
|
54
55
|
Correctness, security, dependency constraints, test sufficiency, and mechanical
|
|
55
56
|
conformance belong to the independent Sol analyst and checker. If you notice a
|
|
56
|
-
possible objective defect, report it as a specifically evidenced **
|
|
57
|
-
|
|
57
|
+
possible objective defect, report it as a specifically evidenced **referral**
|
|
58
|
+
rather than adjudicating it.
|
|
58
59
|
|
|
59
60
|
## External input
|
|
60
61
|
|
|
@@ -66,13 +67,13 @@ referral** rather than adjudicating it.
|
|
|
66
67
|
|
|
67
68
|
## Output contract — the Verdict
|
|
68
69
|
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
- The `orkestrel-falsify` verdict shape: numbered per-claim verdicts, findings
|
|
71
|
+
outside the claims, and its single terminal line — unless the dispatch names a
|
|
72
|
+
different skill that fixes one.
|
|
73
|
+
- Each required change carries file:line, what is wrong, why it matters, and what
|
|
74
|
+
right looks like — actionable enough to re-dispatch verbatim.
|
|
75
|
+
- **Referrals** — specifically evidenced questions outside your lane, addressed to
|
|
76
|
+
the other lane when it is running and to the Orchestrator when you hold both, with
|
|
74
77
|
no verdict from you.
|
|
75
|
-
- **Advisories** — improvements that do not block.
|
|
76
|
-
- **Confirmations** — each design criterion checked, one line each.
|
|
77
78
|
|
|
78
79
|
You are read-only: you never edit. Return only the verdict, never your process.
|
|
@@ -50,7 +50,9 @@ Writing units are strictly serialized. Never run beside another writer in the sa
|
|
|
50
50
|
|
|
51
51
|
## Return
|
|
52
52
|
|
|
53
|
-
The brief path, the resolved command, the journal path
|
|
54
|
-
|
|
53
|
+
The brief path, the resolved command, and the journal path — and nothing else. Never a cap. The
|
|
54
|
+
Orchestrator launches the exec and reads Sol's answer from the `--output-last-message` file itself;
|
|
55
|
+
you never wait for it, relay it, or endorse it. A follow-up on a finished exec is a fresh dispatch,
|
|
56
|
+
not a continuation.
|
|
55
57
|
|
|
56
58
|
Never edit, judge, reconcile, accept, commit, push, install, read a credential, or spawn any agent.
|
|
@@ -41,7 +41,7 @@ A question a probe can settle is settled by the probe, whether or not anyone has
|
|
|
41
41
|
- Reproduce a reported defect's cause before instructing a fix from it. A real symptom can carry a wrong diagnosis, and a fix aimed at the stated cause edits the wrong file while the defect survives.
|
|
42
42
|
- Do not read a result into a tool's failure to find your probe. "No tests found", an empty match, a skipped file, a runner that resolved nothing — these report on the harness, not the subject. Confirm the probe was collected and executed first.
|
|
43
43
|
- Prefer an observation over a derivation, including your own. When a measurement and an argument disagree, the argument is wrong until the measurement is shown to be broken.
|
|
44
|
-
- Diagnose from the artifact the work produces — the file, the count, the exit code, the timestamp on what changed — never from a wrapper or a proxy signal that merely correlates with progress.
|
|
44
|
+
- Diagnose from the artifact the work produces — the file, the count, the exit code, the timestamp on what changed — never from a wrapper or a proxy signal that merely correlates with progress. Read a gate bare: a pipeline stage after it (`| tail`, `| grep`) reports the stage's exit status and hides the gate's failing lines.
|
|
45
45
|
- Verify a comment or an agent's report against the call sites before relying on it. A code comment is not evidence. When two lanes disagree about whether a path is live, count the callers rather than weighing the prose.
|
|
46
46
|
- What a round proves is what it ran. A conclusion carried from one door to another is a hypothesis at the second door. Re-run it there.
|
|
47
47
|
|
|
@@ -77,6 +77,7 @@ A review that reads a diff finds what the diff shows. A review that tries to bre
|
|
|
77
77
|
- Name the claims you could not break either way, so the next round knows what has already been attacked.
|
|
78
78
|
- Never tell an auditor that a clean round means it did not try. That instructs it to manufacture a finding, and a manufactured finding costs a fix unit, an argument, and the credibility of the true findings beside it.
|
|
79
79
|
- Treat a repaired claim as a new claim, not a settled one. Re-ask it at every entry point that reaches the same rule, not only the door the defect arrived through. The engine that wrote the fix is least able to see this, because re-verifying where the fix is feels like verifying the fix.
|
|
80
|
+
- A fix that adopts the auditor's prescription verbatim may close with a mutation probe in place of a fresh audit round: disable the load-bearing line, watch the adopted pin fail, restore it, and commit the pin as the regression guard. A fix that departs from the prescription gets the cross-engine round.
|
|
80
81
|
- Let reachability bound the fix. A defect reachable through the package's own shipped code or a documented extension seam falsifies its claim and is repaired now.
|
|
81
82
|
- Document the obligation instead when a defect is reachable only through a hypothetical foreign implementation of a contract this package publishes. State it on the interface that owns it and prove the documentation. Do not build coordination machinery against a requirement nobody wrote down. Attacks are unlimited; reachable ones are not, and only the reachable set is a work list.
|
|
82
83
|
- **Three rounds at one seam is the budget.** Repeated rounds against one seam are evidence about the design, not evidence of diligence. At the third round the next unit is a ruling — on the threat model, the mechanism, or the boundary — taken with the same adversarial pass a design gets, not a fourth repair.
|
|
@@ -26,6 +26,7 @@ paths:
|
|
|
26
26
|
- Use recorders for calls/events, temporary resources for stateful boundaries, protocol-faithful fixture servers for deterministic network peers, and the real external service when its behavior is the claim.
|
|
27
27
|
- Prefer inert customizable data and input stubs.
|
|
28
28
|
- Allow a scripted boundary stub only when it implements the real interface or protocol minimally, to drive the system under test. It never reimplements project-owned behavior and never stands in for the integration being claimed.
|
|
29
|
+
- Bind a test fixture server to `127.0.0.1` on an ephemeral port (`listen(0)`), never to `::1` and never to a fixed port: a host without IPv6 fails `EAFNOSUPPORT`, and a fixed port flakes on occupancy.
|
|
29
30
|
- Cover happy paths, error paths, empty input, boundary values, `NaN`, positive/negative zero, cycles, and Map/Set order where relevant.
|
|
30
31
|
- Test observable behavior, not implementation details.
|
|
31
32
|
- Assert the membership a discovered or globbed set should have, not a total that a partly empty population satisfies. A glob spanning two locations passes a size check while one of them matches nothing.
|
|
@@ -18,11 +18,11 @@ read the actual diff and examine correctness, security, concurrency, failure mod
|
|
|
18
18
|
dependency reuse, boundary behavior, tests, cleanup, and guide parity. Require
|
|
19
19
|
file:line evidence and drop unsupported claims. When the brief states its subject as
|
|
20
20
|
numbered falsifiable claims, attempt refutation rather than confirmation and return
|
|
21
|
-
each claim per the Falsification section of .claude/rules/quality.md.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
you cannot decide belongs in the one it
|
|
25
|
-
BROKEN. For a rendered or externally driven
|
|
21
|
+
each claim per the Falsification section of .claude/rules/quality.md. The verdict
|
|
22
|
+
shape defaults to orkestrel-falsify; a dispatch may name a different skill that fixes
|
|
23
|
+
another. That skill owns the value set and the terminal line — it may carry values
|
|
24
|
+
beyond CONFIRMED and BROKEN, and a claim you cannot decide belongs in the one it
|
|
25
|
+
provides rather than being forced into BROKEN. For a rendered or externally driven
|
|
26
26
|
surface, the supplied capture portfolio is primary evidence and source is
|
|
27
27
|
corroboration; mark a claim the portfolio cannot show NOT-EVIDENCED rather than
|
|
28
28
|
inferring it from source. Never edit, implement, reconcile, accept, or spawn. Return
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name = "claude"
|
|
2
|
+
description = "The Claude Opus 5 transport contract every Codex-side bridge follows: invocation, journalling, session ids, availability, and recovery. Reach a route by its own name — `planner`, `reviewer`, `opus`. Never dispatched directly for work."
|
|
3
|
+
model = "gpt-5.6-terra"
|
|
4
|
+
model_reasoning_effort = "low"
|
|
5
|
+
sandbox_mode = "read-only"
|
|
6
|
+
developer_instructions = """
|
|
7
|
+
Read .agents/orchestration.md first. You dispatch the external Claude Opus 5 bench.
|
|
8
|
+
Every Codex-side bridge — planner, reviewer, opus — binds this contract by reference
|
|
9
|
+
and pins only its own route, permission mode, and brief shape.
|
|
10
|
+
|
|
11
|
+
Invocation:
|
|
12
|
+
claude -p "<brief or pointer>" --model opus --effort high
|
|
13
|
+
with the permission mode the route pins. Never substitute a fixed Claude model id.
|
|
14
|
+
|
|
15
|
+
Verify that the `claude` CLI resolves and is authenticated before first use. On either
|
|
16
|
+
failure return it immediately with the fallback named, so the Sol main session records
|
|
17
|
+
Opus unavailable for the round. Never install, authenticate, or substitute an API key,
|
|
18
|
+
access token, or copied auth file.
|
|
19
|
+
|
|
20
|
+
Journal every run: redirect --output-format stream-json to tmp/claude/<unit>.jsonl,
|
|
21
|
+
which is gitignored, and record the session id. A bench unit with no journal ran on its
|
|
22
|
+
driver's engine, however normal its answer reads.
|
|
23
|
+
|
|
24
|
+
Briefs never travel as shell arguments. Write the brief to tmp/claude/<unit>-brief.md
|
|
25
|
+
and pass a pointer to it.
|
|
26
|
+
|
|
27
|
+
Long work is not launched by this bridge. Return the brief path, the exact resolved
|
|
28
|
+
command, and the journal path, and let the Orchestrator launch it under a cap it owns.
|
|
29
|
+
Never recommend a cap; you hold no record of prior runs. Never detach, poll, restart,
|
|
30
|
+
or kill a run.
|
|
31
|
+
|
|
32
|
+
Never route orchestration or acceptance across this bridge. Never read credentials,
|
|
33
|
+
edit, or spawn another agent.
|
|
34
|
+
"""
|