projmux 0.10.0 → 0.11.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.
@@ -106,10 +106,11 @@ language.
106
106
 
107
107
  Settings > Keybindings is the normal in-app editor for action keys. It lists
108
108
  actions with the current active keys and one state: Default, Custom, Available,
109
- or Unbound. Open an action to see the action label, state, a flat Keys list,
110
- Options, and a collapsed Troubleshooting row. Create flows start from
111
- `+ Add key`, deletion lives under each key's detail, and action-level state
112
- changes such as Unbind or Reset live under Options. Successful saves report the
109
+ or Unbound. Open an action to see the action label, state, the action's
110
+ target/result/placement/anchor and shipped handler, a flat Keys list, and
111
+ Options. Create flows start from `+ Add key` or `Enter key name manually`,
112
+ deletion and `Test delivery` live under each key's detail, and action-level
113
+ state changes such as Unbind or Reset live under Options. Successful saves report the
113
114
  keybinding as saved; failures identify the stage that failed.
114
115
 
115
116
  Raw sequences that cannot be safely represented as a direct keybinding are not
@@ -124,16 +125,19 @@ absent, generated tmux config stays on the built-in defaults.
124
125
  Supported schema:
125
126
 
126
127
  ```toml
127
- [bindings.ProjectSidebarToggle]
128
+ schema_version = 2
129
+
130
+ [bindings."project-sidebar.toggle"]
128
131
  keys = ["M-1", "M-a"]
132
+ sequences = ["C-k C-p"]
129
133
 
130
- [bindings.new-window]
134
+ [bindings."window.create"]
131
135
  keys = ["C-t"]
132
136
 
133
- [bindings."Sidebar:PinProject"]
137
+ [bindings."project-sidebar.project.pin-toggle"]
134
138
  keys = ["M-p", "p"]
135
139
 
136
- [bindings."Resources:Open"]
140
+ [bindings."resource-inspector.open"]
137
141
  keys = ["M-u"]
138
142
  ```
139
143
 
@@ -143,6 +147,21 @@ Each table is `[bindings.<action-id>]`. Supported keys are:
143
147
  | --- | --- |
144
148
  | `keys` | A list of no-prefix tmux plain chords such as `M-a`, `C-t`, or `M-S-Left`. |
145
149
  | `plain` | Legacy single-primary replacement. Still read, but not written by Settings. |
