dsh-approve-for-me:规则驱动的沙箱自动审批

前言

在 DeepSeek Harness(DSH)里跑智能体时,Shell 和 PowerShell 的沙箱扩权默认会弹出原生人工审批。只读检查类命令(例如 git statusgit diff)每次都要点确认,开发节奏会被打断;若直接切到 Full access,又会把整条沙箱边界拿掉。

dsh-approve-for-me 在这两种做法之间提供第三条路:用字面命令前缀规则划定自动审批范围,可选让大模型复核,拿不准时仍交回 Harness 原生人工审批。下面介绍它的定位、安装方式和配置要点。

这是什么

dsh-approve-for-me 是维护者 timeance 发布的 DeepSeek Harness 插件,npm 包名同为 dsh-approve-for-me,当前版本 0.2.2,MIT 许可证。在 SkillHub 插件目录 中归类为 admin-security。

插件处理 Shell 与 PowerShell 的沙箱扩权请求,依次执行固定高风险检查、用户配置的字面命令前缀规则,以及在 rules-and-llm 模式下的可选 LLM reviewer。审批通过时只授予当前请求一次 allowed-once,不会永久放开权限。

该版本已适配 DeepSeek Harness 0.1.1-rc.1,包括 rc1 的第三方 keyed 设置卡片机制和共享客户端 settings schema service。README 明确说明这是非官方插件,未经独立安全审计。

核心功能

三种 Access 方式对比

Access 方式 沙箱扩权行为
Harness 原生审批 每次扩权都询问用户
Approve for me 执行固定检查和用户规则,可选调用模型,不确定时询问用户
Full access 关闭沙箱审批边界

规则决定自动审批的最大候选范围。reviewer 只能收紧范围,不能绕过规则或固定高风险检查。

决策顺序

  1. 当前 Access preset 必须是 approve-for-me
  2. 请求必须是受支持的 Shell 或 PowerShell 扩权,并能严格关联到当前工具调用。
  3. 命令必须通过固定高风险检查。
  4. 每个命令分段都必须匹配对应工具的字面前缀。
  5. rules-only 模式在规则匹配后返回一次 allowed-oncerules-and-llm 模式还要求 reviewer 返回结构正确的明确 allow

固定高风险检查覆盖解析失败、文件或权限修改、系统和包管理变更、Git/GitHub 写操作、包管理器生命周期脚本、带路径的可执行文件、动态命令执行、凭据访问和外部写入等常见风险形态。高风险结果会停止自动审批并把请求交回 Harness,不会直接拒绝命令。

两种运行模式

  • rules-and-llm(默认):规则匹配后,由无工具 LLM reviewer 做二次判断。
  • rules-only:仅依赖规则与固定检查,不调用模型。

Web 配置卡片

web Profile 安装后,可通过 Settings -> Plugins -> Plugin configuration -> Approve for me 管理命令前缀。卡片只在 loopback 连接中显示,通过插件自己的 loopback-only RPC 读写配置;持久化、schema 校验和热加载由 Harness Settings service 负责。卡片不做审批决策,也不依赖 llm-pi-ai

安装与启用

先安装 DSH CLI,再把插件加入目标 Profile。插件和设置按 Profile 隔离,webheadlesstui 需分别安装。

npm install -g @deepseek-ai/dsh
dsh plugin --profile web add dsh-approve-for-me@latest
dsh web --host 127.0.0.1 --port 3080

启用分三步:

  1. 打开 Settings -> Plugins -> Plugin configuration -> Approve for me
  2. 只添加你愿意自动复核的命令前缀。
  3. 为目标 agent 或 session 选择 Approve for me Access preset。

commandPrefixes 默认为空,只安装插件不会自动批准任何命令。@latest 是 npm dist-tag,不是固定版本号;需要可复现安装时使用 @<version>

仅需要 Host 审批核心、不需要 Web 设置卡片时:

dsh plugin --profile headless add dsh-approve-for-me@latest

安装后可用以下命令确认 Profile 中的实际版本:

dsh plugin --profile web list dsh-approve-for-me --depth 0
dsh --profile web --dump-config

配置转储应包含 approve-for-me permission preset 和 Host 插件条目。

典型用法

Web 界面配置命令前缀

添加范围明确的字面前缀。规则匹配经过解析的 token 前缀,不是整条命令完全相等;后面仍可追加参数,因此应尽量写明子命令和路径。复合命令中的每个分段都必须分别匹配。

Shell:      git status
Shell:      git diff
PowerShell: Get-Location
PowerShell: Get-Content -LiteralPath README.md

即使前缀看似匹配,已知的包管理器生命周期动作、带路径的可执行文件、直接脚本、wrapper、会写入的 PowerShell alias、解析歧义和固定高风险形态仍会转人工审批。

YAML 配置

Web 页面和 $DSH_HOME\settings.yaml 修改同一份 approve-for-me 设置。推荐省略 reviewer.providerreviewer.model,让每次复核继承发起审批请求的 session provider/model:

approve-for-me:
  version: 1
  mode: rules-and-llm
  rules:
    commandPrefixes:
      - tool: shell
        prefix: git status
      - tool: shell
        prefix: git diff
      - tool: pwsh
        prefix: Get-Content -LiteralPath README.md
    reviewerInstructions: >-
      Only allow read-only repository inspection.
  reviewer:
    timeoutMs: 30000
  limits:
    trustedTranscriptChars: 12000
    untrustedToolDataChars: 8000
    reviewerOutputChars: 2000

如果请求 session 没有完整的 provider/model 路由,reviewer 不会自动允许,请求转人工审批。不需要模型复核时设置 mode: rules-only

需要固定 reviewer 路由时,同时填写 provider 和 model 标识;模型凭据仍由 Harness 管理,插件只保存标识。

验证是否生效

  1. 匹配的只读扩权应获得一次性批准。
  2. 未匹配或高风险请求仍显示原生人工审批。
  3. 切换到其他 Access preset 后,插件不再参与当前 session 的审批。

适用场景与注意

适合在 DSH 中频繁执行可预期的只读命令、希望减少重复点击审批、又不愿切换到 Full access 的开发者。headless Profile 可通过 YAML 单独配置,不依赖 Web 卡片。

使用前应注意:

  • 插件以当前 dsh 进程权限运行,安装前应检查源码与 MIT 许可证。
  • 内置检查是保守分类器,不能证明未命中的命令一定安全;正向 allowlist 应尽可能窄。
  • 没有内置正向规则,只有固定高风险检查;具体允许哪些命令需自行配置。
  • 兼容性基线:DeepSeek Harness 0.1.1-rc.1,Node.js ^22.19.0 || >=24.0.0

结尾

dsh-approve-for-me 在保留沙箱边界的前提下,用规则、可选 LLM 复核和原生人工回退三层机制处理扩权请求,适合需要精细控制自动审批范围的 DSH 用户。

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

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

小夜