系列文章: Cmux (6/7)

自訂指令:讓 CMUX 記住你的工作流
你有沒有每次開工都在做同樣的事:開一個窗格跑 npm run dev,切過去開 preview 瀏覽器,再開一個 shell 備著?每次都要手動配置,三分鐘就這樣沒了。
CMUX 的自訂指令就是要解這個問題。把固定的工作環境寫成 cmux.json,之後一個指令就還原整個工作區佈局。
cmux.json 在哪放
在你的專案根目錄建一個 cmux.json,CMUX 會自動讀取它,把裡面定義的指令加進可用清單。
兩種指令類型
工作區指令(Workspace Command):打開 CMUX 並建立一個預設好佈局的工作區,帶上終端機、瀏覽器、分割方式全都定義好。適合「開工」這種場景。
簡單指令(Simple Command):執行一個 shell 指令,不建立工作區。適合「跑測試」、「初始化環境」這類一次性操作。
工作區指令:定義開發環境
這是最完整的例子,一個指令同時開好 Next.js dev server + 瀏覽器 preview + 備用 shell:
{
"commands": [
{
"name": "Web Dev",
"description": "啟動 Next.js 並打開 preview",
"keywords": ["web", "docs", "next", "frontend"],
"restart": "confirm",
"workspace": {
"name": "Web Dev",
"cwd": "./web",
"color": "#3b82f6",
"layout": {
"direction": "horizontal",
"split": 0.5,
"children": [
{
"pane": {
"surfaces": [
{
"type": "terminal",
"name": "Next.js",
"command": "npm run dev",
"focus": true
}
]
}
},
{
"direction": "vertical",
"split": 0.6,
"children": [
{
"pane": {
"surfaces": [
{
"type": "browser",
"name": "Preview",
"url": "http://localhost:3777"
}
]
}
},
{
"pane": {
"surfaces": [
{
"type": "terminal",
"name": "Shell",
"env": { "NODE_ENV": "development" }
}
]
}
}
]
}
]
}
}
}
]
}拆解這個設定:
name/description:顯示在指令清單裡的名稱與說明keywords:搜尋用,輸入關鍵字就能找到這個指令restart:如果工作區已存在,"confirm"會詢問是否重新啟動;"ignore"直接跳過workspace.cwd:這個工作區的預設工作目錄workspace.color:側邊欄上這個工作區的識別顏色layout:定義整個佈局結構
佈局結構的邏輯:direction 是分割方向("horizontal" 左右、"vertical" 上下),split 是分割比例(0.5 就是對半),children 裡面放各個窗格。
這個例子建出來是:左半邊跑 Next.js,右半邊上方是瀏覽器 preview,下方是備用 shell。
簡單指令:一次性操作
不需要佈局的操作,用簡單格式:
{
"name": "Setup",
"description": "初始化 submodules 和 build dependencies",
"keywords": ["setup", "init", "install"],
"command": "./scripts/setup.sh",
"confirm": true
}confirm: true 表示執行前會彈出確認提示,適合有破壞性的操作(清快取、重裝依賴)。
{
"name": "Run Unit Tests",
"keywords": ["test", "unit"],
"command": "./scripts/test-unit.sh",
"confirm": true
}監控 Log 的工作區
另一個常見場景——開一個工作區專門監控 log,放著讓它滾:
{
"name": "Debug Log",
"description": "即時監控 debug event log",
"keywords": ["log", "debug", "tail"],
"restart": "ignore",
"workspace": {
"name": "Debug Log",
"layout": {
"direction": "horizontal",
"split": 0.5,
"children": [
{
"pane": {
"surfaces": [
{
"type": "terminal",
"name": "Events",
"command": "tail -f /tmp/app-debug.log",
"focus": true
}
]
}
},
{
"pane": {
"surfaces": [
{
"type": "terminal",
"name": "Shell"
}
]
}
}
]
}
}
}restart: "ignore" 的邏輯是:如果這個工作區已經在跑,就不要重開,讓它繼續監控。
幾個設計原則
用 keywords 要想好:指令多了之後,keywords 是你找得到它的唯一方法。把常打的動詞放進去,比如 ["start", "dev", "run"]。
cwd 用相對路徑:./web 比 /Users/yourname/projects/app/web 好,這樣設定可以在不同機器上直接用。
顏色用來分類:不同類型的工作區給不同顏色——開發用藍、測試用橘、監控用灰,側邊欄掃一眼就能辨認。
自訂指令設定好之後,最後一篇來看怎麼把這些東西組合成真實的多 Agent 工作流:多 Agent 實戰工作流:CMUX 在真實開發的使用套路。