$npx -y skills add mvschwarz/openrig --skill openrig-cmuxUse when opening OpenRig fleet terminals into cmux — turning a rig, pod, mission, slice, or saved view into live agent tiles via rig terminal --provider cmux, or driving cmux on an agent's request. Same OpenRig view semantics as openrig-herdr (the verbs, honest-partial/degrade,
| 1 | # openrig-cmux |
| 2 | |
| 3 | cmux is a **provider** for OpenRig views — the same `rig terminal` surface as herdr, rendering the |
| 4 | tiles into cmux instead. It is the provider OpenRig already shipped (the existing "Launch in cmux" |
| 5 | affordance generalizes onto `rig terminal <provider>`), kept working. The OpenRig-semantic half is |
| 6 | identical to openrig-herdr: OpenRig decides **which** agents form a view; the provider renders the |
| 7 | pixels. **Read openrig-herdr first for the full model** — this skill only calls out what differs for |
| 8 | cmux. |
| 9 | |
| 10 | ## Provider status — cmux is best-effort |
| 11 | |
| 12 | - **herdr is the default and the proof-gated provider**; **cmux is best-effort** — it ships on the |
| 13 | same `rig terminal <provider>` + web-launcher neighborhood, but a cmux miss is not a slice failure. |
| 14 | Reach for cmux when it is specifically wanted; otherwise default to herdr (`rig terminal open <view>` |
| 15 | with no `--provider`). |
| 16 | - Views are **provider-agnostic**: the same view + the same agents + the same semantics carry across |
| 17 | herdr and cmux. A saved view opens in either. |
| 18 | |
| 19 | ## The surface (same three verbs, `--provider cmux`) |
| 20 | |
| 21 | ```bash |
| 22 | rig terminal open <view> --provider cmux [--json] # open a view into cmux (herdr is the no-flag default) |
| 23 | rig terminal views [--json] # the same view library, provider-agnostic |
| 24 | rig terminal status --provider cmux [--json] # cmux liveness / health |
| 25 | ``` |
| 26 | |
| 27 | `<view>` resolves exactly as with herdr: a **rig name** · **`pod:<rig>/<podNamespace>`** · |
| 28 | **`mission:<id>`** · **`slice:<id>`** (derived live) · a **saved-view name**. |
| 29 | |
| 30 | ## What carries over unchanged from openrig-herdr |
| 31 | |
| 32 | All of these behave identically — see openrig-herdr for the detail: |
| 33 | |
| 34 | - **Honest-partial / honest-degrade** — opened / absent / degraded, each named; partial opens exit 0, |
| 35 | zero-pane exits non-zero; an http-registered host's agents degrade with the reason ("host `<id>` is |
| 36 | http-registered; tiles need ssh"), never silently dropped. |
| 37 | - **Read-only policy** — a rig or `pod:` view is interactive; `mission:` / `slice:` views are |
| 38 | read-only by construction; a saved view is per-member (`readOnly`). A read-only pane is |
| 39 | `tmux attach -r` (client `readonly=1`, keystrokes physically cannot reach the agent). See openrig-herdr. |
| 40 | - **Safety rails (the fleet-safety rail)** — a tile is a *view* (nested `tmux attach`) of a |
| 41 | daemon-owned session; never move/join/kill/re-parent a daemon-owned pane; closing a tile detaches |
| 42 | one client and leaves the session untouched; never live-flip tmux options on a running seat in |
| 43 | production (prove it in an isolated environment first). |
| 44 | - **Scroll + copy out of the box** — the daemon's terminal defaults (per-session scroll at launch + |
| 45 | the server's clipboard defaults); running seats pick up wheel-scroll at their next relaunch. |
| 46 | - **Limits** — tile chrome v1 = a plain label; same-size panes for duplicate/multi-view membership |
| 47 | (the different-size resize mismatch is an inherent tmux multi-client limit, documented not fixed). |
| 48 | |
| 49 | ## cmux-specific notes |
| 50 | |
| 51 | - **Open-or-focus per agent** — cmux's shipped integration opens a node or focuses it if already open; |
| 52 | expect focus (not a duplicate) when a seat is already tiled in cmux. |
| 53 | - **The shipped "Launch in cmux" affordance is preserved** (byte-compatible) and generalizes into the |
| 54 | provider + view picker; opening cmux from the web launcher still works. |
| 55 | - **No AGPL arm's-length concern** — unlike herdr, cmux is OpenRig's shipped provider integration; the |
| 56 | clean-room/never-embed rail that applies to herdr is not a cmux constraint. (This skill itself is |
| 57 | still authored clean-room.) |
| 58 | |
| 59 | ## Saved views — provider-agnostic |
| 60 | |
| 61 | Saved views are **hand-authored** in `terminal-views.yaml` (v1 has no save/write verb) and are |
| 62 | **provider-agnostic** — see **openrig-herdr** for the exact schema, the store facts (atomic tmp+rename, |
| 63 | byte-stable, at the OpenRig home root), and the derived-views-never-persisted rule. Reopen any saved |
| 64 | view in cmux with `rig terminal open <id> --provider cmux`. Derived views (a rig, `pod:<rig>/<pod>`, |
| 65 | `mission:<id>`, `slice:<id>`) are computed live and never written to the file. |