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,1066 @@
1
+ # CLI Reference
2
+
3
+ Complete command syntax for `thrum`. Run `thrum <command> --help` for detailed
4
+ flag descriptions.
5
+
6
+ ## Global Flags
7
+
8
+ These flags apply to every command:
9
+
10
+ ```bash
11
+ --json JSON output for scripting
12
+ --quiet Suppress non-essential output
13
+ --verbose Debug output
14
+ --role <role> Agent role (or THRUM_ROLE env var)
15
+ --module <mod> Agent module (or THRUM_MODULE env var)
16
+ ```
17
+
18
+ ---
19
+
20
+ ## CLI Hint Behavior
21
+
22
+ Many commands append contextual hints after their normal output. Two kinds:
23
+
24
+ - **detection** — condition-triggered guards (e.g. identity mismatch, empty
25
+ agent list, peer version drift). Fire whenever the condition is present.
26
+ - **reinforcement** — periodic memory-aids, band-throttled by context
27
+ percentage. Fire occasionally, not on every command.
28
+
29
+ **Output shapes:**
30
+
31
+ - Human: stderr lines `<severity> [<code>]: <message>`
32
+ - `--json`: top-level `"hints"` array of objects —
33
+ `{code, severity, message, options[], kind}`; `kind` is always present
34
+ (`"detection"` or `"reinforcement"`). <!-- markdownlint-disable-line MD013 -->
35
+
36
+ **Suppression:**
37
+
38
+ | Mechanism | Effect |
39
+ | ---------------------- | ---------------------------------------------------- |
40
+ | `--quiet` | Drop all hints |
41
+ | `THRUM_NO_HINTS=1` | Drop all hints (stderr and JSON) |
42
+ | `THRUM_NO_REMINDERS=1` | Drop reinforcement hints only; detection still fires |
43
+ | `--json` | Moves hints into JSON body — does not drop them |
44
+
45
+ Truthy for env vars: any non-empty value except `"0"` or `"false"`
46
+ (case-insensitive).
47
+
48
+ **Phase D — daemon-attached hints:** RPC responses can carry a `hints[]` array
49
+ that the CLI merges into the top-level hints output. First use: AP-4
50
+ `daemon.cross-version-drift` — a `warn` detection hint on `thrum team` when a
51
+ peer daemon's cached version differs from this daemon's.
52
+
53
+ Full reference: [docs/cli-hints.md](https://thrum.team/docs/cli-hints.html)
54
+
55
+ ---
56
+
57
+ ## Messaging
58
+
59
+ ### send
60
+
61
+ ```bash
62
+ thrum send --to @name --body-file ./body.md # Direct message (canonical form)
63
+ thrum send --broadcast --body-file ./body.md # Explicit team-wide fanout (preferred)
64
+ thrum send --to @everyone --body-file ./body.md # Broadcast (legacy keyword form)
65
+ thrum send --to @name --scope type:value --scope type:value2 --body-file ./body.md
66
+ thrum send --to @name --ref type:value --body-file ./body.md
67
+ thrum send --to @name --mention @role --body-file ./body.md
68
+ thrum send --to @name --format plain --body-file ./body.md
69
+ thrum send --to @name --structured '{"key":"value"}' --body-file ./body.md
70
+ thrum send --to @name --body-file ./body.md # Shell-safe body (file)
71
+ generator | thrum send --to @name - # '-' is a --stdin alias
72
+ ```
73
+
74
+ A recipient flag is REQUIRED — `thrum send 'msg'` with no `--to` or
75
+ `--broadcast` is a hard error. `--to` and `--broadcast` are
76
+ mutually exclusive.
77
+
78
+ Shell-safe bodies: backticks, `$(...)`, `$VAR`, and quotes in a
79
+ double-quoted message are interpreted by the shell BEFORE thrum runs, silently
80
+ corrupting content. Read the body from stdin (`--stdin`, or pass the message as
81
+ `-`) or a file (`--body-file`) with a QUOTED heredoc (`<<'EOF'`) to disable all
82
+ shell interpretation. The three body sources are mutually exclusive. A single
83
+ trailing newline is stripped from stdin/file bodies.
84
+
85
+ Flags:
86
+
87
+ ```text
88
+ --to string Recipient — @agent_name or @everyone for broadcast (mutex with --broadcast)
89
+ --broadcast Fan out to the entire team (mutex with --to)
90
+ --mention strings Mention a role (repeatable, format: @role)
91
+ --ref strings Add reference (repeatable, format: type:value)
92
+ --scope strings Add scope (repeatable, format: type:value)
93
+ --format string Message format: markdown, plain, json (default "markdown")
94
+ --structured string Structured payload (JSON)
95
+ --stdin Read the message body from stdin (or pass MESSAGE as '-')
96
+ --body-file string Read the message body from a file (mutex with --stdin)
97
+ ```
98
+
99
+ ### reply
100
+
101
+ ```bash
102
+ thrum reply <msg-id> --body-file ./reply.md # Reply body (file)
103
+ thrum reply <msg-id> --body-file ./reply.md --format plain
104
+ thrum reply <msg-id> --body-file ./body.md # Reply body (file)
105
+ ```
106
+
107
+ `reply` takes **no `--to`** — the recipient is derived from the parent message.
108
+ To start a new thread to a specific agent, use `thrum send ... --to @name`.
109
+
110
+ Shell-safe bodies: like `send`, `reply` accepts `--stdin` (or the
111
+ response argument as `-`) and `--body-file` so backtick/`$(...)`/quote-bearing
112
+ text survives the shell. Use a QUOTED heredoc (`<<'EOF'`).
113
+
114
+ Flags:
115
+
116
+ ```text
117
+ --format string Message format: markdown, plain, json (default "markdown")
118
+ --stdin Read the reply body from stdin (or pass the response as '-')
119
+ --body-file string Read the reply body from a file (mutex with --stdin)
120
+ ```
121
+
122
+ ### inbox
123
+
124
+ ```bash
125
+ thrum inbox # Show inbox (auto-filtered to you)
126
+ thrum inbox --unread # Only unread messages
127
+ thrum inbox --all # All messages (no auto-filter)
128
+ thrum inbox --mentions # Only messages mentioning you
129
+ thrum inbox --from @agent # Filter to messages from a specific sender
130
+ thrum inbox --scope type:value # Filter by scope
131
+ thrum inbox --page 2 --page-size 20 # Pagination
132
+ thrum inbox --limit N # Alias for --page-size
133
+ thrum sent # Show sent items with receipts
134
+ thrum sent --unread # Only messages with unread recipients
135
+ thrum sent --to @agent # Filter by recipient or audience
136
+ thrum message get <message-id> # Full recipient detail for one message
137
+ ```
138
+
139
+ **Search, don't just page.** Default `--page-size` is 10 newest-first, so
140
+ stale unread sorts LAST exactly when it has waited longest — the oldest
141
+ backlog is exactly what a default-page check can't see:
142
+
143
+ ```bash
144
+ thrum message search "<term>" # full-text across all messages (positional query, no --limit)
145
+ thrum inbox -q "<term>" # same full-text search, scoped to your inbox (aliases: --grep, --match)
146
+ thrum message reindex # rebuild the FTS index if search looks wrong
147
+ ```
148
+
149
+ Flags:
150
+
151
+ ```text
152
+ -a, --all Show all messages (disable auto-filtering)
153
+ --unread Only unread messages (does not mark as read — safe to peek)
154
+ --mentions Only messages mentioning me
155
+ --from string Filter to messages from a specific sender (use @agent or agent)
156
+ --scope string Filter by scope (format: type:value)
157
+ --page int Page number (default 1)
158
+ --page-size int Results per page (default 10)
159
+ --limit int Alias for --page-size
160
+ ```
161
+
162
+ ### wait
163
+
164
+ Blocks until a matching message arrives or timeout. Exit codes: 0=message,
165
+ 1=timeout, 2=error.
166
+
167
+ ```bash
168
+ thrum wait # Wait for any message (30s default)
169
+ thrum wait --timeout 5m # Wait up to 5 minutes
170
+ thrum wait --timeout 8m --after -15s # Include messages sent up to 15s ago (covers re-arm gap)
171
+ thrum wait --mention @reviewer # Wait for mention of role
172
+ thrum wait --scope module:auth # Wait for scoped message
173
+ thrum wait --after -30s # Include messages sent up to 30s ago
174
+ thrum wait --after -5m --json # Include messages sent up to 5m ago; JSON output
175
+ ```
176
+
177
+ Flags:
178
+
179
+ ```text
180
+ --timeout string Max wait time with unit (e.g., 30s, 5m) (default "30s")
181
+ --after string Relative time offset for filtering messages:
182
+ Negative (e.g., -30s, -5m): include messages sent up to N ago
183
+ Positive (e.g., +60s): only messages arriving at least N seconds in the future
184
+ Omitted: default is "now" (only messages that arrive after wait starts)
185
+ --mention string Wait for mentions of role (format: @role)
186
+ --scope string Filter by scope (format: type:value)
187
+ ```
188
+
189
+ Note: `--after` sign convention: negative = "N ago" (look back), positive = "N
190
+ from now" (skip ahead). Note: `--timeout` requires a Go duration unit — use
191
+ `120s` not `120`.
192
+
193
+ ### message
194
+
195
+ ```bash
196
+ thrum message get <msg-id> # Get full message details
197
+ thrum message edit <msg-id> --body-file ./new-body.md # Full replacement (author only; body from file)
198
+ thrum message edit <msg-id> --body-file ./new.md # Full replacement from file
199
+ thrum message delete <msg-id> --force # Delete (--force required)
200
+ thrum message read <msg-id> [<msg-id>...] # Mark as read
201
+ thrum message read --all # Mark all as read
202
+ thrum message search "<term>" # Full-text search across all messages (see § inbox above)
203
+ thrum message reindex # Rebuild the FTS index if search looks wrong
204
+ ```
205
+
206
+ Subcommand flags:
207
+
208
+ ```text
209
+ # message edit (shell-safe bodies)
210
+ --stdin Read the new text from stdin (or pass TEXT as '-')
211
+ --body-file string Read the new text from a file (mutex with --stdin)
212
+
213
+ # message delete
214
+ --force Confirm deletion (required)
215
+
216
+ # message read
217
+ --all Mark all unread messages as read
218
+ ```
219
+
220
+ ---
221
+
222
+ ## Agent Management
223
+
224
+ ### quickstart
225
+
226
+ Bootstrap a full session in one command: detect runtime, generate config,
227
+ register, start, set intent.
228
+
229
+ ```bash
230
+ thrum quickstart implementer_auth --role implementer --module auth
231
+ thrum quickstart --name reviewer_auth --role reviewer --module auth --intent "Reviewing PR #42"
232
+ thrum quickstart alice --role impl --module auth --runtime codex
233
+ thrum quickstart planner_core --role planner_core --module core --no-init
234
+ thrum quickstart tester_api --role tester --module api --dry-run
235
+ ```
236
+
237
+ Name can be passed as a positional argument or via `--name`; the flag wins when
238
+ both are supplied. Precedence (highest → lowest): `--name` flag, positional,
239
+ `THRUM_NAME` env-var, identity-file name fallback.
240
+
241
+ Flags:
242
+
243
+ ```text
244
+ --role string Agent role (or THRUM_ROLE env var)
245
+ --module string Agent module (or THRUM_MODULE env var)
246
+ --name string Human-readable agent name (defaults to role_hash)
247
+ --display string Display name for the agent
248
+ --intent string Initial work intent description
249
+ --runtime string Runtime preset: claude, codex, cursor, gemini, opencode, auggie, cli-only
250
+ --preamble-file string Custom preamble file to compose with default preamble
251
+ --no-init Skip runtime config generation, just register agent
252
+ --force Overwrite existing runtime config files
253
+ --dry-run Preview changes without writing files or registering
254
+ --no-agent-pid Persist agent_pid=0 instead of detecting the runtime ancestor; defers PID claim to first /thrum:prime (used for inline tmux quickstart)
255
+ ```
256
+
257
+ ### agent register
258
+
259
+ ```bash
260
+ thrum agent register --role implementer --module auth
261
+ thrum agent register --name alice --role impl --module auth
262
+ thrum agent register --force # Override existing
263
+ thrum agent register --re-register # Re-register same agent
264
+ ```
265
+
266
+ Flags:
267
+
268
+ ```text
269
+ --role string Agent role (or THRUM_ROLE env var)
270
+ --module string Agent module (or THRUM_MODULE env var)
271
+ --name string Human-readable agent name (defaults to role_hash)
272
+ --display string Display name for the agent
273
+ --force Force registration (override existing)
274
+ --re-register Re-register same agent
275
+ ```
276
+
277
+ ### agent list
278
+
279
+ ```bash
280
+ thrum agent list # List all registered agents
281
+ thrum agent list --role reviewer # Filter by role
282
+ thrum agent list --module auth # Filter by module
283
+ thrum agent list --context # Show work context (branch, commits, intent)
284
+ thrum agent list --json
285
+ ```
286
+
287
+ Flags:
288
+
289
+ ```text
290
+ --context Show work context (branch, commits, intent)
291
+ --role string Filter by role
292
+ --module string Filter by module
293
+ ```
294
+
295
+ ### agent set-intent / session set-intent
296
+
297
+ ```bash
298
+ thrum agent set-intent "Fixing memory leak in connection pool"
299
+ thrum session set-intent "Refactoring login flow"
300
+ thrum agent set-intent "" # Clear intent
301
+ ```
302
+
303
+ ### agent set-task / session set-task
304
+
305
+ ```bash
306
+ thrum agent set-task beads:thrum-xyz
307
+ thrum session set-task "JIRA-1234"
308
+ thrum agent set-task "" # Clear task
309
+ ```
310
+
311
+ ### agent heartbeat / session heartbeat
312
+
313
+ ```bash
314
+ thrum agent heartbeat
315
+ thrum session heartbeat
316
+ thrum session heartbeat --add-scope module:auth
317
+ thrum session heartbeat --remove-ref pr:42
318
+ thrum session heartbeat --add-ref pr:123 --remove-scope module:old
319
+ ```
320
+
321
+ Flags:
322
+
323
+ ```text
324
+ --add-scope strings Add scope (repeatable, format: type:value)
325
+ --remove-scope strings Remove scope (repeatable, format: type:value)
326
+ --add-ref strings Add ref (repeatable, format: type:value)
327
+ --remove-ref strings Remove ref (repeatable, format: type:value)
328
+ ```
329
+
330
+ ### agent start / session start
331
+
332
+ ```bash
333
+ thrum agent start
334
+ thrum session start
335
+ ```
336
+
337
+ ### agent end / session end
338
+
339
+ ```bash
340
+ thrum agent end
341
+ thrum session end
342
+ thrum session end --reason crash
343
+ thrum session end --session-id <id>
344
+ ```
345
+
346
+ Flags:
347
+
348
+ ```text
349
+ --reason string End reason: normal|crash (default "normal")
350
+ --session-id string Session ID to end (defaults to current session)
351
+ ```
352
+
353
+ ### agent cleanup
354
+
355
+ ```bash
356
+ thrum agent cleanup # Interactive cleanup of orphaned agents
357
+ thrum agent cleanup --dry-run # List orphans without deleting
358
+ thrum agent cleanup --force # Delete all orphans without prompting
359
+ ```
360
+
361
+ Flags:
362
+
363
+ ```text
364
+ --dry-run List orphans without deleting
365
+ --force Delete all orphans without prompting
366
+ --threshold int Days since last seen to consider agent stale (default 30)
367
+ ```
368
+
369
+ ### agent delete
370
+
371
+ ```bash
372
+ thrum agent delete <name>
373
+ thrum agent delete coordinator_1B9K --force
374
+ ```
375
+
376
+ Flags:
377
+
378
+ ```text
379
+ --force Skip confirmation prompt
380
+ ```
381
+
382
+ ### agent whoami / whoami
383
+
384
+ ```bash
385
+ thrum agent whoami
386
+ thrum whoami
387
+ thrum whoami --json
388
+ thrum whoami --field agent_id # Print a single field's value and exit
389
+ ```
390
+
391
+ Flags:
392
+
393
+ ```text
394
+ --field string Print a single field's value (e.g. agent_id, tmux_alive) and exit
395
+ ```
396
+
397
+ ### session list
398
+
399
+ ```bash
400
+ thrum session list # List all sessions
401
+ thrum session list --active # Only active sessions
402
+ thrum session list --agent <agent-id> # Filter by agent
403
+ thrum session list --json
404
+ ```
405
+
406
+ Flags:
407
+
408
+ ```text
409
+ --active Show only active sessions
410
+ --agent string Filter by agent ID
411
+ ```
412
+
413
+ ### team
414
+
415
+ ```bash
416
+ thrum team # Rich multi-line status for all active agents
417
+ thrum team --all # Include offline agents
418
+ thrum team --json
419
+ ```
420
+
421
+ Flags:
422
+
423
+ ```text
424
+ --all Include offline agents
425
+ ```
426
+
427
+ ---
428
+
429
+ ## Coordination
430
+
431
+ ```bash
432
+ thrum who-has <file> # Check which agents are editing a file
433
+ thrum ping @name # Check agent presence
434
+ thrum ping planner # @ prefix optional
435
+ thrum overview # Combined: identity + team + inbox + sync
436
+ thrum overview --json
437
+ ```
438
+
439
+ ---
440
+
441
+ ## Context
442
+
443
+ ```bash
444
+ thrum prime # Gather full session context (AI-optimized)
445
+ thrum prime --json
446
+ thrum context show # Show saved agent context
447
+ thrum context show --agent coordinator # Show another agent's context
448
+ thrum context show --raw # Raw output with file boundary markers
449
+ thrum context show --no-preamble # Exclude preamble from output
450
+ thrum context load # Alias for context show
451
+ thrum context save # Save context from stdin
452
+ thrum context save --file path/to/context.md # Save context from file
453
+ thrum context save --agent other_agent
454
+ thrum context clear # Clear saved context
455
+ thrum context clear --agent coordinator
456
+ thrum context sync # Sync context to a-sync branch
457
+ thrum context sync --agent coordinator
458
+ thrum context preamble # Show current preamble
459
+ thrum context preamble --init # Create/reset to default preamble
460
+ thrum context preamble --file path.md # Set preamble from file
461
+ thrum context preamble --agent coordinator
462
+ ```
463
+
464
+ `context show` flags:
465
+
466
+ ```text
467
+ --agent string Override agent name
468
+ --raw Raw output with file boundary markers, no header
469
+ --no-preamble Exclude preamble from output
470
+ ```
471
+
472
+ `context save` flags:
473
+
474
+ ```text
475
+ --agent string Override agent name
476
+ --file string Read context from file (default: stdin)
477
+ ```
478
+
479
+ `context preamble` flags:
480
+
481
+ ```text
482
+ --agent string Override agent name
483
+ --file string Set preamble from file
484
+ --init Create or reset to default preamble
485
+ ```
486
+
487
+ `context clear` / `context sync` flags:
488
+
489
+ ```text
490
+ --agent string Override agent name
491
+ ```
492
+
493
+ ---
494
+
495
+ ## Daemon
496
+
497
+ ```bash
498
+ thrum daemon start # Start daemon in background
499
+ thrum daemon stop # Stop daemon gracefully
500
+ thrum daemon restart # Restart (preserves WebSocket port)
501
+ thrum daemon status # Show daemon status
502
+ thrum daemon status --json
503
+ thrum daemon start --local # Local-only mode (no git push/fetch)
504
+ ```
505
+
506
+ The `--local` and `--force` flags are available on all daemon subcommands:
507
+
508
+ ```text
509
+ --local Local-only mode: skip git push/fetch in sync loop
510
+ --force Proceed even when the repo directory is not git-anchored (G2 override)
511
+ ```
512
+
513
+ Note: `--foreground` flag does NOT exist. Daemon always starts in background.
514
+
515
+ ---
516
+
517
+ ## Init
518
+
519
+ `thrum init` also automatically starts the daemon if it is not already running.
520
+
521
+ ```bash
522
+ thrum init # On a TTY: launches the interactive wizard. Non-TTY: legacy silent path.
523
+ thrum init --runtime claude # Pin runtime (skips runtime prompt)
524
+ thrum init --runtime codex --force # Re-init: pre-seeds wizard prompts from existing values
525
+ thrum init --runtime all --dry-run # Preview all runtime configs (bypasses wizard)
526
+ thrum init --non-interactive --runtime claude # Force the legacy silent path even on a TTY
527
+ thrum init --stealth # Zero tracked-file footprint
528
+ thrum init --name alice --role implementer --module auth # Pre-fill wizard identity prompts
529
+ thrum init --no-daemon # Run wizard but skip starting the daemon
530
+ thrum init --skills # Install thrum skill only (no MCP, no startup script)
531
+ thrum init --skills --runtime cursor # Install skill to Cursor's skill directory
532
+ ```
533
+
534
+ Flags:
535
+
536
+ ```text
537
+ --runtime string Generate runtime-specific configs: claude|codex|cursor|gemini|opencode|cli-only|all
538
+ --skills Install thrum skill only (no MCP config, no startup script)
539
+ --stealth Use .git/info/exclude instead of .gitignore (zero footprint)
540
+ --force Force reinitialization. On a TTY this re-runs the wizard with existing values pre-seeded.
541
+ --dry-run Preview changes without writing files (bypasses the wizard)
542
+ --non-interactive Force the legacy silent path even on a TTY
543
+ --no-daemon Skip auto-starting the daemon at the end of the wizard
544
+ --name string Pre-fill the wizard's identity-name prompt
545
+ --role string Pre-fill the wizard's role prompt
546
+ --module string Pre-fill the wizard's module prompt
547
+ --worktrees-root string Pre-fill the wizard's worktrees-root prompt (absolute path outside the repo)
548
+ --roles string Pre-fill the wizard's role-template choice: enhanced|default|skip
549
+ ```
550
+
551
+ The wizard's suggested default agent name is derived from the repo directory,
552
+ lowercased and sanitized to satisfy the agent-name validator (a-z, 0-9,
553
+ underscore only).
554
+
555
+ **tmux gate:** if `tmux` is not on `PATH` when the wizard reaches the
556
+ daemon-start step, init exits early with an OS-appropriate install hint
557
+ (`brew install tmux` / `apt install tmux`).
558
+
559
+ ---
560
+
561
+ ## Setup
562
+
563
+ ```bash
564
+ thrum setup claude-md # Print Thrum CLAUDE.md block to stdout
565
+ thrum setup claude-md --apply # Create or append CLAUDE.md block
566
+ thrum setup claude-md --apply --force # Replace existing Thrum block in place
567
+ thrum worktree setup <name> # Set up redirect in feature worktree (<name> required)
568
+ ```
569
+
570
+ `setup claude-md` flags:
571
+
572
+ ```text
573
+ --apply Write to ./CLAUDE.md (create or append); errors if block exists (use --force to replace)
574
+ --force Replace an existing Thrum block idempotently; no effect without --apply
575
+ ```
576
+
577
+ Block is wrapped in `<!-- BEGIN THRUM -->` / `<!-- END THRUM -->` markers for
578
+ detection. Use only if you are NOT running the Thrum Claude Code plugin — the
579
+ plugin already injects equivalent content via its SessionStart hook.
580
+
581
+ `worktree setup` flags:
582
+
583
+ ```text
584
+ --base string Base branch/ref for the new branch (default: main repo HEAD or configured merge_target)
585
+ -b, --branch string Branch name (default: feature/<name>)
586
+ --detach Create detached HEAD worktree
587
+ --effort string Pin reasoning effort (low|medium|high|xhigh|max)
588
+ --from string Alias for --base
589
+ --identity string Agent identity class (long_lived|ephemeral)
590
+ --intent string Agent intent
591
+ --mode string Agent mode (persistent|ephemeral)
592
+ --model string Pin the runtime LLM model
593
+ --module string Agent module
594
+ --name string Agent name: registers AND launches in a tmux session (requires --role)
595
+ --role string Agent role; required with --name
596
+ --runtime string Preferred runtime
597
+ ```
598
+
599
+ ---
600
+
601
+ ## Sync
602
+
603
+ ```bash
604
+ thrum sync force # Force immediate sync (non-blocking)
605
+ thrum sync status # Show sync status, last sync time, errors
606
+ thrum sync status --json
607
+ ```
608
+
609
+ Note: `thrum sync` alone prints help — use `thrum sync force` or
610
+ `thrum sync status`.
611
+
612
+ ---
613
+
614
+ ## Backup
615
+
616
+ ```bash
617
+ thrum backup # Snapshot all thrum data
618
+ thrum backup --dir /path/to/backup # Override backup directory
619
+ thrum backup status # Show last backup info
620
+ thrum backup config # Show effective backup config
621
+ thrum backup schedule # Show current schedule
622
+ thrum backup schedule 24h # Back up every 24 hours
623
+ thrum backup schedule 8h --dir /path/to/backup # Set interval + directory
624
+ thrum backup schedule off # Disable scheduled backups
625
+ ```
626
+
627
+ `backup schedule` flags:
628
+
629
+ ```text
630
+ --dir string Set backup directory
631
+ ```
632
+
633
+ Note: Daemon must be restarted for schedule changes to take effect.
634
+
635
+ ---
636
+
637
+ ## Purge
638
+
639
+ ```bash
640
+ thrum purge --before 2d # Preview: what's older than 2 days
641
+ thrum purge --before 2d --confirm # Execute the purge
642
+ thrum purge --before 2026-03-15 --confirm # Purge before a specific date
643
+ thrum purge --all --confirm # Delete all messages/sessions/events
644
+ ```
645
+
646
+ `purge` flags:
647
+
648
+ ```text
649
+ --before string Cutoff: duration (2d, 24h), date (2026-03-15), or RFC 3339
650
+ --all Purge all messages, sessions, and events
651
+ --confirm Execute the purge (without this, only shows a preview)
652
+ ```
653
+
654
+ Removes messages, sessions, and events from both SQLite and sync JSONL files.
655
+ Agents, groups, and subscriptions are not touched. `--before` and `--all` are
656
+ mutually exclusive.
657
+
658
+ ```bash
659
+ thrum backup restore # Restore from latest backup
660
+ thrum backup restore archive.zip # Restore from specific archive
661
+ thrum backup restore --yes # Skip confirmation
662
+ thrum backup plugin list # List configured plugins
663
+ thrum backup plugin add --preset beads # Add built-in preset
664
+ thrum backup plugin add --name myplugin --command "cmd" --include "*.json"
665
+ thrum backup plugin remove --name myplugin
666
+ ```
667
+
668
+ `backup` flags (inherited by all subcommands):
669
+
670
+ ```text
671
+ --dir string Override backup directory
672
+ ```
673
+
674
+ `backup plugin add` flags:
675
+
676
+ ```text
677
+ --preset string Use built-in preset: beads, beads-rust
678
+ --name string Plugin name
679
+ --command string Command to run before collecting files
680
+ --include strings File patterns to collect (glob, repeatable)
681
+ ```
682
+
683
+ `backup restore` flags:
684
+
685
+ ```text
686
+ --yes Skip confirmation prompt
687
+ ```
688
+
689
+ ---
690
+
691
+ ## Peer
692
+
693
+ ```bash
694
+ thrum peer add # Start pairing (displays 4-digit code, blocks 5min)
695
+ thrum peer join <peercode> --type <tailscale|local|...> # --type is REQUIRED
696
+ thrum peer list # List paired peers
697
+ thrum peer remove <name> # Remove a paired peer
698
+ thrum peer status # Detailed sync status for all peers
699
+ ```
700
+
701
+ `peer join` accepts the peercode (format: `name:ip:port:code`) via four input
702
+ methods (tried in order): positional argument, `--peercode` flag, stdin pipe,
703
+ interactive prompt.
704
+
705
+ Flags:
706
+
707
+ ```text
708
+ --peercode string Peer connection code (format: name:ip:port:code)
709
+ ```
710
+
711
+ ---
712
+
713
+ ## Runtime
714
+
715
+ ```bash
716
+ thrum runtime list # List all runtime presets
717
+ thrum runtime list --json
718
+ thrum runtime show <name> # Show details for a preset
719
+ thrum runtime show claude --json
720
+ thrum runtime set-default <name> # Set the default runtime preset
721
+ ```
722
+
723
+ Supported runtimes: `claude`, `codex`, `cursor`, `gemini`, `opencode`, `auggie`,
724
+ `cli-only`
725
+
726
+ ---
727
+
728
+ ## Role Templates
729
+
730
+ ```bash
731
+ thrum roles list # List templates and matching agents
732
+ thrum roles deploy # Re-render preambles from templates (all agents)
733
+ thrum roles deploy --agent alice # Deploy for a specific agent
734
+ thrum roles deploy --dry-run # Preview changes without writing files
735
+ thrum roles refresh # Re-render templates from saved role_config answers
736
+ thrum roles save-config # Write role_config to config.json from JSON on stdin
737
+ thrum roles templates print <role>-<autonomy> # Print an embedded shipped template to stdout
738
+ ```
739
+
740
+ `roles deploy` flags:
741
+
742
+ ```text
743
+ --agent string Deploy for a specific agent only
744
+ --dry-run Preview changes without writing files
745
+ ```
746
+
747
+ `roles templates print` takes a single positional argument of the form
748
+ `<role>-<autonomy>` (e.g. `implementer-autonomous`, `coordinator-strict`). Exit
749
+ code is non-zero if the template name is not found.
750
+
751
+ `roles save-config` reads a `RoleConfig` JSON object from stdin and atomically
752
+ writes `role_config` to `.thrum/config.json`, preserving all other top-level
753
+ keys. Used internally by `/thrum:configure-roles`.
754
+
755
+ ---
756
+
757
+ ## Telegram
758
+
759
+ ```bash
760
+ thrum telegram configure # Interactive setup (prompts for token, target, user)
761
+ thrum telegram configure --token <token> --target <chat-id> --user <username>
762
+ thrum telegram configure --token <token> --target <chat-id> --user <username> --yes
763
+ thrum telegram status # Show bridge connection status and config
764
+ ```
765
+
766
+ `telegram configure` flags:
767
+
768
+ ```text
769
+ --token string Telegram bot token
770
+ --target string Target chat ID or username
771
+ --user string Telegram username to associate
772
+ --yes Skip confirmation prompt (non-interactive)
773
+ ```
774
+
775
+ When flags are omitted, `configure` runs in interactive mode and prompts for
776
+ each value.
777
+
778
+ `telegram status` has no additional flags beyond globals.
779
+
780
+ ---
781
+
782
+ ## MCP Server
783
+
784
+ ```bash
785
+ thrum mcp serve # Start MCP stdio server
786
+ thrum mcp serve --agent-id alice # Override agent identity
787
+ ```
788
+
789
+ `mcp serve` flags:
790
+
791
+ ```text
792
+ --agent-id string Override agent identity (selects .thrum/identities/{name}.json)
793
+ ```
794
+
795
+ Configure in `.claude/settings.json`:
796
+
797
+ ```json
798
+ {
799
+ "mcpServers": {
800
+ "thrum": {
801
+ "type": "stdio",
802
+ "command": "thrum",
803
+ "args": ["mcp", "serve"]
804
+ }
805
+ }
806
+ }
807
+ ```
808
+
809
+ ---
810
+
811
+ ## Tmux Sessions
812
+
813
+ ```bash
814
+ thrum tmux start # One-command in current worktree: launch + prime + attach
815
+ thrum tmux start --name <session> # Override session name
816
+ thrum tmux start --runtime opencode # Override runtime
817
+ thrum tmux create <name> --cwd <path> \
818
+ --name <agent> --role <role> --module <mod> # Create session + register agent (flags required)
819
+ thrum tmux create <name> --cwd <path> \
820
+ --no-agent # Create session without agent registration
821
+ thrum tmux quickstart <name> --cwd <path> \
822
+ --name <agent> --role <role> --module <mod> # Alias for tmux create
823
+ thrum tmux launch <name> # Start AI runtime in session
824
+ thrum tmux launch <name> --runtime claude # Override runtime for this launch
825
+ thrum tmux status # Show managed sessions with state
826
+ thrum tmux connect # Attach (interactive picker)
827
+ thrum tmux connect <name> # Attach directly by name
828
+ thrum tmux restart <name> # Restart session with context snapshot
829
+ thrum tmux restart <name> # PREFERRED — re-applies the --model pin
830
+ thrum tmux restart <name> --force # Skips confirmation AND DROPS THE --model PIN
831
+ thrum tmux kill <name> # Tear down a session
832
+ thrum tmux queue <session> <command> # Submit command to session queue
833
+ thrum tmux queue <session> <command> --wait # Queue + block until complete
834
+ thrum tmux queue-status <session> # Show active + queued commands
835
+ thrum tmux cancel <command-id> # Cancel a queued or active command
836
+ ```
837
+
838
+ `tmux start` flags (operates on current working directory):
839
+
840
+ ```text
841
+ --name string Override session name (default: directory name)
842
+ --runtime string Override runtime (default: from config or claude)
843
+ ```
844
+
845
+ `tmux create` / `tmux quickstart` flags:
846
+
847
+ ```text
848
+ --cwd string Working directory for the session
849
+ --name string Agent name (required unless --no-agent)
850
+ --role string Agent role (required unless --no-agent)
851
+ --module string Agent module (required unless --no-agent)
852
+ --intent string Initial work intent description
853
+ --runtime string Runtime preset: claude, codex, cursor, gemini, opencode, auggie
854
+ --no-agent Skip agent registration (create session only)
855
+ --force Overwrite existing runtime config files
856
+ ```
857
+
858
+ Without `--no-agent`, the command errors if `--name`, `--role`, and `--module`
859
+ are all missing. Old identity files in the session worktree are cleaned up after
860
+ quickstart runs (one identity per worktree enforced).
861
+
862
+ `tmux launch` flags:
863
+
864
+ ```text
865
+ --runtime AI tool to launch (default: from config or claude)
866
+ ```
867
+
868
+ `tmux queue` flags:
869
+
870
+ ```text
871
+ --timeout int Command timeout in seconds (default 120)
872
+ --wait Block until command reaches terminal state
873
+ --silence float Silence threshold in seconds (server default: 5.0)
874
+ ```
875
+
876
+ ---
877
+
878
+ ## Config
879
+
880
+ ```bash
881
+ thrum config show # Show effective configuration
882
+ thrum config show --json
883
+ ```
884
+
885
+ ---
886
+
887
+ ## Worktree Management
888
+
889
+ ```bash
890
+ thrum worktree create <name> # Create worktree with thrum/beads setup
891
+ thrum worktree create <name> -b <branch> # Specify branch name
892
+ thrum worktree create <name> --base <ref> # Override base ref (default: cwd HEAD)
893
+ thrum worktree create <name> --detach # Detached HEAD worktree
894
+ thrum worktree create <name> \
895
+ --name <agent> --role <role> --module <mod> # Create worktree + register agent
896
+ thrum worktree setup <name> # Alias for worktree create
897
+ thrum worktree teardown <name> # Remove worktree, keep branch
898
+ thrum worktree teardown <name> --delete-branch # Also delete the worktree's branch
899
+ thrum worktree list # List worktrees with agent info
900
+ ```
901
+
902
+ `worktree create` / `worktree setup` flags:
903
+
904
+ ```text
905
+ --branch, -b string Branch name (default: feature/<name>)
906
+ --base string Base ref for the new branch (default: current HEAD of cwd)
907
+ --detach Create detached HEAD worktree
908
+ --name string Agent name (triggers quickstart when combined with --role + --module)
909
+ --role string Agent role
910
+ --module string Agent module
911
+ --intent string Initial work intent description
912
+ --runtime string Runtime preset: claude, codex, cursor, gemini, opencode, auggie
913
+ ```
914
+
915
+ `worktree teardown` flags:
916
+
917
+ ```text
918
+ --delete-branch Delete the worktree's branch after removing the worktree
919
+ (branch stays by default)
920
+ ```
921
+
922
+ When `--name`, `--role`, and `--module` are all provided, a tmux session is
923
+ created with the worktree as cwd and quickstart runs inside the pane (PID
924
+ isolation). The agent identity is registered, but **the runtime is NOT started
925
+ yet** — follow up with `thrum tmux launch <name>` to start the agent. The output
926
+ explicitly shows the next-step launch command.
927
+
928
+ If the agent flags are omitted, the worktree is created with redirects only and
929
+ the output shows the full `tmux create` command needed to register an agent
930
+ later.
931
+
932
+ ---
933
+
934
+ ## Monitor Jobs
935
+
936
+ Run a long-lived command, filter output through a regex, and deliver matching
937
+ lines as Thrum messages. Jobs persist across daemon restarts. Max 100
938
+ concurrent. The command must follow `--`.
939
+
940
+ ```bash
941
+ thrum monitor start --name <n> --match <re> --to @agent -- <cmd> [args...]
942
+ thrum monitor start --name <n> --match <re> --to @agent \
943
+ --debounce 120s --env KEY=VALUE -- <cmd>
944
+ thrum monitor list # Running jobs only
945
+ thrum monitor list --all # Include stopped/dead (<1 week)
946
+ thrum monitor show <id|name> # Full detail (env values redacted)
947
+ thrum monitor stop <id|name> # SIGTERM → 5s → SIGKILL
948
+ thrum monitor logs <id|name> # Last 20 matched lines
949
+ thrum monitor logs <id|name> -n 50 # Last 50 matched lines
950
+ thrum monitor restart <id|name> # Restart dead/stopped monitor
951
+ ```
952
+
953
+ Note: `monitor add` is retained as an alias for `monitor start`.
954
+
955
+ `monitor start` flags:
956
+
957
+ ```text
958
+ --name string Unique monitor name (required)
959
+ --match string Regex pattern — matching lines trigger a message (required)
960
+ --to string Target agent or group, e.g. @coordinator (required)
961
+ --debounce duration Leading-edge debounce window, minimum 30s (default 60s)
962
+ --env strings Environment variable in KEY=VALUE form (repeatable)
963
+ --cwd string Working directory for the command (default: current dir)
964
+ ```
965
+
966
+ `monitor list` flags:
967
+
968
+ ```text
969
+ --all Include stopped/dead monitors younger than one week
970
+ ```
971
+
972
+ `monitor logs` flags:
973
+
974
+ ```text
975
+ -n, --limit int Max number of matches to return (default 20)
976
+ ```
977
+
978
+ Key constraints: local Unix socket only, max line length 2KB (lines truncated),
979
+ leading-edge debounce (min 30s), auto-persists across daemon restart, sends a
980
+ notify-only message on child exit.
981
+
982
+ ---
983
+
984
+ ## Memory
985
+
986
+ ### memory migrate-from-bd
987
+
988
+ One-shot migration utility that moves every `bd memories <prefix>` entry into a
989
+ v0.11 `thrum memory` record. Runs at v0.11 ship-day, BEFORE any rc.N tag is cut
990
+ — and, critically, **BEFORE any agent restarts or re-primes on the v0.11
991
+ binary**. The v0.11 role preambles load role-rules from `thrum memory`
992
+ (`thrum memory list --kind agent_rule --scope role`); if an agent re-primes
993
+ before this migration runs, it primes with EMPTY role-rule lists while the rules
994
+ still sit orphaned in beads (silent loss, no error). Confirm the run reports
995
+ MIGRATED > 0 before letting any agent reprime. If MIGRATED is 0, investigate the
996
+ logs before re-running (the run may have partially succeeded).
997
+
998
+ ```bash
999
+ thrum memory migrate-from-bd [flags]
1000
+ ```
1001
+
1002
+ Flags:
1003
+
1004
+ ```text
1005
+ --dry-run Print what would be migrated; no writes
1006
+ (still requires daemon + LLM unless
1007
+ --no-llm-summaries is also set)
1008
+ --limit N Migrate only the first N entries (0 = no limit)
1009
+ --model <name> LLM chat model (default qwen3:30b-a3b-instruct-2507-q4_K_M)
1010
+ --endpoint <url> Override endpoint list (default reads OLLAMA_HOST_1/_2 / OLLAMA_HOSTS)
1011
+ --no-llm-summaries Skip LLM synthesis; write body_full only (MEM-010 hints fire per-entry)
1012
+ --rollback Reverse a migration via manifest
1013
+ --manifest <path> With --rollback: manifest path (default: latest in dev-docs/migrations/)
1014
+ --hard With --rollback: hard-purge instead of soft-delete
1015
+ --confirm-rollback "DELETE <n>" With --rollback: safety token; n must match manifest entry count
1016
+ --yes Skip the interactive confirmation prompt
1017
+ ```
1018
+
1019
+ Behavior:
1020
+
1021
+ - Idempotent: re-runs skip entries already carrying the
1022
+ `migrated-from-bd:<bd-key>` tag and record them as Skipped, not Migrated.
1023
+ - Migrated entries land as v0.11 memory records with `title=<bd-key>` and the
1024
+ idempotency tag. The bd-key classification table (D2 in the design doc) maps
1025
+ prefixes to kind/scope: `research-*` → research_note/agent, `<role>-rule-*` →
1026
+ agent_rule/role, `tmux-*` → stable_infra/project, `release-rule-*` →
1027
+ agent_rule/project, `self-*` → agent_rule/agent.
1028
+ - Outliers (entries that don't match any D2 pattern OR fail LLM synthesis after
1029
+ all retries) land in a sidecar JSON file in `dev-docs/migrations/` for manual
1030
+ operator review. The migration loop continues — single-entry failures never
1031
+ abort the run.
1032
+ - Artifacts under
1033
+ `dev-docs/migrations/<YYYY-MM-DDThhmmZ>-bd-to-thrum-migration*`: the manifest
1034
+ (bd-key → memory-id mapping, required for `--rollback`), the per-entry log,
1035
+ and a human-readable summary.md.
1036
+
1037
+ Rollback:
1038
+
1039
+ ```bash
1040
+ # Default: pick the latest manifest in dev-docs/migrations/
1041
+ thrum memory migrate-from-bd --rollback --confirm-rollback "DELETE 53"
1042
+
1043
+ # Explicit manifest, hard purge:
1044
+ thrum memory migrate-from-bd --rollback \
1045
+ --manifest dev-docs/migrations/2026-05-26T1500Z-bd-to-thrum-migration-manifest.json \
1046
+ --hard --confirm-rollback "DELETE 53"
1047
+ ```
1048
+
1049
+ The `--confirm-rollback` token must equal `DELETE <n>` where `<n>` is the exact
1050
+ number of entries in the manifest. Mismatch aborts before any writes. Hard purge
1051
+ additionally requires a per-entry `DELETE <id>` token per the standard
1052
+ `thrum memory delete --hard` semantics; the rollback flow synthesizes these
1053
+ automatically from the manifest.
1054
+
1055
+ ---
1056
+
1057
+ ## Utility
1058
+
1059
+ ```bash
1060
+ thrum version # Show version, build hash, repo URL, docs URL
1061
+ thrum version --json
1062
+ thrum prime # Gather full session context for initialization
1063
+ thrum prime --json
1064
+ thrum overview # Combined status + team + inbox view
1065
+ thrum overview --json
1066
+ ```