前言¶
在 DeepSeek Harness(DSH)里跑智能体时,工具调用是否执行、何时弹审批,往往由内置权限模式替你做了取舍。Read Only 与 Workspace Write 是「按需审批」——具体工具可以自己决定要不要问;Full access 则是「从不审批」。若你希望每一次工具调用(包括读文件、grep、glob、联网搜索)都先看到完整参数再决定放行,内置三种模式都填不上这个缺口。下面介绍社区插件 dsh-manual-approval(维护者 yknBugs,分类 admin-security),它为 Harness 增加第四种预设:Manual。
这是什么¶
dsh-manual-approval 是一个 DeepSeek Harness 插件:在 Manual 会话中,所有工具调用在真正执行前都会先返回 ask,弹出审批卡片;只有你确认后调用才会继续。插件通过 bundle 补丁扩展权限预设表,不改动模型侧的工具调用形状——参数与在其他模式下字节级一致。安装后需在权限选择器里选 Manual,或执行 /permission manual。
与内置三种模式的对比¶
| 模式 | 沙箱 | 审批 |
|---|---|---|
| Read Only | read-only |
按需 |
| Workspace Write | workspace-write |
按需 |
| Full access | danger-full-access |
从不 |
| Manual(本插件) | 无(捆绑 danger-full-access) |
每次 |
「按需」表示由工具自行决定是否询问,不询问则立即执行。Manual 则不由单个工具决定——每一次都由你在卡片前做决定,且参数逐行展示,不做摘要式省略。
核心功能¶
每次调用先确认¶
在 Manual 为当前模式时,插件对所有工具调用在其它 pre-execute 监听器之前返回 ask。Shell 类工具还会在详情里展示模型填写的一行 description(说明这条命令在做什么)。
可选反馈写入结果¶
审批卡片上有可选反馈框。允许时,你输入的内容作为备注附在该次调用结果上;拒绝时,同样内容作为拒绝理由回传给模型,便于在「正在执行的那一步」传达你的判断。
失败即关闭(fail closed)¶
关闭卡片、没有审批路径或审批出错,均不会执行该次调用。
自动规则(Settings → Manual mode rules)¶
Manual 激活时,每次调用先按你配置的有序规则列表匹配;第一条命中规则生效,无匹配则走普通审批卡片。
规则由若干 条件(全部满足)加一条 动作 组成。每个条件选一个目标并用正则匹配:
| 目标 | 正则匹配对象 |
|---|---|
| Tool name | 完整工具名,例如 ^pwsh$ |
| Parameter name | 各参数名,例如 ^(command\|cmd)$ |
| Parameter value | 各参数值,例如 rm\s+-rf |
| 动作 | 效果 |
|---|---|
| Allow | 立即执行,不弹窗 |
| Deny | 不执行,理由按与手动拒绝相同的格式回传模型 |
| Warn at approval | 仍弹窗,卡片中以红色展示你配置的提示文案 |
| Network judge | 将调用 POST 到你配置的端点,按响应裁决 |
规则可排序。若放一条「工具名 .* + Allow」的兜底规则且排在最前,Manual 在行为上可等同于 Full access,作为逃生口。
规则拒绝与你在卡片里手写的拒绝走同一格式化路径,模型侧无法区分是否来自自动规则。
Network judge¶
裁决在 Host 进程中发起(非浏览器),因此 http://127.0.0.1:…、内网 HTTP、无宽松 CORS 的端点均可使用。默认 POST、content-type: application/json,请求体为整次调用的合并 JSON 文档(含可选的 cwd 与各工具参数)。响应中通过 decisionPath(必填)读取 "approve"、"deny" 或 "ask";可选 reasonPath 取理由字符串。任意失败(不可达、非 2xx、JSON 无效、路径缺失、超时等)会显示具体错误并仍回到人工审批,不会 fail open。
界面语言¶
审批面板与规则设置页通过 DSH 的 ctx.locale 注册英文与简体中文,跟随 Settings → General → Language,切换后无需重载即可换文案。规则里的正则与 JSON 字段名保持技术原文。
安装与启用¶
安装会添加包、将插件链入 profile,并应用 bundle 补丁;新预设与 Host 侧逻辑在下一次 profile 启动后生效,安装后需重启 dsh web(或你的 profile)。
官方安装命令:
dsh plugin --profile web add dsh-manual-approval
从本地 checkout 安装时(需自行 clone 仓库到本地目录):
git clone <this repo> dsh-manual-approval
dsh plugin --profile web add ./dsh-manual-approval
dsh --profile web --dump-config # verify composition
卸载:
dsh plugin --profile web remove dsh-manual-approval
验证 composition 时可查看 dsh --profile web --dump-config 输出中是否存在 manual-approval 行,以及 id: permission 是否由 dsh-manual-approval 打过补丁。插件自带 cordis.patch.yml,无需手改 Host 组合;卸载插件会一并移除补丁。
典型用法¶
- 按上文命令为
webprofile 安装插件并重启 DSH Web。 - 在权限选择器中选择 Manual,或会话内执行
/permission manual。 - 智能体发起任意工具调用时,在卡片中查看工具名与各参数行,选择允许或拒绝,必要时填写反馈。
- 若重复性操作较多,在 Settings → Manual mode rules 中增加 Allow / Deny / Warn / Network judge 规则并调整顺序;需要完全放开时可使用 catch-all Allow 规则(需自行评估风险)。
开发者在仓库内可用以下命令做离线与启动验证(摘自 README):
npm test
npm run test:boot
适用场景与注意¶
适合谁: 需要在 DSH 中做高可控审计、培训演示,或在不完全信任默认「按需审批」策略时,希望逐次过目参数再放权的使用者与团队。
权限与沙箱: Manual 捆绑 danger-full-access,没有沙箱;一次被批准的调用具备完整执行权限,包括工作区外写入。插件无平台特化代码,Linux、macOS、Windows 行为一致。
安全与信任: 插件以当前 DSH 进程权限运行;Network judge 会向你所配 URL 发送调用详情。安装前应阅读 GitHub 仓库 源码与 MIT 许可证,并理解 bundle 补丁会改写权限预设表(若未来 Harness 增加第五条内置预设,该补丁文件需随版本更新)。
环境: package.json 要求 Node ^22.19.0 || >=24.0.0;peer 依赖 @deepseek-ai/cordis ^4.0.2(optional)。当前包版本为 0.1.0。
生态说明: DSH 采用「一切皆插件」的扩展方式;社区目录站点与 DeepSeek / 幻方无官方从属关系,本插件来自社区维护者 yknBugs。
结尾¶
dsh-manual-approval 在 Harness 内置三种权限模式之外补上 Manual:每次工具调用先过审批卡片,参数透明、可附反馈,并可用有序规则与 Network judge 做自动化折中。若你要在 Web profile 里启用,记住安装后重启 profile,并用 dump-config 核对补丁是否生效。