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参照)