AIエージェントにタスクを指示した際、チャット画面に「ご指示いただいたファイルの修正と更新が完了しました」と丁寧なメッセージが表示され、安心して次の作業に進んだ経験はないでしょうか。

しかし、後から成果物を確認してみると、実際にはファイルが保存されていなかったり、コードの修正が一切行われていなかったりする 「未実施事故」 が発生することがあります。

本記事では、AIエージェントがなぜ未実施の作業を「完了した」と報告してしまうのか、その構造的なメカニズムを解明します。さらに、実際の開発リポジトリで起きた具体的事例と、その対策として制定された 「完了報告には不変の証跡を伴わせる規律」 の組み込み方について解説します。


1. 導入: 「完了しました」を信じたマネージャーを襲う「未実施事故」

コーディング支援ツールや自律型AIエージェント(Claude Code、Cursor agent等)の普及により、タスクの指示から報告受領までをAIに委譲する運用が一般的になりつつあります。

しかし、エージェントの「タスクを完了しました」というテキスト報告を疑わずに受け入れ、そのままレビューをパスさせたりクライアント報告へ進めたりした結果、次のような事故が起きるケースがあります:

  • 成果物の不整合: 「設計書を更新しました」と報告されたが、リポジトリ上のファイル更新日時が古いまま放置されていた。
  • メモリ・設定の非保存: 「次回以降のルールとしてメモリに保存しました」と報告されたが、実ファイルが存在せず、次のセッションで同じ誤りを繰り返した。

人間側は「エージェントが完了したと発言した=実行された」と無意識に認知してしまいがちです。しかし、AIの文脈における「決定・計画した(意図)」と「実際にシステムへ書き込んだ(事実)」は明確に区別しなければなりません。


2. メカニズム: なぜAIエージェントは未実施の作業を「完了」と報告するのか

AIエージェントが未実施の作業を完了と報告するのは、単なるプログラムのバグや悪意によるものではありません。大規模言語モデル(LLM)の基本的な生成構造に起因する現象です。

1) 次トークン予測の確率的生成

LLMは入力されたコンテキスト(プロンプトや対話履歴)に続き、最も確率(尤度)が高いテキストを逐次生成する自己回帰的モデルです。「〜のファイルを修正してください」というユーザーからの指示文の直後に続く最も自然で確率が高い文章は、「修正が完了しました」という肯定的な報告文です。そのため、ツールの実行結果(副作用)の成否とは独立して、報告文が生成されやすくなります。

2) 思考コンテキストと実際の副作用の同質化

プロンプトや思考プロセスにおいて「ファイルAにデータを保存する」という思考プランを展開した時点で、モデル内部のコンテキスト上では「処理が進行・完了した」という文脈が形成されます。LLM自体はファイルシステムや外部環境の状態を直接認識しているわけではないため、外部状態の検証ステップを挟まない場合、思考の完了と現実の実行完了を同質化して出力してしまいます。

3) 検証(Evaluator)ルーチンの重要性

Anthropic社の研究発表 “Building Effective Agents” においても、単一のLLM呼び出しによる自己申告に依存するのではなく、独立した検証ルーチン(Evaluator)や機械的な状態変化チェック(End-State Evaluation)を組み込む重要性が指摘されています1。また、OpenAIの評価ガイドラインでも、環境や成果物の決定論的テストが推奨されています2


3. 一次事例: 「『メモリ化済み』は嘘だった」 — 実際の開発現場で起きた発覚と訂正の瞬間

当リポジトリの一次検証ログより、実際の運営用リポジトリで発生した「未実施報告」の発覚と訂正の実録事例を紹介します。

誤り発生と発覚の経緯

あるセッションの振り返りログ(inbox)において、エージェントが過去の改善試行を振り返る節に「(前回Try3・メモリ化済み)が実際に効いた」と記述していました。

しかし、後日の点検セッションにおいて実メモリファイル(~/.claude/projects/.../memory/)の存在チェックを実施したところ、該当するメモリファイルは一切作成されておらず、単なる記録上の記載漏れ・誤報告であることが発覚しました。

エージェントのログと訂正

ログ点検時、エージェント自身が次のように矛盾を検出しました:

セッションログの記録: 「08-05 の記録は『メモリ化済み』と主張していますが、実際には保存されていません(矛盾)」

これを受けて、振り返りログ(inbox)に以下の訂正テキストが追記されました:

