openrig-cmux — Claude Code skill: what it does, how to install
Renders OpenRig agent fleets, missions, and pods into live cmux terminal tiles. Helpful when monitoring running agents without disrupting active sessions.
npx skills add mvschwarz/openrig --skill openrig-cmux -a claude-codeWhat openrig-cmux does
The skill instructs an agent to display OpenRig fleet sessions directly in cmux. Using rig terminal open <view> --provider cmux, it arranges rigs, pods like pod:<rig>/<podNamespace>, missions, slices, or saved views into tiled panes. If a node is already open, cmux brings it into focus instead of launching a duplicate tile.
Session handling mirrors the rules from openrig-herdr. Mission and slice views attach via tmux attach -r in read-only mode, guaranteeing that keystrokes never reach running background agents. If a host is connected over HTTP, the tile degrades with an explicit warning because live streaming demands an SSH link.
Keep in mind that cmux is treated as a best-effort provider, while herdr remains OpenRig's default choice. Custom layouts must be configured by hand in terminal-views.yaml, as there is no built-in write command.
What it helps with
- render OpenRig rigs and pods into cmux terminal tiles
- inspect running mission slices in read-only mode
- check provider health with
rig terminal status - navigate hand-authored fleet layouts in
terminal-views.yaml
Example prompts for the agent
- Open slice
<id>into cmux tiles - List available views using
rig terminal views - Check provider health with
rig terminal status --provider cmux
How to install openrig-cmux
1Skills CLI (Vercel)
npx skills add mvschwarz/openrig --skill openrig-cmux -a claude-code2Manually: put the files in place
~/.claude/skills/openrig-cmux/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/openrig-cmux/
1Skills CLI (Vercel)
npx skills add mvschwarz/openrig --skill openrig-cmux -a codex2Manually: put the files in place
.agents/skills/openrig-cmux/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add mvschwarz/openrig --skill openrig-cmux -a cursor2Manually: put the files in place
.cursor/skills/openrig-cmux/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install mvschwarz/openrig openrig-cmux2Manually: put the files in place
.github/skills/openrig-cmux/SKILL.md1Skills CLI (Vercel)
npx skills add mvschwarz/openrig --skill openrig-cmux -a gemini-cli2Platform CLI
gemini skills install https://github.com/mvschwarz/openrig --path skills/_canonical/core/openrig-cmuxManually: put the files in place
.devin/skills/openrig-cmux/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add mvschwarz/openrig --skill openrig-cmux -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about openrig-cmux
How to install openrig-cmux in Claude Code?
Run npx skills add mvschwarz/openrig --skill openrig-cmux -a claude-code. The skill file is placed in ~/.claude/skills/openrig-cmux/SKILL.md.
What is the difference between openrig-cmux and openrig-herdr?
herdr is the default proof-gated provider, while cmux acts as a best-effort alternative. Both share the same view semantics and safety rails, but cmux focuses existing tiles rather than duplicating them.
Why does an agent tile enter a degraded state?
Interactive terminal tiles require SSH. When a host is registered only via HTTP, OpenRig reports an honest degradation notice instead of silently failing.
Source text
SKILL.md · Apache-2.0
---
name: openrig-cmux
description: >
Use 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, read-only
cross-rig, scroll/copy, same-size-only duplicates); cmux is the **best-effort** provider (herdr is
the default and the proof-gated one). Prefer openrig-herdr unless cmux is specifically wanted.
metadata:
openrig:
stage: candidate
sibling_skills:
- openrig-herdr
- openrig-user
---
# openrig-cmux
cmux is a **provider** for OpenRig views — the same `rig terminal` surface as herdr, rendering the
tiles into cmux instead. It is the provider OpenRig already shipped (the existing "Launch in cmux"
affordance generalizes onto `rig terminal <provider>`), kept working. The OpenRig-semantic half is
identical to openrig-herdr: OpenRig decides **which** agents form a view; the provider renders the
pixels. **Read openrig-herdr first for the full model** — this skill only calls out what differs for
cmux.
## Provider status — cmux is best-effort
- **herdr is the default and the proof-gated provider**; **cmux is best-effort** — it ships on the
same `rig terminal <provider>` + web-launcher neighborhood, but a cmux miss is not a slice failure.
Reach for cmux when it is specifically wanted; otherwise default to herdr (`rig terminal open <view>`
with no `--provider`).
- Views are **provider-agnostic**: the same view + the same agents + the same semantics carry across
herdr and cmux. A saved view opens in either.
## The surface (same three verbs, `--provider cmux`)
```bash
rig terminal open <view> --provider cmux [--json] # open a view into cmux (herdr is the no-flag default)
rig terminal views [--json] # the same view library, provider-agnostic
rig terminal status --provider cmux [--json] # cmux liveness / health
```
`<view>` resolves exactly as with herdr: a **rig name** · **`pod:<rig>/<podNamespace>`** ·
**`mission:<id>`** · **`slice:<id>`** (derived live) · a **saved-view name**.
## What carries over unchanged from openrig-herdr
All of these behave identically — see openrig-herdr for the detail:
- **Honest-partial / honest-degrade** — opened / absent / degraded, each named; partial opens exit 0,
zero-pane exits non-zero; an http-registered host's agents degrade with the reason ("host `<id>` is
http-registered; tiles need ssh"), never silently dropped.
- **Read-only policy** — a rig or `pod:` view is interactive; `mission:` / `slice:` views are
read-only by construction; a saved view is per-member (`readOnly`). A read-only pane is
`tmux attach -r` (client `readonly=1`, keystrokes physically cannot reach the agent). See openrig-herdr.
- **Safety rails (the fleet-safety rail)** — a tile is a *view* (nested `tmux attach`) of a
daemon-owned session; never move/join/kill/re-parent a daemon-owned pane; closing a tile detaches
one client and leaves the session untouched; never live-flip tmux options on a running seat in
production (prove it in an isolated environment first).
- **Scroll + copy out of the box** — the daemon's terminal defaults (per-session scroll at launch +
the server's clipboard defaults); running seats pick up wheel-scroll at their next relaunch.
- **Limits** — tile chrome v1 = a plain label; same-size panes for duplicate/multi-view membership
(the different-size resize mismatch is an inherent tmux multi-client limit, documented not fixed).
## cmux-specific notes
- **Open-or-focus per agent** — cmux's shipped integration opens a node or focuses it if already open;
expect focus (not a duplicate) when a seat is already tiled in cmux.
- **The shipped "Launch in cmux" affordance is preserved** (byte-compatible) and generalizes into the
provider + view picker; opening cmux from the web launcher still works.
- **No AGPL arm's-length concern** — unlike herdr, cmux is OpenRig's shipped provider integration; the
clean-room/never-embed rail that applies to herdr is not a cmux constraint. (This skill itself is
still authored clean-room.)
## Saved views — provider-agnostic
Saved views are **hand-authored** in `terminal-views.yaml` (v1 has no save/write verb) and are
**provider-agnostic** — see **openrig-herdr** for the exact schema, the store facts (atomic tmp+rename,
byte-stable, at the OpenRig home root), and the derived-views-never-persisted rule. Reopen any saved
view in cmux with `rig terminal open <id> --provider cmux`. Derived views (a rig, `pod:<rig>/<pod>`,
`mission:<id>`, `slice:<id>`) are computed live and never written to the file.
© mvschwarz · Apache-2.0 · mvschwarz/openrig