opencode-thrum-pro 0.1.4 → 0.1.5

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.
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: agent-messaging-protocol
3
+ description: "Use when forwarding or relaying information between parties, routing an owner answer, carrying a decision or request through an intermediary, summarizing another author's message, or adding interpretation to someone else's words."
4
+ ---
5
+
6
+ # Agent Messaging Protocol for Forwarding and Relaying
7
+
8
+ - Communicate directly with the intended party whenever possible.
9
+ - Treat the original message as the authoritative source.
10
+ - Forward a pointer to the original message instead of retyping or paraphrasing its body.
11
+ - Include the original author, original message ID, intended recipient, and requested action.
12
+ - Attach `message:<original-message-id>` as a message reference when supported.
13
+ - Read the original message before acting: `thrum message get <message-id> --json`.
14
+ - Reply against the original message: `thrum reply <message-id> ...`.
15
+ - Do not route the response back through the intermediary.
16
+ - Add commentary or interpretation only when requested or necessary.
17
+ - Label added reasoning as `INTERPRETATION - @agent`.
18
+ - Never present an interpretation, summary, or recommendation as words or authority from the original author.
19
+ - Label a requested summary as `SUMMARY - @agent` and retain the original message ID.
20
+ - Preserve the original scope, urgency, constraints, and requested action.
21
+ - Do not introduce new requirements, decisions, risks, or authorization while routing.
22
+ - Ask the original author directly when clarification is required.
23
+ - Continue referencing the original message rather than an intermediary's summary.
24
+ - Identify corrections by the exact message they supersede.
25
+ - Distinguish delivery, acknowledgement, execution, and verification.
26
+ - Preserve the original thread audience when replying unless a deliberately narrower audience is required.
27
+
28
+ ## Routing Envelope
29
+
30
+ ```text
31
+ ROUTE POINTER
32
+ From: @original-author
33
+ Message: msg_...
34
+ Action: Read and reply to the original message.
35
+ ```
@@ -0,0 +1,116 @@
1
+ ---
2
+ name: brainstormer-staying-current
3
+ description: "Use when a long-lived brainstormer worktree may be behind its configured merge target, before review or handoff, or when asked to merge-forward and leave the worktree clean. Resolves the target and merge owner from Thrum config, preserves local work, and verifies freshness after the merge."
4
+ ---
5
+
6
+ # Brainstormer: Stay Current with the Merge Target
7
+
8
+ Keep a long-lived brainstorm branch current without landing it into the merge
9
+ target. Every git write in this skill (commit, merge, revert, push) stays with
10
+ you — never delegate a git write to a subagent. Every `fetch` also stays with
11
+ you, the acting agent, per Preserve and Bind freshness below. If you delegate
12
+ the read-only merge-base/status analysis, load `choosing-subagent-models`
13
+ first and fence the subagent to `show`, `log`, `diff`, `grep`, `rev-parse`,
14
+ `merge-base`, `status` — the same read-only git surface CLAUDE.md requires for
15
+ every sub-agent — never `stash`, `reset`, `rebase`, `restore`, `clean`,
16
+ `commit`, `push`, or `checkout`.
17
+
18
+ ## Resolve authority from config
19
+
20
+ Locate the canonical config from the current worktree:
21
+
22
+ ```bash
23
+ CONFIG=.thrum/config.json
24
+ if [ ! -f "$CONFIG" ]; then
25
+ COMMON_DIR=$(git rev-parse --path-format=absolute --git-common-dir)
26
+ CONFIG="${COMMON_DIR%/.git}/.thrum/config.json"
27
+ fi
28
+ test -f "$CONFIG"
29
+ TARGET=$(jq -er '.orchestration.merge_target | select(type == "string" and length > 0)' "$CONFIG")
30
+ MERGE_KING=$(jq -r --arg target "$TARGET" '.orchestration.merge_kings[$target] // "unset"' "$CONFIG")
31
+ ```
32
+
33
+ Treat an absent config or target as a blocker — merge-forward has nowhere to
34
+ target without them. A merge-forward only brings `origin/$TARGET` into the
35
+ brainstorm branch; it never grants permission to merge the brainstorm branch
36
+ into `$TARGET`, so it needs no landing authority to run and an `unset`
37
+ `MERGE_KING` never blocks it.
38
+
39
+ `orchestration.merge_kings` may not be populated for every target yet: `unset`
40
+ does NOT mean "nobody owns landing, proceed however" — it means the map
41
+ hasn't caught up (same gap `coordinator-merging-code/SKILL.md` documents for
42
+ branch-keyed lookups). `MERGE_KING` matters only when a conflict needs routing
43
+ or at final report. With it `unset` at either point, fall back to whichever
44
+ coordinator has actually been the merge authority for `$TARGET` in practice
45
+ (check with your team, or the project's operational convention) and
46
+ route/report to them the same as if the map had named them explicitly.
47
+
48
+ ## Preserve before merging
49
+
50
+ Record the current branch, HEAD, status, and ahead/behind counts. Require an
51
+ attached non-target feature branch. Fetch the target branch explicitly:
52
+
53
+ ```bash
54
+ git fetch origin "refs/heads/$TARGET:refs/remotes/origin/$TARGET"
55
+ git rev-list --left-right --count HEAD..."origin/$TARGET"
56
+ ```
57
+
58
+ If the worktree is dirty, preserve tracked and untracked changes as a WIP
59
+ commit and record its SHA — never `git stash`. `stash` is a single shared
60
+ stack across every worktree on this box, not scoped to this worktree or to
61
+ you; a stash push or pop here can silently destroy or restore another agent's
62
+ uncommitted work, with no reflog entry and no recoverable blob for unstaged
63
+ content. A commit is yours alone and fully recoverable.
64
+
65
+ ```bash
66
+ git add -A
67
+ git commit -m "wip: preserve <branch> before merge-forward <timestamp>"
68
+ git rev-parse HEAD
69
+ git status --short
70
+ ```
71
+
72
+ Do not squash, drop, or revert the WIP commit when the requested outcome is a
73
+ clean worktree — it is real history now, not something to discard.
74
+
75
+ Stop if the worktree is still dirty after the WIP commit. Never use `stash`,
76
+ reset, rebase, force checkout, clean, or force push to obtain a clean state —
77
+ `stash` is banned here exactly like the others, with no worktree-scoped
78
+ exception.
79
+
80
+ ## Merge-forward
81
+
82
+ Merge the remote-tracking target into the brainstorm branch:
83
+
84
+ ```bash
85
+ git merge --no-edit "origin/$TARGET"
86
+ ```
87
+
88
+ Resolve a conflict only when the correct result is supported by current source
89
+ and the branch's intended work. Otherwise stop with the conflict intact and
90
+ send the branch, worktree, target, and conflicted paths to the user or
91
+ `$MERGE_KING` for direction — falling back to the operational-convention
92
+ authority per above if `$MERGE_KING` is `unset`.
93
+
94
+ After a successful merge, run validation relevant to every resolved file and
95
+ always run `git diff --check origin/$TARGET..HEAD`.
96
+
97
+ ## Bind freshness to handoff
98
+
99
+ Immediately before reporting success, fetch the target branch explicitly again
100
+ and verify the fetched target is an ancestor of HEAD:
101
+
102
+ ```bash
103
+ git fetch origin "refs/heads/$TARGET:refs/remotes/origin/$TARGET"
104
+ git rev-list --left-right --count HEAD..."origin/$TARGET"
105
+ git merge-base --is-ancestor "origin/$TARGET" HEAD
106
+ git status --short
107
+ ```
108
+
109
+ If the target advanced, repeat the merge-forward and verification, up to three
110
+ merge cycles in one run. After three moving-target results, stop and report the
111
+ new target SHA instead of claiming the branch is current.
112
+
113
+ Report the branch and target SHAs, ahead/behind counts, `$MERGE_KING` (or the
114
+ fallback authority if `unset`), validation, clean status, and the WIP commit
115
+ SHA if one was made. Do not push, squash, or drop the WIP commit unless the
116
+ user separately asks.
@@ -43,9 +43,10 @@ at every stage:
43
43
  each time (`verify-against-source` + a prose-quality reviewer, sonnet sub-agents
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 catches contract-drift and quality issues `writing-plans`' internal
47
- reviewer misses; the prompt review catches plan→prompt translation errors before
48
- the implementer executes against them.
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
 
@@ -81,7 +82,7 @@ forwarding.
81
82
  ### Footer → commit → stamp (per stage)
82
83
 
83
84
  1. After the artifact is written, append the gate footer:
84
- `<!-- THRUM-GATE: stage=<brainstorm|plan|prompt> next=<dual-review|writing-plans|project-setup|dispatch> -->`
85
+ `<!-- THRUM-GATE: stage=<brainstorm|plan|prompt> next=<dual-review|plan|project-setup|dispatch> -->`
85
86
  2. **Commit the artifact (WIP) including the footer** — this gives the
86
87
  supplementary `requesting-code-review` pass a real `HEAD~1..HEAD` range.
87
88
  3. Run the dual review against that range; each fix cycle commits its changes
@@ -120,7 +121,7 @@ forwarding.
120
121
 
121
122
  ### Soft pre-flight greps (the SOFT enforcement tier)
122
123
 
123
- Before invoking `writing-plans` (Phase 6) and before `project-setup` (Phase 7),
124
+ Before writing the plan (Phase 6) and before `project-setup` (Phase 7),
124
125
  grep the prior artifact for `THRUM-REVIEW: stage=<S> verdict=Ready:Yes` (or
125
126
  `verdict=OVERRIDE`); absent → STOP and run the review first. Anchor the match —
126
127
  `grep -E '...verdict=Ready:Yes([[:space:]]|-->|$)'`, never `grep -F` — or an
@@ -150,32 +151,22 @@ structurally-enforceable gate is `project-setup` Phase 0 (it hard-bails).
150
151
  `## Deviations from Source` block with attribution `owner decision`, never
151
152
  silently absorbed.
152
153
 
153
- ### Superpowers dependency (D6)
154
+ ### No external plugin drives this pipeline (D6)
154
155
 
155
- The wrapper drives `superpowers:brainstorming` / `writing-plans`. Two distinct
156
- pre-flight behaviors:
156
+ Neither the brainstorm stage (Phase 2) nor the plan stage (Phase 6) invokes an
157
+ external skill — the researcher writes both artifacts directly, governed by
158
+ this skill's own protocol block (Phase 2) and structure/stamp/deviations
159
+ requirements (Phase 6). There is nothing to pre-flight-check or bail on for
160
+ either stage, and no `/plugin install` path: no such plugin is declared
161
+ anywhere in this repo's `.claude-plugin/marketplace.json` (thrum-tsaq4).
157
162
 
158
- - `requesting-code-review` not resolvable → SKIP the supplementary quality pass
159
- gracefully (the loop still runs on the general-purpose primary).
160
- - `brainstorming` / `writing-plans` not present → **BAIL** with an install
161
- instruction (`/plugin install superpowers@<marketplace>`).
163
+ The one genuinely optional external supplement is `requesting-code-review`
164
+ (Review-loop mechanics, "Quality" row) — not resolvable → SKIP the
165
+ supplementary quality pass gracefully; the loop still runs on the
166
+ general-purpose primary, which is authoritative regardless.
162
167
 
163
- `verify-against-source` carries no superpowers dependency and always works.
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`.
168
+ `verify-against-source` and the general-purpose prose-quality pass carry no
169
+ external-plugin dependency and always work.
179
170
 
180
171
  ## Phase 1 — Set up the worktree, branch, and agent
181
172
 
@@ -353,12 +344,10 @@ distinction in the inbox display):
353
344
  8. **Go-deep-then-ready instruction** — one sentence telling them to confirm
354
345
  readiness, research aggressively, and have meaty material ready when the user
355
346
  joins (not to sit idle waiting).
356
- 9. **Countermand callout** — `superpowers:brainstorming`'s terminal state is
357
- "invoke writing-plans". Tell the researcher explicitly: when brainstorming
358
- reaches that terminal state, STOP at the design doc — do NOT auto-chain to
359
- `writing-plans`. The brainstorm goes through the Phase 3 review gate first,
360
- then Phase 6 runs `writing-plans` deliberately (with its own countermand).
361
- See "Review-loop mechanics → Countermand the superpowers chain."
347
+ 9. **Stop-at-the-artifact instruction** — tell the researcher explicitly: once
348
+ the brainstorm design doc is drafted, STOP there. It goes through the
349
+ Phase 3 review gate before anything else happens; the plan doc is a
350
+ separate, deliberate Phase 6 step after the brainstorm is LOCKED.
362
351
 
363
352
  Send the whole thing as one `thrum send` call. The recipient's runtime will
364
353
  display it as a single inbox message; structure beats brevity here.
@@ -475,23 +464,21 @@ expensive footguns hide.
475
464
  ## Phase 6 — Researcher writes the plan (with dual-review gate)
476
465
 
477
466
  Once the brainstorm is LOCKED (and any companion design spec is LOCKED), the
478
- researcher runs `superpowers:writing-plans` to convert brainstorm + spec into
479
- the implementation plan doc. (First, the soft pre-flight grep: `grep -F` the
480
- brainstorm for its `THRUM-REVIEW: stage=brainstorm verdict=Ready:Yes` (or
481
- `OVERRIDE`) stamp — absent → STOP and finish the brainstorm review.) **Inject
482
- the outcome-based countermand** (see Review-loop mechanics) at the
483
- `writing-plans` invocation: stop when the plan is written, save to the thrum
484
- path, and strip the `subagent-driven-development` plan-header line — the plan
485
- feeds `project-setup`, not superpowers execution.
467
+ researcher writes the implementation plan doc directly, converting the
468
+ brainstorm + spec into concrete steps. (First, the soft pre-flight grep:
469
+ `grep -F` the brainstorm for its `THRUM-REVIEW: stage=brainstorm
470
+ verdict=Ready:Yes` (or `OVERRIDE`) stamp — absent → STOP and finish the
471
+ brainstorm review.) The plan feeds `project-setup` — there is no other
472
+ downstream path.
486
473
 
487
474
  **The plan doc gets the SAME dual-review treatment as the brainstorm.** This
488
- review step is mandatory — `writing-plans` has an internal reviewer, but real-
489
- world experience shows that's not sufficient. Independent review catches
490
- contract-drift and quality issues the internal reviewer misses.
475
+ review step is mandatory: there is no internal reviewer upstream of it, so
476
+ this gate is the plan's only quality check. Independent review catches
477
+ contract-drift and quality issues a single author would miss.
491
478
 
492
479
  **The researcher (not coord) dispatches the dual-review** in their own worktree:
493
480
 
494
- 1. Researcher writes plan v1 via `writing-plans` skill (countermand applied).
481
+ 1. Researcher writes plan v1 directly.
495
482
  2. Researcher authors the `## Deviations from Source` block per
496
483
  `claude-plugin/commands/_deviations-protocol.md`, diffing plan v1 against
497
484
  the brainstorm + design spec — BEFORE dual-review, so
@@ -573,9 +560,8 @@ review catches translation errors (plan → prompt) plus prompt-specific quality
573
560
  4. Researcher signals "project-setup complete + post-setup dual-review applied"
574
561
  back to coord, citing both review passes + final artifact paths.
575
562
 
576
- Reaffirmation (countermand at the prompt stage): `project-setup` is the only
577
- downstream path — do not adopt `subagent-driven-development` execution even if a
578
- superpowers skill suggests it.
563
+ Reaffirmation (at the prompt stage): `project-setup` is the only downstream
564
+ path for the implementer prompt.
579
565
 
580
566
  If the researcher signals "project-setup complete" WITHOUT mentioning the
581
567
  post-setup reviews, ASK explicitly: "did the post-setup dual-review run on the
@@ -607,9 +593,9 @@ encodes this; include the verbatim protocol block in every briefing.
607
593
  ❌ **Half-batched findings.** Sending review findings before BOTH dual reviews
608
594
  complete. Researcher fixes batch 1 and never sees batch 2.
609
595
 
610
- ❌ **Skipping the post-plan dual-review.** Treating `writing-plans` skill's
611
- internal reviewer as sufficient and proceeding directly to `project-setup`
612
- without an independent review of the plan doc. The plan and the impl
596
+ ❌ **Skipping the post-plan dual-review.** Proceeding directly to
597
+ `project-setup` without an independent review of the plan doc — there is no
598
+ internal reviewer upstream of it to lean on. The plan and the impl
613
599
  prompt MUST get the same dual-axis review treatment the brainstorm gets — Phase
614
600
  6 + Phase 7 explicit.
615
601
 
@@ -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
- **REQUIRED BACKGROUND:** Read superpowers:dispatching-parallel-agents before
19
- using this skill. That skill
20
- covers general parallel dispatch. This skill extends it with a specific research
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
 
@@ -227,18 +227,22 @@ stability check, writes one report file, and emits one matchable summary
227
227
  line. It is mechanical only — no auto-escalate, no auto-key — exactly the
228
228
  scope this section already describes; judgment stays in your own turn.
229
229
 
230
- **Setup (one-time per watcher instance):** `CLAUDE_PLUGIN_ROOT` is a
231
- Claude-Code-hook-only env var — it is NOT present in `thrum monitor`'s
232
- scheduled-process environment, so the script cannot locate itself inside
233
- the plugin tree at run time. Copy both scripts out of the skill's
234
- `resources/` into your own agent directory first:
235
-
236
- ```bash
237
- cp "${CLAUDE_PLUGIN_ROOT}/skills/persistent-watcher-archetype/resources/thrum-watch-pane-capture.sh" \
238
- "${CLAUDE_PLUGIN_ROOT}/skills/persistent-watcher-archetype/resources/thrum-capture-fallback.sh" \
239
- .thrum/agents/<you>/
240
- chmod +x .thrum/agents/<you>/thrum-watch-pane-capture.sh .thrum/agents/<you>/thrum-capture-fallback.sh
241
- ```
230
+ **Setup (one-time per watcher instance):** the script cannot locate itself
231
+ inside the plugin tree at run time — `thrum monitor`'s scheduled-process
232
+ environment has none of the plugin-root env vars a hook invocation gets
233
+ (`CLAUDE_PLUGIN_ROOT`, codex's `PLUGIN_ROOT`), and neither is reliably set
234
+ in an ordinary interactive turn either, so a shell `cp` against either
235
+ variable is not runtime-safe in any host. Copy both scripts out of the
236
+ skill's `resources/` into your own agent directory using your Read/Write
237
+ tools instead — the same skill-relative resolution every other `resources/`
238
+ reference in this plugin already uses, with no env var and no
239
+ runtime-versioned path involved:
240
+
241
+ 1. Read `resources/thrum-watch-pane-capture.sh` (relative to this skill) and
242
+ Write its exact content to `.thrum/agents/<you>/thrum-watch-pane-capture.sh`.
243
+ 2. Read `resources/thrum-capture-fallback.sh` and Write its exact content to
244
+ `.thrum/agents/<you>/thrum-capture-fallback.sh`.
245
+ 3. `chmod +x .thrum/agents/<you>/thrum-watch-pane-capture.sh .thrum/agents/<you>/thrum-capture-fallback.sh`
242
246
 
243
247
  Then register the monitor against that absolute copy path —
244
248
  **`--notify-on-success` is MANDATORY, not optional decoration**: a
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: state-migration
3
- description: "Use when your agent-local thrum state is empty AND you have an existing State.md file in your agent directory - this is a ONE-TIME conditional onboarding that fires only on that exact combination. Do NOT use if thrum state already has entries (nothing to migrate) or if you have no State.md (brand-new agent, nothing to migrate). Triggers on: first session after the thrum state redesign lands, `thrum state list` returning empty while State.md exists on disk, being asked to migrate your personal state."
3
+ description: "Use when your agent-local thrum state is empty AND you have an existing State.md file in your agent directory - this is a ONE-TIME conditional onboarding that fires only on that exact combination. Do NOT use if thrum state already has entries (nothing to migrate) or if you have no State.md (brand-new agent, nothing to migrate). Triggers on - first session after the thrum state redesign lands, `thrum state list` returning empty while State.md exists on disk, being asked to migrate your personal state."
4
4
  ---
5
5
 
6
6
  # Migrating personal State.md into `thrum state`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: using-thrum-state
3
- description: "Use when reading or writing thrum state - checking your own agent-local current state at session start, updating your status/next-actions, reading a fleet fact like deploy state or topology before acting on it, citing a SHA or box fact in a decision, deciding whether a fleet row is fresh enough to trust, or responding to a freshness-sweep ping. Also use before writing any fleet row - deploy state, topology, worktree, agent pool, or a standing ruling - to confirm you are writing from a by-effect measurement, not a guess. Triggers on: citing a fleet fact, deploying, restarting a daemon, migrating schema, reconciling state at session start, receiving a stale-row ping."
3
+ description: "Use when reading or writing thrum state - checking your own agent-local current state at session start, updating your status/next-actions, reading a fleet fact like deploy state or topology before acting on it, citing a SHA or box fact in a decision, deciding whether a fleet row is fresh enough to trust, or responding to a freshness-sweep ping. Also use before writing any fleet row - deploy state, topology, worktree, agent pool, or a standing ruling - to confirm you are writing from a by-effect measurement, not a guess. Triggers on - citing a fleet fact, deploying, restarting a daemon, migrating schema, reconciling state at session start, receiving a stale-row ping."
4
4
  ---
5
5
 
6
6
  # Using Thrum State
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-thrum-pro",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Thrum multi-agent coordination plugin for Open Code",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",