150
+ | `sequences` | Additive two-to-four-stroke triggers such as `C-k C-p`; manual-file/runtime support only in Phase 0. |
151
+
152
+ The root `schema_version` marker is the file's own version. A file without one
153
+ is v0 and uses the runtime action ids (`ProjectSidebarToggle`, `new-window`,
154
+ `Sidebar:PinProject`); v1 uses canonical dotted ids, and
155
+ `schema_version = 2` adds `sequences`. All versions read — the v0 spelling of
156
+ every action is a permanent read alias — and migration to v2 runs at
157
+ `projmux config apply` or at the first Settings key save. A v1 migration is a
158
+ marker-only edit with a digest-named pre-v2 backup. [docs/keybindings.md](keybindings.md#schema-versions) has the full
159
+ table, the upgrade ordering and the downgrade procedure.
160
+
161
+ This marker is a separate version domain from the CLI resource registry's
162
+ `apiVersion: projmux.io/v1alpha1` / camelCase `schemaVersion: 1` envelope. The
163
+ two have separate markers, separate backups and separate rollbacks; neither one
164
+ failing affects the other.
146
165
 
147
166
  Legacy `prefix = ...` entries still parse during migration so existing files
148
167
  do not break. Settings preserves existing prefix entries when rewriting the
@@ -159,21 +178,22 @@ Use an empty `keys` list to disable direct plain keys for the action when
159
178
  editing the file by hand:
160
179
 
161
180
  ```toml
162
- [bindings.ProjectSidebarToggle]
181
+ [bindings."project-sidebar.toggle"]
163
182
  keys = []
164
183
  ```
165
184
 
166
185
  In Settings, reset removes the saved override and returns to the built-in
167
- default. Legacy popup IDs such as
168
- `sessionizer-sidebar` still read, but new writes use canonical toggle names
169
- such as `ProjectSidebarToggle`, `NotifySidebarToggle`, `SessionPopupToggle`,
170
- `AISplitPickerToggle`, `SettingsToggle`, and `ProjectSwitcherToggle`. Internal
171
- popup commands use `Surface:Action` IDs and have surface-local conflict
172
- domains and remain visible in Settings when catalogued.
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
186
+ default. Popup *mode* names such as `sessionizer-sidebar` are not action ids and
187
+ resolve to nothing; a migration preserves such a table and reports it rather
188
+ than remapping it. Internal picker commands keep surface-local conflict domains
189
+ under their canonical ids (`session-picker.*`, `notification-sidebar.*`,
190
+ `project-sidebar.*`, `settings.*`) and remain visible in Settings when
191
+ catalogued.
192
+
193
+ `resource-inspector.open` (v0 `Resources:Open`) is a user-configurable direct
194
+ popup action with no built-in shortcut. Every configured alias renders the
195
+ canonical client-scoped body
196
+ `projmux internal tmux popup-toggle --client #{client_tty} resource-inspector`; pressing
177
197
  the same alias again closes only that client's popup. It remains available on
178
198
  Linux/tmux even when the Labs live-resource status segment is off.
179
199
 
@@ -181,9 +201,11 @@ The Settings writer is deterministic and rewrites the supported saved subset
181
201
  only. If the existing file has parse errors or unknown action IDs, Settings
182
202
  shows the keymap error row and refuses to overwrite it until the file is fixed.
183
203
 
184
- The file currently affects generated tmux config from `projmux tmux
185
- print-config`, `projmux tmux install`, `projmux tmux print-app-config`,
186
- `projmux tmux install-app`, and `projmux shell`. Terminal remediation adapters such as
204
+ The file currently affects generated tmux config from `projmux config render
205
+ standalone`, `projmux config render app`, `projmux config apply`, the hidden
206
+ `projmux internal tmux install` / `install-app` installer plumbing, and `projmux shell`.
207
+ The render routes never write the keymap; `projmux config apply` migrates it
208
+ first and only applies once that succeeds. Terminal remediation adapters such as
187
209
  Ghostty and Windows Terminal install built-in plain-byte mappings where needed;
188
210
  they do not read `keymap.toml` or copy saved keys into terminal configs.
189
211
  Changing terminal-layer mappings still requires rerunning `projmux setup
@@ -210,7 +232,7 @@ field with source labels: `global` or `fallback`. Saving or resetting a theme
210
232
  value live-applies it: projmux regenerates the generated tmux config and, when
211
233
  Settings runs inside tmux, `tmux source-file`-reloads it so a running server
212
234
  repaints immediately. Outside tmux the save still succeeds and the report
213
- prints `Next: run \`projmux tmux apply\`` to sync a running server.
235
+ prints `Next: run \`projmux config apply\`` to sync a running server.
214
236
 
215
237
  The `background`, `surface`, `status_background`, `surface_active`, and
216
238
  `pane_active_bg` tokens additionally accept the value `default` ("Terminal
@@ -251,7 +273,7 @@ rectangle is not guaranteed; focus is reinforced by the tint plus the
251
273
  `pane-border-status top` topic line. This chrome preserves `pane-border-status
252
274
  top`, pane topics, AI badges, and visible pane labels.
253
275
 
254
- Native picker popups launched through `projmux tmux popup-toggle` also pass a
276
+ Native picker popups launched through `projmux internal tmux popup-toggle` also pass a
255
277
  per-popup tmux 3.4 `display-popup -s` body style using the effective theme
256
278
  `surface` / `chrome_foreground` tmux tokens (popup/native backgrounds follow
257
279
  `surface`, while the bottom status bar follows `status_background`). This styles
@@ -360,7 +382,7 @@ user/global preference in this release.
360
382
 
361
383
  ## AI Resume Picker
362
384
 
363
- The AI resume picker (`projmux ai split --agent resume`) lists the most recent
385
+ The Agent resume picker lists the most recent
364
386
  deduplicated Claude/Codex/Antigravity resume sessions. The number of rows it
365
387
  shows and how far below the current directory it scans are both configurable;
366
388
  the defaults are 30 rows and depth 0 (the current directory only).
@@ -430,11 +452,11 @@ confidence for DB-validated cache sources or low confidence for legacy history.
430
452
  | `PROJMUX_AI_RESUME_SCAN_DEPTH` | Overrides the AI resume picker cwd-tree scan depth (`[ai] resume_scan_depth`). Clamped to 0-8; takes priority over project and global config. Depth 0 keeps the exact-cwd behavior. |
431
453
  | `PROJMUX_NOTIFY_HOOK_DEPTH` | Internal recursion guard for `send-noti` hooks. Depth `>= 1` suppresses nested hook dispatch while still allowing the queue write itself. |
432
454
  | `PROJMUX_NOTIFY_EXPIRE_MS` | AI desktop notification expiration in milliseconds. Defaults to `5000`; unset, zero, negative, and non-numeric values fall back to the default. |
433
- | `PROJMUX_DESKTOP_NOTIFY_MODE` | OS desktop notification mode override. `none` / `notify` / `raise` (case insensitive). When set, this takes priority over every other resolution rung. The in-app notify queue is not affected. |
455
+ | `PROJMUX_DESKTOP_NOTIFY_MODE` | OS desktop notification mode override. `off` / `none` / `notify` (case insensitive). When set, this takes priority over every other resolution rung. The in-app notify queue is not affected. The retired `raise` / `auto-raise` / `autoraise` literals are still accepted and read as `notify`. |
434
456
  | `PROJMUX_DESKTOP_NOTIFY` | Legacy on/off override kept for backward compatibility. `on` maps to `notify`, `off` maps to `none`. Honored only when `PROJMUX_DESKTOP_NOTIFY_MODE` is unset. |
435
457
  | `PROJMUX_WSL_TOAST_ICON_DIR` | Directory used when copying the WSL toast icon into a Windows-readable path. |
436
458
  | `PROJMUX_USAGE_STATE_DIR` | Override directory for AI usage snapshots. Defaults to `<state>/projmux/usage`. Point this at a synced directory to share authoritative usage across machines. |
437
- | `PROJMUX_USAGE_DEBUG` | When non-empty, prints adapter errors from `projmux status usage` to stderr. |
459
+ | `PROJMUX_USAGE_DEBUG` | When non-empty, prints adapter errors from the `projmux internal status usage` renderer to stderr. |
438
460
  | `PROJMUX_USAGE_LIMITS_PATH` | Deprecated. Read but ignored; limits now come from upstream APIs and local Codex rollout state. |
439
461
  | `PROJMUX_SESSIONSTATE_AUTOSAVE` | Session snapshot autosave override for the global fallback. Values such as `off`, `false`, or `0` disable autosave for projects that inherit the global setting; explicit project auto-save `on`/`off` still takes precedence. |
440
462
  | `PROJMUX_SESSIONSTATE_DEBUG` | When non-empty, quiet autosave surfaces suppressed session-state errors to stderr. |
@@ -534,7 +556,7 @@ host setup.
534
556
  - `[hooks.send-noti]` fires after the queue write and does not replace desktop
535
557
  notifications.
536
558
  - `PROJMUX_NOTIFY_HOOK_DEPTH` prevents a `send-noti` hook that calls
537
- `projmux notify push` from recursively re-triggering itself.
559
+ `projmux create notification` from recursively re-triggering itself.
538
560
 
539
561
  The app-name argument is `com.crevisse.projmux` (reverse-domain id used as
540
562
  the Linux `--app-name`, the macOS sender label, and the Windows
@@ -561,10 +583,10 @@ AI hook runtime actions are stored at:
561
583
  ${XDG_CONFIG_HOME:-$HOME/.config}/projmux/ai-hook-actions.json
562
584
  ```
563
585
 
564
- Settings exposes this at `Settings > Notifications > Hook quiet policy`.
586
+ Settings exposes this at `Settings > Notifications > Agent event behavior`.
565
587
  The file maps provider/event names to `notify`, `state`, or `quiet` and
566
588
  overrides catalog `action` values during ingest, including known Codex and
567
- Claude events. It does not change hook installation; `projmux ai integrate`
589
+ Claude events. It does not change hook installation; `projmux agent integrate`
568
590
  continues to use the embedded/local catalog `install` fields.
569
591
 
570
592
  Delivery depends on the event handler. Specialized notify handlers, such as
@@ -576,40 +598,42 @@ only a generic in-app queue/sidebar/statusbar row; it does not fire OS toast,
576
598
 
577
599
  ### Desktop notification mode
578
600
 
579
- The OS-level dispatch carries three modes. The in-app notify queue, the
601
+ The OS-level dispatch carries two modes. The in-app notify queue, the
580
602
  statusbar segment, and the attention badge stay live regardless of which
581
- mode is active — only the toast / notify-send / auto-raise fan-out is
582
- gated here. The same mode also gates `projmux focus` post-switch osfocus
583
- dispatch: only `raise` asks the host terminal to come forward after a
584
- successful tmux focus.
603
+ mode is active — only the toast / notify-send fan-out is gated here.
585
604
 
586
605
  | Mode | On push | On click |
587
606
  | --- | --- | --- |
588
607
  | `off` / `none` | no toast | n/a |
589
608
  | `notify` | toast / notify-send fires | no click action |
590
- | `raise` | toast / notify-send fires AND the host terminal is auto-raised via the osfocus chain | toast click invokes `projmux focus --uri` via the `projmux://` handler |
591
609
 
592
- Click activation is wired only for `raise`. The `projmux://` URI handler is
593
- registered on the first `raise` Notify of each tmux server (gated by the
594
- `@projmux_uri_protocol_registered_v6` marker). The
595
- mode only controls whether a toast fires at all and whether to follow it
596
- up with an on-push auto-raise. `off` / `none` and `notify` also suppress
597
- the focus-triggered osfocus raise after `projmux focus`.
610
+ Desktop notification delivery never takes your host terminal window focus.
611
+ The Toast carries no `launch` payload, projmux registers no `projmux://`
612
+ protocol handler, and there is no auto-raise on push. `projmux focus` also
613
+ stops at the tmux layer in every mode: it switches the client, window, and
614
+ pane but never asks the host terminal window to come forward.
598
615
 
599
616
  Resolution order (highest priority first):
600
617
 
601
- 1. `PROJMUX_DESKTOP_NOTIFY_MODE` env (`off` / `none` / `notify` / `raise`).
618
+ 1. `PROJMUX_DESKTOP_NOTIFY_MODE` env (`off` / `none` / `notify`).
602
619
  2. `PROJMUX_DESKTOP_NOTIFY` env (legacy `on` / `off`; `on` → `notify`,
603
620
  `off` → `none`).
604
621
  3. Saved Settings config
605
622
  `${XDG_CONFIG_HOME:-$HOME/.config}/projmux/desktop-notify-mode`
606
- (`off` / `notify` / `raise`).
623
+ (`off` / `notify`).
607
624
  4. Tmux global option `@projmux_desktop_notify_mode`.
608
625
  5. Tmux global option `@projmux_desktop_notify` (legacy `1` / `0`, same
609
626
  mapping as the env above).
610
- 6. Default = `raise` when running inside WSL with `$WT_SESSION` set
611
- (Windows Terminal × WSL is the measured-working cell for osfocus
612
- raise today); otherwise `notify`.
627
+ 6. Default = `notify` on every platform, WSL + Windows Terminal included.
628
+
629
+ The retired `raise` mode was removed in 0.11.0. Wherever a mode literal is
630
+ read — env, saved file, or tmux option — `raise`, `auto-raise`, and
631
+ `autoraise` are still accepted and resolve to `notify` **in that same
632
+ source**, so an old value keeps pinning the resolution instead of falling
633
+ through to a lower-precedence rung. The alias never re-enables host-window
634
+ focus, a clickable Toast, or URI handler registration; it is not offered in
635
+ Settings and is never written back — the first Settings press or
636
+ `projmux config apply` replaces it with `notify`.
613
637
 
614
638
  Migration is intentionally read-time. Users with the previous legacy
615
639
  toggle set keep their behavior — `@projmux_desktop_notify=0` resolves to
@@ -621,97 +645,41 @@ legacy key unused. No eager rewrite of tmux state.
621
645
  Toggle from Settings > Notifications > `Desktop notifications`. The
622
646
  Settings info row labels the effective source as `env`, `env (legacy)`,
623
647
  `setting`, `setting (legacy)`, or `default` so users see which rung of
624
- the cascade pinned the value. `projmux tmux apply` regenerates the live tmux
648
+ the cascade pinned the value. `projmux config apply` regenerates the live tmux
625
649
  option from the saved Settings file; when that file is missing, apply writes
626
650
  only the default for the current host.
627
651
 
628
652
  Hook details for new-session lifecycle hooks and project-local
629
653
  `.projmux/config.toml` live in [Hooks](hooks.md).
630
- Settings names that entry point as **Project recipe** (search still matches
631
- `config.toml` as an alias) to avoid leaking internal file names in the primary
632
- Settings view.
654
+ Settings exposes project-local executable automation under **Project >
655
+ Automation**. `[startup]` and generic `[env]` remain config-file compatibility
656
+ inputs and are not Settings authoring destinations.
633
657
 
634
- ### Toast click handler (WSL + Windows Terminal)
658
+ ### Toast click handler (WSL + Windows Terminal) — retired in 0.11.0
635
659
 
636
- On WSL, projmux registers a `projmux://` URL scheme on the Windows side
637
- the first time a Toast is dispatched on each tmux server. Clicking the
638
- toast hands control back to projmux inside WSL via the registered command:
660
+ projmux used to register a `projmux://` URL scheme on the Windows side and
661
+ emit clickable Toasts whose click routed through the hidden `projmux internal focus` ingress.
662
+ That path is **removed**: desktop notifications are passive, carry no
663
+ `launch` payload, and projmux registers no protocol handler. Clicking a
664
+ projmux Toast does nothing.
639
665
 
640
- ```text
641
- wscript.exe //B //Nologo "%LOCALAPPDATA%\projmux\projmux-uri-handler.vbs" "%1"
642
- ```
666
+ Consequences for existing installs:
643
667
 
644
- Registration writes the VBScript launcher under `%LOCALAPPDATA%\projmux`.
645
- The launcher receives `%1` as a WScript argument, caret-escapes command-line
646
- metacharacters such as `&`, and starts a hidden `%ComSpec% /d /s /c` command
647
- that invokes `wsl.exe`. Its argv semantics are equivalent to:
648
-
649
- ```text
650
- wsl.exe -d $WSL_DISTRO_NAME --exec <absolute-path-to-projmux> focus --uri <uri>
651
- ```
668
+ - A `HKCU\Software\Classes\projmux` key written by an earlier version is
669
+ **not** removed automatically. Delete it manually if you want the scheme
670
+ gone; leaving it in place is harmless because nothing produces the URI.
671
+ - The old public `focus --uri` compatibility input is removed. Machine-owned
672
+ focus payloads use `projmux internal focus --uri`. No
673
+ projmux code path produces such a URI any more.
674
+ - The `@projmux_uri_protocol_registered*` tmux markers are no longer read or
675
+ written. Stale markers are inert.
652
676
 
653
- For click activation to work in our unpackaged Win32 setup, four
654
- conditions must hold simultaneously — all of them are arranged by the
655
- notify path so users do not configure anything:
656
-
657
- 1. No COM Toast Activator is registered. The shortcut writes only
658
- `PKEY_AppUserModel_ID` (pid=5) and intentionally omits
659
- `PKEY_AppUserModel_ToastActivatorCLSID` (pid=26). When a COM activator
660
- is registered alongside the AppID, Windows tries COM first, silently
661
- fails for unpackaged exes, and does *not* fall through to the launch
662
- URI. Stripping the COM side makes Windows ShellExecute the launch URI
663
- on click.
664
- 2. The Start Menu shortcut exists with the AppID set. The shortcut is
665
- never launched — it is a property bag so the toast can route under
666
- the right DisplayName + icon.
667
- 3. The shortcut target is `cmd.exe /c exit`. Earlier code used
668
- `powershell.exe -WindowStyle Hidden -Command exit`; Windows Defender
669
- silently quarantines such shortcuts moments after creation, which
670
- leaves no AppID-tagged shortcut and breaks both the routing and the
671
- click path. `cmd.exe /c exit` is treated as benign and survives.
672
- 4. The WSL handler uses a WScript launcher instead of launching `wsl.exe` or
673
- `powershell.exe` directly, avoiding the transient Windows console flash on
674
- Toast click. Inside that launcher it still uses `--exec`, not `--`.
675
- `wsl.exe -- <cmd>` routes its tail through the user's login shell, which
676
- parses `&` query-string separators as background-job operators (zsh emits
677
- `parse error near '&'`). `--exec` skips the shell and invokes the binary
678
- directly. The `%1` URI is passed as a WScript argument and then forwarded
679
- through a hidden cmd.exe command line with `&` escaped as `^&`, so query
680
- separators are data instead of PowerShell, cmd, or WSL login-shell syntax.
681
- The absolute WSL filesystem path to the binary is captured at registration
682
- so PATH does not need to be populated under `--exec`.
683
-
684
- The URI carries the originating pane id and tmux socket so the click
685
- round-trips back to the exact pane that fired the notification, which
686
- the `projmux focus` path then redirects via `tmux switch-client`.
687
-
688
- Registration markers and the writes involved:
689
-
690
- - Registry keys (HKCU): `SOFTWARE\Classes\projmux\(Default)`,
691
- `SOFTWARE\Classes\projmux\URL Protocol`, and
692
- `SOFTWARE\Classes\projmux\shell\open\command\(Default)`.
693
- - Launcher file: `%LOCALAPPDATA%\projmux\projmux-uri-handler.vbs`.
694
- - tmux user-option marker `@projmux_uri_protocol_registered_v6` records that
695
- registration has been attempted on this server so the script runs at most
696
- once per server boot. (The v5 marker
697
- `@projmux_uri_protocol_registered_v5` was bumped when the WScript launcher
698
- added the hidden cmd.exe parser hop; existing v5 users re-register
699
- transparently on the next Notify after upgrade. After successful v6
700
- registration, projmux removes legacy URI marker keys from v1 through v5 so
701
- tmux state reflects only the active handler generation.)
702
-
703
- Limitations:
704
-
705
- - The handler captures the user's current `WSL_DISTRO_NAME` at registration
706
- time. Users running multiple WSL distros get one handler bound to the
707
- first distro that fired a toast — clicks from a different distro's toast
708
- will route back through the first distro. Tier-2 follow-up.
709
- - WSL2 cold-start latency: the first click after a long idle goes through
710
- WSL boot and typically takes 2-3s to surface the focus on the pane.
677
+ The measurement trail for the retired design is kept for history in
678
+ [notify-os-focus-poc.md](notify-os-focus-poc.md).
711
679
 
712
680
  ## Usage Tracking
713
681
 
714
- `projmux usage` and the status-bar usage segment store snapshots under:
682
+ `projmux agent usage` and the status-bar usage segment store snapshots under:
715
683
 
716
684
  ```text
717
685
  ${PROJMUX_USAGE_STATE_DIR:-${XDG_STATE_HOME:-$HOME/.local/state}/projmux/usage}/snapshots.json
@@ -776,10 +744,10 @@ The environment variables above override the global files.
776
744
  Manual snapshot actions are available from the CLI:
777
745
 
778
746
  ```sh
779
- projmux session-state status [--session <name>]
780
- projmux session-state save
781
- projmux session-state delete [--session <name>]
782
- projmux session-state restore --dry-run [--session <name>]
747
+ projmux get snapshots
748
+ projmux create snapshot
749
+ projmux delete snapshot [--session <name>]
750
+ projmux restore snapshot --dry-run [--session <name>]
783
751
  ```
784
752
 
785
753
  `status` prints the source label (`autosave`, `layout(<name>)`, or `fresh`), the
@@ -811,16 +779,98 @@ The per-surface saved values live at:
811
779
  The legacy `~/.config/projmux/statusbar-decoration` value is still read as the
812
780
  fallback default when a per-surface file is absent.
813
781
 
814
- ## Live System Resources Lab
782
+ ## Row 0 HUD Visibility
783
+
784
+ `Settings > Appearance > Status Bar` controls the two upper HUD components as
785
+ independent global presentation preferences:
786
+
787
+ - `Notifications HUD > Visible`
788
+ - `Agent Usage HUD > Visible`
789
+ - `Agent Usage HUD > Claude|Codex|Antigravity > Visible`
790
+ - each provider's supported HUD windows (`Claude`/`Codex`: `5h`, `Weekly`;
791
+ `Antigravity`: `Weekly`)
792
+
793
+ The saved values are `on` or `off` in these files:
794
+
795
+ ```text
796
+ ~/.config/projmux/statusbar-visibility-notifications-hud
797
+ ~/.config/projmux/statusbar-visibility-agent-usage-hud
798
+ ~/.config/projmux/statusbar-visibility-agent-usage-provider-claude
799
+ ~/.config/projmux/statusbar-visibility-agent-usage-provider-codex
800
+ ~/.config/projmux/statusbar-visibility-agent-usage-provider-antigravity
801
+ ~/.config/projmux/statusbar-visibility-agent-usage-window-claude-5h
802
+ ~/.config/projmux/statusbar-visibility-agent-usage-window-claude-weekly
803
+ ~/.config/projmux/statusbar-visibility-agent-usage-window-codex-5h
804
+ ~/.config/projmux/statusbar-visibility-agent-usage-window-codex-weekly
805
+ ~/.config/projmux/statusbar-visibility-agent-usage-window-antigravity-weekly
806
+ ```
807
+
808
+ Missing, empty, and invalid values resolve to the compatibility default `on`;
809
+ Settings shows whether the effective value came from `saved` or `default` and
810
+ marks an invalid saved value as ignored. Saving a toggle regenerates the app
811
+ and standalone tmux output, and Settings source-reloads the generated app config
812
+ when it is running inside tmux.
813
+
814
+ Parent visibility gates only the effective projection. Turning the overall HUD
815
+ or a provider off does not rewrite its provider/window leaf files; turning the
816
+ parent back on restores the saved child selection. Provider rows follow the
817
+ usage-supported provider catalog. Window rows come only from the explicit HUD
818
+ capability map, so opaque quota buckets never create settings and Antigravity
819
+ never gains a fabricated `5h` row.
820
+
821
+ Visibility does not enable or disable either producer. Hiding Notifications HUD
822
+ does not change the persistent queue, desktop delivery, or Notification
823
+ Sidebar. Hiding Agent Usage HUD does not change the `agent usage` command,
824
+ Provider snapshot cache, upstream API collection, quota, or refresh policy.
825
+ Provider/window leaves likewise filter only `projmux internal status usage`; explicit
826
+ `agent usage` table/JSON and the cached statusbar popup remain lossless.
827
+
828
+ ## Row 1 Segment Visibility
829
+
830
+ `Settings > Appearance > Status Bar` controls these retained lower-row
831
+ components independently:
832
+
833
+ - `Project`
834
+ - `Working directory > Visible`
835
+ - `Git > Visible`
836
+ - `Clock`
837
+ - `Settings launcher`
838
+
839
+ Their global saved values are `on` or `off` in:
840
+
841
+ ```text
842
+ ~/.config/projmux/statusbar-visibility-project
843
+ ~/.config/projmux/statusbar-visibility-working-directory
844
+ ~/.config/projmux/statusbar-visibility-git
845
+ ~/.config/projmux/statusbar-visibility-clock
846
+ ~/.config/projmux/statusbar-visibility-settings-launcher
847
+ ```
848
+
849
+ Missing, empty, and invalid values resolve to `on`; Settings reports the
850
+ effective value and whether it came from `saved` or `default`. Each save is an
851
+ atomic 0600 replacement, regenerates both app and standalone output, and
852
+ source-loads the generated app config when Settings is inside tmux. Off removes
853
+ the complete segment, including its mouse range and owned spacing. Working
854
+ directory/Git icon mode remains a separate setting, so icon `off` leaves the
855
+ text visible. Settings launcher `off` removes only its mouse chip; CLI and
856
+ keybinding entry remain.
857
+
858
+ Resources intentionally does not use one of these visibility files. Its
859
+ existing `~/.config/projmux/live-resources` value is the only enabled source
860
+ and controls both the segment and sampler/cache mutation.
861
+
862
+ ## Live System Resources
815
863
 
816
- `Settings > Labs > Live system resources` controls the experimental compact
864
+ `Settings > Appearance > Status Bar > Resources` controls the compact
817
865
  CPU/memory segment on the lower status row. The saved global value is:
818
866
 
819
867
  ```text
820
868
  ~/.config/projmux/live-resources
821
869
  ```
822
870
 
823
- Accepted values are `off` (default) and `on`. The feature is available on
871
+ Accepted values are `off` (default) and `on`. A missing, empty, or invalid
872
+ saved value resolves to `off` with source `default`; valid saved values report
873
+ source `saved`. The feature is available on
824
874
  macOS, native Linux, and WSL. Linux reads procfs directly; macOS reads Mach host
825
875
  statistics and `hw.memsize`. Neither path launches `top`, `vm_stat`, `free`,
826
876
  PowerShell, or another metrics process. On macOS, available memory is free plus
@@ -830,8 +880,9 @@ Windows host utilization. These are host-scoped values and do not attribute
830
880
  usage to a pane, window, project, or session.
831
881
 
832
882
  When enabled, the compact segment is also the clickable `resources` statusbar
833
- range and opens the Resource Inspector. Turning the Lab off hides only this
834
- segment; it does not disable `projmux resources` or a custom-bound
883
+ range and opens the Resource Inspector. Turning Resources off hides the segment
884
+ and stops its host sampler/cache writes; it does not disable the explicit
885
+ `projmux resources` inspector or a custom-bound
835
886
  `Resources:Open` action. Inspector samples are memory-only for the popup
836
887
  lifetime and are unrelated to the status segment's host CPU reference cache.
837
888
 
@@ -858,5 +909,3 @@ These are intended for debugging or local policy, not routine setup:
858
909
  | `PROJMUX_TMUX_NOTIFY_DEDUPE_SECONDS` | Override the Settings/default collapse window for duplicate AI desktop notifications keyed on the pane-local AI notification key. |
859
910
  | `PROJMUX_CODEX_TITLE_WATCH_INTERVAL` | Title-watch loop pacing for Codex panes. |
860
911
  | `PROJMUX_CODEX_REPLY_SETTLE_LOOPS` | Reply-detection settle-loop pacing for Codex panes. |
861
- | `TMUX_KUBE_CACHE_TTL` | Kubernetes status segment cache TTL. |
862
- | `TMUX_KUBE_TIMEOUT` | kubectl invocation budget for the Kubernetes status segment. |
@@ -34,7 +34,7 @@ Classification:
34
34
 
35
35
  | Family | Examples | Class | Phase 0 policy |
36
36
  | --- | --- | --- | --- |
37
- | Agent names | `Codex`, `Claude`, `AI` | `literal` | Preserve exactly. |
37
+ | Agent names | `Codex`, `Claude`, `Antigravity`, `AI` | `literal` | Preserve exactly. |
38
38
  | Category labels | `Response complete`, `Approval required`, `Input required`, `Error`, `Subagent stopped`, `Teammate waiting` | `translate` | English baseline now; catalog keys later. |
39
39
  | Review body prefix | `Review pending:` | `translate` | English baseline now; catalog key later. |
40
40
  | Tool names | `Bash`, `Read`, `WebFetch`, `Shell` | `literal` | Preserve provider/source spelling. |
@@ -50,12 +50,13 @@ Files:
50
50
  - `internal/app/status.go`
51
51
  - `docs/statusbar.md`
52
52
  - `docs/cli.md`
53
+ - `docs/cli-guide.md`
53
54
 
54
55
  Classification:
55
56
 
56
57
  | Family | Examples | Class | Phase 0 policy |
57
58
  | --- | --- | --- | --- |
58
- | CLI flag help and usage | `--text`, `--target`, `notify push`, usage errors | `translate` | Inventory only; convert in catalog phases. |
59
+ | CLI flag help and usage | `--text`, `--target`, `create notification`, usage errors | `translate` | Inventory only; convert in catalog phases. |
59
60
  | Queue row labels and action hints | ack, clear, focus, open, reconcile labels | `translate` | Inventory only; convert in catalog phases. |
60
61
  | Statusbar compact text | notify count, age, stale/gone hints | `translate` | Inventory only; needs compact locale formatter later. |
61
62
  | Source/severity enum values | `ai`, `k8s`, `git`, `external`, `critical` | `literal` | Preserve exactly. |
@@ -78,8 +79,8 @@ Classification:
78
79
  | Row labels and previews | enabled/disabled state, current source, saved values | `translate` | Inventory only; catalog later. |
79
80
  | Disabled reasons and warnings | missing project, env override, conflict text | `translate` | Inventory only; catalog later. |
80
81
  | Config keys and env vars | `PROJMUX_PROJDIR`, `config.toml`, `ui.locale` | `literal` | Preserve exactly. |
81
- | Commands shown for copying | `projmux ai integrate codex --dry-run` | `literal` | Preserve exactly. |
82
- | Persisted values | `none`, `notify`, `raise`, `auto` | `literal` | Preserve enum values. |
82
+ | Commands shown for copying | `projmux agent integrate codex --dry-run`, `projmux agent integrate antigravity --dry-run` | `literal` | Preserve exactly. |
83
+ | Persisted values | `off`, `none`, `notify`, `auto` | `literal` | Preserve enum values. |
83
84
 
84
85
  ### Native Picker And Render Surfaces
85
86
 
@@ -108,6 +109,7 @@ Files:
108
109
  - `internal/app/settings*.go`
109
110
  - `internal/app/*help*`
110
111
  - `docs/cli.md`
112
+ - `docs/cli-guide.md`
111
113
  - `docs/agent-workflow.md`
112
114
 
113
115
  Classification:
@@ -124,7 +126,7 @@ Classification:
124
126
 
125
127
  Do not translate these families:
126
128
 
127
- - Product and agent names: `Codex`, `Claude`, `projmux`, `tmux`,
129
+ - Product and agent names: `Codex`, `Claude`, `Antigravity`, `projmux`, `tmux`,
128
130
  `GitHub`, `npm`.
129
131
  - Terminal and app names: `Windows Terminal`, `Ghostty`, `WezTerm`, `Kitty`,
130
132
  `iTerm2`, `Alacritty`, `Foot`.
@@ -239,7 +241,8 @@ Contribution convention:
239
241
  - Add the `en-US` entry in the same change as the key.
240
242
  - Add `ko-KR` when the translation is known; otherwise rely on fallback while
241
243
  keeping the missing key intentional in review notes.
242
- - Do not translate product names (`projmux`, `tmux`, `Codex`, `Claude`),
244
+ - Do not translate product names (`projmux`, `tmux`, `Codex`, `Claude`,
245
+ `Antigravity`),
243
246
  commands, paths, config keys, environment variables, provider payloads, or
244
247
  source enum values.
245
248
  - Runtime migrations should be narrow by surface. Move a string family behind
@@ -296,9 +299,10 @@ Width-safe rendering:
296
299
 
297
300
  Runtime surfaces migrated:
298
301
 
299
- - AI desktop notification summaries for Codex and Claude hook payloads.
302
+ - AI desktop notification summaries for Codex, Claude, and Antigravity hook
303
+ payloads.
300
304
  - In-app notify queue table/sidebar/statusbar display text for AI entries.
301
- - Notify live explanation text for `projmux notify list --live`.
305
+ - Notify live explanation text for `projmux get notifications --live`.
302
306
  - Sidebar/table/statusbar age formatting and sidebar stale/gone/target labels.
303
307
 
304
308
  Storage and dispatch policy:
@@ -309,7 +313,7 @@ Storage and dispatch policy:
309
313
  - OS notification click/focus routing is unchanged. Locale formatting only
310
314
  changes the summary/body strings sent to the configured notifier.
311
315
  - JSON queue payloads keep raw queue entries. Localized live-row explanation
312
- and row display text may appear in `notify list --live` row fields because
316
+ and row display text may appear in `get notifications --live` row fields because
313
317
  those fields are render/report output, not stored queue schema.
314
318
 
315
319
  Literal preservation and parity rules:
@@ -317,9 +321,9 @@ Literal preservation and parity rules:
317
321
  - Translate only catalog-owned category labels such as `Response complete`,
318
322
  `Approval required`, `Input required`, `Error`, `Subagent stopped`, and
319
323
  `Teammate waiting`.
320
- - Preserve provider-owned payloads verbatim: `Codex`, `Claude`, tool names,
321
- commands, paths, URLs, query strings, transcript excerpts, teammate IDs, and
322
- subagent IDs.
324
+ - Preserve provider-owned payloads verbatim: `Codex`, `Claude`, `Antigravity`,
325
+ tool names, commands, paths, URLs, query strings, transcript excerpts,
326
+ teammate IDs, and subagent IDs.
323
327
  - Desktop notification summaries and in-app queue display text must use the
324
328
  same rendered category labels for the same locale while preserving the same
325
329
  literal payload body.