本記事の概要
AIエージェントのgitコマンドを実行の前に検査するフックは、実行環境から呼ばれたコマンドを止めていなかった。このフックは個人会社で開発しているサービスにあり、コマンドを環境変数から読んでいた。AIエージェントの実行環境は、その環境変数を設定せず、入力を標準入力のJSONで渡す。このため、フックはどのコマンドも終了コード0で通した。修正のコミットのメッセージにも、すべてのコマンドを通したと書いてある。
フックが動いていないことは、ブランチが切り替わった事故で初めて分かった。導入のコミットのメッセージには、手動で試験した7つの場合が期待どおりだったと書いてある。ただし、どの方法で入力を渡したかは記録に無い。修正のコミットで加わったテストは、本物のスクリプトを起動して標準入力にJSONを渡す。
入力を読めないときに終了コード0で通すフックは、止めるべきコマンドが来るまで、動いていないことが見えない。導入したときの試験で入力をどう渡したかは、推定でしか言えない。導入の時点の実行環境がこの環境変数を設定していた可能性も残る。また、修正の後のフックも、JSONを解釈できないときはコマンドを通す。
記事から得られること
AIエージェントの実行環境のフックで、AIエージェントの操作を止める仕組みを作る人に向けた記事である。
- git操作のフックは、環境変数だけを読んでいたので、実行環境が標準入力で渡したコマンドを判定できなかった。
- 導入したときの手動の試験と、修正で加えた自動のテストとでは、入力の渡し方が違っていたと推定できる。
- 入力を読めず、何も出力せずに終了コード0で終わる動作は、フックの失敗で呼び出しを止める設定でも止まらない。
- 違反が再発しなかったことは、フックがコマンドを止めた根拠にならなかった。
この記事の根拠は3つある。2つのリポジトリにあるgitの履歴と、AIエージェントの実行環境の公式ドキュメントと公開の変更履歴と、既刊記事の本文である。公式ドキュメントは2026-10-14と2026-10-28に、変更履歴は2026-10-14に確認した。2つのリポジトリは、個人会社で開発しているサービスのリポジトリと、個人のメモリとルールの変遷のリポジトリである。
ここから先は有料部分です
続きは、この記事だけの単発購入か、すべての有料記事が読める購読で読めます。
有料部分はおよそ5,800字で、読み終える目安は12分です。
価格は税込みです。購入と購読は、ログインしてから進みます。購入した記事は、アカウントでいつでも読み返せます。購読中の方と購入済みの方はログインして全文を読むページへ、プランの説明はプランのページへどうぞ。
販売の対象地域は利用規約に記載しています。請求はすべて日本円で行います。