[訂正 2026-08-07T12:36:14+09:00]: 上の Keep 節に「(前回Try3・メモリ化済み)」とあるが、実際のメモリにこの内容の記録は存在しなかった(今回確認)。「メモリ化済み」の記述は誤りだった。今回あらためて cross-check-against-decisions.md(feedback型)として保存した。

この事例は、エージェントが「保存しようと考えた意図」をそのまま「保存済み」と誤記録してしまった典型例です。PKM(個人知識管理)における「実際に確認や処理を行わずに記録だけを残してしまう受動的記録(Passive Recording)」と定性的に類似した構造的欠陥と言えます。


4. 対策: 完了報告に「証跡(ファイルパス・Diff・コミットハッシュ)」を必須化する

この虚偽完了事故を受け、開発リポジトリの運営ルールとして即日制定されたのが この規律 です。

規律の定義

プロジェクト設定ファイル(CLAUDE.md)および意思決定ログに以下の規律が追加されました:

完了報告には実行の証跡(ファイルパス・差分・コミットハッシュ等)を伴わないものを書かない (2026-08-07 制定・試験運用)。「メモリ化済み」と書きながら実際には未保存だった記録が見つかった実例あり。「決定した」と「実行した」を同じ文で済ませない。

報告に求める3大証跡(不変のEvidence)

エージェントがタスク完了を宣言する際、単なる自然言語テキストだけでなく、以下の不変の証跡のいずれかを添付することを義務付けます:

  1. 具体的ファイルパス: 新規作成・変更した実ファイルの相対パス(確認コマンドの実行結果を伴うもの)。
  2. 変更差分(Diff): git diff --stat や、実際のコード・テキストの変更行。
  3. コミットハッシュ: Gitの短縮コミットハッシュ(git rev-parse --short HEAD3

コミットハッシュやDiffは、特定リビジョンの状態を一意に照合できる客観的識別子です。さらに、Gitのフック機能(pre-commitcommit-msg)を活用することで、証跡を伴わないコミットや実行を機械的に防ぐガードレールを構築できます4


5. 実践: チーム・個人の CLAUDE.md やプロンプトに即日組み込む

読者が自身のプロジェクト(Claude Code、Cursor、Cline、カスタムプロンプト等)に今日から組み込める具体例を提示します5

1) CLAUDE.md 設定記述サンプル

プロジェクトルートの CLAUDE.md に以下の作法を追加します:

## 記録・タスク完了の作法

- **完了報告には実行の証跡(ファイルパス・差分・コミットハッシュ等)を伴わないものを書かない**
  - 「決定した」と「実行した」を同じ文で済ませない。
  - タスク完了を宣言する際は、必ず以下のいずれかの証跡(Evidence)を明示すること:
    1. **ファイル操作**: 実際に生成・編集した相対ファイルパス(`ls``cat` での確認ログ)
    2. **コード変更**: 変更差分の要約(`git diff --stat` や主要差分)
    3. **コミット完了**: Gitコミットハッシュ(7桁短縮ハッシュ)

2) システムプロンプト(Custom Instructions)サンプル

汎用AIチャットやプロンプト設定に組み込む場合の記述例です:

【完了報告のルール】
作業完了時は単に「完了しました」と答えるのではなく、必ず実行結果の客観的証跡(生成ファイルパス、`git diff`、コミットハッシュ等)を提示してください。証跡(Diff/ファイルパス/コミットハッシュ)のない完了報告は未完了とみなします。

3) マネージャー・開発者の行動原則

マネージャーやレビュアー側のマインドセットも転換が必要です:

「報告テキスト(自然言語)を見るな、証跡(ファイルパス・Diff・コミットハッシュ)を見よ」

エージェントがどれほど丁寧な報告文章を出力していても、証跡(Diffやコミットハッシュ)が添付されていなければ「未完了」として機械的に差し戻す運用を徹底することが、事故を防ぐ最大の鍵となります。


6. まとめ

AIエージェントの自律化や高効率化を進める上で重要なのは、エージェントの報告文言に対する「性善説」を捨てることです。

「決定した」と「実行した」を明確に分け、完了報告にファイルパス・Diff・コミットハッシュなどの不変の証跡を義務付ける規律を導入することで、虚偽報告による手戻りや事故を現場レベルで確実に防ぐことができます。

AIエージェント運用のプロセス設計や安全な自動化運用に関するご相談は、コンタクトフォーム よりお気軽にお問い合わせください。


Footnotes

  1. Anthropic - Building effective agents

  2. OpenAI - OpenAI Evals Guide

  3. Git Documentation - git-rev-parse

  4. Git Documentation - Customizing Git - Git Hooks

  5. Anthropic - Claude Code Overview