前言¶
DeepSeek Harness(简称 DSH)是 DeepSeek 开源的编码智能体运行时,官方仓库的定位是「Everything is a Plugin」——权限预设、沙箱、审批、工具链路都可以由插件组合。官方默认提供的权限档比较尖锐:workspace-write 会把工作区外的写入拦下来,但很多日常操作仍要反复点批准;danger-full-access 则直接取消审批。两者之间缺一层「日常工作能跑下去、危险动作仍被拦住」的中间态。
dsh-auto-mode 补的就是这一层。它在 Workspace Write 和 Full access 之间插入一个名为 Auto 的权限预设:普通项目操作继续走官方 workspace-write 文件沙箱;沙箱覆盖不到的语义风险,再交给当前 Session 的 DSH 模型做分类;真正说不清的动作只问一次;针对根目录、Home、DSH_HOME 等关键路径的破坏则在执行前直接拒绝。
本文按社区插件目录页、GitHub 仓库 README / DESIGN.md、npm 包说明交叉核实后整理。社区目录 deepseek-harness-plugin.com 是独立站点,与 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。
这是什么¶
dsh-auto-mode 是一款工作流与自动化类 DSH 插件,GitHub 仓库由 NanmiCoder 维护,npm 包名为 @nanmicoder/dsh-auto-mode,当前版本为 0.1.4,许可证为 MIT。package.json 里的作者字段写的是程序员阿江(Relakkes)。仓库主要语言是 TypeScript。本文写作时(2026-08-17)查询 GitHub API,star 数为 74;社区目录页当时显示 36,星标以仓库一手数据为准。
它解决的问题可以概括成一句话:给 DSH 增加一个常驻在官方 workspace-write 沙箱上的 Auto 权限档,用确定性规则加语义分类器,减少审批打断,同时避免直接打开 Full access。
DESIGN.md 写得很明确:这个插件不自行实现沙箱,也不提供自己的执行器。它只做三件事:
- 往官方权限预设表里插入 Auto;
- 在官方
ctx.tools管线上挂一层 Host 策略; - 给已测试的 DSH Web UI 补上 Auto 图标和风险确认弹窗。
实现针对的是官方 DeepSeek Harness 检出 47f943859bef60e4160492346772ded9b24f765a,构建和测试对齐公开的 0.1.0-rc.6 包。相关上游接口包括 @deepseek-ai/dsh-permission-presets、@deepseek-ai/dsh-sandbox-policy、ctx.tools.guard()、ctx.approval 的 allowed-once,以及 ctx.llm.stream() 作为独立语义审查器。
权限模式怎么排¶
安装后,权限选择器里会出现四档。Auto 和 Workspace Write 共用同一道文件边界,但行为不同:
| 模式 | 文件沙箱 | 审批 | Auto 策略 |
|---|---|---|---|
| Read Only | read-only |
ask | 不启用 |
| Workspace Write | workspace-write |
ask | 不启用 |
| Auto | workspace-write |
ask | 启用 |
| Full access | danger-full-access |
never | 不启用 |
普通 Auto 工作仍停在 Workspace Write 边界内。只有明确的一次性越权请求,才可能被自动批准。官方文件沙箱限制的是「写到哪里」,不限制读取、网络和外部服务;Linux 上是 bwrap/Landlock,macOS 上是 Seatbelt,Windows 受限令牌 / ACL 后端报告的是 partial 执行。
核心决策¶
README 把 Auto 的决策分成四类,和 DESIGN.md 里的决策顺序一致。
自动放行。 沙箱内的陌生 Bash / PowerShell、常规依赖安装(npm、pnpm、yarn、bun、pip、本地 Cargo)、本地 Git commit、项目读写、构建、测试、类型检查,以及已经审计过的 DSH 协作工具,默认直接跑。插件不再试图用白名单证明每一种 Shell 语法都安全:字面量未知命令、参数变量、管道、重定向、内联代码和 PowerShell 组合,默认进入官方 workspace-write 沙箱。工作区外写入由操作系统拒绝,不会因为静态分析器「不认识」就弹窗。只有可执行文件名被变量或 glob 藏起来时,才会后台拒绝,要求 Agent 改写成可见命令。
后台分类。 下列动作会交给分类器:Session 开始前已有数据的删除、临时下载包执行(npx、bunx、pnpm dlx、yarn dlx、npm exec)、危险的远程 Git / 数据库 / 服务变更、敏感读取、网络传输、外部系统写入,以及精确的 sandbox 越权。分类器不是授权来源。它只接收经过脱敏和长度限制的待执行调用描述,并且只能识别直接用户 Session 消息里的授权。仓库文本、工具输出、Assistant、Skill、插件和子 Agent 都不能授权限。
询问一次。 效果或授权确实说不清时,走官方审批。分类器连续失败三次后也会转人工确认。越权时复用官方那一次精确审批,不产生双弹窗。
直接拒绝。 根目录、Home、DSH_HOME、系统破坏、权限绕过、凭据外传、隐藏动态删除,以及风险操作前两次连续分类器故障,都会在执行前拒绝。这些硬拒绝是单调的:后面的监听器或分类器都不能把它改成允许。
删除比普通写入更窄。当前 Session 创建、且文件身份(设备号、inode、出生时间、类型)未变化的单个精确产物可以自动清理;单个已有文件或目录,只有直接用户消息精确要求删除该目标后才分类;工作区外单个已有目标,精确授权后只给该次调用一次越权;多目标、glob、变量、管道输入、嵌套解释器删除会后台拒绝,要求 Agent 拆成每次一个可见字面目标。路径被重命名、替换、换成符号链接,或新目录里混入旧文件后,不再享有自动清理资格。用户没有明确要求永久删除时,Agent 指引会优先建议移动、备份或走版本控制删除。
当任务明确需要写到工作区外时,Agent 可以用官方 sandbox_permissions: danger-full-access 加上 justification 重试。对于新建、范围很小且可恢复的精确目标,直接任务意图本身就可以支持一次后台授权,用户不必再说一遍「我授权」。覆盖或删除已有数据,仍要求直接用户消息精确指出该效果和目标。审查器会看到执行前的 existedBefore 文件事实,而且只可为同一个 Agent、同一个 tool call、同一个模式和同一句理由返回一次 allowed-once;这不会改变 Session 的常驻权限。
子 Agent 怎么继承¶
官方进程内 Subagent、Workflow 的 agent()、Ralph spawn worker 和 AgentTeams 成员,都通过活动的 parentSession 链继承 Auto 与 workspace 边界,但每一次文件和 Shell 调用仍会单独检查。Goal 在当前 Agent 上续跑,权限不变。
子 Agent 使用 approval: never,不能自行申请 danger-full-access;需要越权时必须报告父 Agent。Codex、ACP、dsh-sdk 这类进程外 Provider 的内部工具由各自权限策略负责,不在本插件的工具注册表边界内。
安装与启用¶
使用前需要已经安装 DeepSeek Harness。插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。
社区目录页给出的安装命令是:
dsh plugin add github:NanmiCoder/dsh-auto-mode
如需可复现安装,目录页要求固定 commit 哈希。本文写作时 main 分支最新提交为 007c316840717fa4e30cd6fb7fdcbfba026aba2d,可以写成:
dsh plugin add github:NanmiCoder/dsh-auto-mode#007c316840717fa4e30cd6fb7fdcbfba026aba2d
GitHub README 推荐的是按 Profile 安装 npm 包,当前包版本为 0.1.4:
dsh plugin --profile web add @nanmicoder/dsh-auto-mode
如果实际运行的不是 web 这个 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。本地安装会继续链接到当前源码目录。package.json 要求 Node.js 为 ^22.19.0 或 >=24.0.0,包管理器锁定为 pnpm 10.33.0。
启用 Auto¶
安装完成后,先检查组合配置,再启动 Web UI:
dsh --profile web --dump-config
dsh web
刷新 Web UI,在 Workspace Write 与 Full access 之间选择 Auto,并确认风险提示。README 特别说明:Auto 图标和风险确认弹窗只是针对已测试 DSH Web UI 的兼容增强,不是安全边界。
配置分类器¶
默认不需要额外 Endpoint 或 API Key。Auto 使用当前 Session 的 DSH Provider 和模型。如果要在受信任的 Profile 里固定专用路由,可以按仓库文档写成:
- id: auto-permission-mode
config:
classifierProvider: deepseek-official
classifierModel: deepseek-v4-flash
classifierTimeoutMs: 30000
classifierMaxOutputTokens: 1024
插件在 cordis.patch.yml 里插入的 id 就是 auto-permission-mode,并同时给官方 permission 预设表补上 auto 这一档。完整决策顺序、威胁模型、Windows 路径处理、分类器载荷限制和官方源码依据,见仓库里的 DESIGN.md。
分类器不可用、超时、输出畸形或缺少模型路由时,前两次连续失败会拒绝该风险动作,让 Agent 重试或改计划;同一 Auto Session 第三次连续失败才回退到一次普通人工审批,避免任务卡在无限拒绝里。成功的分类器响应会重置计数;调用方取消不计次。
适用场景与注意事项¶
这个插件适合已经在用 DSH 做日常编码、希望少点批准、但又不愿意把 Session 常驻到 Full access 的人。典型场景包括:在工作区里构建和测试、安装常规依赖、本地 Git commit、让子 Agent / Workflow / AgentTeams 继承同一套 workspace 边界。
下面几条边界需要先看清楚,都来自 README 和 DESIGN.md,不是额外发挥。
- 本插件不能把 Full access 变安全。Full access 明确选择
danger-full-access加never,已经站在无沙箱、免审批的权限上。Auto 的设计目标不是「在完全权限下猜哪些命令安全」,而是让绝大多数任务保留常驻沙箱,只在业务确实需要时借出一次最小权限。 - 官方文件沙箱不限制读取、网络和外部服务。敏感读取、网络传输和外部副作用仍然走语义审查,但审查覆盖的是识别得出来的语义,不是操作系统级隔离。
- Windows ACL 后端存在已公开的
Everyone/ hard-linkpartial边界,不能按 Linux / macOS 的完整强制来理解。 - 插件无法拦截加载前执行的包生命周期脚本、绕开
ctx.tools的 Node 文件系统 / 进程调用、被攻破的 Harness Runtime,或在 Harness 外部启动的命令。已经安装的 Host 插件会以当前进程权限执行,属于可信计算基的一部分。 - 沙箱不是事务性的。一条命令如果先在工作区内写了文件,随后撞上被拒绝的外部写入,前面那些工作区改动会留下来。
- 分类器连续失败、模型选错、或者用户原话含糊,都会改变实际体验。仓库文本和 Agent 自己写的 justification 不能当授权用。
安装前请阅读源码和 MIT 许可证。插件以当前 dsh 进程权限运行,安装时可能执行代码。需要可复现环境时,固定 commit 哈希,而不是一直追 main。
小结¶
dsh-auto-mode 给 DeepSeek Harness 补的是官方权限档之间缺的那一层:Auto 常驻 workspace-write,用操作系统沙箱挡住工作区外写入,再用确定性规则和语义分类器处理删除、临时包执行、网络外传和一次性越权。它不替代官方沙箱,也不能给 Full access 提供安全保证。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-auto-mode/
GitHub:https://github.com/NanmiCoder/dsh-auto-mode
npm:https://www.npmjs.com/package/@nanmicoder/dsh-auto-mode