前言¶
在 DeepSeek Harness(DSH)里跑智能体时,Shell 和 PowerShell 的沙箱扩权默认会弹出原生人工审批。只读检查类命令(例如 git status、git 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 只能收紧范围,不能绕过规则或固定高风险检查。
决策顺序¶
- 当前 Access preset 必须是
approve-for-me。 - 请求必须是受支持的 Shell 或 PowerShell 扩权,并能严格关联到当前工具调用。
- 命令必须通过固定高风险检查。
- 每个命令分段都必须匹配对应工具的字面前缀。
rules-only模式在规则匹配后返回一次allowed-once;rules-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 隔离,web、headless、tui 需分别安装。
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
启用分三步:
- 打开
Settings -> Plugins -> Plugin configuration -> Approve for me。 - 只添加你愿意自动复核的命令前缀。
- 为目标 agent 或 session 选择
Approve for meAccess 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.provider 和 reviewer.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 管理,插件只保存标识。
验证是否生效¶
- 匹配的只读扩权应获得一次性批准。
- 未匹配或高风险请求仍显示原生人工审批。
- 切换到其他 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 用户。