自訂指令:讓 CMUX 記住你的工作流

自訂指令:讓 CMUX 記住你的工作流

5 min read

你有沒有每次開工都在做同樣的事:開一個窗格跑 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 在真實開發的使用套路。