前言¶
DeepSeek Harness(DSH)插件化架构允许开发者通过插件扩展 Agent 的能力。在构建需要自主操作的工具链时,手动编写细粒度的权限规则往往既繁琐又难以维护。dsh-risk-gate 插件通过分析操作语义,在本地实现自动分级与渐进授权,解决了这一问题。
插件简介¶
该插件由 leetom314 维护,采用 MIT 协议开源。它不依赖外部 LLM 调用,而是通过本地确定性分类算法,根据工具调用的语义将其划分为安全、风险或红线三个等级,并据此执行通过、询问或拒绝操作。
核心功能¶
1. 语义分级与本地分类
插件会拦截 tools/pre-execute 钩子,根据操作语义对工具调用进行分类。分类是本地完成的,不涉及网络请求。默认情况下,未知工具会被标记为风险操作(拒绝)。
* Safe(安全): 可逆或只读操作,如读取、搜索、网页浏览、良性 Bash 命令。
* Risky(风险): 不可逆但风险较低的操作,如写入、编辑、安装、Git 提交。
* Redline(红线): 高风险操作,包括远程状态变更、发送消息、删除文件、支付类操作。
2. 渐进授权机制
为了减少对人工确认的打扰,插件实现了基于签名(工具名 + 归一化参数)的渐进授权。同一操作签名连续成功 N 次后,后续调用将自动放行;一旦发生拒绝或失败,该签名的授权状态会回滚。
3. Shell 命令检查
插件支持对 Bash 和 PowerShell 命令进行正则检查,识别危险指令。常见的红线命令包括 rm -rf、shred、ssh user@host、git push、curl/wget -X DELETE 等。
安装与启用¶
确保环境已安装 DSH CLI,然后执行以下命令安装插件。
dsh plugin --profile web add "github:leetom314/dsh-risk-gate#main"
配置方法¶
在 DSH 的 YAML 配置文件中添加插件节点。主要配置项如下:
autoAllowThreshold: 自动允许阈值,设置为 0 表示禁用渐进授权,始终询问。默认值为 3。alwaysAskRedline: 红线操作是否强制询问,默认为true。overrides: 可针对特定工具进行覆盖,设置为deny可直接拦截。
- id: dsh-risk-gate
name: dsh-risk-gate
config:
autoAllowThreshold: 3
alwaysAskRedline: true
verbose: false
overrides:
some_tool: deny
测试与验证¶
安装完成后,可以通过运行测试脚本验证插件行为。
npm test
要进行端到端验证(使用真实模型和无头模式),可以运行:
./verify.sh
验证脚本会检查只读操作是否放行、单文件删除是否被拦截、递归删除(rm -rf)是否被红线阻断,以及 Git 推送和 SSH 远程操作是否被拦截。
局限性与注意事项¶
- 非沙箱环境: Shell 检查基于正则,并非完全的沙箱执行环境。它主要作为安全门,建议配合
dsh-permission-rules或其他沙箱执行器进行防御深度加固。 - 内存状态: 插件的学习状态仅保存在内存中,进程重启或 HMR(热模块替换)会导致状态丢失。
- 无头模式: 在没有回答器(Answerer)的情况下,插件默认拒绝操作。
- 依赖项: 插件依赖
@deepseek-ai/dsh-tools。
总结¶
dsh-risk-gate 提供了一种基于语义的轻量级安全控制方案,适合需要在 DSH 插件生态中快速引入操作分级与授权控制的场景。更多细节可查阅插件目录或源码仓库。