opencode-thrum-pro 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/assets/commands/thrum-_deviations-protocol.md +87 -0
  2. package/assets/commands/thrum-_generator-idempotency-protocol.md +15 -0
  3. package/assets/commands/thrum-_project-rules-protocol.md +18 -0
  4. package/assets/commands/thrum-_snapshot-protocol.md +265 -0
  5. package/assets/commands/thrum-_stamp-protocol.md +112 -0
  6. package/assets/commands/thrum-_verify-before-write-protocol.md +27 -0
  7. package/assets/commands/thrum-inbox.md +22 -0
  8. package/assets/commands/thrum-load-context.md +17 -0
  9. package/assets/commands/thrum-overview.md +17 -0
  10. package/assets/commands/thrum-prime.md +30 -0
  11. package/assets/commands/thrum-quickstart.md +14 -0
  12. package/assets/commands/thrum-reply.md +28 -0
  13. package/assets/commands/thrum-restart-extended.md +195 -0
  14. package/assets/commands/thrum-restart.md +293 -0
  15. package/assets/commands/thrum-send.md +31 -0
  16. package/assets/commands/thrum-sleep-extended.md +186 -0
  17. package/assets/commands/thrum-sleep.md +212 -0
  18. package/assets/commands/thrum-team.md +12 -0
  19. package/assets/commands/thrum-update-project.md +259 -0
  20. package/assets/commands/thrum-wait.md +14 -0
  21. package/assets/skills/adversarial-critique/SKILL.md +242 -0
  22. package/assets/skills/brainstorm-queue-aware/SKILL.md +167 -0
  23. package/assets/skills/brainstorm-steward/SKILL.md +181 -0
  24. package/assets/skills/choosing-subagent-models/SKILL.md +244 -0
  25. package/assets/skills/closing-findings-while-warm/SKILL.md +104 -0
  26. package/assets/skills/configure-roles/SKILL.md +229 -0
  27. package/assets/skills/coordinator-assessing-agent-completion/SKILL.md +205 -0
  28. package/assets/skills/coordinator-assessing-agent-completion/scan.py +117 -0
  29. package/assets/skills/coordinator-branch-split-on-block/SKILL.md +168 -0
  30. package/assets/skills/coordinator-context-monitoring/SKILL.md +674 -0
  31. package/assets/skills/coordinator-dispatching-work/SKILL.md +288 -0
  32. package/assets/skills/coordinator-hotpath-merge-gate/SKILL.md +522 -0
  33. package/assets/skills/coordinator-interacting-with-the-owner/SKILL.md +171 -0
  34. package/assets/skills/coordinator-maintaining-memory/SKILL.md +89 -0
  35. package/assets/skills/coordinator-managing-state-and-lifecycle/SKILL.md +192 -0
  36. package/assets/skills/coordinator-merging-code/SKILL.md +331 -0
  37. package/assets/skills/coordinator-philosophy-merge-gate/SKILL.md +442 -0
  38. package/assets/skills/coordinator-plan-reconcile-gate/SKILL.md +198 -0
  39. package/assets/skills/coordinator-post-restart-sweep/SKILL.md +135 -0
  40. package/assets/skills/coordinator-running-autonomous-feature-development/SKILL.md +199 -0
  41. package/assets/skills/coordinator-running-brainstorm-cycles/SKILL.md +654 -0
  42. package/assets/skills/coordinator-running-review-cycles/SKILL.md +153 -0
  43. package/assets/skills/coordinator-single-responsibility-merge-gate/SKILL.md +14 -0
  44. package/assets/skills/diagnosing-fleet-and-daemon/SKILL.md +255 -0
  45. package/assets/skills/efficient-multi-agent-research/SKILL.md +177 -0
  46. package/assets/skills/fixing-documentation-errors/SKILL.md +258 -0
  47. package/assets/skills/implementer-maintaining-memory/SKILL.md +84 -0
  48. package/assets/skills/implementer-orchestrating-execution/SKILL.md +125 -0
  49. package/assets/skills/implementer-receiving-dispatch/SKILL.md +127 -0
  50. package/assets/skills/implementer-receiving-review-feedback/SKILL.md +125 -0
  51. package/assets/skills/implementer-status-and-handoff/SKILL.md +150 -0
  52. package/assets/skills/implementer-tdd-and-quality/SKILL.md +99 -0
  53. package/assets/skills/memory-audit-recover/SKILL.md +153 -0
  54. package/assets/skills/memory-curate/SKILL.md +139 -0
  55. package/assets/skills/memory-maintenance/SKILL.md +87 -0
  56. package/assets/skills/memory-read-discipline/SKILL.md +164 -0
  57. package/assets/skills/memory-search-advanced/SKILL.md +217 -0
  58. package/assets/skills/memory-write-discipline/SKILL.md +135 -0
  59. package/assets/skills/orchestrate/SKILL.md +795 -0
  60. package/assets/skills/persistent-watcher-archetype/SKILL.md +225 -0
  61. package/assets/skills/prime-agent/SKILL.md +92 -0
  62. package/assets/skills/project-hotpath-gate/SKILL.md +255 -0
  63. package/assets/skills/project-philosophy/SKILL.md +418 -0
  64. package/assets/skills/project-philosophy/resources/philosophy-template.md +155 -0
  65. package/assets/skills/project-philosophy/resources/reliability-class-library.md +653 -0
  66. package/assets/skills/project-setup/SKILL.md +1007 -0
  67. package/assets/skills/project-setup/resources/implementation-agent.md +826 -0
  68. package/assets/skills/researcher-answering-queries/SKILL.md +100 -0
  69. package/assets/skills/researcher-investigating/SKILL.md +152 -0
  70. package/assets/skills/researcher-maintaining-memory/SKILL.md +176 -0
  71. package/assets/skills/state-migration/SKILL.md +54 -0
  72. package/assets/skills/thrum/SKILL.md +161 -0
  73. package/assets/skills/thrum/resources/ANTI_PATTERNS.md +132 -0
  74. package/assets/skills/thrum/resources/BOUNDARIES.md +56 -0
  75. package/assets/skills/thrum/resources/CLI_REFERENCE.md +1066 -0
  76. package/assets/skills/thrum/resources/IDENTITY.md +49 -0
  77. package/assets/skills/thrum/resources/LISTENER_PATTERN.md +64 -0
  78. package/assets/skills/thrum/resources/MESSAGING.md +163 -0
  79. package/assets/skills/thrum/resources/TMUX_SESSIONS.md +118 -0
  80. package/assets/skills/thrum/resources/WORKTREES.md +117 -0
  81. package/assets/skills/thrum-memory/SKILL.md +138 -0
  82. package/assets/skills/trace-spec-to-plan/SKILL.md +104 -0
  83. package/assets/skills/trace-spec-to-plan/resources/sweep-agent-prompt.md +57 -0
  84. package/assets/skills/update-queue/SKILL.md +149 -0
  85. package/assets/skills/using-the-queue/SKILL.md +172 -0
  86. package/assets/skills/using-thrum-state/SKILL.md +104 -0
  87. package/assets/skills/verify-against-plan/SKILL.md +323 -0
  88. package/assets/skills/verify-against-source/SKILL.md +237 -0
  89. package/assets/skills/watcher-archetype/SKILL.md +84 -0
  90. package/assets/skills/writing-durable-markdown/SKILL.md +66 -0
  91. package/dist/hooks/block-sync-cd.d.ts +9 -0
  92. package/dist/hooks/block-sync-cd.js +71 -0
  93. package/dist/hooks/block-sync-cd.test.d.ts +1 -0
  94. package/dist/hooks/block-sync-cd.test.js +61 -0
  95. package/dist/hooks/shell-env.d.ts +8 -0
  96. package/dist/hooks/shell-env.js +22 -0
  97. package/dist/index.d.ts +6 -0
  98. package/dist/index.js +25 -0
  99. package/dist/installer.d.ts +2 -0
  100. package/dist/installer.js +86 -0
  101. package/package.json +49 -0
