opencode-thrum-pro 0.1.10 → 0.1.12

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.
@@ -155,7 +155,7 @@ relocation, or teardown error) is signaled by the RPC returning an explicit
155
155
  error message BEFORE the pane dies — that is the only failure signal
156
156
  observable from inside this pane. If independent confirmation is needed, it
157
157
  must come from a DIFFERENT caller (this pane will be gone) checking
158
- `thrum agent list` / `thrum team list` afterward.
158
+ `thrum team` afterward.
159
159
 
160
160
  **Do not fall back to a raw `tmux kill-session`.** A raw kill bypasses
161
161
  `agent.sleep`'s relocate-before-kill ordering and daemon bookkeeping
@@ -156,7 +156,7 @@ relocation, or teardown error) is signaled by the RPC returning an explicit
156
156
  error message BEFORE the pane dies — that is the only failure signal
157
157
  observable from inside this pane. If independent confirmation is needed, it
158
158
  must come from a DIFFERENT caller (this pane will be gone) checking
159
- `thrum agent list` / `thrum team list` afterward.
159
+ `thrum team` afterward.
160
160
 
161
161
  **Do not fall back to a raw `tmux kill-session`.** A raw kill bypasses
162
162
  `agent.sleep`'s relocate-before-kill ordering and daemon bookkeeping
@@ -127,7 +127,7 @@ An agent definition can also carry a default (Claude example — resolve to
127
127
  your own runtime's `mechanical`-tier value if you are not Claude):
128
128
 
129
129
  ```yaml
130
- # claude-plugin/agents/message-listener.md
130
+ # claude-plugin/agents/message-listener.md (non-tmux fallback only)
131
131
  name: message-listener
132
132
  model: sonnet
133
133
  effort: low
@@ -45,7 +45,7 @@ Run these commands and collect the output (suppress errors):
45
45
  thrum runtime list 2>/dev/null # Installed runtimes
46
46
  git worktree list 2>/dev/null # Worktrees and branches
47
47
  bd stats 2>/dev/null # Beads task tracker state
48
- thrum agent list --context 2>/dev/null # Registered agents
48
+ thrum team --all --include-inactive --compact 2>/dev/null # Fleet roster, including offline, stale and retired agents
49
49
  ls .claude/skills/ 2>/dev/null # Installed Claude skills
50
50
  thrum config show 2>/dev/null # Thrum configuration
51
51
  ```
@@ -52,7 +52,7 @@ orphaned (reap).
52
52
  | How long has it been quiet? | transcript mtime — **weak, see below** |
53
53
  | What is it waiting for? | its own last message, read as prose |
54
54
 
55
- **Do NOT use `thrum team`, `thrum agent list`, `phase`, or `last_seen_at` for any
55
+ **Do NOT use `thrum team`, `phase`, or `last_seen_at` for any
56
56
  of this.** They are stale, and they fail toward
57
57
  reporting a live agent as absent.
58
58
 
@@ -377,12 +377,13 @@ apply the coordinator-equivalent 75% floor above while working). The >85%
377
377
  bracket still fires regardless. These are EXPLICIT DECLARED states, not a
378
378
  heuristic guess at coordination intent — a consultant/on-call/done-planning
379
379
  researcher must set one of these prefixes ITSELF via
380
- `thrum agent set-intent "warm-hold: <reason>"` (or `on-call:`/`parked:`).
380
+ `thrum session set-intent "warm-hold: <reason>"` (or `on-call:`/`parked:`).
381
381
 
382
- **A coordinator CANNOT set another agent's intent.** `thrum agent set-intent`
382
+ **A coordinator CANNOT set another agent's intent.** `thrum session set-intent`
383
383
  takes TEXT only — it sets the intent for the CURRENT SESSION and accepts no
384
384
  agent argument and no `--to`. To get an intent onto another agent, message that
385
- agent and have it set its own; then verify by reading `thrum agent list --json`
385
+ agent and have it set its own; then verify in the focused fleet view with
386
+ `thrum team @AGENT --offline --include-inactive --json`
386
387
  rather than by counting acks.
387
388
 
388
389
  **Background-child-aware busy detection:** an agent with an OPEN in-progress bead, a recent JSONL tool_use
@@ -608,8 +609,9 @@ coordinator manually invoking the skill, run these guards BEFORE firing a
608
609
  restart:
609
610
 
610
611
  1. **Verify the daemon is reachable**:
611
- `thrum team --json | jq '.members | length'` — if 0 or error, daemon is down;
612
- skip the sweep, surface to operator.
612
+ Run `thrum daemon status`; on error, skip the sweep and surface to operator.
613
+ Inspect the local online roster with `thrum team --json` (`.team.members`);
614
+ use `--offline --include-inactive` for offline, stale and retired rows.
613
615
  2. **Confirm the monitor is alive**: `thrum monitor list` should show
