projmux 0.15.3 → 0.16.1

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 (38) hide show
  1. package/README-ko.md +3 -4
  2. package/README.md +3 -3
  3. package/docs/agent-message-replies.md +149 -6
  4. package/docs/ai-agent-shortcuts.md +6 -5
  5. package/docs/architecture.md +467 -66
  6. package/docs/claude-coordination-endpoints.md +192 -20
  7. package/docs/cli-guide.md +872 -148
  8. package/docs/cli.md +1459 -485
  9. package/docs/codex-installed-compatibility.md +6 -11
  10. package/docs/codex-native-required-migration.md +1 -59
  11. package/docs/configuration.md +694 -222
  12. package/docs/globalization.md +18 -5
  13. package/docs/hooks.md +529 -62
  14. package/docs/keybindings.md +74 -4
  15. package/docs/legacy-cli-retirement.md +3 -3
  16. package/docs/legacy-diagnostics-inventory.md +4 -4
  17. package/docs/native-picker.md +3 -5
  18. package/docs/notify-queue.md +1 -1
  19. package/docs/npm-distribution.md +4 -0
  20. package/docs/operational-diagnostics.md +319 -34
  21. package/docs/pr-guideline.md +66 -22
  22. package/docs/release.md +101 -0
  23. package/docs/replacement-contract.md +72 -58
  24. package/docs/repo-layout.md +3 -0
  25. package/docs/resource-attribution.md +6 -2
  26. package/docs/session-restore.md +50 -80
  27. package/docs/settings-ia.md +14 -22
  28. package/docs/statusbar.md +38 -37
  29. package/docs/testing.md +83 -18
  30. package/docs/theme-palette.md +6 -6
  31. package/docs/tmux-surface-inventory.md +21 -10
  32. package/docs/troubleshooting.md +2 -4
  33. package/docs/upgrading.md +161 -24
  34. package/docs/usage-tracking.md +40 -49
  35. package/package.json +5 -5
  36. package/docs/agent-workflow.md +0 -2596
  37. package/docs/codex-generation-pool.md +0 -623
  38. package/docs/codex-stored-qualification.md +0 -45
package/docs/cli.md CHANGED
@@ -39,7 +39,7 @@ Root parser bridges outside the route graph are censused from their parser token
39
39
 
40
40
  Every route declares one allowed-effect record over seven independent resource axes. A pipe separates conditional success outcomes; preflight refusal remains zero-effect. `domain-effect=null` means the route has no typed extension beyond this resource tuple.
41
41
 
42
- The machine-readable manifest contains 191 route-effect records, including hidden plumbing that the public route sections omit.
42
+ The machine-readable manifest contains 239 route-effect records, including hidden plumbing that the public route sections omit.
43
43
 
44
44
  | Axis | Closed vocabulary |
45
45
  | --- | --- |
