AI 程式設計教程中文版
官方教程中文版

終端與命令控制

整理 Windsurf Terminal、Command 模式、Cascade 終端上下文、auto-execution、allow/deny list、團隊控制和 dedicated terminal。

Windsurf Terminal 的核心價值,是把 Cascade 從“會建議命令”推進到“能在受控邊界內使用命令”。這也是風險來源:終端能測試、構建和定位問題,也能刪除檔案、推送程式碼、改基礎設施、洩露環境變數。

官方 Terminal 頁面覆蓋 Command 模式、傳送終端選區到 Cascade、@ mention terminal、四檔 auto-execution、allow/deny list、團隊級命令策略、macOS dedicated terminal 和 legacy terminal 排障。學習順序應該先許可權,再自動化。

閱讀目標:讀完本章,你應該能為個人專案和團隊專案分別配置一套安全的命令執行邊界。

1. Command 模式只負責生成命令

Windsurf terminal 支援 Command modality,官方快捷鍵是 Cmd/Ctrl+I。它的用途是把自然語言轉換成更合適的 CLI 語法。

適合這樣用:

生成查看当前分支和未提交改动的命令,不要执行。

不適合這樣用:

直接清理项目并重新部署生产环境。

Command 模式解決的是“命令怎麼寫”,不是“這條命令該不該執行”。涉及刪除、遷移、部署、付款、鑑權、SSH、基礎設施和生產資料時,必須人工判斷。

2. 終端上下文可以送進 Cascade,但先脫敏

官方提供兩類終端上下文入口:

  • 選中 stack trace 後按 Cmd/Ctrl+L,把選區送進 Cascade。
  • @ mention active terminal,讓 Cascade 圍繞活動終端回答。

這比手動複製一大段日誌更準確,但終端輸出經常帶敏感資訊:

輸出型別風險處理方式
環境變數可能含 token、資料庫 URL、賬號傳送前刪除或只擷取錯誤行
構建日誌可能暴露私有路徑、內部包名保留錯誤上下文,去掉無關路徑
第三方 API 錯誤可能含客戶資料或 request id只提供必要欄位
SSH / cloud 日誌可能含主機、使用者名稱、IP先判斷是否需要脫敏

不要把 env.npmrc、cloud credentials 或完整 CI 日誌直接送進對話。終端上下文屬於模型上下文,不是金鑰管理工具。

推薦提示詞:

只分析我选中的终端错误。
不要推断未出现的密钥、账号或内部服务。
先列出最可能的 3 个根因,再给只读验证命令。

如果需要讓 Cascade 繼續執行命令,先讓它把命令、目的、風險和預期輸出列出來。終端上下文可以讓定位更快,但不應該繞過命令審批。

3. 四檔 Auto-Execution

官方把 Cascade 自動執行命令分成四檔:

Level官方含義實操建議
Disabled所有命令都需要人工批准新儲存庫、生產儲存庫、敏感專案預設值
Allowlist Only只有 allow list 匹配命令可自動執行個人真實專案的推薦起點
AutoCascade 判斷命令是否安全,風險命令仍需批准;官方說明只適用於 premium models 傳送的訊息適合有清晰 deny list 的成熟專案
Turbo除 deny list 外,命令會立即自動執行只用於臨時沙箱,不用於真實生產儲存庫

在哪裡切換:編輯器右下角的 Windsurf Settings 面板。Teams / Enterprise 的管理員可以在 Admin Portal 設最高階別上限,成員只能選不超過該上限的級別。

flowchart TD
    Need["Cascade 想執行命令"] --> Level{"Auto-execution level"}
    Level --> Disabled["Disabled: 全部人工批准"]
    Level --> Allow["Allowlist Only: 只放行 allow list"]
    Level --> Auto["Auto: 模型判斷安全性"]
    Level --> Turbo["Turbo: 除 deny list 外立即執行"]
    Allow --> Deny{"命中 deny list?"}
    Auto --> Deny
    Turbo --> Deny
    Deny -->|是| Approve["必須人工批准"]
    Deny -->|否| Execute["可自動執行或繼續判斷"]

    style Approve fill:#fee2e2,stroke:#dc2626,stroke-width:2px
    style Execute fill:#dcfce7,stroke:#16a34a,stroke-width:2px

對商業專案,推薦預設策略是 Allowlist Only。先讓 lint、test、build、git read-only 命令自動執行,再逐步擴大。不要一上來開 Turbo。

4. Allow list 和 Deny list 的優先順序

官方說明 allow list 匹配的命令會自動執行;deny list 匹配的命令不會自動執行,會要求使用者批准。團隊級和個人級列表會合並;如果同一命令同時命中 allow 和 deny,deny list 優先。