614
616
  `context-monitoring` in `running` status with a non-empty `SCHEDULE` column.
615
617
  If absent or dead, the scheduled ALERTs aren't firing and the skill must be
@@ -654,7 +656,7 @@ When a restart fires (Step 4 or 5 — tmux-send nudge or snapshot-gated restart)
654
656
  1. Surface a brief status note to the coordinator: "Restarted @\<agent_name\>
655
657
  at \<ctx\>% — snapshot at
656
658
  `.thrum/agents/<agent>/sessions/<timestamp>-restart.md`".
657
- 2. Wait for the agent to come back online (`thrum team` shows them active again,
659
+ 2. Wait for the agent to come back online (`thrum team @AGENT --offline --include-inactive` shows them online again,
658
660
  or their pane shows the runtime prompt).
659
661
  3. Re-send their current dispatch with the full scope + plan refs + AC targets —
660
662
  treat them as a fresh implementer who needs the full briefing again.
@@ -41,7 +41,8 @@ identity drift, broken nudges, and silent message loss.
41
41
  worktree shows a registered agent, communicate with it via
42
42
  `thrum send --to @<agent_name> --body-file msg.md` instead. Sub-agents are for
43
43
  research/explore, code review, and message listeners running in the main repo —
44
- never for implementation work in another agent's worktree.
44
+ use message listeners only when tmux pane delivery is unavailable, and never
45
+ for implementation work in another agent's worktree.
45
46
 
46
47
  ## Dispatch via `thrum send` after launch — not via tmux send-keys
47
48
 
@@ -135,7 +135,7 @@ thrum agent delete <agent> # SEPARATE reap, after the worktree is gone
135
135
  ```
136
136
 
137
137
  `worktree teardown` does NOT delete the agent: it is preparation for deleting
138
- one. The row stays `retired` (hidden from default `agent list` / `team` /
138
+ one. The row stays `retired` (hidden from the default team roster /
139
139
  overview / UI; visible with `--include-inactive` / `--phase retired`) until
140
140
  `thrum agent delete` or the sweeper reaps it. `agent delete` refuses an agent
141
141
  whose linked worktree still exists or whose process (pid/tmux) is live, and
@@ -323,7 +323,7 @@ covered in the runner's preamble; the agent/session half needs the same check.
323
323
  thrum tmux status | grep -E '^\s*g[0-9]+' # gate sessions, agentless ones included
324
324
  ```
325
325
 
326
- 🔴 **`thrum team` and `thrum agent list` CANNOT SEE an agentless session.** Five of
326
+ 🔴 **`thrum team` CANNOT SEE an agentless session.** Five of
327
327
  those nine had no registered agent, so a registry-based enumeration returns a
328
328
  confident answer that omits most of the population. **Enumerate sessions, not
329
329
  agents.**
@@ -198,7 +198,7 @@ For each `*-brainstorm` worktree that looks relevant, inspect:
198
198
  | Idle + domain-relevant researcher found | **REUSE** — send the Phase 2 briefing to the existing agent in its current worktree. Skip the rest of Phase 1. |
199
199
  | No idle relevant researcher | Fall through → proceed with "Pick the base branch" below. |
200
200
 
201
- When reusing, have the agent itself run `thrum agent set-intent "<new one-line
201
+ When reusing, have the agent itself run `thrum session set-intent "<new one-line
202
202
  topic>"` so `thrum team` output stays accurate (there is no command to set
203
203
  ANOTHER agent's intent — `set-intent` acts on the caller), then send the Phase 2
204
204
  briefing as normal. The existing
@@ -716,8 +716,8 @@ thrum daemon status
716
716
  cat .thrum/redirect
717
717
  cat .beads/redirect
718
718
 
719
- # Agent registered
720
- thrum agent list --context
719
+ # Verify this agent across the fleet, including offline, stale and retired rows
720
+ thrum team @AGENT --offline --include-inactive
721
721
  ```
722
722
 
723
723
  ### Step 5: Update CLAUDE.md
@@ -823,7 +823,7 @@ worktree-related values come from the Phase 3 assignments:
823
823
  | `{{AGENT_NAME}}` | **From Phase 3 agent registration** |
824
824
  | `{{PLAN_FILE}}` | **Absolute path** to the plan file (primary input) |
825
825
  | `{{ANTI_PATTERNS}}` | Generated in Step 1.5; refer to the `project-philosophy` skill for the anti-pattern format spec. |
826
- | `{{SUPERVISOR_NAME}}` | From `thrum team` — first agent with role=orchestrator; if none, first with role=coordinator; if none, ask user |
826
+ | `{{SUPERVISOR_NAME}}` | From the local online roster (`thrum team`) — first agent with role=orchestrator; if none, first with role=coordinator; if none, ask user |
827
827
  | `{{CROSS_EPIC_DEPS}}` | From Phase 2 cross-epic dependency map. If no cross-epic deps, replace with "No cross-epic dependencies." |
828
828
 
829
829
  **IMPORTANT — Absolute paths for gitignored files:** `{{DESIGN_DOC}}`,
@@ -151,9 +151,8 @@ names. Always send to agent names (e.g., `--to @coord_main`), not role names
151
151
  (e.g., `--to @coordinator`). Sending to a role fans out to ALL agents with that
152
152
  role.
153
153
 
154
- **Use the message listener** — Spawn a background listener to get async
155
- notifications. Re-arm it every time it returns (both MESSAGES_RECEIVED and
156
- NO_MESSAGES_TIMEOUT).
154
+ Messages arrive in your pane. Check `thrum inbox --unread` at natural
155
+ breakpoints. Never spawn a background listener.
157
156
 
158
157
  When your work is complete (Phase 4), send a completion message prefixed with
159
158
  the appropriate **status token** (see Status Vocabulary at the start of Phase
@@ -568,7 +567,7 @@ Heads up: I'm modifying internal/daemon/rpc.go which may overlap with your work
568
567
  EOF
569
568
 
570
569
  # Update your intent when switching tasks
571
- thrum agent set-intent "Working on {{TASK_ID}}: <description>"
570
+ thrum session set-intent "Working on {{TASK_ID}}: <description>"
572
571
  ```
573
572
 
574
573
  ---
@@ -124,7 +124,7 @@ thrum <cmd> --help Detailed command usage
124
124
  | ---------------------------------------- | -------------------------- | ----------------------------- |
125
125
  | Cross-worktree messaging | Same-session task tracking | Single-agent, no coordination |
126
126
  | Persistent messages (survive compaction) | Ephemeral task lists | Temporary scratch notes |
127
- | Background listener pattern | Inline progress tracking | Simple linear execution |
127
+ | Non-tmux listener fallback | Inline progress tracking | Simple linear execution |
128
128
  | Multi-machine sync via git | Local to conversation | No persistence needed |
129
129
 
130
130
  **Decision test:** "Do messages need to survive session restart or reach agents
@@ -139,13 +139,14 @@ for cross-session/cross-worktree coordination messages.
139
139
 
140
140
  When running in a tmux-managed session, messages are delivered directly to your
141
141
  pane via daemon nudge — zero token cost, no background sub-agent needed. See
142
- [TMUX_SESSIONS.md](resources/TMUX_SESSIONS.md).
142
+ [TMUX_SESSIONS.md](resources/TMUX_SESSIONS.md). Check `thrum inbox --unread` at
143
+ natural breakpoints; never spawn a background listener.
143
144
 
144
145
  ### Listener Pattern (Fallback)
145
146
 
146
- When tmux is not available, use the background message listener. It calls
147
- `thrum wait` (blocking) and returns when messages arrive. Re-arm after
148
- processing. See [LISTENER_PATTERN.md](resources/LISTENER_PATTERN.md).
147
+ Use the background message listener only when tmux pane delivery is unavailable.
148
+ It calls `thrum wait` (blocking) and returns when messages arrive. See
149
+ [LISTENER_PATTERN.md](resources/LISTENER_PATTERN.md).
149
150
 
150
151
  ### Context Management
151
152
 
@@ -11,18 +11,14 @@ between agents.
11
11
  ## 2. Polling Instead of Waiting
12
12
 
13
13
  **Wrong:** Looping `thrum inbox` every 10 seconds. **Right:** Use `thrum wait`
14
- which blocks efficiently until a message arrives. Or use the message-listener
15
- sub-agent pattern for background monitoring.
14
+ which blocks efficiently until a message arrives. Use the listener fallback
15
+ only when tmux pane delivery is unavailable.
16
16
 
17
- ## 3. Forgetting to Re-arm the Listener
17
+ ## 3. Spawning Listeners in Tmux Sessions
18
18
 
19
- **Wrong:** Processing messages from listener, then continuing work without
20
- re-arming. **Right:** After processing listener results, always spawn a new
21
- message-listener:
22
-
23
- ```text
24
- Task(subagent_type="message-listener", run_in_background=true, prompt="...")
25
- ```
19
+ In tmux-managed sessions, messages arrive in the pane. Check
20
+ `thrum inbox --unread` at natural breakpoints and never spawn a background
21
+ listener.
26
22
 
27
23
  ## 4. Sending Without an Explicit Recipient Flag
28
24
 
@@ -22,7 +22,7 @@ These flags apply to every command:
22
22
  Many commands append contextual hints after their normal output. Two kinds:
23
23
 
24
24
  - **detection** — condition-triggered guards (e.g. identity mismatch, empty
25
- agent list, peer version drift). Fire whenever the condition is present.
25
+ team roster, peer version drift). Fire whenever the condition is present.
26
26
  - **reinforcement** — periodic memory-aids, band-throttled by context
