前言¶
在 DeepSeek Harness(DSH)裏跑智能體時,Shell 和 PowerShell 的沙箱擴權默認會彈出原生人工審批。只讀檢查類命令(例如 git status、git 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 只能收緊範圍,不能繞過規則或固定高風險檢查。
決策順序¶
- 當前 Access preset 必須是
approve-for-me。 - 請求必須是受支持的 Shell 或 PowerShell 擴權,並能嚴格關聯到當前工具調用。
- 命令必須通過固定高風險檢查。
- 每個命令分段都必須匹配對應工具的字面前綴。
rules-only模式在規則匹配後返回一次allowed-once;rules-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 隔離,web、headless、tui 需分別安裝。
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
啓用分三步:
- 打開
Settings -> Plugins -> Plugin configuration -> Approve for me。 - 只添加你願意自動複覈的命令前綴。
- 爲目標 agent 或 session 選擇
Approve for meAccess 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.provider 和 reviewer.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 管理,插件只保存標識。
驗證是否生效¶
- 匹配的只讀擴權應獲得一次性批准。
- 未匹配或高風險請求仍顯示原生人工審批。
- 切換到其他 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 用戶。