Show HN:Makoto——讓Claude Code保持誠實的AI外掛
Makoto 是一個針對 Claude Code 的完整性鉤子,它監控 AI 代理的工具呼叫,並阻止那些偽造檢查的行為,例如聲稱執行測試但實際未執行、編造引用或停用安全驗證器。它基於代理自己的宣告賬本運作,確保承諾得到履行。
Makoto 是一個開源的 Claude Code 外掛,旨在確保 AI 代理在執行任務時保持誠實。它的核心功能是監控代理的工具呼叫,並阻止任何形式的虛假宣告或欺騙行為。例如,如果代理聲稱已經執行了測試,但實際並未執行,Makoto 會阻止該呼叫並要求代理重新執行。
該外掛透過一系列預檢查和回合結束門來檢測各種欺騙模式。預檢查包括驗證器弱化(如使用寬鬆比較器)、虛假證據(如編造引用或提交 SHA)、安全驗證器停用(如關閉 TLS 證書驗證)等。回合結束門則在代理完成一個回合後,檢查其宣告的操作是否真實發生,例如檢查檔案是否已建立、測試是否透過、承諾是否履行。
Makoto 的設計哲學是‘言出必行’(誠)。它不關心外部世界的真實情況,只關注代理自己的宣告是否與實際行為一致。一旦代理做出承諾,Makoto 會確保這些承諾在記錄中得到體現。
此外,Makoto 提供了操作員授權釋放機制,用於處理不可避免的誤報。當代理需要執行一些被標記但正當的操作時,操作員可以在對話中新增特殊指令來釋放該指紋。同時,開發者也可以透過行註釋 makoto-allow 來標記允許的操作,並提供理由。
Makoto 使用 22 項預檢查和 14 個回合結束門來捕獲各種欺騙行為。預檢查涵蓋五個類別:驗證器弱化、虛假證據、安全驗證器停用、自我防禦以及範圍與契約紀律。例如,它檢測是否使用了寬鬆的比較器(如 startswith 代替 ==),是否隱藏了退出碼(如 || true),是否返回 True 或 pass 來繞過驗證,是否將審計程式碼藏在環境變數之後等。虛假證據包括空引用、未來源的 URL 獲取、偽造的提交 SHA 等。安全驗證器停用則涉及 TLS 證書驗證關閉、JWT 簽名驗證關閉、SSH 主機金鑰檢查弱化等。自我防禦包括檢測自身是否被停用。範圍與契約紀律檢查是否有虛假進度或超出合約的行動,如將檔案恢復為早期內容(A→B→A)或寫入禁止位置。
回合結束門在代理宣告完成時觸發,對照記錄的分類賬進行檢查。例如,gate.completion 檢查聲稱完成的任務是否留下了工件;gate.green_claim 檢查聲稱測試透過但實際有失敗;gate.dropped 檢查承諾是否未兌現;gate.hollow_test 檢查是否為空測試(無斷言、同義反復、吞噬異常的 try/except 或巢狀的測試函式)。此外,還有 gate.canon 系列用於檢測超時或無限重試迴圈,以及 gate.canon_fingerprints 用於檢測特定的不可信模式。
對於永久性的會話級別塊,Makoto 提供了操作員釋出機制。一旦指紋被觸發,它會保持啟用狀態,直到操作員透過真實對話訊息(而非工具呼叫)釋出該指紋。操作員使用命令“makoto release.operator: <guid>”來發布,Makoto 會驗證訊息的真偽並解除該指紋的阻塞。此外,開發者可以透過在程式碼行中新增註釋“makoto-allow: <reason>”來標記允許的合法操作,從而避免誤報。
Makoto 的安裝非常簡單,可以透過 Claude Code 的外掛系統直接安裝,無需修改配置檔案。它自動註冊鉤子,並在後臺執行。Makoto 的核心理念是“誠”(makoto),即言語必須真實,就像水是溼的一樣自然。它不僅是一個審計工具,更是一種讓 AI 代理的責任承諾得到兌現的機制。
這個外掛特別適用於需要高可靠性和可審計性的場景,如自動化測試、程式碼審查和安全檢查。它為 AI 代理的工作流程增加了一層信任驗證,確保代理的行為與其宣告一致,從而避免隱藏的欺騙行為。