cmux Pane Orchestration
SkillWeb & browsingOrchestrate cmux terminal panes — split terminals, run parallel processes, read output from other panes, and use the built-in browser. Use when working inside cmux and you need to run a dev server, watch tests, spawn sub-agents, or preview web pages.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the cmux Pane Orchestration skill
What this skill tells your AI
The instructions your AI receives, as published by espennilsen/pi in extensions/pi-cmux/SKILL.md and read by ahel’s review.
You have access to cmux tools for managing terminal panes. Use them to run parallel processes, monitor output, and interact with other terminals.
Available Tools
| Tool | Purpose |
|---|---|
cmux_list | List all surfaces (panes) and workspaces |
cmux_split | Split pane right or down, optionally run a command |
cmux_read | Read terminal output from another pane |
cmux_send | Send text or keystrokes to another pane |
cmux_close | Close a pane |
cmux_notify | Send desktop notification |
cmux_browser | Open/navigate/snapshot/click/fill/eval in built-in browser |
Common Patterns
Dev server + coding workflow
1. cmux_split direction="down" command="npm run dev\n"
2. Note the surface ID from the result
3. Work on code in your main terminal (edit files, etc.)
4. cmux_read surface="surface:X" to check dev server output
5. cmux_close surface="surface:X" when done
Parallel test watching
1. cmux_split direction="right" command="npm test -- --watch\n"
2. Edit code in main pane
3. cmux_read surface="surface:X" to check test results
4. If tests fail, read the output and fix the code
Sub-agent spawning
1. cmux_split direction="right" command="pi \"Task description here\"\n"
2. Continue working on your own task
3. cmux_read surface="surface:X" to check sub-agent progress
4. cmux_close surface="surface:X" when sub-agent finishes
Web preview with browser
1. Start dev server: cmux_split direction="down" command="npm run dev\n"
2. Open browser: cmux_browser action="open" url="http://localhost:3000"
3. Get DOM: cmux_browser action="snapshot" surface="surface:X" compact=true
4. Interact: cmux_browser action="click" surface="surface:X" selector="button.submit"
5. Fill form: cmux_browser action="fill" surface="surface:X" selector="input[name=email]" value="test@example.com"
Stopping a process in another pane
1. cmux_send surface="surface:X" key="ctrl+c"
2. Wait a moment, then cmux_read to confirm it stopped
Guidelines
- Always
cmux_listfirst if you don't know the surface IDs - Append
\nto commands incmux_splitandcmux_sendto execute them - Read before assuming — use
cmux_readto check what happened in other panes - Clean up — close panes you no longer need with
cmux_close - Don't close your own pane — only close panes you created
- Notify on completion — use
cmux_notifyfor long-running tasks so the user knows - Surface IDs are like
surface:2— use the exact format fromcmux_listorcmux_splitresults
Signals
- GitHub stars
- 118
- Forks
- 13
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
cmux- Source
- github.com/espennilsen/pi