dsh-auto-mode:用審查模型接管 DSH 的工具調用審批

前言

用 DSH(DeepSeek Harness)跑長任務時,權限機制是個兩難:默認的審批鏈會在每個需要確認的工具調用上彈出確認框,任務一長就要反覆人工介入;切到 danger-full-access 又放得太開,所有調用都不再過問。

dsh-auto-mode 給了一箇中間態:在權限選擇器裏新增一個 Auto mode 預設,把通常需要人工確認的工具調用交給一個審查模型判定,能自動批准的批准,可疑的攔截,拿不準的再彈框問你。下面介紹這個插件的用法和實現方式。

這是什麼

dsh-auto-mode 是一個 DSH 插件,作者是 Nuo-cl,採用 MIT 許可證,當前版本 0.1.1。用 README 的話說,它把經過權限門檻的工具調用先路由到一個 LLM 審查,再決定批准、攔截,還是請求人工確認(routes permission-gated tool calls through an LLM review before approving, blocking, or asking for confirmation)。

它不修補 DSH 核心服務:Auto mode 預設通過 cordis.patch.yml 的 bundle patch 聲明,與內置的 read-only / workspace-write / danger-full-access 並列出現在權限選擇器中。

決策鏈是怎麼走的

選中 Auto mode 後,插件以 prepend 方式註冊 approval/request 應答器,在 web UI 應答器之前接管審批。一次工具調用進來,按這個順序處理:

  1. deny 規則最先評估,命中即拒絕。操作者的否決始終優先。
  2. allow 規則命中則直接批准。
  3. allowlist 裏的預批准工具不經模型,直接批准。默認列表是 read、glob、grep、todo_write、web_search、job_list、list_agents。
  4. 其餘調用交給審查模型,它基於對話記錄和請求內容給出三種裁定之一:
    - allow:直接批准;
    - reject:審查者判定調用有害或違背用戶利益,拒絕;
    - ask:調用影響較大但可能符合意圖(安裝依賴、寫工作區之外、發送數據等),彈出確認對話框,提供三個選擇——允許、拒絕、或拒絕並輸入應如何處理。輸入的文本直接注入會話,在下一步模型調用時可見。

審查模型沒有產出裁定時(API 錯誤、中止、截斷),行爲可配置:failClosed 設爲 true 就拒絕,否則回退到普通審批鏈。另外 ask 確認對話框需要 questions provider 支持,沒有時會退回普通審批鏈。

插件還會按 agent 遮蔽核心 approval:policy 系統提示上下文,使 auto mode 會話對模型報告爲 auto 而非 ask,並把工具結果裏「用戶拒絕了」的措辭澄清爲審查者裁定,而不是人工否決。

規則語法

tool            按名稱匹配工具(大小寫不敏感),如 read
tool:pattern    匹配請求 reason 含指定模式的工具,如 read:/etc/pwsh:rm -rf
*               任意工具
*:pattern       reason 含指定模式的任意工具

兩類匹配方式:

  • *? 的模式是對整個 reason 的通配匹配,例如 read:/etc/*
  • 其餘模式是大小寫不敏感的子串匹配,例如 read:/etc/

安裝與啓用

標準安裝命令:

dsh plugin --profile web add dsh-auto-mode@<version>

如果用本地檢出的代碼安裝,先在 C:\Users\<you>\.dsh\profiles\web\package.json 的 dependencies 中加入:

"dsh-auto-mode": "file:E:/Project/Interests/dsh-auto-mode"

並在 dsh.profile.bundles 中加入 "dsh-auto-mode",然後執行:

pnpm install --dir C:\Users\<you>\.dsh\profiles\web

安裝後重啓 web 應用,權限選擇器(聊天框左下角)會出現 Auto mode;輸入 /auto 可以直接把當前會話切到 auto mode。

配置項

所有選項都有默認值,空 {} 配置即有效:

  • classifier.provider / classifier.model:審查模型路由,默認 '',空則跟隨會話當前模型;
  • classifier.maxTranscriptMessages:送入審查的對話記錄條數,默認 40;
  • classifier.maxTokens:審查輸出預算,默認 512;
  • classifier.temperature:審查採樣溫度,默認 0;
  • classifier.askFallback:審查模型返回 ask 時回退人工審批鏈,默認 true;設爲 false 則視爲拒絕;
  • rules.allow / rules.deny / rules.environment:allow 規則、deny 規則和注入審查提示的環境說明,默認 []
  • allowlist:不經審查模型直接批准的工具,默認 read、glob、grep、todo_write、web_search、job_list、list_agents;
  • failClosed:審查失敗時是否拒絕,默認 false,即回退普通審批鏈。

Auto mode 預設的標籤、描述和沙箱模式也寫在 cordis.patch.yml 裏,因爲權限預設表需要在 @deepseek-ai/dsh-permission-presets 構建設置 schema 時就可用。

兼容性

插件針對 DSH 0.1.0-rc.6 測試。bundle patch 重述了內置權限預設表(read-only / workspace-write / danger-full-access),所以 DSH 升級後,需要檢查 cordis.patch.yml 中的這張表,按內置預設的變化做更新。

另外,DSH 內置權限圖標表沒有自定義預設 id 的圖標,UI 有意回退爲純文本標籤,本插件不修補 DSH 客戶端 bundle。

適用場景與注意事項

Auto mode 適合想在長任務中減少人工確認、又不放心完全放開權限的場景。但用它之前,有幾件事需要清楚:

  • 它是便利模式,不是安全邊界。 審查模型會讀取最近對話記錄和請求的動作,併發送到配置的 LLM 路由(默認是會話當前模型)。對隱私敏感的任務要考慮這一點。
  • 警惕提示注入。 工作區內的惡意內容(文件、工具結果)可能對審查模型進行提示注入。確定性 deny 規則和預批准工具列表先於模型評估,真正依賴的規則應寫在這裏,而不是指望模型把關。
  • 沙箱仍然生效。 默認預設使用 workspace-write 沙箱,工作區外的寫入仍需走沙箱提權或審批路徑。
  • 審查失敗的行爲要主動選擇。 如果希望審查模型失敗時直接拒絕而不是回退彈框,設置 failClosed: true
  • 插件以當前 dsh 進程的權限運行。 安裝前應檢查插件源碼與許可證(MIT),確認沒有問題再裝入自己的 profile。

小結

dsh-auto-mode 的價值在於給 DSH 的權限檔位補了一個可調的中間態:deny 規則和 allowlist 兜底,審查模型處理灰區,ask 彈框保留人工最終決定權。規則語法和配置項都有默認值,空配置即可跑起來,再按需收緊。

插件目錄頁:https://www.skillhub.cn/plugins/Nuo-cl/dsh-auto-mode

源碼倉庫:https://github.com/Nuo-cl/dsh-auto-mode

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