dsh-codex-approval:DeepSeek Harness 的 Codex 式审批插件

前言

在 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 上实现自动审批决策链:

  1. 规则层:按显式规则处理可预期的命令或原因。
  2. AI 审判层:对规则未命中的请求做风险评估。
  3. 人类兜底层:对仍无法自动决定的请求交还人类。

package.json 中版本为 0.2.2engines 要求 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 层会输出:

  • risklowmediumhigh
  • authorizationallowaskdeny

最终结果会按 riskTolerance 映射为 allowaskdeny。AI 输出只映射为这三种结果之一,不会直接执行任意指令。

默认情况下,AI 使用:

  • provider:opencode-go
  • model:deepseek-v4-flash

进入 AI prompt 前,命令文本会被截断,默认 maxPromptChars2000

人类兜底层

默认人类兜底行为是 ask,也就是弹出 GUI 询问。

如果 AI 调用失败、超时或输出无法识别,插件可以按 failOpen 配置交还人类。默认 failOpenask

审批模式

插件提供三种审批模式:

  • 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 无权自动放行。

命令文案语言

插件命令文案语言支持:

  • auto
  • zh
  • en

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-approvalconfig,例如:

- 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:审批模式。
  • mode3OnAskai-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

含义如下:

  1. Bash(git status*):只读状态检查,自动放行。
  2. Bash(rm -rf /*):高风险删除命令,直接拒绝。
  3. reason:*credential*:涉及凭据、密钥等敏感原因,交人类询问。

不配置时的默认行为

如果不做配置,插件会使用内置默认:

  1. 只读命令自动放行。
  2. 破坏性命令直接拒绝。
  3. 敏感词场景询问人类。

开发与测试

开发或测试插件时,可以运行:

node --test

适用场景与注意

这个插件适合以下场景:

  1. 使用 dsh web profile,希望减少低风险审批打扰。
  2. 希望按命令或审批原因配置显式 allow/ask/deny 规则。
  3. 希望让 AI 参与风险评估,但保留人类兜底。
  4. 需要 JSONL 审计日志来追溯每次审批决策。

使用注意:

  1. 插件参与 dsh 的审批决策,安装前应先检查源码、许可证和依赖。
  2. 插件以当前 dsh 进程权限运行,不应在不可信环境中随意启用。
  3. deny 规则永远最先求值,AI 无权覆盖显式拒绝。
  4. ai-auto 模式如果将 mode3OnAsk 设为 allow,AI 无法决定时也会放行高风险操作,慎用。
  5. danger-full-access 模式下,沙箱不拒绝任何操作,审批请求不会发生,插件自然空闲。
  6. 单次 AI 审批成本约 0.3~0.7 分钱(官方价估算),仅在规则未命中、需要调用 AI 时产生。

相关链接

  • GitHub:https://github.com/040822/dsh-codex-approval
  • 插件目录页:https://www.skillhub.cn/plugins/040822/dsh-codex-approval
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye