hooks / pretooluse-deny · 約 10 分
PreToolUse で deny する
Bash の command に echo CODEX_SCHOOL_DENY_MARKER が含まれるとき permissionDecision を deny します。
学習目標
PreToolUse の matcher は tool_name です。シェルは Bash、パッチは apply_patch / Edit / Write です。
[codex-hooks]
拒否は次の形です。実機でも破壊的なコマンドは使いません。学習用の echo CODEX_SCHOOL_DENY_MARKER を拒否します。
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "学習用マーカーコマンドを拒否しました"
}
}
stdin の Bash 入力は tool_input.command です。
[codex-hooks]
前提
/hooks で信頼済みであること。拒否対象は文字列 CODEX_SCHOOL_DENY_MARKER だけです。
なぜ必要か
モデルが出した command を、実行前に機械的に止められます。教材では無害な echo マーカーで同じ JSON 契約を確認します。
実行場所
Web実習 (browser) は WebContainer の Node で公式仕様の入力例を流す練習です。Codex 本体の hook 実行ではありません。local-bridge では同じスクリプトを /hooks で信頼した Codex が呼び出します。command ハンドラは公式例では python3 ですが、JSON 契約は同じです。
[codex-hooks]
echo '{"tool_input":{"command":"echo CODEX_SCHOOL_DENY_MARKER"}}' | node .codex/hooks/pre_tool_use_policy.mjs
echo '{"tool_input":{"command":"echo ok"}}' | node .codex/hooks/pre_tool_use_policy.mjs
成功結果
マーカー付き command では permissionDecision が deny で、理由は「学習用マーカーコマンドを拒否しました」です。通常の echo ok では {} です。信頼済みなら、実際の Bash でも同じマーカーが拒否されます。
失敗対処
continue: false を PreToolUse に書くと、公式は未サポートとして hook 失敗扱いし、ツールは続行します。deny は permissionDecision を使います。
[codex-hooks]
このレッスンで接続する
ページを移動するとブラウザ内実習の接続とファイルは消えます。演習の直前に、このパネルから明示的に再接続してください(自動では戻りません)。