Claim-Evidence Hook:用 Claude Code Hooks 擋下「我驗證過」與「找不到」的隱形作弊
Dustin GMAT 分享一個 Claim-Evidence Hook:當模型宣稱已驗證、已測試、已實測,或宣稱找不到、不存在、查無時,hook 會檢查本輪 session 是否真的有相應工具 / 指令證據;沒有就要求拿出證據、回去驗證或降級成「尚未驗證」。查證 Claude Code hooks 官方文件後,本文整理 Stop / PreToolUse / PostToolUse 等事件如何支撐這種 guard,並翻成 Athena / Hermes 可用的 execution ledger + claim classifier + evidence matcher 架構。
Claude Code · Hooks · Agent Governance
這則 Threads 抓到 agent 工程裡一個很硬的問題:模型很會在語氣上宣稱「已驗證、已測試、找不到」,但不一定真的跑過測試或查過資料。解法不是再寫更多自然語言規則,而是用 Hook / Sandbox / permission list 把「聲稱」和「工具證據」綁在一起。
PreToolUse 可在工具執行前阻擋,PostToolUse 可在工具成功後執行,Stop 會在 Claude 完成回應時觸發。官方 guide 也明確說 hooks 可用來 enforce project rules,因為 deterministic control 比依賴 LLM 自己選擇更可靠。Threads 原文在講什麼
Dustin GMAT 設計了一個 hook:只要模型宣稱「驗證、測試、實測」或類似語句,hook 就檢查本輪 session 是否真的有相關工具 / 指令紀錄,例如測試、build、status、diff、實跑等。如果沒有,就當場要求模型拿出證據;拿不出就回去驗證。同樣地,若模型宣稱「找不到、不存在、查無」,也會檢查它是否真的使用搜尋工具;沒有就擋下來。
原文最關鍵的一句是:對付模型的隱形作弊,不能只靠自然語言規則,需要 Hook、Sandbox、permission list 一起上。
截圖 OCR:hook 實際攔截了什麼
Threads 附圖是一個 Claude Code / terminal 風格畫面,顯示 Stop hook 被觸發:
Ran 4 stop hooks
└ Stop hook error: CLAIM-EVIDENCE
GUARD: 你宣稱「驗證通過/測試通過/實測」,但本 session
帳本裡沒有任何驗證類指令紀錄(測試、build、status、diff、實跑)。
行動完成宣稱=事實主張。先實際跑驗證指令,再宣稱結果;若確實無法自動驗證,改寫為「尚未驗證,需人工確認」。
畫面下方模型辯稱「實測」來自實際 Bash 指令輸出,例如 ollama run ... --verbose 的 eval rate / tokens/s;但 hook 可能只把 test/build/status/diff 這類字面模式歸為驗證類指令,沒有把 ollama run --verbose 這種「跑模型拿即時效能數據」歸類進驗證。這剛好說明 hook 要可調:它不能只靠關鍵字,也要能辨識任務類型與證據類型。