@@ -0,0 +1,87 @@
1
+ ---
2
+ description:
3
+ Shared Deviations-from-Source protocol — canonical block format, the
4
+ required-even-when-empty rule, and derivation discipline. Not
5
+ user-invocable directly.
6
+ ---
7
+
8
+ # Deviations from Source Protocol (shared partial)
9
+
10
+ This file is the canonical source-of-truth for the "Deviations from Source"
11
+ block emitted by planning-loop artifacts (plans, implementation prompts). Do
12
+ NOT invoke this file directly; it has no terminal action.
13
+
14
+ (To find what currently points here: `grep -rn "_deviations-protocol.md"
15
+ claude-plugin/` — a hand-listed consumer roster in this file would rot the
16
+ moment a new emitter or reader is added, so none is kept here.)
17
+
18
+ ## Purpose
19
+
20
+ Dilution is a deletion: when a reviewer's feasibility objection causes a
21
+ requirement to be quietly dropped or weakened while converting one artifact
22
+ into the next (spec → plan → prompt), the loss leaves no artifact — you
23
+ cannot grep for an absence. Every downstream step remains internally
24
+ consistent with the step directly above it, so every review passes even
25
+ though intent was lost several steps back.
26
+
27
+ The fix is the same move as pairing every zero with a control: since an
28
+ absence cannot be verified, force it to be STATED. An artifact that dropped
29
+ or weakened nothing must say so explicitly ("No deviations from source.");
30
+ an artifact that is silent on deviations is untrustworthy by construction and
31
+ FAILS the gate, whether or not it actually dropped anything.
32
+
33
+ ## Format (emitted artifact — verbatim)
34
+
35
+ Every plan and implementation prompt carries this heading, placed immediately
36
+ after its Authored-against stamp block (see `_stamp-protocol.md`):
37
+
38
+ ```
39
+ ## Deviations from Source
40
+
41
+ No deviations from source.
42
+ ```
43
+
44
+ If anything was dropped or weakened relative to the declared source
45
+ artifact(s), replace the single line above with one bullet per deviation:
46
+
47
+ ```
48
+ ## Deviations from Source
49
+
50
+ - DROPPED: <requirement, quoted or closely paraphrased from the source> —
51
+ why: <reason it was dropped/weakened> — source: <file:line or section ref>
52
+ — attribution: <"owner decision" | "reviewer objection unresolved">
53
+ ```
54
+
55
+ **The heading is REQUIRED even when the list is empty.** "No deviations from
56
+ source." is not boilerplate — it is a claim a human made that a reviewer can
57
+ check against the actual diff between artifact and source. An artifact
58
+ missing this heading entirely has not been checked and must fail the gate
59
+ that looks for it (see `project-setup/SKILL.md` Phase 0).
60
+
61
+ ## Derivation rule
62
+
63
+ Derive the block by DIFFING the artifact against its actual, currently-read
64
+ source document or decision list — never by recalling from memory what was
65
+ probably dropped. No git diff can see an absence, so the author must state it
66
+ directly, freshly re-derived at authoring time, not carried forward from a
67
+ prior cycle.
68
+
69
+ ## Attribution values
70
+
71
+ Each deviation item is attributed to exactly one of:
72
+
73
+ - `owner decision` — the intent-owner explicitly agreed to cut or weaken the
74
+ requirement.
75
+ - `reviewer objection unresolved` — a reviewer raised a feasibility
76
+ objection that has NOT yet been resolved by the intent-owner; this
77
+ attribution is a FLAG, not a resolution, and must route to the
78
+ intent-owner per the feasibility-escalation rule (see
79
+ `coordinator-running-brainstorm-cycles/SKILL.md`) rather than being folded
80
+ in silently.
81
+
82
+ ## Format conventions
83
+
84
+ The `## Deviations from Source` heading is grep -F-matchable: exact case,
85
+ exact text, no variant headings. `project-setup/SKILL.md` Phase 0 gates on
86
+ its literal presence with `grep -F '## Deviations from Source'`. Do not
87
+ reword, recase, or relocate the heading.
@@ -0,0 +1,15 @@
1
+ ---
2
+ description:
3
+ Shared generator-skill idempotency invariant consumed by config/doc
4
+ generator skills. Not user-invocable directly.
5
+ ---
6
+
7
+ # Generator Idempotency Protocol (shared partial)
8
+
9
+ Consumers: run `grep -rl _generator-idempotency-protocol claude-plugin/skills/`
10
+ for the current set — do NOT hardcode it here. A list of consumers inside the
11
+ consumed file is a second copy of a git-answerable fact and rots the moment a
12
+ skill is added or dropped.
13
+
14
+ The modes are idempotent — running the skill repeatedly on a stable project
15
+ should produce no file changes after the first run.
@@ -0,0 +1,18 @@
1
+ ---
2
+ description:
3
+ Shared project-specific-rules protocol consumed by role skills. Not
4
+ user-invocable directly.
5
+ ---
6
+
7
+ # Project-Specific Rules Protocol (shared partial)
8
+
9
+ Consumers: run `grep -rl _project-rules-protocol claude-plugin/skills/` for the
10
+ current set — do NOT hardcode it here. A list of consumers inside the consumed
11
+ file is a second copy of a git-answerable fact and rots the moment a skill is
12
+ added or dropped.
13
+
14
+ Project-local rules of kind `agent_rule` at `--scope role` were loaded at
15
+ session start by your preamble (see your role template's Memory model block).
16
+ If a project-local rule conflicts with a universal rule above, the
17
+ project-local rule wins; surface the conflict in your reply so the user can
18
+ decide whether to graduate or remove the override.
@@ -0,0 +1,265 @@
1
+ ---
2
+ description:
3
+ Shared snapshot-composition protocol consumed by the snapshot-save commands.
4
+ Not user-invocable directly.
5
+ ---
6
+
7
+ # Snapshot Composition Protocol (shared partial)
8
+
9
+ Consumers: run `grep -rl _snapshot-protocol claude-plugin/commands/` for the
10
+ current set — do NOT hardcode it here. A list of consumers inside the consumed
11
+ file is a second copy of a git-answerable fact and rots the moment a command is
12
+ added or dropped. Note: plain `/thrum:restart` does NOT consume this partial; it
13
+ carries its own inline snapshot template.
14
+
15
+ This is the canonical source-of-truth for snapshot composition discipline. The
16
+ sibling commands that consume this partial compose: read this partial →
17
+ variant-specific terminal action. Do NOT invoke this file directly; it has no
18
+ terminal action.
19
+
20
+ ## Step 1 — Resolve identity and your worktree
21
+
22
+ ```bash
23
+ # $REPO must be YOUR worktree — the directory `thrum prime` reads the restart
24
+ # snapshot back from. Resolve it from the daemon's authoritative identity, NOT
25
+ # `git rev-parse` (which keys off the current shell CWD and would write to the
26
+ # wrong .thrum/restart/ if a bash step left your worktree). Fall back to git
27
+ # only if whoami can't answer.
28
+ REPO=$(thrum whoami --field worktree 2>/dev/null)
29
+ [ -n "$REPO" ] || REPO=$(git rev-parse --show-toplevel) || { echo "ERROR: cannot resolve your worktree"; exit 1; }
30
+ AGENT=$(thrum whoami --field agent_id) || { echo "ERROR: agent not registered"; exit 1; }
31
+ [ -n "$AGENT" ] || { echo "ERROR: empty agent_id"; exit 1; }
32
+ mkdir -p "${REPO}/.thrum/restart"
33
+ ```
34
+
35
+ ## Step 2 — Compose your continuation
36
+
37
+ ### Composition discipline (always applies)
38
+
39
+ Your context is high (or you are preparing to park) and the goal is to preserve
40
+ all load-bearing decisions across the session boundary. Write a rich
41
+ continuation that future-you will read as the first action after wake.
42
+
43
+ **§1 of your snapshot is REQUIRED FIRST PROSE.** Write the "Big picture — what
44
+ shipped this session" (or, for sleep snapshots, "where work stands at park
45
+ time") section BEFORE anything else. Be specific: name the artifacts, the
46
+ decisions, the cycles closed. Examples:
47
+
48
+ > Locked the session-archive spec v2 with §1 Big picture requirement, five
49
+ > Q-Spec approvals, and Q-Spec-5 deferred to impl-time. Hand-off pending
50
+ > coordinator final review.
51
+ >
52
+ > Investigated rc.9 inbox-race against <implementer>'s hypothesis: confirmed
53
+ > the lock-substrate fence is the right fix. Filed thrum-XXX with 4 BLOCKING
54
+ > evidence points.
55
+ >
56
+ > Closed <epic> brainstormer-third pass. 2 BLOCKING + 5 IMPORTANT + 10 MINOR.
57
+ > All three load-bearing traps PASSed. Standing by for <epic> next batch.
58
+
59
+ This section becomes YOUR OWN log entry, visible in `thrum agent sessions list`
60
+ alongside the archives of every other session you've ever restarted from.
61
+ Future-you (and other agents inspecting your history) skim §1 to decide which
62
+ sessions are worth re-reading. Write it first — before the Resume Plan, before
63
+ file paths, before patterns — because composing the §1 summary forces you to
64
+ identify what was actually load-bearing about this session, and that priority
65
+ shapes everything else you write below it.
66
+
67
+ **Stamp your snapshot with the base it was authored against.**
68
+ Derive and emit the **Authored-against** stamp per
69
+ `claude-plugin/commands/_stamp-protocol.md` and place it at the very top of your
70
+ §1 section (that protocol computes the SHA and merge_target for you — never
71
+ hand-type them). This is what lets `thrum prime` diff your snapshot at the next
72
+ wake and flag which cited files have MOVED; an unstamped snapshot reads as
73
+ "current", indistinguishable from one that never drifted.
74
+
75
+ Any commit your snapshot names as its own stamped SHA must also be readable
76
+ under `_stamp-protocol.md`'s "Read-time provenance re-derivation" section
77
+ (SHA-resolves, then merge-status) — link to that section rather than restating
78
+ its checks here.
79
+
80
+ **Describe commits, don't claim them.** A snapshot's job is to describe what a
81
+ commit's content and effect ARE — that's checkable by anyone re-reading it.
82
+ Prohibit first-person narration of git actions in the body of a snapshot:
83
+ no "I pushed X", "I fixed Y and verified it", "I ran Z". Write instead:
84
+ "commit `<sha>` exists and does `<Y>`" / "`<sha>` addresses `<Y>`". Attribution
85
+ of WHO performed a git action already lives in `command.jsonl` / `hooklog.jsonl`
86
+ — restating it here would assert authorship the snapshot-writer has typically
87
+ never mechanically verified.
88
+
89
+ After the §1 block:
90
+
91
+ CRITICAL DISCIPLINE — compose from your own working context only. To preserve
92
+ the remaining runway:
93
+
94
+ - Do NOT dispatch sub-agents (Agent, Explore, etc.)
95
+ - Do NOT re-read files you've already read this session
96
+ - Do NOT spawn web fetches or external lookups
97
+ - Do NOT run lengthy investigations (git log spelunking, codebase searches,
98
+ multi-file grep walks)
99
+
100
+ Each of those costs context you don't have to spend, and the cost compounds — a
101
+ sub-agent that returns 6K tokens of summary doesn't just cost the dispatch, it
102
+ pollutes the dying session further. If a fact isn't already in your working
103
+ context, label it "unknown" or "verify post-restart" rather than fetching it
104
+ now. Trust your in-context state.
105
+
106
+ Write for a competent stranger in your role — someone who has the runtime
107
+ briefing (`thrum prime`, role preamble, project state) but none of this
108
+ session's conversation context. Refer to the previous session in third person.
109
+
110
+ ### Choose your structure
111
+
112
+ The variant skill that invoked this partial tells you which structure to use:
113
+
114
+ - **`/thrum:sleep`** → use the STANDARD 11-section structure below.
115
+ - **`/thrum:restart-extended` and `/thrum:sleep-extended`** → use the EXTENDED
116
+ 16-section structure below.
117
+
118
+ The standard structure is the working compact format. The extended structure is
119
+ fundamentally different: a comprehensive technical reference (wire contracts,
120
+ capability matrix, anticipated Q&A, design rationale) appropriate for
121
+ designer/architect-grade handoffs where the next session may be cold and must
122
+ recover the full design grammar from this artifact alone.
123
+
124
+ ### Standard structure (11 sections)
125
+
126
+ Use these numbered sections (write each as prose or table — your call — but the
127
+ numbered structure itself should be present):
128
+
129
+ 1. **Big picture** — what shipped this session (REQUIRED FIRST, written above
130
+ per the §1 mandate).
131
+ 2. **Where every artifact stands** — branches, specs, plans, in-flight PRs,
132
+ partially-landed work. Concrete tips / paths / commit SHAs.
133
+ 3. **Players + contributions** — who's working on what, who's standing down,
134
+ what each agent's latest state is.
135
+ 4. **Decisions made this session** — with the context that drove each. Just
136
+ listing the decision loses the reasoning future-you needs to judge edge
137
+ cases.
138
+ 5. **Questions awaiting repo owner input** — anything queued for the project
139
+ owner's call before work can proceed. Name the question concretely.
140
+ 6. **Outstanding work you owe** — commitments still open on your side (pushes,
141
+ merges, dispatches, doc-patches).
142
+ 7. **Patterns that worked / burned us** — short reflective section: what to keep
143
+ doing, what to stop. Two sub-sections is enough.
144
+ 8. **File paths future-you will reopen** — concrete paths the next session will
145
+ need. Group by purpose (in-flight / queued / reference).
146
+ 9. **Numbered resume plan** — concrete first-N-steps the next session should
147
+ take, in order. Step 1 must be actionable from a cold start.
148
+ 10. **Honest unknowns — verify post-restart, do NOT fabricate** — list facts you
149
+ suspect changed during the session OR were never confirmed in the first
150
+ place. Future-you must NOT carry these forward as truth until they're
151
+ verified.
152
+ 11. **End-of-continuation note** — one short paragraph reflecting on the session
153
+ itself.
154
+
155
+ Skip a section only when it genuinely doesn't apply — an honest "N/A: no
156
+ decisions this session" beats fabrication. The numbered structure itself should
157
+ always be present so future-you can scan for what's covered and what isn't.
158
+
159
+ ### Extended structure (16 sections)
160
+
161
+ Numbered `§1.` through `§16.`. The §-prefix is intentional — extended snapshots
162
+ use a visually distinct convention from standard to signal grade difference.
163
+ Each section names a concern; write as prose, a table, or omit with an explicit
164
+ "N/A: <reason>" rather than skipping silently.
165
+
166
+ ```text
167
+ §1. Header block — author / date / restart reason / restart-you mandate / context-percent at write time
168
+ §2. Identity — agent_id / worktree path / branch / role / coordinator name / cut-point commit SHA
169
+ §3. Big picture — what shipped this session [REQUIRED FIRST PROSE — mirrors standard §1]
170
+ §4. Mission state — where this work currently sits in its pipeline
171
+ §5. Locked design decisions — operator-LOCKs, design-fork resolutions, with rationale
172
+ §6. Open L-questions parked for the operator — or "NONE: <reason>" with explicit note
173
+ §7. Wire contracts — durable technical reference (types, signatures, file:line cites)
174
+ §8. Capability matrix — per-surface contracts (row-by-row table for fanout work; OMIT if N/A)
175
+ §9. Design inventory — locked taxonomy (entanglement classes, patterns, anti-patterns; OMIT if N/A)
176
+ §10. Cycle history — review cycles run, findings, fold record (OMIT if pre-review-phase)
177
+ §11. Pipeline state — DAG of artifacts (brainstorm → plan → impl → review) with current cursor
178
+ §12. Pre-restart artifacts on disk — durable handoff manifest (table: artifact / path / status)
179
+ §13. Anticipated Q&A — questions restart-you or downstream implementer will ask, pre-answered
180
+ §14. References — bd IDs, commit anchors, memories, file paths, message IDs (load-bearing for transcript recon)
181
+ §15. Honest unknowns — verify post-restart, do NOT fabricate
182
+ §16. Restart-you's immediate next actions — numbered; step 1 actionable from cold start
183
+ ```
184
+
185
+ **Per-section guidance:**
186
+
187
+ - **§1 Header.** Top of file. Author (agent_id), date, restart reason (1-line
188
+ trigger), one-sentence mandate to restart-you ("read this in full, then [N
189
+ specific actions]"), context-% at write time. Read-first prominence.
190
+ - **§2 Identity.** `agent_id` / worktree absolute path / branch / role /
191
+ coordinator name / cut-point commit SHA for any line cites that follow.
192
+ Mechanical; lets a totally cold restart-you orient before reading any prose.
193
+ - **§3 Big picture.** REQUIRED FIRST PROSE. 1–3 sentences summarizing what the
194
+ session accomplished. Specific: artifacts, decisions, cycles closed. Becomes
195
+ the session-archive log entry. Write this BEFORE anything else (composing §3
196
+ forces you to identify what was load-bearing, which shapes what you write
197
+ below). **Sleep variant:** for `/thrum:sleep` and `/thrum:sleep-extended`, §3
198
+ frames as "where work stands at park time" rather than "what shipped" — the
199
+ agent is parking, not completing. Composition discipline (1–3 sentences,
200
+ specific, load-bearing-first) is identical.
201
+ - **§4 Mission state.** Where this work sits in its pipeline. Not the pipeline
202
+ DAG itself (that's §11) — the narrative status.
203
+ - **§5 Locked design decisions.** Each LOCK gets a line: decision + the
204
+ operator's wording (when applicable) + rationale.
205
+ - **§6 Open L-questions.** Numbered Q-list with researcher recommendations. OR
206
+ "NONE: all locked per <evidence>" with the evidence cited.
207
+ - **§7 Wire contracts.** Durable technical reference — types, function
208
+ signatures, struct field lists, file:line cites. Cut from the live tree at
209
+ §2's cut-point SHA. **Format:** use fenced code blocks for type signatures and
210
+ struct fields; use inline `file:line` citations anchored to §2's cut-point SHA
211
+ so future-you can `git show <SHA>:<file>` to reproduce.
212
+ - **§8 Capability matrix.** Row-by-row table when work fans out across N call
213
+ sites / migration surfaces / per-symbol concerns. **OMIT criterion:** OMIT
214
+ when work is single-call-site or single-surface. **REQUIRED criterion:**
215
+ required when the session covered changes across ≥2 independent call sites /
216
+ migration surfaces / per-symbol concerns. When in doubt, include — a one-row
217
+ table is cheaper than a missing one.
218
+ - **§9 Design inventory.** Locked taxonomy: entanglement classes, pattern
219
+ catalogue, anti-patterns. **OMIT criterion:** OMIT when the work hasn't yet
220
+ developed a stable design grammar. **REQUIRED criterion:** required when ≥3
221
+ named classes or patterns recur in the session's decisions.
222
+ - **§10 Cycle history.** Review cycles run, findings (BLOCKING / IMPORTANT /
223
+ MINOR counts), fold record, verify-before-fold spot-checks. **OMIT
224
+ criterion:** OMIT when the snapshot is written before any review cycle has
225
+ run. **REQUIRED criterion:** required after the first dual-review cycle
226
+ closes.
227
+ - **§11 Pipeline state.** DAG of artifacts (brainstorm → plan → impl → review)
228
+ with current cursor position. ASCII tree or table.
229
+ - **§12 Pre-restart artifacts.** Manifest table: each durable artifact's path +
230
+ status. Lets restart-you spot-check all artifacts exist before acting.
231
+ - **§13 Anticipated Q&A.** Pre-answer questions restart-you or downstream
232
+ implementer will ask. Format: Q (bold) + A (short). Answers cite live code so
233
+ downstream agents don't re-derive.
234
+ - **§14 References.** Load-bearing index: bd IDs (with one-line state), commit
235
+ anchors (with SHA + one-line claim), memory keys (with rationale for
236
+ relevance), file paths grouped by purpose, critical message IDs (for
237
+ transcript reconstruction).
238
+ - **§15 Honest unknowns.** List facts you suspect changed during the session OR
239
+ were never confirmed. Future-you must NOT carry these forward as truth until
240
+ verified.
241
+ - **§16 Restart-you's immediate next actions.** Numbered. Step 1 actionable from
242
+ cold start.
243
+
244
+ **Visual-drift note:** Extended template adopts `§N.` prefix convention
245
+ intentionally distinct from standard's `N. **Header**`
246
+ numbered-list-with-bold-lead. The divergence signals grade difference (standard
247
+ = compact, extended = comprehensive). Do NOT align them; the two surfaces stay
248
+ visually distinct on purpose. **Fallback** (Tier 2): if any runtime strips `§`
249
+ characters during rendering or commit-message embedding, the variant skill MAY
250
+ substitute bold-numbered (`**1.**`, `**2.**`, …) matching standard.
251
+
252
+ ## Step 3 — Write the continuation directly to your restart file
253
+
254
+ Use your Write tool to save the composed continuation to:
255
+
256
+ ```text
257
+ ${REPO}/.thrum/restart/${AGENT}.md
258
+ ```
259
+
260
+ `thrum prime` will auto-inject this file at next session start (whether wake
261
+ comes from `thrum tmux restart` or `thrum tmux create`). No bash heredoc or
262
+ `cat <<EOF` redirection is needed — write the file directly.
263
+
264
+ After writing, return control to your variant skill (`/thrum:restart-extended`,
265
+ `/thrum:sleep`, or `/thrum:sleep-extended`) for the terminal action.
@@ -0,0 +1,112 @@
1
+ ---
2
+ description:
3
+ Shared Authored-against stamp protocol — canonical format, derivation
4
+ commands, and never-type rule. Not user-invocable directly.
5
+ ---
6
+
7
+ # Authored-against Stamp Protocol (shared partial)
8
+
9
+ This is the canonical source-of-truth for the Authored-against stamp: its format,
10
+ derivation commands, and the never-type rule. Consuming files point here instead of
11
+ restating the recipe. Do NOT invoke this file directly; it has no terminal action.
12
+ (To find what currently points here: `grep -rn "_stamp-protocol.md" claude-plugin/`
13
+ — a hand-listed consumer roster in this file would rot the moment a new emitter or
14
+ reader is added, so none is kept here.)
15
+
16
+ ## Purpose
17
+
18
+ A date alone cannot tell a reader whether the tree moved since an artifact was
19
+ authored. The Authored-against stamp embeds the exact commit SHA the author was
20
+ looking at and the configured merge target at authoring time. A reader can later
21
+ run the stamped diff command to detect whether any cited file has changed —
22
+ converting a qualitative suspicion ("is this stale?") into a falsifiable check.
23
+
24
+ ## Stamp format (emitted artifact — verbatim)
25
+
26
+ Place these two lines at the appropriate location in the artifact (immediately
27
+ after its own date/frontmatter for brainstorm/plan/prompt; immediately after the
28
+ `Last updated` line for State.md and project_state.md):
29
+
30
+ ```text
31
+ **Authored-against:** `<sha>` target: `<merge_target>`
32
+
33
+ > ⚠️ Verify base before acting: `git diff <sha>..origin/<merge_target> -- <files cited>` -- non-empty ⇒ cited code moved. (Resolve `<merge_target>` through its remote-tracking ref, never a bare local branch name — a local branch of the same name can be stale or absent.)
34
+ ```
35
+
36
+ Always resolve `<merge_target>` through its remote-tracking ref
37
+ (`origin/<merge_target>`), never a bare local branch name, in every recipe in
38
+ this file — a local branch of the same name can be stale (last fetched days
39
+ ago) or simply absent on the reader's machine, while `origin/<merge_target>`
40
+ is only ever what's actually on the remote. Fetch before running any of these
41
+ diffs if the remote-tracking ref might be stale.
42
+
43
+ ## Derivation commands (run at authoring time)
44
+
45
+ ```bash
46
+ # SHA of the current HEAD
47
+ git rev-parse HEAD
48
+
49
+ # Configured merge target
50
+ jq -r '.orchestration.merge_target' .thrum/config.json
51
+ ```
52
+
53
+ The author must never type or remember either value by hand — both come from the
54
+ shell commands above, run at authoring time.
55
+
56
+ If either command returns empty or `null`, STOP and report — do NOT emit a stamp
57
+ with a null/empty field. An artifact with no stamp is honest; an artifact stamped
58
+ `null` is a lie the reader cannot detect (the string "null" still matches the
59
+ reader's regex, so it reads as a valid stamp instead of UNVERIFIABLE, and the
60
+ resulting `git diff <sha>..null` then errors).
61
+
62
+ Before emitting the stamp, also verify the derived `<sha>` actually resolves:
63
+
64
+ ```bash
65
+ git cat-file -e <sha>
66
+ # or: git rev-parse --verify <sha>^{commit}
67
+ ```
68
+
69
+ If this fails, STOP and report — do NOT emit a stamp citing an unresolvable SHA.
70
+ This is the same failure class as the null/empty check above (a stamp the
71
+ reader cannot trust), catching a different way to get there: `git rev-parse
72
+ HEAD` itself can't produce a bad SHA, but a stamp isn't always freshly derived
73
+ this way — it can be hand-typed, copied from a stale source, or otherwise
74
+ introduced without running the command above. Treat this resolve-check as a
75
+ mandatory guard regardless of how the SHA was obtained, not an optional sanity
76
+ check.
77
+
78
+ ## Format conventions
79
+
80
+ The stamp follows the same literal-match convention as the `THRUM-REVIEW` marker
81
+ (canonical form documented in `coordinator-running-brainstorm-cycles` skill
82
+ § "Footer → commit → stamp"): fixed field order, case-sensitive, ASCII-only —
83
+ parseable with `grep -F` semantics without regex. The reader-side regex in
84
+ `verify-against-plan` anchors on this fixed format; do not reorder or recase any
85
+ field.
86
+
87
+ ## Read-time provenance re-derivation
88
+
89
+ Both checks below are computable from the two fields the stamp already carries
90
+ (`<sha>` and `<merge_target>`) — no new stamped field is needed. A reader running
91
+ either check for the first time, or re-running it on an artifact read before,
92
+ must run them in this exact order; the second is undefined if the first fails
93
+ (short-circuit):
94
+
95
+ 1. **SHA-resolves** — `git cat-file -e <sha>` (or
96
+ `git rev-parse --verify <sha>^{commit}`). If this fails, the stamp cites a
97
+ FABRICATED or mistyped SHA — flag RED immediately and do NOT attempt check 2.
98
+ Merge-status has no defined answer for a SHA that does not exist.
99
+
100
+ 2. **Merge-status** — only once check 1 has passed:
101
+ `git merge-base --is-ancestor <sha> origin/<merge_target>`. If this succeeds
102
+ (the SHA IS already an ancestor of the merge target) AND the artifact's own
103
+ prose describes that SHA's work as still open ("in-progress", "awaiting a
104
+ gate", "not yet merged", or similar), flag the claim STALE — the work
105
+ described has already landed; whatever gate the artifact was waiting on
106
+ already happened, or was never blocking to begin with.
107
+
108
+ This re-derivation must run EVERY TIME the artifact is read, not only once at
109
+ authoring time — the same diff-at-read discipline this file already establishes
110
+ for the base stamp (`git diff <sha>..origin/<merge_target>`). A check that only
111
+ ran once at write time cannot catch drift that accumulates afterward, as the
112
+ tree keeps moving.
@@ -0,0 +1,27 @@
1
+ ---
2
+ description:
3
+ Shared "Verify before you write" invariant consumed by state-writing
4
+ skills. Not user-invocable directly.
5
+ ---
6
+
7
+ # Verify Before You Write Protocol (shared partial)
8
+
9
+ Consumers: run `grep -rl _verify-before-write-protocol claude-plugin/skills/`
10
+ for the current set — do NOT hardcode it here. A list of consumers inside the
11
+ consumed file is a second copy of a git-answerable fact and rots the moment a
12
+ skill is added or dropped.
13
+
14
+ A written fact is TRUE at the moment it's recorded and can silently become
15
+ FALSE later — the reader can't tell, because a note doesn't present itself as
16
+ a time-bound claim. Before writing anything:
17
+
18
+ - Only write what you've verified against current state — not what you
19
+ remember, assume, or were told once.
20
+ - A note recording an UNEXPLAINED artifact must carry the unexplained-ness
21
+ forward — "not mine, cause unknown, nobody has traced this" — rather than
22
+ resolving it to a disposition like "ignore it." The note isn't wrong to cope
23
+ with noise you can't act on; the defect is closing the question when
24
+ nothing is actually known. "Ignore it" is unfalsifiable by construction —
25
+ an instruction to not look can't be caught by looking, because diligence is
26
+ exactly what it switches off — and it can silently train every future
27
+ session to stop looking at the one visible symptom of a live bug.
@@ -0,0 +1,22 @@
1
+ ---
2
+ description: Check message inbox
3
+ ---
4
+
5
+ List messages in your inbox. Messages are auto-marked as read when displayed.
6
+
7
+ ```bash
8
+ thrum inbox # All recent messages (auto-marks as read)
9
+ thrum inbox --unread # Unread only (does not mark as read)
10
+ thrum inbox --json # Machine-readable
11
+ thrum sent --unread # Check sent items with unread recipients
12
+ thrum message read --all # Mark all messages as read
13
+ ```
14
+
15
+ **Search — do not page through it.** The default page is 10, newest-first, so
16
+ stale unread sorts LAST exactly when it has been waiting longest.
17
+
18
+ ```bash
19
+ thrum message search "<term>" # full-text across all messages
20
+ thrum inbox -q "<term>" # same full-text search, scoped to your inbox
21
+ thrum message reindex # rebuild the FTS index if search looks wrong
22
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ description:
3
+ Restore saved agent work context after compaction or session restart
4
+ ---
5
+
6
+ Run `thrum prime` to restore your complete session context. Prime now includes
7
+ project state and session context inline — no separate load step needed.
8
+
9
+ ```bash
10
+ thrum prime
11
+ ```
12
+
13
+ If you need only the session context (without the full briefing):
14
+
15
+ ```bash
16
+ thrum context show --session
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ description: Combines identity, team, inbox, and sync status
3
+ ---
4
+
5
+ Show a combined view of agent identity, active team members, inbox messages, and
6
+ sync status.
7
+
8
+ ```bash
9
+ thrum overview # Human-readable
10
+ thrum overview --json # Machine-readable
11
+ ```
12
+
13
+ This is equivalent to running `thrum team`, `thrum inbox`, `thrum sent`, and
14
+ `thrum sync status` together.
15
+
16
+ `thrum inbox` here shows only the default page — see `/inbox` for the paging
17
+ caveat and full-text search.
@@ -0,0 +1,30 @@
1
+ ---
2
+ description: Load AI-optimized session context
3
+ ---
4
+
5
+ Run `thrum prime` to load your complete session briefing — identity, daemon
6
+ health, role instructions, project state, and session context (plus messaging
7
+ protocol if multi-agent mode).
8
+
9
+ ```bash
10
+ thrum prime
11
+ ```
12
+
13
+ Use `thrum prime --json` for structured output.
14
+
15
+ ## First turn: emit a one-line ack
16
+
17
+ After loading the briefing, your very first action of this turn — before running
18
+ any tools or further reading — is to print one plain-text line in this format:
19
+
20
+ ```text
21
+ @<agent-name> primed (<role>/<module>). <one-sentence intent>. Standing by.
22
+ ```
23
+
24
+ Substitute the fields from your own identity (visible at the top of the
25
+ briefing) and write `<intent>` as a brief sentence drawn from your inbox or
26
+ restart snapshot. Drop the `/<module>` segment when no module is set or it
27
+ matches the role.
28
+
29
+ This produces visible scrollback so humans can distinguish a healthy launch from
30
+ a stuck or failed one without probing the daemon.
@@ -0,0 +1,14 @@
1
+ ---
2
+ description: Register agent and start session
3
+ ---
4
+
5
+ Register as an agent, start a session, and set intent in one step.
6
+
7
+ If arguments are provided, use them. Otherwise ask the user for role, module,
8
+ and intent.
9
+
10
+ ```bash
11
+ thrum quickstart --name <agent-name> --role <role> --module <module> --intent "<description>"
12
+ ```
13
+
14
+ Common roles: `implementer`, `planner`, `reviewer`, `tester`, `coordinator`.
@@ -0,0 +1,28 @@
1
+ ---
2
+ description: Reply to a message
3
+ ---
4
+
5
+ Reply to a message with the same audience as the original.
6
+
7
+ If arguments are provided, use them. Otherwise ask for the message ID and reply
8
+ content.
9
+
10
+ ```bash
11
+ thrum reply <msg-id> --stdin <<'EOF'
12
+ response text
13
+ EOF
14
+ ```
15
+
16
+ The reply inherits the original message's audience (direct or group).
17
+
18
+ If the body has backticks, `$(...)`, `$VAR`, or quotes, pass it via a quoted
19
+ heredoc so the shell doesn't corrupt it:
20
+
21
+ ```bash
22
+ thrum reply <msg-id> --stdin <<'EOF'
23
+ Done — see `internal/foo.go`. Cost was $(estimate).
24
+ EOF
25
+ ```
26
+
27
+ `--body-file <path>` reads from a file; the response argument `-` is a stdin
28
+ alias.