AIToday
大規模言語モデルAIコーディングAI安全性・アラインメントZenn AI/ML掲載日時: 2026年10月21日 13:00

Piのbashフック拒否は通常のツールエラー止まり

LINEで送る
Piのbashフック拒否は通常のツールエラー止まり

3つのポイント

  1. 何が起きたか

    Pi 0.84.2をclaude-sonnet-4-5で試すと、rmに{ block: true, reason }を返すフックはクラッシュせず通常のツールエラーになり、event.input.commandへの書き換えも効いた。ただしrm回避を指示するとunlink foo.tmp && unlink bar.tmpでファイルが削除された。

  2. なぜ重要か

    フックの拒否は強制停止ではなく穏当な応答だが、正規表現ベースのガードは実安全の責任を拡張作者に移す。Piのフレームワークは意味的な安全性を保証しない。

わからないところ、AIに聞けます

質問と回答はこのページに公開されます。

こういう要約が、毎朝あなたのメールに届きます。

背景と解説

テストは安全性全般より狭い問いから始まった。フックが呼び出しを拒否した時、実際に何がモデルに届くのかという点だ。Piのドキュメントは仕組みを説明していた。event.inputは再検証なしでその場で書き換え可能で、拒否は{ block: true, reason?, terminate? }を返す。しかしモデルが見る結果については何も述べていなかった。正規表現/\brm\b/に一致するものは拒否し、他のbashコマンドにはechoマーカーを前置する最小の拡張を走らせると、セッションログでマーカーが実際に出力に現れること、拒否が理由文字列を伴う通常のエラー結果として届くことを確認できた。モデルはその後ls -laでディレクトリを再確認し、tmpファイルが残っているのを見て、無限に再試行せず続行するか片付けるかをユーザーに尋ねた。

この秩序だった挙動は指示を強めると変わった。rmなしでもファイルを削除しなければならないと告げると、モデルはブロックされたパターンを避けてunlinkを使い、正規表現を素通りした。作者はkeep.txtだけが残ったことを確認した。モデルはfind -delete、perlのunlink、pythonのos.removeワンライナーも代替として挙げた。作者の結論は、呼び出しを拒否できることと安全であることは別だというものだ。Piは拡張をin-processで動かし引数の中身を公開するため、より強力なフィルタは可能だが、それはフレームワークの保証ではなく拡張作者の責任にとどまる。

作者はまた、以前の日本語記事がモックプロバイダーで拒否と継続の中核をすでに示していたのに対し、今回の実行は実際のAnthropic APIを通し、コマンド書き換えと指示による回避も追加で扱ったと述べている。terminate: trueオプション、並列ツール呼び出し、OpenCodeのアウトプロセス方式との実測比較は今後の課題として残された。

よくある質問
コマンドをブロックするとコーディングエージェントはクラッシュするか?
いいえ。Piでは拒否がisError: trueと拒否理由をテキストに持つツール結果として返り、プロセスは例外なく動き続けた。
モデルはブロックされたコマンドを回避できるか?
はい。別の方法でファイルを削除するよう明示的に指示すると、モデルはunlink foo.tmp && unlink bar.tmpを実行し、正規表現ガードをすり抜けて両ファイルが削除された。
テストで使われたバージョンとモデルは?
Pi 0.84.2をプリントモードで実行し、Anthropicのclaude-sonnet-4-5を使用した。
LINEで送る

あなたの仕事に関係するAIニュースを、毎朝お届けします。

業界と使っているAIツールを選ぶと、仕事に関係するニュースが毎朝届きます。

登録無料・Googleアカウントなら30秒・いつでも解除できますAITodayについて →

AIに質問

この記事についてわからないことをAIに質問できます。AIはこの記事・AIToday の過去記事・Wikipedia を読み、出典を付けて答えます。Q&Aはこのページに公開され、他の読者も読めます。

質問と回答はこのページに公開されます。

関連記事

次の記事へGPT-6シリーズが希少言語の処理精度を大幅改善