前言¶
用 DeepSeek Harness(DSH)跑 Coding Agent 时,权限模式往往是个两难选择:只开「可写入工作区」,Agent 装依赖、跑测试、改文件时频繁弹窗,开发节奏被打断;切换到 Full access(完全权限),审批又彻底消失,一旦 Agent 误删文件或访问敏感路径,后果很难挽回。
社区维护者 NanmiCoder 推出的 dsh-auto-mode(npm 包名 @nanmicoder/dsh-auto-mode)试图补上这块空白:在官方 workspace-write 沙箱之上新增 Auto / 自动审批 模式——日常项目操作尽量自动放行,沙箱覆盖不了的语义风险交给分类器审查,真正危险的动作在执行前直接拒绝。该插件在 SkillHub 插件库分类为 admin-security,GitHub 约 123 stars,采用 MIT 许可证,已针对 DeepSeek Harness 0.1.0-rc.6 测试。
需要说明的是:SkillHub(https://www.skillhub.cn/plugins)是面向中国用户的 DSH 插件社区目录,与 DeepSeek / 幻方无官方从属关系;DSH 本身遵循「一切皆插件」理念,权限策略同样可以通过社区插件扩展。
这是什么¶
dsh-auto-mode 的定位可以用一句话概括:Safe automatic permissions for DeepSeek Harness——为 Harness 提供「沙箱优先、语义审查、最小越权」的自动权限策略。
它不自行实现操作系统级沙箱,而是让 Auto 模式常驻 DSH 官方的 workspace-write 文件沙箱,并在此基础上补充三类能力:
- 对沙箱内可预期的日常操作(构建、测试、常规依赖安装等)自动放行;
- 对沙箱边界之外的语义风险(敏感读取、网络外传、删除 Session 前已有文件等)调用当前 Session 的 DSH 模型做分类;
- 对根目录、Home、DSH_HOME、凭据路径等关键目标无条件拒绝。
中文 Web UI 中,该模式显示为 「自动审批」;英文界面保留 Auto 产品名。
核心功能与亮点¶
四种权限模式对照¶
安装插件后,权限菜单在「可写入工作区」与「完全权限」之间多出一档 Auto:
| 模式 | 文件沙箱 | 审批 | Auto 策略 |
|---|---|---|---|
| Read Only | read-only |
ask | 不启用 |
| Workspace Write | workspace-write |
ask | 不启用 |
| 自动审批(Auto) | workspace-write |
ask | 启用 |
| Full access | danger-full-access |
never | 不启用 |
Auto 的普通读写仍限制在 Workspace Write 边界内;只有明确的一次性越权请求,才可能被自动批准。
四类决策:放行、分类、问一次、拒绝¶
插件对待执行的每个工具调用,大致落入以下策略(详见仓库 DESIGN.md):
| 决策 | 典型效果 |
|---|---|
| 自动放行 | 沙箱内的 Bash/PowerShell、常规 npm/pnpm/yarn/bun/pip/Cargo 安装、本地 Git commit、构建、测试、类型检查、已审计的 DSH 协作工具 |
| 后台分类 | Session 前已有数据删除、npx/bunx 等临时下载执行、远程 Git/数据库/服务变更、敏感读取、网络传输、外部系统写入 |
| 询问一次 | 效果或授权确实不明确,或分类器连续失败三次后转人工;越权时复用官方那一次精确审批,避免双弹窗 |
| 直接拒绝 | 根目录、Home、DSH_HOME、系统破坏、权限绕过、凭据外传、隐藏动态删除,以及风险操作前两次连续分类器故障 |
分类器不是授权来源:它只能识别直接用户 Session 消息中的授权。仓库 README、工具输出、Assistant 回复、Skill、插件或子 Agent 的文本不能替用户授权。
Shell 与删除的细粒度策略¶
Auto 不再维护不断膨胀的命令白名单。字面量未知命令、管道、重定向等默认进入官方 workspace-write 沙箱,工作区外写入由操作系统拒绝。只有可执行文件名被变量或 glob 隐藏时,才会后台拒绝并要求 Agent 改写成可见命令。
删除规则比普通写入更严:当前 Session 新建且身份未变的单个文件可自动清理;删除 Session 前已存在的文件,需用户在对话中精确点名该目标;多目标、glob、管道删除一律拒绝;根目录与凭据关键路径无条件拒绝。
当任务确实需要写到工作区外,Agent 可通过官方 sandbox_permissions: danger-full-access 加 justification 重试,Reviewer 最多返回一次 allowed-once,不改变 Session 常驻权限。
子 Agent 与多 Agent 协作¶
官方进程内 Subagent、Workflow agent()、Ralph spawn worker、AgentTeams 成员通过 parentSession 链继承 Auto 与 workspace 边界,但每次文件/Shell 调用仍单独检查。子 Agent 使用 approval: never,不能自行申请 danger-full-access,需向父 Agent 报告阻塞。Codex、ACP、dsh-sdk 等进程外 Provider 的内部工具权限不在本插件注册表边界内。
安装与启用¶
使用前请确保已安装 DeepSeek Harness。
通过 npm 安装(推荐)¶
SkillHub 目录页与 GitHub README 给出的安装命令一致:
dsh plugin --profile web add @nanmicoder/dsh-auto-mode
若你实际使用的是其他 Profile,将 web 替换为对应名称即可。
从源码构建¶
git clone https://github.com/NanmiCoder/dsh-auto-mode.git
cd dsh-auto-mode
pnpm install
pnpm build
dsh plugin --profile web add .
修改源码后需重新 pnpm build;本地安装会保持与当前 checkout 的链接关系。
验证配置并启动¶
dsh --profile web --dump-config
dsh web
刷新 Web UI,在「可写入工作区」与「完全权限」之间选择 自动审批,阅读并确认风险提示后即可使用。
典型用法示例¶
日常开发:Auto 模式下的自动流转¶
在 Auto 模式下,Agent 执行以下操作时通常无需反复点批准:
- 在项目目录内运行
pnpm install、npm test、cargo build等; - 使用官方字符串替换编辑器修改源码;
- 对当前 Session 内新建的临时文件做清理。
以下临时 runner 仍会进入审查(因其会下载并执行未纳入项目依赖的包):
npx、bunx、pnpm dlx、yarn dlx、npm exec
可选:为分类器固定模型路由¶
默认情况下,Auto 使用当前 Session 的 DSH Provider 与模型,无需额外 API Key。若希望在受信任的 Profile 中固定专用分类路由,可在插件配置中写入:
- id: auto-permission-mode
config:
classifierProvider: deepseek-official
classifierModel: deepseek-v4-flash
classifierTimeoutMs: 30000
classifierMaxOutputTokens: 1024
完整决策顺序、威胁模型与 Windows 路径处理见仓库 DESIGN.md。
适用场景与注意事项¶
适合谁用:
- 日常用 DSH Web UI 做项目开发,希望减少「装依赖 / 跑测试 / 改代码」时的审批打断;
- 需要比 Full access 更安全、又比纯 Workspace Write 更顺畅的权限中间层;
- 关注 admin-security 类插件、愿意阅读源码后再安装的团队。
务必知晓的边界:
- 插件以当前 dsh 进程权限运行。安装前请阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全要求。
- 文件沙箱不限制读取、网络与外部服务;Windows ACL 后端存在文档化的
partialenforcement 边界。Auto 是语义层补充,不是万能防火墙。 - 插件无法拦截加载前执行的包生命周期脚本、绕过
ctx.tools的 Node 直接调用、被攻破的 Harness Runtime,或在 Harness 外部启动的命令。 - Full access 仍是用户明确选择的无沙箱、免审批模式,本插件不能把它变安全;设计目标是让绝大多数任务留在沙箱内,仅在业务必要时借出一次最小权限。
- 已测试版本为 DSH 0.1.0-rc.6;升级 Harness 主版本后建议重新验证插件行为。
结尾¶
如果你正在 DSH 上长期跑 Coding Agent,又在「频繁点批准」和「完全放权」之间反复横跳,dsh-auto-mode 值得试一次:它把 Auto 模式嵌回官方沙箱,用分类器兜住沙箱外的语义风险,用硬规则守住系统与凭据底线。
- 插件目录页:https://www.skillhub.cn/plugins/NanmiCoder/dsh-auto-mode
- GitHub 仓库:https://github.com/NanmiCoder/dsh-auto-mode
- npm 包:https://www.npmjs.com/package/@nanmicoder/dsh-auto-mode