前言¶
在 DSH(DeepSeek Harness)裏跑 agent,收尾時常見一句「測試都過了」——模型可以這麼說,讀者卻無法確認它是否真的執行過命令、針對的是哪一次工作區狀態。改完 A 又改 B 時,舊的通過結論也可能被靜默沿用。現有做法多停在 system prompt 裏提醒「記得跑測試」,或事後翻日誌,執行權仍在模型轉述層。
dsh-claimcheck 是維護者 Daphne999 發佈的 DSH 工作流類插件:由插件自己跑項目的驗收命令,把退出碼與輸出寫入帶 digest 的 JSON 證據,並把結果釘在當前工作區指紋上;樹一變,證據即過期;若本輪改了文件卻沒有新鮮證據,收尾會被閘門攔下,提示先取證再宣稱完成。社區目錄頁:https://www.skillhub.cn/plugins/Daphne999/dsh-claimcheck;源碼與說明:https://github.com/Daphne999/dsh-claimcheck。
這是什麼¶
一句話定位:可審計的完成閘門 + 本地證據鏈——不替代測試框架,負責執行、記錄、過期判定與輪次攔截。
插件是零運行時依賴的 Host-only bundle(無 @deepseek-ai/* 導入),許可證 MIT,要求 Node ≥ 22。與生態裏只提醒不攔截的 dsh-dod、不執行測試的 dsh-acceptance、偏回歸評測的 dsh-eval-harness 等不同,claimcheck 強調自己執行、結果綁定工作區、會過期,產物是普通 JSON,可被其他工具消費。
核心功能¶
執行權與結論三態¶
- command 類檢查通過 DSH 的 shell seam(
ctx.shell)真實執行;退出碼、信號、超時、輸出來自真實進程,模型不能僞造pass。 - verdict 只有
pass/fail/incomplete;缺證據永遠是incomplete,不是 pass。manual類檢查記爲unknown,不會自動折算成通過。 - 工作區指紋(git HEAD + 工作區狀態,或非 git 時的有界文件掃描)寫入證據;指紋變化後
claim_status返回 stale。若檢查命令運行期間改動了工作區,本次結論降級爲incomplete並說明原因。
四個工具¶
| 工具 | 作用 |
|---|---|
claim_plan |
聲明「什麼算完成」;校驗檢查樣式;拒絕危險命令與越界路徑;最多 12 條 |
claim_verify |
真正執行並寫證據;無計劃時可按項目形狀自動發現測試命令 |
claim_status |
只讀判斷證據是否仍有效(fresh / 過期原因),不執行、不寫盤 |
claim_report |
從最新證據渲染交接用 Markdown,含 digest 與工作區指紋 |
檢查類型示例(來自 README):
{ "id": "unit", "kind": "command", "title": "單元測試通過", "command": "pnpm run test", "timeoutMs": 180000 }
{ "id": "doc", "kind": "file", "title": "README 更新", "path": "README.md", "contains": "claimcheck" }
{ "id": "ux", "kind": "manual", "title": "交互已人工確認", "requirement": "產品負責人簽字" }
未提供計劃時,claim_verify 可自動發現例如 package.json 的 test / typecheck / lint / build(按鎖文件選包管理器)、pytest、cargo test、go test ./... 等。
證據落盤與完成閘門¶
證據寫在會話工作區 .dsh/claimcheck/:runs/<runId>.json、latest.json、index.jsonl。schema 爲 dsh-claimcheck/evidence@1,含 artifactDigest(覆蓋除 digest 自身外字段)、每條檢查的輸出摘要、outputTruncated 等,CI 或腳本可直接讀取。
每輪結束時,若本輪產生文件變更(write/edit、刪改移、裝依賴、帶 --write/--fix 的 shell 等)而當前沒有新鮮證據,插件會注入提醒並通過 agent.followup 讓該輪繼續。配置項 mode:warn(默認)、strict、off;maxNudgesPerSession 默認 3;純問答、只讀輪不觸發。
誠實邊界:插件提高僞造成本並讓結果可審計,並非密碼學意義上的不可僞造;人不裝插件仍可跑任意命令,但每份證據指向插件實際執行的那次進程與那棵樹。
安裝與啓用¶
方式 A · 市場/桌面端:搜索 dsh-claimcheck 安裝(倉庫帶 dsh-plugin topic,由社區索引收錄)。
方式 B · Release 離線包(v0.1.0,帶 sha256):
curl -LO https://github.com/Daphne999/dsh-claimcheck/releases/download/v0.1.0/dsh-claimcheck-0.1.0.tgz
curl -LO https://github.com/Daphne999/dsh-claimcheck/releases/download/v0.1.0/dsh-claimcheck-0.1.0.tgz.sha256
sha256sum -c dsh-claimcheck-0.1.0.tgz.sha256
mkdir -p ~/dsh-plugins/dsh-claimcheck && tar -xzf dsh-claimcheck-0.1.0.tgz -C ~/dsh-plugins/dsh-claimcheck
dsh plugin --profile <profile> add link:"$HOME/dsh-plugins/dsh-claimcheck"
方式 D · 寫進 profile:
// ~/.dsh/profiles/<profile>/package.json
"dependencies": { "dsh-claimcheck": "link:/abs/path/to/dsh-claimcheck" },
"dsh": { "profile": { "bundles": [ /* ... */ "dsh-claimcheck" ] } }
裝完重啓宿主;列表中應出現「Claimcheck 驗收取證」,會話中可用 claim_* 四個工具。
profile 的 cordis.patch.yml 可調整行爲:
- id: dsh-claimcheck
config:
mode: warn # warn | strict | off
maxNudgesPerSession: 3
maxOutputBytes: 16384
evidenceDir: .dsh/claimcheck
autoDiscover: true
requireGateAfterWrite: true
典型用法¶
- 用
claim_plan聲明 required 檢查(或依賴autoDiscover讓claim_verify發現命令)。 - 調用
claim_verify執行並生成證據;需要交接時用claim_report輸出 Markdown。 - 改代碼後先用
claim_status確認是否 stale;過期則重新claim_verify,再結束 agent 輪次。
安全方面:claim_plan / claim_verify 會拒絕 README 中列出的紅線命令模式;file 檢查拒絕絕對路徑與 ..;執行策略與 DSH shell 工具一致。插件不聯網、不上報遙測。
適用場景與注意¶
適合:希望 agent 在改代碼後必須用真實命令退出碼支撐「完成」、且證據能跟 git/工作區狀態綁定的團隊流程;需要把 JSON 證據交給 CI 或評審腳本的場景。
注意:檢查命令以當前 DSH 宿主進程權限在本地工作區執行,安裝前應閱讀源碼與 MIT 許可證,確認 RED_LINE_PATTERNS 與項目命令是否匹配你的安全策略。DSH 社區目錄(如 skillhub.cn)與 DeepSeek / 幻方無官方從屬關係,屬「一切皆插件」生態下的第三方工作流擴展。
結尾¶
dsh-claimcheck 把「已完成」從一句自稱,變成釘在工作區指紋上、會過期的可機讀證據,並在無證據收尾時攔住輪次。目錄:https://www.skillhub.cn/plugins/Daphne999/dsh-claimcheck;倉庫:https://github.com/Daphne999/dsh-claimcheck。