前言¶
DeepSeek Harness (DSH) 的核心能力在于允许智能体调用外部工具。在没有防护的情况下,工具调用的误用或恶意行为可能直接破坏系统环境。DSH 自带的工具审批通常只有“弹窗询问”或“完全关闭”两种模式,前者会打断工作流,后者则失去了防护意义。
dsh-warden 旨在提供第三种方案:平时零打扰,只在真正危险的操作上触发一次低成本审查。它通过挂载在 tools/pre-execute 钩子上,在工具执行前拦截并评估风险。
它是什么¶
dsh-warden 是 DeepSeek Harness 的一个插件,由 dingchenhui0618-arch 维护,许可证为 MIT。
它是一个“对抗式审查门”:在工具调用执行前,由一个独立的小模型复核该调用是否危险,并返回放行或拦截的指令。所有的判定结果都会在 Web GUI 中实时展示,且每次判定都会记录到审计日志中。
核心功能¶
两层防御机制¶
插件采用两层防御策略,第二层仅在第一层未拦截时触发,以确保日常操作无额外延迟。
-
第一层(本地正则,零延迟)
使用本地正则表达式匹配破坏性命令和敏感路径。- 破坏性命令:包括
rm -rf(任意旗标顺序)、Remove-Item -Recurse、rmdir /s、format、mkfs、DROP TABLE/DROP DATABASE、git push --force、git reset --hard等。 - 敏感路径写入:
.env、credential、id_rsa、.ssh、.git/、settings.*、cordis*.yml、AGENTS.md以及$DSH_HOME下的任意文件。
- 破坏性命令:包括
-
第二层(模型调用,按需触发)
对于第一层未命中的调用,插件会将“工具名 + 风险类别 + 完整参数 + 当前会话目标”发送给审查模型,由模型判断是否拦截。- 普通读写操作(
read/grep/glob)不会进入这套逻辑,不会产生额外延迟。
- 普通读写操作(
实时审查与审计¶
- Web GUI:在对话视图的“审查”Tab 中,可以查看实时计数(工具调用总数、有风险类别数、送审数、放行数、拦截数、异常降级数)以及最近 60 条判定的详情(时间、工具名、风险类别、耗时、模型、理由)。
- 审计日志:每一次送审的调用都会追加一行 JSON 到
$DSH_HOME/warden-audit.l,包含时间、工具、类别、决定、理由、模型和耗时。未送审的普通调用仅存在于内存环形缓冲中,不落盘。
可配置规则¶
默认规则内置在插件中,采取“默认放行,只拦不可逆破坏”的策略。
* 用户可以通过编辑 $DSH_HOME/adversary.md 文件来覆盖默认规则。
* 该文件支持按修改时间自动重载,修改后点击面板上的“重载规则”按钮即可生效,无需重启 DSH。
安装与启用¶
插件已发布到 npm,支持从 npm 或 GitHub 安装。安装后重启 DSH,对话视图的“审查”Tab 即会出现。
dsh plugin --profile <你的 profile> add dsh-warden
如果需要从源码安装:
dsh plugin --profile <你的 profile> add github:dingchenhui0618-arch/dsh-warden
注意事项¶
- 拒绝询问模式:插件永远不返回
ask。如果审批 UI 不可用或关闭,它会默认拒绝操作。不要依赖它来提供“请确认”的交互弹窗。 - 异常容错:插件不会在异常或错误时阻断执行。如果模型不可用、参数无法序列化或发生任何错误,插件会直接放行。它的设计目标是“最坏情况下什么都不做”,而不是“因为插件自身崩溃而锁死工作流”。
- 安全边界:它不是一个硬性的安全边界。因为它运行在同一进程内,恶意代码或插件本身仍有可能绕过它。它主要用于降低误操作的概率。
- 分类依据:分类基于“工具名 + 参数模式”,而非工具自报的类型。
结语¶
dsh-warden 通过正则预检与模型复核的结合,为 DSH 提供了精细化的工具调用控制。它不干扰正常的读写操作,只在危险边缘提供兜底保护。对于需要在生产环境或敏感数据上运行 DSH 的用户来说,这是一个值得尝试的安全增强手段。