@gigaflow/gmux 0.15.0 → 0.16.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 (73) hide show
  1. package/CHANGELOG.md +110 -80
  2. package/README.md +81 -57
  3. package/dist/adapters/claude-code.js +5 -2
  4. package/dist/adapters/claude-code.js.map +1 -1
  5. package/dist/adapters/codex.js +5 -2
  6. package/dist/adapters/codex.js.map +1 -1
  7. package/dist/cli/border-client.d.ts +1 -1
  8. package/dist/cli/border-client.js +1 -1
  9. package/dist/cli/commands/cockpit.d.ts +16 -6
  10. package/dist/cli/commands/cockpit.js +288 -20
  11. package/dist/cli/commands/cockpit.js.map +1 -1
  12. package/dist/cli/commands/daemon.d.ts +2 -19
  13. package/dist/cli/commands/daemon.js +39 -88
  14. package/dist/cli/commands/daemon.js.map +1 -1
  15. package/dist/cli/commands/doctor.js +24 -0
  16. package/dist/cli/commands/doctor.js.map +1 -1
  17. package/dist/cli/commands/organize.d.ts +18 -0
  18. package/dist/cli/commands/organize.js +94 -0
  19. package/dist/cli/commands/organize.js.map +1 -0
  20. package/dist/cli/commands/setup.js +13 -1
  21. package/dist/cli/commands/setup.js.map +1 -1
  22. package/dist/cli/commands/tmux.d.ts +56 -0
  23. package/dist/cli/commands/tmux.js +158 -28
  24. package/dist/cli/commands/tmux.js.map +1 -1
  25. package/dist/cli/gmux-render.d.ts +12 -1
  26. package/dist/cli/gmux-render.js +18 -11
  27. package/dist/cli/gmux-render.js.map +1 -1
  28. package/dist/cli/main.js +2 -0
  29. package/dist/cli/main.js.map +1 -1
  30. package/dist/cli/organize-confirm.d.ts +45 -0
  31. package/dist/cli/organize-confirm.js +57 -0
  32. package/dist/cli/organize-confirm.js.map +1 -0
  33. package/dist/cli/overlay-ask.d.ts +3 -1
  34. package/dist/cli/overlay-ask.js +5 -3
  35. package/dist/cli/overlay-ask.js.map +1 -1
  36. package/dist/cli/tmux-label.d.ts +11 -4
  37. package/dist/cli/tmux-label.js +17 -6
  38. package/dist/cli/tmux-label.js.map +1 -1
  39. package/dist/cli/work-report.d.ts +18 -0
  40. package/dist/cli/work-report.js +50 -0
  41. package/dist/cli/work-report.js.map +1 -0
  42. package/dist/core/bytes.d.ts +6 -0
  43. package/dist/core/bytes.js +13 -0
  44. package/dist/core/bytes.js.map +1 -0
  45. package/dist/core/organize-types.d.ts +95 -0
  46. package/dist/core/organize-types.js +33 -0
  47. package/dist/core/organize-types.js.map +1 -0
  48. package/dist/core/paths.d.ts +13 -0
  49. package/dist/core/paths.js +20 -1
  50. package/dist/core/paths.js.map +1 -1
  51. package/dist/services/ask-router.d.ts +44 -0
  52. package/dist/services/ask-router.js +63 -0
  53. package/dist/services/ask-router.js.map +1 -0
  54. package/dist/services/daemon-lock.d.ts +31 -0
  55. package/dist/services/daemon-lock.js +77 -0
  56. package/dist/services/daemon-lock.js.map +1 -0
  57. package/dist/services/daemon.js +35 -6
  58. package/dist/services/daemon.js.map +1 -1
  59. package/dist/services/guardian.js +4 -4
  60. package/dist/services/guardian.js.map +1 -1
  61. package/dist/services/organize.d.ts +91 -0
  62. package/dist/services/organize.js +462 -0
  63. package/dist/services/organize.js.map +1 -0
  64. package/dist/services/tmux-gateway.d.ts +12 -0
  65. package/dist/services/tmux-gateway.js +7 -1
  66. package/dist/services/tmux-gateway.js.map +1 -1
  67. package/dist/services/tmux.d.ts +17 -1
  68. package/dist/services/tmux.js +34 -1
  69. package/dist/services/tmux.js.map +1 -1
  70. package/dist/services/work-view.d.ts +67 -0
  71. package/dist/services/work-view.js +155 -0
  72. package/dist/services/work-view.js.map +1 -0
  73. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,36 @@ Notable changes, newest first. Versions follow [semver](https://semver.org): whi
4
4
  0.x, a **minor** bump means behavior changed in a way you should read about before
5
5
  upgrading, and a **patch** is a fix that asks nothing of you.
6
6
 
7
+ ## 0.16.0
8
+
9
+ ### Cockpit prompt, work report, and an onboarding path that actually lands
10
+
11
+ The ctrl-g grid now takes plain English at the bottom. Type an intent: a
12
+ question is broadcast to every visible session and answered inline; a layout
13
+ request ("group these by project") is planned, previewed, and applied only on
14
+ confirm. `ctrl-v` writes a per-session HTML work report and shows a `file://`
15
+ link. `gmux organize` is the same planner from the shell (dry-run default,
16
+ `--apply` to run it).
17
+
18
+ The documented first-run path now works on Oh My Tmux. `gmux tmux install` (and
19
+ the setup wizard's bindings prompt) write to `~/.tmux.conf.local` when the live
20
+ conf sources it, never through Oh My Tmux's git-managed `~/.tmux.conf` symlink.
21
+ A leftover `# >>> gigamanage >>>` block is stripped so ctrl-g opens the cockpit
22
+ instead of `gm overlay`. Vanilla tmux and a dotfiles-repo symlink of
23
+ `~/.tmux.conf` still write through to that file. `gmux doctor` reports both.
24
+
25
+ **Upgrading from gigamanage / 0.15.0:**
26
+
27
+ ```bash
28
+ npm uninstall -g gigamanage # if the old `gm` command is still around
29
+ npm install -g @gigaflow/gmux
30
+ gmux setup # provider, guardian, tmux bindings
31
+ tmux source-file ~/.tmux.conf
32
+ gmux daemon
33
+ ```
34
+
35
+ The package publishes as `@gigaflow/gmux` (not `@gigaflowai/gmux`).
36
+
7
37
  ## 0.15.0
8
38
 
9
39
  ### Always-on workspace awareness — daemon, cockpit, memory guardian
@@ -73,8 +103,8 @@ goes from here.
73
103
  ### Summaries follow the pane, even after you move panes around
74
104
 
75
105
  When several panes share a directory and their agents were started fresh
76
- (`claude --model=…`, no `--resume <id>`), gigamanage had nothing to tell the panes
77
- apart — no session id on the command line, no `gm run` link — so it handed out the
106
+ (`claude --model=…`, no `--resume <id>`), gmux had nothing to tell the panes
107
+ apart — no session id on the command line, no `gmux run` link — so it handed out the
78
108
  newest sessions in the directory in pane-list order. Move a pane, or let a session
79
109
  update, and the summaries reshuffled onto the wrong cards.
80
110
 
@@ -82,7 +112,7 @@ The overlay now pairs those panes to sessions by **process start order**: within
82
112
  directory, the oldest agent process takes the oldest-started session, and so on.
83
113
  A process's start time is stable and belongs to the pane's real process, so the
84
114
  mapping holds when you move, swap, or join panes. A directory with a single agent
85
- is unchanged. Exact matches — a `--resume <id>` on the command line, or a `gm run`
115
+ is unchanged. Exact matches — a `--resume <id>` on the command line, or a `gmux run`
86
116
  link — still win outright.
87
117
 
88
118
  ## 0.13.5
@@ -98,7 +128,7 @@ the overlay stayed up. Esc still closes; the ask-box hint now reads `^G/Esc clos
98
128
 
99
129
  ### Codex summaries work again after an upgrade
100
130
 
101
- A config written by an older `gm` froze the codex command as `codex exec`. When
131
+ A config written by an older `gmux` froze the codex command as `codex exec`. When
102
132
  the catalog later gained `--skip-git-repo-check` (so codex can summarize outside a
103
133
  trusted git checkout), that flag never reached an existing config: summary
104
134
  resolution replayed the stored command verbatim, so every codex summary failed
@@ -106,8 +136,8 @@ with *"Not inside a trusted directory and --skip-git-repo-check was not
106
136
  specified"* and the `ctrl-g` overlay stayed stuck on "no summary yet".
107
137
 
108
138
  A **known** provider now re-derives its argv from the catalog rather than the
109
- command frozen at setup time — the same self-healing `gm ask` already had. A
110
- `custom` provider is still run exactly as you wrote it. No re-run of `gm setup`
139
+ command frozen at setup time — the same self-healing `gmux ask` already had. A
140
+ `custom` provider is still run exactly as you wrote it. No re-run of `gmux setup`
111
141
  needed; upgrade and codex summaries resume.
112
142
 
113
143
  ## 0.13.3
@@ -128,9 +158,9 @@ one.
128
158
 
129
159
  - **Force refresh:** press **ctrl-r** in the `ctrl-g` overlay to regenerate the
130
160
  visible panes' summaries now, ignoring the divergence gate. From the shell:
131
- `gm summarize <id> --force`, `gm summarize --recent 20 --force`, or
132
- `gm summarize --all --force`.
133
- - **Cross-window fix:** the overlay (and `gm ask --window`) used to resolve only
161
+ `gmux summarize <id> --force`, `gmux summarize --recent 20 --force`, or
162
+ `gmux summarize --all --force`.
163
+ - **Cross-window fix:** the overlay (and `gmux ask --window`) used to resolve only
134
164
  the current window's panes, so a fresh agent with no session id on its command
135
165
  line could grab the session another window's pane already owns — making two
136
166
  panes show the same summary. They now resolve every pane in the server and keep
@@ -171,10 +201,10 @@ separate chat" with an integrated box on the overlay itself.
171
201
  In the `ctrl-g` overlay, press **`a`** to open a chat that fans out over the agent
172
202
  sessions in the current window. Ask high-level orienting questions — "what is each
173
203
  one doing?", "what is most urgent?", "which are waiting on me?" — and keep asking;
174
- it is `gm ask`, scoped to the panes in front of you rather than your whole recent
204
+ it is `gmux ask`, scoped to the panes in front of you rather than your whole recent
175
205
  list. Any other key still just closes the overlay.
176
206
 
177
- Also available directly: `gm ask --window <window-id>`.
207
+ Also available directly: `gmux ask --window <window-id>`.
178
208
 
179
209
  ## 0.10.2
180
210
 
@@ -200,7 +230,7 @@ halved.
200
230
  A pane running a *fresh* session (no session id on its command line) fell back to
201
231
  "newest session in this directory" — which is whatever another pane is actively
202
232
  working on, so its summary got copied onto the fresh one, especially across
203
- windows. Panes are now resolved together: an exact match (a `gm run` link or a
233
+ windows. Panes are now resolved together: an exact match (a `gmux run` link or a
204
234
  session id read from the agent's argv) claims its session, and no heuristic pane
205
235
  may pick a session another pane already owns.
206
236
 
@@ -219,7 +249,7 @@ session:
219
249
  - **summary** — new: a paragraph or two that actually reorients you, tracing how
220
250
  the work evolved and where it stands.
221
251
 
222
- `ctrl-g` (and `gm show`) render all three — headline, overview, then the
252
+ `ctrl-g` (and `gmux show`) render all three — headline, overview, then the
223
253
  drilldown — above the recent/open/next status. The label stays the one-liner;
224
254
  the drilldown is one keypress away.
225
255
 
@@ -232,24 +262,24 @@ the drilldown is one keypress away.
232
262
 
233
263
  ## 0.9.0
234
264
 
235
- gigamanage becomes what it was always meant to be: **a background agent that
265
+ gmux becomes what it was always meant to be: **a background agent that
236
266
  keeps you up to date on your agents' latest work.**
237
267
 
238
- **Upgrading:** re-run `gm tmux install` (or, on Oh My Tmux, keep the `Alt-g` line
268
+ **Upgrading:** re-run `gmux tmux install` (or, on Oh My Tmux, keep the `Alt-g` line
239
269
  in `~/.tmux.conf.local`) and reload. `Alt-g` now toggles a live service rather
240
270
  than painting labels once. Nothing else changes.
241
271
 
242
272
  ### `Alt-g` runs a live label agent
243
273
 
244
- `Alt-g` starts a single, lightweight background service (`gm watch`) that every
274
+ `Alt-g` starts a single, lightweight background service (`gmux watch`) that every
245
275
  few seconds resolves every agent pane across all your windows and keeps its
246
276
  border label current — the session's headline, where the pane is, with the
247
277
  content still visible. A pane whose summary is being regenerated shows
248
- `gm summaries loading…` until it lands. `Alt-g` again stops it. `ctrl-g` is still
278
+ `gmux summaries loading…` until it lands. `Alt-g` again stops it. `ctrl-g` is still
249
279
  the full card when you want the detail; the two share one continuously-maintained
250
280
  cache, so the popup opens already current.
251
281
 
252
- You can also drive it directly: `gm watch` starts it, `gm watch --stop` stops it.
282
+ You can also drive it directly: `gmux watch` starts it, `gmux watch --stop` stops it.
253
283
 
254
284
  ### Summaries refresh when work *diverges*, not on every keystroke
255
285
 
@@ -259,8 +289,8 @@ characters, fixed size however long the session grows), and a session is
259
289
  re-summarised only when that fingerprint has drifted past a threshold — with a
260
290
  safety net: a new tool failure, a flip to ended-mid-task, or a change in the
261
291
  files touched always refreshes, so a small-but-important change is never slept
262
- through. Tune the threshold with `GIGAMANAGE_REFRESH_DISTANCE`; the loop interval
263
- with `GIGAMANAGE_WATCH_INTERVAL_MS`.
292
+ through. Tune the threshold with `GMUX_REFRESH_DISTANCE`; the loop interval
293
+ with `GMUX_WATCH_INTERVAL_MS`.
264
294
 
265
295
  ## 0.8.2
266
296
 
@@ -283,7 +313,7 @@ rather than wrapped — press `ctrl-g` for the full card when you need it.
283
313
 
284
314
  ### Resolving a pane skips a needless `lsof`
285
315
 
286
- `gm tmux label` and the `ctrl-g` overlay read each pane's agent process to find
316
+ `gmux tmux label` and the `ctrl-g` overlay read each pane's agent process to find
287
317
  its session. When the agent's command line already carries the session id (a
288
318
  resumed session — the common case), the id is exact and the process's working
289
319
  directory is never needed — but 0.8.0 looked it up anyway (`lsof` on macOS,
@@ -292,7 +322,7 @@ a window of resumed agents no longer pays for a directory lookup per pane.
292
322
 
293
323
  ## 0.8.0
294
324
 
295
- **Upgrading:** re-run `gm tmux install` to pick up the new `Alt-g` binding, and
325
+ **Upgrading:** re-run `gmux tmux install` to pick up the new `Alt-g` binding, and
296
326
  reload with `tmux source-file ~/.tmux.conf`. Everything is additive; nothing you
297
327
  rely on changes.
298
328
 
@@ -300,11 +330,11 @@ rely on changes.
300
330
 
301
331
  The overlay used to map a pane to a session by matching the pane's working
302
332
  directory — but that's the *shell's* directory, usually `~`, not the agent's, so
303
- panes resolved to the wrong session or to nothing. gigamanage now reads the pane's
333
+ panes resolved to the wrong session or to nothing. gmux now reads the pane's
304
334
  own process: the agent's command line carries the session id verbatim (`codex
305
335
  resume <id>`, `claude --resume <id>`), and that id *is* the session. Where there's
306
336
  no id on the line (a fresh session), it uses the agent process's real working
307
- directory instead of the shell's. No `gm run`, no setup — it just reads what's
337
+ directory instead of the shell's. No `gmux run`, no setup — it just reads what's
308
338
  already there.
309
339
 
310
340
  ### A label on every pane's border
@@ -313,7 +343,7 @@ already there.
313
343
  headline, right where the pane is — while the pane content stays fully visible. It
314
344
  answers "what is each of these agents doing?" without taking over the screen; the
315
345
  `ctrl-g` full-card popup is still there when you want the detail. The label is
316
- stored in a pane-local option gigamanage owns, so a running agent's own title
346
+ stored in a pane-local option gmux owns, so a running agent's own title
317
347
  updates can't clobber it.
318
348
 
319
349
  ### The peek does less work
@@ -330,13 +360,13 @@ made it usable in practice.
330
360
 
331
361
  ### The `ctrl-g` binding now actually opens the overlay
332
362
 
333
- `gm tmux install` wrote `gm overlay #{window_id}`, but tmux does not expand that
363
+ `gmux tmux install` wrote `gmux overlay #{window_id}`, but tmux does not expand that
334
364
  format inside `display-popup -E` — so the shell saw the `#` and treated the rest
335
- of the line as a comment, and `gm overlay` ran with no window argument. The
365
+ of the line as a comment, and `gmux overlay` ran with no window argument. The
336
366
  result was a popup that flashed and vanished. The binding now resolves the window
337
- id in-shell with `gm overlay "$(tmux display -p "#{window_id}")"`, which works
367
+ id in-shell with `gmux overlay "$(tmux display -p "#{window_id}")"`, which works
338
368
  whether or not tmux expands the format. If you installed 0.7.0's binding, re-run
339
- `gm tmux install` (or, on Oh My Tmux, replace the two lines in
369
+ `gmux tmux install` (or, on Oh My Tmux, replace the two lines in
340
370
  `~/.tmux.conf.local`) and reload with `tmux source-file ~/.tmux.conf`.
341
371
 
342
372
  ### Panes are framed, so cards read as separate
@@ -361,50 +391,50 @@ is what tells them apart.
361
391
  ## 0.7.0
362
392
 
363
393
  **Upgrading:** nothing changes unless you opt in. Everything below is additive and
364
- gated behind tmux; if you don't run `gm tmux install`, `gm` behaves exactly as it
394
+ gated behind tmux; if you don't run `gmux tmux install`, `gmux` behaves exactly as it
365
395
  did in 0.6.1. The overlay needs **tmux 3.2 or newer** (for `display-popup`), which
366
- `gm doctor` now checks for.
396
+ `gmux doctor` now checks for.
367
397
 
368
398
  ### Peek at every agent at once, from tmux
369
399
 
370
- Drive your agents in tmux and `gm` can now answer "what's happening in each of
371
- these panes?" without you switching into any of them. `gm tmux install` writes two
400
+ Drive your agents in tmux and `gmux` can now answer "what's happening in each of
401
+ these panes?" without you switching into any of them. `gmux tmux install` writes two
372
402
  key bindings to `~/.tmux.conf`:
373
403
 
374
404
  - **ctrl-g** peeks — every pane in the current window is overlaid *in place* with
375
405
  its summary card (what landed, what's still open, the next step, the `⚠`
376
406
  mid-task flag). Cards paint instantly from the cache and refresh in the
377
407
  background; any key dismisses the overlay and leaves your panes untouched.
378
- - **ctrl-shift-g** opens the `gm` picker in a popup, and Enter resumes your choice
408
+ - **ctrl-shift-g** opens the `gmux` picker in a popup, and Enter resumes your choice
379
409
  into a new tmux window — history and live panes, one keystroke apart.
380
410
 
381
411
  The overlay maps a pane to its session by working directory and recency. For an
382
412
  exact link — including resumed sessions that share a directory — launch through
383
- `gm run claude` / `gm run codex resume`: it attaches your terminal as usual and
413
+ `gmux run claude` / `gmux run codex resume`: it attaches your terminal as usual and
384
414
  records which pane the session runs in.
385
415
 
386
- `gm doctor` reports whether the overlay is available and, if not, why. tmux joins
416
+ `gmux doctor` reports whether the overlay is available and, if not, why. tmux joins
387
417
  ripgrep and fzf as an optional companion; nothing here is required.
388
418
 
389
419
  ## 0.6.1
390
420
 
391
421
  ### The chat/summary split is coloured now
392
422
 
393
- The picker's preview pane rendered monochrome — its stdout is a pipe, so gm's
423
+ The picker's preview pane rendered monochrome — its stdout is a pipe, so gmux's
394
424
  colour gated itself off, and even the `── ask ──` divider between the session
395
425
  card and the chat came out plain. fzf paints the preview with `--ansi`, though,
396
- so the seam can carry colour: the divider is now **cyan** (gm's own accent) and
397
- the `you` / `gm` speaker labels light up, while the card stays monochrome.
426
+ so the seam can carry colour: the divider is now **cyan** (gmux's own accent) and
427
+ the `you` / `gmux` speaker labels light up, while the card stays monochrome.
398
428
 
399
429
  It's an accent, not the message — the divider's glyphs and the speakers' layout
400
430
  still carry the structure, so `NO_COLOR` and `TERM=dumb` lose only the colour.
401
- `gm ls` and `gm show` are unchanged and still pipe clean.
431
+ `gmux ls` and `gmux show` are unchanged and still pipe clean.
402
432
 
403
433
  ## 0.6.0
404
434
 
405
435
  **Upgrading:** `ctrl-o` in the picker no longer suspends the list. It opens the
406
436
  chat in the preview pane instead, so the session you were reading stays on
407
- screen. Nothing else changes for you: bare `gm ask`, the `--json` form, and the
437
+ screen. Nothing else changes for you: bare `gmux ask`, the `--json` form, and the
408
438
  `fzf < 0.46` and no-fzf fallbacks all behave exactly as before.
409
439
 
410
440
  ### ctrl-o asks in the pane, not over the list
@@ -440,40 +470,40 @@ REPL, and the no-fzf numbered list keeps its `a` key.
440
470
 
441
471
  ## 0.5.0
442
472
 
443
- **Upgrading:** the first time you run `gm` in a terminal, it will ask you to
473
+ **Upgrading:** the first time you run `gmux` in a terminal, it will ask you to
444
474
  choose a harness before doing any model work. Nothing prompts when the output
445
- isn't a terminal, and `GIGAMANAGE_SUMMARY_CMD` still overrides everything — so
475
+ isn't a terminal, and `GMUX_SUMMARY_CMD` still overrides everything — so
446
476
  scripts, CI and agents are unaffected.
447
477
 
448
- ### gm asks who to call, once, instead of assuming
478
+ ### gmux asks who to call, once, instead of assuming
449
479
 
450
- The first time you run `gm` in a terminal it asks which harness should do its
480
+ The first time you run `gmux` in a terminal it asks which harness should do its
451
481
  model work — Claude Code, Codex, any command that reads a prompt on stdin, or
452
482
  nothing at all. Before, it assumed `claude -p` and started spending tokens in the
453
483
  background without ever mentioning it.
454
484
 
455
- Your answer lives in `~/.config/gigamanage/config.json`, and `gm setup` changes
456
- it. Choosing **nothing** is a real answer: `gm ls` and `gm show` still work on
485
+ Your answer lives in `~/.config/gmux/config.json`, and `gmux setup` changes
486
+ it. Choosing **nothing** is a real answer: `gmux ls` and `gmux show` still work on
457
487
  hard facts alone, and nothing calls a model.
458
488
 
459
489
  Nothing prompts unless there's a human at the other end. No TTY, `--json`, or an
460
- internal command means gm behaves exactly as it did before: autodetect and carry
461
- on. `GIGAMANAGE_SUMMARY_CMD` still overrides everything, so existing scripts and
490
+ internal command means gmux behaves exactly as it did before: autodetect and carry
491
+ on. `GMUX_SUMMARY_CMD` still overrides everything, so existing scripts and
462
492
  CI need no changes.
463
493
 
464
- ### gm ask
494
+ ### gmux ask
465
495
 
466
- `gm ls` answers "what was I doing?" one row at a time. **`gm ask`** answers the
496
+ `gmux ls` answers "what was I doing?" one row at a time. **`gmux ask`** answers the
467
497
  question that spans them:
468
498
 
469
499
  ```bash
470
- gm ask "what's still broken?"
471
- gm ask "what did I already try for the retry?" --json
500
+ gmux ask "what's still broken?"
501
+ gmux ask "what did I already try for the retry?" --json
472
502
  ```
473
503
 
474
504
  It starts from the summaries already on disk, so a question costs one model call
475
505
  rather than a scan of your transcripts. When the summaries aren't enough it runs
476
- `gm grep` against the real thing and reads what you actually said.
506
+ `gmux grep` against the real thing and reads what you actually said.
477
507
 
478
508
  **In the picker, `ctrl-o`** opens it on the session you're highlighting and drops
479
509
  you back in the list, right where you were, when you're done. Without fzf, the
@@ -484,7 +514,7 @@ Not `shift+f`: fzf's query line eats plain letters, so `F` would just type an
484
514
 
485
515
  ### The picker explains its markers
486
516
 
487
- `gm ls` printed a key for `⚠`, `◐` and `○`. The picker — bare `gm` — rendered the
517
+ `gmux ls` printed a key for `⚠`, `◐` and `○`. The picker — bare `gmux` — rendered the
488
518
  same three markers and explained none of them, which put the explanation exactly
489
519
  where you needed it least: `ls` is the command you run to read a list, and the
490
520
  picker is the one you run to *choose*. `⚠` is the whole point of the tool, and in
@@ -494,7 +524,7 @@ Both picker paths now carry a key: a second header line under fzf, and a line
494
524
  above the "install fzf" hint in the numbered fallback.
495
525
 
496
526
  It is deliberately static — every marker, always, and never a count — while
497
- `gm ls` keeps its counted one. fzf sets its header once, at spawn; ctrl-r
527
+ `gmux ls` keeps its counted one. fzf sets its header once, at spawn; ctrl-r
498
528
  replaces the list and leaves the header alone. Counts there would freeze at open
499
529
  and be wrong after the first refresh, which is precisely when they change. A key
500
530
  that is stale exactly when it matters is worse than no key at all.
@@ -512,26 +542,26 @@ that need one, without leaving the picker — so it's something you can navigate
512
542
  while an agent works alongside you. Without fzf, the numbered list takes `r` for
513
543
  the same thing.
514
544
 
515
- Repeated presses are safe. The lock that already stopped five `gm ls` from
545
+ Repeated presses are safe. The lock that already stopped five `gmux ls` from
516
546
  starting five summarizers stops this too: a press while a pass is running just
517
547
  reloads. Sessions whose summary is already current are never rewritten, so ctrl-r
518
548
  on a fresh list costs nothing.
519
549
 
520
- ### Bare `gm` summarizes what it shows
550
+ ### Bare `gmux` summarizes what it shows
521
551
 
522
- Only `gm ls` kicked off a background pass; the picker never did. It does now,
552
+ Only `gmux ls` kicked off a background pass; the picker never did. It does now,
523
553
  over the sessions it is about to offer, and rows being written are marked `◐`
524
- there as well as in `gm ls`.
554
+ there as well as in `gmux ls`.
525
555
 
526
556
  ### Fixed: `--no-auto-summarize` never worked
527
557
 
528
- `gm --no-auto-summarize ls` spent tokens anyway. The flag is declared on the root
558
+ `gmux --no-auto-summarize ls` spent tokens anyway. The flag is declared on the root
529
559
  command, and commander does not copy root options into a subcommand's own
530
560
  options — so the check read `undefined`, compared it against `false`, and
531
- concluded you wanted summaries. Only `GIGAMANAGE_AUTO_SUMMARIZE=0` actually
561
+ concluded you wanted summaries. Only `GMUX_AUTO_SUMMARIZE=0` actually
532
562
  turned them off.
533
563
 
534
- The flag now works, on `gm ls` and in the picker, and it is carried across to the
564
+ The flag now works, on `gmux ls` and in the picker, and it is carried across to the
535
565
  process ctrl-r starts.
536
566
 
537
567
  ### Shorter headlines
@@ -543,19 +573,19 @@ are now one scannable clause, sized to the column they live in.
543
573
  The summary cache key covers the prompt as well as the session, so this reaches
544
574
  summaries already on disk: they regenerate in the background on first run rather
545
575
  than keeping their old headlines forever. That costs a pass of model calls once.
546
- `GIGAMANAGE_AUTO_SUMMARIZE=0` still opts out of all of it.
576
+ `GMUX_AUTO_SUMMARIZE=0` still opts out of all of it.
547
577
 
548
578
  ## 0.3.0
549
579
 
550
580
  ### Summaries keep up with what you actually look at
551
581
 
552
- The background pass used to cover a fixed **10** sessions while `gm ls` displayed
582
+ The background pass used to cover a fixed **10** sessions while `gmux ls` displayed
553
583
  **20** — so the bottom half of the default view was permanently marked "no summary
554
584
  yet", and the feature looked broken even though it was working exactly as built.
555
585
 
556
- The window now follows the list: `gm ls` keeps 20 summarized, `gm ls -n 50` keeps
586
+ The window now follows the list: `gmux ls` keeps 20 summarized, `gmux ls -n 50` keeps
557
587
  all fifty. Summaries are written **8 at a time** in parallel (tune with
558
- `GIGAMANAGE_SUMMARY_CONCURRENCY`), and a single pass writes at most 50, saying so
588
+ `GMUX_SUMMARY_CONCURRENCY`), and a single pass writes at most 50, saying so
559
589
  rather than truncating in silence.
560
590
 
561
591
  ### You can see it working
@@ -568,7 +598,7 @@ is true on the very run that starts the work.
568
598
 
569
599
  The worker's stdio is discarded, so a broken provider used to mean summaries
570
600
  simply never appeared, with nothing to look at. Failures now land in
571
- `~/.cache/gigamanage/auto-summarize.log`, and `gm doctor` surfaces the last one.
601
+ `~/.cache/gmux/auto-summarize.log`, and `gmux doctor` surfaces the last one.
572
602
 
573
603
  **Fixed:** the worker could silently write **zero** summaries. It resolved its
574
604
  queue by loading "the N most recent sessions" and filtering — but with sidechains
@@ -585,14 +615,14 @@ installed) wraps as well.
585
615
 
586
616
  ## 0.2.0
587
617
 
588
- **gigamanage now spends tokens on your behalf unless you tell it not to.** That is a
618
+ **gmux now spends tokens on your behalf unless you tell it not to.** That is a
589
619
  change of default behavior, which is why this is a minor bump rather than a patch —
590
620
  everything in it already shipped as 0.1.3/0.1.4, but the version number was
591
621
  under-selling it.
592
622
 
593
623
  ### Summaries write themselves
594
624
 
595
- Any `gm` command now checks the 10 most recent sessions and, if any lack a current
625
+ Any `gmux` command now checks the 10 most recent sessions and, if any lack a current
596
626
  summary, writes them in a **detached background process**. The foreground command
597
627
  never waits on a model: it prints, tells you on stderr what it started, and exits.
598
628
  Summaries appear on your next run. Rows still waiting are marked `○`.
@@ -600,36 +630,36 @@ Summaries appear on your next run. Rows still waiting are marked `○`.
600
630
  Three things this deliberately does not do:
601
631
 
602
632
  - **Block.** A summary costs ~8s of model time. Ten of those inline would turn a
603
- 60ms `gm ls` into a minute of waiting.
604
- - **Stampede.** A lock in `~/.cache/gigamanage` means five `gm ls` in a row start
633
+ 60ms `gmux ls` into a minute of waiting.
634
+ - **Stampede.** A lock in `~/.cache/gmux` means five `gmux ls` in a row start
605
635
  one summarizer, not five.
606
636
  - **Loop.** The summarizer *is* `claude -p`, which writes a session of its own.
607
- Automated runs and sidechains are excluded from the target set, so gigamanage
637
+ Automated runs and sidechains are excluded from the target set, so gmux
608
638
  cannot summarize its own summarizer forever.
609
639
 
610
640
  **Turning it off**, because background model calls cost money:
611
641
 
612
642
  ```bash
613
- gm --no-auto-summarize ls # once
614
- export GIGAMANAGE_AUTO_SUMMARIZE=0 # for good
643
+ gmux --no-auto-summarize ls # once
644
+ export GMUX_AUTO_SUMMARIZE=0 # for good
615
645
  ```
616
646
 
617
647
  It also stays quiet when no summary provider is installed — a missing `claude`
618
- never breaks a read command. `gm doctor` reports the current state.
648
+ never breaks a read command. `gmux doctor` reports the current state.
619
649
 
620
- ### `gm ls` wraps instead of truncating
650
+ ### `gmux ls` wraps instead of truncating
621
651
 
622
652
  Long descriptions were cut off at 72 characters, so the sessions with the most
623
653
  informative summaries were exactly the ones you could not read. They now wrap to the
624
654
  terminal, with continuation lines indented under the description column.
625
655
 
626
- Piped output still emits **one line per session**, untruncated, so `gm ls | grep`
656
+ Piped output still emits **one line per session**, untruncated, so `gmux ls | grep`
627
657
  behaves. The fzf picker's rows stay single-line, because fzf maps lines back to
628
658
  session ids.
629
659
 
630
660
  ## 0.1.2
631
661
 
632
- - `gm --version` reported a hardcoded `0.1.0` regardless of the installed version.
662
+ - `gmux --version` reported a hardcoded `0.1.0` regardless of the installed version.
633
663
  It now reads `package.json`.
634
664
 
635
665
  ## 0.1.1
@@ -648,7 +678,7 @@ First release.
648
678
  the *tail* of each transcript, because a harness's own title is written in the
649
679
  first few seconds and never revised.
650
680
  - Sessions that ended mid-task are flagged `⚠`.
651
- - `gm resume` hands off to the right CLI (`claude --resume` / `codex resume`) in the
681
+ - `gmux resume` hands off to the right CLI (`claude --resume` / `codex resume`) in the
652
682
  session's original directory.
653
683
  - `--json` on every read command, so agents can call it too.
654
684
  - Read-only: never writes to a session file.