系列文章: Cmux (4/7)

工作區、窗格、分頁:CMUX 三層結構全解
很多人裝好 CMUX 之後,打開來看就覺得「跟 tmux 差不多啊」——然後就只用到它三成功能。問題通常是:沒搞清楚它的三層結構。搞懂之後你才知道為什麼每一個設計決定都是有意義的,也才能真正按任務切分空間。
先看視覺全貌
CMUX 的介面長這樣:
┌──────────────────────────────────────────────────────┐
│ ┌──────────┐ ┌─────────────────────────────────────┐ │
│ │ Sidebar │ │ Workspace "dev" │ │
│ │ │ │ │ │
│ │ │ │ ┌───────────────┬─────────────────┐ │ │
│ │ > dev │ │ │ Pane 1 │ Pane 2 │ │ │
│ │ server │ │ │ [S1] [S2] │ [S1] │ │ │
│ │ logs │ │ │ │ │ │ │
│ │ │ │ │ Terminal │ Terminal │ │ │
│ │ │ │ │ │ │ │ │
│ └──────────┘ └───────────────┴─────────────────┘ │ │
└──────────────────────────────────────────────────────┘
左側是側邊欄,列著三個工作區(dev、server、logs)。目前選中 "dev",右邊顯示兩個並排的窗格,窗格 1 裡面還有兩個分頁(S1 和 S2)。
這是三層:工作區 → 窗格 → 分頁(Surface),加上最底層的面板(Panel)。
第一層:視窗(Window)
最外層就是 macOS 視窗,用 ⌘⇧N 建立新的。一般來說你不太需要管這層,多視窗是顯示器空間夠大才會用到的場景。
第二層:工作區(Workspace)
工作區是側邊欄的每一個項目,用 ⌘N 建立。
這層是你組織工作任務的單位——一個代理、一個功能分支、一個任務,用一個工作區隔開。每個工作區有自己的名稱、可以設顏色,還有環境變數 CMUX_WORKSPACE_ID 讓你的腳本知道自己在哪個工作區裡跑。
實際使用場景:
feature-auth:Auth 功能開發,這個代理在這跑test-runner:專門跑測試的工作區logs:監控 log,放著讓它滾
三者互相不干擾,你在側邊欄一眼就能掃完狀態。
第三層:窗格(Pane)
工作區裡可以橫切或直切,切出多個窗格,用 ⌘D(水平)或 ⌘⇧D(垂直)分割。
窗格是螢幕空間分配的單位,讓你在同一個工作任務裡同時看到多個輸出。比如左邊跑 dev server,右邊開瀏覽器 preview,它們還是同一個「任務」,只是你需要同時看。
第四層:分頁(Surface)
每個窗格裡可以有多個 Surface——類似瀏覽器的分頁,用 ⌘T 新增。每個 Surface 有自己的識別 ID(CMUX_SURFACE_ID),這在用 socket API 做自動化時會用到。
面板(Panel)
最底層。每個 Surface 裡跑一個面板,面板可以是終端機或瀏覽器。對,你可以在窗格裡直接開瀏覽器,不用切去 Chrome 再切回來。
層級總覽
| 層級 | 說明 | 建立方式 | 識別方式 |
|---|---|---|---|
| 視窗 | macOS 視窗 | ⌘⇧N |
— |
| 工作區 | 側邊欄項目 | ⌘N |
CMUX_WORKSPACE_ID |
| 窗格 | 分割區域 | ⌘D / ⌘⇧D |
窗格 ID(socket API) |
| Surface | 窗格內的分頁 | ⌘T |
CMUX_SURFACE_ID |
| 面板 | 終端機或瀏覽器 | 自動 | 面板 ID(內部) |
怎麼用這個結構管理多個代理
一個常見的配置:
工作區 = 代理(或任務)
每個代理一個工作區,名稱叫它在做什麼——claude-feature、claude-test、monitoring。
窗格 = 同一任務內的不同觀察角度 同一個 feature 工作區裡,左邊是代理輸出,右邊是瀏覽器預覽,都屬於這個任務。
Surface = 備用空間 一個窗格裡預留一個 shell Surface,隨時可以跳過去手動執行東西,不干擾主要代理的輸出。
這樣設計下來,你的螢幕不會亂——每一格都有它的角色,你也知道要看哪裡。
三層結構搞定,下一篇來調設定——字型、顏色、捲動這些讓你用得舒服的細節:CMUX 設定檔完整指南。