前言¶
在 DeepSeek Harness(dsh)中,智能体执行工具前通常会遇到审批问题:如果审批粒度太粗,低风险操作会反复打扰人类;如果审批太宽松,又可能让高风险命令直接执行。dsh-codex-approval 是一个仿照 OpenAI Codex CLI 审批模型的 dsh 插件,目标是在 dsh 的审批应答点上加入一条更细的决策链:先看显式规则,再交给 AI 做风险判断,最后由人类兜底。
下面介绍这个插件的定位、核心能力、安装方式、配置项和使用注意事项。
这是什么¶
dsh-codex-approval 是一个面向 DeepSeek Harness(dsh)的 AI 自动审批插件,由 040822 维护,许可证为 MIT。
它的核心目标,是在 dsh 的 approval/request 应答者(answerer)seam 上实现自动审批决策链:
- 规则层:按显式规则处理可预期的命令或原因。
- AI 审判层:对规则未命中的请求做风险评估。
- 人类兜底层:对仍无法自动决定的请求交还人类。
package.json 中版本为 0.2.2,engines 要求 node >=22.19,依赖 @deepseek-ai/schemastery ^3.18.1。
核心功能¶
规则层¶
插件支持规则层自动审批,匹配对象可以是:
ToolName(args preview):例如Bash(git status*)。reason:<文本>:例如reason:*credential*。
每条规则可以指定动作:
allow:自动放行。ask:交人类处理。deny:直接拒绝。
规则优先级为:
deny > ask > allow
也就是说,只要存在显式 deny 规则,AI 层不能覆盖该拒绝结果。
AI 审判层¶
当规则未命中时,插件可以调用 AI 对审批请求做判断。AI 层会输出:
risk:low、medium、high。authorization:allow、ask、deny。
最终结果会按 riskTolerance 映射为 allow、ask 或 deny。AI 输出只映射为这三种结果之一,不会直接执行任意指令。
默认情况下,AI 使用:
- provider:
opencode-go - model:
deepseek-v4-flash
进入 AI prompt 前,命令文本会被截断,默认 maxPromptChars 为 2000。
人类兜底层¶
默认人类兜底行为是 ask,也就是弹出 GUI 询问。
如果 AI 调用失败、超时或输出无法识别,插件可以按 failOpen 配置交还人类。默认 failOpen 为 ask。
审批模式¶
插件提供三种审批模式:
manual:完全旁路自动决策,审批交回人类。ai:按规则、AI、人类兜底的顺序处理。ai-auto:规则与 AI 自动处理,ask不弹窗,按mode3OnAsk处理。
在 ai-auto 模式下,mode3OnAsk 默认为 deny,即 AI 无法自动放行时不会弹窗,而是拒绝。如果把 mode3OnAsk 设为 allow,AI 无法决定时也会放行高风险操作,需要慎用。
审计日志¶
每次决策都会写入 JSONL 审计日志,默认路径为:
~/.dsh/logs/approval.jsonl
日志中会记录工具名、命令预览、reason、判定来源、模式、风险、AI 理由、耗时等信息。
内置 npm publish 规则¶
插件内置规则:
Bash(npm publish*) → ask
这意味着 agent 执行 npm publish 时,默认需要询问人类,AI 无权自动放行。
命令文案语言¶
插件命令文案语言支持:
autozhen
auto 会跟随 dsh 设置的语言偏好。
安装与启用¶
先确认 Node 环境满足 node >=22.19。然后执行:
dsh plugin --profile web add dsh-codex-approval
安装后重启 dsh web 生效。
插件只在目标 profile 注册,推荐使用 web profile。qqbot / headless 等 profile 不受影响。
配置示例¶
插件配置可以放在:
~/.dsh/profiles/web/cordis.patch.yml
在文件中添加 id: dsh-codex-approval 的 config,例如:
- id: dsh-codex-approval
config:
mode: ai
mode3OnAsk: deny
locale: auto
rules:
- match: 'Bash(git status*)'
action: allow
- match: 'Bash(rm -rf /*)'
action: deny
- match: 'reason:*credential*'
action: ask
ai:
provider: opencode-go
model: deepseek-v4-flash
riskTolerance: medium
maxPromptChars: 2000
timeoutMs: 15000
maxTokens: 512
failOpen: ask
fallback: ask
logFile: ~/.dsh/logs/approval.jsonl
可配置项包括:
mode:审批模式。mode3OnAsk:ai-auto模式下ask的处理方式。locale:命令文案语言。rules:显式规则。ai:AI provider、model、riskTolerance、maxPromptChars、timeoutMs、maxTokens、failOpen。fallback:无规则命中且 AI 关闭时的兜底动作。logFile:审计日志路径。
典型用法¶
运行时切换审批模式¶
可以使用斜杠命令切换当前会话的审批模式:
/approval-mode
查看当前模式。
/approval-mode 3
切换为 ai-auto。
/approval-mode default
清除会话覆盖,回落到配置默认值。
会话覆盖会保存到:
~/.dsh/settings.yaml
保存位置是 dsh-codex-approval 命名空间。如果 settings 服务不可用,会降级为纯内存保存,重启后会丢失。
配置规则¶
示例规则:
rules:
- match: 'Bash(git status*)'
action: allow
- match: 'Bash(rm -rf /*)'
action: deny
- match: 'reason:*credential*'
action: ask
含义如下:
Bash(git status*):只读状态检查,自动放行。Bash(rm -rf /*):高风险删除命令,直接拒绝。reason:*credential*:涉及凭据、密钥等敏感原因,交人类询问。
不配置时的默认行为¶
如果不做配置,插件会使用内置默认:
- 只读命令自动放行。
- 破坏性命令直接拒绝。
- 敏感词场景询问人类。
开发与测试¶
开发或测试插件时,可以运行:
node --test
适用场景与注意¶
这个插件适合以下场景:
- 使用 dsh web profile,希望减少低风险审批打扰。
- 希望按命令或审批原因配置显式 allow/ask/deny 规则。
- 希望让 AI 参与风险评估,但保留人类兜底。
- 需要 JSONL 审计日志来追溯每次审批决策。
使用注意:
- 插件参与 dsh 的审批决策,安装前应先检查源码、许可证和依赖。
- 插件以当前 dsh 进程权限运行,不应在不可信环境中随意启用。
deny规则永远最先求值,AI 无权覆盖显式拒绝。ai-auto模式如果将mode3OnAsk设为allow,AI 无法决定时也会放行高风险操作,慎用。danger-full-access模式下,沙箱不拒绝任何操作,审批请求不会发生,插件自然空闲。- 单次 AI 审批成本约 0.3~0.7 分钱(官方价估算),仅在规则未命中、需要调用 AI 时产生。
相关链接¶
- GitHub:https://github.com/040822/dsh-codex-approval
- 插件目录页:https://www.skillhub.cn/plugins/040822/dsh-codex-approval