MUST · 手搓你的 AI Agent · 組件 06

權限模式閘門

同一個 Agent 提出六種行動;切換權限模式與沙箱等級,看哪些直接跑、哪些先問你、哪些被攔——模式決定誰是安全檢查。

先看整體:兩道閘

組件 02 說模型只會寫「請求單」,做事的是 Harness。這一頁看 Harness 收到請求單之後,誰決定做不做

Harness 收到一張請求單(讀檔、改檔、上網……),會經過兩道閘。審批(approval)是「問人」:彈一個對話框,等你按允許或拒絕。沙箱(sandbox)是「程式攔」:作業系統層面規定這個正在執行的程式(process)只能碰哪些檔案,超出範圍的動作直接失敗,不問也不商量。權限模式(permission mode)就是這兩道閘的組合預設——你切換一個模式,其實是在決定每一種行動由誰檢查

  1. 提示與指令檔(建議)「請不要刪檔案」——模型可以照做,也可以不照做。組件 04、09 的主線。
  2. 審批:問你(人在迴路)Harness 停下來等你按鈕。安全檢查是——前提是你有在看。
  3. 沙箱、拒絕清單與工具開關:程式攔(強制)作業系統不讓這個正在執行的程式(process)碰工作區以外的檔案;拒絕清單(deny rules)裡的動作一律不跑;乾脆不給的工具,模型連請求單都寫不出。安全檢查是程式,不靠任何人的注意力。

切換模式,看六種行動的命運

左邊選工作台與模式,右邊六行即時更新。三個工作台的按鈕名字不同,底下是同一套概念(見頁末「同一概念、不同名字」對照表)。

工作台(殼,shell)

六種行動(同一個 Agent、同一個任務:「整理我的第 3 講筆記並寄給導師」)

行動結果誰在檢查為甚麼本次運行

結果為教學簡化:Claude Code/Cline 依 2026-09 文檔,dsh 依 2026-09-05 雲機 PoC 實錄(見頁尾);真實觸發條件還會受拒絕清單、允許規則、hooks 與受保護路徑影響。

這次運行,六張請求單的安全檢查是誰

程式(沙箱/清單)分類器(classifier,第二個模型)無人

重點一

模式決定誰是安全檢查

問你=你在檢查;沙箱=程式在檢查;auto 模式=第二個模型(分類器)在檢查;全開=無人檢查。切換模式不是「快一點或慢一點」,是把檢查員換掉。

重點二

沙箱管檔案,不管網絡

dsh 的沙箱文檔明言「網絡與程式(process)可見性不在這套詞彙之內」:沙箱只圈住檔案能寫到哪裡。而審批只在模型申請提權時才出現——所以上網、寄郵件這類對外通道,兩道閘都碰不到,靠的是工具開關與白名單。這正是組件 09 的第三盞燈。

所以:在 dsh 裡上網與寄郵件誰都不檢查——不論選哪個權限預設(preset)。要擋只能關掉工具、或只給白名單(課程版設定關掉了 19 個工具,正是這個原因)。
重點三

問你,前提是你有在看

「問你」只在你真的讀了對話框才是檢查;連按二十次允許,等於沒有檢查。這就是 Claude Code 為甚麼加了「auto」模式:用第二個模型代替疲勞的你——但按 2026-09 文檔,它只看模型想做的動作,不看網頁回傳的內容——被下毒的網頁仍要靠組件 09 的防線。

執行梯度:提示是建議,審批靠注意力,沙箱與拒絕清單才是強制。要守住的底線,放在最強制那一級——沙箱、拒絕清單,以及乾脆不給工具。

想一想

  1. 把 dsh 設成 read-onlyask,六張請求單有幾張會問你?哪幾張不問也不攔?如果你正在開會沒空看,Agent 會怎樣?(提示:fail-closed——拿不到批准就當拒絕,不會偷偷放行。)
  2. Claude Code 的 acceptEdits 為甚麼放行「改檔」卻不放行「刪工作區外的資料夾」?兩者差在哪裡:可逆性、還是位置?
  3. Cline 只開「Use MCP servers」一格,其他全關。「寄郵件」會直接跑——這算是你批准了嗎?誰在檢查?
  4. 有沒有一種行動,任何模式都不應該自動放行?你會把它放在執行梯度的哪一級?
教師提示(討論後展開)

第 1 題:read-only 下改檔、刪檔、安裝都先被沙箱攔下,模型再申請提權才彈審批卡,三張會問(示意:假設模型每次都申請提權;它也可能放棄);上網與寄郵件不經沙箱、也不觸發審批(見頁尾 PoC 實錄),直接跑——這才是要警惕的一點。沒有可用的審批通道時,dsh 的審批鏈 fail-closed:當作拒絕而非放行(本頁簡化為「沒人回應=拒絕」),Agent 會收到失敗再想別的辦法。第 2 題:答案是位置命令類型不是可逆性——acceptEdits 不會判斷一個動作可不可逆,它只看:是不是工作目錄內的檔案編輯、命令是不是在「常見檔案命令」(mkdir/touch/mv/cp)名單上。rm -rf 一個工作區外的路徑兩項都不符,所以要問你。第 3 題:是你「事先」批准了一整類動作,檢查發生在開關那一刻,之後每一次都是無人檢查;這正是 Cline 文檔把 YOLO 模式標成危險的原因。第 4 題:寄出、付款、刪除不可逆資料、動用憑證(密碼、金鑰)——這些應放在拒絕清單或必問規則(Claude Code 靠 deny/ask 規則;dsh 的審批政策管不到 MCP 與 web 工具,只能關掉工具或只給白名單),不靠模式。

問你的 Agent(動手時間開頭 10 分鐘):問它「你現在的權限模式是甚麼?哪些動作會先問我、哪些直接做、哪些做不到?」再叫它讀一個工作區外的檔案,看它是問你、被攔、還是直接讀了。把答案跟本頁的表對一對。

同一概念、不同名字

三個工作台的按鈕怎樣對應本頁的兩道閘。名字會變,概念不變——這是「殼是透明的」。

概念dsh(DeepSeek Harness)Claude CodeCline
審批(問人)approval/policyasknever;結果 allowed-oncerejected權限對話框;askallowdeny 規則Auto Approve 每格關掉=問你
沙箱(程式攔)sandbox/moderead-onlyworkspace-writedanger-full-access(Linux bwrap/Landlock、macOS Seatbelt)Bash 沙箱(/sandbox;macOS/Linux/WSL2)無 OS 沙箱;靠「project files」與「all files」的範圍
模式(兩閘的預設組合)權限預設(permission preset):read-only(=read-only + ask)、workspace-write(=workspace-write + ask,預設)、danger-full-access(=full + never)defaultacceptEditsplanautodontAskbypassPermissionsAuto Approve 九格開關;YOLO=全開
第二個模型當檢查員auto 模式的分類器(classifier)
先計劃後執行/planplan 模式Plan/Act 切換
全開、無人檢查danger-full-access presetbypassPermissions(文檔:只限隔離容器與虛擬機)YOLO Mode