| name | cmux |
| description | cmux 터미널 멀티플렉서 제어 스킬. 워크스페이스/패널/서피스 관리, 명령 전송, 브라우저 자동화, 알림, 사이드바 메타데이터 제어. '/cmux', 'cmux', '워크스페이스 만들어', '패널 분할', '브라우저 열어', '알림 보내' 등 cmux 터미널 제어 요청이라면 반드시 이 스킬을 사용하세요. |
| triggers | ["/cmux","cmux","워크스페이스","패널 분할","브라우저 열어","알림 보내"] |
| version | 1.0.0 |
/cmux — cmux Terminal Multiplexer Control
cmux는 Ghostty 기반 macOS 네이티브 터미널로, 여러 AI 코딩 에이전트를 관리하기 위해 설계되었다.
CLI(cmux) 또는 Unix 소켓(/tmp/cmux.sock)으로 프로그래밍 제어 가능.
1. 계층 구조 (4-Level Hierarchy)
Window → Workspace → Pane → Surface → Panel(Terminal|Browser)
| Level | 설명 | 생성 | 식별 |
|---|
| Window | macOS 윈도우 | ⌘⇧N | — |
| Workspace | 사이드바 항목 (탭) | ⌘N / cmux new-workspace | CMUX_WORKSPACE_ID |
| Pane | 분할 영역 | ⌘D(우) / ⌘⇧D(하) / cmux new-split | Panel ID |
| Surface | 패인 내 탭 | ⌘T | CMUX_SURFACE_ID |
| Panel | 터미널 또는 브라우저 | 자동 | Panel ID (내부) |
┌─────────────────────────────────────────────┐
│ ┌──────────┐ ┌────────────────────────────┐ │
│ │ Sidebar │ │ Workspace "dev" │ │
│ │ │ │ ┌──────────┬─────────────┐ │ │
│ │ > dev │ │ │ Pane 1 │ Pane 2 │ │ │
│ │ server │ │ │ [S1][S2] │ [S1] │ │ │
│ │ logs │ │ │ Terminal │ Terminal │ │ │
│ │ │ │ └──────────┴─────────────┘ │ │
│ └──────────┘ └────────────────────────────┘ │
└─────────────────────────────────────────────┘
2. cmux 감지 (Detection)
SOCK="${CMUX_SOCKET_PATH:-/tmp/cmux.sock}"
[ -S "$SOCK" ] && echo "cmux socket available"
command -v cmux &>/dev/null && echo "cmux CLI available"
[ -n "${CMUX_WORKSPACE_ID:-}" ] && echo "Inside cmux"
Fallback
| 상황 | 동작 |
|---|
| cmux CLI 없음 | 일반 터미널로 fallback, 패널 분할 불가 |
| cmux 소켓 타임아웃 | CLI 모드로 fallback, --timeout-ms 지정 |
| cmux 외부 실행 | CMUX_WORKSPACE_ID 없으면 워크스페이스 ID 명시 필요 |
3. CLI 전역 옵션
| Flag | 용도 |
|---|
--socket PATH | 커스텀 소켓 경로 |
--json | JSON 출력 |
--window ID | 특정 윈도우 대상 |
--workspace ID | 특정 워크스페이스 대상 |
--surface ID | 특정 서피스 대상 |
--id-format refs|uuids|both | ID 포맷 제어 |
4. Workspace 명령
cmux list-workspaces [--json]
cmux new-workspace
cmux current-workspace [--json]
cmux select-workspace --workspace <id>
cmux close-workspace --workspace <id>
Socket API
{"id":"1","method":"workspace.list","params":{}}
{"id":"2","method":"workspace.create","params":{}}
{"id":"3","method":"workspace.current","params":{}}
{"id":"4","method":"workspace.select","params":{"workspace_id":"<id>"}}
{"id":"5","method":"workspace.close","params":{"workspace_id":"<id>"}}
5. Split & Surface 명령
cmux new-split right
cmux new-split down
cmux list-surfaces [--json]
cmux focus-surface --surface <id>
6. Input 명령 (텍스트/키 전송)
cmux send "echo hello"
cmux send "ls -la\n"
cmux send-key enter
cmux send --surface <id> "command"
cmux send-key --surface <id> enter
Socket API
{"id":"1","method":"surface.send_text","params":{"text":"echo hello\n"}}
{"id":"2","method":"surface.send_key","params":{"key":"enter"}}
{"id":"3","method":"surface.send_text","params":{"surface_id":"<id>","text":"command\n"}}
7. Notification 명령
cmux notify --title "Title" --body "Body"
cmux notify --title "T" --subtitle "S" --body "B"
cmux list-notifications [--json]
cmux clear-notifications
OSC 777 (간단한 터미널 알림)
printf '\e]777;notify;Title;Body\a'
8. Sidebar Metadata 명령
사이드바에 상태 배지, 진행률, 로그를 표시한다.
cmux set-status <key> "<value>" [--icon <name>] [--color "<hex>"]
cmux set-status build "compiling" --icon hammer --color "#ff9500"
cmux clear-status <key>
cmux list-status
cmux set-progress 0.5 --label "Building..."
cmux set-progress 1.0 --label "Done"
cmux clear-progress
cmux log "Build started"
cmux log --level error --source build "Compilation failed"
cmux log --level success -- "All 42 tests passed"
cmux clear-log
cmux list-log [--limit N]
cmux sidebar-state [--workspace <id>]
9. Browser Automation 명령
전체 레퍼런스는 references/browser-automation.md 참조. 핵심 명령만 아래에 요약:
cmux browser open <url>
cmux browser open-split <url>
cmux browser <surface> navigate <url> [--snapshot-after]
cmux browser <surface> wait --load-state complete --timeout-ms 15000
cmux browser <surface> wait --selector "#el" --timeout-ms 10000
cmux browser <surface> click "selector" [--snapshot-after]
cmux browser <surface> fill "selector" --text "value"
cmux browser <surface> type "selector" "text"
cmux browser <surface> snapshot --interactive --compact
cmux browser <surface> screenshot --out /tmp/page.png
cmux browser <surface> get text "selector"
cmux browser <surface> eval "document.title"
10. Utility 명령
cmux ping
cmux capabilities [--json]
cmux identify [--json]
11. 환경 변수
| 변수 | 용도 |
|---|
CMUX_SOCKET_PATH | 소켓 경로 오버라이드 |
CMUX_SOCKET_ENABLE | 소켓 활성화/비활성화 (1/0) |
CMUX_SOCKET_MODE | 접근 모드 (cmuxOnly / allowAll / off) |
CMUX_WORKSPACE_ID | 자동 설정: 현재 워크스페이스 ID |
CMUX_SURFACE_ID | 자동 설정: 현재 서피스 ID |
12. Python Socket Client
import json, os, socket
SOCKET_PATH = os.environ.get("CMUX_SOCKET_PATH", "/tmp/cmux.sock")
def rpc(method, params=None, req_id=1):
payload = {"id": req_id, "method": method, "params": params or {}}
with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock:
sock.connect(SOCKET_PATH)
sock.sendall(json.dumps(payload).encode("utf-8") + b"\n")
return json.loads(sock.recv(65536).decode("utf-8"))
13. 키보드 단축키 요약
Workspace
| 액션 | 단축키 |
|---|
| 새 워크스페이스 | ⌘N |
| 워크스페이스 1~8 이동 | ⌘1~⌘8 |
| 마지막 워크스페이스 | ⌘9 |
| 워크스페이스 닫기 | ⌘⇧W |
| 이름 변경 | ⌘⇧R |
Surface
| 액션 | 단축키 |
|---|
| 새 서피스 | ⌘T |
| 이전/다음 서피스 | ⌘⇧[ / ⌘⇧] |
| 서피스 1~8 이동 | ⌃1~⌃8 |
| 서피스 닫기 | ⌘W |
Split
| 액션 | 단축키 |
|---|
| 우측 분할 | ⌘D |
| 하단 분할 | ⌘⇧D |
| 패널 이동 | ⌥⌘←/→/↑/↓ |
| 브라우저 우측 분할 | ⌥⌘D |
| 브라우저 하단 분할 | ⌥⌘⇧D |
Browser
| 액션 | 단축키 |
|---|
| 브라우저 서피스 열기 | ⌘⇧L |
| 주소창 포커스 | ⌘L |
| 개발자 도구 | ⌥⌘I |
Notifications
| 액션 | 단축키 |
|---|
| 알림 패널 | ⌘⇧I |
| 최근 미읽음 이동 | ⌘⇧U |
14. 소켓 설정 (Access Mode)
| 모드 | 설명 |
|---|
| Off | 소켓 비활성화 |
| cmux processes only | cmux 내부 프로세스만 허용 (기본값) |
| allowAll | 모든 로컬 프로세스 허용 (CMUX_SOCKET_MODE=allowAll) |
소켓 경로: Release /tmp/cmux.sock / Debug /tmp/cmux-debug.sock
15. 자주 사용하는 패턴
멀티 에이전트 워크스페이스 세팅
cmux new-workspace
cmux new-workspace
cmux new-workspace
cmux send --workspace <id> "claude code --resume
"
빌드 알림 패턴
npm run build && cmux notify --title "Build OK" --body "Ready" \
|| cmux notify --title "Build FAIL" --body "Check logs"
사이드바 진행률 표시
cmux set-progress 0.0 --label "Starting..."
cmux set-progress 0.5 --label "Halfway"
cmux set-progress 1.0 --label "Done"
cmux log --level success -- "Task complete"
브라우저 자동화 (로그인 → 스크래핑)
cmux browser open https://example.com/login
SURF=$(cmux browser identify --json | jq -r '.surface_id')
cmux browser $SURF wait --load-state complete --timeout-ms 10000
cmux browser $SURF fill "#email" --text "user@example.com"
cmux browser $SURF fill "#password" --text "$PASSWORD"
cmux browser $SURF click "button[type='submit']" --snapshot-after
cmux browser $SURF wait --text "Dashboard"
cmux browser $SURF screenshot --out /tmp/dashboard.png
아키텍처 요약
cmux (Ghostty 기반 macOS 네이티브)
├── Window ← 최상위 컨테이너
│ └── Workspace ← 탭 단위 (new-workspace)
│ └── Pane ← 분할 영역 (new-split right/down)
│ └── Surface ← 입출력 단위 (send --surface)
│
├── CLI: cmux <command> [options]
├── Socket: /tmp/cmux.sock (JSON-RPC)
└── 제어 영역: 입력전송 / 알림 / 상태바 / 사이드바 / 브라우저