前言¶
DeepSeek Harness 在執行文件寫入、命令執行等特權操作前,通常會要求人工批准。在受信環境或已知安全的工具子集中,這些提示會帶來干擾。該插件在 UI 或中繼推送提示之前攔截 approval/request 事件,根據策略、Hermes Pro 語義裁決或人工自動回答,並記錄所有決策。它與 dsh-reset-handoff 互爲鏡像:前者委託重啓給外部運維代理,後者委託批准給本地策略和 Hermes。
核心功能¶
- 事件攔截:攔截
approval/request事件(可選攔截ask_user_question)。 - 自動裁決:通過規則層、Hermes Pro 語義裁決或人工進行自動回答。
- 審計日誌:記錄所有決策,格式爲 JSON Lines。
- 交互式拒絕循環:當策略拒絕時,將原因反饋給請求會話,允許代理重試。
安裝與啓用¶
通過官方插件命令安裝:
dsh plugin --profile <profile> add github:nicecx/dsh-auto-approver
安裝後,需要在配置文件中註冊並設置參數。
配置方式¶
在 cordis.patch.yml 中配置:
- id: dsh-auto-approver
name: 'dsh-auto-approver'
config:
mode: 'hermes' # allow-all | allowlist | hermes | off
allowlist: [] # 白名單工具,hermes 模式下直接通過
denyAlways: [] # 黑名單工具,最高優先級,Hermes 無法覆蓋
denyReasons: {} # 拒絕時的原因文本
hermesModel: 'deepseek-v4-pro' # 判決模型
hermesTimeoutSecs: 90 # 超時時間,超時或失敗則人工批准
feedbackOnReject: true # 是否將拒絕原因反饋給請求會話
qnaMode: 'off' # 'hermes' 表示用 Hermes 回答用戶提問,'off' 表示人工
userGranted: [] # 用戶授權信號(軟性背書),非硬性繞過
logPath: '' # 審計日誌路徑(默認 ~/.dsh/auto-approver.log)
工作模式¶
插件支持四種模式:
- allow-all:自動批准所有操作(包括
danger-full-access)。僅限完全受信環境。 - allowlist:僅自動批准白名單中的工具,其餘操作交由人工批准。
- hermes:結合規則層(denyAlways/allowlist)與 Hermes Pro 語義裁決。若 Hermes 不可用或超時,則回退到人工批准(fail-closed)。
- off:插件不活動,所有操作均交由人工批准。
安全注意事項¶
- allow-all 會自動授予所有權限,包括危險命令,使用時需確保環境完全受信。
- denyAlways 具有最高優先級,Hermes 無法覆蓋。
- userGranted 是軟性背書信號,不是繞過卡。
denyAlways依然優先於其他規則。 - hermes 模式爲 fail-closed(失敗關閉),即不可用時不會靜默通過,而是轉人工。
- 手動批准(在 iMessage 或 Web UI)始終覆蓋策略。
審計日誌¶
每個決策都會追加到審計日誌文件中,默認路徑爲 ~/.dsh/auto-approver.log,格式爲 JSON Lines:
{"ts":"...","sessionId":"...","toolName":"bash","reason":"...","callId":"...","decision":"allowed-once"}
結語¶
該插件通過攔截和策略裁決,減少了人工批准的噪音,同時通過審計日誌保證了可追溯性。適合需要減少人工交互但在受控範圍內運行的自動化場景。源碼與詳情可參考 GitHub 倉庫。