AIToday
AIコーディングHacker News掲載日時: 2026年8月16日 13:039分で読める

ProofRun:AI エージェントのテスト実行を暗号学的に検証

LINEで送る
ProofRun:AI エージェントのテスト実行を暗号学的に検証

要点

  • ProofRun はオープンソースの検証ツールで、AI コーディングエージェントがテスト対象と主張するコードに対して実際にテストを実行したかどうかを、暗号学的フィンガープリントによって証明する。テスト出力の解析や AI による AI 検証の代わりに、実際の終了コードをキャプチャし、正確な git 状態(コミットハッシュとすべての未コミット変更のハッシュ)のハッシュに紐付ける。

  • コードが変更されるとその結果は自動的に STALE になる。Claude Code により構築されたこのツールはリリース前に敵対的レビューを受け、脆弱性を発見・修正した。

  • CI ゲートまたはプリコミットフックとして使用可能。

3つのポイント

  1. 何が起きたか

    ProofRun は、テスト結果を正確なコード状態(git コミットとすべての未コミット変更のハッシュ)に暗号学的に紐付けるツール。任意のバイトが変更されるとその結果は自動的に STALE になる。Claude Code(AI エージェント)により構築され、リリース前に敵対的レビューで厳密にテストされた。

  2. なぜ重要か

    AI コーディングエージェントは実際にテストを実行せずにテスト成功を主張することがある。事前実行に基づいて推測するか、単に推測しているだけかもしれない。ProofRun は実際のサブプロセス実行を使用し、終了コードを現在のコードのフィンガープリントに紐付けることで、この曖昧性を排除する。AI エージェントに依存するチームにとって、これは主張を信頼する代わりに暗号学的に検証する方法である。

  3. 注目点

    ツールは現在 v0.2.0 で、ネットワーク呼び出しやテレメトリがないオフライン専用。プルリクエスト用の GitHub Action が利用可能。今後の機能には pytest と Jest の構造化出力サポート、および改ざん防止署名付きレシート(計画中だが未設計)が含まれる。

詳細

全文を読む

ProofRun はオープンソースのコマンドラインツールで、テストとビルドチェック結果を正確なコード状態に暗号学的に紐付け、AI 支援開発における信頼問題を解決する。AI コーディングエージェントが「すべてのテストが成功した」と主張するとき、それは真実かもしれないが、以前の実行に基づいて推測したり、単に推測したりしているだけかもしれない。言葉だけからはその違いを判定する方法がない。ProofRun はその主張そのものを検証可能にすることでそのギャップを埋める:実際のコマンド(例:pytest)をサブプロセスで実行し、実際の終了コードを読み取り、その結果を現在のコードのフィンガープリントに紐付けて保存する。

フィンガープリントは重要なメカニズムである。すべての結果は git コミットハッシュと未コミット変更(ステージされているか否か、追跡されているか否かを問わず)すべての SHA-256 ハッシュに紐付けられる。1 バイトでも変更されれば(スペース、新しい行、何でも)、結果は自動的に STALE になる。ツールは proofrun status が呼び出されるたびにフィンガープリントを再計算し、保存されたレシートと比較する。これは開発者が「この PASS はまだカウントされるのか?」と質問することを記憶する必要がないことを意味する。システムが自動的に正しく答える。

ProofRun は 4 つのステータスをサポート:PASS(コマンドが成功)、FAIL(コマンドが失敗)、STALE(コード変更により結果が古くなった)、NOT RUN(チェックが実行されたことがない)。注目すべきことに、「おそらく大丈夫」や「成功したと思う」という 5 番目のステータスはない。各ステータスは観察された実行または文書化された欠落から生じる。ツールはどこでも LLM 呼び出しを行わない。AI で AI を検証しない。代わりに実際のサブプロセスを開始し、その終了コードを読み取る。それが全体の検証メカニズムである。完全にオフラインで、ネットワーク呼び出しやテレメトリがない。

設定は最小限である。ユーザーは .proofrun.yml ファイルを作成して、各チェックにコマンド(シェル文字列ではなく argv 配列として指定)と必須フラグを持つ名前付きチェックを宣言する。例えば、テストチェックは command: [pytest]と required: true を宣言し、ビルドチェックは command: [npm, run, build]を宣言するかもしれない。proofrun run test -- pytest が実行されると、ProofRun は pytest を実行し、結果を紐付ける。コード変更後に proofrun status が呼び出されると、ツールはフィンガープリントがもはや一致しないチェックに対して STALE を報告する。--strict フラグは、必須チェックが PASS でない場合、proofrun status をゼロ以外のコードで終了させ、プリコミットフックや CI ゲートとして使用可能にする。

