projmux 0.8.3 → 0.9.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.
- package/README-ko.md +2 -2
- package/README.md +6 -5
- package/docs/agent-workflow.md +25 -15
- package/docs/ai-agent-shortcuts.md +25 -0
- package/docs/architecture.md +30 -8
- package/docs/cli.md +243 -74
- package/docs/configuration.md +71 -11
- package/docs/globalization.md +1 -1
- package/docs/hooks.md +68 -25
- package/docs/install.md +2 -2
- package/docs/keybindings.md +22 -15
- package/docs/native-picker-no-fzf-poc.md +5 -5
- package/docs/native-picker-parity.md +7 -5
- package/docs/notify-queue.md +4 -3
- package/docs/npm-distribution.md +2 -2
- package/docs/operational-diagnostics.md +80 -0
- package/docs/resource-attribution.md +132 -0
- package/docs/session-restore.md +31 -6
- package/docs/settings-ia.md +54 -14
- package/docs/statusbar.md +24 -6
- package/docs/testing.md +1 -1
- package/docs/tmux-surface-inventory.md +108 -774
- package/docs/usage-tracking.md +47 -28
- package/package.json +5 -5
package/docs/cli.md
CHANGED
|
@@ -23,7 +23,8 @@ projmux <command> [args...]
|
|
|
23
23
|
| `attention` | View and manage live tmux pane attention state. |
|
|
24
24
|
| `attach` | Open tmux lifecycle entry helpers. |
|
|
25
25
|
| `current` | Resolve the active tmux pane path. |
|
|
26
|
-
| `doctor` |
|
|
26
|
+
| `doctor` | Run read-only runtime and integration diagnostics. |
|
|
27
|
+
| `diagnostics` | Read the private bounded operational event log. |
|
|
27
28
|
| `focus` | Switch the active client to a session/window/pane target. |
|
|
28
29
|
| `init` | Preview or apply supported terminal key delivery mappings. |
|
|
29
30
|
| `kill` | Terminate tagged tmux sessions. |
|
|
@@ -32,6 +33,7 @@ projmux <command> [args...]
|
|
|
32
33
|
| `preview` | Manage persisted tmux preview selection. |
|
|
33
34
|
| `prune` | Trim stale tmux lifecycle state and inspect preserved session snapshots. |
|
|
34
35
|
| `quit` | Quit the app-owned projmux tmux runtime. |
|
|
36
|
+
| `resources` | Inspect live Linux/tmux Project → Window → Pane CPU/RSS attribution. |
|
|
35
37
|
| `sessions` | Pick and open an existing tmux session. |
|
|
36
38
|
| `session-popup` | Read tmux popup preview state. |
|
|
37
39
|
| `settings` | Configure projmux. |
|
|
@@ -45,7 +47,7 @@ projmux <command> [args...]
|
|
|
45
47
|
| `update` | Check installer-aware GitHub release update status. |
|
|
46
48
|
| `upgrade` | Self-update via `go install`. |
|
|
47
49
|
| `welcome` | Print the shell onboarding guide again. |
|
|
48
|
-
| `usage` | Report AI
|
|
50
|
+
| `usage` | Report AI usage across fixed windows, context, and named quota buckets. |
|
|
49
51
|
| `version` | Print the current version. |
|
|
50
52
|
|
|
51
53
|
## switch
|
|
@@ -63,7 +65,9 @@ sub-verbs are entry hooks invoked by tmux keybindings (e.g.
|
|
|
63
65
|
the active session in sync).
|
|
64
66
|
|
|
65
67
|
Settings > Labs remains available for experimental settings, but picker backend
|
|
66
|
-
selection
|
|
68
|
+
selection/source rows have been retired. The native picker is always used;
|
|
69
|
+
legacy `PROJMUX_PICKER_BACKEND` and `picker-backend` values remain read-compatible
|
|
70
|
+
and normalize to native.
|
|
67
71
|
|
|
68
72
|
## setup
|
|
69
73
|
|
|
@@ -81,31 +85,35 @@ key map. Default `--timeout` is `5s`. Run it outside tmux after trying
|
|
|
81
85
|
Settings > Keybindings edits in-app action aliases; terminal delivery
|
|
82
86
|
diagnostics stay in this CLI flow.
|
|
83
87
|
|
|
84
|
-
##
|
|
88
|
+
## setup terminal
|
|
85
89
|
|
|
86
90
|
```
|
|
87
|
-
projmux
|
|
88
|
-
|
|
91
|
+
projmux setup terminal [terminal] [--apply] [--config <path>]
|
|
92
|
+
[--allow-symlink]
|
|
89
93
|
```
|
|
90
94
|
|
|
91
95
|
Previews or applies terminal-specific key delivery mappings for supported
|
|
92
96
|
terminals when `projmux setup` reports swallowed shortcuts. When `terminal` is
|
|
93
97
|
omitted, autodetects from `$TERM_PROGRAM`/`$TERMINAL_EMULATOR`.
|
|
94
|
-
Known terminals: `ghostty`, `windows-terminal`. Default is
|
|
95
|
-
`--apply` to write (timestamped `.bak.<timestamp>` is created). Refuses to
|
|
98
|
+
Known terminals: `ghostty`, `windows-terminal`. Default is a read-only
|
|
99
|
+
preview; pass `--apply` to write (timestamped `.bak.<timestamp>` is created). Refuses to
|
|
96
100
|
write through a symlink unless `--allow-symlink` is passed (dotfiles repos).
|
|
97
101
|
`--config <path>` overrides the candidate list when the adapter has more
|
|
98
102
|
than one default location (Ghostty `config` vs `config.ghostty`). If setup
|
|
99
|
-
shows every key arriving, skip
|
|
103
|
+
shows every key arriving, skip terminal remediation.
|
|
104
|
+
|
|
105
|
+
The top-level `projmux init` command remains a deprecated compatibility alias
|
|
106
|
+
during the migration period. It prints the exact `projmux setup terminal`
|
|
107
|
+
replacement to stderr and still accepts the legacy `--dry-run` flag.
|
|
100
108
|
|
|
101
109
|
## doctor
|
|
102
110
|
|
|
103
111
|
```
|
|
104
112
|
projmux doctor [--json]
|
|
105
|
-
projmux doctor --install-missing [--dry-run] [--include-optional]
|
|
106
113
|
```
|
|
107
114
|
|
|
108
|
-
Runs a dependency check
|
|
115
|
+
Runs read-only diagnostics, including a dependency check for `tmux ≥ 3.4`,
|
|
116
|
+
`git`, `stty` (POSIX only), and
|
|
109
117
|
`kubectl` (optional), then reports read-only AI notify integration diagnostics
|
|
110
118
|
for Codex hooks, Claude Code hooks, and the tmux bell
|
|
111
119
|
fallback. AI notify integration statuses are `installed`, `missing`, or
|
|
@@ -115,23 +123,63 @@ diagnostics for saved agent panes, including `available`, `stale`, or
|
|
|
115
123
|
`unavailable` status plus confidence, source, updated-at, and the affected
|
|
116
124
|
snapshot/window/pane.
|
|
117
125
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
`--
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
126
|
+
Session State preview and doctor report the resume source captured on the pane.
|
|
127
|
+
Live `hook`/`session-id` metadata is high confidence; DB-validated Antigravity
|
|
128
|
+
`antigravity-last-conversation` and `antigravity-conversation-metadata` picker
|
|
129
|
+
sources are medium confidence; legacy `antigravity-history` is low confidence.
|
|
130
|
+
Disk discovery never lowers or overwrites an already captured live source.
|
|
131
|
+
|
|
132
|
+
The default plain report exits non-zero when a required dependency is missing
|
|
133
|
+
or stale, and exits `0` when only optional dependencies or AI notify
|
|
134
|
+
integrations are missing. `--json` preserves its current successful exit after
|
|
135
|
+
emitting the report even when a required dependency is missing or stale. It
|
|
136
|
+
emits a machine-readable object with `dependencies`,
|
|
137
|
+
`ai_notify_integrations`, and `session_state_resume`; the default is the human
|
|
138
|
+
report with suggested install commands per platform, AI integration
|
|
139
|
+
install/remove/dry-run commands, and Session State resume metadata health.
|
|
140
|
+
Users explicitly run any displayed install guidance or command outside doctor.
|
|
141
|
+
Doctor does not diagnose terminal key delivery; use `projmux setup` for that.
|
|
142
|
+
|
|
143
|
+
Compatibility notice: `--install-missing`, `--dry-run`, and
|
|
144
|
+
`--include-optional` are deprecated install flags. During the compatibility
|
|
145
|
+
period their install, preview, optional-dependency, output, and exit behavior
|
|
146
|
+
remain unchanged, and each invocation using one or more of them emits one
|
|
147
|
+
stderr warning. They cannot be combined with `--json`; `--dry-run` and
|
|
148
|
+
`--include-optional` still require `--install-missing`. These mutation paths
|
|
149
|
+
will be removed when doctor becomes read-only diagnostics only.
|
|
150
|
+
|
|
151
|
+
`Settings > Notifications > Delivery sources` shows active Codex, Claude, and
|
|
152
|
+
Antigravity hooks plus tmux statuses, conflicts, config paths, and
|
|
153
|
+
copyable AI integration commands where available. Its summary/detail also shows
|
|
154
|
+
whether `PROJMUX_NOTIFY_HOOK` overrides the built-in desktop sender. Settings
|
|
155
|
+
does not install or remove external Codex, Claude, Antigravity, or tmux notify
|
|
156
|
+
wiring. Pending in-app queue rows remain owned by the statusbar/sidebar rather
|
|
157
|
+
than a standalone Settings row.
|
|
158
|
+
|
|
159
|
+
## diagnostics
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
projmux diagnostics log [--tail N] [--json]
|
|
163
|
+
[--level info|error] [--component NAME] [--path]
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Reads the local operational event journal through the same tolerant JSONL
|
|
167
|
+
reader used by every output mode. The default text view shows the newest 50
|
|
168
|
+
valid records. `--tail N` changes that bound, `--json` emits the selected
|
|
169
|
+
records as JSONL, and `--level` / `--component` filter before tailing. `--path`
|
|
170
|
+
prints the resolved path without creating or reading the log.
|
|
171
|
+
|
|
172
|
+
Successful state-changing top-level commands produce one `info` outcome, and
|
|
173
|
+
every top-level command error produces one `error` outcome. Successful
|
|
174
|
+
high-frequency/read-only commands such as `status`, `ai ingest`, `attention
|
|
175
|
+
arm`/`clear`/`window`, `tmux autosave-session-state`, `window record`, and
|
|
176
|
+
successful `diagnostics log` views do not produce an event. Errors from those
|
|
177
|
+
automatic hook/poll paths still produce one safe `error` outcome. Successful
|
|
178
|
+
direct command help and explicit `--dry-run` preview modes also remain
|
|
179
|
+
read-only and do not produce an event. Journal failures are a best-effort side
|
|
180
|
+
channel and never change command output or exit status. See
|
|
181
|
+
[operational-diagnostics.md](operational-diagnostics.md) for the file,
|
|
182
|
+
retention, concurrency, and privacy contracts.
|
|
135
183
|
|
|
136
184
|
## focus
|
|
137
185
|
|
|
@@ -249,23 +297,51 @@ Authoritative AI token usage. See [usage-tracking.md](usage-tracking.md)
|
|
|
249
297
|
for adapter detail.
|
|
250
298
|
|
|
251
299
|
```
|
|
252
|
-
projmux usage [--model codex|claude|antigravity|all] [--window 5h|weekly|all]
|
|
300
|
+
projmux usage [--model codex|claude|antigravity|all] [--window 5h|weekly|context|quota|all]
|
|
253
301
|
[--json] [--force|-f]
|
|
254
302
|
```
|
|
255
303
|
|
|
256
|
-
Renders a tab-aligned `MODEL WINDOW PCT RESETS_AT STALE` table; appends a
|
|
304
|
+
Renders a tab-aligned `MODEL WINDOW PCT RESETS_AT RESET_IN STALE` table; appends a
|
|
257
305
|
backoff note when an adapter is in 429 cooldown. `--force` clears any
|
|
258
306
|
active backoff and bypasses the per-adapter throttle floor (Claude `5m`,
|
|
259
307
|
Codex shares the global `30s`). `--json` emits the snapshot array; when
|
|
260
308
|
backoff is active the wrapper `{snapshots, backoff}` object is emitted
|
|
261
309
|
instead.
|
|
262
310
|
|
|
263
|
-
Antigravity
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
311
|
+
Antigravity emits a conversation-local `context` row and separate official
|
|
312
|
+
account rows labelled `quota/<upstream bucket ID>`. `--window quota` selects
|
|
313
|
+
the latter; opaque IDs such as `weekly` are not aliases for the fixed
|
|
314
|
+
`weekly` window. Used percent is `100 * (1 - remaining_fraction)`.
|
|
315
|
+
`reset_time` and optional `reset_in_seconds` are preserved independently,
|
|
316
|
+
including the distinction between absent and explicit zero. Invalid,
|
|
317
|
+
disabled, missing, or empty quota data degrades without reinterpreting the
|
|
318
|
+
conversation context row.
|
|
319
|
+
|
|
320
|
+
## resources
|
|
321
|
+
|
|
322
|
+
```
|
|
323
|
+
projmux resources
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
Opens the native, read-only Resource Inspector. It samples only while this
|
|
327
|
+
interactive process is alive, paints `warming` immediately, then refreshes at
|
|
328
|
+
a non-overlapping two-second cadence. Enter drills Project → Window → Pane →
|
|
329
|
+
Pane detail; Esc or Alt-Left returns, and root Esc closes. Search matches the
|
|
330
|
+
current scope's display name and stable tmux id. Tab cycles CPU, Memory, and
|
|
331
|
+
Name sorting; Ctrl-R requests an immediate refresh. A plain `r` remains search
|
|
332
|
+
input.
|
|
333
|
+
|
|
334
|
+
CPU list values are host-capacity share; pane detail also shows
|
|
335
|
+
core-equivalent CPU. Memory is explicitly an RSS sum (shared pages can be
|
|
336
|
+
counted more than once) plus its host ratio. `Unassigned`,
|
|
337
|
+
`Shared / ambiguous`, and non-drillable `Other / unattributed` remain explicit,
|
|
338
|
+
as do warming, partial, unavailable, unknown, and overage states. No process
|
|
339
|
+
command list, mutation, history, graph, daemon, persistence, or Session State
|
|
340
|
+
telemetry is created. Linux/tmux provides attribution; unsupported platforms
|
|
341
|
+
show an unavailable reason rather than zero metrics.
|
|
342
|
+
|
|
343
|
+
This is distinct from `projmux status resources`, which remains the short
|
|
344
|
+
host-only statusbar renderer.
|
|
269
345
|
|
|
270
346
|
## status
|
|
271
347
|
|
|
@@ -289,18 +365,23 @@ projmux status resources
|
|
|
289
365
|
`~/.cache/tmux/kube-segment-<session>.txt` first (TTL governed by
|
|
290
366
|
`TMUX_KUBE_CACHE_TTL`, default `5s`). Picks up a per-session
|
|
291
367
|
`KUBECONFIG` from `${XDG_RUNTIME_DIR:-~/.cache}/kube-sessions/<session>.yaml`.
|
|
292
|
-
- `usage` — HUD-style `Claude (Nm) 5h [bar] N% · weekly [bar] N%
|
|
293
|
-
[bar] N% ·
|
|
368
|
+
- `usage` — HUD-style `Claude (Nm) 5h [bar] N% · weekly [bar] N% Antigravity
|
|
369
|
+
ctx [bar] N% · quota/<bucket> [bar] N%`. Degrades through six tiers as `--max-width`
|
|
294
370
|
shrinks. Triggers an opportunistic, throttled refresh (per-adapter
|
|
295
371
|
throttle, `30s` floor) so a stale cache self-heals.
|
|
296
372
|
- `notify` — newest-first HUD block with project, state, optional agent, text,
|
|
297
373
|
age, and `+<extras>`. Window/pane ids remain routable metadata but are not
|
|
298
374
|
displayed in the compact HUD. Degrades through width tiers; default
|
|
299
375
|
`--max-width` is `200` runes.
|
|
300
|
-
- `resources` — Linux/WSL aggregate `CPU N% MEM N
|
|
301
|
-
`/proc/
|
|
302
|
-
|
|
303
|
-
|
|
376
|
+
- `resources` — macOS/Linux/WSL aggregate `CPU N% MEM N%`. Linux uses
|
|
377
|
+
`/proc/stat` and `/proc/meminfo`; macOS uses native Mach host statistics.
|
|
378
|
+
CPU needs two invocations to establish a delta and renders `--` for the first
|
|
379
|
+
sample. CPU independently warns at 70–89% and becomes bold critical at 90% or
|
|
380
|
+
above; memory independently warns at 75–89% and becomes bold critical at 90%
|
|
381
|
+
or above. Normal and unavailable values use the secondary status-text role.
|
|
382
|
+
These values are host-scoped rather than pane/window/project/session
|
|
383
|
+
attribution. WSL reports the Linux guest/VM view. Unsupported platforms and
|
|
384
|
+
unreadable system metrics produce no error output.
|
|
304
385
|
|
|
305
386
|
## statusbar
|
|
306
387
|
|
|
@@ -351,7 +432,7 @@ supplied window.
|
|
|
351
432
|
## ai
|
|
352
433
|
|
|
353
434
|
```
|
|
354
|
-
projmux ai split [--agent <claude|codex|antigravity|shell|selective|resume>] [--force-agent] [right|down] [-- <extra-arg>...]
|
|
435
|
+
projmux ai split [--agent <claude|codex|antigravity|shell|selective|resume>] [--force-agent] [--print-pane-id] [right|down] [-- <extra-arg>...]
|
|
355
436
|
projmux ai picker [--inside] [--shell] [--resume] <right|down>
|
|
356
437
|
projmux ai settings
|
|
357
438
|
projmux ai status set <thinking|waiting|idle> [--pane <id>]
|
|
@@ -359,11 +440,12 @@ projmux ai notify <reset|notify> [--pane <id>]
|
|
|
359
440
|
projmux ai watch-title [--pane <id>]
|
|
360
441
|
projmux ai ingest codex-hook < payload.json
|
|
361
442
|
projmux ai ingest claude-hook < payload.json
|
|
362
|
-
projmux ai ingest antigravity-hook < payload.json
|
|
443
|
+
projmux ai ingest antigravity-hook [--event <PreInvocation|PostInvocation|PostToolUse|Stop|Statusline>] < payload.json
|
|
363
444
|
projmux ai ingest bell --pane <pane_id>
|
|
364
445
|
projmux ai ingest log [--tail N] [--json] [--path]
|
|
365
446
|
projmux ai integrate codex [--dry-run] [--remove]
|
|
366
447
|
projmux ai integrate claude [--dry-run] [--remove]
|
|
448
|
+
projmux ai integrate antigravity [--dry-run] [--remove]
|
|
367
449
|
projmux ai integrate tmux-bell [--dry-run] [--remove]
|
|
368
450
|
projmux ai topic ...
|
|
369
451
|
```
|
|
@@ -393,11 +475,41 @@ existing plain shell split. Arguments after `--` are extra arguments appended to
|
|
|
393
475
|
the resolved `claude`, `codex`, or `agy` executable inside the managed wrapper;
|
|
394
476
|
projmux still sets the context directory, tmux title, AI pane metadata, title
|
|
395
477
|
watcher, and split layout.
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
478
|
+
|
|
479
|
+
Automation callers can add `--print-pane-id` to an explicit direct
|
|
480
|
+
`--agent claude|codex|antigravity|shell` launch. On success, stdout contains
|
|
481
|
+
exactly the new `%N` pane id followed by one newline. The value comes directly
|
|
482
|
+
from tmux's existing
|
|
483
|
+
`split-window -P -F '#{pane_id}'` result. If tmux returns no valid pane id, the
|
|
484
|
+
command fails non-zero with tmux-specific guidance and writes no
|
|
485
|
+
success value. Without `--print-pane-id`, successful split invocations keep the
|
|
486
|
+
existing empty-stdout behavior.
|
|
487
|
+
|
|
488
|
+
`--print-pane-id` is not available for the saved default mode or for
|
|
489
|
+
`--agent selective|resume`, because those paths may open a picker and launch
|
|
490
|
+
only after a later user selection. Those combinations fail before opening a
|
|
491
|
+
picker or creating a pane. Arguments after `--` keep their existing argv-tail
|
|
492
|
+
meaning when the flag is used with a concrete AI agent.
|
|
493
|
+
The resume picker lists the newest deduplicated Claude, Codex, and Antigravity
|
|
494
|
+
resume sessions for the current project, with `[+ New Session]` pinned first.
|
|
495
|
+
If there are no resume sessions it goes straight to the existing selective
|
|
496
|
+
picker. Selecting a row directly starts `claude --resume <id>`,
|
|
497
|
+
`codex resume <id>`, or `agy --conversation <uuid>`.
|
|
498
|
+
|
|
499
|
+
Live Antigravity hook/session-state resume metadata remains a separate,
|
|
500
|
+
high-confidence lane; it is not enumerated from disk by the picker. Within the
|
|
501
|
+
picker's disk discovery, source order is the workspace-to-latest-UUID mapping
|
|
502
|
+
in `cache/last_conversations.json`, workspace-bearing summarized rows in
|
|
503
|
+
`cache/conversation_metadata.json`, then legacy `history.jsonl`. The two cache
|
|
504
|
+
sources require a normalized UUID and an exact regular
|
|
505
|
+
`conversations/<uuid>.db`; only DB existence and mtime are read. SQLite content,
|
|
506
|
+
prompt/transcript text, sidecars, symlinks, and arbitrary paths are never used.
|
|
507
|
+
The cache is only the history floor exposed by upstream v1.1.12, not a complete
|
|
508
|
+
conversation history. Cache rows have medium confidence and blank turns;
|
|
509
|
+
`last_conversations` uses a short UUID title, while metadata uses only a safe
|
|
510
|
+
summary. Legacy history is low confidence. Missing/malformed cache, stale
|
|
511
|
+
missing-DB mappings, workspace-less metadata, and unknown fields degrade
|
|
512
|
+
without failing Claude/Codex or legacy discovery.
|
|
401
513
|
Settings > AI Settings > Enabled agents controls Claude/Codex/Antigravity launch
|
|
402
514
|
visibility. Disabled agents are hidden from the selective picker and from the
|
|
403
515
|
default-mode picker. A saved default that later becomes disabled fails clearly
|
|
@@ -466,27 +578,75 @@ precedence over catalog `action` for known Claude events too; for example a
|
|
|
466
578
|
noisy notify event can be made state-only or quiet without changing installed
|
|
467
579
|
Claude hook commands.
|
|
468
580
|
|
|
469
|
-
`ingest antigravity-hook` is the
|
|
470
|
-
Antigravity CLI `agy` payloads
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
`
|
|
478
|
-
|
|
479
|
-
`
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
581
|
+
`ingest antigravity-hook` is the hook/statusline entrypoint for
|
|
582
|
+
Antigravity CLI `agy` payloads. Official v1.1.12 hook commands must pass their
|
|
583
|
+
event identity explicitly, for example
|
|
584
|
+
`projmux ai ingest antigravity-hook --event Stop`; the official stdin payload
|
|
585
|
+
does not carry an event field. The explicit selector is authoritative, while
|
|
586
|
+
payload `eventName` and its legacy aliases remain fallback inputs for existing
|
|
587
|
+
manual wiring. `projmux ai integrate antigravity` manages exactly the named
|
|
588
|
+
`projmux` entry in `~/.gemini/config/hooks.json` and, separately, exactly the
|
|
589
|
+
`statusLine` member in `~/.gemini/antigravity-cli/settings.json`. The managed
|
|
590
|
+
statusline uses the official v1.1.12 `{type:"command", enabled:true,
|
|
591
|
+
stack_with_default:true}` shape and an absolute direct ingest command whose
|
|
592
|
+
stdout is empty, so the built-in statusline remains visible. It preserves every
|
|
593
|
+
other named entry and unknown JSON value, resolves the running projmux
|
|
594
|
+
executable to a stable absolute path, and supports `--dry-run` and `--remove`.
|
|
595
|
+
An existing unmanaged custom `statusLine` is an actionable conflict and is
|
|
596
|
+
never chained, wrapped, or rewritten. An existing
|
|
597
|
+
unmanaged `projmux` entry, another Antigravity projmux ingest command, malformed
|
|
598
|
+
JSON, symlinks, and read/write permission failures are reported without
|
|
599
|
+
rewriting the file. Doctor and Settings also report a managed entry as `stale`
|
|
600
|
+
when its absolute executable, event/schema wiring, or stdout fallback differs
|
|
601
|
+
from the current plan; the displayed install command refreshes it.
|
|
602
|
+
|
|
603
|
+
The embedded v1.1.12 catalog contains the five official events `PreToolUse`,
|
|
604
|
+
`PostToolUse`, `PreInvocation`, `PostInvocation`, and `Stop`. The managed entry
|
|
605
|
+
installs `PreInvocation`, `PostInvocation`, `PostToolUse`, and `Stop`, each with
|
|
606
|
+
an explicit `--event`; `PreToolUse` remains disabled because its response can
|
|
607
|
+
change permission policy. `Statusline` remains an explicit statusline selector
|
|
608
|
+
outside that official hook catalog.
|
|
609
|
+
|
|
610
|
+
`PreInvocation` moves the matched pane to thinking/busy without notifying.
|
|
611
|
+
`PostInvocation` and `PostToolUse` remain quiet bookkeeping paths, with tool
|
|
612
|
+
errors retained in ingest diagnostics. `Stop` keeps the completion/error notify
|
|
613
|
+
classification. Hook stdout is `{}` for the three non-Stop managed events and
|
|
614
|
+
`{"decision":"stop"}` for Stop, including a shell fallback if ingest fails, so
|
|
615
|
+
the hook cannot force continuation or synthesize a permission decision.
|
|
616
|
+
Official statusline `agent_state` values `thinking`, `working`, and `tool_use`
|
|
617
|
+
map to thinking/busy unless the pane already holds a terminal completion or
|
|
618
|
+
approval state; this prevents a late statusline refresh from regressing `Stop`.
|
|
619
|
+
A new `PreInvocation` resets the pane to thinking for the next generation.
|
|
620
|
+
`idle` is quiet and does not clear an existing completion or approval state.
|
|
621
|
+
`tool_confirmation_pending=true` produces a stable-ID,
|
|
622
|
+
deduped approval-required row; false never produces a notification.
|
|
623
|
+
|
|
624
|
+
The managed JSON is the install source of truth. The command
|
|
625
|
+
`agy -p '/hooks' --output-format json` is a read-only runtime diagnostic for
|
|
626
|
+
confirming loaded event names and sources; projmux never uses `/hooks` output
|
|
627
|
+
to rewrite `hooks.json`.
|
|
628
|
+
|
|
629
|
+
`workspacePaths` uses the first non-empty path as a cwd matching candidate;
|
|
630
|
+
an absent or empty array does not invent a cwd. Inherited `$TMUX_PANE` remains
|
|
631
|
+
the first pane attribution source. A Stop with non-empty `error`, explicit
|
|
632
|
+
`ERROR`, or a `MAX_STEPS_EXCEEDED` family reason pushes a critical error row.
|
|
633
|
+
`NO_TOOL_CALL`, `MODEL_STOP`, and known normal reasons push an info completion;
|
|
634
|
+
unknown reasons remain info completions with diagnostic metadata rather than
|
|
635
|
+
being promoted to critical. Official camelCase fields retained by the parser
|
|
636
|
+
also include `artifactDirectoryPath`, `modelName`, `invocationNum`,
|
|
637
|
+
`initialNumSteps`, `toolCall`, `stepIdx`, `executionNum`, and `fullyIdle`.
|
|
483
638
|
Antigravity notify metadata uses `agent=antigravity`. Phase 3 session-state
|
|
484
639
|
restore is included: Antigravity ingest stores `conversationId` as pane thread
|
|
485
640
|
metadata for matching and as session-state resume metadata. Restore uses
|
|
486
641
|
`agy --conversation <uuid>` when that id is present and UUID-shaped; otherwise
|
|
487
|
-
session-state preview/doctor render `resume unavailable`.
|
|
488
|
-
`context_window`
|
|
489
|
-
as
|
|
642
|
+
session-state preview/doctor render `resume unavailable`. Structured statusline
|
|
643
|
+
`context_window.used_percentage` is persisted with its conversation id and
|
|
644
|
+
surfaced by the usage HUD as the separate `context` row. The official `quota`
|
|
645
|
+
map is persisted independently and surfaces each valid entry as
|
|
646
|
+
`quota/<exact bucket ID>` with independently retained absolute and relative
|
|
647
|
+
reset values. Bucket IDs are never mapped to `5h`/`weekly`, and account quota
|
|
648
|
+
is never inferred from the conversation-local gauge.
|
|
649
|
+
The earlier string percentage form remains a compatibility fallback.
|
|
490
650
|
Transcript contents are not read.
|
|
491
651
|
|
|
492
652
|
`ingest bell --pane <pane_id>` is the narrow tmux-bell fallback ingest path.
|
|
@@ -663,7 +823,7 @@ projmux tmux popup-switch
|
|
|
663
823
|
projmux tmux popup-sessions
|
|
664
824
|
projmux tmux popup-preview <session>
|
|
665
825
|
projmux tmux rebalance-panes
|
|
666
|
-
projmux tmux rename-pane <pane> <
|
|
826
|
+
projmux tmux rename-pane <pane> <label>
|
|
667
827
|
projmux tmux print-config [--bin <path>]
|
|
668
828
|
projmux tmux print-app-config [--bin <path>]
|
|
669
829
|
projmux tmux install [--bin <path>] [--config <path>] [--include <path>]
|
|
@@ -674,9 +834,14 @@ projmux tmux apply
|
|
|
674
834
|
Helpers tmux's keybindings and the install pipeline call into. Modes
|
|
675
835
|
accepted by `popup-toggle` mirror the historical sessionizer surface:
|
|
676
836
|
`session-popup`, `sessionizer`, `sessionizer-sidebar`,
|
|
677
|
-
`notify-sidebar`, `recent-windows`, `ai-split-picker-right`,
|
|
837
|
+
`notify-sidebar`, `recent-windows`, `resource-inspector`, `ai-split-picker-right`,
|
|
678
838
|
`ai-split-picker-down`, `ai-split-resume-right`, `ai-split-resume-down`,
|
|
679
839
|
`ai-split-settings`.
|
|
840
|
+
`rename-pane` sets only the pane-scoped user label
|
|
841
|
+
`@projmux_pane_label`; an empty label clears the option. It does not change the
|
|
842
|
+
raw tmux pane title, AI topic, or AI topic manual-ownership flag. The canonical
|
|
843
|
+
keybinding action id is `rename-pane-label`; `rename-pane-topic` remains a
|
|
844
|
+
deprecated label-only keymap alias for one compatibility period.
|
|
680
845
|
`apply` regenerates the app tmux config and reloads the live `-L projmux`
|
|
681
846
|
server without restarting it. `make install` and `projmux upgrade` invoke it
|
|
682
847
|
after replacing the binary. Settings > Keybindings normally runs the same
|
|
@@ -817,8 +982,13 @@ flags with the top-level `switch` UX:
|
|
|
817
982
|
regenerates the app config, and reloads the running tmux session when
|
|
818
983
|
possible; skipped or failed stages show `projmux tmux apply` as the recovery
|
|
819
984
|
or sync command. Terminal diagnostics and terminal mapping application stay
|
|
820
|
-
in the `projmux shell` -> `projmux setup` -> `projmux
|
|
821
|
-
|
|
985
|
+
in the `projmux shell` -> `projmux setup` -> `projmux setup terminal`
|
|
986
|
+
remediation path.
|
|
987
|
+
The compact About section contains Version, Source, real update
|
|
988
|
+
status/actions, Welcome, and Quit. It does not duplicate static setup or
|
|
989
|
+
diagnostics guides: use `projmux setup` for key-delivery diagnosis,
|
|
990
|
+
`projmux setup terminal` for supported terminal remediation, and the
|
|
991
|
+
read-only `projmux doctor` report for dependency/runtime diagnostics. In Project
|
|
822
992
|
Picker, `Project Root` manages the saved
|
|
823
993
|
primary root (`~/.config/projmux/projdir`) and displays whether the effective
|
|
824
994
|
value comes from `PROJMUX_PROJDIR`, tmux `@projmux_projdir`, saved config, or
|
|
@@ -833,10 +1003,9 @@ flags with the top-level `switch` UX:
|
|
|
833
1003
|
selecting Check Updates runs `projmux update check`, Update Now runs
|
|
834
1004
|
`projmux update apply`, and Welcome opens a Settings-native viewer
|
|
835
1005
|
independent of shell skip state. `Settings > About > Quit projmux` routes
|
|
836
|
-
through the same `projmux quit` action picker.
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
`doctor` for dependencies.
|
|
1006
|
+
through the same `projmux quit` action picker. Settings mutations surface
|
|
1007
|
+
their handled success/failure as a transient passive row inside the native
|
|
1008
|
+
popup; selecting the next action clears or replaces that row.
|
|
840
1009
|
|
|
841
1010
|
## See also
|
|
842
1011
|
|
package/docs/configuration.md
CHANGED
|
@@ -4,6 +4,24 @@ Most users can configure projmux from `projmux settings`. Environment variables
|
|
|
4
4
|
are available for repeatable shell setup, managed machines, or advanced
|
|
5
5
|
overrides.
|
|
6
6
|
|
|
7
|
+
## Operational diagnostics state
|
|
8
|
+
|
|
9
|
+
Projmux keeps a private bounded operational journal at:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
${XDG_STATE_HOME:-$HOME/.local/state}/projmux/logs/operations.jsonl
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
There is no configuration switch for arbitrary fields or remote delivery. The
|
|
16
|
+
`projmux` state and `logs` directories are created/repaired to mode `0700`, and
|
|
17
|
+
the JSONL file is created/repaired to `0600` on POSIX systems. At more than
|
|
18
|
+
5 MiB, the writer atomically retains about the newest 2 MiB of complete valid
|
|
19
|
+
records. Lock ownership is maintained by the OS and acquisition waits no more
|
|
20
|
+
than 200 ms before the best-effort write is abandoned. See
|
|
21
|
+
[operational-diagnostics.md](operational-diagnostics.md) for safe field and
|
|
22
|
+
best-effort behavior. Existing `ai-ingest.log` and
|
|
23
|
+
`PROJMUX_*_DEBUG` settings remain separate and unchanged.
|
|
24
|
+
|
|
7
25
|
## Project Discovery
|
|
8
26
|
|
|
9
27
|
`projmux switch` combines pinned directories, live tmux sessions, and
|
|
@@ -97,8 +115,8 @@ keybinding as saved; failures identify the stage that failed.
|
|
|
97
115
|
Raw sequences that cannot be safely represented as a direct keybinding are not
|
|
98
116
|
persisted. Use Settings to save a custom key. When key delivery needs
|
|
99
117
|
terminal-layer remediation, first try the key in `projmux shell`, then run
|
|
100
|
-
`projmux setup` from the raw terminal, then use `projmux
|
|
101
|
-
terminal adapters.
|
|
118
|
+
`projmux setup` from the raw terminal, then use `projmux setup terminal` for
|
|
119
|
+
supported terminal adapters.
|
|
102
120
|
|
|
103
121
|
`~/.config/projmux/keymap.toml` can also be edited by hand. When the file is
|
|
104
122
|
absent, generated tmux config stays on the built-in defaults.
|
|
@@ -114,6 +132,9 @@ keys = ["C-t"]
|
|
|
114
132
|
|
|
115
133
|
[bindings."Sidebar:PinProject"]
|
|
116
134
|
keys = ["M-p", "p"]
|
|
135
|
+
|
|
136
|
+
[bindings."Resources:Open"]
|
|
137
|
+
keys = ["M-u"]
|
|
117
138
|
```
|
|
118
139
|
|
|
119
140
|
Each table is `[bindings.<action-id>]`. Supported keys are:
|
|
@@ -150,6 +171,12 @@ such as `ProjectSidebarToggle`, `NotifySidebarToggle`, `SessionPopupToggle`,
|
|
|
150
171
|
popup commands use `Surface:Action` IDs and have surface-local conflict
|
|
151
172
|
domains and remain visible in Settings when catalogued.
|
|
152
173
|
|
|
174
|
+
`Resources:Open` is a user-configurable direct popup action with no built-in
|
|
175
|
+
shortcut. Every configured alias renders the canonical client-scoped body
|
|
176
|
+
`projmux tmux popup-toggle --client #{client_tty} resource-inspector`; pressing
|
|
177
|
+
the same alias again closes only that client's popup. It remains available on
|
|
178
|
+
Linux/tmux even when the Labs live-resource status segment is off.
|
|
179
|
+
|
|
153
180
|
The Settings writer is deterministic and rewrites the supported saved subset
|
|
154
181
|
only. If the existing file has parse errors or unknown action IDs, Settings
|
|
155
182
|
shows the keymap error row and refuses to overwrite it until the file is fixed.
|
|
@@ -159,8 +186,8 @@ print-config`, `projmux tmux install`, `projmux tmux print-app-config`,
|
|
|
159
186
|
`projmux tmux install-app`, and `projmux shell`. Terminal init adapters such as
|
|
160
187
|
Ghostty and Windows Terminal install built-in plain-byte mappings where needed;
|
|
161
188
|
they do not read `keymap.toml` or copy saved keys into terminal configs.
|
|
162
|
-
Changing terminal-layer mappings still requires rerunning `projmux
|
|
163
|
-
restarting the terminal where that terminal requires it.
|
|
189
|
+
Changing terminal-layer mappings still requires rerunning `projmux setup
|
|
190
|
+
terminal` and restarting the terminal where that terminal requires it.
|
|
164
191
|
|
|
165
192
|
When a chord is overridden, projmux emits unbinds for both the stale default
|
|
166
193
|
chord and the replacement before binding the merged action. Popup and floating
|
|
@@ -334,9 +361,9 @@ user/global preference in this release.
|
|
|
334
361
|
## AI Resume Picker
|
|
335
362
|
|
|
336
363
|
The AI resume picker (`projmux ai split --agent resume`) lists the most recent
|
|
337
|
-
deduplicated Claude/Codex resume sessions. The number of rows it
|
|
338
|
-
far below the current directory it scans are both configurable;
|
|
339
|
-
30 rows and depth 0 (the current directory only).
|
|
364
|
+
deduplicated Claude/Codex/Antigravity resume sessions. The number of rows it
|
|
365
|
+
shows and how far below the current directory it scans are both configurable;
|
|
366
|
+
the defaults are 30 rows and depth 0 (the current directory only).
|
|
340
367
|
|
|
341
368
|
Preferred interactive path:
|
|
342
369
|
|
|
@@ -375,6 +402,21 @@ column (`./`, `./web`, `./api`) so child-directory sessions are easy to tell
|
|
|
375
402
|
apart. A missing or zero depth is identical to the historical behavior. Settings
|
|
376
403
|
edits write the global config.
|
|
377
404
|
|
|
405
|
+
Antigravity uses the upstream v1.1.12 current-storage boundary before its
|
|
406
|
+
legacy history fallback. `cache/last_conversations.json` contributes the latest
|
|
407
|
+
UUID mapped to a matching workspace; `cache/conversation_metadata.json`
|
|
408
|
+
contributes only rows that carry a valid UUID, workspace URI/path, and summary.
|
|
409
|
+
Both require an exact regular `conversations/<uuid>.db` and use only its
|
|
410
|
+
existence/mtime. They do not open SQLite content and do not treat `.db-wal`,
|
|
411
|
+
`.db-shm`, symlinks, or arbitrary paths as conversations. The cache provides a
|
|
412
|
+
latest-session floor rather than complete history. Missing/malformed cache,
|
|
413
|
+
workspace-less metadata, and stale mappings degrade to legacy `history.jsonl`
|
|
414
|
+
without changing the shared exact/depth/sort/cap behavior.
|
|
415
|
+
Live hook/session-state resume metadata is a separate high-confidence lane and
|
|
416
|
+
is not a disk-picker candidate. When a disk picker selection creates a pane,
|
|
417
|
+
its source is persisted so Session State preview and doctor can report medium
|
|
418
|
+
confidence for DB-validated cache sources or low confidence for legacy history.
|
|
419
|
+
|
|
378
420
|
## Environment Variables
|
|
379
421
|
|
|
380
422
|
| Variable | Purpose |
|
|
@@ -780,10 +822,28 @@ CPU/memory segment on the lower status row. The saved global value is:
|
|
|
780
822
|
```
|
|
781
823
|
|
|
782
824
|
Accepted values are `off` (default) and `on`. The feature is available on
|
|
783
|
-
native Linux and WSL.
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
825
|
+
macOS, native Linux, and WSL. Linux reads procfs directly; macOS reads Mach host
|
|
826
|
+
statistics and `hw.memsize`. Neither path launches `top`, `vm_stat`, `free`,
|
|
827
|
+
PowerShell, or another metrics process. On macOS, available memory is free plus
|
|
828
|
+
inactive pages, matching the reclaimable-memory intent of Linux
|
|
829
|
+
`MemAvailable`. In WSL the values describe the Linux guest/VM view, not total
|
|
830
|
+
Windows host utilization. These are host-scoped values and do not attribute
|
|
831
|
+
usage to a pane, window, project, or session.
|
|
832
|
+
|
|
833
|
+
When enabled, the compact segment is also the clickable `resources` statusbar
|
|
834
|
+
range and opens the Resource Inspector. Turning the Lab off hides only this
|
|
835
|
+
segment; it does not disable `projmux resources` or a custom-bound
|
|
836
|
+
`Resources:Open` action. Inspector samples are memory-only for the popup
|
|
837
|
+
lifetime and are unrelated to the status segment's host CPU reference cache.
|
|
838
|
+
|
|
839
|
+
The display policy is fixed rather than configurable: CPU is normal below 70%,
|
|
840
|
+
warning at 70–89%, and critical at 90% or above; memory is normal below 75%,
|
|
841
|
+
warning at 75–89%, and critical at 90% or above. The two values are classified
|
|
842
|
+
and styled independently. Normal and unavailable (`--`) values use the
|
|
843
|
+
secondary status-text theme role, warnings use the warning role, and critical
|
|
844
|
+
values use the bold critical role. No threshold values are stored in config.
|
|
845
|
+
|
|
846
|
+
The CPU delta cache is internal state at
|
|
787
847
|
`${XDG_STATE_HOME:-~/.local/state}/projmux/live-resources-sample.json`.
|
|
788
848
|
CPU reference samples older than 30 seconds are ignored and replaced on the
|
|
789
849
|
next refresh.
|
package/docs/globalization.md
CHANGED
|
@@ -124,7 +124,7 @@ Classification:
|
|
|
124
124
|
|
|
125
125
|
Do not translate these families:
|
|
126
126
|
|
|
127
|
-
- Product and agent names: `Codex`, `Claude`, `projmux`, `tmux`,
|
|
127
|
+
- Product and agent names: `Codex`, `Claude`, `projmux`, `tmux`,
|
|
128
128
|
`GitHub`, `npm`.
|
|
129
129
|
- Terminal and app names: `Windows Terminal`, `Ghostty`, `WezTerm`, `Kitty`,
|
|
130
130
|
`iTerm2`, `Alacritty`, `Foot`.
|