opencode-thrum-pro 0.1.4 → 0.1.6
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/assets/commands/thrum-_compact-runtime-commands.md +61 -0
- package/assets/commands/thrum-_snapshot-protocol.md +17 -6
- package/assets/commands/thrum-_stamp-protocol.md +9 -2
- package/assets/commands/thrum-compact-extended.md +352 -0
- package/assets/commands/thrum-compact.md +300 -0
- package/assets/commands/thrum-inbox.md +1 -1
- package/assets/commands/thrum-restart-extended.md +84 -11
- package/assets/commands/thrum-restart.md +105 -13
- package/assets/commands/thrum-send.md +4 -1
- package/assets/commands/thrum-sleep-extended.md +67 -46
- package/assets/commands/thrum-sleep.md +67 -58
- package/assets/skills/adversarial-critique/SKILL.md +5 -8
- package/assets/skills/agent-messaging-protocol/SKILL.md +35 -0
- package/assets/skills/brainstorm-steward/SKILL.md +65 -11
- package/assets/skills/brainstormer-staying-current/SKILL.md +113 -0
- package/assets/skills/choosing-subagent-models/SKILL.md +14 -0
- package/assets/skills/conversation-only-context/SKILL.md +11 -11
- package/assets/skills/conversation-only-context/resources/driver-subagent-pattern.md +1 -1
- package/assets/skills/conversation-only-context/resources/remote-environment-scenarios.md +1 -1
- package/assets/skills/coordinator-assessing-agent-completion/SKILL.md +98 -6
- package/assets/skills/coordinator-context-monitoring/SKILL.md +29 -19
- package/assets/skills/coordinator-deploying-a-node/SKILL.md +124 -0
- package/assets/skills/coordinator-dispatching-work/SKILL.md +24 -11
- package/assets/skills/coordinator-hotpath-merge-gate/SKILL.md +62 -20
- package/assets/skills/coordinator-managing-state-and-lifecycle/SKILL.md +6 -6
- package/assets/skills/coordinator-merging-code/SKILL.md +25 -11
- package/assets/skills/coordinator-philosophy-merge-gate/SKILL.md +28 -7
- package/assets/skills/coordinator-plan-reconcile-gate/SKILL.md +3 -3
- package/assets/skills/coordinator-rolling-out-to-nodes/SKILL.md +92 -0
- package/assets/skills/coordinator-running-autonomous-feature-development/SKILL.md +3 -3
- package/assets/skills/coordinator-running-brainstorm-cycles/SKILL.md +58 -71
- package/assets/skills/coordinator-running-review-cycles/SKILL.md +15 -4
- package/assets/skills/diagnosing-fleet-and-daemon/SKILL.md +0 -2
- package/assets/skills/efficient-multi-agent-research/SKILL.md +6 -7
- package/assets/skills/implementer-orchestrating-execution/SKILL.md +11 -14
- package/assets/skills/orchestrate/SKILL.md +47 -35
- package/assets/skills/persistent-watcher-archetype/SKILL.md +188 -37
- package/assets/skills/persistent-watcher-archetype/resources/capture_archive.py +618 -0
- package/assets/skills/persistent-watcher-archetype/resources/jev_watcher_filter.py +837 -0
- package/assets/skills/persistent-watcher-archetype/resources/roster-watch.sh +1140 -0
- package/assets/skills/persistent-watcher-archetype/resources/roster-watch_test.sh +291 -0
- package/assets/skills/persistent-watcher-archetype/resources/thrum-capture-fallback.sh +2 -2
- package/assets/skills/persistent-watcher-archetype/resources/thrum-watch-pane-capture.sh +20 -8
- package/assets/skills/prime-agent/SKILL.md +10 -0
- package/assets/skills/project-setup/SKILL.md +22 -16
- package/assets/skills/project-setup/resources/implementation-agent.md +56 -35
- package/assets/skills/researcher-investigating/SKILL.md +2 -5
- package/assets/skills/state-migration/SKILL.md +1 -1
- package/assets/skills/thrum/SKILL.md +14 -7
- package/assets/skills/thrum/resources/ANTI_PATTERNS.md +16 -18
- package/assets/skills/thrum/resources/CLI_REFERENCE.md +17 -11
- package/assets/skills/thrum/resources/LISTENER_PATTERN.md +9 -3
- package/assets/skills/thrum/resources/MESSAGING.md +18 -11
- package/assets/skills/thrum/resources/WORKTREES.md +1 -1
- package/assets/skills/thrum-memory/SKILL.md +1 -1
- package/assets/skills/trace-spec-to-plan/resources/sweep-agent-prompt.md +1 -1
- package/assets/skills/update-queue/SKILL.md +6 -8
- package/assets/skills/using-the-dashboard/SKILL.md +30 -0
- package/assets/skills/using-the-queue/SKILL.md +76 -5
- package/assets/skills/using-thrum-state/SKILL.md +84 -1
- package/assets/skills/verify-against-plan/SKILL.md +120 -5
- package/assets/skills/watcher-archetype/SKILL.md +18 -0
- package/assets/skills/writing-durable-markdown/SKILL.md +5 -0
- package/dist/installer.js +4 -4
- package/dist/permission-fixture.integration.test.js +4 -4
- package/package.json +1 -1
- package/assets/skills/coordinator-deploying-the-fleet/SKILL.md +0 -396
- package/dist/allowlist-sync.test.d.ts +0 -1
- package/dist/allowlist-sync.test.js +0 -44
|
@@ -40,25 +40,23 @@ at every stage:
|
|
|
40
40
|
the impl prompt** → 8. Hand off to coord for implementer dispatch.
|
|
41
41
|
|
|
42
42
|
**Three explicit review gates** at stages 3, 6, and 7 — same dual-axis pattern
|
|
43
|
-
each time (`verify-against-source` + a prose-quality reviewer,
|
|
43
|
+
each time (`verify-against-source` + a prose-quality reviewer, sub-agents (model per `choosing-subagent-models`)
|
|
44
44
|
in parallel — see "Review-loop mechanics" below). Skipping any review gate is a
|
|
45
45
|
documented anti-pattern. The brainstorm review catches design issues; the plan
|
|
46
|
-
review
|
|
47
|
-
|
|
48
|
-
the
|
|
46
|
+
review is the SOLE quality gate on the plan doc — the researcher authors the
|
|
47
|
+
plan directly (no external tool with its own internal reviewer sits upstream of
|
|
48
|
+
this gate); the prompt review catches plan→prompt translation errors before the
|
|
49
|
+
implementer executes against them.
|
|
49
50
|
|
|
50
51
|
## Subagent model selection
|
|
51
52
|
|
|
52
|
-
> **Model tiers:** pass an explicit `model:` on every dispatch
|
|
53
|
-
> (low effort) mechanical, `sonnet` (medium effort) judgment, Opus only on
|
|
54
|
-
> operator-ask or a skill step that names it. See the
|
|
55
|
-
> `choosing-subagent-models` skill for the full policy.
|
|
53
|
+
> **Model tiers:** pass an explicit `model:` on every dispatch; choose model and effort per the `choosing-subagent-models` skill (read `runtime.role_models` at the moment of use). Never let a sub-agent inherit your own model.
|
|
56
54
|
|
|
57
55
|
### Prefer `efficient-multi-agent-research` for multi-part research
|
|
58
56
|
|
|
59
57
|
When a research or investigation task has independent parts, reach for the
|
|
60
58
|
`efficient-multi-agent-research` skill FIRST — it partitions the work across
|
|
61
|
-
many cheap parallel subagents (
|
|
59
|
+
many cheap parallel subagents (cheap gatherers, judgment-tier synthesizers) instead of
|
|
62
60
|
one expensive serial subagent. It is the preferred research path: cheaper,
|
|
63
61
|
faster, and it keeps each subagent's context tight.
|
|
64
62
|
|
|
@@ -72,16 +70,16 @@ names only its stage-specific source.
|
|
|
72
70
|
| Axis | Reviewer | Notes |
|
|
73
71
|
| --------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
74
72
|
| **Conformance** | `verify-against-source` (thrum-owned skill) | Does the artifact honor its INPUT(s)? Replaces `verify-against-plan` at prose gates — `verify-against-plan` BAILS without a code diff + a File-Structure table, so it cannot run on a brainstorm/plan/prompt. `verify-against-source` accepts a prose artifact + source doc with neither. |
|
|
75
|
-
| **Quality** | general-purpose
|
|
73
|
+
| **Quality** | general-purpose sub-agent (model per `choosing-subagent-models`) + prose-quality rubric (PRIMARY) ∥ `superpowers:requesting-code-review` (SUPPLEMENTARY) | The general-purpose prose-quality pass (internal consistency, gaps, contradiction, ambiguity, scope creep) is AUTHORITATIVE. `requesting-code-review` runs on a DIFF, so point it at the artifact's own commit range (`HEAD~1..HEAD`) — gated on the skill being resolvable; skip gracefully if absent. ⚠️ **That is the diff of the `.md` file, NOT a diff against the production code the artifact describes** — this row does NOT cover the code axis. Prose-vs-code is Conformance's job (see `verify-against-source` § "Second comparison unit"). |
|
|
76
74
|
|
|
77
|
-
Both are `general-purpose`, `model:
|
|
75
|
+
Both are `general-purpose`, `model: <per choosing-subagent-models>`, `run_in_background: true`. Wait
|
|
78
76
|
for BOTH before consolidating. Verify each BLOCKING against source before
|
|
79
77
|
forwarding.
|
|
80
78
|
|
|
81
79
|
### Footer → commit → stamp (per stage)
|
|
82
80
|
|
|
83
81
|
1. After the artifact is written, append the gate footer:
|
|
84
|
-
`<!-- THRUM-GATE: stage=<brainstorm|plan|prompt> next=<dual-review|
|
|
82
|
+
`<!-- THRUM-GATE: stage=<brainstorm|plan|prompt> next=<dual-review|plan|project-setup|dispatch> -->`
|
|
85
83
|
2. **Commit the artifact (WIP) including the footer** — this gives the
|
|
86
84
|
supplementary `requesting-code-review` pass a real `HEAD~1..HEAD` range.
|
|
87
85
|
3. Run the dual review against that range; each fix cycle commits its changes
|
|
@@ -120,7 +118,7 @@ forwarding.
|
|
|
120
118
|
|
|
121
119
|
### Soft pre-flight greps (the SOFT enforcement tier)
|
|
122
120
|
|
|
123
|
-
Before
|
|
121
|
+
Before writing the plan (Phase 6) and before `project-setup` (Phase 7),
|
|
124
122
|
grep the prior artifact for `THRUM-REVIEW: stage=<S> verdict=Ready:Yes` (or
|
|
125
123
|
`verdict=OVERRIDE`); absent → STOP and run the review first. Anchor the match —
|
|
126
124
|
`grep -E '...verdict=Ready:Yes([[:space:]]|-->|$)'`, never `grep -F` — or an
|
|
@@ -150,32 +148,22 @@ structurally-enforceable gate is `project-setup` Phase 0 (it hard-bails).
|
|
|
150
148
|
`## Deviations from Source` block with attribution `owner decision`, never
|
|
151
149
|
silently absorbed.
|
|
152
150
|
|
|
153
|
-
###
|
|
151
|
+
### No external plugin drives this pipeline (D6)
|
|
154
152
|
|
|
155
|
-
|
|
156
|
-
|
|
153
|
+
Neither the brainstorm stage (Phase 2) nor the plan stage (Phase 6) invokes an
|
|
154
|
+
external skill — the researcher writes both artifacts directly, governed by
|
|
155
|
+
this skill's own protocol block (Phase 2) and structure/stamp/deviations
|
|
156
|
+
requirements (Phase 6). There is nothing to pre-flight-check or bail on for
|
|
157
|
+
either stage, and no `/plugin install` path: no such plugin is declared
|
|
158
|
+
anywhere in this repo's `.claude-plugin/marketplace.json`.
|
|
157
159
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
The one genuinely optional external supplement is `requesting-code-review`
|
|
161
|
+
(Review-loop mechanics, "Quality" row) — not resolvable → SKIP the
|
|
162
|
+
supplementary quality pass gracefully; the loop still runs on the
|
|
163
|
+
general-purpose primary, which is authoritative regardless.
|
|
162
164
|
|
|
163
|
-
`verify-against-source`
|
|
164
|
-
|
|
165
|
-
### Countermand the superpowers chain (outcome-based)
|
|
166
|
-
|
|
167
|
-
`brainstorming` auto-chains to `writing-plans`, and `writing-plans` defaults
|
|
168
|
-
pull toward subagent-driven execution — both bypass thrum's `project-setup`. At
|
|
169
|
-
each invocation, inject (keyed on the concept, so it survives upstream
|
|
170
|
-
rewording):
|
|
171
|
-
|
|
172
|
-
> Regardless of any execution-handoff, "recommended" sub-skill, or save-location
|
|
173
|
-
> default these skills emit, the ONLY downstream path in thrum is the next thrum
|
|
174
|
-
> stage. After the artifact is written, STOP — do not auto-chain. Save to the
|
|
175
|
-
> thrum path, not the superpowers default. For `writing-plans`: remove/replace
|
|
176
|
-
> the plan-header line matching the stable substring
|
|
177
|
-
> `REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development` and ignore
|
|
178
|
-
> the Execution-Handoff offer — the plan feeds `project-setup`.
|
|
165
|
+
`verify-against-source` and the general-purpose prose-quality pass carry no
|
|
166
|
+
external-plugin dependency and always work.
|
|
179
167
|
|
|
180
168
|
## Phase 1 — Set up the worktree, branch, and agent
|
|
181
169
|
|
|
@@ -235,7 +223,7 @@ noise — start fresh.
|
|
|
235
223
|
|
|
236
224
|
| Topic shape | Base branch |
|
|
237
225
|
| ------------------------------------------------------------------------------------ | ----------------------------------------------------- |
|
|
238
|
-
| Bug fix, hardening, infra cleanup belonging to the current line | The configured merge target — `jq -r '.orchestration.merge_target'
|
|
226
|
+
| Bug fix, hardening, infra cleanup belonging to the current line | The configured merge target — `CONFIG=.thrum/config.json; [ -f .thrum/redirect ] && CONFIG="$(cat .thrum/redirect)/config.json"; jq -r '.orchestration.merge_target' "$CONFIG"` (a worktree's `.thrum/` holds only a `redirect` file, not its own `config.json`) |
|
|
239
227
|
| Work belonging to a multi-epic version program | The version's long-lived branch |
|
|
240
228
|
| Work tied to an existing feature epic with its own long-lived branch | That branch |
|
|
241
229
|
|
|
@@ -353,12 +341,10 @@ distinction in the inbox display):
|
|
|
353
341
|
8. **Go-deep-then-ready instruction** — one sentence telling them to confirm
|
|
354
342
|
readiness, research aggressively, and have meaty material ready when the user
|
|
355
343
|
joins (not to sit idle waiting).
|
|
356
|
-
9. **
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
then Phase 6 runs `writing-plans` deliberately (with its own countermand).
|
|
361
|
-
See "Review-loop mechanics → Countermand the superpowers chain."
|
|
344
|
+
9. **Stop-at-the-artifact instruction** — tell the researcher explicitly: once
|
|
345
|
+
the brainstorm design doc is drafted, STOP there. It goes through the
|
|
346
|
+
Phase 3 review gate before anything else happens; the plan doc is a
|
|
347
|
+
separate, deliberate Phase 6 step after the brainstorm is LOCKED.
|
|
362
348
|
|
|
363
349
|
Send the whole thing as one `thrum send` call. The recipient's runtime will
|
|
364
350
|
display it as a single inbox message; structure beats brevity here.
|
|
@@ -408,7 +394,7 @@ When the researcher reports the brainstorm is ready for review, run the
|
|
|
408
394
|
SUPPLEMENTARY (internal consistency, technical soundness, anti-patterns,
|
|
409
395
|
gaps).
|
|
410
396
|
|
|
411
|
-
Both `general-purpose`, `model:
|
|
397
|
+
Both `general-purpose`, `model: <per choosing-subagent-models>`, `run_in_background: true`. **Have the
|
|
412
398
|
researcher append the gate footer and commit (in their own worktree) BEFORE you
|
|
413
399
|
spawn the dual-review sub-agents** — the brainstorm lives in the researcher's
|
|
414
400
|
branch, and the supplementary `requesting-code-review` pass needs a real
|
|
@@ -433,7 +419,7 @@ confidence about what's already correct and prevents over-editing.
|
|
|
433
419
|
|
|
434
420
|
When the researcher reports their fixes are done:
|
|
435
421
|
|
|
436
|
-
- Run a **targeted verification sub-agent** (one sub-agent,
|
|
422
|
+
- Run a **targeted verification sub-agent** (one sub-agent, model per `choosing-subagent-models`) that reads
|
|
437
423
|
the updated doc and confirms each prescribed fix landed correctly. Do NOT
|
|
438
424
|
re-derive the original findings — that's done.
|
|
439
425
|
- For tiny cosmetic fixes (one-line format updates, missing citations), ask
|
|
@@ -451,10 +437,10 @@ to merge" with stand-down instructions.
|
|
|
451
437
|
## Phase 5 — Overarching coherence pass (when sibling brainstorms close)
|
|
452
438
|
|
|
453
439
|
If the topic is part of a larger program with multiple parallel brainstorms,
|
|
454
|
-
once **all sibling brainstorms reach ready-to-merge**, fire
|
|
455
|
-
coherence + implementability pass over the corpus before specs are written.
|
|
440
|
+
once **all sibling brainstorms reach ready-to-merge**, fire a deep-review
|
|
441
|
+
(model per `choosing-subagent-models`) coherence + implementability pass over the corpus before specs are written.
|
|
456
442
|
|
|
457
|
-
Two parallel passes (background,
|
|
443
|
+
Two parallel passes (background, a deeper tier per `choosing-subagent-models` — escalate because this
|
|
458
444
|
is genuinely cross-cutting reasoning over a large corpus):
|
|
459
445
|
|
|
460
446
|
| Pass | Focus |
|
|
@@ -475,23 +461,21 @@ expensive footguns hide.
|
|
|
475
461
|
## Phase 6 — Researcher writes the plan (with dual-review gate)
|
|
476
462
|
|
|
477
463
|
Once the brainstorm is LOCKED (and any companion design spec is LOCKED), the
|
|
478
|
-
researcher
|
|
479
|
-
|
|
480
|
-
brainstorm for its `THRUM-REVIEW: stage=brainstorm
|
|
481
|
-
`OVERRIDE`) stamp — absent → STOP and finish the
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
path, and strip the `subagent-driven-development` plan-header line — the plan
|
|
485
|
-
feeds `project-setup`, not superpowers execution.
|
|
464
|
+
researcher writes the implementation plan doc directly, converting the
|
|
465
|
+
brainstorm + spec into concrete steps. (First, the soft pre-flight grep:
|
|
466
|
+
`grep -F` the brainstorm for its `THRUM-REVIEW: stage=brainstorm
|
|
467
|
+
verdict=Ready:Yes` (or `OVERRIDE`) stamp — absent → STOP and finish the
|
|
468
|
+
brainstorm review.) The plan feeds `project-setup` — there is no other
|
|
469
|
+
downstream path.
|
|
486
470
|
|
|
487
471
|
**The plan doc gets the SAME dual-review treatment as the brainstorm.** This
|
|
488
|
-
review step is mandatory
|
|
489
|
-
|
|
490
|
-
contract-drift and quality issues
|
|
472
|
+
review step is mandatory: there is no internal reviewer upstream of it, so
|
|
473
|
+
this gate is the plan's only quality check. Independent review catches
|
|
474
|
+
contract-drift and quality issues a single author would miss.
|
|
491
475
|
|
|
492
476
|
**The researcher (not coord) dispatches the dual-review** in their own worktree:
|
|
493
477
|
|
|
494
|
-
1. Researcher writes plan v1
|
|
478
|
+
1. Researcher writes plan v1 directly.
|
|
495
479
|
2. Researcher authors the `## Deviations from Source` block per
|
|
496
480
|
`claude-plugin/commands/_deviations-protocol.md`, diffing plan v1 against
|
|
497
481
|
the brainstorm + design spec — BEFORE dual-review, so
|
|
@@ -573,9 +557,8 @@ review catches translation errors (plan → prompt) plus prompt-specific quality
|
|
|
573
557
|
4. Researcher signals "project-setup complete + post-setup dual-review applied"
|
|
574
558
|
back to coord, citing both review passes + final artifact paths.
|
|
575
559
|
|
|
576
|
-
Reaffirmation (
|
|
577
|
-
|
|
578
|
-
superpowers skill suggests it.
|
|
560
|
+
Reaffirmation (at the prompt stage): `project-setup` is the only downstream
|
|
561
|
+
path for the implementer prompt.
|
|
579
562
|
|
|
580
563
|
If the researcher signals "project-setup complete" WITHOUT mentioning the
|
|
581
564
|
post-setup reviews, ASK explicitly: "did the post-setup dual-review run on the
|
|
@@ -607,9 +590,9 @@ encodes this; include the verbatim protocol block in every briefing.
|
|
|
607
590
|
❌ **Half-batched findings.** Sending review findings before BOTH dual reviews
|
|
608
591
|
complete. Researcher fixes batch 1 and never sees batch 2.
|
|
609
592
|
|
|
610
|
-
❌ **Skipping the post-plan dual-review.**
|
|
611
|
-
|
|
612
|
-
|
|
593
|
+
❌ **Skipping the post-plan dual-review.** Proceeding directly to
|
|
594
|
+
`project-setup` without an independent review of the plan doc — there is no
|
|
595
|
+
internal reviewer upstream of it to lean on. The plan and the impl
|
|
613
596
|
prompt MUST get the same dual-axis review treatment the brainstorm gets — Phase
|
|
614
597
|
6 + Phase 7 explicit.
|
|
615
598
|
|
|
@@ -623,10 +606,14 @@ review it before dispatch.
|
|
|
623
606
|
misread cited code or stretch citations. Spot-verify any BLOCKING that names a
|
|
624
607
|
specific file/line/symbol before forwarding.
|
|
625
608
|
|
|
626
|
-
❌ **`thrum message read --all` mid-brainstorm
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
609
|
+
❌ **`thrum message read --all --force` mid-brainstorm without checking the
|
|
610
|
+
report.** `--all` alone is a dry run (marks nothing); `--force` only drains
|
|
611
|
+
what THAT dry-run listing named, and reports any later arrival as excluded
|
|
612
|
+
rather than silently sweeping it in — so the old "B arrives
|
|
613
|
+
mid-read and gets silently marked" timing bomb no longer applies. Still
|
|
614
|
+
prefer `thrum message read <id> [<id>...]` with specific IDs when juggling
|
|
615
|
+
multiple researchers — it's simpler to reason about than tracking a listing's
|
|
616
|
+
10-minute validity window.
|
|
630
617
|
|
|
631
618
|
❌ **Sub-agents into the researcher's worktree.**
|
|
632
619
|
For code research in the brainstorm worktree, ask the researcher; for broader
|
|
@@ -635,7 +622,7 @@ the worktree path.
|
|
|
635
622
|
|
|
636
623
|
❌ **Skipping the coherence pass.** When ≥ 3 sibling brainstorms close in the
|
|
637
624
|
same program, integration-layer issues that no single review can see are
|
|
638
|
-
virtually guaranteed. Fire the
|
|
625
|
+
virtually guaranteed. Fire the deep-review pass; it's worth the cost.
|
|
639
626
|
|
|
640
627
|
❌ **Renaming brainstorm researchers between topics.** Identity is bound to the
|
|
641
628
|
worktree. If a topic is done, kill the tmux session and tear down the worktree;
|
|
@@ -17,10 +17,7 @@ they're independent reads of the same diff.
|
|
|
17
17
|
reviewers as parallel sub-agents in the same message. Pass each a clear scope
|
|
18
18
|
("review the diff at <BASE>...<HEAD> for <criteria>").
|
|
19
19
|
|
|
20
|
-
> **Model tiers:** pass an explicit `model:` on every dispatch
|
|
21
|
-
> (low effort) mechanical, `sonnet` (medium effort) judgment, Opus only on
|
|
22
|
-
> operator-ask or a skill step that names it. See the
|
|
23
|
-
> `choosing-subagent-models` skill for the full policy.
|
|
20
|
+
> **Model tiers:** pass an explicit `model:` on every dispatch; choose model and effort per the `choosing-subagent-models` skill (read `runtime.role_models` at the moment of use). Never let a sub-agent inherit your own model.
|
|
24
21
|
|
|
25
22
|
## Wait for both reviewers before sending anything to the implementer
|
|
26
23
|
|
|
@@ -48,6 +45,20 @@ one.
|
|
|
48
45
|
when re-reviewing fixes, refer to "finding #4" and the implementer can locate
|
|
49
46
|
it instantly.
|
|
50
47
|
|
|
48
|
+
**Route mechanical bookkeeping findings to the gate, not the implementer.** If a
|
|
49
|
+
consolidated finding is itself mechanical bookkeeping of the kind the gate is
|
|
50
|
+
authorized to self-fix (see `coordinator-merging-code`: census/shard regen, line-
|
|
51
|
+
number or key refreshes, ledger totals/ceilings, per-entry waivers or citations
|
|
52
|
+
recording a classification already established elsewhere — never a new safety
|
|
53
|
+
judgment of your own — nosec baseline hashes, comment wording, stale test
|
|
54
|
+
expectations that merely follow a landed change), do not route it to the
|
|
55
|
+
implementer as a normal finding. Dual review runs BEFORE the Pass-3 gate, so at
|
|
56
|
+
this point there is no gate run yet to fix it: tag the finding as
|
|
57
|
+
gate-deferred-bookkeeping in the consolidated list and carry it forward — the
|
|
58
|
+
gate self-fixes it (a `GATE-AUTHORED` commit plus a narrow re-run of only the
|
|
59
|
+
affected checks) when it runs Pass-3 on this branch. Reserve immediate
|
|
60
|
+
implementer round-trips for real defects and design judgment calls.
|
|
61
|
+
|
|
51
62
|
## Verify reviewer claims against actual code before forwarding
|
|
52
63
|
|
|
53
64
|
**Why:** Reviewers reading a large diff sometimes cite wrong line numbers or
|
|
@@ -195,8 +195,6 @@ hypothesis confirmed.**
|
|
|
195
195
|
| Line | Meaning |
|
|
196
196
|
|---|---|
|
|
197
197
|
| `sync.apply: M1 relay loop detected … dropped` | Working as designed — loop suppression. |
|
|
198
|
-
| `storagegw: gossip: peer … not connected` | Peer offline. Routine. |
|
|
199
|
-
| `storagegw: gossip: peer call failed … caller-peer lacks required capability` | **NOT routine** — a live capability gap. Worth a bead if sustained. |
|
|
200
198
|
| `dead_agent_sweeper: marked dead agent offline` | Routine sweeper work. |
|
|
201
199
|
|
|
202
200
|
---
|
|
@@ -15,10 +15,9 @@ single report.
|
|
|
15
15
|
**Core principle:** The coordinator decides, sub-agents investigate. Keep
|
|
16
16
|
investigation results out of the main context until consolidated.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
workflow: partition, investigate to disk, consolidate, then decide.
|
|
18
|
+
This skill is self-contained: partition, investigate to disk, consolidate,
|
|
19
|
+
then decide — the full dispatch mechanics (Agent tool syntax, background mode,
|
|
20
|
+
read-only scoping) are in "Core Pattern" below.
|
|
22
21
|
|
|
23
22
|
## When to Use
|
|
24
23
|
|
|
@@ -96,13 +95,13 @@ See the `choosing-subagent-models` skill for the full policy. Applied to this
|
|
|
96
95
|
skill's fan-out:
|
|
97
96
|
|
|
98
97
|
- **Level 1 — researchers / gatherers:** scope each one DOWN to a narrow slice
|
|
99
|
-
so you can run MANY in parallel. Use `model:
|
|
98
|
+
so you can run MANY in parallel. Use `model: <per choosing-subagent-models>` (cheapest tier) —
|
|
100
99
|
bounded gather-and-report. Smaller scope = cheaper, concurrent (faster),
|
|
101
100
|
tighter per-agent context.
|
|
102
|
-
- **Level 2 / Level 3 — summarizers / synthesizers:** use `model:
|
|
101
|
+
- **Level 2 / Level 3 — summarizers / synthesizers:** use `model: <per choosing-subagent-models>` —
|
|
103
102
|
aggregating and reconciling Level-1 outputs is judgment work.
|
|
104
103
|
|
|
105
|
-
Prefer many narrow
|
|
104
|
+
Prefer many narrow cheap gatherers over one broad subagent. This is the cheap,
|
|
106
105
|
fast default — equivalent parallelism at a fraction of the token cost.
|
|
107
106
|
|
|
108
107
|
## Common Mistakes
|
|
@@ -6,7 +6,7 @@ description: "Use when starting execution of a scoped implementation task — ab
|
|
|
6
6
|
# Implementer: Orchestrating Execution
|
|
7
7
|
|
|
8
8
|
You implement by **orchestrating sub-agents**, not by doing research, edits, and
|
|
9
|
-
verification yourself. Your
|
|
9
|
+
verification yourself. Your own context is for judgment — synthesizing
|
|
10
10
|
research, targeting edits, judging verification against the plan. The legwork
|
|
11
11
|
goes to cheaper sub-agents. This skill is the procedure; invoke it at the start
|
|
12
12
|
of executing any scoped task.
|
|
@@ -27,10 +27,7 @@ The size bound (~15 lines / 2 files) is the project default; a project-local
|
|
|
27
27
|
|
|
28
28
|
## Subagent model selection
|
|
29
29
|
|
|
30
|
-
> **Model tiers:** pass an explicit `model:` on every dispatch
|
|
31
|
-
> (low effort) mechanical, `sonnet` (medium effort) judgment, Opus only on
|
|
32
|
-
> operator-ask or a skill step that names it. See the
|
|
33
|
-
> `choosing-subagent-models` skill for the full policy.
|
|
30
|
+
> **Model tiers:** pass an explicit `model:` on every dispatch; choose model and effort per the `choosing-subagent-models` skill (read `runtime.role_models` at the moment of use). Never let a sub-agent inherit your own model.
|
|
34
31
|
|
|
35
32
|
## Step 1 — Dispatch research
|
|
36
33
|
|
|
@@ -44,13 +41,13 @@ you do not read the code into your own context. Label the dispatch
|
|
|
44
41
|
From the report, decide exactly what changes where, then dispatch
|
|
45
42
|
general-purpose sub-agent(s) to make the edits. Give each the bd task ID, the
|
|
46
43
|
exact files, the acceptance criteria, and the relevant slice of the report.
|
|
47
|
-
Model: `
|
|
44
|
+
Model: per `choosing-subagent-models`; use the cheapest tier for purely mechanical edits
|
|
48
45
|
(find/replace, rename). Label `description="implement: <what>"`. Parallelize independent
|
|
49
46
|
edit-targets; serialize edits to shared files.
|
|
50
47
|
|
|
51
48
|
## Step 3 — Dispatch verification
|
|
52
49
|
|
|
53
|
-
Spawn a `
|
|
50
|
+
Spawn a verifier sub-agent (model per `choosing-subagent-models`) against **the plan the implementation sub-agent was
|
|
54
51
|
given** — does the diff satisfy the acceptance criteria and honor the plan?
|
|
55
52
|
Label `description="verify: <what>"`. (For the full code-quality +
|
|
56
53
|
spec-compliance review at DONE, `implementer-tdd-and-quality` and the
|
|
@@ -89,12 +86,12 @@ hard size bound.
|
|
|
89
86
|
|
|
90
87
|
| Dispatch | Model |
|
|
91
88
|
| ------------------ | -------------------------------------------------- |
|
|
92
|
-
| research / explore | `
|
|
93
|
-
| implementation | `
|
|
94
|
-
| verification | `
|
|
89
|
+
| research / explore | per `choosing-subagent-models` (or the `Explore` agent type) |
|
|
90
|
+
| implementation | per `choosing-subagent-models`; cheapest tier for purely mechanical edits |
|
|
91
|
+
| verification | per `choosing-subagent-models` |
|
|
95
92
|
|
|
96
|
-
Use the bare
|
|
97
|
-
|
|
93
|
+
Use the bare alias from `runtime.role_models`; do not hard-pin a version id.
|
|
94
|
+
Never let a sub-agent inherit the parent model.
|
|
98
95
|
|
|
99
96
|
## Sub-agent label convention (required)
|
|
100
97
|
|
|
@@ -105,8 +102,8 @@ delegation shape from these labels.
|
|
|
105
102
|
## Anti-patterns
|
|
106
103
|
|
|
107
104
|
❌ **Inline Worker** — does the research and edits itself instead of
|
|
108
|
-
dispatching. Your
|
|
109
|
-
edits a
|
|
105
|
+
dispatching. Your own context is for orchestration judgment, not hand-typing
|
|
106
|
+
edits a sub-agent should make.
|
|
110
107
|
|
|
111
108
|
❌ **Over-orchestrator** — dispatches a sub-agent for a known one-line change,
|
|
112
109
|
paying more in prompt-composition than the edit costs. The Step-0 scoping gate
|
|
@@ -53,8 +53,11 @@ grep "## Review Gate:" <prompt-file-path>
|
|
|
53
53
|
# 4. Dependencies configured
|
|
54
54
|
bd dep tree <epic-id>
|
|
55
55
|
|
|
56
|
-
# 5. Merge target in config
|
|
57
|
-
|
|
56
|
+
# 5. Merge target in config (resolve through .thrum/redirect when present --
|
|
57
|
+
# a worktree's .thrum/ holds only a `redirect` file, not its own config.json)
|
|
58
|
+
CONFIG=.thrum/config.json
|
|
59
|
+
[ -f .thrum/redirect ] && CONFIG="$(cat .thrum/redirect)/config.json"
|
|
60
|
+
cat "$CONFIG" | grep merge_target
|
|
58
61
|
```
|
|
59
62
|
|
|
60
63
|
### Step 2b: Triage CANDIDATE beads (if the dispatch carries any)
|
|
@@ -79,8 +82,8 @@ by the result:
|
|
|
79
82
|
> `choosing-subagent-models` skill's job, not this one — see it for the tiers. What
|
|
80
83
|
> matters here is that you pass one at all: the `roleDefault()` backstop in the
|
|
81
84
|
> daemon covers `thrum tmux launch` of thrum agents, **not** Agent-tool sub-agents,
|
|
82
|
-
> which inherit the PARENT model when unspecified. An orchestrator
|
|
83
|
-
> omits `model:` gets
|
|
85
|
+
> which inherit the PARENT model when unspecified. An orchestrator whose own tier is
|
|
86
|
+
> costly that omits `model:` gets costly-priced triage.
|
|
84
87
|
|
|
85
88
|
| Result | Action |
|
|
86
89
|
|---|---|
|
|
@@ -181,13 +184,13 @@ thrum worktree create <name>
|
|
|
181
184
|
# Pin --model on BOTH create AND launch — create's persist to runtime_config.json
|
|
182
185
|
# is asynchronous and can lose the race to launch's resolution if launch omits
|
|
183
186
|
# the flag (see CLAUDE.md "Launching an Agent"). There is no create-only shortcut.
|
|
184
|
-
# Always launch implementers
|
|
185
|
-
# no lower tier exists.
|
|
187
|
+
# Always launch implementers pinned to the tier from runtime.role_models, per
|
|
188
|
+
# choosing-subagent-models; that tier is the floor, no lower tier exists.
|
|
186
189
|
thrum tmux create <name> --cwd <worktree-path> \
|
|
187
190
|
--name <agent_name> --role implementer --module <module> \
|
|
188
191
|
--mode ephemeral --identity ephemeral \
|
|
189
|
-
--model
|
|
190
|
-
thrum tmux launch <name> --runtime <runtime> --model
|
|
192
|
+
--model <from runtime.role_models, per choosing-subagent-models>
|
|
193
|
+
thrum tmux launch <name> --runtime <runtime> --model <from runtime.role_models, per choosing-subagent-models>
|
|
191
194
|
```
|
|
192
195
|
|
|
193
196
|
> **Implementer lifecycle:** All implementers are ephemeral+stateless (no agent
|
|
@@ -215,7 +218,7 @@ it fails again, escalate to the human.
|
|
|
215
218
|
### Step 3b: Verify the model pin took
|
|
216
219
|
|
|
217
220
|
If `--model` is dropped anywhere in the create/launch sequence, the implementer
|
|
218
|
-
launches UNPINNED and the runtime defaults to
|
|
221
|
+
launches UNPINNED and the runtime defaults to its own (costly) model — the exact expensive
|
|
219
222
|
failure this tier exists to prevent. Confirm the pin landed before assigning
|
|
220
223
|
work, using `thrum tmux capture --format=annotated` (see CLAUDE.md "Launching
|
|
221
224
|
an Agent — Verify the Model by Pane, Never by `runtime-config get`" for the
|
|
@@ -226,12 +229,12 @@ NBSP fallback trap, and the by-position read):
|
|
|
226
229
|
thrum tmux capture <agent-name> --format=annotated --lines 12
|
|
227
230
|
```
|
|
228
231
|
|
|
229
|
-
That prints the runtime's own footer line, e.g. `Model:
|
|
232
|
+
That prints the runtime's own footer line, e.g. `Model: <resolved model>`. **Read the
|
|
230
233
|
intended tier from `.thrum/config.json` → `runtime.role_models`, not from memory.**
|
|
231
|
-
If the footer shows a different tier (see the BLOCKED note under Step 2 —
|
|
232
|
-
|
|
233
|
-
`thrum tmux create ... --model
|
|
234
|
-
`thrum agent runtime-config set <agent_name> --model
|
|
234
|
+
If the footer shows a different tier (see the BLOCKED note under Step 2 — the model ban
|
|
235
|
+
list lives in `choosing-subagent-models`), the pin failed silently — re-pin with
|
|
236
|
+
`thrum tmux create ... --model <from runtime.role_models, per choosing-subagent-models>` (or
|
|
237
|
+
`thrum agent runtime-config set <agent_name> --model <from runtime.role_models, per choosing-subagent-models>`) and relaunch BEFORE
|
|
235
238
|
assigning work. **Do not dispatch an unpinned implementer** — the daemon's
|
|
236
239
|
role-default backstop (`jq -r '.runtime.role_models' .thrum/config.json`) is a
|
|
237
240
|
net for a forgotten pin, not a substitute for this check.
|
|
@@ -329,9 +332,9 @@ Handle each message type:
|
|
|
329
332
|
2. Dispatch BOTH reviewers IN PARALLEL (one Agent call per reviewer in the same
|
|
330
333
|
response). Block until BOTH return:
|
|
331
334
|
- Code-quality: `superpowers:code-reviewer` (or `feature-dev:code-reviewer`
|
|
332
|
-
if the project provides one) — `model:
|
|
335
|
+
if the project provides one) — `model: <per choosing-subagent-models>`
|
|
333
336
|
- Spec-compliance: `general-purpose` reviewer cross-referencing the plan/
|
|
334
|
-
spec — `model:
|
|
337
|
+
spec — `model: <per choosing-subagent-models>`
|
|
335
338
|
3. **Verify** every cited `file:line` claim against the actual source before
|
|
336
339
|
forwarding. Reviewers can misread files; forwarding unverified findings
|
|
337
340
|
wastes the implementer's time.
|
|
@@ -389,10 +392,7 @@ Handle each message type:
|
|
|
389
392
|
**Sub-agent model discipline (applies to ALL Agent tool calls in this phase and
|
|
390
393
|
Phase 5):**
|
|
391
394
|
|
|
392
|
-
> **Model tiers:** pass an explicit `model:` on every dispatch
|
|
393
|
-
> (low effort) mechanical, `sonnet` (medium effort) judgment, Opus only on
|
|
394
|
-
> operator-ask or a skill step that names it. See the
|
|
395
|
-
> `choosing-subagent-models` skill for the full policy.
|
|
395
|
+
> **Model tiers:** pass an explicit `model:` on every dispatch; choose model and effort per the `choosing-subagent-models` skill (read `runtime.role_models` at the moment of use). Never let a sub-agent inherit your own model.
|
|
396
396
|
|
|
397
397
|
**Blocker:**
|
|
398
398
|
|
|
@@ -508,7 +508,7 @@ in Scope Boundaries). Analyze the conflict using your plan/intent context to
|
|
|
508
508
|
determine the correct resolution. Then spawn a targeted edit sub-agent:
|
|
509
509
|
|
|
510
510
|
```text
|
|
511
|
-
Agent(subagent_type="general-purpose", model="
|
|
511
|
+
Agent(subagent_type="general-purpose", model="<per choosing-subagent-models>",
|
|
512
512
|
prompt="Resolve this specific merge conflict.
|
|
513
513
|
File: <file-path>
|
|
514
514
|
Conflicted section: <paste the <<<< ==== >>>> block>
|
|
@@ -618,18 +618,30 @@ can act on, which is how a guard gets disabled. Classify every hit — only a
|
|
|
618
618
|
classifier failure is a real only-copy:
|
|
619
619
|
|
|
620
620
|
```bash
|
|
621
|
-
# STAGE 2 —
|
|
622
|
-
#
|
|
623
|
-
#
|
|
624
|
-
#
|
|
625
|
-
#
|
|
626
|
-
git
|
|
627
|
-
|
|
628
|
-
#
|
|
629
|
-
|
|
630
|
-
#
|
|
631
|
-
|
|
632
|
-
|
|
621
|
+
# STAGE 2 — classify every stage-1 hit. Test that a BLOB IS RETRIEVABLE,
|
|
622
|
+
# never that the path merely appears in the log: `git log -- <path>` also
|
|
623
|
+
# matches the commit that DELETED the file, and `| head -1` returns exactly
|
|
624
|
+
# that for a trimmed file.
|
|
625
|
+
git log --all --oneline --name-status -- ".thrum/agents/<path>" # read the A/M/D column; do NOT head -1
|
|
626
|
+
git cat-file -e "<add-or-modify-sha>:.thrum/agents/<path>" # rc=0 proves the BLOB EXISTS
|
|
627
|
+
git show "<that-sha>:.thrum/agents/<path>" > /tmp/x && cmp /tmp/x "<worktree-copy>"
|
|
628
|
+
# blob retrievable AND byte-identical -> RECOVERABLE
|
|
629
|
+
# otherwise -> ONLY-COPY — SALVAGE BEFORE REMOVAL
|
|
630
|
+
# Always check rc explicitly on git show/cat-file; never infer from output size.
|
|
631
|
+
# Form the cmp control from two files KNOWN to differ — comparing an
|
|
632
|
+
# accidentally-empty extraction against /dev/null reports "identical" and
|
|
633
|
+
# reads as a passing control.
|
|
634
|
+
|
|
635
|
+
# CONTROLS — the classifier must be able to both affirm and refuse.
|
|
636
|
+
# Exercise BOTH halves of the decision: existence (cat-file -e) AND
|
|
637
|
+
# byte-identity (cmp). Controlling only existence leaves the cmp step
|
|
638
|
+
# unguarded — and cmp is where an accidentally-empty extraction reads
|
|
639
|
+
# as "identical" and passes.
|
|
640
|
+
git cat-file -e "<add-or-modify-sha>:.thrum/agents/<path>"; echo "rc=$? (must be 0)"
|
|
641
|
+
git cat-file -e "<add-or-modify-sha>:.thrum/agents/__nope__/x"; echo "rc=$? (must be NON-ZERO)"
|
|
642
|
+
printf 'x' > /tmp/ctl-differs
|
|
643
|
+
cmp -s /tmp/x /tmp/ctl-differs; echo "rc=$? (must be NON-ZERO — proves cmp CAN detect a difference)"
|
|
644
|
+
cmp -s /tmp/x /tmp/x; echo "rc=$? (must be 0 — proves cmp CAN affirm)"
|
|
633
645
|
```
|
|
634
646
|
|
|
635
647
|
```bash
|
|
@@ -719,7 +731,7 @@ Run review rounds; converge to zero BLOCKING:
|
|
|
719
731
|
**Round N:**
|
|
720
732
|
|
|
721
733
|
1. Dispatch BOTH reviewers IN PARALLEL — code-quality (`feature-dev:code-reviewer`,
|
|
722
|
-
`model:
|
|
734
|
+
`model: <per choosing-subagent-models>`) + spec-compliance (`general-purpose`, `model: <per choosing-subagent-models>`).
|
|
723
735
|
**In each reviewer dispatch prompt, mandate structured severity:**
|
|
724
736
|
> "Label every finding BLOCKING / IMPORTANT / MINOR. At least one label per
|
|
725
737
|
> finding, prefix each finding line."
|
|
@@ -775,7 +787,7 @@ them, forward to coordinator at merge-approval.
|
|
|
775
787
|
**Hard cap — 2 rounds max:**
|
|
776
788
|
If BLOCKING findings remain after round 2:
|
|
777
789
|
|
|
778
|
-
- Step A: REMOVED.
|
|
790
|
+
- Step A: REMOVED. The implementer tier is the floor, so there is no
|
|
779
791
|
lower tier to escalate from. A round-2 BLOCKING failure goes straight to
|
|
780
792
|
Step B.
|
|
781
793
|
- Step B (escalate up): if the implementer fails to converge, escalate to coordinator
|