ProofRun は Claude Code(AI エージェント)により人間の指示の下で構築され、最初のリリース前に複数ラウンドの独立した読み取り専用敵対的レビューを受けた。そのレビューは脆弱性を発見した:ProofRun のコマンド比較は誤引用されたシェル引数でだませられる可能性があり、チェックがゼロのテストを実行しながら PASS を報告できた。開発者は docs/case-study.md に完全な再現と正確な修正を文書化し、すべての修正は受け入れられる前に実際の再現に対して検証された。単にレビューされ、単なる尤もらしさでレビューされるのではなく。この審査は意図的である:AI エージェントに説明責任を持たせるために設計されたツールは、それ自体に適用される同じ基準に耐えることができなければ存在できない。

GitHub Action(yebiguo/proofrun@v1)がプルリクエスト用に利用可能である。正確な PR head コミットをチェックアウトし(合成マージプレビューを信頼しない)、PR ブランチに含まれるレシート.json をクリアし、チェックサム検証された ProofRun バイナリをダウンロードし、proofrun run-all を実際に実行し、proofrun status --strict でゲートされる。PR にチェックインされたレシートについては信頼されない。すべての結果は Action によって新鮮に生成される。既知の制限:.proofrun.yml がベースブランチと異なる場合、Action は警告を発行(ビルドアノテーション経由)するが、PR がチェックのコマンドを緩和する可能性があり、Action は忠実により弱いバージョンを実行するため、それをブロックしない。チームは他の変更と同様に .proofrun.yml diff をレビューすることが推奨される。

ロードマップには一般的なテストランナー(pytest、Jest、JUnit)の v0.3 での構造化出力サポート、署名された改ざん防止レシート(計画中だが未設計)、同じ PR 内で .proofrun.yml が弱められるのを防ぐための .proofrun.yml 自体の保護が含まれる。プロジェクトは MIT の下でライセンスされ、STALE 検出とレシートスキーマをその最も重要な保証として、意図的に狭い範囲の若い pre-1.0 ツールである。

背景と解説

ProofRun が対処するコア問題は、AI 支援開発における信頼ギャップである:コーディングエージェントが「すべてのテストが成功した」と言うとき、そのエージェントが実際に直前にテストを実行したのか、単に以前の実行に基づいて推測しているのか、または根拠のない推測をしているのかを判断する方法がない。これは開発者とレビュアーがその主張を自分でテストを再実行することなく検証する方法がないために重要であり、AI 生成コードに対する信頼を損なう摩擦ポイントである。

ProofRun のソリューションは意図的に狭い:エージェントをより正直にしたり、AI で AI を監査したりするのではなく、主張そのものを暗号学的紐付けを通じて検証可能にする。すべての結果は正確なコード状態(git コミットとすべての未コミット変更のハッシュ、追跡されているかどうかを問わず)に固定される。人間によってでも AI エージェントによってでも、任意のバイト変更の瞬間にステータスは自動的に STALE にフリップする。このため再検証を記憶する負担が取り除かれ、古い結果が成功としてマークされたままでいられることがなくなる。

ツールの設計は何を除外するかで注目に値する:LLM 呼び出しなし、ネットワークなし、テレメトリなし、テスト出力の意味の解析なし。サブプロセスを開始し、終了コードを読み取るだけである。この極端なシンプルさは強みである。推測や柔軟な判定の余地がない。4 つのステータス(PASS、FAIL、STALE、NOT RUN)は観察された実行または文書化された欠落から生じ、推測からは決して生じない。ProofRun 自体が Claude Code により構築され、リリース前に独立した敵対的レビューの対象となったという事実は信頼性を加える:開発者は脆弱性(誤引用されたシェル引数がコマンド比較をだませる可能性があった)を発見・修正し、すべての修正は単なるレビューではなく実際の再現に対して検証された。

よくある質問

ProofRun はどのようにテスト結果を検証するのか?
実際のサブプロセス(例:pytest)を開始して実際の終了コードを読み取り、その結果を現在のコード状態の暗号学的フィンガープリント(git コミットと未コミット変更の SHA-256 ハッシュ)に紐付ける。任意のバイトが変更されると、保存された結果は自動的に STALE になる。
ProofRun は AI による AI 主張の検証に AI を使用するのか?
いいえ。LLM 呼び出し、テスト出力の解析、コード品質の判定を意図的に行わない。実際のコマンドを実行して終了コードを読み取るだけ。推測は含まれない。
GitHub Actions で ProofRun を使用できるか?
可能。GitHub Action(yebiguo/proofrun@v1)が利用可能で、正確な PR head コミットで proofrun run-all を実行し、proofrun status --strict でゲートされる。PR ブランチに含まれるレシートはクリアされ、実行前にチェックサム検証されたバイナリがダウンロードされる。

「AIコーディング」の最新ニュースを、毎朝7時にお届けします

AIが要約して、あなたの選んだトピックだけを1日1通。LINE・Email・Slackで届きます。

登録無料・30秒で完了・いつでも解除できます

AIに質問

この記事についてわからないことをAIに質問できます。Q&Aはこのページに公開され、他の読者も読めます。

関連記事

次の記事へオープンウェイト型AIモデルが価格を圧迫も、クラウド大手は収益性維持

AIニュースの要点を毎朝1分で。

無料で登録