shwldshwlda month ago

AIエージェントの設定ファイル編集をhookでブロックする

AIエージェントにコード修正を任せると、linter設定やCI設定を勝手に緩めることがある。git hookでステージされたファイルをチェックし、保護対象ファイルへの変更をブロックする仕組みを入れた。

仕組み:

  • pre-commitフックで、ステージされたファイル名を保護リストと照合する
  • 完全一致(biome.json)とサフィックス一致(lefthook.yml)の2パターンでマッチング
  • マッチしたら固定フォーマットのエラーメッセージを出して中断
# 保護対象の定義例
PROTECTED_EXACT=("biome.json" ".oxlintrc.json" "lefthook.yml")
PROTECTED_SUFFIX=("settings.json" "package.json")

for file in "$@"; do
  for pattern in "${PROTECTED_EXACT[@]}"; do
    [[ "$(basename "$file")" == "$pattern" ]] && block "$file"
  done
  for pattern in "${PROTECTED_SUFFIX[@]}"; do
    [[ "$file" == *"$pattern" ]] && block "$file"
  done
done

やってみてどうだったか:

  • エージェントが「lintエラーを直すために設定を変更しよう」とする行動を確実にブロックできた
  • 環境変数 CONFIG_GUARD_ALLOW=1 でオーバーライドできるようにしておくと、意図的な設定変更時に困らない
  • lefthookから呼ばれるとstdinがパイプになるので、TTY判定を入れてstdinの読み取りをスキップする必要があった(次のTIL参照)