PreToolUse hookでAIエージェントの望まないコマンドパターンを禁止する
Claude Codeのエージェントがバックグラウンドタスクの完了を sleep && grep でポーリングし始めた。許可プロンプトが出るたびにユーザーが判断する必要があり、作業の邪魔になる。
PreToolUse hookを設定すると、特定のコマンドパターンをエージェントが実行する前にブロックできる。
// .claude/settings.local.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -q 'sleep.*grep'; then echo 'BLOCK: sleep+grep polling is not allowed' >&2; exit 2; fi"
}
]
}
]
}
}
仕組み:
PreToolUseはツール実行前に発火するフックmatcherでツール名を指定(Bashでシェルコマンドを対象に)- exit code 2 でツール実行をブロックし、エラーメッセージがエージェントに返る
- エージェントは別のアプローチを試みるようになる
ポーリング以外にも、rm -rf や git push --force など危険なパターンの防止に使える。エージェントの行動を事後チェックでなく事前にゲートする仕組みとして便利。
refs: https://docs.anthropic.com/en/docs/claude-code/hooks