在哪裡編輯:開啟 Command Palette(Cmd+Shift+P / Ctrl+Shift+P)→ Open Settings (UI) → 搜 windsurf.cascadeCommandsAllowListwindsurf.cascadeCommandsDenyList,逐行加命令字首;Teams / Enterprise 的團隊級列表在 Admin Portal → Team Settings → Terminal Commands → Manage Lists 裡維護,會與個人列表合併。

個人專案可以從這組 allow list 開始:

git status
git diff
git branch
pnpm lint
pnpm test
pnpm run typecheck
pnpm run build
npm test
pytest

deny list 應覆蓋破壞性和外聯能力:

rm
mv
git push
git reset
git clean
curl
wget
ssh
scp
rsync
kubectl
terraform
docker push
vercel

這不是永久禁止,而是要求人工確認。比如 curl 可以用於讀取公開文件,也可以把本地檔案發出去;讓它進 deny list 更符合真實專案邊界。

深讀:為什麼 allow list 不應該只寫 git

官方示例說明,如果 allow list 加了 git,Cascade 可能會自動接受 git add -A 這類命令。真實專案裡,git statusgit diff 是隻讀,git addgit commitgit push 會改變儲存庫狀態或遠端狀態。

因此更穩的是寫完整命令字首,而不是粗粒度放行整個工具名。把 git statusgit diff 放進 allow list,把 git pushgit reset 放進 deny list,風險邊界更清楚。

5. 團隊級命令控制

Teams 和 Enterprise 管理員可以設定最高 auto-execution level,也可以配置團隊級 allowlist / denylist。官方給出的邏輯是:管理員設定上限後,成員只能選擇不超過該上限的級別;團隊級列表會和個人列表合併。

推薦團隊策略:

專案型別最高階別團隊 allow list團隊 deny list
文件站、教程站Allowlist Only 或 Autolint、typecheck、build、只讀 gitpush、reset、deploy、刪除、外聯命令
內部業務系統Allowlist Onlytest、lint、只讀診斷資料庫遷移、支付、生產部署
基礎設施儲存庫Disabled 或 Allowlist Onlyplan、fmt、validateapply、destroy、kubectl 寫操作
臨時 demoAutotest、build、啟動命令真實賬號和生產後臺相關命令

把命令策略寫進 repo AGENTS.md.windsurf/rules/,讓 Cascade 在任務開始前就知道邊界,而不是等它生成危險命令後再攔。

團隊策略還應該寫清楚三件事:

  1. 誰可以臨時提高 auto-execution level。
  2. 哪些命令必須在 PR、issue 或變更單裡留下記錄。
  3. 失敗命令是否允許 Cascade 自動重試。

自動重試尤其要謹慎。構建失敗可以重試,扣費 API、資料庫遷移、部署和基礎設施寫操作不應該讓 agent 自行重試。

6. Dedicated terminal 和排障

官方說明,從 Wave 13 起,Windsurf 在 macOS 上為 Cascade 引入 dedicated terminal。它與預設終端分離,並始終使用 zsh;這個終端會讀取 .zshrc 和其他 zsh 配置,因此 alias 和環境變數可能可用。

如果你的日常 shell 不是 zsh,官方建議建立共享配置檔案,讓不同 shell 都能 source 同一組環境變數。這樣可以避免“你在普通終端能執行,Cascade dedicated terminal 不能執行”的差異。

遇到 dedicated terminal 問題,官方提供的回退方式是開啟 Windsurf settings 裡的 Legacy Terminal Profile。

建議把共享環境變數拆成只含非敏感配置的檔案,例如:

# ~/.config/dev-env/common.sh
export PNPM_HOME="$HOME/Library/pnpm"
export PATH="$PNPM_HOME:$PATH"

金鑰仍然應該走系統 keychain、環境注入或工具自己的憑據機制,不要為了讓 Cascade terminal 能讀到就寫進 .zshrc

本章自檢

完成本章後,用這 4 個問題檢查:

  1. 你的預設 auto-execution level 是什麼?為什麼?
  2. allow list 是否只放行了低風險、可重複命令?
  3. deny list 是否覆蓋刪除、推送、部署、SSH、基礎設施和外聯命令?
  4. 你是否知道 dedicated terminal 使用 zsh,以及出問題時如何回退 legacy terminal?

透過標準:你能讓 Cascade 自動跑 lint/test/build,但不會自動刪除、推送、部署或訪問生產資源。

官方來源

  • Terminal —— 官方終端文件,覆蓋 Command 模式、終端選區、@ mention terminal、auto-execution levels、allow/deny list、團隊控制、dedicated terminal 和 troubleshooting。
  • Cascade Overview —— 官方 Cascade 總覽,說明 Cascade 可以使用 terminal 等工具。

接下來去哪

本頁目錄