cmux-ref — Claude Code skill: what it does, how to install
Parses pasted cmux workspace, pane, surface, and window IDs to route agent actions directly to the right terminal. Keeps execution locked to specific targets.
npx skills add manaflow-ai/cmux-skills --skill cmux-ref -a claude-codeWhat cmux-ref does
The skill teaches the agent to interpret cmux multiplexer identifiers from pasted logs or configuration blocks. It captures keys like pane_id and surface_id, along with bare refs like pane:2 or surface:370. When multiple layers are present, the agent targets the most granular object: surface takes precedence over pane, and pane beats workspace.
Before sending keystrokes or closing surfaces, the skill verifies that the target exists via cmux --json --id-format both tree --all. If short numeric refs change after layout adjustments, the agent recovers the target using its permanent UUID. Browser snapshot elements are outside its scope: DOM nodes require cmux-browser instead.
What it helps with
- route CLI commands to a specific cmux surface without moving focus
- recover stale terminal references after layout changes via UUID matching
- extract multiplexer topology keys from logs and assignment strings
- prevent accidental input delivery to the wrong terminal session
Example prompts for the agent
- Target
workspace_ref=workspace:1 pane_ref=pane:2 surface_ref=surface:370and runnpm testthere. - Send the build command to
surface:370 (661B301A-2423-44F1-B789-7AEA1021CFCE)with focus disabled. - Inspect active processes in
pane:2and fetch the last 120 screen lines.
How to install cmux-ref
1Skills CLI (Vercel)
npx skills add manaflow-ai/cmux-skills --skill cmux-ref -a claude-code2Manually: put the files in place
~/.claude/skills/cmux-ref/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/cmux-ref/
1Skills CLI (Vercel)
npx skills add manaflow-ai/cmux-skills --skill cmux-ref -a codex2Manually: put the files in place
.agents/skills/cmux-ref/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add manaflow-ai/cmux-skills --skill cmux-ref -a cursor2Manually: put the files in place
.cursor/skills/cmux-ref/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install manaflow-ai/cmux-skills cmux-ref2Manually: put the files in place
.github/skills/cmux-ref/SKILL.md1Skills CLI (Vercel)
npx skills add manaflow-ai/cmux-skills --skill cmux-ref -a gemini-cli2Platform CLI
gemini skills install https://github.com/manaflow-ai/cmux-skills --path skills/cmux-refManually: put the files in place
.devin/skills/cmux-ref/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add manaflow-ai/cmux-skills --skill cmux-ref -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 cmux-ref
How do I install cmux-ref in Claude Code?
Run npx skills add manaflow-ai/cmux-skills --skill cmux-ref -a claude-code in your terminal. Alternatively, place the skill definition at ~/.claude/skills/cmux-ref/SKILL.md.
What does cmux-ref do?
It interprets pasted cmux topology identifiers such as workspaces, panes, and surfaces. The agent then directs CLI execution to that exact target instead of defaulting to whichever terminal is focused.
How does it handle renumbered panels?
Short refs can become stale after layout updates. The skill checks cmux --json --id-format both tree --all against the object UUID to find the updated ref before modifying anything.
Source text
SKILL.md · MIT
--- name: cmux-ref description: "Interpret pasted cmux workspace, pane, surface, or window refs and IDs. Use for cmux-ref, cmux-id, workspace_ref, workspace_id, pane_ref, pane_id, surface_ref, surface_id, window_ref, or window_id context blocks." --- # cmux Ref Use this skill when the user pastes cmux topology identifiers and expects the agent to target that exact workspace, pane, surface, or window. Treat those identifiers as explicit routing context for later instructions. ## What To Recognize Users may paste any mix of these fields, in plain text, Markdown, JSON, YAML, shell-style assignments, or logs: ```text workspace_ref=workspace:1 workspace_id=D9C23F06-55C8-4EF6-96D2-F2531B3327A8 pane_ref=pane:2 pane_id=60495E4A-56E3-469D-A274-A7877F48B54D surface_ref=surface:370 surface_id=661B301A-2423-44F1-B789-7AEA1021CFCE ``` Recognize these keys: - `window_ref`, `window_id` - `workspace_ref`, `workspace_id` - `pane_ref`, `pane_id` - `surface_ref`, `surface_id` Also recognize bare refs near user intent, such as `workspace:1`, `pane:2`, or `surface:370`. ## Meaning - `*_ref` values are short cmux refs such as `workspace:1`, `pane:2`, and `surface:370`. They are convenient for immediate CLI calls in the same cmux instance, but can be renumbered after state changes. - `*_id` values are UUIDs for the same objects. Prefer them for identity checks and stale-ref recovery when both forms are available. - The most specific provided object is the default target: `surface` beats `pane`, `pane` beats `workspace`, and `workspace` beats `window`. - A complete block describes a hierarchy. Do not mix a `surface_id` from one pasted block with a `workspace_ref` from another unless the user clearly says they belong together. ## Workflow ### Step 1: Parse The Block Extract keys case-insensitively. Accept `=` or `:` separators and ignore quotes, commas, and code fences. Useful pattern: ```text \b(window|workspace|pane|surface)_(ref|id)\b\s*[:=]\s*["']?([A-Za-z0-9:-]+)["']? ``` If the user provides only bare refs, bind the most specific one as the target: ```text workspace:1 pane:2 surface:370 ``` ### Step 2: Announce The Target When taking action, say the exact target briefly: ```text I will target surface:370 in pane:2, workspace:1. ``` If a UUID is present, keep it in your internal target record and include it when useful for disambiguation: ```text I will target surface:370 (661B301A-2423-44F1-B789-7AEA1021CFCE). ``` ### Step 3: Verify Before Mutating Before sending text, closing anything, moving surfaces, changing layout, or reading a screen for a non-current target, verify the target exists in the active cmux socket. Use the current cmux CLI and request both refs and UUIDs: ```bash cmux --json --id-format both tree --all cmux --json --id-format both identify cmux --json --id-format both list-pane-surfaces --workspace <workspace_ref_or_id> ``` If a ref is stale but the UUID exists in `tree --all`, use the current ref associated with that UUID. If neither the ref nor UUID can be found, stop and ask the user for a fresh cmux ref block. ### Step 4: Use Explicit Targets Do not fall back to the visually focused workspace when the user pasted explicit refs. Pass the parsed workspace, pane, and surface to cmux commands. Examples: ```bash cmux read-screen --workspace workspace:1 --surface surface:370 --scrollback --lines 120 cmux send --workspace workspace:1 --surface surface:370 "npm test\n" cmux new-surface --workspace workspace:1 --pane pane:2 --type terminal --focus false cmux open ./report.html --workspace workspace:1 --pane pane:2 --no-focus ``` If the command accepts only one handle, use the most specific relevant handle. Prefer the UUID when the command accepts UUIDs and you have verified it maps to the intended object. ## Ambiguity Rules Ask one concise question only when the target cannot be inferred safely: - Multiple unrelated ref blocks are pasted and the instruction says only "use this" or "that one". - A workspace ref and surface ref are both present but verification shows they belong to different current hierarchies. - The pasted identifiers are stale and no UUID match exists in `cmux --json --id-format both tree --all`. Do not ask when one complete block is present. Use the most specific target in that block. ## Safety Rules - User-provided cmux refs override caller environment variables and visual focus. - Preserve both the ref and UUID in notes or scripts when available. - Do not change focus just to verify or use a target. Prefer non-disruptive commands and `--focus false` or `--no-focus` when supported. - Do not close, move, or send input to a target until it has been verified in the current socket. - Browser snapshot element refs are separate from cmux topology refs. Use `cmux-browser` for DOM or webview snapshot refs.
© manaflow-ai · MIT · manaflow-ai/cmux-skills