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

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

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

小夜