shwldshwlda month ago

PreToolUseフックでAIエージェントの設定ファイル改変を防ぐ

AIエージェントがタスク実行中にlinter設定やフォーマッタ設定を勝手に変更してしまう問題を、PreToolUseフックでガードする。

仕組みの概要:

  • エージェントがファイル編集ツールを呼ぶ直前にフックが起動する
  • 編集対象のファイルパスを保護リストと照合する
  • 保護対象なら操作をブロックし、理由をエージェントに返す
# config-guard.sh(簡略版)
PROTECTED_FILES="biome.json .eslintrc tsconfig.json lefthook.yml"

for file in $PROTECTED_FILES; do
  if echo "$INPUT" | grep -q "$file"; then
    echo "BLOCKED: $file is a protected config file"
    exit 1
  fi
done

設計判断のポイント:

  1. ブロックリスト方式にする — 許可リスト方式だと新規ファイル追加時に漏れるため、明示的にガード対象を列挙する方が安全
  2. stdinからの入力を正しく処理する — フックはパイプ経由で入力を受け取る。対話的なプロンプト(read)を使うとブロックするため、stdinを一括読み取りする設計にする
  3. エージェントへのフィードバックを明確にする — なぜブロックされたかをメッセージで返すと、エージェントが代替手段を自律的に選べる