27
27
  percentage. Fire occasionally, not on every command.
28
28
 
@@ -280,44 +280,42 @@ Flags:
280
280
  --re-register Re-register same agent
281
281
  ```
282
282
 
283
- ### agent list
283
+ ### team roster
284
284
 
285
285
  ```bash
286
- thrum agent list # List all registered agents
287
- thrum agent list --role reviewer # Filter by role
288
- thrum agent list --module auth # Filter by module
289
- thrum agent list --context # Show work context (branch, commits, intent)
290
- thrum agent list --json
286
+ thrum team # Local active roster
287
+ thrum team --role reviewer # Filter by role
288
+ thrum team --module auth # Filter by module
289
+ thrum team --compact # One line per agent with intent and branch/commits
290
+ thrum team --phase stale # Exact stale triage queue
291
+ thrum team --include-inactive # Add stale and retired rows
292
+ thrum team --offline # Add ordinary offline rows
293
+ thrum team --all # Preserve the whole-fleet roster
294
+ thrum team --json
291
295
  ```
292
296
 
293
- Flags:
294
-
295
- ```text
296
- --context Show work context (branch, commits, intent)
297
- --role string Filter by role
298
- --module string Filter by module
299
- ```
297
+ `--include-inactive` includes stale and retired rows, including offline stale/retired rows, while omitting ordinary offline active rows. `--offline` adds ordinary offline active rows. Use both for their union. `--phase` remains exact. Stale rows show last-seen and measured worktree, identity-file, and tmux-session presence; unavailable measurements render as `unknown`. `Reap candidate` is display-only and appears only when worktree and tmux-session presence are both explicitly absent.
300
298
 
301
- ### agent set-intent / session set-intent
299
+ ### session set-intent
302
300
 
303
301
  ```bash
