前言¶
DeepSeek Harness(DSH)的沙箱主要从「写」入手:read-only、workspace-write、danger-full-access 等档位约束的是文件修改;而 read、grep、glob、present 以及 shell 仍可能读到整台机器上的路径。对在意数据边界的智能体开发者来说,缺的是与写侧对等的读侧策略。
下面介绍社区插件 dsh-readfence(维护者 doushalunae,分类 admin-security)。它在工具执行前增加读检查:白名单内放行,范围外弹出审批;并把写权限与读权限合并成输入框下方的一个胶囊控件。
这是什么¶
dsh-readfence 是 DSH 的读侧权限闸门插件:支持可读目录白名单、会话级读模式,以及范围外读取的交互式审批。当前版本 0.1.1,许可证 MIT,运行需要 Node.js 20+。
插件以应用层逻辑介入 Host,不是操作系统级沙箱;安装前建议自行查看 GitHub 仓库 源码与许可证。社区目录页:SkillHub - dsh-readfence。
核心功能¶
读侧闸门覆盖的工具¶
在下列工具真正访问路径之前,插件会做读策略判定:
read/read_imagegrep/glob/presentpwsh/bash(shell 读取同样受约束)
三种读模式¶
| 模式 | 放行范围 | 适合 |
|---|---|---|
list(默认) |
可读目录 + 当前会话工作区 | 日常 |
workspace |
仅当前会话工作区 | 最严格 |
full |
不限制 | 完全放开 |
读模式会写入会话日志(plugin:read-guard/mode,带 ignorable: true),重启 DSH 后仍可从会话恢复。
界面与审批¶
点击输入框下方的权限胶囊,在双列轮盘里分别选择写、读权限;确定或 Ctrl+Enter 后才生效。
范围外的读取会转为审批卡片,四个按钮区分「这一次」与「本回合内同一目录」两种粒度:
| 按钮 | 作用范围 |
|---|---|
| 允许一次 | 这一次 |
| 拒绝一次 | 这一次 |
| 本任务都允许 | 本回合内同一目录 |
| 本任务都拒绝 | 本回合内同一目录,且不再弹窗 |
按钮文案可在设置里修改,留空则恢复默认。
可读目录¶
在 设置 → 读取权限 → 可读目录 中维护条目;支持就地增删改。条目表示目录根:命中某层目录后,其下所有文件均可放行。
语法要点(与 README 一致):
| 写法 | 含义 |
|---|---|
~/.dsh |
用户主目录,三平台一致 |
%NAME% / $NAME / ${NAME} / $env:NAME |
环境变量;未定义时原样保留 |
D:\Work\* |
一层目录;* 不跨分隔符 |
C:\proj\**\data |
** 跨任意层;? 匹配单字符 |
C:\proj |
字面量路径,会 realpath(跟随软链接 / junction) |
Windows 路径大小写不敏感;macOS / Linux 敏感。内置默认包含 ~/.dsh、~/.ssh、~/Documents/deepseek-harness 等可移植写法。
审计¶
~/.dsh/read-guard.log 以 JSON Lines 记录 applied、ask、deny、grant、mode 等事件。设置页对可读目录等的修改会写入 profile 的 cordis.patch.yml。
安装与启用¶
官方安装(desktop profile):
dsh plugin --profile desktop add dsh-readfence
装完后重启 DSH(Host 插件不支持热更新)。卸载:
dsh plugin --profile desktop remove dsh-readfence
插件作为普通依赖装入 profile,无额外构建步骤,也不需要单独的构建授权。
从源码安装仅适用于开发:克隆仓库后需先 pnpm install(运行时依赖 @deepseek-ai/schemastery),再用克隆目录的绝对路径执行 dsh plugin --profile desktop add "<路径>"。link: 方式不会自动装依赖;package.json 需声明 peer @deepseek-ai/dsh-session,否则可能解析不到宿主模块。
典型用法¶
- 加目录:设置 → 读取权限 → 可读目录,在顶部空白行输入路径后回车。
- 切模式:点输入框下方胶囊,左右轮盘选写、读,
确定或Ctrl+Enter生效。 - 批准读取:范围外访问弹出审批时,按需选「允许一次」或「本任务都允许」。
也可使用斜杠命令:
/read list|workspace|full:切换读模式/read status:查看当前读模式
适用场景与安全边界¶
适合谁:需要在 DSH 里限制 Agent 随意读盘的团队或个人;希望写沙箱之外再叠一层「可读范围 + 审批」的日常开发场景。
务必知晓的边界(插件 README 已写明):
- 这是应用层闸门,不能替代 OS 级隔离。
- Shell 中运行时拼出的路径(例如变量拼接后再
Get-Content)无法靠静态分析完全识别。 web_fetch等网络读取不经过本插件。- 插件只收紧读取,不改变既有写入沙箱规则。
插件以当前 DSH 进程权限运行;full 读模式等同于读侧完全放开,应结合写权限档位综合评估风险。
排错提示¶
| 现象 | 处理 |
|---|---|
打开历史会话报 unknown … not marked ignorable |
会话日志异常,可用 tools/dsh-session-log-doctor.mjs --repair 修复 |
提示 this session only; the dsh-session record API is unavailable |
缺少 @deepseek-ai/dsh-session peer,或修改后未重启 |
| 界面没更新 | 刷新页面;仍不行则重启 DSH |
| 插件没加载 | 查看 read-guard.log 是否有 applied |
结尾¶
dsh-readfence 在 DSH「一切皆插件」的生态里,专门补上默认沙箱未覆盖的读侧控制:白名单目录、三种读模式、会话记忆与审批流,并合并到统一的读写权限胶囊。需要安装与细节时,可看 SkillHub 目录页 与 GitHub:doushalunae/dsh-readfence。