Zenn Pretooluse Hook Control
Claude Code の PreToolUse フックで AI エージェントの行動を物理的に制御する
- URL: https://zenn.dev/penne_inc/articles/claude-code-pretooluse-hook-permission-control
- 日付: 2026-06-10
- Tier: Tier 3
- 要旨:
permissions.denyの静的パターンマッチでは止められなかったworktree隔離破りに対し、PreToolUse hookのシェルスクリプトで動的判定する解決策。cwdの状態を見て絶対パス経由の親リポジトリ書き込みを防ぐ。
詳細
permissions.denyの限界2点:
- 静的パターンマッチのみ(別表現の絶対パスは素通り)
- cwdの状態を判定できない(相対パスでの親リポジトリEditは素通り)
PreToolUse hookの特性:
- stdin:
tool_name/tool_input/cwd/session_id等がJSONで渡される - exit 0:通過、exit 2:ブロック
- stderr:Claudeへのブロック理由として渡される(次の判断材料になる)
- 動的判定可能:git status・環境変数・他コマンドの実行結果を使用可能
設定例:
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash|Edit|Write|NotebookEdit",
"hooks": [{"type": "command", "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/worktree-isolation-guard.sh"}]
}]
}
}ガードの3段階ロジック:
- leadエージェントは無条件許可
- cwdが親リポジトリのパス配下かチェック
- 絶対パス指定が親リポジトリを指していないかチェック
「設定ファイルで止められないなら、シェルスクリプトで止める」という実践的アプローチ。