304
- thrum agent set-intent "Fixing memory leak in connection pool"
302
+ thrum session set-intent "Fixing memory leak in connection pool"
305
303
  thrum session set-intent "Refactoring login flow"
306
- thrum agent set-intent "" # Clear intent
304
+ thrum session set-intent "" # Clear intent
307
305
  ```
308
306
 
309
- ### agent set-task / session set-task
307
+ ### session set-task
310
308
 
311
309
  ```bash
312
- thrum agent set-task beads:thrum-xyz
310
+ thrum session set-task beads:thrum-xyz
313
311
  thrum session set-task "JIRA-1234"
314
- thrum agent set-task "" # Clear task
312
+ thrum session set-task "" # Clear task
315
313
  ```
316
314
 
317
- ### agent heartbeat / session heartbeat
315
+ ### session heartbeat
318
316
 
319
317
  ```bash
320
- thrum agent heartbeat
318
+ thrum session heartbeat
321
319
  thrum session heartbeat
322
320
  thrum session heartbeat --add-scope module:auth
323
321
  thrum session heartbeat --remove-ref pr:42
@@ -333,17 +331,17 @@ Flags:
333
331
  --remove-ref strings Remove ref (repeatable, format: type:value)
334
332
  ```
335
333
 
336
- ### agent start / session start
334
+ ### session start
337
335
 
338
336
  ```bash
339
- thrum agent start
337
+ thrum session start
340
338
  thrum session start
341
339
  ```
342
340
 
343
- ### agent end / session end
341
+ ### session end
344
342
 
345
343
  ```bash
346
- thrum agent end
344
+ thrum session end
347
345
  thrum session end
348
346
  thrum session end --reason crash
349
347
  thrum session end --session-id <id>
@@ -5,6 +5,10 @@
5
5
  > [TMUX_SESSIONS.md](TMUX_SESSIONS.md). Use the listener pattern below when tmux
6
6
  > is not available or not practical for your setup.
7
7
  >
8
+ > In tmux-managed sessions, messages arrive in the pane. Check
9
+ > `thrum inbox --unread` at natural breakpoints and never spawn a background
10
+ > listener.
11
+ >
8
12
  > **Deprecated for newly initialized agents:** the hook injection and
9
13
  > scheduled backstop that `thrum init` installs deliver message nudges without a
10
14
  > listener. The pattern below still works and is supported, but it holds tokens in
@@ -2,7 +2,8 @@
2
2
 
3
3
  Tmux-managed sessions are the recommended way to run Thrum agents. The daemon
4
4
  detects the tmux pane and delivers message notifications directly — zero token
5
- cost, no background listener needed.
5
+ cost, no background listener needed. Check `thrum inbox --unread` at natural
6
+ breakpoints; never spawn a background listener.
6
7
 
7
8
  ## Why Tmux Sessions
8
9
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-thrum-pro",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "description": "Thrum multi-agent coordination plugin for Open Code",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",