Cursor Best-of-N 與 worktrees.json:多模型比較與自動環境設定

6 min read
Cursor Best-of-N 與 worktrees.json:多模型比較與自動環境設定

上一篇 08-worktree-merge 講了 Cursor 自動 worktree 與 Apply 策略。這篇接著談兩件事:Best-of-N(讓多個模型同時做同一題,你當評審挑一個)和 worktrees.json(worktree 建好後自動準備開發環境)。

Best-of-N:一題多做,你選最好的

一個 prompt,Cursor 用多個模型同時在各自 worktree 裡跑,最後出現多張「卡片」,每張是一個模型的改動結果——你翻卡片、挑最好的那張按 Apply

什麼時候值得用?

情境 為什麼好用
不確定哪個模型最適合這個 codebase 跑一次就是小型 benchmark,比自己猜準
難題怕單一模型漏掉 edge case 多個模型不同思路,容易補到對方的盲點
想比較程式碼品質與風格 同一份需求看三四種寫法,一目了然
任務很難、想提高一次就中的機率 多個模型各試一次,挑最好的再 Apply

一句話:多個模型同時做同一題,你當評審挑一個。適合難題、想要品質、或對某個模型沒把握的改動。

怎麼用

在 Cursor 裡開 Agent 時,選擇多個模型或 Best-of-N 相關選項(依目前介面為準)。送出 prompt 後出現多張卡片,切換卡片比較各模型的改動,滿意的那張按 Apply

若同一個 Best-of-N 裡你想 Apply 多張卡片(先 Apply A 再 Apply B),Cursor 可能會問:合併與衝突解決 還是 Full Overwrite——這部分邏輯跟 08-worktree-merge 一樣,不另外重複。

worktrees.json:worktree 建好就有完整環境

Cursor 建立 worktree 時,預設只帶主目錄已追蹤的檔案——不會幫你裝依賴、複製 .env、跑資料庫遷移。每次建了新 worktree 都要手動做這些,很快就會膩。

.cursor/worktrees.json 解決這件事:指定「每個新 worktree 建立後要自動執行的指令」,一次設定、之後每個 worktree 建好就是完整環境。

設定檔放哪

放在專案根目錄.cursor/worktrees.json,Cursor 會自動讀到。

三個設定鍵

說明
setup-worktree 通用,所有作業系統都跑(除非有 OS 專用覆蓋)
setup-worktree-windows Windows 專用,優先於 setup-worktree
setup-worktree-unix macOS / Linux 專用,優先於 setup-worktree

每個鍵可以是字串(腳本檔路徑)或陣列(一連串 shell 指令依序執行)。

Node 專案範例

{
  "setup-worktree": [
    "npm ci",
    "cp $ROOT_WORKTREE_PATH/.env .env"
  ]
}

$ROOT_WORKTREE_PATH 是 Cursor 提供的環境變數,指向主工作目錄——用來複製 .env 或其他只存在主目錄的檔案。Windows 的複製語法不同,可以拆成 OS 專用:

{
  "setup-worktree-unix": [
    "npm ci",
    "cp $ROOT_WORKTREE_PATH/.env .env"
  ],
  "setup-worktree-windows": [
    "npm ci",
    "copy %ROOT_WORKTREE_PATH%\\.env .env"
  ]
}

需要跑資料庫遷移

{
  "setup-worktree": [
    "npm ci",
    "cp $ROOT_WORKTREE_PATH/.env .env",
    "npm run db:migrate"
  ]
}

流程複雜:改用腳本檔

指令多到寫在 JSON 裡很難維護,改放腳本:

{
  "setup-worktree-unix": "setup-worktree-unix.sh",
  "setup-worktree-windows": "setup-worktree-windows.ps1",
  "setup-worktree": ["echo 'Using generic fallback'"]
}

腳本放在 .cursor/ 目錄下,Windows 用 .ps1,記得在腳本裡用 $env:ROOT_WORKTREE_PATH 取得主目錄路徑。

依賴安裝不要用 symlink 連進 worktree——容易跟主 worktree 打架。用 npm cipnpmbunuv 在 worktree 裡重新安裝比較穩。

Worktree 清理與數量上限

Cursor 會自動管理 worktree 數量——每個 workspace 有上限(例如 20),超過就依最後使用時間刪最舊的。不同 repo 之間互不影響。

如果想調整,可以在設定裡找:

  • cursor.worktreeMaxCount:最多保留幾個 worktree
  • cursor.worktreeCleanupIntervalHours:多久清理一次

實際鍵名以 Cursor 當前版本為準。

worktree 設定出了問題怎麼查

依賴沒裝好、遷移沒跑——打開 Cursor 的 Output 面板,在 dropdown 選 「Worktrees Setup」,就能看建立時執行的指令與錯誤訊息。比對著 worktrees.json 和腳本來排查,通常很快能找到問題。


Best-of-N 是「用數量換品質」——難題值得這樣投資。worktrees.json 是「把環境準備自動化」——設一次,之後省去重複的手動步驟。兩個都不難設,但第一次設好之後差異很明顯。

下一步:10-headless-scripts — 用 --print--force 在腳本裡真的改檔案。