@@ -63,7 +63,7 @@ projmux <command> [args...]
63
63
  | [`projmux agent`](#projmux-agent) | canonical | Manage Agent state, messages, waits, capabilities, integrations, and account usage |
64
64
  | [`projmux attention`](#projmux-attention) | canonical | View and manage live tmux pane attention state |
65
65
  | [`projmux attach`](#projmux-attach) | canonical | Enter a Project runtime from outside tmux |
66
- | [`projmux config`](#projmux-config) | canonical | Edit AI split-mode settings; render or apply generated tmux configuration |
66
+ | [`projmux config`](#projmux-config) | canonical | Edit AI split-mode, enabled-provider, locale, and agent-question settings; render or apply generated tmux configuration |
67
67
  | [`projmux create`](#projmux-create) | canonical | Create Projmux resources |
68
68
  | [`projmux delete`](#projmux-delete) | canonical | Delete Projmux resources with an explicit cascade plan |
69
69
  | [`projmux describe`](#projmux-describe) | canonical | Describe one Projmux resource |
@@ -72,16 +72,18 @@ projmux <command> [args...]
72
72
  | [`projmux focus`](#projmux-focus) | canonical | Move the current client to a live resource |
73
73
  | [`projmux get`](#projmux-get) | canonical | Read Projmux resources by selector |
74
74
  | [`projmux hook`](#projmux-hook) | canonical | List, edit, validate, and trust lifecycle hook config |
75
+ | [`projmux label`](#projmux-label) | canonical | Set or remove Projmux resource metadata.labels after creation |
75
76
  | [`projmux notification`](#projmux-notification) | canonical | Manage pending notification workflow state |
76
77
  | [`projmux open`](#projmux-open) | canonical | Open a Project runtime and move the current client to it |
78
+ | [`projmux instructions`](#projmux-instructions) | canonical | List, show, edit, set, and delete Agent instruction files |
79
+ | [`projmux profile`](#projmux-profile) | canonical | List, show, set, and delete named Agent profiles |
77
80
  | [`projmux pin`](#projmux-pin) | canonical | Manage pinned project directories |
78
- | [`projmux prune`](#projmux-prune) | canonical | Prune stale Projects, Agents, and snapshots |
81
+ | [`projmux prune`](#projmux-prune) | canonical | Prune stale Projects and Agents |
79
82
  | [`projmux quit`](#projmux-quit) | shortcut | Quit the app-owned projmux tmux runtime |
80
83
  | [`projmux reconcile`](#projmux-reconcile) | canonical | Preview or repair Registry and exact tmux resource drift |
81
84
  | [`projmux rebind`](#projmux-rebind) | canonical | Rebind a Project to a new absolute root without moving files |
82
85
  | [`projmux rename`](#projmux-rename) | canonical | Rename a Projmux resource metadata.name |
83
86
  | [`projmux resources`](#projmux-resources) | shortcut | Inspect live Project, Window, and Pane CPU/RSS attribution |
84
- | [`projmux restore`](#projmux-restore) | canonical | Project a saved snapshot into one exact closed Project desired state |
85
87
  | [`projmux runtime`](#projmux-runtime) | canonical | Manage the live and ephemeral tmux runtime inventory |
86
88
  | [`projmux settings`](#projmux-settings) | shortcut | Configure projmux |
87
89
  | [`projmux setup`](#projmux-setup) | canonical | Probe terminal keys or remediate them with setup terminal |
@@ -117,23 +119,30 @@ Allowed effects:
117
119
  projmux agent status [get [<agent-ref>] | set <unknown|idle|in_progress|approval_required|input_required|response_complete> [<agent-ref>]] [--agent <ref>]
118
120
  projmux agent topic get|clear [<agent-ref>] [--agent <ref>]
119
121
  projmux agent topic set <text> [<agent-ref>] [--agent <ref>]
120
- projmux agent resume <ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
122
+ projmux agent resume <ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [--model <model>] [--effort <level>] [--dialogue-reply-only]
123
+ projmux agent relaunch <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [--profile <name>|none] [--instructions <name>|none] [--model <model>] [--effort <level>] [--reset <item>[,...]|all] [--yes] [--dry-run] [--socket <name> | --socket-path <absolute>] [-o json]
121
124
  projmux agent turn start|steer <agent-ref> -- <text>
122
- projmux agent turn interrupt <agent-ref>
125
+ projmux agent turn interrupt <agent-ref> [--via <client>]
123
126
  projmux agent approval review <agent-ref> [--request <normalized-id>]
127
+ projmux agent approval list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o json]
128
+ projmux agent approval answer <agent-ref> <request-id> (--allow | --deny) [--via <popup|cli|client>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
124
129
  projmux agent review [<agent-ref>] [--agent <ref>] [--base <branch> | --commit <sha> | --instructions <text>]
125
130
  projmux agent integrate <codex|claude|antigravity|tmux-bell> [--remove] [--dry-run]
126
- projmux agent usage [--model <codex|claude|antigravity|all>] [--window <name>] [--json] [--force]
127
- projmux agent app-server upgrade qualify --receipt <absolute-json>
128
- projmux agent app-server upgrade plan|apply --request <absolute-json>
129
- projmux agent app-server upgrade resume|abort --operation <ref>
130
- projmux agent app-server handover plan|apply --request <absolute-json>
131
- projmux agent app-server handover resume|abort --operation <ref>
132
- projmux agent capabilities [<agent-ref> | --provider <codex|claude|antigravity>] [-o json]
131
+ projmux agent usage [--model <codex|claude|all>] [--window <name>] [--json] [--force]
132
+ projmux agent capabilities [<agent-ref> | --provider <codex|claude|antigravity>] [-o json] [--json]
133
+ projmux agent models [--provider <claude|codex>] [-o json]
133
134
  projmux agent message send <agent-ref> [--source <agent-ref>] [--message-ref <ref>] [--reply-to <ref>] [--ttl <duration>] -- <text>
134
135
  projmux agent message status <message-ref> [-o json]
135
- projmux agent message qualify <claude-agent-ref> --evidence <absolute-private-json> --confirm-isolated-provider-push -o json
136
+ projmux agent message qualify <claude-agent-ref> --evidence <absolute-private-json> --confirm-isolated-provider-push -o json [--timeout <duration>]
136
137
  projmux agent wait <agent-ref> [--until idle] [--timeout <duration>] [-o json]
138
+ projmux agent question enable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
139
+ projmux agent question disable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
140
+ projmux agent question list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o json]
141
+ projmux agent question answer <agent-ref> <question-id> [--option <n>=<label>]... [--index <n>=<k>]... [--text <n>=<text>]... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
142
+ projmux agent sessions list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o json]
143
+ projmux agent sessions backfill [--dry-run] [-o json]
144
+ projmux agent sessions project <project-ref> [-o json]
145
+ projmux agent sessions attribute [--dry-run] [-o json]
137
146
  ```
138
147
 
139
148
  Subcommands:
@@ -143,17 +152,20 @@ Subcommands:
143
152
  | [`projmux agent status`](#projmux-agent-status) | Read or set semantic Agent interaction independently of lifecycle |
144
153
  | [`projmux agent topic`](#projmux-agent-topic) | Read, set, or clear one exact Agent topic annotation |
145
154
  | [`projmux agent resume`](#projmux-agent-resume) | Rebind an Offline or Failed Agent detached on its Window's exact shell or Agent anchor |
146
- | [`projmux agent turn`](#projmux-agent-turn) | Send, steer, or interrupt one exact native Codex turn |
147
- | [`projmux agent approval`](#projmux-agent-approval) | Review one exact pending native Codex approval |
155
+ | [`projmux agent relaunch`](#projmux-agent-relaunch) | Restart one exact Claude or Codex Agent on the same conversation with another profile, instructions, model, or effort |
156
+ | [`projmux agent turn`](#projmux-agent-turn) | Send or steer one exact native Codex turn, or interrupt an exact Codex or Claude turn |
157
+ | [`projmux agent approval`](#projmux-agent-approval) | Review one exact pending native Codex approval, or list and answer Claude and Codex permission requests |
148
158
  | [`projmux agent review`](#projmux-agent-review) | Start a native review on an exact-bound Codex Agent |
149
159
  | [`projmux agent integrate`](#projmux-agent-integrate) | Install, remove, or preview provider hooks and tmux-bell integration |
150
160
  | [`projmux agent usage`](#projmux-agent-usage) | Read provider account usage quota snapshots |
151
- | [`projmux agent app-server`](#projmux-agent-app-server) | Manage explicitly requested private Codex app-server generation operations |
152
161
  | [`projmux agent capabilities`](#projmux-agent-capabilities) | Read static provider support or one exact Agent's Registry-backed runtime eligibility |
162
+ | [`projmux agent models`](#projmux-agent-models) | List model suggestions for Claude (default) or Codex (app-server); other names are still accepted |
153
163
  | [`projmux agent message`](#projmux-agent-message) | Exchange bounded untrusted coordination messages; --source selects a source Agent anchor, not caller authentication (default: active Pane) |
154
164
  | [`projmux agent wait`](#projmux-agent-wait) | Wait read-only for one exact Agent's Registry-backed idle observation |
165
+ | [`projmux agent question`](#projmux-agent-question) | Answer one exact opted-in Claude or Codex Agent's questions from the command line |
166
+ | [`projmux agent sessions`](#projmux-agent-sessions) | List the Claude or Codex conversations an Agent or a Project has moved through, backfill past Claude sessions from delivered message frames, or persist their current Registry affiliation |
155
167
 
156
- Canonical spelling: `projmux agent status`, `projmux agent topic`, `projmux agent resume`, `projmux agent turn start`, `projmux agent turn steer`, `projmux agent turn interrupt`, `projmux agent approval review`, `projmux agent review`, `projmux agent integrate`, `projmux agent usage`, `projmux agent app-server upgrade qualify`, `projmux agent app-server upgrade plan`, `projmux agent app-server upgrade apply`, `projmux agent app-server upgrade resume`, `projmux agent app-server upgrade abort`, `projmux agent app-server handover plan`, `projmux agent app-server handover apply`, `projmux agent app-server handover resume`, `projmux agent app-server handover abort`, `projmux agent capabilities`, `projmux agent message send`, `projmux agent message status`, `projmux agent message qualify`, `projmux agent wait`
168
+ Canonical spelling: `projmux agent status`, `projmux agent topic`, `projmux agent resume`, `projmux agent relaunch`, `projmux agent turn start`, `projmux agent turn steer`, `projmux agent turn interrupt`, `projmux agent approval review`, `projmux agent approval list`, `projmux agent approval answer`, `projmux agent review`, `projmux agent integrate`, `projmux agent usage`, `projmux agent capabilities`, `projmux agent models`, `projmux agent message send`, `projmux agent message status`, `projmux agent message qualify`, `projmux agent wait`, `projmux agent question enable`, `projmux agent question disable`, `projmux agent question list`, `projmux agent question answer`, `projmux agent sessions list`, `projmux agent sessions backfill`, `projmux agent sessions project`, `projmux agent sessions attribute`
157
169
 
158
170
  ### `projmux agent status`
159
171
 
@@ -216,12 +228,53 @@ Allowed effects:
216
228
  - `domain-effect=null`
217
229
 
218
230
  ```
219
- projmux agent resume <ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
231
+ projmux agent resume <ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [--model <model>] [--effort <level>] [--dialogue-reply-only]
220
232
  ```
221
233
 
234
+ A Codex CLI resume reapplies the Agent's current Profile sandbox and approval. Codex CLI cannot apply approval=untrusted; that resume is refused before creating a Pane.
235
+
236
+ Codex keeps the developer instructions its thread started with; resume cannot replace them.
237
+
238
+ --model and --effort are recorded on the Agent with the source resume (projmux.io/model-source, projmux.io/effort-source).
239
+
240
+ Items the Agent does not override take its profile's current instructions, model, and effort; the model is passed only when it changed.
241
+
242
+ The new Pane carries the name of the Agent's old Pane row; when delete pane left no such row, it is named <agent-name>-pane as create agent names it. A name that cannot be used leaves the automatic one, and a held name is disclosed in one stderr line.
243
+
244
+ ### `projmux agent relaunch`
245
+
246
+ Restart one exact Claude or Codex Agent on the same conversation with another profile, instructions, model, or effort
247
+
248
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
249
+
250
+ Allowed effects:
251
+
252
+ - `identity=unchanged|reused`
253
+ - `address=unchanged`
254
+ - `topology=unchanged|replaced`
255
+ - `desired-state=unchanged|replaced`
256
+ - `runtime=unchanged|materialized`
257
+ - `focus=unchanged`
258
+ - `cardinality=exact-one`
259
+ - `domain-effect=null`
260
+
261
+ ```
262
+ projmux agent relaunch <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [--profile <name>|none] [--instructions <name>|none] [--model <model>] [--effort <level>] [--reset <item>[,...]|all] [--yes] [--dry-run] [--socket <name> | --socket-path <absolute>] [-o json]
263
+ ```
264
+
265
+ The model and effort are recorded on the Agent (projmux.io/model, projmux.io/effort) with the source relaunch (projmux.io/model-source, projmux.io/effort-source); later resumes re-pass the effort but not the model.
266
+
267
+ --profile switches the Agent's profile (none: no profile) and clears every override but the ones given with it; naming the profile it has keeps its overrides. --instructions overrides the instructions (none: no instructions), and --reset removes the overrides of instructions, model, or effort (all: every one) so they follow the profile again. It is all one restart.
268
+
269
+ A Codex Agent refuses a change of its instructions (codex-instructions-immutable) and a profile switch that would keep the old sandbox or approval (relaunch-codex-permissions-kept).
270
+
271
+ Without flags it restarts the Agent with the settings its profile and overrides resolve to now, or reports unchanged; -o json carries currentSettings, newSettings, and relaunchReasons.
272
+
273
+ Output modes (`-o`): `json`
274
+
222
275
  ### `projmux agent turn`
223
276
 
224
- Send, steer, or interrupt one exact native Codex turn
277
+ Send or steer one exact native Codex turn, or interrupt an exact Codex or Claude turn
225
278
 
226
279
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
227
280
 
@@ -238,7 +291,7 @@ Allowed effects:
238
291
 
239
292
  ```
240
293
  projmux agent turn start|steer <agent-ref> -- <text>
241
- projmux agent turn interrupt <agent-ref>
294
+ projmux agent turn interrupt <agent-ref> [--via <client>]
242
295
  ```
243
296
 
244
297
  Subcommands:
@@ -247,7 +300,7 @@ Subcommands:
247
300
  | --- | --- |
248
301
  | [`projmux agent turn start`](#projmux-agent-turn-start) | Send a new turn to one exact idle Codex thread |
249
302
  | [`projmux agent turn steer`](#projmux-agent-turn-steer) | Request provider acceptance for one exact current Codex turn; delivery remains unconfirmed |
250
- | [`projmux agent turn interrupt`](#projmux-agent-turn-interrupt) | Interrupt one exact current Codex turn |
303
+ | [`projmux agent turn interrupt`](#projmux-agent-turn-interrupt) | Interrupt one exact current Codex turn or send Esc to one fresh in-progress Claude turn |
251
304
 
252
305
  Canonical spelling: `projmux agent turn start`, `projmux agent turn steer`, `projmux agent turn interrupt`
253
306
 
@@ -295,7 +348,7 @@ projmux agent turn steer <agent-ref> -- <text>
295
348
 
296
349
  #### `projmux agent turn interrupt`
297
350
 
298
- Interrupt one exact current Codex turn
351
+ Interrupt one exact current Codex turn or send Esc to one fresh in-progress Claude turn
299
352
 
300
353
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
301
354
 
@@ -311,12 +364,14 @@ Allowed effects:
311
364
  - `domain-effect=null`
312
365
 
313
366
  ```
314
- projmux agent turn interrupt <agent-ref>
367
+ projmux agent turn interrupt <agent-ref> [--via <client>]
315
368
  ```
316
369
 
370
+ Claude requires explicit --via <client>: cli, popup, or an operator client name of 1-32 lowercase ASCII letters, digits, and '-', starting with a letter; another name is refused as operator-client-invalid. The source is reported by the caller and does not prove which client was used or who the user is. A sent Esc confirms tmux delivery, not Claude cancellation. The private state file agent-turn-interrupt-audit.jsonl records the exact Agent and Pane UIDs, time, source, and delivery outcome.
371
+
317
372
  ### `projmux agent approval`
318
373
 
319
- Review one exact pending native Codex approval
374
+ Review one exact pending native Codex approval, or list and answer Claude and Codex permission requests
320
375
 
321
376
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
322
377
 
@@ -333,6 +388,8 @@ Allowed effects:
333
388
 
334
389
  ```
335
390
  projmux agent approval review <agent-ref> [--request <normalized-id>]
391
+ projmux agent approval list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o json]
392
+ projmux agent approval answer <agent-ref> <request-id> (--allow | --deny) [--via <popup|cli|client>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
336
393
  ```
337
394
 
338
395
  Subcommands:
@@ -340,8 +397,10 @@ Subcommands:
340
397
  | Route | Summary |
341
398
  | --- | --- |
342
399
  | [`projmux agent approval review`](#projmux-agent-approval-review) | Review one exact pending native Codex approval |
400
+ | [`projmux agent approval list`](#projmux-agent-approval-list) | List one exact Claude or Codex Agent's waiting permission requests with their full tool input |
401
+ | [`projmux agent approval answer`](#projmux-agent-approval-answer) | Allow or deny one waiting Claude or Codex permission request once; the first answer wins |
343
402
 
344
- Canonical spelling: `projmux agent approval review`
403
+ Canonical spelling: `projmux agent approval review`, `projmux agent approval list`, `projmux agent approval answer`
345
404
 
346
405
  #### `projmux agent approval review`
347
406
 
@@ -364,11 +423,11 @@ Allowed effects:
364
423
  projmux agent approval review <agent-ref> [--request <normalized-id>]
365
424
  ```
366
425
 
367
- ### `projmux agent review`
426
+ #### `projmux agent approval list`
368
427
 
369
- Start a native review on an exact-bound Codex Agent
428
+ List one exact Claude or Codex Agent's waiting permission requests with their full tool input
370
429
 
371
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
430
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
372
431
 
373
432
  Allowed effects:
374
433
 
@@ -378,16 +437,24 @@ Allowed effects:
378
437
  - `desired-state=unchanged`
379
438
  - `runtime=unchanged`
380
439
  - `focus=unchanged`
381
- - `cardinality=unchanged`
440
+ - `cardinality=exact-one`
382
441
  - `domain-effect=null`
383
442
 
384
443
  ```
385
- projmux agent review [<agent-ref>] [--agent <ref>] [--base <branch> | --commit <sha> | --instructions <text>]
444
+ projmux agent approval list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o json]
386
445
  ```
387
446
 
388
- ### `projmux agent integrate`
447
+ A Claude Agent lists the permission requests captured while `config agent-approvals --answering projmux` is set.
389
448
 
390
- Install, remove, or preview provider hooks and tmux-bell integration
449
+ A Codex Agent lists the pending approvals of its exact native control binding in either answering way: toolName is the approval kind, toolInput its details, answers the flags `agent approval answer` can send, and denyDecision what --deny sends (decline: the turn continues; cancel: the turn stops). An ambiguous request id, or one offering neither allow nor deny, is marked for `agent approval review`.
450
+
451
+ A listed request may already have been answered in Claude Code's own prompt, the Codex TUI, or `agent approval review`, which stay usable; the first answer wins.
452
+
453
+ Output modes (`-o`): `json`
454
+
455
+ #### `projmux agent approval answer`
456
+
457
+ Allow or deny one waiting Claude or Codex permission request once; the first answer wins
391
458
 
392
459
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
393
460
 
@@ -399,18 +466,26 @@ Allowed effects:
399
466
  - `desired-state=unchanged`
400
467
  - `runtime=unchanged`
401
468
  - `focus=unchanged`
402
- - `cardinality=unchanged`
469
+ - `cardinality=exact-one`
403
470
  - `domain-effect=null`
404
471
 
405
472
  ```
406
- projmux agent integrate <codex|claude|antigravity|tmux-bell> [--remove] [--dry-run]
473
+ projmux agent approval answer <agent-ref> <request-id> (--allow | --deny) [--via <popup|cli|client>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
407
474
  ```
408
475
 
409
- ### `projmux agent usage`
476
+ --allow runs that one tool call as requested; it never changes a permission rule or the tool input. --deny blocks it. Exactly one of them is required.
410
477
 
411
- Read provider account usage quota snapshots
478
+ --via (default cli) is recorded in the audit log as the caller reports it; it is not verified. It takes popup, cli, or an operator client name under the same rule as `agent turn interrupt --via`; another name is refused as operator-client-invalid.
412
479
 
413
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
480
+ A second or late answer, or one on a request already answered in Claude Code's own prompt, is refused as permission-not-pending.
481
+
482
+ For a Codex Agent, --allow sends accept, never a widened grant; --deny sends decline when offered, otherwise cancel, which also interrupts the turn; nothing runs either way. A request offering no fitting decision is refused as permission-decision-unavailable, and the result line names the decision sent. It needs `config agent-approvals --answering projmux`, an unknown or ambiguous id is permission-not-pending, and the allowed or denied audit line is written before the answer is sent. `agent approval review` keeps every decision and the picker.
483
+
484
+ ### `projmux agent review`
485
+
486
+ Start a native review on an exact-bound Codex Agent
487
+
488
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
414
489
 
415
490
  Allowed effects:
416
491
 
@@ -424,14 +499,14 @@ Allowed effects:
424
499
  - `domain-effect=null`
425
500
 
426
501
  ```
427
- projmux agent usage [--model <codex|claude|antigravity|all>] [--window <name>] [--json] [--force]
502
+ projmux agent review [<agent-ref>] [--agent <ref>] [--base <branch> | --commit <sha> | --instructions <text>]
428
503
  ```
429
504
 
430
- ### `projmux agent app-server`
505
+ ### `projmux agent integrate`
431
506
 
432
- Manage explicitly requested private Codex app-server generation operations
507
+ Install, remove, or preview provider hooks and tmux-bell integration
433
508
 
434
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
509
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
435
510
 
436
511
  Allowed effects:
437
512
 
@@ -445,23 +520,14 @@ Allowed effects:
445
520
  - `domain-effect=null`
446
521
 
447
522
  ```
448
- projmux agent app-server
523
+ projmux agent integrate <codex|claude|antigravity|tmux-bell> [--remove] [--dry-run]
449
524
  ```
450
525
 
451
- Subcommands:
452
-
453
- | Route | Summary |
454
- | --- | --- |
455
- | [`projmux agent app-server upgrade`](#projmux-agent-app-server-upgrade) | Plan, apply, resume, or abort one exact rolling generation operation |
456
- | [`projmux agent app-server handover`](#projmux-agent-app-server-handover) | Plan, apply, resume, or abort one exact generation-wide handover |
457
-
458
- Canonical spelling: `projmux agent app-server upgrade qualify`, `projmux agent app-server upgrade plan`, `projmux agent app-server upgrade apply`, `projmux agent app-server upgrade resume`, `projmux agent app-server upgrade abort`, `projmux agent app-server handover plan`, `projmux agent app-server handover apply`, `projmux agent app-server handover resume`, `projmux agent app-server handover abort`
459
-
460
- #### `projmux agent app-server upgrade`
526
+ ### `projmux agent usage`
461
527
 
462
- Plan, apply, resume, or abort one exact rolling generation operation
528
+ Read provider account usage quota snapshots
463
529
 
464
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
530
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
465
531
 
466
532
  Allowed effects:
467
533
 
@@ -475,26 +541,37 @@ Allowed effects:
475
541
  - `domain-effect=null`
476
542
 
477
543
  ```
478
- projmux agent app-server upgrade
544
+ projmux agent usage [--model <codex|claude|all>] [--window <name>] [--json] [--force]
479
545
  ```
480
546
 
481
- Subcommands:
547
+ ### `projmux agent capabilities`
482
548
 
483
- | Route | Summary |
484
- | --- | --- |
485
- | [`projmux agent app-server upgrade qualify`](#projmux-agent-app-server-upgrade-qualify) | Install one measured version-pair qualification receipt for the generation entry paths |
486
- | [`projmux agent app-server upgrade plan`](#projmux-agent-app-server-upgrade-plan) | Read the mutation-zero plan for one exact private generation upgrade |
487
- | [`projmux agent app-server upgrade apply`](#projmux-agent-app-server-upgrade-apply) | Apply one exact crash-resumable private generation admission switch |
488
- | [`projmux agent app-server upgrade resume`](#projmux-agent-app-server-upgrade-resume) | Resume one exact durable rolling generation operation |
489
- | [`projmux agent app-server upgrade abort`](#projmux-agent-app-server-upgrade-abort) | Abort one pre-admission operation and clean only its exact candidate |
549
+ Read static provider support or one exact Agent's Registry-backed runtime eligibility
550
+
551
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
552
+
553
+ Allowed effects:
490
554
 
491
- Canonical spelling: `projmux agent app-server upgrade qualify`, `projmux agent app-server upgrade plan`, `projmux agent app-server upgrade apply`, `projmux agent app-server upgrade resume`, `projmux agent app-server upgrade abort`
555
+ - `identity=unchanged`
556
+ - `address=unchanged`
557
+ - `topology=unchanged`
558
+ - `desired-state=unchanged`
559
+ - `runtime=unchanged`
560
+ - `focus=unchanged`
561
+ - `cardinality=exact-one`
562
+ - `domain-effect=null`
492
563
 
493
- ##### `projmux agent app-server upgrade qualify`
564
+ ```
565
+ projmux agent capabilities [<agent-ref> | --provider <codex|claude|antigravity>] [-o json] [--json]
566
+ ```
494
567
 
495
- Install one measured version-pair qualification receipt for the generation entry paths
568
+ Output modes (`-o`): `json`
496
569
 
497
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
570
+ ### `projmux agent models`
571
+
572
+ List model suggestions for Claude (default) or Codex (app-server); other names are still accepted
573
+
574
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
498
575
 
499
576
  Allowed effects:
500
577
 
@@ -508,14 +585,16 @@ Allowed effects:
508
585
  - `domain-effect=null`
509
586
 
510
587
  ```
511
- projmux agent app-server upgrade qualify --receipt <absolute-json>
588
+ projmux agent models [--provider <claude|codex>] [-o json]
512
589
  ```
513
590
 
514
- ##### `projmux agent app-server upgrade plan`
591
+ Output modes (`-o`): `json`
592
+
593
+ ### `projmux agent message`
515
594
 
516
- Read the mutation-zero plan for one exact private generation upgrade
595
+ Exchange bounded untrusted coordination messages; --source selects a source Agent anchor, not caller authentication (default: active Pane)
517
596
 
518
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
597
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
519
598
 
520
599
  Allowed effects:
521
600
 
@@ -525,16 +604,28 @@ Allowed effects:
525
604
  - `desired-state=unchanged`
526
605
  - `runtime=unchanged`
527
606
  - `focus=unchanged`
528
- - `cardinality=unchanged`
529
- - `domain-effect=null`
607
+ - `cardinality=exact-one`
608
+ - `domain-effect=agent-delivery`
530
609
 
531
610
  ```
532
- projmux agent app-server upgrade plan --request <absolute-json>
611
+ projmux agent message send <agent-ref> [--source <agent-ref>] [--message-ref <ref>] [--reply-to <ref>] [--ttl <duration>] -- <text>
612
+ projmux agent message status <message-ref> [-o json]
613
+ projmux agent message qualify <claude-agent-ref> --evidence <absolute-private-json> --confirm-isolated-provider-push -o json [--timeout <duration>]
533
614
  ```
534
615
 
535
- ##### `projmux agent app-server upgrade apply`
616
+ Subcommands:
617
+
618
+ | Route | Summary |
619
+ | --- | --- |
620
+ | [`projmux agent message send`](#projmux-agent-message-send) | Submit bounded peer coordination; --source selects a source Agent anchor, not caller authentication (default: active Pane); exits nonzero after printing a failed, refused, expired, or stale receipt |
621
+ | [`projmux agent message status`](#projmux-agent-message-status) | Read a payload-free broker delivery receipt |
622
+ | [`projmux agent message qualify`](#projmux-agent-message-qualify) | Explicitly qualify one exact Claude target using owned current-version isolation evidence and one marker push |
623
+
624
+ Canonical spelling: `projmux agent message send`, `projmux agent message status`, `projmux agent message qualify`
625
+
626
+ #### `projmux agent message send`
536
627
 
537
- Apply one exact crash-resumable private generation admission switch
628
+ Submit bounded peer coordination; --source selects a source Agent anchor, not caller authentication (default: active Pane); exits nonzero after printing a failed, refused, expired, or stale receipt
538
629
 
539
630
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
540
631
 
@@ -546,16 +637,16 @@ Allowed effects:
546
637
  - `desired-state=unchanged`
547
638
  - `runtime=unchanged`
548
639
  - `focus=unchanged`
549
- - `cardinality=unchanged`
550
- - `domain-effect=null`
640
+ - `cardinality=exact-one`
641
+ - `domain-effect=agent-delivery`
551
642
 
552
643
  ```
553
- projmux agent app-server upgrade apply --request <absolute-json>
644
+ projmux agent message send <agent-ref> [--source <agent-ref>] [--message-ref <ref>] [--reply-to <ref>] [--ttl <duration>] -- <text>
554
645
  ```
555
646
 
556
- ##### `projmux agent app-server upgrade resume`
647
+ #### `projmux agent message status`
557
648
 
558
- Resume one exact durable rolling generation operation
649
+ Read a payload-free broker delivery receipt
559
650
 
560
651
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
561
652
 
@@ -568,15 +659,17 @@ Allowed effects:
568
659
  - `runtime=unchanged`
569
660
  - `focus=unchanged`
570
661
  - `cardinality=unchanged`
571
- - `domain-effect=null`
662
+ - `domain-effect=agent-delivery`
572
663
 
573
664
  ```
574
- projmux agent app-server upgrade resume --operation <ref>
665
+ projmux agent message status <message-ref> [-o json]
575
666
  ```
576
667
 
577
- ##### `projmux agent app-server upgrade abort`
668
+ Output modes (`-o`): `json`
669
+
670
+ #### `projmux agent message qualify`
578
671
 
579
- Abort one pre-admission operation and clean only its exact candidate
672
+ Explicitly qualify one exact Claude target using owned current-version isolation evidence and one marker push
580
673
 
581
674
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
582
675
 
@@ -588,18 +681,20 @@ Allowed effects:
588
681
  - `desired-state=unchanged`
589
682
  - `runtime=unchanged`
590
683
  - `focus=unchanged`
591
- - `cardinality=unchanged`
592
- - `domain-effect=null`
684
+ - `cardinality=exact-one`
685
+ - `domain-effect=agent-delivery`
593
686
 
594
687
  ```
595
- projmux agent app-server upgrade abort --operation <ref>
688
+ projmux agent message qualify <claude-agent-ref> --evidence <absolute-private-json> --confirm-isolated-provider-push -o json [--timeout <duration>]
596
689
  ```
597
690
 
598
- #### `projmux agent app-server handover`
691
+ Output modes (`-o`): `json`
599
692
 
600
- Plan, apply, resume, or abort one exact generation-wide handover
693
+ ### `projmux agent wait`
601
694
 
602
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
695
+ Wait read-only for one exact Agent's Registry-backed idle observation
696
+
697
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
603
698
 
604
699
  Allowed effects:
605
700
 
@@ -609,27 +704,18 @@ Allowed effects:
609
704
  - `desired-state=unchanged`
610
705
  - `runtime=unchanged`
611
706
  - `focus=unchanged`
612
- - `cardinality=unchanged`
707
+ - `cardinality=exact-one`
613
708
  - `domain-effect=null`
614
709
 
615
710
  ```
616
- projmux agent app-server handover
711
+ projmux agent wait <agent-ref> [--until idle] [--timeout <duration>] [-o json]
617
712
  ```
618
713
 
619
- Subcommands:
620
-
621
- | Route | Summary |
622
- | --- | --- |
623
- | [`projmux agent app-server handover plan`](#projmux-agent-app-server-handover-plan) | Read the exact target-set generation handover plan |
624
- | [`projmux agent app-server handover apply`](#projmux-agent-app-server-handover-apply) | Apply one crash-resumable generation-wide handover |
625
- | [`projmux agent app-server handover resume`](#projmux-agent-app-server-handover-resume) | Resume one exact durable generation handover |
626
- | [`projmux agent app-server handover abort`](#projmux-agent-app-server-handover-abort) | Abort one exact pre-stop generation handover |
627
-
628
- Canonical spelling: `projmux agent app-server handover plan`, `projmux agent app-server handover apply`, `projmux agent app-server handover resume`, `projmux agent app-server handover abort`
714
+ Output modes (`-o`): `json`
629
715
 
630
- ##### `projmux agent app-server handover plan`
716
+ ### `projmux agent question`
631
717
 
632
- Read the exact target-set generation handover plan
718
+ Answer one exact opted-in Claude or Codex Agent's questions from the command line
633
719
 
634
720
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
635
721
 
@@ -641,16 +727,30 @@ Allowed effects:
641
727
  - `desired-state=unchanged`
642
728
  - `runtime=unchanged`
643
729
  - `focus=unchanged`
644
- - `cardinality=unchanged`
730
+ - `cardinality=exact-one`
645
731
  - `domain-effect=null`
646
732
 
647
733
  ```
648
- projmux agent app-server handover plan --request <absolute-json>
734
+ projmux agent question enable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
735
+ projmux agent question disable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
736
+ projmux agent question list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o json]
737
+ projmux agent question answer <agent-ref> <question-id> [--option <n>=<label>]... [--index <n>=<k>]... [--text <n>=<text>]... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
649
738
  ```
650
739
 
651
- ##### `projmux agent app-server handover apply`
740
+ Subcommands:
741
+
742
+ | Route | Summary |
743
+ | --- | --- |
744
+ | [`projmux agent question enable`](#projmux-agent-question-enable) | Opt one exact Claude or Codex Agent into answering questions from the command line |
745
+ | [`projmux agent question disable`](#projmux-agent-question-disable) | Opt one exact Claude or Codex Agent out of command-line answers |
746
+ | [`projmux agent question list`](#projmux-agent-question-list) | List one exact Claude or Codex Agent's waiting and recent questions |
747
+ | [`projmux agent question answer`](#projmux-agent-question-answer) | Answer one waiting question by option label, option number, or explicit free text |
748
+
749
+ Canonical spelling: `projmux agent question enable`, `projmux agent question disable`, `projmux agent question list`, `projmux agent question answer`
750
+
751
+ #### `projmux agent question enable`
652
752
 
653
- Apply one crash-resumable generation-wide handover
753
+ Opt one exact Claude or Codex Agent into answering questions from the command line
654
754
 
655
755
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
656
756
 
@@ -662,16 +762,16 @@ Allowed effects:
662
762
  - `desired-state=unchanged`
663
763
  - `runtime=unchanged`
664
764
  - `focus=unchanged`
665
- - `cardinality=unchanged`
765
+ - `cardinality=exact-one`
666
766
  - `domain-effect=null`
667
767
 
668
768
  ```
669
- projmux agent app-server handover apply --request <absolute-json>
769
+ projmux agent question enable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
670
770
  ```
671
771
 
672
- ##### `projmux agent app-server handover resume`
772
+ #### `projmux agent question disable`
673
773
 
674
- Resume one exact durable generation handover
774
+ Opt one exact Claude or Codex Agent out of command-line answers
675
775
 
676
776
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
677
777
 
@@ -683,16 +783,16 @@ Allowed effects:
683
783
  - `desired-state=unchanged`
684
784
  - `runtime=unchanged`
685
785
  - `focus=unchanged`
686
- - `cardinality=unchanged`
786
+ - `cardinality=exact-one`
687
787
  - `domain-effect=null`
688
788
 
689
789
  ```
690
- projmux agent app-server handover resume --operation <ref>
790
+ projmux agent question disable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
691
791
  ```
692
792
 
693
- ##### `projmux agent app-server handover abort`
793
+ #### `projmux agent question list`
694
794
 
695
- Abort one exact pre-stop generation handover
795
+ List one exact Claude or Codex Agent's waiting and recent questions
696
796
 
697
797
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
698
798
 
@@ -704,18 +804,20 @@ Allowed effects:
704
804
  - `desired-state=unchanged`
705
805
  - `runtime=unchanged`
706
806
  - `focus=unchanged`
707
- - `cardinality=unchanged`
807
+ - `cardinality=exact-one`
708
808
  - `domain-effect=null`
709
809
 
710
810
  ```
711
- projmux agent app-server handover abort --operation <ref>
811
+ projmux agent question list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o json]
712
812
  ```
713
813
 
714
- ### `projmux agent capabilities`
814
+ Output modes (`-o`): `json`
715
815
 
716
- Read static provider support or one exact Agent's Registry-backed runtime eligibility
816
+ #### `projmux agent question answer`
717
817
 
718
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
818
+ Answer one waiting question by option label, option number, or explicit free text
819
+
820
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
719
821
 
720
822
  Allowed effects:
721
823
 
@@ -729,16 +831,14 @@ Allowed effects:
729
831
  - `domain-effect=null`
730
832
 
731
833
  ```
732
- projmux agent capabilities [<agent-ref> | --provider <codex|claude|antigravity>] [-o json]
834
+ projmux agent question answer <agent-ref> <question-id> [--option <n>=<label>]... [--index <n>=<k>]... [--text <n>=<text>]... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
733
835
  ```
734
836
 
735
- Output modes (`-o`): `json`
736
-
737
- ### `projmux agent message`
837
+ ### `projmux agent sessions`
738
838
 
739
- Exchange bounded untrusted coordination messages; --source selects a source Agent anchor, not caller authentication (default: active Pane)
839
+ List the Claude or Codex conversations an Agent or a Project has moved through, backfill past Claude sessions from delivered message frames, or persist their current Registry affiliation
740
840
 
741
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
841
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
742
842
 
743
843
  Allowed effects:
744
844
 
@@ -749,27 +849,29 @@ Allowed effects:
749
849
  - `runtime=unchanged`
750
850
  - `focus=unchanged`
751
851
  - `cardinality=exact-one`
752
- - `domain-effect=agent-delivery`
852
+ - `domain-effect=null`
753
853
 
754
854
  ```
755
- projmux agent message send <agent-ref> [--source <agent-ref>] [--message-ref <ref>] [--reply-to <ref>] [--ttl <duration>] -- <text>
756
- projmux agent message status <message-ref> [-o json]
757
- projmux agent message qualify <claude-agent-ref> --evidence <absolute-private-json> --confirm-isolated-provider-push -o json
855
+ projmux agent sessions list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o json]
856
+ projmux agent sessions backfill [--dry-run] [-o json]
857
+ projmux agent sessions project <project-ref> [-o json]
858
+ projmux agent sessions attribute [--dry-run] [-o json]
758
859
  ```
759
860
 
760
861
  Subcommands:
761
862
 
762
863
  | Route | Summary |
763
864
  | --- | --- |
764
- | [`projmux agent message send`](#projmux-agent-message-send) | Submit bounded peer coordination; --source selects a source Agent anchor, not caller authentication (default: active Pane); exits nonzero after printing a failed, refused, expired, or stale receipt |
765
- | [`projmux agent message status`](#projmux-agent-message-status) | Read a payload-free broker delivery receipt |
766
- | [`projmux agent message qualify`](#projmux-agent-message-qualify) | Explicitly qualify one exact Claude target using owned current-version isolation evidence and one marker push |
865
+ | [`projmux agent sessions list`](#projmux-agent-sessions-list) | List one exact Claude or Codex Agent's recorded and current conversations in time order |
866
+ | [`projmux agent sessions backfill`](#projmux-agent-sessions-backfill) | Append past Claude sessions attributable to exactly one Agent by their delivered message frames as estimated history |
867
+ | [`projmux agent sessions project`](#projmux-agent-sessions-project) | List the Claude and Codex conversations attributed to one exact Project, by recorded affiliation or the current Registry |
868
+ | [`projmux agent sessions attribute`](#projmux-agent-sessions-attribute) | Append the current Registry affiliation of Claude and Codex sessions whose history rows carry no Project, so they stay attributed after their Agent is deleted |
767
869
 
768
- Canonical spelling: `projmux agent message send`, `projmux agent message status`, `projmux agent message qualify`
870
+ Canonical spelling: `projmux agent sessions list`, `projmux agent sessions backfill`, `projmux agent sessions project`, `projmux agent sessions attribute`
769
871
 
770
- #### `projmux agent message send`
872
+ #### `projmux agent sessions list`
771
873
 
772
- Submit bounded peer coordination; --source selects a source Agent anchor, not caller authentication (default: active Pane); exits nonzero after printing a failed, refused, expired, or stale receipt
874
+ List one exact Claude or Codex Agent's recorded and current conversations in time order
773
875
 
774
876
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
775
877
 
@@ -782,15 +884,17 @@ Allowed effects:
782
884
  - `runtime=unchanged`
783
885
  - `focus=unchanged`
784
886
  - `cardinality=exact-one`
785
- - `domain-effect=agent-delivery`
887
+ - `domain-effect=null`
786
888
 
787
889
  ```
788
- projmux agent message send <agent-ref> [--source <agent-ref>] [--message-ref <ref>] [--reply-to <ref>] [--ttl <duration>] -- <text>
890
+ projmux agent sessions list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o json]
789
891
  ```
790
892
 
791
- #### `projmux agent message status`
893
+ Output modes (`-o`): `json`
792
894
 
793
- Read a payload-free broker delivery receipt
895
+ #### `projmux agent sessions backfill`
896
+
897
+ Append past Claude sessions attributable to exactly one Agent by their delivered message frames as estimated history
794
898
 
795
899
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
796
900
 
@@ -803,17 +907,17 @@ Allowed effects:
803
907
  - `runtime=unchanged`
804
908
  - `focus=unchanged`
805
909
  - `cardinality=unchanged`
806
- - `domain-effect=agent-delivery`
910
+ - `domain-effect=null`
807
911
 
808
912
  ```
809
- projmux agent message status <message-ref> [-o json]
913
+ projmux agent sessions backfill [--dry-run] [-o json]
810
914
  ```
811
915
 
812
916
  Output modes (`-o`): `json`
813
917
 
814
- #### `projmux agent message qualify`
918
+ #### `projmux agent sessions project`
815
919
 
816
- Explicitly qualify one exact Claude target using owned current-version isolation evidence and one marker push
920
+ List the Claude and Codex conversations attributed to one exact Project, by recorded affiliation or the current Registry
817
921
 
818
922
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
819
923
 
@@ -826,17 +930,17 @@ Allowed effects:
826
930
  - `runtime=unchanged`
827
931
  - `focus=unchanged`
828
932
  - `cardinality=exact-one`
829
- - `domain-effect=agent-delivery`
933
+ - `domain-effect=null`
830
934
 
831
935
  ```
832
- projmux agent message qualify <claude-agent-ref> --evidence <absolute-private-json> --confirm-isolated-provider-push -o json
936
+ projmux agent sessions project <project-ref> [-o json]
833
937
  ```
834
938
 
835
939
  Output modes (`-o`): `json`
836
940
 
837
- ### `projmux agent wait`
941
+ #### `projmux agent sessions attribute`
838
942
 
839
- Wait read-only for one exact Agent's Registry-backed idle observation
943
+ Append the current Registry affiliation of Claude and Codex sessions whose history rows carry no Project, so they stay attributed after their Agent is deleted
840
944
 
841
945
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
842
946
 
@@ -848,11 +952,11 @@ Allowed effects:
848
952
  - `desired-state=unchanged`
849
953
  - `runtime=unchanged`
850
954
  - `focus=unchanged`
851
- - `cardinality=exact-one`
955
+ - `cardinality=unchanged`
852
956
  - `domain-effect=null`
853
957
 
854
958
  ```
855
- projmux agent wait <agent-ref> [--until idle] [--timeout <duration>] [-o json]
959
+ projmux agent sessions attribute [--dry-run] [-o json]
856
960
  ```
857
961
 
858
962
  Output modes (`-o`): `json`
@@ -875,7 +979,11 @@ Allowed effects:
875
979
  - `domain-effect=null`
876
980
 
877
981
  ```
878
- projmux attention toggle|clear|arm|list|window
982
+ projmux attention toggle [pane]
983
+ projmux attention clear [pane]
984
+ projmux attention arm [pane]
985
+ projmux attention list [--json] [--all]
986
+ projmux attention window [window] [style]
879
987
  ```
880
988
 
881
989
  Subcommands:
@@ -971,7 +1079,7 @@ Allowed effects:
971
1079
  - `domain-effect=null`
972
1080
 
973
1081
  ```
974
- projmux attention list
1082
+ projmux attention list [--json] [--all]
975
1083
  ```
976
1084
 
977
1085
  ### `projmux attention window`
@@ -992,7 +1100,7 @@ Allowed effects:
992
1100
  - `domain-effect=null`
993
1101
 
994
1102
  ```
995
- projmux attention window
1103
+ projmux attention window [window] [style]
996
1104
  ```
997
1105
 
998
1106
  ## `projmux attach`
@@ -1047,7 +1155,7 @@ projmux attach project <ref>
1047
1155
 
1048
1156
  ## `projmux config`
1049
1157
 
1050
- Edit AI split-mode settings; render or apply generated tmux configuration
1158
+ Edit AI split-mode, enabled-provider, locale, and agent-question settings; render or apply generated tmux configuration
1051
1159
 
1052
1160
  Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
1053
1161
 
@@ -1064,8 +1172,12 @@ Allowed effects:
1064
1172
 
1065
1173
  ```
1066
1174
  projmux config edit [--get|--set <mode>]
1175
+ projmux config providers [--enable <id>|--disable <id>]
1176
+ projmux config locale [--set <value>]
1177
+ projmux config agent-questions [--answering <claude|projmux>] [--window <seconds|unlimited>]
1178
+ projmux config agent-approvals [--answering <claude|projmux>] [--window <seconds>]
1067
1179
  projmux config render standalone|app [--bin <path>]
1068
- projmux config apply [--bin <path>] [--config <path>] [--socket <name>]
1180
+ projmux config apply [--bin <path>] [--config <path>] [--socket <name>] [--no-reload]
1069
1181
  ```
1070
1182
 
1071
1183
  Subcommands:
@@ -1073,10 +1185,14 @@ Subcommands:
1073
1185
  | Route | Summary |
1074
1186
  | --- | --- |
1075
1187
  | [`projmux config edit`](#projmux-config-edit) | Edit the AI split-mode configuration |
1188
+ | [`projmux config providers`](#projmux-config-providers) | List AI providers as enabled or disabled; --enable or --disable changes one |
1189
+ | [`projmux config locale`](#projmux-config-locale) | Show the [ui] locale setting and its config.toml; --set stores a new one |
1190
+ | [`projmux config agent-questions`](#projmux-config-agent-questions) | Show how Claude and Codex agent questions are answered and how long they wait; --answering or --window changes them |
1191
+ | [`projmux config agent-approvals`](#projmux-config-agent-approvals) | Show how agent permission requests are answered and how long a captured one waits; --answering or --window changes them |
1076
1192
  | [`projmux config render`](#projmux-config-render) | Print a generated tmux config to stdout; writes nothing |
1077
1193
  | [`projmux config apply`](#projmux-config-apply) | Write the generated app tmux config and reload the live projmux server |
1078
1194
 
1079
- Canonical spelling: `projmux config edit`, `projmux config render`, `projmux config apply`
1195
+ Canonical spelling: `projmux config edit`, `projmux config providers`, `projmux config locale`, `projmux config agent-questions`, `projmux config agent-approvals`, `projmux config render`, `projmux config apply`
1080
1196
 
1081
1197
  ### `projmux config edit`
1082
1198
 
@@ -1099,11 +1215,13 @@ Allowed effects:
1099
1215
  projmux config edit [--get|--set <mode>]
1100
1216
  ```
1101
1217
 
1102
- ### `projmux config render`
1218
+ `--get` prints the TUI split default `tmux-ai-split-mode` when it holds a valid mode, else the central `ai-new-window-mode`, else `selective`. `--set` writes only `tmux-ai-split-mode`.
1103
1219
 
1104
- Print a generated tmux config to stdout; writes nothing
1220
+ ### `projmux config providers`
1105
1221
 
1106
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
1222
+ List AI providers as enabled or disabled; --enable or --disable changes one
1223
+
1224
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1107
1225
 
1108
1226
  Allowed effects:
1109
1227
 
@@ -1117,22 +1235,16 @@ Allowed effects:
1117
1235
  - `domain-effect=null`
1118
1236
 
1119
1237
  ```
1120
- projmux config render standalone [--bin <path>]
1121
- projmux config render app [--bin <path>]
1238
+ projmux config providers
1239
+ projmux config providers --enable <id>
1240
+ projmux config providers --disable <id>
1122
1241
  ```
1123
1242
 
1124
- Subcommands:
1125
-
1126
- | Route | Summary |
1127
- | --- | --- |
1128
- | [`projmux config render standalone`](#projmux-config-render-standalone) | Print the snippet you source from your own tmux.conf |
1129
- | [`projmux config render app`](#projmux-config-render-app) | Print the config the app-owned projmux tmux server runs from |
1130
-
1131
- #### `projmux config render standalone`
1243
+ ### `projmux config locale`
1132
1244
 
1133
- Print the snippet you source from your own tmux.conf
1245
+ Show the [ui] locale setting and its config.toml; --set stores a new one
1134
1246
 
1135
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
1247
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1136
1248
 
1137
1249
  Allowed effects:
1138
1250
 
@@ -1146,16 +1258,15 @@ Allowed effects:
1146
1258
  - `domain-effect=null`
1147
1259
 
1148
1260
  ```
1149
- projmux config render standalone [--bin <path>]
1261
+ projmux config locale
1262
+ projmux config locale --set <value>
1150
1263
  ```
1151
1264
 
1152
- Canonical spelling: `projmux config render`
1153
-
1154
- #### `projmux config render app`
1265
+ ### `projmux config agent-questions`
1155
1266
 
1156
- Print the config the app-owned projmux tmux server runs from
1267
+ Show how Claude and Codex agent questions are answered and how long they wait; --answering or --window changes them
1157
1268
 
1158
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
1269
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1159
1270
 
1160
1271
  Allowed effects:
1161
1272
 
@@ -1169,16 +1280,16 @@ Allowed effects:
1169
1280
  - `domain-effect=null`
1170
1281
 
1171
1282
  ```
1172
- projmux config render app [--bin <path>]
1283
+ projmux config agent-questions
1284
+ projmux config agent-questions --answering <claude|projmux>
1285
+ projmux config agent-questions --window <seconds|unlimited>
1173
1286
  ```
1174
1287
 
1175
- Canonical spelling: `projmux config render`
1176
-
1177
- ### `projmux config apply`
1288
+ ### `projmux config agent-approvals`
1178
1289
 
1179
- Write the generated app tmux config and reload the live projmux server
1290
+ Show how agent permission requests are answered and how long a captured one waits; --answering or --window changes them
1180
1291
 
1181
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
1292
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1182
1293
 
1183
1294
  Allowed effects:
1184
1295
 
@@ -1192,14 +1303,20 @@ Allowed effects:
1192
1303
  - `domain-effect=null`
1193
1304
 
1194
1305
  ```
1195
- projmux config apply [--bin <path>] [--config <path>] [--socket <name>]
1306
+ projmux config agent-approvals [--answering <claude|projmux>] [--window <seconds>]
1196
1307
  ```
1197
1308
 
1198
- ## `projmux create`
1309
+ `claude` (default) leaves every Claude request to Claude Code's own prompt and refuses `agent approval answer`. `projmux` also captures Claude permission requests and lets `agent approval answer` allow or deny Claude and Codex requests remotely; the provider's own prompt stays usable and the first answer wins.
1199
1310
 
1200
- Create Projmux resources
1311
+ Codex approvals are never captured: the provider holds them, `agent approval list` shows them in either way, and `agent approval review` answers them in either way.
1201
1312
 
1202
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
1313
+ --window is 60..3600 seconds (default 900); there is no unlimited value. An unanswered request expires with no decision.
1314
+
1315
+ ### `projmux config render`
1316
+
1317
+ Print a generated tmux config to stdout; writes nothing
1318
+
1319
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
1203
1320
 
1204
1321
  Allowed effects:
1205
1322
 
@@ -1213,26 +1330,121 @@ Allowed effects:
1213
1330
  - `domain-effect=null`
1214
1331
 
1215
1332
  ```
1216
- projmux create project --root <absolute-path> [--name <name>] [--label key=value]... [-o <mode>]
1217
- projmux create window [--project <ref> | -p <ref>] [--name <name>] [--label key=value]... [-o <mode>] [-- <payload>]
1218
- projmux create pane [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--create-window] [--all-windows | --primary-window] [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1219
- projmux create agent --provider <provider> [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--window <ref> | -w <ref>]... [--pane <ref>]... [--create-window] [--all-windows | --primary-window] [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1220
- projmux create codex [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--window <ref> | -w <ref>]... [--create-window] [--all-windows | --primary-window] [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1221
- projmux create claude|antigravity [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--window <ref> | -w <ref>]... [--create-window] [--all-windows | --primary-window] [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1222
- projmux create notification --text <s> --target <SESSION[:WINDOW[.PANE]]> [--socket <s>]
1223
- projmux create snapshot
1333
+ projmux config render standalone [--bin <path>]
1334
+ projmux config render app [--bin <path>]
1224
1335
  ```
1225
1336
 
1226
1337
  Subcommands:
1227
1338
 
1228
1339
  | Route | Summary |
1229
1340
  | --- | --- |
1230
- | [`projmux create project`](#projmux-create-project) | Register one exact filesystem path as a Registry Project; no runtime is materialized |
1231
- | [`projmux create window`](#projmux-create-window) | Create a Window and its initial Pane below one Project; the runtime is materialized detached |
1232
- | [`projmux create pane`](#projmux-create-pane) | Create a shell Pane detached on an explicit Pane or the Window's exact shell or Agent anchor |
1233
- | [`projmux create agent`](#projmux-create-agent) | Create an Agent detached on an explicit Pane or the Window's exact shell or Agent anchor; --provider is required |
1341
+ | [`projmux config render standalone`](#projmux-config-render-standalone) | Print the snippet you source from your own tmux.conf |
1342
+ | [`projmux config render app`](#projmux-config-render-app) | Print the config the app-owned projmux tmux server runs from |
1343
+
1344
+ #### `projmux config render standalone`
1345
+
1346
+ Print the snippet you source from your own tmux.conf
1347
+
1348
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
1349
+
1350
+ Allowed effects:
1351
+
1352
+ - `identity=unchanged`
1353
+ - `address=unchanged`
1354
+ - `topology=unchanged`
1355
+ - `desired-state=unchanged`
1356
+ - `runtime=unchanged`
1357
+ - `focus=unchanged`
1358
+ - `cardinality=unchanged`
1359
+ - `domain-effect=null`
1360
+
1361
+ ```
1362
+ projmux config render standalone [--bin <path>]
1363
+ ```
1364
+
1365
+ Canonical spelling: `projmux config render`
1366
+
1367
+ #### `projmux config render app`
1368
+
1369
+ Print the config the app-owned projmux tmux server runs from
1370
+
1371
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
1372
+
1373
+ Allowed effects:
1374
+
1375
+ - `identity=unchanged`
1376
+ - `address=unchanged`
1377
+ - `topology=unchanged`
1378
+ - `desired-state=unchanged`
1379
+ - `runtime=unchanged`
1380
+ - `focus=unchanged`
1381
+ - `cardinality=unchanged`
1382
+ - `domain-effect=null`
1383
+
1384
+ ```
1385
+ projmux config render app [--bin <path>]
1386
+ ```
1387
+
1388
+ Canonical spelling: `projmux config render`
1389
+
1390
+ ### `projmux config apply`
1391
+
1392
+ Write the generated app tmux config and reload the live projmux server
1393
+
1394
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
1395
+
1396
+ Allowed effects:
1397
+
1398
+ - `identity=unchanged`
1399
+ - `address=unchanged`
1400
+ - `topology=unchanged`
1401
+ - `desired-state=unchanged`
1402
+ - `runtime=unchanged`
1403
+ - `focus=unchanged`
1404
+ - `cardinality=unchanged`
1405
+ - `domain-effect=null`
1406
+
1407
+ ```
1408
+ projmux config apply [--bin <path>] [--config <path>] [--socket <name>] [--no-reload]
1409
+ ```
1410
+
1411
+ ## `projmux create`
1412
+
1413
+ Create Projmux resources
1414
+
1415
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
1416
+
1417
+ Allowed effects:
1418
+
1419
+ - `identity=unchanged`
1420
+ - `address=unchanged`
1421
+ - `topology=unchanged`
1422
+ - `desired-state=unchanged`
1423
+ - `runtime=unchanged`
1424
+ - `focus=unchanged`
1425
+ - `cardinality=unchanged`
1426
+ - `domain-effect=null`
1427
+
1428
+ ```
1429
+ projmux create project --root <absolute-path> [--name <name>] [--label key=value]... [-o <mode>]
1430
+ projmux create window [--project <ref> | -p <ref>] [--provider shell|<provider>] [--creator uid:<agent>] [--name <name>] [--label key=value]... [-o <mode>] [-- <payload>]
1431
+ projmux create pane [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1432
+ projmux create agent [--provider <provider>] [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--model <model>] [--effort <level>] [--instructions <name>] [--profile <name>] [--dialogue-reply-only] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--creator uid:<agent>] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1433
+ projmux create codex [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--model <model>] [--effort <level>] [--instructions <name>] [--profile <name>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--creator uid:<agent>] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1434
+ projmux create claude [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--model <model>] [--effort <level>] [--instructions <name>] [--profile <name>] [--dialogue-reply-only] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--creator uid:<agent>] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1435
+ projmux create antigravity [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--profile <name>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--creator uid:<agent>] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1436
+ projmux create notification --text <s> --target <SESSION[:WINDOW[.PANE]]> [--socket <s>] [--severity info|warn|critical] [--source <source>] [--ttl <seconds>] [--id <id>] [--json]
1437
+ ```
1438
+
1439
+ Subcommands:
1440
+
1441
+ | Route | Summary |
1442
+ | --- | --- |
1443
+ | [`projmux create project`](#projmux-create-project) | Register one exact filesystem path as a Registry Project; no runtime is materialized |
1444
+ | [`projmux create window`](#projmux-create-window) | Create a Window below one Project, opening on a shell Pane or on one Agent; the runtime is materialized detached |
1445
+ | [`projmux create pane`](#projmux-create-pane) | Create a shell Pane detached on an explicit Pane or the Window's exact shell or Agent anchor |
1446
+ | [`projmux create agent`](#projmux-create-agent) | Create an Agent detached on an explicit Pane or the Window's exact shell or Agent anchor; --provider or the selected profile names the provider |
1234
1447
  | [`projmux create notification`](#projmux-create-notification) | Create a pending notification row |
1235
- | [`projmux create snapshot`](#projmux-create-snapshot) | Create a session snapshot |
1236
1448
 
1237
1449
  Provider shortcuts:
1238
1450
 
@@ -1242,7 +1454,7 @@ Provider shortcuts:
1242
1454
  | [`projmux create claude`](#projmux-create-claude) | Provider shortcut for create agent --provider claude |
1243
1455
  | [`projmux create antigravity`](#projmux-create-antigravity) | Provider shortcut for create agent --provider antigravity |
1244
1456
 
1245
- Canonical spelling: `projmux create project`, `projmux create window`, `projmux create pane`, `projmux create agent`, `projmux create notification`, `projmux create snapshot`, `projmux create codex`, `projmux create claude`, `projmux create antigravity`
1457
+ Canonical spelling: `projmux create project`, `projmux create window`, `projmux create pane`, `projmux create agent`, `projmux create notification`, `projmux create codex`, `projmux create claude`, `projmux create antigravity`
1246
1458
 
1247
1459
  ### `projmux create project`
1248
1460
 
@@ -1265,11 +1477,15 @@ Allowed effects:
1265
1477
  projmux create project --root <absolute-path> [--name <name>] [--label key=value]... [-o <mode>]
1266
1478
  ```
1267
1479
 
1480
+ Without `--name` a new Project is named after its root directory, sanitized into a valid name (`my repo` becomes `my-repo`). When that basename is empty (the filesystem root) or another Project already holds it, the Project is named by its exact uid instead; no numbered variant is ever invented.
1481
+
1482
+ An explicit `--name` that another Project holds exits 2 with no Registry write. A root that is already registered reuses its Project; an explicit `--name` there must match the stored name.
1483
+
1268
1484
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `none`, `receipt`
1269
1485
 
1270
1486
  ### `projmux create window`
1271
1487
 
1272
- Create a Window and its initial Pane below one Project; the runtime is materialized detached
1488
+ Create a Window below one Project, opening on a shell Pane or on one Agent; the runtime is materialized detached
1273
1489
 
1274
1490
  Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1275
1491
 
@@ -1285,9 +1501,11 @@ Allowed effects:
1285
1501
  - `domain-effect=null`
1286
1502
 
1287
1503
  ```
1288
- projmux create window [--project <ref> | -p <ref>] [--name <name>] [--label key=value]... [-o <mode>] [-- <payload>]
1504
+ projmux create window [--project <ref> | -p <ref>] [--provider shell|<provider>] [--creator uid:<agent>] [--name <name>] [--label key=value]... [-o <mode>] [-- <payload>]
1289
1505
  ```
1290
1506
 
1507
+ `--creator uid:<agent>` declares the Agent that created this one. It is recorded as `projmux.io/creator-basis=explicit` with `projmux.io/creator-agent` only when no pane chain is observed; an observed pane chain always wins, and a different declaration is reported on stderr. A value that names no Agent refuses the create before anything changes. The record is provenance, never authentication.
1508
+
1291
1509
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
1292
1510
 
1293
1511
  ### `projmux create pane`
@@ -1315,7 +1533,7 @@ Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`
1315
1533
 
1316
1534
  ### `projmux create agent`
1317
1535
 
1318
- Create an Agent detached on an explicit Pane or the Window's exact shell or Agent anchor; --provider is required
1536
+ Create an Agent detached on an explicit Pane or the Window's exact shell or Agent anchor; --provider or the selected profile names the provider
1319
1537
 
1320
1538
  Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1321
1539
 
@@ -1331,37 +1549,24 @@ Allowed effects:
1331
1549
  - `domain-effect=null`
1332
1550
 
1333
1551
  ```
1334
- projmux create agent --provider <provider> [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1552
+ projmux create agent [--provider <provider>] [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--model <model>] [--effort <level>] [--instructions <name>] [--profile <name>] [--dialogue-reply-only] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--creator uid:<agent>] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1335
1553
  ```
1336
1554
 
1337
- Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
1338
-
1339
- ### `projmux create notification`
1340
-
1341
- Create a pending notification row
1555
+ An explicit `--provider` wins, and a profile that names another provider is refused. Without `--provider`, the provider is the one named by the profile that `--profile <name>` or a `role` creation label selects.
1342
1556
 
1343
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
1557
+ When neither decides it -- no profile, `--profile none`, or a profile without `provider` -- the create is refused as requiring `--provider`.
1344
1558
 
1345
- Allowed effects:
1559
+ Codex applies --instructions only when a new Agent starts with a prompt through its native thread. A promptless or --interactive-only Codex create with instructions is refused before creation.
1346
1560
 
1347
- - `identity=unchanged`
1348
- - `address=unchanged`
1349
- - `topology=unchanged`
1350
- - `desired-state=unchanged`
1351
- - `runtime=unchanged`
1352
- - `focus=unchanged`
1353
- - `cardinality=unchanged`
1354
- - `domain-effect=null`
1561
+ `--creator uid:<agent>` declares the Agent that created this one. It is recorded as `projmux.io/creator-basis=explicit` with `projmux.io/creator-agent` only when no pane chain is observed; an observed pane chain always wins, and a different declaration is reported on stderr. A value that names no Agent refuses the create before anything changes. The record is provenance, never authentication.
1355
1562
 
1356
- ```
1357
- projmux create notification --text <s> --target <SESSION[:WINDOW[.PANE]]> [--socket <s>]
1358
- ```
1563
+ Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
1359
1564
 
1360
- ### `projmux create snapshot`
1565
+ ### `projmux create notification`
1361
1566
 
1362
- Create a session snapshot
1567
+ Create a pending notification row
1363
1568
 
1364
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1569
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
1365
1570
 
1366
1571
  Allowed effects:
1367
1572
 
@@ -1375,7 +1580,7 @@ Allowed effects:
1375
1580
  - `domain-effect=null`
1376
1581
 
1377
1582
  ```
1378
- projmux create snapshot
1583
+ projmux create notification --text <s> --target <SESSION[:WINDOW[.PANE]]> [--socket <s>] [--severity info|warn|critical] [--source <source>] [--ttl <seconds>] [--id <id>] [--json]
1379
1584
  ```
1380
1585
 
1381
1586
  ### `projmux create codex`
@@ -1396,9 +1601,13 @@ Allowed effects:
1396
1601
  - `domain-effect=null`
1397
1602
 
1398
1603
  ```
1399
- projmux create codex [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1604
+ projmux create codex [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--model <model>] [--effort <level>] [--instructions <name>] [--profile <name>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--creator uid:<agent>] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1400
1605
  ```
1401
1606
 
1607
+ Profile sandbox and approval apply on native and plain CLI creates. A plain CLI create with approval=untrusted is refused before creating an Agent.
1608
+
1609
+ Instructions from --instructions or a Profile apply when the create includes a prompt and opens a native thread. Promptless and --interactive-only creates with instructions are refused.
1610
+
1402
1611
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
1403
1612
 
1404
1613
  ### `projmux create claude`
@@ -1419,7 +1628,7 @@ Allowed effects:
1419
1628
  - `domain-effect=null`
1420
1629
 
1421
1630
  ```
1422
- projmux create claude [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1631
+ projmux create claude [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--model <model>] [--effort <level>] [--instructions <name>] [--profile <name>] [--dialogue-reply-only] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--creator uid:<agent>] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1423
1632
  ```
1424
1633
 
1425
1634
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
@@ -1442,7 +1651,7 @@ Allowed effects:
1442
1651
  - `domain-effect=null`
1443
1652
 
1444
1653
  ```
1445
- projmux create antigravity [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1654
+ projmux create antigravity [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--profile <name>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--create-window] [--all-windows | --primary-window] [--creator uid:<agent>] [--name <name>] [--label key=value]... [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1446
1655
  ```
1447
1656
 
1448
1657
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
@@ -1465,28 +1674,28 @@ Allowed effects:
1465
1674
  - `domain-effect=null`
1466
1675
 
1467
1676
  ```
1468
- projmux delete project [<ref>...] [--selector key=value]... [--all] [--dry-run] [--yes]
1469
- projmux delete window [<ref>...] [--project <ref> | -p <ref>] [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1470
- projmux delete pane [<ref>...] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1471
- projmux delete agent [<ref>...] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1677
+ projmux delete project [<ref>...] [--project <ref> | -p <ref>] [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1678
+ projmux delete window [<ref>...] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1679
+ projmux delete pane [<ref>...] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1680
+ projmux delete agent [<ref>...] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1681
+ projmux delete notification <id> | --all
1472
1682
  ```
1473
1683
 
1474
1684
  Subcommands:
1475
1685
 
1476
1686
  | Route | Summary |
1477
1687
  | --- | --- |
1478
- | [`projmux delete project`](#projmux-delete-project) | Deprecated alias of unregister project; unregisters Projects and Registry descendants while preserving roots, Git/worktrees, snapshots, and runtime |
1688
+ | [`projmux delete project`](#projmux-delete-project) | Deprecated alias of unregister project; unregisters Projects and Registry descendants while preserving roots, Git/worktrees, and runtime |
1479
1689
  | [`projmux delete window`](#projmux-delete-window) | Delete Registry Windows and every descendant Agent and Pane, killing an exact live tmux mirror when present; no selector inside tmux means the active Window, and --all means every Window in the registry |
1480
1690
  | [`projmux delete pane`](#projmux-delete-pane) | Delete Panes; an Agent-owned current Pane leaves its Agent Offline; no selector inside tmux means the active Pane, and --all means every Pane in the registry |
1481
1691
  | [`projmux delete agent`](#projmux-delete-agent) | Delete Agents and their managed Panes; no selector inside tmux means the active Agent, and --all means every Agent in the registry |
1482
1692
  | [`projmux delete notification`](#projmux-delete-notification) | Delete pending notification rows |
1483
- | [`projmux delete snapshot`](#projmux-delete-snapshot) | Delete saved session snapshots |
1484
1693
 
1485
- Canonical spelling: `projmux unregister project`, `projmux delete window`, `projmux delete pane`, `projmux delete agent`, `projmux delete notification`, `projmux delete snapshot`
1694
+ Canonical spelling: `projmux unregister project`, `projmux delete window`, `projmux delete pane`, `projmux delete agent`, `projmux delete notification`
1486
1695
 
1487
1696
  ### `projmux delete project`
1488
1697
 
1489
- Deprecated alias of unregister project; unregisters Projects and Registry descendants while preserving roots, Git/worktrees, snapshots, and runtime
1698
+ Deprecated alias of unregister project; unregisters Projects and Registry descendants while preserving roots, Git/worktrees, and runtime
1490
1699
 
1491
1700
  Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1492
1701
 
@@ -1502,7 +1711,7 @@ Allowed effects:
1502
1711
  - `domain-effect=null`
1503
1712
 
1504
1713
  ```
1505
- projmux delete project [<ref>...] [--selector key=value]... [--all] [--dry-run] [--yes]
1714
+ projmux delete project [<ref>...] [--project <ref> | -p <ref>] [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1506
1715
  ```
1507
1716
 
1508
1717
  Aliases: `projects`
@@ -1527,7 +1736,7 @@ Allowed effects:
1527
1736
  - `domain-effect=null`
1528
1737
 
1529
1738
  ```
1530
- projmux delete window [<ref>...] [--project <ref> | -p <ref>] [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1739
+ projmux delete window [<ref>...] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1531
1740
  ```
1532
1741
 
1533
1742
  Aliases: `windows`
@@ -1550,11 +1759,13 @@ Allowed effects:
1550
1759
  - `domain-effect=null`
1551
1760
 
1552
1761
  ```
1553
- projmux delete pane [<ref>...] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1762
+ projmux delete pane [<ref>...] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1554
1763
  ```
1555
1764
 
1556
1765
  Aliases: `panes`
1557
1766
 
1767
+ A selector that resolves to exactly one Pane deletes it without confirmation. No selector (the active Pane), --all, or several Panes need --yes, or a yes at the terminal prompt; without a terminal the delete is refused with exit 2. --dry-run only prints the plan.
1768
+
1558
1769
  ### `projmux delete agent`
1559
1770
 
1560
1771
  Delete Agents and their managed Panes; no selector inside tmux means the active Agent, and --all means every Agent in the registry
@@ -1573,7 +1784,7 @@ Allowed effects:
1573
1784
  - `domain-effect=null`
1574
1785
 
1575
1786
  ```
1576
- projmux delete agent [<ref>...] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1787
+ projmux delete agent [<ref>...] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
1577
1788
  ```
1578
1789
 
1579
1790
  Aliases: `agents`
@@ -1596,34 +1807,11 @@ Allowed effects:
1596
1807
  - `domain-effect=null`
1597
1808
 
1598
1809
  ```
1599
- projmux delete notification
1810
+ projmux delete notification <id> | --all
1600
1811
  ```
1601
1812
 
1602
1813
  Aliases: `notifications`
1603
1814
 
1604
- ### `projmux delete snapshot`
1605
-
1606
- Delete saved session snapshots
1607
-
1608
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
1609
-
1610
- Allowed effects:
1611
-
1612
- - `identity=unchanged`
1613
- - `address=unchanged`
1614
- - `topology=unchanged`
1615
- - `desired-state=unchanged`
1616
- - `runtime=unchanged`
1617
- - `focus=unchanged`
1618
- - `cardinality=unchanged`
1619
- - `domain-effect=null`
1620
-
1621
- ```
1622
- projmux delete snapshot
1623
- ```
1624
-
1625
- Aliases: `snapshots`
1626
-
1627
1815
  ## `projmux describe`
1628
1816
 
1629
1817
  Describe one Projmux resource
@@ -1642,10 +1830,10 @@ Allowed effects:
1642
1830
  - `domain-effect=null`
1643
1831
 
1644
1832
  ```
1645
- projmux describe project [<ref>] [--project <ref> | -p <ref>] [-o <mode>]
1646
- projmux describe window [<ref>] [--project <ref> | -p <ref>] [-o <mode>]
1647
- projmux describe pane [<ref>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [-o <mode>]
1648
- projmux describe agent [<ref>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [-o <mode>]
1833
+ projmux describe project [<ref>] [--project <ref> | -p <ref>] [--selector key=value]... [-o <mode>]
1834
+ projmux describe window [<ref>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o <mode>]
1835
+ projmux describe pane [<ref>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [-o <mode>]
1836
+ projmux describe agent [<ref>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o <mode>]
1649
1837
  ```
1650
1838
 
1651
1839
  Subcommands:
@@ -1677,7 +1865,7 @@ Allowed effects:
1677
1865
  - `domain-effect=null`
1678
1866
 
1679
1867
  ```
1680
- projmux describe project [<ref>] [--project <ref> | -p <ref>] [-o <mode>]
1868
+ projmux describe project [<ref>] [--project <ref> | -p <ref>] [--selector key=value]... [-o <mode>]
1681
1869
  ```
1682
1870
 
1683
1871
  Aliases: `projects`
@@ -1702,7 +1890,7 @@ Allowed effects:
1702
1890
  - `domain-effect=null`
1703
1891
 
1704
1892
  ```
1705
- projmux describe window [<ref>] [--project <ref> | -p <ref>] [-o <mode>]
1893
+ projmux describe window [<ref>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o <mode>]
1706
1894
  ```
1707
1895
 
1708
1896
  Aliases: `windows`
@@ -1727,7 +1915,7 @@ Allowed effects:
1727
1915
  - `domain-effect=null`
1728
1916
 
1729
1917
  ```
1730
- projmux describe pane [<ref>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [-o <mode>]
1918
+ projmux describe pane [<ref>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [-o <mode>]
1731
1919
  ```
1732
1920
 
1733
1921
  Aliases: `panes`
@@ -1752,7 +1940,7 @@ Allowed effects:
1752
1940
  - `domain-effect=null`
1753
1941
 
1754
1942
  ```
1755
- projmux describe agent [<ref>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [-o <mode>]
1943
+ projmux describe agent [<ref>] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o <mode>]
1756
1944
  ```
1757
1945
 
1758
1946
  Aliases: `agents`
@@ -1798,7 +1986,7 @@ Allowed effects:
1798
1986
  - `domain-effect=null`
1799
1987
 
1800
1988
  ```
1801
- projmux diagnostics log [--json] [--tail <n>]
1989
+ projmux diagnostics log [--json] [--tail <n>] [--level info|warn|error] [--component <name>] [--path]
1802
1990
  projmux diagnostics agent-hook [--tail <n>] [--json] [--path]
1803
1991
  projmux diagnostics report [--output <path>]
1804
1992
  ```
@@ -1831,7 +2019,7 @@ Allowed effects:
1831
2019
  - `domain-effect=null`
1832
2020
 
1833
2021
  ```
1834
- projmux diagnostics log
2022
+ projmux diagnostics log [--json] [--tail <n>] [--level info|warn|error] [--component <name>] [--path]
1835
2023
  ```
1836
2024
 
1837
2025
  ### `projmux diagnostics agent-hook`
@@ -1873,7 +2061,7 @@ Allowed effects:
1873
2061
  - `domain-effect=null`
1874
2062
 
1875
2063
  ```
1876
- projmux diagnostics report
2064
+ projmux diagnostics report [--output <path>]
1877
2065
  ```
1878
2066
 
1879
2067
  ## `projmux focus`
@@ -1894,9 +2082,11 @@ Allowed effects:
1894
2082
  - `domain-effect=null`
1895
2083
 
1896
2084
  ```
1897
- projmux focus project <ref>
1898
- projmux focus window <ref> {--project <ref> | -p <ref>}
1899
- projmux focus pane <ref> {--project <ref> | -p <ref>} {--window <ref> | -w <ref>}
2085
+ projmux focus project <ref> [--socket <path>] [--client <tty>] [--source <source>] [--kind <kind>] [--json]
2086
+ projmux focus window <ref> {--project <ref> | -p <ref>} [--socket <path>] [--client <tty>] [--source <source>] [--kind <kind>] [--json]
2087
+ projmux focus window uid:<uid> [--project <ref> | -p <ref>] [--socket <path>] [--client <tty>] [--source <source>] [--kind <kind>] [--json]
2088
+ projmux focus pane <ref> {--project <ref> | -p <ref>} {--window <ref> | -w <ref>} [--socket <path>] [--client <tty>] [--source <source>] [--kind <kind>] [--json]
2089
+ projmux focus pane uid:<uid> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>] [--socket <path>] [--client <tty>] [--source <source>] [--kind <kind>] [--json]
1900
2090
  ```
1901
2091
 
1902
2092
  Subcommands:
@@ -1927,9 +2117,11 @@ Allowed effects:
1927
2117
  - `domain-effect=null`
1928
2118
 
1929
2119
  ```
1930
- projmux focus project <ref> [--socket <path>] [--client <tty>] [--json]
2120
+ projmux focus project <ref> [--socket <path>] [--client <tty>] [--source <source>] [--kind <kind>] [--json]
1931
2121
  ```
1932
2122
 
2123
+ `<ref>` is the live tmux session name, or `uid:<uid>` for a Registry Project, which resolves to its `status.session.name`. A `uid:` ref uses the Project's recorded socket; an explicit `--socket` naming another server exits 2. The resolved session must still be live.
2124
+
1933
2125
  ### `projmux focus window`
1934
2126
 
1935
2127
  Move the current client to an already-live Window in an exact live root session; never materializes
@@ -1948,9 +2140,14 @@ Allowed effects:
1948
2140
  - `domain-effect=null`
1949
2141
 
1950
2142
  ```
1951
- projmux focus window <ref> {--project <ref> | -p <ref>} [--socket <path>] [--client <tty>] [--json]
2143
+ projmux focus window <ref> {--project <ref> | -p <ref>} [--socket <path>] [--client <tty>] [--source <source>] [--kind <kind>] [--json]
2144
+ projmux focus window uid:<uid> [--project <ref> | -p <ref>] [--socket <path>] [--client <tty>] [--source <source>] [--kind <kind>] [--json]
1952
2145
  ```
1953
2146
 
2147
+ A plain `<ref>` is a live window name or `@id` and requires `--project`. `uid:<uid>` names a Registry Window, which resolves to its `status.runtimeID` inside its owning Project's session, so `--project` is optional; when given it must be that Project (`uid:` or its session name) or the route exits 2. `--project uid:<uid>` also works with a plain `<ref>`.
2148
+
2149
+ A `uid:` resolution uses the Project's recorded socket; an explicit `--socket` naming another server exits 2. The resolved window must still be live.
2150
+
1954
2151
  ### `projmux focus pane`
1955
2152
 
1956
2153
  Move the current client to an already-live Pane in an exact live root session; never materializes
@@ -1969,9 +2166,14 @@ Allowed effects:
1969
2166
  - `domain-effect=null`
1970
2167
 
1971
2168
  ```
1972
- projmux focus pane <ref> {--project <ref> | -p <ref>} {--window <ref> | -w <ref>} [--socket <path>] [--json]
2169
+ projmux focus pane <ref> {--project <ref> | -p <ref>} {--window <ref> | -w <ref>} [--socket <path>] [--client <tty>] [--source <source>] [--kind <kind>] [--json]
2170
+ projmux focus pane uid:<uid> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>] [--socket <path>] [--client <tty>] [--source <source>] [--kind <kind>] [--json]
1973
2171
  ```
1974
2172
 
2173
+ A plain `<ref>` is a live pane name or `%id` and requires `--project` and `--window`. `uid:<uid>` names a Registry Pane, which resolves to its `status.activation.runtimeID` inside its owning Window and Project, so both flags are optional; when given they must match that owner chain or the route exits 2. `--project` and `--window` also accept `uid:<uid>` with a plain `<ref>`.
2174
+
2175
+ A `uid:` resolution uses the Project's recorded socket; an explicit `--socket` naming another server exits 2. The resolved pane must still be live.
2176
+
1975
2177
  ## `projmux get`
1976
2178
 
1977
2179
  Read Projmux resources by selector
@@ -1995,8 +2197,9 @@ projmux get windows [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
1995
2197
  projmux get panes [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [--all-projects | -A] [-o <mode>]
1996
2198
  projmux get agents [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [--all-projects | -A] [-o <mode>]
1997
2199
  projmux get pane --current -o cwd
1998
- projmux get pane [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [-o <mode>]
2200
+ projmux get pane [--current] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [-o <mode>]
1999
2201
  projmux get runtime sessions|windows|panes [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2202
+ projmux get notifications [--json] [--live] [--limit <n>] [--ui table|sidebar] [--client <tty>] [--severity <severity>]... [--source <source>]...
2000
2203
  ```
2001
2204
 
2002
2205
  Subcommands:
@@ -2009,10 +2212,9 @@ Subcommands:
2009
2212
  | [`projmux get agents`](#projmux-get-agents) | List Agent resources as NAME STATUS ACTIONS AGE; route-implied KIND is omitted, shifting stdout positions; -o wide retains KIND and diagnostics, and -o json retains kind and invocation context; inside tmux defaults to the active managed root, and --all-projects lists the whole Registry |
2010
2213
  | [`projmux get runtime`](#projmux-get-runtime) | List every tmux Session, Window, and Pane on one exact server with its attribution |
2011
2214
  | [`projmux get notifications`](#projmux-get-notifications) | List pending notification rows |
2012
- | [`projmux get snapshots`](#projmux-get-snapshots) | List saved session snapshots |
2013
2215
  | [`projmux get pane`](#projmux-get-pane) | Read one Pane resource; with no selector inside tmux, the active Pane |
2014
2216
 
2015
- Canonical spelling: `projmux get projects`, `projmux get windows`, `projmux get panes`, `projmux get agents`, `projmux get runtime sessions`, `projmux get runtime windows`, `projmux get runtime panes`, `projmux get notifications`, `projmux get snapshots`, `projmux get pane`
2217
+ Canonical spelling: `projmux get projects`, `projmux get windows`, `projmux get panes`, `projmux get agents`, `projmux get runtime sessions`, `projmux get runtime windows`, `projmux get runtime panes`, `projmux get notifications`, `projmux get pane`
2016
2218
 
2017
2219
  ### `projmux get projects`
2018
2220
 
@@ -2232,34 +2434,11 @@ Allowed effects:
2232
2434
  - `domain-effect=null`
2233
2435
 
2234
2436
  ```
2235
- projmux get notifications
2437
+ projmux get notifications [--json] [--live] [--limit <n>] [--ui table|sidebar] [--client <tty>] [--severity <severity>]... [--source <source>]...
2236
2438
  ```
2237
2439
 
2238
2440
  Aliases: `notification`
2239
2441
 
2240
- ### `projmux get snapshots`
2241
-
2242
- List saved session snapshots
2243
-
2244
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2245
-
2246
- Allowed effects:
2247
-
2248
- - `identity=unchanged`
2249
- - `address=unchanged`
2250
- - `topology=unchanged`
2251
- - `desired-state=unchanged`
2252
- - `runtime=unchanged`
2253
- - `focus=unchanged`
2254
- - `cardinality=zero-or-more`
2255
- - `domain-effect=null`
2256
-
2257
- ```
2258
- projmux get snapshots
2259
- ```
2260
-
2261
- Aliases: `snapshot`
2262
-
2263
2442
  ### `projmux get pane`
2264
2443
 
2265
2444
  Read one Pane resource; with no selector inside tmux, the active Pane
@@ -2303,9 +2482,16 @@ Allowed effects:
2303
2482
  - `domain-effect=null`
2304
2483
 
2305
2484
  ```
2306
- projmux hook list|edit|validate|trust|untrust
2485
+ projmux hook list [--global | --project | --effective]
2486
+ projmux hook edit [--global | --project] [--editor] <event>
2487
+ projmux hook validate
2488
+ projmux hook trust [<project>]
2489
+ projmux hook untrust [<project>]
2307
2490
  ```
2308
2491
 
2492
+ Events:
2493
+ post-attach, post-create, pre-create, send-noti
2494
+
2309
2495
  Subcommands:
2310
2496
 
2311
2497
  | Route | Summary |
@@ -2336,7 +2522,7 @@ Allowed effects:
2336
2522
  - `domain-effect=null`
2337
2523
 
2338
2524
  ```
2339
- projmux hook list
2525
+ projmux hook list [--global | --project | --effective]
2340
2526
  ```
2341
2527
 
2342
2528
  ### `projmux hook edit`
@@ -2357,7 +2543,7 @@ Allowed effects:
2357
2543
  - `domain-effect=null`
2358
2544
 
2359
2545
  ```
2360
- projmux hook edit
2546
+ projmux hook edit [--global | --project] [--editor] <event>
2361
2547
  ```
2362
2548
 
2363
2549
  ### `projmux hook validate`
@@ -2399,7 +2585,7 @@ Allowed effects:
2399
2585
  - `domain-effect=null`
2400
2586
 
2401
2587
  ```
2402
- projmux hook trust
2588
+ projmux hook trust [<project>]
2403
2589
  ```
2404
2590
 
2405
2591
  ### `projmux hook untrust`
@@ -2420,12 +2606,12 @@ Allowed effects:
2420
2606
  - `domain-effect=null`
2421
2607
 
2422
2608
  ```
2423
- projmux hook untrust
2609
+ projmux hook untrust [<project>]
2424
2610
  ```
2425
2611
 
2426
- ## `projmux notification`
2612
+ ## `projmux label`
2427
2613
 
2428
- Manage pending notification workflow state
2614
+ Set or remove Projmux resource metadata.labels after creation
2429
2615
 
2430
2616
  Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2431
2617
 
@@ -2441,24 +2627,28 @@ Allowed effects:
2441
2627
  - `domain-effect=null`
2442
2628
 
2443
2629
  ```
2444
- projmux notification ack <id> | --all
2445
- projmux notification reconcile [--json]
2630
+ projmux label project [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--selector key=value]...
2631
+ projmux label window [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
2632
+ projmux label pane [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]...
2633
+ projmux label agent [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
2446
2634
  ```
2447
2635
 
2448
2636
  Subcommands:
2449
2637
 
2450
2638
  | Route | Summary |
2451
2639
  | --- | --- |
2452
- | [`projmux notification ack`](#projmux-notification-ack) | Acknowledge notification rows |
2453
- | [`projmux notification reconcile`](#projmux-notification-reconcile) | Reconcile the notification queue against live targets |
2640
+ | [`projmux label project`](#projmux-label-project) | Set or remove Project labels; with no selector inside tmux, the active Project |
2641
+ | [`projmux label window`](#projmux-label-window) | Set or remove Window labels; inside tmux a reference resolves within the active Project or ControlSession and no selector means the active Window |
2642
+ | [`projmux label pane`](#projmux-label-pane) | Set or remove Pane labels; inside tmux a reference resolves within the active Project or ControlSession and no selector means the active Pane |
2643
+ | [`projmux label agent`](#projmux-label-agent) | Set or remove Agent labels within the active Project or ControlSession without changing its name, topic, provider, or managed Pane |
2454
2644
 
2455
- Canonical spelling: `projmux notification ack`, `projmux notification reconcile`
2645
+ Canonical spelling: `projmux label project`, `projmux label window`, `projmux label pane`, `projmux label agent`
2456
2646
 
2457
- ### `projmux notification ack`
2647
+ ### `projmux label project`
2458
2648
 
2459
- Acknowledge notification rows
2649
+ Set or remove Project labels; with no selector inside tmux, the active Project
2460
2650
 
2461
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2651
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2462
2652
 
2463
2653
  Allowed effects:
2464
2654
 
@@ -2468,18 +2658,20 @@ Allowed effects:
2468
2658
  - `desired-state=unchanged`
2469
2659
  - `runtime=unchanged`
2470
2660
  - `focus=unchanged`
2471
- - `cardinality=unchanged`
2661
+ - `cardinality=exact-one`
2472
2662
  - `domain-effect=null`
2473
2663
 
2474
2664
  ```
2475
- projmux notification ack <id> | --all
2665
+ projmux label project [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--selector key=value]...
2476
2666
  ```
2477
2667
 
2478
- ### `projmux notification reconcile`
2668
+ Aliases: `projects`
2479
2669
 
2480
- Reconcile the notification queue against live targets
2670
+ ### `projmux label window`
2481
2671
 
2482
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2672
+ Set or remove Window labels; inside tmux a reference resolves within the active Project or ControlSession and no selector means the active Window
2673
+
2674
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2483
2675
 
2484
2676
  Allowed effects:
2485
2677
 
@@ -2489,18 +2681,20 @@ Allowed effects:
2489
2681
  - `desired-state=unchanged`
2490
2682
  - `runtime=unchanged`
2491
2683
  - `focus=unchanged`
2492
- - `cardinality=unchanged`
2684
+ - `cardinality=exact-one`
2493
2685
  - `domain-effect=null`
2494
2686
 
2495
2687
  ```
2496
- projmux notification reconcile [--json]
2688
+ projmux label window [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
2497
2689
  ```
2498
2690
 
2499
- ## `projmux open`
2691
+ Aliases: `windows`
2500
2692
 
2501
- Open a Project runtime and move the current client to it
2693
+ ### `projmux label pane`
2502
2694
 
2503
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2695
+ Set or remove Pane labels; inside tmux a reference resolves within the active Project or ControlSession and no selector means the active Pane
2696
+
2697
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2504
2698
 
2505
2699
  Allowed effects:
2506
2700
 
@@ -2510,26 +2704,20 @@ Allowed effects:
2510
2704
  - `desired-state=unchanged`
2511
2705
  - `runtime=unchanged`
2512
2706
  - `focus=unchanged`
2513
- - `cardinality=unchanged`
2707
+ - `cardinality=exact-one`
2514
2708
  - `domain-effect=null`
2515
2709
 
2516
2710
  ```
2517
- projmux open project <ref> [-o receipt|none]
2711
+ projmux label pane [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]...
2518
2712
  ```
2519
2713
 
2520
- Subcommands:
2521
-
2522
- | Route | Summary |
2523
- | --- | --- |
2524
- | [`projmux open project`](#projmux-open-project) | Materialize an offline Project runtime when needed and move the current tmux client to it; outside tmux it refuses and points at attach |
2525
-
2526
- Canonical spelling: `projmux open project`
2714
+ Aliases: `panes`
2527
2715
 
2528
- ### `projmux open project`
2716
+ ### `projmux label agent`
2529
2717
 
2530
- Materialize an offline Project runtime when needed and move the current tmux client to it; outside tmux it refuses and points at attach
2718
+ Set or remove Agent labels within the active Project or ControlSession without changing its name, topic, provider, or managed Pane
2531
2719
 
2532
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2720
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2533
2721
 
2534
2722
  Allowed effects:
2535
2723
 
@@ -2537,20 +2725,20 @@ Allowed effects:
2537
2725
  - `address=unchanged`
2538
2726
  - `topology=unchanged`
2539
2727
  - `desired-state=unchanged`
2540
- - `runtime=materialized|already-live`
2541
- - `focus=moved-current-client`
2728
+ - `runtime=unchanged`
2729
+ - `focus=unchanged`
2542
2730
  - `cardinality=exact-one`
2543
2731
  - `domain-effect=null`
2544
2732
 
2545
2733
  ```
2546
- projmux open project <ref> [-o receipt|none]
2734
+ projmux label agent [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
2547
2735
  ```
2548
2736
 
2549
- Output modes (`-o`): `receipt`, `none`
2737
+ Aliases: `agents`
2550
2738
 
2551
- ## `projmux pin`
2739
+ ## `projmux notification`
2552
2740
 
2553
- Manage pinned project directories
2741
+ Manage pending notification workflow state
2554
2742
 
2555
2743
  Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2556
2744
 
@@ -2566,20 +2754,22 @@ Allowed effects:
2566
2754
  - `domain-effect=null`
2567
2755
 
2568
2756
  ```
2569
- projmux pin project list|add|remove|toggle|clear
2757
+ projmux notification ack <id> | --all
2758
+ projmux notification reconcile [--json]
2570
2759
  ```
2571
2760
 
2572
2761
  Subcommands:
2573
2762
 
2574
2763
  | Route | Summary |
2575
2764
  | --- | --- |
2576
- | [`projmux pin project`](#projmux-pin-project) | Manage pinned project directories (canonical spelling) |
2765
+ | [`projmux notification ack`](#projmux-notification-ack) | Acknowledge notification rows |
2766
+ | [`projmux notification reconcile`](#projmux-notification-reconcile) | Reconcile the notification queue against live targets |
2577
2767
 
2578
- Canonical spelling: `projmux pin project`
2768
+ Canonical spelling: `projmux notification ack`, `projmux notification reconcile`
2579
2769
 
2580
- ### `projmux pin project`
2770
+ ### `projmux notification ack`
2581
2771
 
2582
- Manage pinned project directories (canonical spelling)
2772
+ Acknowledge notification rows
2583
2773
 
2584
2774
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2585
2775
 
@@ -2595,14 +2785,14 @@ Allowed effects:
2595
2785
  - `domain-effect=null`
2596
2786
 
2597
2787
  ```
2598
- projmux pin project list|add|remove|toggle|clear
2788
+ projmux notification ack <id> | --all
2599
2789
  ```
2600
2790
 
2601
- ## `projmux prune`
2791
+ ### `projmux notification reconcile`
2602
2792
 
2603
- Prune stale Projects, Agents, and snapshots
2793
+ Reconcile the notification queue against live targets
2604
2794
 
2605
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2795
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2606
2796
 
2607
2797
  Allowed effects:
2608
2798
 
@@ -2616,71 +2806,535 @@ Allowed effects:
2616
2806
  - `domain-effect=null`
2617
2807
 
2618
2808
  ```
2619
- projmux prune snapshot [--older-than <duration>]
2620
- projmux prune project --missing --older-than <duration> [--yes]
2621
- projmux prune agent --older-than <duration> [--no-session-ref] [--no-pane] [--exclude <agent-ref>]... [--yes]
2809
+ projmux notification reconcile [--json]
2622
2810
  ```
2623
2811
 
2624
- Subcommands:
2812
+ ## `projmux open`
2625
2813
 
2626
- | Route | Summary |
2627
- | --- | --- |
2628
- | [`projmux prune agent`](#projmux-prune-agent) | Delete Offline or Failed Agents past a bounded age whose session ref or managed Panes are gone; live Panes and Running Agents are never selected |
2629
- | [`projmux prune project`](#projmux-prune-project) | Delete Projects whose spec.root has been missing for a bounded age |
2630
- | [`projmux prune snapshot`](#projmux-prune-snapshot) | Inspect or delete preserved session snapshots (canonical spelling) |
2814
+ Open a Project runtime and move the current client to it
2631
2815
 
2632
- Canonical spelling: `projmux prune agent`, `projmux prune project`, `projmux prune snapshot`
2816
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2633
2817
 
2634
- ### `projmux prune agent`
2818
+ Allowed effects:
2635
2819
 
2636
- Delete Offline or Failed Agents past a bounded age whose session ref or managed Panes are gone; live Panes and Running Agents are never selected
2820
+ - `identity=unchanged`
2821
+ - `address=unchanged`
2822
+ - `topology=unchanged`
2823
+ - `desired-state=unchanged`
2824
+ - `runtime=unchanged`
2825
+ - `focus=unchanged`
2826
+ - `cardinality=unchanged`
2827
+ - `domain-effect=null`
2828
+
2829
+ ```
2830
+ projmux open project <ref> [-o receipt|none]
2831
+ ```
2832
+
2833
+ Subcommands:
2834
+
2835
+ | Route | Summary |
2836
+ | --- | --- |
2837
+ | [`projmux open project`](#projmux-open-project) | Materialize an offline Project runtime when needed and move the current tmux client to it; outside tmux it refuses and points at attach |
2838
+
2839
+ Canonical spelling: `projmux open project`
2840
+
2841
+ ### `projmux open project`
2842
+
2843
+ Materialize an offline Project runtime when needed and move the current tmux client to it; outside tmux it refuses and points at attach
2844
+
2845
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2846
+
2847
+ Allowed effects:
2848
+
2849
+ - `identity=unchanged`
2850
+ - `address=unchanged`
2851
+ - `topology=unchanged`
2852
+ - `desired-state=unchanged`
2853
+ - `runtime=materialized|already-live`
2854
+ - `focus=moved-current-client`
2855
+ - `cardinality=exact-one`
2856
+ - `domain-effect=null`
2857
+
2858
+ ```
2859
+ projmux open project <ref> [-o receipt|none]
2860
+ ```
2861
+
2862
+ Output modes (`-o`): `receipt`, `none`
2863
+
2864
+ ## `projmux instructions`
2865
+
2866
+ List, show, edit, set, and delete Agent instruction files
2867
+
2868
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2869
+
2870
+ Allowed effects:
2871
+
2872
+ - `identity=unchanged`
2873
+ - `address=unchanged`
2874
+ - `topology=unchanged`
2875
+ - `desired-state=unchanged`
2876
+ - `runtime=unchanged`
2877
+ - `focus=unchanged`
2878
+ - `cardinality=unchanged`
2879
+ - `domain-effect=null`
2880
+
2881
+ ```
2882
+ projmux instructions list
2883
+ projmux instructions show <name>
2884
+ projmux instructions edit <name>
2885
+ projmux instructions set <name> [--file <path> | -]
2886
+ projmux instructions delete <name> --yes
2887
+ ```
2888
+
2889
+ Subcommands:
2890
+
2891
+ | Route | Summary |
2892
+ | --- | --- |
2893
+ | [`projmux instructions list`](#projmux-instructions-list) | List every stored instructions with their digest, size, and modification time |
2894
+ | [`projmux instructions show`](#projmux-instructions-show) | Print one instruction's content exactly as stored |
2895
+ | [`projmux instructions edit`](#projmux-instructions-edit) | Edit one instruction in $EDITOR or $VISUAL, creating it when missing |
2896
+ | [`projmux instructions set`](#projmux-instructions-set) | Write one instruction from a file or stdin without an editor |
2897
+ | [`projmux instructions delete`](#projmux-instructions-delete) | Delete one instruction file no profile names; Agents already started with it keep their snapshot |
2898
+
2899
+ Canonical spelling: `projmux instructions list`, `projmux instructions show`, `projmux instructions edit`, `projmux instructions set`, `projmux instructions delete`
2900
+
2901
+ ### `projmux instructions list`
2902
+
2903
+ List every stored instructions with their digest, size, and modification time
2637
2904
 
2638
2905
  Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2639
2906
 
2640
2907
  Allowed effects:
2641
2908
 
2642
- - `identity=removed`
2643
- - `address=released`
2644
- - `topology=removed`
2645
- - `desired-state=removed`
2909
+ - `identity=unchanged`
2910
+ - `address=unchanged`
2911
+ - `topology=unchanged`
2912
+ - `desired-state=unchanged`
2646
2913
  - `runtime=unchanged`
2647
2914
  - `focus=unchanged`
2648
- - `cardinality=zero-or-more`
2915
+ - `cardinality=unchanged`
2649
2916
  - `domain-effect=null`
2650
2917
 
2651
2918
  ```
2652
- projmux prune agent --older-than <duration> [--no-session-ref] [--no-pane] [--exclude <agent-ref>]... [--yes]
2919
+ projmux instructions list
2653
2920
  ```
2654
2921
 
2655
- ### `projmux prune project`
2922
+ ### `projmux instructions show`
2656
2923
 
2657
- Delete Projects whose spec.root has been missing for a bounded age
2924
+ Print one instruction's content exactly as stored
2925
+
2926
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2927
+
2928
+ Allowed effects:
2929
+
2930
+ - `identity=unchanged`
2931
+ - `address=unchanged`
2932
+ - `topology=unchanged`
2933
+ - `desired-state=unchanged`
2934
+ - `runtime=unchanged`
2935
+ - `focus=unchanged`
2936
+ - `cardinality=unchanged`
2937
+ - `domain-effect=null`
2938
+
2939
+ ```
2940
+ projmux instructions show <name>
2941
+ ```
2942
+
2943
+ ### `projmux instructions edit`
2944
+
2945
+ Edit one instruction in $EDITOR or $VISUAL, creating it when missing
2946
+
2947
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2948
+
2949
+ Allowed effects:
2950
+
2951
+ - `identity=unchanged`
2952
+ - `address=unchanged`
2953
+ - `topology=unchanged`
2954
+ - `desired-state=unchanged`
2955
+ - `runtime=unchanged`
2956
+ - `focus=unchanged`
2957
+ - `cardinality=unchanged`
2958
+ - `domain-effect=null`
2959
+
2960
+ ```
2961
+ projmux instructions edit <name>
2962
+ ```
2963
+
2964
+ ### `projmux instructions set`
2965
+
2966
+ Write one instruction from a file or stdin without an editor
2967
+
2968
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2969
+
2970
+ Allowed effects:
2971
+
2972
+ - `identity=unchanged`
2973
+ - `address=unchanged`
2974
+ - `topology=unchanged`
2975
+ - `desired-state=unchanged`
2976
+ - `runtime=unchanged`
2977
+ - `focus=unchanged`
2978
+ - `cardinality=unchanged`
2979
+ - `domain-effect=null`
2980
+
2981
+ ```
2982
+ projmux instructions set <name> [--file <path> | -]
2983
+ ```
2984
+
2985
+ ### `projmux instructions delete`
2986
+
2987
+ Delete one instruction file no profile names; Agents already started with it keep their snapshot
2988
+
2989
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2990
+
2991
+ Allowed effects:
2992
+
2993
+ - `identity=unchanged`
2994
+ - `address=unchanged`
2995
+ - `topology=unchanged`
2996
+ - `desired-state=unchanged`
2997
+ - `runtime=unchanged`
2998
+ - `focus=unchanged`
2999
+ - `cardinality=unchanged`
3000
+ - `domain-effect=null`
3001
+
3002
+ ```
3003
+ projmux instructions delete <name> --yes
3004
+ ```
3005
+
3006
+ ## `projmux profile`
3007
+
3008
+ List, show, set, and delete named Agent profiles
3009
+
3010
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
3011
+
3012
+ Allowed effects:
3013
+
3014
+ - `identity=unchanged`
3015
+ - `address=unchanged`
3016
+ - `topology=unchanged`
3017
+ - `desired-state=unchanged`
3018
+ - `runtime=unchanged`
3019
+ - `focus=unchanged`
3020
+ - `cardinality=unchanged`
3021
+ - `domain-effect=null`
3022
+
3023
+ ```
3024
+ projmux profile list
3025
+ projmux profile show <name>
3026
+ projmux profile set <name> [--file <path> | -]
3027
+ projmux profile delete <name> --yes
3028
+ ```
3029
+
3030
+ Codex applies Profile sandbox and approval on native and CLI lanes. Codex CLI accepts approval=on-request or never; approval=untrusted requires the native lane.
3031
+
3032
+ Subcommands:
3033
+
3034
+ | Route | Summary |
3035
+ | --- | --- |
3036
+ | [`projmux profile list`](#projmux-profile-list) | List every stored profile with its source, the provider, instructions, model, effort, and roles it names, its digest, and validity |
3037
+ | [`projmux profile show`](#projmux-profile-show) | Print one profile's content exactly as stored |
3038
+ | [`projmux profile set`](#projmux-profile-set) | Validate one profile from a file or stdin and write it only when valid |
3039
+ | [`projmux profile delete`](#projmux-profile-delete) | Delete one stored profile file |
3040
+
3041
+ Canonical spelling: `projmux profile list`, `projmux profile show`, `projmux profile set`, `projmux profile delete`
3042
+
3043
+ ### `projmux profile list`
3044
+
3045
+ List every stored profile with its source, the provider, instructions, model, effort, and roles it names, its digest, and validity
2658
3046
 
2659
3047
  Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2660
3048
 
2661
3049
  Allowed effects:
2662
3050
 
2663
- - `identity=removed`
2664
- - `address=released`
2665
- - `topology=removed`
2666
- - `desired-state=removed`
3051
+ - `identity=unchanged`
3052
+ - `address=unchanged`
3053
+ - `topology=unchanged`
3054
+ - `desired-state=unchanged`
3055
+ - `runtime=unchanged`
3056
+ - `focus=unchanged`
3057
+ - `cardinality=unchanged`
3058
+ - `domain-effect=null`
3059
+
3060
+ ```
3061
+ projmux profile list
3062
+ ```
3063
+
3064
+ ### `projmux profile show`
3065
+
3066
+ Print one profile's content exactly as stored
3067
+
3068
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
3069
+
3070
+ Allowed effects:
3071
+
3072
+ - `identity=unchanged`
3073
+ - `address=unchanged`
3074
+ - `topology=unchanged`
3075
+ - `desired-state=unchanged`
3076
+ - `runtime=unchanged`
3077
+ - `focus=unchanged`
3078
+ - `cardinality=unchanged`
3079
+ - `domain-effect=null`
3080
+
3081
+ ```
3082
+ projmux profile show <name>
3083
+ ```
3084
+
3085
+ ### `projmux profile set`
3086
+
3087
+ Validate one profile from a file or stdin and write it only when valid
3088
+
3089
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
3090
+
3091
+ Allowed effects:
3092
+
3093
+ - `identity=unchanged`
3094
+ - `address=unchanged`
3095
+ - `topology=unchanged`
3096
+ - `desired-state=unchanged`
3097
+ - `runtime=unchanged`
3098
+ - `focus=unchanged`
3099
+ - `cardinality=unchanged`
3100
+ - `domain-effect=null`
3101
+
3102
+ ```
3103
+ projmux profile set <name> [--file <path> | -]
3104
+ ```
3105
+
3106
+ ### `projmux profile delete`
3107
+
3108
+ Delete one stored profile file
3109
+
3110
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
3111
+
3112
+ Allowed effects:
3113
+
3114
+ - `identity=unchanged`
3115
+ - `address=unchanged`
3116
+ - `topology=unchanged`
3117
+ - `desired-state=unchanged`
3118
+ - `runtime=unchanged`
3119
+ - `focus=unchanged`
3120
+ - `cardinality=unchanged`
3121
+ - `domain-effect=null`
3122
+
3123
+ ```
3124
+ projmux profile delete <name> --yes
3125
+ ```
3126
+
3127
+ ## `projmux pin`
3128
+
3129
+ Manage pinned project directories
3130
+
3131
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
3132
+
3133
+ Allowed effects:
3134
+
3135
+ - `identity=unchanged`
3136
+ - `address=unchanged`
3137
+ - `topology=unchanged`
3138
+ - `desired-state=unchanged`
3139
+ - `runtime=unchanged`
3140
+ - `focus=unchanged`
3141
+ - `cardinality=unchanged`
3142
+ - `domain-effect=null`
3143
+
3144
+ ```
3145
+ projmux pin project list [--kind project|candidate]
3146
+ projmux pin project add <dir|uid:uid>
3147
+ projmux pin project remove <dir|uid:uid>
3148
+ projmux pin project toggle <dir|uid:uid>
3149
+ projmux pin project clear
3150
+ projmux pin project migrate [--dry-run]
3151
+ ```
3152
+
3153
+ Subcommands:
3154
+
3155
+ | Route | Summary |
3156
+ | --- | --- |
3157
+ | [`projmux pin project`](#projmux-pin-project) | Manage pinned project directories (canonical spelling) |
3158
+
3159
+ Canonical spelling: `projmux pin project`
3160
+
3161
+ ### `projmux pin project`
3162
+
3163
+ Manage pinned project directories (canonical spelling)
3164
+
3165
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
3166
+
3167
+ Allowed effects:
3168
+
3169
+ - `identity=unchanged`
3170
+ - `address=unchanged`
3171
+ - `topology=unchanged`
3172
+ - `desired-state=unchanged`
3173
+ - `runtime=unchanged`
3174
+ - `focus=unchanged`
3175
+ - `cardinality=unchanged`
3176
+ - `domain-effect=null`
3177
+
3178
+ ```
3179
+ projmux pin project list [--kind project|candidate]
3180
+ projmux pin project add <dir|uid:uid>
3181
+ projmux pin project remove <dir|uid:uid>
3182
+ projmux pin project toggle <dir|uid:uid>
3183
+ projmux pin project clear
3184
+ projmux pin project migrate [--dry-run]
3185
+ ```
3186
+
3187
+ Pins are presentation preferences in two kinds:
3188
+ project a Registry Project uid; its root and name are projected from the Registry
3189
+ candidate a filesystem path that no Registry Project claims
3190
+
3191
+ Discovery roots (workdirs) are a separate collection; manage them in `projmux settings`.
3192
+
3193
+ Subcommands:
3194
+
3195
+ | Route | Summary |
3196
+ | --- | --- |
3197
+ | [`projmux pin project list`](#projmux-pin-project-list) | List every pin as a typed row, optionally limited to one pin kind |
3198
+ | [`projmux pin project add`](#projmux-pin-project-add) | Pin one project directory or Registry Project uid |
3199
+ | [`projmux pin project remove`](#projmux-pin-project-remove) | Unpin one project directory or Registry Project uid |
3200
+ | [`projmux pin project toggle`](#projmux-pin-project-toggle) | Pin or unpin one project directory or Registry Project uid |
3201
+ | [`projmux pin project clear`](#projmux-pin-project-clear) | Remove every pin |
3202
+ | [`projmux pin project migrate`](#projmux-pin-project-migrate) | Store the typed form of a legacy pin file, or report it with --dry-run |
3203
+
3204
+ #### `projmux pin project list`
3205
+
3206
+ List every pin as a typed row, optionally limited to one pin kind
3207
+
3208
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
3209
+
3210
+ Allowed effects:
3211
+
3212
+ - `identity=unchanged`
3213
+ - `address=unchanged`
3214
+ - `topology=unchanged`
3215
+ - `desired-state=unchanged`
3216
+ - `runtime=unchanged`
3217
+ - `focus=unchanged`
3218
+ - `cardinality=unchanged`
3219
+ - `domain-effect=null`
3220
+
3221
+ ```
3222
+ projmux pin project list [--kind project|candidate]
3223
+ ```
3224
+
3225
+ #### `projmux pin project add`
3226
+
3227
+ Pin one project directory or Registry Project uid
3228
+
3229
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
3230
+
3231
+ Allowed effects:
3232
+
3233
+ - `identity=unchanged`
3234
+ - `address=unchanged`
3235
+ - `topology=unchanged`
3236
+ - `desired-state=unchanged`
3237
+ - `runtime=unchanged`
3238
+ - `focus=unchanged`
3239
+ - `cardinality=exact-one`
3240
+ - `domain-effect=null`
3241
+
3242
+ ```
3243
+ projmux pin project add <dir|uid:uid>
3244
+ ```
3245
+
3246
+ #### `projmux pin project remove`
3247
+
3248
+ Unpin one project directory or Registry Project uid
3249
+
3250
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
3251
+
3252
+ Allowed effects:
3253
+
3254
+ - `identity=unchanged`
3255
+ - `address=unchanged`
3256
+ - `topology=unchanged`
3257
+ - `desired-state=unchanged`
3258
+ - `runtime=unchanged`
3259
+ - `focus=unchanged`
3260
+ - `cardinality=exact-one`
3261
+ - `domain-effect=null`
3262
+
3263
+ ```
3264
+ projmux pin project remove <dir|uid:uid>
3265
+ ```
3266
+
3267
+ #### `projmux pin project toggle`
3268
+
3269
+ Pin or unpin one project directory or Registry Project uid
3270
+
3271
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
3272
+
3273
+ Allowed effects:
3274
+
3275
+ - `identity=unchanged`
3276
+ - `address=unchanged`
3277
+ - `topology=unchanged`
3278
+ - `desired-state=unchanged`
3279
+ - `runtime=unchanged`
3280
+ - `focus=unchanged`
3281
+ - `cardinality=exact-one`
3282
+ - `domain-effect=null`
3283
+
3284
+ ```
3285
+ projmux pin project toggle <dir|uid:uid>
3286
+ ```
3287
+
3288
+ #### `projmux pin project clear`
3289
+
3290
+ Remove every pin
3291
+
3292
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
3293
+
3294
+ Allowed effects:
3295
+
3296
+ - `identity=unchanged`
3297
+ - `address=unchanged`
3298
+ - `topology=unchanged`
3299
+ - `desired-state=unchanged`
2667
3300
  - `runtime=unchanged`
2668
3301
  - `focus=unchanged`
2669
3302
  - `cardinality=zero-or-more`
2670
3303
  - `domain-effect=null`
2671
3304
 
2672
3305
  ```
2673
- projmux prune project --missing --older-than <duration> [--yes]
3306
+ projmux pin project clear
2674
3307
  ```
2675
3308
 
2676
- ### `projmux prune snapshot`
3309
+ #### `projmux pin project migrate`
2677
3310
 
2678
- Inspect or delete preserved session snapshots (canonical spelling)
3311
+ Store the typed form of a legacy pin file, or report it with --dry-run
2679
3312
 
2680
3313
  Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2681
3314
 
2682
3315
  Allowed effects:
2683
3316
 
3317
+ - `identity=unchanged`
3318
+ - `address=unchanged`
3319
+ - `topology=unchanged`
3320
+ - `desired-state=unchanged`
3321
+ - `runtime=unchanged`
3322
+ - `focus=unchanged`
3323
+ - `cardinality=zero-or-more`
3324
+ - `domain-effect=null`
3325
+
3326
+ ```
3327
+ projmux pin project migrate [--dry-run]
3328
+ ```
3329
+
3330
+ ## `projmux prune`
3331
+
3332
+ Prune stale Projects and Agents
3333
+
3334
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
3335
+
3336
+ Allowed effects:
3337
+
2684
3338
  - `identity=unchanged`
2685
3339
  - `address=unchanged`
2686
3340
  - `topology=unchanged`
@@ -2691,11 +3345,60 @@ Allowed effects:
2691
3345
  - `domain-effect=null`
2692
3346
 
2693
3347
  ```
2694
- projmux prune snapshot [--older-than <duration>]
2695
- projmux prune snapshot delete <session>...
3348
+ projmux prune project --missing --older-than <duration> [--yes]
3349
+ projmux prune agent --older-than <duration> [--no-session-ref] [--no-pane] [--exclude <agent-ref>]... [--yes]
2696
3350
  ```
2697
3351
 
2698
- Canonical spelling: `projmux delete snapshot`
3352
+ Subcommands:
3353
+
3354
+ | Route | Summary |
3355
+ | --- | --- |
3356
+ | [`projmux prune agent`](#projmux-prune-agent) | Delete Offline or Failed Agents past a bounded age whose session ref or managed Panes are gone; live Panes and Running Agents are never selected |
3357
+ | [`projmux prune project`](#projmux-prune-project) | Delete Projects whose spec.root has been missing for a bounded age |
3358
+
3359
+ Canonical spelling: `projmux prune agent`, `projmux prune project`
3360
+
3361
+ ### `projmux prune agent`
3362
+
3363
+ Delete Offline or Failed Agents past a bounded age whose session ref or managed Panes are gone; live Panes and Running Agents are never selected
3364
+
3365
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
3366
+
3367
+ Allowed effects:
3368
+
3369
+ - `identity=removed`
3370
+ - `address=released`
3371
+ - `topology=removed`
3372
+ - `desired-state=removed`
3373
+ - `runtime=unchanged`
3374
+ - `focus=unchanged`
3375
+ - `cardinality=zero-or-more`
3376
+ - `domain-effect=null`
3377
+
3378
+ ```
3379
+ projmux prune agent --older-than <duration> [--no-session-ref] [--no-pane] [--exclude <agent-ref>]... [--yes]
3380
+ ```
3381
+
3382
+ ### `projmux prune project`
3383
+
3384
+ Delete Projects whose spec.root has been missing for a bounded age
3385
+
3386
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
3387
+
3388
+ Allowed effects:
3389
+
3390
+ - `identity=removed`
3391
+ - `address=released`
3392
+ - `topology=removed`
3393
+ - `desired-state=removed`
3394
+ - `runtime=unchanged`
3395
+ - `focus=unchanged`
3396
+ - `cardinality=zero-or-more`
3397
+ - `domain-effect=null`
3398
+
3399
+ ```
3400
+ projmux prune project --missing --older-than <duration> [--yes]
3401
+ ```
2699
3402
 
2700
3403
  ## `projmux quit`
2701
3404
 
@@ -2736,7 +3439,7 @@ Allowed effects:
2736
3439
  - `domain-effect=null`
2737
3440
 
2738
3441
  ```
2739
- projmux reconcile resources [--dry-run] [--materialize-project <name|uid:uid>] [--socket <name> | --socket-path <absolute>] [-o json]
3442
+ projmux reconcile resources [--dry-run] [--materialize-project <name|uid:uid>] [--import-orphan-mirrors] [--yes] [--socket <name> | --socket-path <absolute>] [-o json]
2740
3443
  projmux reconcile registry [--dry-run] [--source <name|absolute-path>] [--expect-source-checksum <sha256:hex>] [--expect-current-checksum <sha256:hex>] [--socket <name> | --socket-path <absolute>] [-o json]
2741
3444
  ```
2742
3445
 
@@ -2767,9 +3470,11 @@ Allowed effects:
2767
3470
  - `domain-effect=null`
2768
3471
 
2769
3472
  ```
2770
- projmux reconcile resources [--dry-run] [--materialize-project <name|uid:uid>] [--socket <name> | --socket-path <absolute>] [-o json]
3473
+ projmux reconcile resources [--dry-run] [--materialize-project <name|uid:uid>] [--import-orphan-mirrors] [--yes] [--socket <name> | --socket-path <absolute>] [-o json]
2771
3474
  ```
2772
3475
 
3476
+ Output modes (`-o`): `json`
3477
+
2773
3478
  ### `projmux reconcile registry`
2774
3479
 
2775
3480
  Plan Registry state-loss recovery with zero writes, then restore one explicitly named verified source
@@ -2791,6 +3496,8 @@ Allowed effects:
2791
3496
  projmux reconcile registry [--dry-run] [--source <name|absolute-path>] [--expect-source-checksum <sha256:hex>] [--expect-current-checksum <sha256:hex>] [--socket <name> | --socket-path <absolute>] [-o json]
2792
3497
  ```
2793
3498
 
3499
+ Output modes (`-o`): `json`
3500
+
2794
3501
  ## `projmux rebind`
2795
3502
 
2796
3503
  Rebind a Project to a new absolute root without moving files
@@ -2809,7 +3516,7 @@ Allowed effects:
2809
3516
  - `domain-effect=null`
2810
3517
 
2811
3518
  ```
2812
- projmux rebind project [<ref>] [--project <ref> | -p <ref>] --root <absolute-path>
3519
+ projmux rebind project [<ref>] [--project <ref> | -p <ref>] [--selector key=value]... --root <absolute-path>
2813
3520
  ```
2814
3521
 
2815
3522
  Subcommands:
@@ -2838,7 +3545,7 @@ Allowed effects:
2838
3545
  - `domain-effect=null`
2839
3546
 
2840
3547
  ```
2841
- projmux rebind project [<ref>] [--project <ref> | -p <ref>] --root <absolute-path>
3548
+ projmux rebind project [<ref>] [--project <ref> | -p <ref>] [--selector key=value]... --root <absolute-path>
2842
3549
  ```
2843
3550
 
2844
3551
  ## `projmux rename`
@@ -2859,10 +3566,10 @@ Allowed effects:
2859
3566
  - `domain-effect=null`
2860
3567
 
2861
3568
  ```
2862
- projmux rename project [<ref>] [--project <ref> | -p <ref>] --name <name>
2863
- projmux rename window [<ref>] --name <name> [--project <ref> | -p <ref>]
2864
- projmux rename pane [<ref>] --name <name> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
2865
- projmux rename agent [<ref>] --name <name> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
3569
+ projmux rename project [<ref>] [--project <ref> | -p <ref>] [--selector key=value]... --name <name> [-o <mode>]
3570
+ projmux rename window [<ref>] --name <name> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o <mode>]
3571
+ projmux rename pane [<ref>] --name <name> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [-o <mode>]
3572
+ projmux rename agent [<ref>] --name <name> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o <mode>]
2866
3573
  ```
2867
3574
 
2868
3575
  Subcommands:
@@ -2894,7 +3601,7 @@ Allowed effects:
2894
3601
  - `domain-effect=null`
2895
3602
 
2896
3603
  ```
2897
- projmux rename project [<ref>] [--project <ref> | -p <ref>] --name <name>
3604
+ projmux rename project [<ref>] [--project <ref> | -p <ref>] [--selector key=value]... --name <name> [-o <mode>]
2898
3605
  ```
2899
3606
 
2900
3607
  Aliases: `projects`
@@ -2919,7 +3626,7 @@ Allowed effects:
2919
3626
  - `domain-effect=null`
2920
3627
 
2921
3628
  ```
2922
- projmux rename window [<ref>] --name <name> [--project <ref> | -p <ref>]
3629
+ projmux rename window [<ref>] --name <name> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o <mode>]
2923
3630
  ```
2924
3631
 
2925
3632
  Aliases: `windows`
@@ -2944,7 +3651,7 @@ Allowed effects:
2944
3651
  - `domain-effect=null`
2945
3652
 
2946
3653
  ```
2947
- projmux rename pane [<ref>] --name <name> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
3654
+ projmux rename pane [<ref>] --name <name> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [-o <mode>]
2948
3655
  ```
2949
3656
 
2950
3657
  Aliases: `panes`
@@ -2969,7 +3676,7 @@ Allowed effects:
2969
3676
  - `domain-effect=null`
2970
3677
 
2971
3678
  ```
2972
- projmux rename agent [<ref>] --name <name> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
3679
+ projmux rename agent [<ref>] --name <name> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]... [-o <mode>]
2973
3680
  ```
2974
3681
 
2975
3682
  Aliases: `agents`
@@ -2988,63 +3695,13 @@ Allowed effects:
2988
3695
  - `address=unchanged`
2989
3696
  - `topology=unchanged`
2990
3697
  - `desired-state=unchanged`
2991
- - `runtime=unchanged`
2992
- - `focus=unchanged`
2993
- - `cardinality=unchanged`
2994
- - `domain-effect=null`
2995
-
2996
- ```
2997
- projmux resources
2998
- ```
2999
-
3000
- ## `projmux restore`
3001
-
3002
- Project a saved snapshot into one exact closed Project desired state
3003
-
3004
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
3005
-
3006
- Allowed effects:
3007
-
3008
- - `identity=unchanged`
3009
- - `address=unchanged`
3010
- - `topology=unchanged`
3011
- - `desired-state=unchanged`
3012
- - `runtime=unchanged`
3013
- - `focus=unchanged`
3014
- - `cardinality=unchanged`
3015
- - `domain-effect=null`
3016
-
3017
- ```
3018
- projmux restore snapshot --session <name> [--project <ref> | -p <ref>] [--dry-run | --yes] [--client <tmux-client>]
3019
- ```
3020
-
3021
- Subcommands:
3022
-
3023
- | Route | Summary |
3024
- | --- | --- |
3025
- | [`projmux restore snapshot`](#projmux-restore-snapshot) | Project a saved snapshot into one exact closed Project desired state |
3026
-
3027
- Canonical spelling: `projmux restore snapshot`
3028
-
3029
- ### `projmux restore snapshot`
3030
-
3031
- Project a saved snapshot into one exact closed Project desired state
3032
-
3033
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
3034
-
3035
- Allowed effects:
3036
-
3037
- - `identity=unchanged|created|reused|removed|replaced`
3038
- - `address=unchanged|allocated|released`
3039
- - `topology=unchanged|established|removed|replaced`
3040
- - `desired-state=unchanged|created|removed|replaced`
3041
- - `runtime=unchanged|materialized`
3042
- - `focus=unchanged|moved-current-client|attached-caller`
3043
- - `cardinality=unchanged|one-or-more`
3698
+ - `runtime=unchanged`
3699
+ - `focus=unchanged`
3700
+ - `cardinality=unchanged`
3044
3701
  - `domain-effect=null`
3045
3702
 
3046
3703
  ```
3047
- projmux restore snapshot --session <name> [--project <ref> | -p <ref>] [--dry-run | --yes] [--client <tmux-client>]
3704
+ projmux resources
3048
3705
  ```
3049
3706
 
3050
3707
  ## `projmux runtime`
@@ -3065,12 +3722,14 @@ Allowed effects:
3065
3722
  - `domain-effect=null`
3066
3723
 
3067
3724
  ```
3068
- projmux runtime sessions [--ui=popup|sidebar]
3069
- projmux runtime diagnostics [--socket <name> | --socket-path <absolute>] [--ui=popup|sidebar]
3070
- projmux runtime attach [--keep=N] [--fallback=home|ephemeral]
3725
+ projmux runtime sessions [--ui popup|sidebar]
3726
+ projmux runtime diagnostics [--socket <name> | --socket-path <absolute>] [--ui popup|sidebar]
3727
+ projmux runtime attach [--keep <n>] [--fallback home|ephemeral]
3071
3728
  projmux runtime stop [<session>...]
3072
- projmux runtime tag list|toggle|clear
3073
- projmux runtime prune [--keep=N]
3729
+ projmux runtime tag list
3730
+ projmux runtime tag clear
3731
+ projmux runtime tag toggle <name>
3732
+ projmux runtime prune [--keep <n>]
3074
3733
  ```
3075
3734
 
3076
3735
  Subcommands:
@@ -3104,7 +3763,7 @@ Allowed effects:
3104
3763
  - `domain-effect=null`
3105
3764
 
3106
3765
  ```
3107
- projmux runtime sessions
3766
+ projmux runtime sessions [--ui popup|sidebar]
3108
3767
  ```
3109
3768
 
3110
3769
  ### `projmux runtime diagnostics`
@@ -3125,7 +3784,7 @@ Allowed effects:
3125
3784
  - `domain-effect=null`
3126
3785
 
3127
3786
  ```
3128
- projmux runtime diagnostics [--socket <name> | --socket-path <absolute>] [--ui=popup|sidebar]
3787
+ projmux runtime diagnostics [--socket <name> | --socket-path <absolute>] [--ui popup|sidebar]
3129
3788
  ```
3130
3789
 
3131
3790
  ### `projmux runtime attach`
@@ -3146,7 +3805,7 @@ Allowed effects:
3146
3805
  - `domain-effect=null`
3147
3806
 
3148
3807
  ```
3149
- projmux runtime attach
3808
+ projmux runtime attach [--keep <n>] [--fallback home|ephemeral]
3150
3809
  ```
3151
3810
 
3152
3811
  ### `projmux runtime stop`
@@ -3167,7 +3826,7 @@ Allowed effects:
3167
3826
  - `domain-effect=null`
3168
3827
 
3169
3828
  ```
3170
- projmux runtime stop
3829
+ projmux runtime stop [<session>...]
3171
3830
  ```
3172
3831
 
3173
3832
  ### `projmux runtime tag`
@@ -3188,7 +3847,80 @@ Allowed effects:
3188
3847
  - `domain-effect=null`
3189
3848
 
3190
3849
  ```
3191
- projmux runtime tag
3850
+ projmux runtime tag list
3851
+ projmux runtime tag clear
3852
+ projmux runtime tag toggle <name>
3853
+ ```
3854
+
3855
+ Subcommands:
3856
+
3857
+ | Route | Summary |
3858
+ | --- | --- |
3859
+ | [`projmux runtime tag list`](#projmux-runtime-tag-list) | Print the tagged session names, one per line |
3860
+ | [`projmux runtime tag clear`](#projmux-runtime-tag-clear) | Clear the whole tagged session selection |
3861
+ | [`projmux runtime tag toggle`](#projmux-runtime-tag-toggle) | Tag or untag one tmux session name |
3862
+
3863
+ #### `projmux runtime tag list`
3864
+
3865
+ Print the tagged session names, one per line
3866
+
3867
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
3868
+
3869
+ Allowed effects:
3870
+
3871
+ - `identity=unchanged`
3872
+ - `address=unchanged`
3873
+ - `topology=unchanged`
3874
+ - `desired-state=unchanged`
3875
+ - `runtime=unchanged`
3876
+ - `focus=unchanged`
3877
+ - `cardinality=unchanged`
3878
+ - `domain-effect=null`
3879
+
3880
+ ```
3881
+ projmux runtime tag list
3882
+ ```
3883
+
3884
+ #### `projmux runtime tag clear`
3885
+
3886
+ Clear the whole tagged session selection
3887
+
3888
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
3889
+
3890
+ Allowed effects:
3891
+
3892
+ - `identity=unchanged`
3893
+ - `address=unchanged`
3894
+ - `topology=unchanged`
3895
+ - `desired-state=unchanged`
3896
+ - `runtime=unchanged`
3897
+ - `focus=unchanged`
3898
+ - `cardinality=zero-or-more`
3899
+ - `domain-effect=null`
3900
+
3901
+ ```
3902
+ projmux runtime tag clear
3903
+ ```
3904
+
3905
+ #### `projmux runtime tag toggle`
3906
+
3907
+ Tag or untag one tmux session name
3908
+
3909
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
3910
+
3911
+ Allowed effects:
3912
+
3913
+ - `identity=unchanged`
3914
+ - `address=unchanged`
3915
+ - `topology=unchanged`
3916
+ - `desired-state=unchanged`
3917
+ - `runtime=unchanged`
3918
+ - `focus=unchanged`
3919
+ - `cardinality=exact-one`
3920
+ - `domain-effect=null`
3921
+
3922
+ ```
3923
+ projmux runtime tag toggle <name>
3192
3924
  ```
3193
3925
 
3194
3926
  ### `projmux runtime prune`
@@ -3209,7 +3941,7 @@ Allowed effects:
3209
3941
  - `domain-effect=null`
3210
3942
 
3211
3943
  ```
3212
- projmux runtime prune
3944
+ projmux runtime prune [--keep <n>]
3213
3945
  ```
3214
3946
 
3215
3947
  ## `projmux settings`
@@ -3251,8 +3983,8 @@ Allowed effects:
3251
3983
  - `domain-effect=null`
3252
3984
 
3253
3985
  ```
3254
- projmux setup
3255
- projmux setup terminal [terminal] [--apply]
3986
+ projmux setup [--timeout <duration>] [--non-interactive]
3987
+ projmux setup terminal [terminal] [--apply] [--config <path>] [--allow-symlink]
3256
3988
  ```
3257
3989
 
3258
3990
  Subcommands:
@@ -3302,7 +4034,7 @@ Allowed effects:
3302
4034
  - `domain-effect=null`
3303
4035
 
3304
4036
  ```
3305
- projmux shell [--session <name>]
4037
+ projmux shell [--session <name>] [--socket <name>] [--config <path>] [--bin <path>] [--no-install]
3306
4038
  ```
3307
4039
 
3308
4040
  ## `projmux start`
@@ -3427,7 +4159,246 @@ Allowed effects:
3427
4159
  - `domain-effect=null`
3428
4160
 
3429
4161
  ```
3430
- projmux switch [<project>]
4162
+ projmux switch [--ui popup|sidebar] [--anchor <pane>]
4163
+ projmux switch open <path>
4164
+ projmux switch toggle-tag [path]
4165
+ projmux switch toggle-pin [path]
4166
+ projmux switch kill [path]
4167
+ projmux switch preview [--ui popup|sidebar] [path]
4168
+ projmux switch settings
4169
+ projmux switch cycle-pane <path> <next|prev>
4170
+ projmux switch cycle-window <path> <next|prev>
4171
+ projmux switch sidebar-focus <path>
4172
+ projmux switch sidebar-open --path <path> --anchor <pane> [--session <name>] [--mode <mode>] [--query <text>] [--client <client>]
4173
+ ```
4174
+
4175
+ Subcommands:
4176
+
4177
+ | Route | Summary |
4178
+ | --- | --- |
4179
+ | [`projmux switch open`](#projmux-switch-open) | Open the project at a path the way the picker opens a selected row |
4180
+ | [`projmux switch toggle-tag`](#projmux-switch-toggle-tag) | Toggle the picker tag on a project path; no path means the current directory |
4181
+ | [`projmux switch toggle-pin`](#projmux-switch-toggle-pin) | Toggle the pin on a project path; no path means the current directory |
4182
+ | [`projmux switch kill`](#projmux-switch-kill) | Stop the tmux session of a project path; no path means the current directory |
4183
+ | [`projmux switch preview`](#projmux-switch-preview) | Render the picker preview of a project path; no path means the current directory |
4184
+ | [`projmux switch settings`](#projmux-switch-settings) | Open the picker's pin settings menu |
4185
+ | [`projmux switch cycle-pane`](#projmux-switch-cycle-pane) | Advance the picker preview pane cursor of a project path |
4186
+ | [`projmux switch cycle-window`](#projmux-switch-cycle-window) | Advance the picker preview window cursor of a project path |
4187
+ | [`projmux switch sidebar-focus`](#projmux-switch-sidebar-focus) | Move the client to the live session of a project path; a path with no live session does nothing |
4188
+ | [`projmux switch sidebar-open`](#projmux-switch-sidebar-open) | Open a project the sidebar selected, anchored on an exact tmux Pane |
4189
+
4190
+ Canonical spelling: `projmux create project`, `projmux open project`
4191
+
4192
+ ### `projmux switch open`
4193
+
4194
+ Open the project at a path the way the picker opens a selected row
4195
+
4196
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
4197
+
4198
+ Allowed effects:
4199
+
4200
+ - `identity=unchanged|created|reused|replaced`
4201
+ - `address=unchanged|allocated|released`
4202
+ - `topology=unchanged|established|replaced`
4203
+ - `desired-state=unchanged|created|reused|replaced`
4204
+ - `runtime=unchanged|materialized|already-live`
4205
+ - `focus=unchanged|moved-current-client|attached-caller`
4206
+ - `cardinality=unchanged|exact-one`
4207
+ - `domain-effect=null`
4208
+
4209
+ ```
4210
+ projmux switch open <path>
4211
+ ```
4212
+
4213
+ Canonical spelling: `projmux create project`, `projmux open project`
4214
+
4215
+ ### `projmux switch toggle-tag`
4216
+
4217
+ Toggle the picker tag on a project path; no path means the current directory
4218
+
4219
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
4220
+
4221
+ Allowed effects:
4222
+
4223
+ - `identity=unchanged`
4224
+ - `address=unchanged`
4225
+ - `topology=unchanged`
4226
+ - `desired-state=unchanged`
4227
+ - `runtime=unchanged`
4228
+ - `focus=unchanged`
4229
+ - `cardinality=exact-one`
4230
+ - `domain-effect=null`
4231
+
4232
+ ```
4233
+ projmux switch toggle-tag [path]
4234
+ ```
4235
+
4236
+ ### `projmux switch toggle-pin`
4237
+
4238
+ Toggle the pin on a project path; no path means the current directory
4239
+
4240
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
4241
+
4242
+ Allowed effects:
4243
+
4244
+ - `identity=unchanged`
4245
+ - `address=unchanged`
4246
+ - `topology=unchanged`
4247
+ - `desired-state=unchanged`
4248
+ - `runtime=unchanged`
4249
+ - `focus=unchanged`
4250
+ - `cardinality=exact-one`
4251
+ - `domain-effect=null`
4252
+
4253
+ ```
4254
+ projmux switch toggle-pin [path]
4255
+ ```
4256
+
4257
+ ### `projmux switch kill`
4258
+
4259
+ Stop the tmux session of a project path; no path means the current directory
4260
+
4261
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
4262
+
4263
+ Allowed effects:
4264
+
4265
+ - `identity=unchanged`
4266
+ - `address=unchanged`
4267
+ - `topology=unchanged`
4268
+ - `desired-state=unchanged`
4269
+ - `runtime=unchanged|stopped`
4270
+ - `focus=unchanged|moved-current-client`
4271
+ - `cardinality=unchanged|exact-one`
4272
+ - `domain-effect=null`
4273
+
4274
+ ```
4275
+ projmux switch kill [path]
4276
+ ```
4277
+
4278
+ ### `projmux switch preview`
4279
+
4280
+ Render the picker preview of a project path; no path means the current directory
4281
+
4282
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
4283
+
4284
+ Allowed effects:
4285
+
4286
+ - `identity=unchanged`
4287
+ - `address=unchanged`
4288
+ - `topology=unchanged`
4289
+ - `desired-state=unchanged`
4290
+ - `runtime=unchanged`
4291
+ - `focus=unchanged`
4292
+ - `cardinality=unchanged`
4293
+ - `domain-effect=null`
4294
+
4295
+ ```
4296
+ projmux switch preview [--ui popup|sidebar] [path]
4297
+ ```
4298
+
4299
+ ### `projmux switch settings`
4300
+
4301
+ Open the picker's pin settings menu
4302
+
4303
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
4304
+
4305
+ Allowed effects:
4306
+
4307
+ - `identity=unchanged`
4308
+ - `address=unchanged`
4309
+ - `topology=unchanged`
4310
+ - `desired-state=unchanged`
4311
+ - `runtime=unchanged`
4312
+ - `focus=unchanged`
4313
+ - `cardinality=unchanged`
4314
+ - `domain-effect=null`
4315
+
4316
+ ```
4317
+ projmux switch settings
4318
+ ```
4319
+
4320
+ ### `projmux switch cycle-pane`
4321
+
4322
+ Advance the picker preview pane cursor of a project path
4323
+
4324
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
4325
+
4326
+ Allowed effects:
4327
+
4328
+ - `identity=unchanged`
4329
+ - `address=unchanged`
4330
+ - `topology=unchanged`
4331
+ - `desired-state=unchanged`
4332
+ - `runtime=unchanged`
4333
+ - `focus=unchanged`
4334
+ - `cardinality=unchanged`
4335
+ - `domain-effect=null`
4336
+
4337
+ ```
4338
+ projmux switch cycle-pane <path> <next|prev>
4339
+ ```
4340
+
4341
+ ### `projmux switch cycle-window`
4342
+
4343
+ Advance the picker preview window cursor of a project path
4344
+
4345
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
4346
+
4347
+ Allowed effects:
4348
+
4349
+ - `identity=unchanged`
4350
+ - `address=unchanged`
4351
+ - `topology=unchanged`
4352
+ - `desired-state=unchanged`
4353
+ - `runtime=unchanged`
4354
+ - `focus=unchanged`
4355
+ - `cardinality=unchanged`
4356
+ - `domain-effect=null`
4357
+
4358
+ ```
4359
+ projmux switch cycle-window <path> <next|prev>
4360
+ ```
4361
+
4362
+ ### `projmux switch sidebar-focus`
4363
+
4364
+ Move the client to the live session of a project path; a path with no live session does nothing
4365
+
4366
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
4367
+
4368
+ Allowed effects:
4369
+
4370
+ - `identity=unchanged`
4371
+ - `address=unchanged`
4372
+ - `topology=unchanged`
4373
+ - `desired-state=unchanged`
4374
+ - `runtime=unchanged`
4375
+ - `focus=unchanged|moved-current-client`
4376
+ - `cardinality=unchanged|exact-one`
4377
+ - `domain-effect=null`
4378
+
4379
+ ```
4380
+ projmux switch sidebar-focus <path>
4381
+ ```
4382
+
4383
+ ### `projmux switch sidebar-open`
4384
+
4385
+ Open a project the sidebar selected, anchored on an exact tmux Pane
4386
+
4387
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
4388
+
4389
+ Allowed effects:
4390
+
4391
+ - `identity=unchanged|created|reused|replaced`
4392
+ - `address=unchanged|allocated|released`
4393
+ - `topology=unchanged|established|replaced`
4394
+ - `desired-state=unchanged|created|reused|replaced`
4395
+ - `runtime=unchanged|materialized|already-live`
4396
+ - `focus=unchanged|moved-current-client|attached-caller`
4397
+ - `cardinality=unchanged|exact-one`
4398
+ - `domain-effect=null`
4399
+
4400
+ ```
4401
+ projmux switch sidebar-open --path <path> --anchor <pane> [--session <name>] [--mode <mode>] [--query <text>] [--client <client>]
3431
4402
  ```
3432
4403
 
3433
4404
  Canonical spelling: `projmux create project`, `projmux open project`
@@ -3450,20 +4421,20 @@ Allowed effects:
3450
4421
  - `domain-effect=null`
3451
4422
 
3452
4423
  ```
3453
- projmux unregister project [<ref>...] [--selector key=value]... [--all] [--dry-run] [--yes]
4424
+ projmux unregister project [<ref>...] [--project <ref> | -p <ref>] [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
3454
4425
  ```
3455
4426
 
3456
4427
  Subcommands:
3457
4428
 
3458
4429
  | Route | Summary |
3459
4430
  | --- | --- |
3460
- | [`projmux unregister project`](#projmux-unregister-project) | Unregister Projects and their Registry descendants while preserving roots, Git/worktrees, snapshots, and runtime |
4431
+ | [`projmux unregister project`](#projmux-unregister-project) | Unregister Projects and their Registry descendants while preserving roots, Git/worktrees, and runtime |
3461
4432
 
3462
4433
  Canonical spelling: `projmux unregister project`
3463
4434
 
3464
4435
  ### `projmux unregister project`
3465
4436
 
3466
- Unregister Projects and their Registry descendants while preserving roots, Git/worktrees, snapshots, and runtime
4437
+ Unregister Projects and their Registry descendants while preserving roots, Git/worktrees, and runtime
3467
4438
 
3468
4439
  Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
3469
4440
 
@@ -3479,7 +4450,7 @@ Allowed effects:
3479
4450
  - `domain-effect=null`
3480
4451
 
3481
4452
  ```
3482
- projmux unregister project [<ref>...] [--selector key=value]... [--all] [--dry-run] [--yes]
4453
+ projmux unregister project [<ref>...] [--project <ref> | -p <ref>] [--selector key=value]... [--all] [--socket <name> | --socket-path <absolute>] [--dry-run] [--yes]
3483
4454
  ```
3484
4455
 
3485
4456
  Aliases: `projects`
@@ -3502,7 +4473,9 @@ Allowed effects:
3502
4473
  - `domain-effect=null`
3503
4474
 
3504
4475
  ```
3505
- projmux update status|check|apply
4476
+ projmux update status [--json]
4477
+ projmux update check [--json]
4478
+ projmux update apply [--dry-run] [--no-apply]
3506
4479
  ```
3507
4480
 
3508
4481
  Subcommands:
@@ -3533,7 +4506,7 @@ Allowed effects:
3533
4506
  - `domain-effect=null`
3534
4507
 
3535
4508
  ```
3536
- projmux update status
4509
+ projmux update status [--json]
3537
4510
  ```
3538
4511
 
3539
4512
  ### `projmux update check`
@@ -3554,7 +4527,7 @@ Allowed effects:
3554
4527
  - `domain-effect=null`
3555
4528
 
3556
4529
  ```
3557
- projmux update check
4530
+ projmux update check [--json]
3558
4531
  ```
3559
4532
 
3560
4533
  ### `projmux update apply`
@@ -3575,7 +4548,7 @@ Allowed effects:
3575
4548
  - `domain-effect=null`
3576
4549
 
3577
4550
  ```
3578
- projmux update apply
4551
+ projmux update apply [--dry-run] [--no-apply]
3579
4552
  ```
3580
4553
 
3581
4554
  ## `projmux welcome`
@@ -3617,7 +4590,8 @@ Allowed effects:
3617
4590
  - `domain-effect=null`
3618
4591
 
3619
4592
  ```
3620
- projmux window record|recent
4593
+ projmux window record
4594
+ projmux window recent
3621
4595
  ```
3622
4596
 
3623
4597
  Subcommands: