dsh-approve-for-me:規則驅動的沙箱自動審批

前言

在 DeepSeek Harness(DSH)裏跑智能體時,Shell 和 PowerShell 的沙箱擴權默認會彈出原生人工審批。只讀檢查類命令(例如 git statusgit diff)每次都要點確認,開發節奏會被打斷;若直接切到 Full access,又會把整條沙箱邊界拿掉。

dsh-approve-for-me 在這兩種做法之間提供第三條路:用字面命令前綴規則劃定自動審批範圍,可選讓大模型複覈,拿不準時仍交回 Harness 原生人工審批。下面介紹它的定位、安裝方式和配置要點。

這是什麼

dsh-approve-for-me 是維護者 timeance 發佈的 DeepSeek Harness 插件,npm 包名同爲 dsh-approve-for-me,當前版本 0.2.2,MIT 許可證。在 SkillHub 插件目錄 中歸類爲 admin-security。

插件處理 Shell 與 PowerShell 的沙箱擴權請求,依次執行固定高風險檢查、用戶配置的字面命令前綴規則,以及在 rules-and-llm 模式下的可選 LLM reviewer。審批通過時只授予當前請求一次 allowed-once,不會永久放開權限。

該版本已適配 DeepSeek Harness 0.1.1-rc.1,包括 rc1 的第三方 keyed 設置卡片機制和共享客戶端 settings schema service。README 明確說明這是非官方插件,未經獨立安全審計。

核心功能

三種 Access 方式對比

Access 方式 沙箱擴權行爲
Harness 原生審批 每次擴權都詢問用戶
Approve for me 執行固定檢查和用戶規則,可選調用模型,不確定時詢問用戶
Full access 關閉沙箱審批邊界

規則決定自動審批的最大候選範圍。reviewer 只能收緊範圍,不能繞過規則或固定高風險檢查。

決策順序

  1. 當前 Access preset 必須是 approve-for-me
  2. 請求必須是受支持的 Shell 或 PowerShell 擴權,並能嚴格關聯到當前工具調用。
  3. 命令必須通過固定高風險檢查。
  4. 每個命令分段都必須匹配對應工具的字面前綴。
  5. rules-only 模式在規則匹配後返回一次 allowed-oncerules-and-llm 模式還要求 reviewer 返回結構正確的明確 allow

固定高風險檢查覆蓋解析失敗、文件或權限修改、系統和包管理變更、Git/GitHub 寫操作、包管理器生命週期腳本、帶路徑的可執行文件、動態命令執行、憑據訪問和外部寫入等常見風險形態。高風險結果會停止自動審批並把請求交回 Harness,不會直接拒絕命令。

兩種運行模式

  • rules-and-llm(默認):規則匹配後,由無工具 LLM reviewer 做二次判斷。
  • rules-only:僅依賴規則與固定檢查,不調用模型。

Web 配置卡片

web Profile 安裝後,可通過 Settings -> Plugins -> Plugin configuration -> Approve for me 管理命令前綴。卡片只在 loopback 連接中顯示,通過插件自己的 loopback-only RPC 讀寫配置;持久化、schema 校驗和熱加載由 Harness Settings service 負責。卡片不做審批決策,也不依賴 llm-pi-ai

安裝與啓用

先安裝 DSH CLI,再把插件加入目標 Profile。插件和設置按 Profile 隔離,webheadlesstui 需分別安裝。

npm install -g @deepseek-ai/dsh
dsh plugin --profile web add dsh-approve-for-me@latest
dsh web --host 127.0.0.1 --port 3080

啓用分三步:

  1. 打開 Settings -> Plugins -> Plugin configuration -> Approve for me
  2. 只添加你願意自動複覈的命令前綴。
  3. 爲目標 agent 或 session 選擇 Approve for me Access preset。

commandPrefixes 默認爲空,只安裝插件不會自動批准任何命令。@latest 是 npm dist-tag,不是固定版本號;需要可復現安裝時使用 @<version>

僅需要 Host 審批覈心、不需要 Web 設置卡片時:

dsh plugin --profile headless add dsh-approve-for-me@latest

安裝後可用以下命令確認 Profile 中的實際版本:

dsh plugin --profile web list dsh-approve-for-me --depth 0
dsh --profile web --dump-config

配置轉儲應包含 approve-for-me permission preset 和 Host 插件條目。

典型用法

Web 界面配置命令前綴

添加範圍明確的字面前綴。規則匹配經過解析的 token 前綴,不是整條命令完全相等;後面仍可追加參數,因此應儘量寫明子命令和路徑。複合命令中的每個分段都必須分別匹配。

Shell:      git status
Shell:      git diff
PowerShell: Get-Location
PowerShell: Get-Content -LiteralPath README.md

即使前綴看似匹配,已知的包管理器生命週期動作、帶路徑的可執行文件、直接腳本、wrapper、會寫入的 PowerShell alias、解析歧義和固定高風險形態仍會轉人工審批。

YAML 配置

Web 頁面和 $DSH_HOME\settings.yaml 修改同一份 approve-for-me 設置。推薦省略 reviewer.providerreviewer.model,讓每次複覈繼承發起審批請求的 session provider/model:

approve-for-me:
  version: 1
  mode: rules-and-llm
  rules:
    commandPrefixes:
      - tool: shell
        prefix: git status
      - tool: shell
        prefix: git diff
      - tool: pwsh
        prefix: Get-Content -LiteralPath README.md
    reviewerInstructions: >-
      Only allow read-only repository inspection.
  reviewer:
    timeoutMs: 30000
  limits:
    trustedTranscriptChars: 12000
    untrustedToolDataChars: 8000
    reviewerOutputChars: 2000

如果請求 session 沒有完整的 provider/model 路由,reviewer 不會自動允許,請求轉人工審批。不需要模型複覈時設置 mode: rules-only

需要固定 reviewer 路由時,同時填寫 provider 和 model 標識;模型憑據仍由 Harness 管理,插件只保存標識。

驗證是否生效

  1. 匹配的只讀擴權應獲得一次性批准。
  2. 未匹配或高風險請求仍顯示原生人工審批。
  3. 切換到其他 Access preset 後,插件不再參與當前 session 的審批。

適用場景與注意

適合在 DSH 中頻繁執行可預期的只讀命令、希望減少重複點擊審批、又不願切換到 Full access 的開發者。headless Profile 可通過 YAML 單獨配置,不依賴 Web 卡片。

使用前應注意:

  • 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與 MIT 許可證。
  • 內置檢查是保守分類器,不能證明未命中的命令一定安全;正向 allowlist 應儘可能窄。
  • 沒有內置正向規則,只有固定高風險檢查;具體允許哪些命令需自行配置。
  • 兼容性基線:DeepSeek Harness 0.1.1-rc.1,Node.js ^22.19.0 || >=24.0.0

結尾

dsh-approve-for-me 在保留沙箱邊界的前提下,用規則、可選 LLM 複覈和原生人工回退三層機制處理擴權請求,適合需要精細控制自動審批範圍的 DSH 用戶。

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

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

小夜