拆解:6 個宿主適配器如何共享同一個 ControlEvent v2 決策核心)
Stop That Shit 架構(gòu)拆解6 個宿主適配器如何共享同一個 ControlEvent v2 決策核心【免費下載鏈接】stop-that-shitStop That Shit別再造史了面向 Codex/GPT 場景的多平臺 Hook Skill Guard攔截 AI coding agent 無需求的哈希、校驗和與任務(wù)范圍膨脹。 A multi-platform Hook Skill Guard for AI coding agents in Codex/GPT workflows: stop unrequested hashes, checksums, and task-scope creep.項目地址: https://gitcode.com/gh_mirrors/st/stop-that-shitStop That Shit別再造史了是一款面向 Codex/GPT 等 AI coding agent 的多平臺 Hook Skill Guard攔截沒有需求的哈希校驗和、多余防御和任務(wù)范圍膨脹。它的架構(gòu)很克制——6 個宿主適配器只干翻譯這一件事所有要不要攔的判斷都交給同一個宿主無關(guān)的決策核心。本文帶你快速看懂這套一個大腦、多張面孔的設(shè)計。 問題6 種宿主事件6 套方言Stop That Shit 目前支持 6 個宿主Codex、Claude Code、OpenCode、Hermes Agent CLI、Pi、Oh My Pi。麻煩在于每個宿主的鉤子事件名、字段結(jié)構(gòu)、攔截時機都不一樣宿主原生事件舉例對應(yīng)通用事件CodexPreToolUse/UserPromptSubmitaction.before/prompt.submitClaude CodePreToolUse/SubagentStartaction.before/subagent.startHermespre_tool_call/pre_llm_callaction.before/prompt.submitPitool_call/inputaction.before/prompt.submit如果在每個宿主里各寫一套判斷邏輯規(guī)則會慢慢漂移——A 宿主攔哈希B 宿主忘了。Stop That Shit 的解法是把判斷和翻譯徹底拆開適配器只負責(zé)把宿主的方言翻譯成統(tǒng)一事件決策核心只認統(tǒng)一事件完全不關(guān)心它來自哪個宿主。 ControlEvent v26 個適配器的共同語言翻譯的產(chǎn)物就是ControlEvent v2一個字段非常小的 JSON 事件。它只有 7 種事件類型定義在 src/control-protocol.cjssession.start/session.end—— 會話起止prompt.submit—— 用戶提交提示詞任務(wù)指令從這里進入契約action.before/action.after—— 工具調(diào)用前后攔截只發(fā)生在 beforesubagent.start/subagent.stop—— 子代理生命周期一個action.before事件長這樣節(jié)選自 HOST-ADAPTER-CONTRACT.md{ protocolVersion: 2, lifecycleVersion: 2, kind: action.before, sessionId: opaque, action: { name: Edit, mutability: write, affectedPaths: [src/config.cjs], hashIntent: false } }其中最關(guān)鍵的字段是mutability可變更性只有 5 個取值read、write、delegate派生子代理、control控制類操作、unknown。適配器要做的工作就是把宿主五花八門的工具調(diào)用歸類到這 5 個桶里。protocolVersion和lifecycleVersion兩個版本號則是一道門禁src/controller.cjs 里只有同時聲明了兩個版本的適配器其生命周期事實才允許修改賬本老適配器借用新協(xié)議號卻保留舊行為時會自動降級到兼容路徑而不是把錯誤狀態(tài)寫進會話。 同一個大腦handleControlEvent 如何消化所有事件所有適配器最終都調(diào)用同一個入口——src/controller.cjs 的handleControlEvent。它按事件類型分派事件核心動作prompt.submit解析任務(wù)指令如review -- 只審查不修改更新當(dāng)前契約action.before調(diào)用decide()做攔截判斷必要時原子地預(yù)留子代理配額action.after根據(jù)完成事實釋放或保留配額其余生命周期事件更新子代理賬本回注契約上下文真正的判斷邏輯在 src/decision.cjs它與宿主完全無關(guān)只做基于可觀察事實的硬決策非修改模式下發(fā)生了寫操作寫入超出files明確劃定的文件范圍未授權(quán)就添加依賴派生子代理超過agentsN上限高置信度的哈希/校驗和行為但沒給hashallow。決策還分三個檔位src/controller.cjsOFF不檢查、不記錄OBSERVING觀察檢查并記錄但永不拒絕ARMED武裝顯式任務(wù)契約生效可以返回 permission deny。對應(yīng)四種 SHIT 家族IIntent 意圖越界、HHash 無用防御、SScope 范圍膨脹、TThrash 任務(wù)打轉(zhuǎn)——這正是 src/controller.cjs 里FAMILY_NAMES的由來。 6 個適配器各自薄成什么樣每個適配器就是事件映射表 工具分類器 響應(yīng)渲染源碼統(tǒng)一放在 src/adapters/ 目錄適配器事件翻譯工具分類Codexcodex-hooks.cjscodex-tool-classifier.cjsClaude Codeclaude-hooks.cjsclaude-tool-classifier.cjsOpenCodeopencode-hooks.cjsopencode-tool-classifier.cjsHermeshermes-hooks.cjshermes-tool-classifier.cjsPipi-hooks.cjspi-tool-classifier.cjsOh My Piomp-hooks.cjsomp-tool-classifier.cjs以 Codex 為例codex-hooks.cjs 里就是一張 5 行的映射表SessionStart → session.start、PreToolUse → action.before……然后構(gòu)造帶protocolVersion: 2, lifecycleVersion: 2的事件對象丟給handleControlEvent。Claude 和 Hermes 的適配器結(jié)構(gòu)幾乎一模一樣——換宿主 加一個映射表而不是重寫一套規(guī)則。各宿主的包級入口也保持薄殼風(fēng)格opencode/stop-that-shit.mjs、pi/stop-that-shit.ts、omp/stop-that-shit.ts各自只負責(zé)把宿主回調(diào)接到共享控制器上。?? 邊界適配器是護欄不是沙箱架構(gòu)上有一條值得記住的邊界HOST-ADAPTER-CONTRACT.md宿主負責(zé)執(zhí)行、文件系統(tǒng)隔離和權(quán)限提示STS只負責(zé)用戶的任務(wù)約束文件范圍、哈希/依賴授權(quán)、子代理預(yù)算適配器負責(zé)工具身份和事件翻譯不靠名字前綴猜測工具身份。同時觀察到的Guard 響應(yīng)與宿主實際效果被刻意分開審計記錄里hostEffect永遠是unobserved因為 deny 響應(yīng)并不證明宿主一定阻止了執(zhí)行。所有檢查即使放行都會寫入 src/runtime-audit.cjs 的元數(shù)據(jù)審計讓統(tǒng)計數(shù)字有個真實的分母。? 這套架構(gòu)給普通用戶帶來的好處行為一致在 Claude Code 里被攔的哈希在 Codex 里同樣會被攔因為判斷只有一份新增宿主成本低照著 HOST-ADAPTER-CONTRACT.md 的 4 項條件穩(wěn)定會話 ID、提示詞入口、可拒絕的 before 事件、足夠分類的工具信息實現(xiàn)一個薄適配器即可可審計$stop-that-shit status/runtime命令隨時能查本會話的檢查次數(shù)和拒絕次數(shù)失敗安全狀態(tài)文件損壞時進入只讀恢復(fù)而不是崩潰審計寫失敗也不改變控制決策。 延伸閱讀架構(gòu)總覽ARCHITECTURE.md適配器契約與事件映射細節(jié)HOST-ADAPTER-CONTRACT.md契約解析與指令語法src/contracts.cjs子代理配額賬本src/delegation-state.cjs會話狀態(tài)存儲src/state.cjs規(guī)則本體Stop Ladderskills/stop-that-shit/SKILL.md18 個 Bad/Good 判定用例cases/README_CN.md一句話總結(jié)6 個適配器負責(zé)聽懂同一個 ControlEvent v2 決策核心負責(zé)做對——這就是 Stop That Shit 能在多宿主間保持判斷一致的架構(gòu)秘密?!久赓M下載鏈接】stop-that-shitStop That Shit別再造史了面向 Codex/GPT 場景的多平臺 Hook Skill Guard攔截 AI coding agent 無需求的哈希、校驗和與任務(wù)范圍膨脹。 A multi-platform Hook Skill Guard for AI coding agents in Codex/GPT workflows: stop unrequested hashes, checksums, and task-scope creep.項目地址: https://gitcode.com/gh_mirrors/st/stop-that-shit創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考