Show HN: AIエージェントによる破壊的コマンドの実行を防ぐプリ実行ガード
Agent Guardは約60行のシェルフックで、AIエージェントが提案した各コマンドの実行前にチェックし、git reset --hardやrm -rfなどの取り消し不能な操作を拒否します。終了コード2で拒否し、理由をstderrに書き込みます。Claude CodeのPreToolUseフックと連携し、正規表現配列でルールを編集可能です。悪意のある難読化には対応せず、サーバー側保護やバックアップの代わりにはならないと明言しています。
AIコーディングエージェントは、自信過剰になったとき、git reset --hardを実行したり、mainに強制プッシュしたり、テーブルを削除したりするかもしれません。不注意だからではなく、数ステップ前にループがずれていたからです。Agent Guardはまさにこのシナリオのために設計された、約60行のシェルフックです。エージェントが提案するすべてのコマンドの前に実行され、終了コード2で拒否し、理由をstderrに書き込みます。エージェントCLIはその出力をループにフィードバックするため、エージェントは再試行をやめ、コマンドを人間に提示します。
インストールは簡単です。install.shを実行するとPreToolUseフックが.claude/settings.jsonにマージされ、test-guard.shで6つのアサーション(すべて成功)を確認できます。bash、grep -E、python3が必要で、Claude CodeのPreToolUseフックや、ツール呼び出し前にシェルフックを実行し終了コードを尊重する任意のエージェントCLIと互換性があります。
デフォルトでブロックされるコマンドは以下を含みます:git reset --hard、rm -rf、git clean -f/-x、git checkout .、git filter-branch、main/master/productionへの強制プッシュ、DROP TABLE、TRUNCATE、FLUSHALL、aws delete-*/terminate-*、kubectl delete、terraform destroy、docker … prune、chmod 777、curl … | sh、および/dev/sd*へのraw書き込み。ルールはスクリプト先頭の配列に「label@@regex」のペアとしてまとめられており、編集可能です。新しいパターンを追加したときは、誤検知を防ぐための良性コマンドのテストケースも追加すべきだと作者は勧めています。
作者は限界を率直に認めています。防げるのは「自信満々のエージェントが平文で不可逆コマンドを提案する」という、実際に遭遇した障害モードです。g""it reset --hard、eval経由のbase64ペイロード、シェルスクリプト、エイリアスなど、意図的な回避は防げません。マッチャーはコマンド文字列に対する正規表現であり、正規表現は敵に対して常に負けるからです。この脅威モデルは「悪意のあるモデルではなく、善意のモデルが一時的に調子を崩した」ことを想定しています。本当に回避を試みるエージェントがいるなら、パターンリストは問題解決になりません。
また、サーバー側のブランチ保護、最小権限の認証情報、バックアップの代わりにはなりません。これらはマシン外部に存在し、より信頼性が高いと作者は強調します。Agent Guardはそれらがカバーしない不可逆操作——未コミット作業のハードリセット、再帰的削除、テーブル削除、スタック破棄——のために使うべきものです。言うなれば「ロールケージではなくシートベルト」です。
重要な設計判断が2つあります。1つ目は、コマンド文字列全体(引数含む)をマッチさせることです。そのため、禁止フレーズを引用したコミットメッセージはブロックされます。これは意図的で、シェルの引用符解析、展開、evalを実装するより安全です。回避策として、git commit -F .commit-msgを使う習慣が推奨されています。2つ目は、フェイルクローズ(fail closed)です。フックのペイロードからコマンドを読み取れない場合、ブロックします。静かに「すべて許可」に劣化するガードは、監視をやめてしまうため、ガードなしより悪いと作者は言います。
設計の背後にある考え方は2層構造です。破壊的コマンドと外部効果を持つコマンドは別の問題です。Tier 1 — rm -rf、reset --hard、DROP TABLE — は取り返しがつかず、交渉不可、ロック解除なし、急いでいる自分にも例外はありません。このリポジトリはTier 1です。Tier 2 — git push、npm publish、デプロイ、マイグレーション — は実際の影響はあるものの、レビュー可能で元に戻せます。これらは禁止すべきではなく、人間が短時間ロック解除できて、自動で再ロックする「ゲート」で制御すべきです。Tier 2で興味深いのは、ロック解除はエージェントが触れないものでなければならないということです。タイムスタンプを更新して期間を延長したり、使用記録を削除して隠したりできない必要があります。
完全キットには、このTier 2に加えて、時間制限付きロック解除、設定ファイル、git pre-pushフック、隔離ワークフロー、決定的な採点器でプロンプト回帰を検出するマージゲート、各ルールの背後にあるインシデントレポートが含まれています:https://andevan.gumroad.com/l/agent-control-kit。MITライセンスで公開されており、自由に利用、フォーク、自社ツールへの統合が可能です。