dsh-readfence:为 DeepSeek Harness 补上读侧权限闸门

前言

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_image
  • grep / glob / present
  • pwsh / 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,否则可能解析不到宿主模块。

典型用法

  1. 加目录:设置 → 读取权限 → 可读目录,在顶部空白行输入路径后回车。
  2. 切模式:点输入框下方胶囊,左右轮盘选写、读,确定 或 Ctrl+Enter 生效。
  3. 批准读取:范围外访问弹出审批时,按需选「允许一次」或「本任务都允许」。

也可使用斜杠命令:

  • /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。

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

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

Xiaoye