前言¶
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 仓库。