dsh-write-gate:DeepSeek Harness 的工具调用前写门控插件

前言

DeepSeek Harness(DSH)把代理流程和能力扩展做成插件化组件。AI coding agents 在执行任务时会调用 shell、文件读写等工具。如果只把“不要做某类操作”写进提示词,或者只做简单的文本过滤,执行前仍缺少一道可审计的策略检查。

dsh-write-gate 针对这个问题:操作者用 commitments 描述策略,插件在工具调用执行前检查这些 commitments,再决定是否放行该次工具调用。

这是什么

dsh-write-gate 是 couldbeme 维护的 DSH 插件,仓库为 couldbeme/dsh-write-gate,许可证为 MIT,Node 要求 >=20

它提供 commitment write-gate,面向 AI coding agents,核心能力是 two-tier(deterministic + LLM judge)pre-execution policy:

  • 操作者编写 commitments。
  • 工具调用执行前,插件先检查这些 commitments。
  • 结构类约束走确定性检查。
  • 语义类约束走 LLM judge。

核心模块是 dsh-write-gate/core,定位为 engine-agnostic core;仓库提供 DeepSeek Harness(dsh)适配器。文档还提到,同一个 core 上的 Claude Code adapter 是 planned 能力。

两级检查

dsh-write-gate 的检查分两层。

1、Tier 1 是 deterministic structural checks。它使用 path globs、command regexes 和 scope filters,挂在 ctx.tools.guard()。适合可以明确表达的约束,例如限制某类 shell 命令、限制文件路径范围。

2、Tier 2 是 semantic LLM judge。它对 commitments 里的自然语言 statement 做判断,挂在 tools/pre-execute waterfall。适合结构规则无法完全判断的约束,例如“不要修改与当前任务无关的文件”。

被拦截的调用会生成 write-gate/contradiction 事件,并追加 JSONL 到 contradictions log。日志会解释哪个 commitment 触发,以及为什么触发。

承诺文件

操作者通过 commitments file 定义策略。文件可以设置默认行为,也可以逐条定义 commitments。下面是一个结构示例:

defaults:
  failMode: closed
  judgeBudgetPerStep: <judgeBudgetPerStep>

commitments:
  - id: <commitment-id>
    statement: "<operator-authored commitment>"
    match:
      kinds: ["<kind>"]
      commands: ["<command-regex>"]

  - id: <semantic-commitment-id>
    statement: "<operator-authored commitment>"
    severity: <severity>
    semantic: true
    match:
      kinds: ["<kind>"]

字段含义如下:

  • defaults.failMode:控制 judge 不可用时的默认行为。文档示例使用 closed
  • defaults.judgeBudgetPerStep:控制每步 judge budget。
  • id:commitment 标识。
  • statement:操作者编写的自然语言约束。
  • match.kinds:scope filter。
  • match.commands:structural evidence。
  • severity:commitment 的级别。
  • semantic: true:表示该 commitment 需要 Tier 2 judge 处理。

需要注意几个行为:

  • 非语义 commitment 如果只有 scope 但没有 evidence,会在所有 in-scope action 上触发。
  • 非语义 commitment 如果既没有 scope 也没有 evidence,会在加载时被拒绝为 unenforceable。
  • command regexes 默认大小写不敏感。
  • command patterns 会执行在 synchronous guard 中,过复杂或可能回溯的 regex 会卡住工具管道。commitments 由操作者编写,但仍应尽量保持 pattern 简单。
  • commitments file 缺失或无效时,插件会 loud mount failure,让部署失败,而不是挂载一个不守任何策略的 gate。

安装与启用

先安装 npm 包:

npm install dsh-write-gate

这个命令安装的是 library 和 dsh plugin 入口。core 入口是 dsh-write-gate/core,dsh 入口是包根入口。

仓库列出的 peer dependencies 包括:

@deepseek-ai/cordis >=4.0.1 <5
@deepseek-ai/dsh-agent >=0.1.0-rc.5 <0.2.0
@deepseek-ai/dsh-llm >=0.1.0-rc.5 <0.2.0
@deepseek-ai/dsh-tools >=0.1.0-rc.5 <0.2.0

在 DSH 应用中使用前,需要准备有效的 commitments file,并把插件挂载到目标 dsh 进程。如果 commitments file 缺失或无效,挂载会失败,而不是静默继续。

独立 CLI 检查

dsh-write-gate check 可以在不启动 harness 的情况下做检查,适合 CI、pre-commit hooks 或手动验证:

dsh-write-gate check --commitments <file> --tool <name> [--path <p> ...] [--command <c>] [--explain] [--json]

帮助命令如下:

dsh-write-gate --help
dsh-write-gate -h
dsh-write-gate check --help

CLI 的 v0 形态只做 Tier 1 structural check,没有 --judge flag。对于 semantic: true 且结构检查无法判定的 commitments,会走到 no judge configured,再按 commitments file 的 failMode 处理。

failMode 为默认 closed 时,CLI 中这类 escalating semantic commitments 会阻塞。若 dsh 插件侧配置了 judge,则插件侧没有这个 CLI v0 的限制。

如果需要从源码运行 CLI,可以按仓库说明安装依赖并构建:

pnpm install && pnpm build && node dist/cli/index.js --help

本地验证

仓库提供以下命令用于测试、类型检查和演示:

pnpm install && pnpm test
pnpm typecheck
pnpm demo

如果要自行运行 judge 评估脚本,可以使用:

pnpm build && node scripts/judge-eval.mjs --url <openai-compatible-endpoint> --model <model>

这个命令需要 OpenAI-compatible endpoint 和 model,用于对 judge 表现做评估。

关键设计取向

dsh-write-gate 的几个关键行为如下:

  • Fail-closed default:judge unreachable、timed out 或 over budget 时,block-severity commitments 会阻塞。
  • Bounded judge cost:使用 per-step budget、verdict memoization 和 timeout-as-unavailable 限制 judge 成本。
  • Prompt-injection stance:action content 以 fenced data 形式进入 judge prompt,只接受 strict JSON verdict 或 ABSTAIN
  • Loud mount failure:commitments file 缺失或无效时,部署会失败,而不是挂载一个 guard nothing 的 gate。

适用场景与注意

适合以下场景:

  • 在 DSH 中给 shell、文件写入等工具调用加前置策略。
  • 在 CI 或 pre-commit hooks 中使用 CLI 做结构检查。
  • 需要记录哪些 commitments 被触发,以及为什么触发。

使用前需要注意:

  • 插件以当前 dsh 进程权限运行。它能影响的工具调用范围,受该 dsh 进程权限约束。
  • 安装前应检查源码、commitments 示例和许可证。
  • 策略由操作者编写。错误 regex、过宽 scope 或过严 failMode 都会影响正常工具调用。
  • CLI v0 没有 judge 能力。语义类 commitments 在 CLI 中会按 failMode 处理;如需语义判断,需要在 dsh 插件侧配置 judge。
  • Claude Code adapter 是 planned 能力,不是当前已交付功能。

链接

  • GitHub: https://github.com/couldbeme/dsh-write-gate
  • 社区目录页: https://www.skillhub.cn/plugins/couldbeme/dsh-write-gate

这里的社区目录页是独立站点,不代表 DeepSeek 或幻方的官方应用商店。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye