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