在 DeepSeek Harness (DSH) 中,agent 需要频繁访问文件系统以执行任务。如果文件中包含敏感词或违规内容,provider 的内容审核机制可能会直接拒绝请求(HTTP 400)。一旦这些内容进入对话历史,后续每一轮请求都会携带该内容,导致整个会话被阻断。dsh-file-shield 插件通过在工具执行前拦截对指定文件或目录的访问,从源头防止敏感内容进入对话。
功能与原理¶
dsh-file-shield 是一个由 Yazzyk 维护的插件。它屏蔽 agent 对指定文件或目录的读取、编辑、搜索和写入操作。当 agent 试图访问被屏蔽的路径时,工具调用会在执行前被拒绝,模型会收到权限错误,而不是文件内容。
- 拦截点:插件在
tools/pre-execute阶段介入,返回deny,导致工具主体不执行。 - 错误反馈:模型会收到类似
Error: Access to "/path/to/file" is blocked by deployment policy的错误。 - Shell 命令处理:插件通过静态分析 shell 命令文本,解析出其中的路径参数进行拦截。它支持拦截
bash和pwsh工具的workdir和command参数,并会剔除搜索结果中的被屏蔽路径。 - 输出过滤:对于
grep、glob等工具,插件会剔除结果中命中规则的路径,仅返回未屏蔽的内容。
局限性¶
- Shell 混淆:插件通过静态分析命令文本进行防御,无法拦截所有混淆手段。例如,变量拼接(
cat $p)、base64 -d、命令替换($(...))等利用语义差异的操作可能绕过静态检查。 - Host 侧读取:不拦截不经过工具层的 host 侧读取操作,例如技能加载、
@文件引用等。 - 大小写敏感性:默认
matchCase为false,对于大小写不敏感的文件系统,短相对规则可能产生误伤。 - 额外工具:本插件不认识的读文件工具需要通过配置
extraPathArgs和extraCommandArgs来支持。
安装¶
使用官方安装命令将插件添加到指定的 profile 中:
dsh plugin --profile <profile> add github:Yazzyk/dsh-file-shield
配置方式¶
Web GUI 配置¶
- 进入 Web GUI 的 Plugins 页面。
- 点击 Installed。
- 找到
dsh-file-shield并进入其配置页面。 - 在页面中选择文件或目录,或直接输入路径和 glob 模式。
- 点击 保存,规则会写入 profile 的
config.deny字段。
cordis.patch.yml 配置¶
也可以在 profile 的 cordis.patch.yml 中配置 deny 规则列表。支持 glob 模式(如 **/*.pem)或字面路径。
- insert:
- id: file-shield
name: dsh-file-shield
config:
deny:
- '**/.env'
- '**/.env.*'
- '**/*.pem'
- '~/.dsh/.credentials.yaml'
matchCase: false
| 字段 | 默认值 | 说明 |
|---|---|---|
deny |
[] |
规则列表,空列表表示不屏蔽任何内容。 |
matchCase |
false |
是否区分大小写。 |
extraPathArgs |
{} |
为其他插件的自定义读文件工具指定路径参数名。 |
extraCommandArgs |
{} |
为其他插件的自定义 shell 工具指定命令参数名。 |
生态与链接¶
该插件遵循 MIT 许可证。DSH 生态强调“一切皆插件”,本插件为社区贡献。
- GitHub 仓库:https://github.com/Yazzyk/dsh-file-shield
- 社区目录:https://www.skillhub.cn/plugins/Yazzyk/dsh-file-shield