projmux 0.15.2 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 190 route-effect records, including hidden plumbing that the public route sections omit.
42
+ The machine-readable manifest contains 194 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 and enabled-provider 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,17 @@ 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 persona`](#projmux-persona) | canonical | List, show, edit, set, and delete Agent persona files |
77
79
  | [`projmux pin`](#projmux-pin) | canonical | Manage pinned project directories |
78
- | [`projmux prune`](#projmux-prune) | canonical | Prune stale Projects and snapshots |
80
+ | [`projmux prune`](#projmux-prune) | canonical | Prune stale Projects and Agents |
79
81
  | [`projmux quit`](#projmux-quit) | shortcut | Quit the app-owned projmux tmux runtime |
80
82
  | [`projmux reconcile`](#projmux-reconcile) | canonical | Preview or repair Registry and exact tmux resource drift |
81
83
  | [`projmux rebind`](#projmux-rebind) | canonical | Rebind a Project to a new absolute root without moving files |
82
84
  | [`projmux rename`](#projmux-rename) | canonical | Rename a Projmux resource metadata.name |
83
85
  | [`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
86
  | [`projmux runtime`](#projmux-runtime) | canonical | Manage the live and ephemeral tmux runtime inventory |
86
87
  | [`projmux settings`](#projmux-settings) | shortcut | Configure projmux |
87
88
  | [`projmux setup`](#projmux-setup) | canonical | Probe terminal keys or remediate them with setup terminal |
@@ -118,22 +119,23 @@ projmux agent status [get [<agent-ref>] | set <unknown|idle|in_progress|approval
118
119
  projmux agent topic get|clear [<agent-ref>] [--agent <ref>]
119
120
  projmux agent topic set <text> [<agent-ref>] [--agent <ref>]
120
121
  projmux agent resume <ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
122
+ projmux agent persona attach <agent-ref> <persona> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--yes] [--dry-run] [--socket <name> | --socket-path <absolute>] [-o json]
123
+ projmux agent persona detach <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--yes] [--dry-run] [--socket <name> | --socket-path <absolute>] [-o json]
121
124
  projmux agent turn start|steer <agent-ref> -- <text>
122
125
  projmux agent turn interrupt <agent-ref>
123
126
  projmux agent approval review <agent-ref> [--request <normalized-id>]
124
127
  projmux agent review [<agent-ref>] [--agent <ref>] [--base <branch> | --commit <sha> | --instructions <text>]
125
128
  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>
129
+ projmux agent usage [--model <codex|claude|all>] [--window <name>] [--json] [--force]
132
130
  projmux agent capabilities [<agent-ref> | --provider <codex|claude|antigravity>] [-o json]
133
131
  projmux agent message send <agent-ref> [--source <agent-ref>] [--message-ref <ref>] [--reply-to <ref>] [--ttl <duration>] -- <text>
134
132
  projmux agent message status <message-ref> [-o json]
135
133
  projmux agent message qualify <claude-agent-ref> --evidence <absolute-private-json> --confirm-isolated-provider-push -o json
136
134
  projmux agent wait <agent-ref> [--until idle] [--timeout <duration>] [-o json]
135
+ projmux agent question enable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
136
+ projmux agent question disable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
137
+ projmux agent question list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [-o json]
138
+ 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>]...
137
139
  ```
138
140
 
139
141
  Subcommands:
@@ -143,17 +145,18 @@ Subcommands:
143
145
  | [`projmux agent status`](#projmux-agent-status) | Read or set semantic Agent interaction independently of lifecycle |
144
146
  | [`projmux agent topic`](#projmux-agent-topic) | Read, set, or clear one exact Agent topic annotation |
145
147
  | [`projmux agent resume`](#projmux-agent-resume) | Rebind an Offline or Failed Agent detached on its Window's exact shell or Agent anchor |
148
+ | [`projmux agent persona`](#projmux-agent-persona) | Attach or detach a persona on one exact Claude Agent and resume it on the same conversation |
146
149
  | [`projmux agent turn`](#projmux-agent-turn) | Send, steer, or interrupt one exact native Codex turn |
147
150
  | [`projmux agent approval`](#projmux-agent-approval) | Review one exact pending native Codex approval |
148
151
  | [`projmux agent review`](#projmux-agent-review) | Start a native review on an exact-bound Codex Agent |
149
152
  | [`projmux agent integrate`](#projmux-agent-integrate) | Install, remove, or preview provider hooks and tmux-bell integration |
150
153
  | [`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
154
  | [`projmux agent capabilities`](#projmux-agent-capabilities) | Read static provider support or one exact Agent's Registry-backed runtime eligibility |
153
155
  | [`projmux agent message`](#projmux-agent-message) | Exchange bounded untrusted coordination messages; --source selects a source Agent anchor, not caller authentication (default: active Pane) |
154
156
  | [`projmux agent wait`](#projmux-agent-wait) | Wait read-only for one exact Agent's Registry-backed idle observation |
157
+ | [`projmux agent question`](#projmux-agent-question) | Answer one exact opted-in Claude Agent's AskUserQuestion prompts from the command line |
155
158
 
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`
159
+ Canonical spelling: `projmux agent status`, `projmux agent topic`, `projmux agent resume`, `projmux agent persona attach`, `projmux agent persona detach`, `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 capabilities`, `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`
157
160
 
158
161
  ### `projmux agent status`
159
162
 
@@ -219,9 +222,9 @@ Allowed effects:
219
222
  projmux agent resume <ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--selector key=value]...
220
223
  ```
221
224
 
222
- ### `projmux agent turn`
225
+ ### `projmux agent persona`
223
226
 
224
- Send, steer, or interrupt one exact native Codex turn
227
+ Attach or detach a persona on one exact Claude Agent and resume it on the same conversation
225
228
 
226
229
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
227
230
 
@@ -237,65 +240,68 @@ Allowed effects:
237
240
  - `domain-effect=null`
238
241
 
239
242
  ```
240
- projmux agent turn start|steer <agent-ref> -- <text>
241
- projmux agent turn interrupt <agent-ref>
243
+ projmux agent persona attach <agent-ref> <persona> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--yes] [--dry-run] [--socket <name> | --socket-path <absolute>] [-o json]
244
+ projmux agent persona detach <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--yes] [--dry-run] [--socket <name> | --socket-path <absolute>] [-o json]
242
245
  ```
243
246
 
244
247
  Subcommands:
245
248
 
246
249
  | Route | Summary |
247
250
  | --- | --- |
248
- | [`projmux agent turn start`](#projmux-agent-turn-start) | Send a new turn to one exact idle Codex thread |
249
- | [`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 |
251
+ | [`projmux agent persona attach`](#projmux-agent-persona-attach) | Give one exact Claude Agent a persona and restart it on the same conversation |
252
+ | [`projmux agent persona detach`](#projmux-agent-persona-detach) | Take the persona off one exact Claude Agent and restart it on the same conversation |
251
253
 
252
- Canonical spelling: `projmux agent turn start`, `projmux agent turn steer`, `projmux agent turn interrupt`
254
+ Canonical spelling: `projmux agent persona attach`, `projmux agent persona detach`
253
255
 
254
- #### `projmux agent turn start`
256
+ #### `projmux agent persona attach`
255
257
 
256
- Send a new turn to one exact idle Codex thread
258
+ Give one exact Claude Agent a persona and restart it on the same conversation
257
259
 
258
260
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
259
261
 
260
262
  Allowed effects:
261
263
 
262
- - `identity=unchanged`
264
+ - `identity=unchanged|reused`
263
265
  - `address=unchanged`
264
- - `topology=unchanged`
265
- - `desired-state=unchanged`
266
- - `runtime=unchanged`
266
+ - `topology=unchanged|replaced`
267
+ - `desired-state=unchanged|replaced`
268
+ - `runtime=unchanged|materialized`
267
269
  - `focus=unchanged`
268
270
  - `cardinality=exact-one`
269
271
  - `domain-effect=null`
270
272
 
271
273
  ```
272
- projmux agent turn start <agent-ref> -- <text>
274
+ projmux agent persona attach <agent-ref> <persona> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--yes] [--dry-run] [--socket <name> | --socket-path <absolute>] [-o json]
273
275
  ```
274
276
 
275
- #### `projmux agent turn steer`
277
+ Output modes (`-o`): `json`
276
278
 
277
- Request provider acceptance for one exact current Codex turn; delivery remains unconfirmed
279
+ #### `projmux agent persona detach`
280
+
281
+ Take the persona off one exact Claude Agent and restart it on the same conversation
278
282
 
279
283
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
280
284
 
281
285
  Allowed effects:
282
286
 
283
- - `identity=unchanged`
287
+ - `identity=unchanged|reused`
284
288
  - `address=unchanged`
285
- - `topology=unchanged`
286
- - `desired-state=unchanged`
287
- - `runtime=unchanged`
289
+ - `topology=unchanged|replaced`
290
+ - `desired-state=unchanged|replaced`
291
+ - `runtime=unchanged|materialized`
288
292
  - `focus=unchanged`
289
293
  - `cardinality=exact-one`
290
294
  - `domain-effect=null`
291
295
 
292
296
  ```
293
- projmux agent turn steer <agent-ref> -- <text>
297
+ projmux agent persona detach <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--yes] [--dry-run] [--socket <name> | --socket-path <absolute>] [-o json]
294
298
  ```
295
299
 
296
- #### `projmux agent turn interrupt`
300
+ Output modes (`-o`): `json`
297
301
 
298
- Interrupt one exact current Codex turn
302
+ ### `projmux agent turn`
303
+
304
+ Send, steer, or interrupt one exact native Codex turn
299
305
 
300
306
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
301
307
 
@@ -311,41 +317,23 @@ Allowed effects:
311
317
  - `domain-effect=null`
312
318
 
313
319
  ```
320
+ projmux agent turn start|steer <agent-ref> -- <text>
314
321
  projmux agent turn interrupt <agent-ref>
315
322
  ```
316
323
 
317
- ### `projmux agent approval`
318
-
319
- Review one exact pending native Codex approval
320
-
321
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
322
-
323
- Allowed effects:
324
-
325
- - `identity=unchanged`
326
- - `address=unchanged`
327
- - `topology=unchanged`
328
- - `desired-state=unchanged`
329
- - `runtime=unchanged`
330
- - `focus=unchanged`
331
- - `cardinality=unchanged`
332
- - `domain-effect=null`
333
-
334
- ```
335
- projmux agent approval review <agent-ref> [--request <normalized-id>]
336
- ```
337
-
338
324
  Subcommands:
339
325
 
340
326
  | Route | Summary |
341
327
  | --- | --- |
342
- | [`projmux agent approval review`](#projmux-agent-approval-review) | Review one exact pending native Codex approval |
328
+ | [`projmux agent turn start`](#projmux-agent-turn-start) | Send a new turn to one exact idle Codex thread |
329
+ | [`projmux agent turn steer`](#projmux-agent-turn-steer) | Request provider acceptance for one exact current Codex turn; delivery remains unconfirmed |
330
+ | [`projmux agent turn interrupt`](#projmux-agent-turn-interrupt) | Interrupt one exact current Codex turn |
343
331
 
344
- Canonical spelling: `projmux agent approval review`
332
+ Canonical spelling: `projmux agent turn start`, `projmux agent turn steer`, `projmux agent turn interrupt`
345
333
 
346
- #### `projmux agent approval review`
334
+ #### `projmux agent turn start`
347
335
 
348
- Review one exact pending native Codex approval
336
+ Send a new turn to one exact idle Codex thread
349
337
 
350
338
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
351
339
 
@@ -357,37 +345,16 @@ Allowed effects:
357
345
  - `desired-state=unchanged`
358
346
  - `runtime=unchanged`
359
347
  - `focus=unchanged`
360
- - `cardinality=unchanged`
361
- - `domain-effect=null`
362
-
363
- ```
364
- projmux agent approval review <agent-ref> [--request <normalized-id>]
365
- ```
366
-
367
- ### `projmux agent review`
368
-
369
- Start a native review on an exact-bound Codex Agent
370
-
371
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
372
-
373
- Allowed effects:
374
-
375
- - `identity=unchanged`
376
- - `address=unchanged`
377
- - `topology=unchanged`
378
- - `desired-state=unchanged`
379
- - `runtime=unchanged`
380
- - `focus=unchanged`
381
- - `cardinality=unchanged`
348
+ - `cardinality=exact-one`
382
349
  - `domain-effect=null`
383
350
 
384
351
  ```
385
- projmux agent review [<agent-ref>] [--agent <ref>] [--base <branch> | --commit <sha> | --instructions <text>]
352
+ projmux agent turn start <agent-ref> -- <text>
386
353
  ```
387
354
 
388
- ### `projmux agent integrate`
355
+ #### `projmux agent turn steer`
389
356
 
390
- Install, remove, or preview provider hooks and tmux-bell integration
357
+ Request provider acceptance for one exact current Codex turn; delivery remains unconfirmed
391
358
 
392
359
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
393
360
 
@@ -399,39 +366,18 @@ Allowed effects:
399
366
  - `desired-state=unchanged`
400
367
  - `runtime=unchanged`
401
368
  - `focus=unchanged`
402
- - `cardinality=unchanged`
403
- - `domain-effect=null`
404
-
405
- ```
406
- projmux agent integrate <codex|claude|antigravity|tmux-bell> [--remove] [--dry-run]
407
- ```
408
-
409
- ### `projmux agent usage`
410
-
411
- Read provider account usage quota snapshots
412
-
413
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
414
-
415
- Allowed effects:
416
-
417
- - `identity=unchanged`
418
- - `address=unchanged`
419
- - `topology=unchanged`
420
- - `desired-state=unchanged`
421
- - `runtime=unchanged`
422
- - `focus=unchanged`
423
- - `cardinality=unchanged`
369
+ - `cardinality=exact-one`
424
370
  - `domain-effect=null`
425
371
 
426
372
  ```
427
- projmux agent usage [--model <codex|claude|antigravity|all>] [--window <name>] [--json] [--force]
373
+ projmux agent turn steer <agent-ref> -- <text>
428
374
  ```
429
375
 
430
- ### `projmux agent app-server`
376
+ #### `projmux agent turn interrupt`
431
377
 
432
- Manage explicitly requested private Codex app-server generation operations
378
+ Interrupt one exact current Codex turn
433
379
 
434
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
380
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
435
381
 
436
382
  Allowed effects:
437
383
 
@@ -441,27 +387,18 @@ Allowed effects:
441
387
  - `desired-state=unchanged`
442
388
  - `runtime=unchanged`
443
389
  - `focus=unchanged`
444
- - `cardinality=unchanged`
390
+ - `cardinality=exact-one`
445
391
  - `domain-effect=null`
446
392
 
447
393
  ```
448
- projmux agent app-server
394
+ projmux agent turn interrupt <agent-ref>
449
395
  ```
450
396
 
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`
397
+ ### `projmux agent approval`
461
398
 
462
- Plan, apply, resume, or abort one exact rolling generation operation
399
+ Review one exact pending native Codex approval
463
400
 
464
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
401
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
465
402
 
466
403
  Allowed effects:
467
404
 
@@ -475,24 +412,20 @@ Allowed effects:
475
412
  - `domain-effect=null`
476
413
 
477
414
  ```
478
- projmux agent app-server upgrade
415
+ projmux agent approval review <agent-ref> [--request <normalized-id>]
479
416
  ```
480
417
 
481
418
  Subcommands:
482
419
 
483
420
  | Route | Summary |
484
421
  | --- | --- |
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 |
422
+ | [`projmux agent approval review`](#projmux-agent-approval-review) | Review one exact pending native Codex approval |
490
423
 
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`
424
+ Canonical spelling: `projmux agent approval review`
492
425
 
493
- ##### `projmux agent app-server upgrade qualify`
426
+ #### `projmux agent approval review`
494
427
 
495
- Install one measured version-pair qualification receipt for the generation entry paths
428
+ Review one exact pending native Codex approval
496
429
 
497
430
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
498
431
 
@@ -508,14 +441,14 @@ Allowed effects:
508
441
  - `domain-effect=null`
509
442
 
510
443
  ```
511
- projmux agent app-server upgrade qualify --receipt <absolute-json>
444
+ projmux agent approval review <agent-ref> [--request <normalized-id>]
512
445
  ```
513
446
 
514
- ##### `projmux agent app-server upgrade plan`
447
+ ### `projmux agent review`
515
448
 
516
- Read the mutation-zero plan for one exact private generation upgrade
449
+ Start a native review on an exact-bound Codex Agent
517
450
 
518
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
451
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
519
452
 
520
453
  Allowed effects:
521
454
 
@@ -529,12 +462,12 @@ Allowed effects:
529
462
  - `domain-effect=null`
530
463
 
531
464
  ```
532
- projmux agent app-server upgrade plan --request <absolute-json>
465
+ projmux agent review [<agent-ref>] [--agent <ref>] [--base <branch> | --commit <sha> | --instructions <text>]
533
466
  ```
534
467
 
535
- ##### `projmux agent app-server upgrade apply`
468
+ ### `projmux agent integrate`
536
469
 
537
- Apply one exact crash-resumable private generation admission switch
470
+ Install, remove, or preview provider hooks and tmux-bell integration
538
471
 
539
472
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
540
473
 
@@ -550,14 +483,14 @@ Allowed effects:
550
483
  - `domain-effect=null`
551
484
 
552
485
  ```
553
- projmux agent app-server upgrade apply --request <absolute-json>
486
+ projmux agent integrate <codex|claude|antigravity|tmux-bell> [--remove] [--dry-run]
554
487
  ```
555
488
 
556
- ##### `projmux agent app-server upgrade resume`
489
+ ### `projmux agent usage`
557
490
 
558
- Resume one exact durable rolling generation operation
491
+ Read provider account usage quota snapshots
559
492
 
560
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
493
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
561
494
 
562
495
  Allowed effects:
563
496
 
@@ -571,14 +504,14 @@ Allowed effects:
571
504
  - `domain-effect=null`
572
505
 
573
506
  ```
574
- projmux agent app-server upgrade resume --operation <ref>
507
+ projmux agent usage [--model <codex|claude|all>] [--window <name>] [--json] [--force]
575
508
  ```
576
509
 
577
- ##### `projmux agent app-server upgrade abort`
510
+ ### `projmux agent capabilities`
578
511
 
579
- Abort one pre-admission operation and clean only its exact candidate
512
+ Read static provider support or one exact Agent's Registry-backed runtime eligibility
580
513
 
581
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
514
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
582
515
 
583
516
  Allowed effects:
584
517
 
@@ -588,16 +521,18 @@ Allowed effects:
588
521
  - `desired-state=unchanged`
589
522
  - `runtime=unchanged`
590
523
  - `focus=unchanged`
591
- - `cardinality=unchanged`
524
+ - `cardinality=exact-one`
592
525
  - `domain-effect=null`
593
526
 
594
527
  ```
595
- projmux agent app-server upgrade abort --operation <ref>
528
+ projmux agent capabilities [<agent-ref> | --provider <codex|claude|antigravity>] [-o json]
596
529
  ```
597
530
 
598
- #### `projmux agent app-server handover`
531
+ Output modes (`-o`): `json`
532
+
533
+ ### `projmux agent message`
599
534
 
600
- Plan, apply, resume, or abort one exact generation-wide handover
535
+ Exchange bounded untrusted coordination messages; --source selects a source Agent anchor, not caller authentication (default: active Pane)
601
536
 
602
537
  Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
603
538
 
@@ -609,27 +544,28 @@ Allowed effects:
609
544
  - `desired-state=unchanged`
610
545
  - `runtime=unchanged`
611
546
  - `focus=unchanged`
612
- - `cardinality=unchanged`
613
- - `domain-effect=null`
547
+ - `cardinality=exact-one`
548
+ - `domain-effect=agent-delivery`
614
549
 
615
550
  ```
616
- projmux agent app-server handover
551
+ projmux agent message send <agent-ref> [--source <agent-ref>] [--message-ref <ref>] [--reply-to <ref>] [--ttl <duration>] -- <text>
552
+ projmux agent message status <message-ref> [-o json]
553
+ projmux agent message qualify <claude-agent-ref> --evidence <absolute-private-json> --confirm-isolated-provider-push -o json
617
554
  ```
618
555
 
619
556
  Subcommands:
620
557
 
621
558
  | Route | Summary |
622
559
  | --- | --- |
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 |
560
+ | [`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 |
561
+ | [`projmux agent message status`](#projmux-agent-message-status) | Read a payload-free broker delivery receipt |
562
+ | [`projmux agent message qualify`](#projmux-agent-message-qualify) | Explicitly qualify one exact Claude target using owned current-version isolation evidence and one marker push |
627
563
 
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`
564
+ Canonical spelling: `projmux agent message send`, `projmux agent message status`, `projmux agent message qualify`
629
565
 
630
- ##### `projmux agent app-server handover plan`
566
+ #### `projmux agent message send`
631
567
 
632
- Read the exact target-set generation handover plan
568
+ 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
633
569
 
634
570
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
635
571
 
@@ -641,16 +577,16 @@ Allowed effects:
641
577
  - `desired-state=unchanged`
642
578
  - `runtime=unchanged`
643
579
  - `focus=unchanged`
644
- - `cardinality=unchanged`
645
- - `domain-effect=null`
580
+ - `cardinality=exact-one`
581
+ - `domain-effect=agent-delivery`
646
582
 
647
583
  ```
648
- projmux agent app-server handover plan --request <absolute-json>
584
+ projmux agent message send <agent-ref> [--source <agent-ref>] [--message-ref <ref>] [--reply-to <ref>] [--ttl <duration>] -- <text>
649
585
  ```
650
586
 
651
- ##### `projmux agent app-server handover apply`
587
+ #### `projmux agent message status`
652
588
 
653
- Apply one crash-resumable generation-wide handover
589
+ Read a payload-free broker delivery receipt
654
590
 
655
591
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
656
592
 
@@ -663,36 +599,17 @@ Allowed effects:
663
599
  - `runtime=unchanged`
664
600
  - `focus=unchanged`
665
601
  - `cardinality=unchanged`
666
- - `domain-effect=null`
602
+ - `domain-effect=agent-delivery`
667
603
 
668
604
  ```
669
- projmux agent app-server handover apply --request <absolute-json>
605
+ projmux agent message status <message-ref> [-o json]
670
606
  ```
671
607
 
672
- ##### `projmux agent app-server handover resume`
673
-
674
- Resume one exact durable generation handover
675
-
676
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
677
-
678
- Allowed effects:
679
-
680
- - `identity=unchanged`
681
- - `address=unchanged`
682
- - `topology=unchanged`
683
- - `desired-state=unchanged`
684
- - `runtime=unchanged`
685
- - `focus=unchanged`
686
- - `cardinality=unchanged`
687
- - `domain-effect=null`
688
-
689
- ```
690
- projmux agent app-server handover resume --operation <ref>
691
- ```
608
+ Output modes (`-o`): `json`
692
609
 
693
- ##### `projmux agent app-server handover abort`
610
+ #### `projmux agent message qualify`
694
611
 
695
- Abort one exact pre-stop generation handover
612
+ Explicitly qualify one exact Claude target using owned current-version isolation evidence and one marker push
696
613
 
697
614
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
698
615
 
@@ -704,18 +621,20 @@ Allowed effects:
704
621
  - `desired-state=unchanged`
705
622
  - `runtime=unchanged`
706
623
  - `focus=unchanged`
707
- - `cardinality=unchanged`
708
- - `domain-effect=null`
624
+ - `cardinality=exact-one`
625
+ - `domain-effect=agent-delivery`
709
626
 
710
627
  ```
711
- projmux agent app-server handover abort --operation <ref>
628
+ projmux agent message qualify <claude-agent-ref> --evidence <absolute-private-json> --confirm-isolated-provider-push -o json
712
629
  ```
713
630
 
714
- ### `projmux agent capabilities`
631
+ Output modes (`-o`): `json`
715
632
 
716
- Read static provider support or one exact Agent's Registry-backed runtime eligibility
633
+ ### `projmux agent wait`
717
634
 
718
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
635
+ Wait read-only for one exact Agent's Registry-backed idle observation
636
+
637
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
719
638
 
720
639
  Allowed effects:
721
640
 
@@ -729,16 +648,16 @@ Allowed effects:
729
648
  - `domain-effect=null`
730
649
 
731
650
  ```
732
- projmux agent capabilities [<agent-ref> | --provider <codex|claude|antigravity>] [-o json]
651
+ projmux agent wait <agent-ref> [--until idle] [--timeout <duration>] [-o json]
733
652
  ```
734
653
 
735
654
  Output modes (`-o`): `json`
736
655
 
737
- ### `projmux agent message`
656
+ ### `projmux agent question`
738
657
 
739
- Exchange bounded untrusted coordination messages; --source selects a source Agent anchor, not caller authentication (default: active Pane)
658
+ Answer one exact opted-in Claude Agent's AskUserQuestion prompts from the command line
740
659
 
741
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
660
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
742
661
 
743
662
  Allowed effects:
744
663
 
@@ -749,27 +668,29 @@ Allowed effects:
749
668
  - `runtime=unchanged`
750
669
  - `focus=unchanged`
751
670
  - `cardinality=exact-one`
752
- - `domain-effect=agent-delivery`
671
+ - `domain-effect=null`
753
672
 
754
673
  ```
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
674
+ projmux agent question enable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
675
+ projmux agent question disable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
676
+ projmux agent question list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [-o json]
677
+ 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>]...
758
678
  ```
759
679
 
760
680
  Subcommands:
761
681
 
762
682
  | Route | Summary |
763
683
  | --- | --- |
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) |
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 |
684
+ | [`projmux agent question enable`](#projmux-agent-question-enable) | Opt one exact Claude Agent into answering its AskUserQuestion prompts from the command line |
685
+ | [`projmux agent question disable`](#projmux-agent-question-disable) | Opt one exact Claude Agent out and hand its waiting questions back to its own prompt |
686
+ | [`projmux agent question list`](#projmux-agent-question-list) | List one exact Claude Agent's waiting and recent questions |
687
+ | [`projmux agent question answer`](#projmux-agent-question-answer) | Answer one waiting question by option label, option number, or explicit free text |
767
688
 
768
- Canonical spelling: `projmux agent message send`, `projmux agent message status`, `projmux agent message qualify`
689
+ Canonical spelling: `projmux agent question enable`, `projmux agent question disable`, `projmux agent question list`, `projmux agent question answer`
769
690
 
770
- #### `projmux agent message send`
691
+ #### `projmux agent question enable`
771
692
 
772
- Submit bounded peer coordination; --source selects a source Agent anchor, not caller authentication (default: active Pane)
693
+ Opt one exact Claude Agent into answering its AskUserQuestion prompts from the command line
773
694
 
774
695
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
775
696
 
@@ -782,15 +703,15 @@ Allowed effects:
782
703
  - `runtime=unchanged`
783
704
  - `focus=unchanged`
784
705
  - `cardinality=exact-one`
785
- - `domain-effect=agent-delivery`
706
+ - `domain-effect=null`
786
707
 
787
708
  ```
788
- projmux agent message send <agent-ref> [--source <agent-ref>] [--message-ref <ref>] [--reply-to <ref>] [--ttl <duration>] -- <text>
709
+ projmux agent question enable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
789
710
  ```
790
711
 
791
- #### `projmux agent message status`
712
+ #### `projmux agent question disable`
792
713
 
793
- Read a payload-free broker delivery receipt
714
+ Opt one exact Claude Agent out and hand its waiting questions back to its own prompt
794
715
 
795
716
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
796
717
 
@@ -802,18 +723,16 @@ Allowed effects:
802
723
  - `desired-state=unchanged`
803
724
  - `runtime=unchanged`
804
725
  - `focus=unchanged`
805
- - `cardinality=unchanged`
806
- - `domain-effect=agent-delivery`
726
+ - `cardinality=exact-one`
727
+ - `domain-effect=null`
807
728
 
808
729
  ```
809
- projmux agent message status <message-ref> [-o json]
730
+ projmux agent question disable <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
810
731
  ```
811
732
 
812
- Output modes (`-o`): `json`
813
-
814
- #### `projmux agent message qualify`
733
+ #### `projmux agent question list`
815
734
 
816
- Explicitly qualify one exact Claude target using owned current-version isolation evidence and one marker push
735
+ List one exact Claude Agent's waiting and recent questions
817
736
 
818
737
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
819
738
 
@@ -826,17 +745,17 @@ Allowed effects:
826
745
  - `runtime=unchanged`
827
746
  - `focus=unchanged`
828
747
  - `cardinality=exact-one`
829
- - `domain-effect=agent-delivery`
748
+ - `domain-effect=null`
830
749
 
831
750
  ```
832
- projmux agent message qualify <claude-agent-ref> --evidence <absolute-private-json> --confirm-isolated-provider-push -o json
751
+ projmux agent question list <agent-ref> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [-o json]
833
752
  ```
834
753
 
835
754
  Output modes (`-o`): `json`
836
755
 
837
- ### `projmux agent wait`
756
+ #### `projmux agent question answer`
838
757
 
839
- Wait read-only for one exact Agent's Registry-backed idle observation
758
+ Answer one waiting question by option label, option number, or explicit free text
840
759
 
841
760
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
842
761
 
@@ -852,11 +771,9 @@ Allowed effects:
852
771
  - `domain-effect=null`
853
772
 
854
773
  ```
855
- projmux agent wait <agent-ref> [--until idle] [--timeout <duration>] [-o json]
774
+ 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>]...
856
775
  ```
857
776
 
858
- Output modes (`-o`): `json`
859
-
860
777
  ## `projmux attention`
861
778
 
862
779
  View and manage live tmux pane attention state
@@ -1047,7 +964,7 @@ projmux attach project <ref>
1047
964
 
1048
965
  ## `projmux config`
1049
966
 
1050
- Edit AI split-mode settings; render or apply generated tmux configuration
967
+ Edit AI split-mode and enabled-provider settings; render or apply generated tmux configuration
1051
968
 
1052
969
  Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
1053
970
 
@@ -1064,6 +981,7 @@ Allowed effects:
1064
981
 
1065
982
  ```
1066
983
  projmux config edit [--get|--set <mode>]
984
+ projmux config providers [--enable <id>|--disable <id>]
1067
985
  projmux config render standalone|app [--bin <path>]
1068
986
  projmux config apply [--bin <path>] [--config <path>] [--socket <name>]
1069
987
  ```
@@ -1073,10 +991,11 @@ Subcommands:
1073
991
  | Route | Summary |
1074
992
  | --- | --- |
1075
993
  | [`projmux config edit`](#projmux-config-edit) | Edit the AI split-mode configuration |
994
+ | [`projmux config providers`](#projmux-config-providers) | List AI providers as enabled or disabled; --enable or --disable changes one |
1076
995
  | [`projmux config render`](#projmux-config-render) | Print a generated tmux config to stdout; writes nothing |
1077
996
  | [`projmux config apply`](#projmux-config-apply) | Write the generated app tmux config and reload the live projmux server |
1078
997
 
1079
- Canonical spelling: `projmux config edit`, `projmux config render`, `projmux config apply`
998
+ Canonical spelling: `projmux config edit`, `projmux config providers`, `projmux config render`, `projmux config apply`
1080
999
 
1081
1000
  ### `projmux config edit`
1082
1001
 
@@ -1099,9 +1018,32 @@ Allowed effects:
1099
1018
  projmux config edit [--get|--set <mode>]
1100
1019
  ```
1101
1020
 
1102
- ### `projmux config render`
1021
+ ### `projmux config providers`
1103
1022
 
1104
- Print a generated tmux config to stdout; writes nothing
1023
+ List AI providers as enabled or disabled; --enable or --disable changes one
1024
+
1025
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1026
+
1027
+ Allowed effects:
1028
+
1029
+ - `identity=unchanged`
1030
+ - `address=unchanged`
1031
+ - `topology=unchanged`
1032
+ - `desired-state=unchanged`
1033
+ - `runtime=unchanged`
1034
+ - `focus=unchanged`
1035
+ - `cardinality=unchanged`
1036
+ - `domain-effect=null`
1037
+
1038
+ ```
1039
+ projmux config providers
1040
+ projmux config providers --enable <id>
1041
+ projmux config providers --disable <id>
1042
+ ```
1043
+
1044
+ ### `projmux config render`
1045
+
1046
+ Print a generated tmux config to stdout; writes nothing
1105
1047
 
1106
1048
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
1107
1049
 
@@ -1214,13 +1156,12 @@ Allowed effects:
1214
1156
 
1215
1157
  ```
1216
1158
  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] [-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] [-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] [-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] [-o <mode>] [-- <payload>]
1159
+ projmux create window [--project <ref> | -p <ref>] [--provider shell|<provider>] [--name <name>] [--label key=value]... [-o <mode>] [-- <payload>]
1160
+ 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>]
1161
+ projmux create agent --provider <provider> [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--model <model>] [--effort <level>] [--persona <name>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--create-window] [--all-windows | --primary-window] [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1162
+ projmux create codex [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--persona <name>] [--window <ref> | -w <ref>]... [--create-window] [--all-windows | --primary-window] [--placement right|down] [--cwd-from project|pane] [-o <mode>] [-- <payload>]
1163
+ 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
1164
  projmux create notification --text <s> --target <SESSION[:WINDOW[.PANE]]> [--socket <s>]
1223
- projmux create snapshot
1224
1165
  ```
1225
1166
 
1226
1167
  Subcommands:
@@ -1228,11 +1169,10 @@ Subcommands:
1228
1169
  | Route | Summary |
1229
1170
  | --- | --- |
1230
1171
  | [`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 |
1172
+ | [`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 |
1232
1173
  | [`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
1174
  | [`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 |
1234
1175
  | [`projmux create notification`](#projmux-create-notification) | Create a pending notification row |
1235
- | [`projmux create snapshot`](#projmux-create-snapshot) | Create a session snapshot |
1236
1176
 
1237
1177
  Provider shortcuts:
1238
1178
 
@@ -1242,7 +1182,7 @@ Provider shortcuts:
1242
1182
  | [`projmux create claude`](#projmux-create-claude) | Provider shortcut for create agent --provider claude |
1243
1183
  | [`projmux create antigravity`](#projmux-create-antigravity) | Provider shortcut for create agent --provider antigravity |
1244
1184
 
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`
1185
+ 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
1186
 
1247
1187
  ### `projmux create project`
1248
1188
 
@@ -1265,11 +1205,15 @@ Allowed effects:
1265
1205
  projmux create project --root <absolute-path> [--name <name>] [--label key=value]... [-o <mode>]
1266
1206
  ```
1267
1207
 
1208
+ 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.
1209
+
1210
+ 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.
1211
+
1268
1212
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `none`, `receipt`
1269
1213
 
1270
1214
  ### `projmux create window`
1271
1215
 
1272
- Create a Window and its initial Pane below one Project; the runtime is materialized detached
1216
+ Create a Window below one Project, opening on a shell Pane or on one Agent; the runtime is materialized detached
1273
1217
 
1274
1218
  Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1275
1219
 
@@ -1285,7 +1229,7 @@ Allowed effects:
1285
1229
  - `domain-effect=null`
1286
1230
 
1287
1231
  ```
1288
- projmux create window [--project <ref> | -p <ref>] [--name <name>] [--label key=value]... [-o <mode>] [-- <payload>]
1232
+ projmux create window [--project <ref> | -p <ref>] [--provider shell|<provider>] [--name <name>] [--label key=value]... [-o <mode>] [-- <payload>]
1289
1233
  ```
1290
1234
 
1291
1235
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
@@ -1308,7 +1252,7 @@ Allowed effects:
1308
1252
  - `domain-effect=null`
1309
1253
 
1310
1254
  ```
1311
- 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] [-o <mode>] [-- <payload>]
1255
+ 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>]
1312
1256
  ```
1313
1257
 
1314
1258
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
@@ -1331,7 +1275,7 @@ Allowed effects:
1331
1275
  - `domain-effect=null`
1332
1276
 
1333
1277
  ```
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] [-o <mode>] [-- <payload>]
1278
+ projmux create agent --provider <provider> [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--model <model>] [--effort <level>] [--persona <name>] [--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>]
1335
1279
  ```
1336
1280
 
1337
1281
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
@@ -1357,27 +1301,6 @@ Allowed effects:
1357
1301
  projmux create notification --text <s> --target <SESSION[:WINDOW[.PANE]]> [--socket <s>]
1358
1302
  ```
1359
1303
 
1360
- ### `projmux create snapshot`
1361
-
1362
- Create a session snapshot
1363
-
1364
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1365
-
1366
- Allowed effects:
1367
-
1368
- - `identity=unchanged`
1369
- - `address=unchanged`
1370
- - `topology=unchanged`
1371
- - `desired-state=unchanged`
1372
- - `runtime=unchanged`
1373
- - `focus=unchanged`
1374
- - `cardinality=unchanged`
1375
- - `domain-effect=null`
1376
-
1377
- ```
1378
- projmux create snapshot
1379
- ```
1380
-
1381
1304
  ### `projmux create codex`
1382
1305
 
1383
1306
  Provider shortcut for create agent --provider codex
@@ -1396,7 +1319,7 @@ Allowed effects:
1396
1319
  - `domain-effect=null`
1397
1320
 
1398
1321
  ```
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] [-o <mode>] [-- <payload>]
1322
+ projmux create codex [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--interactive-only] [--persona <name>] [--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>]
1400
1323
  ```
1401
1324
 
1402
1325
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
@@ -1419,7 +1342,7 @@ Allowed effects:
1419
1342
  - `domain-effect=null`
1420
1343
 
1421
1344
  ```
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] [-o <mode>] [-- <payload>]
1345
+ projmux create claude [--project <ref> | -p <ref>] [--cwd <path>] [--add-dir <path>]... [--model <model>] [--effort <level>] [--persona <name>] [--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>]
1423
1346
  ```
1424
1347
 
1425
1348
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
@@ -1442,7 +1365,7 @@ Allowed effects:
1442
1365
  - `domain-effect=null`
1443
1366
 
1444
1367
  ```
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] [-o <mode>] [-- <payload>]
1368
+ 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>]
1446
1369
  ```
1447
1370
 
1448
1371
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `pane-id`, `none`, `receipt`
@@ -1475,18 +1398,17 @@ Subcommands:
1475
1398
 
1476
1399
  | Route | Summary |
1477
1400
  | --- | --- |
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 |
1401
+ | [`projmux delete project`](#projmux-delete-project) | Deprecated alias of unregister project; unregisters Projects and Registry descendants while preserving roots, Git/worktrees, and runtime |
1479
1402
  | [`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
1403
  | [`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
1404
  | [`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
1405
  | [`projmux delete notification`](#projmux-delete-notification) | Delete pending notification rows |
1483
- | [`projmux delete snapshot`](#projmux-delete-snapshot) | Delete saved session snapshots |
1484
1406
 
1485
- Canonical spelling: `projmux unregister project`, `projmux delete window`, `projmux delete pane`, `projmux delete agent`, `projmux delete notification`, `projmux delete snapshot`
1407
+ Canonical spelling: `projmux unregister project`, `projmux delete window`, `projmux delete pane`, `projmux delete agent`, `projmux delete notification`
1486
1408
 
1487
1409
  ### `projmux delete project`
1488
1410
 
1489
- Deprecated alias of unregister project; unregisters Projects and Registry descendants while preserving roots, Git/worktrees, snapshots, and runtime
1411
+ Deprecated alias of unregister project; unregisters Projects and Registry descendants while preserving roots, Git/worktrees, and runtime
1490
1412
 
1491
1413
  Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
1492
1414
 
@@ -1601,29 +1523,6 @@ projmux delete notification
1601
1523
 
1602
1524
  Aliases: `notifications`
1603
1525
 
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
1526
  ## `projmux describe`
1628
1527
 
1629
1528
  Describe one Projmux resource
@@ -1896,7 +1795,9 @@ Allowed effects:
1896
1795
  ```
1897
1796
  projmux focus project <ref>
1898
1797
  projmux focus window <ref> {--project <ref> | -p <ref>}
1798
+ projmux focus window uid:<uid> [--project <ref> | -p <ref>]
1899
1799
  projmux focus pane <ref> {--project <ref> | -p <ref>} {--window <ref> | -w <ref>}
1800
+ projmux focus pane uid:<uid> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]
1900
1801
  ```
1901
1802
 
1902
1803
  Subcommands:
@@ -1930,6 +1831,8 @@ Allowed effects:
1930
1831
  projmux focus project <ref> [--socket <path>] [--client <tty>] [--json]
1931
1832
  ```
1932
1833
 
1834
+ `<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.
1835
+
1933
1836
  ### `projmux focus window`
1934
1837
 
1935
1838
  Move the current client to an already-live Window in an exact live root session; never materializes
@@ -1949,8 +1852,13 @@ Allowed effects:
1949
1852
 
1950
1853
  ```
1951
1854
  projmux focus window <ref> {--project <ref> | -p <ref>} [--socket <path>] [--client <tty>] [--json]
1855
+ projmux focus window uid:<uid> [--project <ref> | -p <ref>] [--socket <path>] [--client <tty>] [--json]
1952
1856
  ```
1953
1857
 
1858
+ 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>`.
1859
+
1860
+ A `uid:` resolution uses the Project's recorded socket; an explicit `--socket` naming another server exits 2. The resolved window must still be live.
1861
+
1954
1862
  ### `projmux focus pane`
1955
1863
 
1956
1864
  Move the current client to an already-live Pane in an exact live root session; never materializes
@@ -1970,8 +1878,13 @@ Allowed effects:
1970
1878
 
1971
1879
  ```
1972
1880
  projmux focus pane <ref> {--project <ref> | -p <ref>} {--window <ref> | -w <ref>} [--socket <path>] [--json]
1881
+ projmux focus pane uid:<uid> [--project <ref> | -p <ref>] [--window <ref> | -w <ref>] [--socket <path>] [--json]
1973
1882
  ```
1974
1883
 
1884
+ 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>`.
1885
+
1886
+ A `uid:` resolution uses the Project's recorded socket; an explicit `--socket` naming another server exits 2. The resolved pane must still be live.
1887
+
1975
1888
  ## `projmux get`
1976
1889
 
1977
1890
  Read Projmux resources by selector
@@ -2009,10 +1922,9 @@ Subcommands:
2009
1922
  | [`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
1923
  | [`projmux get runtime`](#projmux-get-runtime) | List every tmux Session, Window, and Pane on one exact server with its attribution |
2011
1924
  | [`projmux get notifications`](#projmux-get-notifications) | List pending notification rows |
2012
- | [`projmux get snapshots`](#projmux-get-snapshots) | List saved session snapshots |
2013
1925
  | [`projmux get pane`](#projmux-get-pane) | Read one Pane resource; with no selector inside tmux, the active Pane |
2014
1926
 
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`
1927
+ 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
1928
 
2017
1929
  ### `projmux get projects`
2018
1930
 
@@ -2112,11 +2024,257 @@ Aliases: `agent`
2112
2024
 
2113
2025
  Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `none`, `wide`
2114
2026
 
2115
- ### `projmux get runtime`
2027
+ ### `projmux get runtime`
2028
+
2029
+ List every tmux Session, Window, and Pane on one exact server with its attribution
2030
+
2031
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2032
+
2033
+ Allowed effects:
2034
+
2035
+ - `identity=unchanged`
2036
+ - `address=unchanged`
2037
+ - `topology=unchanged`
2038
+ - `desired-state=unchanged`
2039
+ - `runtime=unchanged`
2040
+ - `focus=unchanged`
2041
+ - `cardinality=zero-or-more`
2042
+ - `domain-effect=null`
2043
+
2044
+ ```
2045
+ projmux get runtime sessions [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2046
+ projmux get runtime windows [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2047
+ projmux get runtime panes [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2048
+ ```
2049
+
2050
+ Subcommands:
2051
+
2052
+ | Route | Summary |
2053
+ | --- | --- |
2054
+ | [`projmux get runtime sessions`](#projmux-get-runtime-sessions) | List every tmux session on one exact server with its attribution |
2055
+ | [`projmux get runtime windows`](#projmux-get-runtime-windows) | List every tmux window on one exact server with its attribution |
2056
+ | [`projmux get runtime panes`](#projmux-get-runtime-panes) | List every tmux pane on one exact server with its attribution |
2057
+
2058
+ Canonical spelling: `projmux get runtime sessions`, `projmux get runtime windows`, `projmux get runtime panes`
2059
+
2060
+ #### `projmux get runtime sessions`
2061
+
2062
+ List every tmux session on one exact server with its attribution
2063
+
2064
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2065
+
2066
+ Allowed effects:
2067
+
2068
+ - `identity=unchanged`
2069
+ - `address=unchanged`
2070
+ - `topology=unchanged`
2071
+ - `desired-state=unchanged`
2072
+ - `runtime=unchanged`
2073
+ - `focus=unchanged`
2074
+ - `cardinality=zero-or-more`
2075
+ - `domain-effect=null`
2076
+
2077
+ ```
2078
+ projmux get runtime sessions [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2079
+ ```
2080
+
2081
+ Output modes (`-o`): `wide`, `json`, `none`
2082
+
2083
+ #### `projmux get runtime windows`
2084
+
2085
+ List every tmux window on one exact server with its attribution
2086
+
2087
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2088
+
2089
+ Allowed effects:
2090
+
2091
+ - `identity=unchanged`
2092
+ - `address=unchanged`
2093
+ - `topology=unchanged`
2094
+ - `desired-state=unchanged`
2095
+ - `runtime=unchanged`
2096
+ - `focus=unchanged`
2097
+ - `cardinality=zero-or-more`
2098
+ - `domain-effect=null`
2099
+
2100
+ ```
2101
+ projmux get runtime windows [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2102
+ ```
2103
+
2104
+ Output modes (`-o`): `wide`, `json`, `none`
2105
+
2106
+ #### `projmux get runtime panes`
2107
+
2108
+ List every tmux pane on one exact server with its attribution
2109
+
2110
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2111
+
2112
+ Allowed effects:
2113
+
2114
+ - `identity=unchanged`
2115
+ - `address=unchanged`
2116
+ - `topology=unchanged`
2117
+ - `desired-state=unchanged`
2118
+ - `runtime=unchanged`
2119
+ - `focus=unchanged`
2120
+ - `cardinality=zero-or-more`
2121
+ - `domain-effect=null`
2122
+
2123
+ ```
2124
+ projmux get runtime panes [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2125
+ ```
2126
+
2127
+ Output modes (`-o`): `wide`, `json`, `none`
2128
+
2129
+ ### `projmux get notifications`
2130
+
2131
+ List pending notification rows
2132
+
2133
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2134
+
2135
+ Allowed effects:
2136
+
2137
+ - `identity=unchanged`
2138
+ - `address=unchanged`
2139
+ - `topology=unchanged`
2140
+ - `desired-state=unchanged`
2141
+ - `runtime=unchanged`
2142
+ - `focus=unchanged`
2143
+ - `cardinality=zero-or-more`
2144
+ - `domain-effect=null`
2145
+
2146
+ ```
2147
+ projmux get notifications
2148
+ ```
2149
+
2150
+ Aliases: `notification`
2151
+
2152
+ ### `projmux get pane`
2153
+
2154
+ Read one Pane resource; with no selector inside tmux, the active Pane
2155
+
2156
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2157
+
2158
+ Allowed effects:
2159
+
2160
+ - `identity=unchanged`
2161
+ - `address=unchanged`
2162
+ - `topology=unchanged`
2163
+ - `desired-state=unchanged`
2164
+ - `runtime=unchanged`
2165
+ - `focus=unchanged`
2166
+ - `cardinality=exact-one`
2167
+ - `domain-effect=null`
2168
+
2169
+ ```
2170
+ projmux get pane [--current] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [-o <mode>]
2171
+ ```
2172
+
2173
+ Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `none`
2174
+
2175
+ Field projections (`-o`): `cwd`
2176
+
2177
+ ## `projmux hook`
2178
+
2179
+ List, edit, validate, and trust lifecycle hook config
2180
+
2181
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2182
+
2183
+ Allowed effects:
2184
+
2185
+ - `identity=unchanged`
2186
+ - `address=unchanged`
2187
+ - `topology=unchanged`
2188
+ - `desired-state=unchanged`
2189
+ - `runtime=unchanged`
2190
+ - `focus=unchanged`
2191
+ - `cardinality=unchanged`
2192
+ - `domain-effect=null`
2193
+
2194
+ ```
2195
+ projmux hook list|edit|validate|trust|untrust
2196
+ ```
2197
+
2198
+ Subcommands:
2199
+
2200
+ | Route | Summary |
2201
+ | --- | --- |
2202
+ | [`projmux hook list`](#projmux-hook-list) | List global and project lifecycle hooks |
2203
+ | [`projmux hook edit`](#projmux-hook-edit) | Edit lifecycle hook config |
2204
+ | [`projmux hook validate`](#projmux-hook-validate) | Validate lifecycle hook config |
2205
+ | [`projmux hook trust`](#projmux-hook-trust) | Trust the current project hook config |
2206
+ | [`projmux hook untrust`](#projmux-hook-untrust) | Revoke project hook config trust |
2207
+
2208
+ Canonical spelling: `projmux hook list`, `projmux hook edit`, `projmux hook validate`, `projmux hook trust`, `projmux hook untrust`
2209
+
2210
+ ### `projmux hook list`
2211
+
2212
+ List global and project lifecycle hooks
2213
+
2214
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2215
+
2216
+ Allowed effects:
2217
+
2218
+ - `identity=unchanged`
2219
+ - `address=unchanged`
2220
+ - `topology=unchanged`
2221
+ - `desired-state=unchanged`
2222
+ - `runtime=unchanged`
2223
+ - `focus=unchanged`
2224
+ - `cardinality=unchanged`
2225
+ - `domain-effect=null`
2226
+
2227
+ ```
2228
+ projmux hook list
2229
+ ```
2230
+
2231
+ ### `projmux hook edit`
2232
+
2233
+ Edit lifecycle hook config
2234
+
2235
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2236
+
2237
+ Allowed effects:
2238
+
2239
+ - `identity=unchanged`
2240
+ - `address=unchanged`
2241
+ - `topology=unchanged`
2242
+ - `desired-state=unchanged`
2243
+ - `runtime=unchanged`
2244
+ - `focus=unchanged`
2245
+ - `cardinality=unchanged`
2246
+ - `domain-effect=null`
2247
+
2248
+ ```
2249
+ projmux hook edit
2250
+ ```
2251
+
2252
+ ### `projmux hook validate`
2253
+
2254
+ Validate lifecycle hook config
2255
+
2256
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2257
+
2258
+ Allowed effects:
2259
+
2260
+ - `identity=unchanged`
2261
+ - `address=unchanged`
2262
+ - `topology=unchanged`
2263
+ - `desired-state=unchanged`
2264
+ - `runtime=unchanged`
2265
+ - `focus=unchanged`
2266
+ - `cardinality=unchanged`
2267
+ - `domain-effect=null`
2268
+
2269
+ ```
2270
+ projmux hook validate
2271
+ ```
2272
+
2273
+ ### `projmux hook trust`
2116
2274
 
2117
- List every tmux Session, Window, and Pane on one exact server with its attribution
2275
+ Trust the current project hook config
2118
2276
 
2119
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2277
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2120
2278
 
2121
2279
  Allowed effects:
2122
2280
 
@@ -2126,30 +2284,18 @@ Allowed effects:
2126
2284
  - `desired-state=unchanged`
2127
2285
  - `runtime=unchanged`
2128
2286
  - `focus=unchanged`
2129
- - `cardinality=zero-or-more`
2287
+ - `cardinality=unchanged`
2130
2288
  - `domain-effect=null`
2131
2289
 
2132
2290
  ```
2133
- projmux get runtime sessions [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2134
- projmux get runtime windows [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2135
- projmux get runtime panes [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2291
+ projmux hook trust
2136
2292
  ```
2137
2293
 
2138
- Subcommands:
2139
-
2140
- | Route | Summary |
2141
- | --- | --- |
2142
- | [`projmux get runtime sessions`](#projmux-get-runtime-sessions) | List every tmux session on one exact server with its attribution |
2143
- | [`projmux get runtime windows`](#projmux-get-runtime-windows) | List every tmux window on one exact server with its attribution |
2144
- | [`projmux get runtime panes`](#projmux-get-runtime-panes) | List every tmux pane on one exact server with its attribution |
2145
-
2146
- Canonical spelling: `projmux get runtime sessions`, `projmux get runtime windows`, `projmux get runtime panes`
2147
-
2148
- #### `projmux get runtime sessions`
2294
+ ### `projmux hook untrust`
2149
2295
 
2150
- List every tmux session on one exact server with its attribution
2296
+ Revoke project hook config trust
2151
2297
 
2152
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2298
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2153
2299
 
2154
2300
  Allowed effects:
2155
2301
 
@@ -2159,20 +2305,18 @@ Allowed effects:
2159
2305
  - `desired-state=unchanged`
2160
2306
  - `runtime=unchanged`
2161
2307
  - `focus=unchanged`
2162
- - `cardinality=zero-or-more`
2308
+ - `cardinality=unchanged`
2163
2309
  - `domain-effect=null`
2164
2310
 
2165
2311
  ```
2166
- projmux get runtime sessions [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2312
+ projmux hook untrust
2167
2313
  ```
2168
2314
 
2169
- Output modes (`-o`): `wide`, `json`, `none`
2170
-
2171
- #### `projmux get runtime windows`
2315
+ ## `projmux label`
2172
2316
 
2173
- List every tmux window on one exact server with its attribution
2317
+ Set or remove Projmux resource metadata.labels after creation
2174
2318
 
2175
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2319
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2176
2320
 
2177
2321
  Allowed effects:
2178
2322
 
@@ -2182,20 +2326,32 @@ Allowed effects:
2182
2326
  - `desired-state=unchanged`
2183
2327
  - `runtime=unchanged`
2184
2328
  - `focus=unchanged`
2185
- - `cardinality=zero-or-more`
2329
+ - `cardinality=unchanged`
2186
2330
  - `domain-effect=null`
2187
2331
 
2188
2332
  ```
2189
- projmux get runtime windows [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2333
+ projmux label project [<ref>] <key=value|key->... [--project <ref> | -p <ref>]
2334
+ projmux label window [<ref>] <key=value|key->... [--project <ref> | -p <ref>]
2335
+ projmux label pane [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
2336
+ projmux label agent [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
2190
2337
  ```
2191
2338
 
2192
- Output modes (`-o`): `wide`, `json`, `none`
2339
+ Subcommands:
2193
2340
 
2194
- #### `projmux get runtime panes`
2341
+ | Route | Summary |
2342
+ | --- | --- |
2343
+ | [`projmux label project`](#projmux-label-project) | Set or remove Project labels; with no selector inside tmux, the active Project |
2344
+ | [`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 |
2345
+ | [`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 |
2346
+ | [`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 |
2195
2347
 
2196
- List every tmux pane on one exact server with its attribution
2348
+ Canonical spelling: `projmux label project`, `projmux label window`, `projmux label pane`, `projmux label agent`
2197
2349
 
2198
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2350
+ ### `projmux label project`
2351
+
2352
+ Set or remove Project labels; with no selector inside tmux, the active Project
2353
+
2354
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2199
2355
 
2200
2356
  Allowed effects:
2201
2357
 
@@ -2205,20 +2361,20 @@ Allowed effects:
2205
2361
  - `desired-state=unchanged`
2206
2362
  - `runtime=unchanged`
2207
2363
  - `focus=unchanged`
2208
- - `cardinality=zero-or-more`
2364
+ - `cardinality=exact-one`
2209
2365
  - `domain-effect=null`
2210
2366
 
2211
2367
  ```
2212
- projmux get runtime panes [--socket <name> | --socket-path <absolute>] [-o wide|json|none]
2368
+ projmux label project [<ref>] <key=value|key->... [--project <ref> | -p <ref>]
2213
2369
  ```
2214
2370
 
2215
- Output modes (`-o`): `wide`, `json`, `none`
2371
+ Aliases: `projects`
2216
2372
 
2217
- ### `projmux get notifications`
2373
+ ### `projmux label window`
2218
2374
 
2219
- List pending notification rows
2375
+ Set or remove Window labels; inside tmux a reference resolves within the active Project or ControlSession and no selector means the active Window
2220
2376
 
2221
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2377
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2222
2378
 
2223
2379
  Allowed effects:
2224
2380
 
@@ -2228,20 +2384,20 @@ Allowed effects:
2228
2384
  - `desired-state=unchanged`
2229
2385
  - `runtime=unchanged`
2230
2386
  - `focus=unchanged`
2231
- - `cardinality=zero-or-more`
2387
+ - `cardinality=exact-one`
2232
2388
  - `domain-effect=null`
2233
2389
 
2234
2390
  ```
2235
- projmux get notifications
2391
+ projmux label window [<ref>] <key=value|key->... [--project <ref> | -p <ref>]
2236
2392
  ```
2237
2393
 
2238
- Aliases: `notification`
2394
+ Aliases: `windows`
2239
2395
 
2240
- ### `projmux get snapshots`
2396
+ ### `projmux label pane`
2241
2397
 
2242
- List saved session snapshots
2398
+ Set or remove Pane labels; inside tmux a reference resolves within the active Project or ControlSession and no selector means the active Pane
2243
2399
 
2244
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2400
+ Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2245
2401
 
2246
2402
  Allowed effects:
2247
2403
 
@@ -2251,18 +2407,18 @@ Allowed effects:
2251
2407
  - `desired-state=unchanged`
2252
2408
  - `runtime=unchanged`
2253
2409
  - `focus=unchanged`
2254
- - `cardinality=zero-or-more`
2410
+ - `cardinality=exact-one`
2255
2411
  - `domain-effect=null`
2256
2412
 
2257
2413
  ```
2258
- projmux get snapshots
2414
+ projmux label pane [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
2259
2415
  ```
2260
2416
 
2261
- Aliases: `snapshot`
2417
+ Aliases: `panes`
2262
2418
 
2263
- ### `projmux get pane`
2419
+ ### `projmux label agent`
2264
2420
 
2265
- Read one Pane resource; with no selector inside tmux, the active Pane
2421
+ Set or remove Agent labels within the active Project or ControlSession without changing its name, topic, provider, or managed Pane
2266
2422
 
2267
2423
  Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2268
2424
 
@@ -2278,16 +2434,14 @@ Allowed effects:
2278
2434
  - `domain-effect=null`
2279
2435
 
2280
2436
  ```
2281
- projmux get pane [--current] [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]... [--pane <ref>]... [--selector key=value]... [-o <mode>]
2437
+ projmux label agent [<ref>] <key=value|key->... [--project <ref> | -p <ref>] [--window <ref> | -w <ref>]...
2282
2438
  ```
2283
2439
 
2284
- Output modes (`-o`): `uid`, `name`, `ref`, `metadata`, `json`, `none`
2285
-
2286
- Field projections (`-o`): `cwd`
2440
+ Aliases: `agents`
2287
2441
 
2288
- ## `projmux hook`
2442
+ ## `projmux notification`
2289
2443
 
2290
- List, edit, validate, and trust lifecycle hook config
2444
+ Manage pending notification workflow state
2291
2445
 
2292
2446
  Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2293
2447
 
@@ -2303,26 +2457,24 @@ Allowed effects:
2303
2457
  - `domain-effect=null`
2304
2458
 
2305
2459
  ```
2306
- projmux hook list|edit|validate|trust|untrust
2460
+ projmux notification ack <id> | --all
2461
+ projmux notification reconcile [--json]
2307
2462
  ```
2308
2463
 
2309
2464
  Subcommands:
2310
2465
 
2311
2466
  | Route | Summary |
2312
2467
  | --- | --- |
2313
- | [`projmux hook list`](#projmux-hook-list) | List global and project lifecycle hooks |
2314
- | [`projmux hook edit`](#projmux-hook-edit) | Edit lifecycle hook config |
2315
- | [`projmux hook validate`](#projmux-hook-validate) | Validate lifecycle hook config |
2316
- | [`projmux hook trust`](#projmux-hook-trust) | Trust the current project hook config |
2317
- | [`projmux hook untrust`](#projmux-hook-untrust) | Revoke project hook config trust |
2468
+ | [`projmux notification ack`](#projmux-notification-ack) | Acknowledge notification rows |
2469
+ | [`projmux notification reconcile`](#projmux-notification-reconcile) | Reconcile the notification queue against live targets |
2318
2470
 
2319
- Canonical spelling: `projmux hook list`, `projmux hook edit`, `projmux hook validate`, `projmux hook trust`, `projmux hook untrust`
2471
+ Canonical spelling: `projmux notification ack`, `projmux notification reconcile`
2320
2472
 
2321
- ### `projmux hook list`
2473
+ ### `projmux notification ack`
2322
2474
 
2323
- List global and project lifecycle hooks
2475
+ Acknowledge notification rows
2324
2476
 
2325
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2477
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2326
2478
 
2327
2479
  Allowed effects:
2328
2480
 
@@ -2336,14 +2488,14 @@ Allowed effects:
2336
2488
  - `domain-effect=null`
2337
2489
 
2338
2490
  ```
2339
- projmux hook list
2491
+ projmux notification ack <id> | --all
2340
2492
  ```
2341
2493
 
2342
- ### `projmux hook edit`
2494
+ ### `projmux notification reconcile`
2343
2495
 
2344
- Edit lifecycle hook config
2496
+ Reconcile the notification queue against live targets
2345
2497
 
2346
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2498
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2347
2499
 
2348
2500
  Allowed effects:
2349
2501
 
@@ -2357,14 +2509,14 @@ Allowed effects:
2357
2509
  - `domain-effect=null`
2358
2510
 
2359
2511
  ```
2360
- projmux hook edit
2512
+ projmux notification reconcile [--json]
2361
2513
  ```
2362
2514
 
2363
- ### `projmux hook validate`
2515
+ ## `projmux open`
2364
2516
 
2365
- Validate lifecycle hook config
2517
+ Open a Project runtime and move the current client to it
2366
2518
 
2367
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2519
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2368
2520
 
2369
2521
  Allowed effects:
2370
2522
 
@@ -2378,14 +2530,22 @@ Allowed effects:
2378
2530
  - `domain-effect=null`
2379
2531
 
2380
2532
  ```
2381
- projmux hook validate
2533
+ projmux open project <ref> [-o receipt|none]
2382
2534
  ```
2383
2535
 
2384
- ### `projmux hook trust`
2536
+ Subcommands:
2385
2537
 
2386
- Trust the current project hook config
2538
+ | Route | Summary |
2539
+ | --- | --- |
2540
+ | [`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 |
2387
2541
 
2388
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2542
+ Canonical spelling: `projmux open project`
2543
+
2544
+ ### `projmux open project`
2545
+
2546
+ Materialize an offline Project runtime when needed and move the current tmux client to it; outside tmux it refuses and points at attach
2547
+
2548
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2389
2549
 
2390
2550
  Allowed effects:
2391
2551
 
@@ -2393,20 +2553,22 @@ Allowed effects:
2393
2553
  - `address=unchanged`
2394
2554
  - `topology=unchanged`
2395
2555
  - `desired-state=unchanged`
2396
- - `runtime=unchanged`
2397
- - `focus=unchanged`
2398
- - `cardinality=unchanged`
2556
+ - `runtime=materialized|already-live`
2557
+ - `focus=moved-current-client`
2558
+ - `cardinality=exact-one`
2399
2559
  - `domain-effect=null`
2400
2560
 
2401
2561
  ```
2402
- projmux hook trust
2562
+ projmux open project <ref> [-o receipt|none]
2403
2563
  ```
2404
2564
 
2405
- ### `projmux hook untrust`
2565
+ Output modes (`-o`): `receipt`, `none`
2406
2566
 
2407
- Revoke project hook config trust
2567
+ ## `projmux persona`
2408
2568
 
2409
- Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2569
+ List, show, edit, set, and delete Agent persona files
2570
+
2571
+ Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2410
2572
 
2411
2573
  Allowed effects:
2412
2574
 
@@ -2420,14 +2582,30 @@ Allowed effects:
2420
2582
  - `domain-effect=null`
2421
2583
 
2422
2584
  ```
2423
- projmux hook untrust
2585
+ projmux persona list
2586
+ projmux persona show <name>
2587
+ projmux persona edit <name>
2588
+ projmux persona set <name> [--file <path> | -]
2589
+ projmux persona delete <name> --yes
2424
2590
  ```
2425
2591
 
2426
- ## `projmux notification`
2592
+ Subcommands:
2427
2593
 
2428
- Manage pending notification workflow state
2594
+ | Route | Summary |
2595
+ | --- | --- |
2596
+ | [`projmux persona list`](#projmux-persona-list) | List every stored persona with its digest, size, and modification time |
2597
+ | [`projmux persona show`](#projmux-persona-show) | Print one persona's content exactly as stored |
2598
+ | [`projmux persona edit`](#projmux-persona-edit) | Edit one persona in $EDITOR or $VISUAL, creating it when missing |
2599
+ | [`projmux persona set`](#projmux-persona-set) | Write one persona from a file or stdin without an editor |
2600
+ | [`projmux persona delete`](#projmux-persona-delete) | Delete one persona file; Agents already started with it keep their snapshot |
2429
2601
 
2430
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2602
+ Canonical spelling: `projmux persona list`, `projmux persona show`, `projmux persona edit`, `projmux persona set`, `projmux persona delete`
2603
+
2604
+ ### `projmux persona list`
2605
+
2606
+ List every stored persona with its digest, size, and modification time
2607
+
2608
+ Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2431
2609
 
2432
2610
  Allowed effects:
2433
2611
 
@@ -2441,22 +2619,12 @@ Allowed effects:
2441
2619
  - `domain-effect=null`
2442
2620
 
2443
2621
  ```
2444
- projmux notification ack <id> | --all
2445
- projmux notification reconcile [--json]
2622
+ projmux persona list
2446
2623
  ```
2447
2624
 
2448
- Subcommands:
2449
-
2450
- | Route | Summary |
2451
- | --- | --- |
2452
- | [`projmux notification ack`](#projmux-notification-ack) | Acknowledge notification rows |
2453
- | [`projmux notification reconcile`](#projmux-notification-reconcile) | Reconcile the notification queue against live targets |
2454
-
2455
- Canonical spelling: `projmux notification ack`, `projmux notification reconcile`
2456
-
2457
- ### `projmux notification ack`
2625
+ ### `projmux persona show`
2458
2626
 
2459
- Acknowledge notification rows
2627
+ Print one persona's content exactly as stored
2460
2628
 
2461
2629
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2462
2630
 
@@ -2472,14 +2640,14 @@ Allowed effects:
2472
2640
  - `domain-effect=null`
2473
2641
 
2474
2642
  ```
2475
- projmux notification ack <id> | --all
2643
+ projmux persona show <name>
2476
2644
  ```
2477
2645
 
2478
- ### `projmux notification reconcile`
2646
+ ### `projmux persona edit`
2479
2647
 
2480
- Reconcile the notification queue against live targets
2648
+ Edit one persona in $EDITOR or $VISUAL, creating it when missing
2481
2649
 
2482
- Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2650
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2483
2651
 
2484
2652
  Allowed effects:
2485
2653
 
@@ -2493,14 +2661,14 @@ Allowed effects:
2493
2661
  - `domain-effect=null`
2494
2662
 
2495
2663
  ```
2496
- projmux notification reconcile [--json]
2664
+ projmux persona edit <name>
2497
2665
  ```
2498
2666
 
2499
- ## `projmux open`
2667
+ ### `projmux persona set`
2500
2668
 
2501
- Open a Project runtime and move the current client to it
2669
+ Write one persona from a file or stdin without an editor
2502
2670
 
2503
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2671
+ Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2504
2672
 
2505
2673
  Allowed effects:
2506
2674
 
@@ -2514,20 +2682,12 @@ Allowed effects:
2514
2682
  - `domain-effect=null`
2515
2683
 
2516
2684
  ```
2517
- projmux open project <ref> [-o receipt|none]
2685
+ projmux persona set <name> [--file <path> | -]
2518
2686
  ```
2519
2687
 
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`
2527
-
2528
- ### `projmux open project`
2688
+ ### `projmux persona delete`
2529
2689
 
2530
- Materialize an offline Project runtime when needed and move the current tmux client to it; outside tmux it refuses and points at attach
2690
+ Delete one persona file; Agents already started with it keep their snapshot
2531
2691
 
2532
2692
  Selectorless authority: `explicit-target` — the route or caller must name the exact target.
2533
2693
 
@@ -2537,17 +2697,15 @@ Allowed effects:
2537
2697
  - `address=unchanged`
2538
2698
  - `topology=unchanged`
2539
2699
  - `desired-state=unchanged`
2540
- - `runtime=materialized|already-live`
2541
- - `focus=moved-current-client`
2542
- - `cardinality=exact-one`
2700
+ - `runtime=unchanged`
2701
+ - `focus=unchanged`
2702
+ - `cardinality=unchanged`
2543
2703
  - `domain-effect=null`
2544
2704
 
2545
2705
  ```
2546
- projmux open project <ref> [-o receipt|none]
2706
+ projmux persona delete <name> --yes
2547
2707
  ```
2548
2708
 
2549
- Output modes (`-o`): `receipt`, `none`
2550
-
2551
2709
  ## `projmux pin`
2552
2710
 
2553
2711
  Manage pinned project directories
@@ -2600,7 +2758,7 @@ projmux pin project list|add|remove|toggle|clear
2600
2758
 
2601
2759
  ## `projmux prune`
2602
2760
 
2603
- Prune stale Projects and snapshots
2761
+ Prune stale Projects and Agents
2604
2762
 
2605
2763
  Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2606
2764
 
@@ -2616,22 +2774,22 @@ Allowed effects:
2616
2774
  - `domain-effect=null`
2617
2775
 
2618
2776
  ```
2619
- projmux prune snapshot [--older-than <duration>]
2620
2777
  projmux prune project --missing --older-than <duration> [--yes]
2778
+ projmux prune agent --older-than <duration> [--no-session-ref] [--no-pane] [--exclude <agent-ref>]... [--yes]
2621
2779
  ```
2622
2780
 
2623
2781
  Subcommands:
2624
2782
 
2625
2783
  | Route | Summary |
2626
2784
  | --- | --- |
2785
+ | [`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 |
2627
2786
  | [`projmux prune project`](#projmux-prune-project) | Delete Projects whose spec.root has been missing for a bounded age |
2628
- | [`projmux prune snapshot`](#projmux-prune-snapshot) | Inspect or delete preserved session snapshots (canonical spelling) |
2629
2787
 
2630
- Canonical spelling: `projmux prune project`, `projmux prune snapshot`
2788
+ Canonical spelling: `projmux prune agent`, `projmux prune project`
2631
2789
 
2632
- ### `projmux prune project`
2790
+ ### `projmux prune agent`
2633
2791
 
2634
- Delete Projects whose spec.root has been missing for a bounded age
2792
+ 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
2635
2793
 
2636
2794
  Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2637
2795
 
@@ -2647,33 +2805,30 @@ Allowed effects:
2647
2805
  - `domain-effect=null`
2648
2806
 
2649
2807
  ```
2650
- projmux prune project --missing --older-than <duration> [--yes]
2808
+ projmux prune agent --older-than <duration> [--no-session-ref] [--no-pane] [--exclude <agent-ref>]... [--yes]
2651
2809
  ```
2652
2810
 
2653
- ### `projmux prune snapshot`
2811
+ ### `projmux prune project`
2654
2812
 
2655
- Inspect or delete preserved session snapshots (canonical spelling)
2813
+ Delete Projects whose spec.root has been missing for a bounded age
2656
2814
 
2657
2815
  Selectorless authority: `explicit-fan-out` — the route spelling is an intentional global or whole-set opt-in.
2658
2816
 
2659
2817
  Allowed effects:
2660
2818
 
2661
- - `identity=unchanged`
2662
- - `address=unchanged`
2663
- - `topology=unchanged`
2664
- - `desired-state=unchanged`
2819
+ - `identity=removed`
2820
+ - `address=released`
2821
+ - `topology=removed`
2822
+ - `desired-state=removed`
2665
2823
  - `runtime=unchanged`
2666
2824
  - `focus=unchanged`
2667
- - `cardinality=unchanged`
2825
+ - `cardinality=zero-or-more`
2668
2826
  - `domain-effect=null`
2669
2827
 
2670
2828
  ```
2671
- projmux prune snapshot [--older-than <duration>]
2672
- projmux prune snapshot delete <session>...
2829
+ projmux prune project --missing --older-than <duration> [--yes]
2673
2830
  ```
2674
2831
 
2675
- Canonical spelling: `projmux delete snapshot`
2676
-
2677
2832
  ## `projmux quit`
2678
2833
 
2679
2834
  Quit the app-owned projmux tmux runtime
@@ -2847,7 +3002,7 @@ Subcommands:
2847
3002
  | Route | Summary |
2848
3003
  | --- | --- |
2849
3004
  | [`projmux rename project`](#projmux-rename-project) | Rename a Projmux Project resource; with no selector inside tmux, the active Project |
2850
- | [`projmux rename window`](#projmux-rename-window) | Rename a Projmux Window resource; inside tmux a reference resolves within the active Project or ControlSession and no selector means the active Window |
3005
+ | [`projmux rename window`](#projmux-rename-window) | Rename a Projmux Window resource; inside tmux a reference resolves within the active Project or ControlSession, no selector means the active Window, and the tmux tab is renamed with it |
2851
3006
  | [`projmux rename pane`](#projmux-rename-pane) | Rename a Projmux Pane resource; inside tmux a reference resolves within the active Project or ControlSession and no selector means the active Pane; does not change tmux pane_title |
2852
3007
  | [`projmux rename agent`](#projmux-rename-agent) | Rename an Agent stable resource name within the active Project or ControlSession without changing its topic, provider, or managed Pane |
2853
3008
 
@@ -2880,7 +3035,7 @@ Output modes (`-o`): `receipt`, `none`
2880
3035
 
2881
3036
  ### `projmux rename window`
2882
3037
 
2883
- Rename a Projmux Window resource; inside tmux a reference resolves within the active Project or ControlSession and no selector means the active Window
3038
+ Rename a Projmux Window resource; inside tmux a reference resolves within the active Project or ControlSession, no selector means the active Window, and the tmux tab is renamed with it
2884
3039
 
2885
3040
  Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
2886
3041
 
@@ -2974,56 +3129,6 @@ Allowed effects:
2974
3129
  projmux resources
2975
3130
  ```
2976
3131
 
2977
- ## `projmux restore`
2978
-
2979
- Project a saved snapshot into one exact closed Project desired state
2980
-
2981
- Selectorless authority: `refusal` — there is no safe selectorless action; refuse before output or mutation.
2982
-
2983
- Allowed effects:
2984
-
2985
- - `identity=unchanged`
2986
- - `address=unchanged`
2987
- - `topology=unchanged`
2988
- - `desired-state=unchanged`
2989
- - `runtime=unchanged`
2990
- - `focus=unchanged`
2991
- - `cardinality=unchanged`
2992
- - `domain-effect=null`
2993
-
2994
- ```
2995
- projmux restore snapshot --session <name> [--project <ref> | -p <ref>] [--dry-run | --yes] [--client <tmux-client>]
2996
- ```
2997
-
2998
- Subcommands:
2999
-
3000
- | Route | Summary |
3001
- | --- | --- |
3002
- | [`projmux restore snapshot`](#projmux-restore-snapshot) | Project a saved snapshot into one exact closed Project desired state |
3003
-
3004
- Canonical spelling: `projmux restore snapshot`
3005
-
3006
- ### `projmux restore snapshot`
3007
-
3008
- Project a saved snapshot into one exact closed Project desired state
3009
-
3010
- Selectorless authority: `explicit-target` — the route or caller must name the exact target.
3011
-
3012
- Allowed effects:
3013
-
3014
- - `identity=unchanged|created|reused|removed|replaced`
3015
- - `address=unchanged|allocated|released`
3016
- - `topology=unchanged|established|removed|replaced`
3017
- - `desired-state=unchanged|created|removed|replaced`
3018
- - `runtime=unchanged|materialized`
3019
- - `focus=unchanged|moved-current-client|attached-caller`
3020
- - `cardinality=unchanged|one-or-more`
3021
- - `domain-effect=null`
3022
-
3023
- ```
3024
- projmux restore snapshot --session <name> [--project <ref> | -p <ref>] [--dry-run | --yes] [--client <tmux-client>]
3025
- ```
3026
-
3027
3132
  ## `projmux runtime`
3028
3133
 
3029
3134
  Manage the live and ephemeral tmux runtime inventory
@@ -3434,13 +3539,13 @@ Subcommands:
3434
3539
 
3435
3540
  | Route | Summary |
3436
3541
  | --- | --- |
3437
- | [`projmux unregister project`](#projmux-unregister-project) | Unregister Projects and their Registry descendants while preserving roots, Git/worktrees, snapshots, and runtime |
3542
+ | [`projmux unregister project`](#projmux-unregister-project) | Unregister Projects and their Registry descendants while preserving roots, Git/worktrees, and runtime |
3438
3543
 
3439
3544
  Canonical spelling: `projmux unregister project`
3440
3545
 
3441
3546
  ### `projmux unregister project`
3442
3547
 
3443
- Unregister Projects and their Registry descendants while preserving roots, Git/worktrees, snapshots, and runtime
3548
+ Unregister Projects and their Registry descendants while preserving roots, Git/worktrees, and runtime
3444
3549
 
3445
3550
  Selectorless authority: `natural-omitted` — omission resolves one predictable current resource or documented contextual read/scope; any selector replaces it.
3446
3551