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 或幻方的官方應用商店。

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

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

小夜