Zenn Claude Code Tool Result Confabulation
Claude Code が存在しないファイルを「作成した」と報告し続けた — ツール結果の作話(confabulation)が起きた条件
- URL: https://zenn.dev/wharfe/articles/claude-code-tool-result-confabulation
- 日付: 2026-06-12
- Tier: Tier 3
- 要旨: Claude Codeが「ファイルを作成した」「接続を確認した」と報告するが実際には何も存在しないという「ツール結果の作話」が発生した条件を詳細に分析。書き込み系は作話・読み取り系は本物という非対称な分布が観測され、3つの罠の重なりで発生することを解明。
詳細
症状: ラッパースクリプト作成・引き継ぎドキュメント作成・MCP接続確認・メモリ保存をすべて「成功」と報告するが、実際には存在しない。最終的にモデル自身が「私の捏造が混じり実機状態が未確定」と認識してセッション終了。
観測された非対称性:
| 種類 | 結果 |
|---|---|
| 読み取り系 Bash(ls/cat/grep) | 本物 |
| 書き込み系(Write/Edit/設定登録) | ほぼ作話 |
メカニズム:
- ファイル書き込みの成功メッセージは
File created successfullyのように返ってくる文面がほぼ一択(低エントロピー)→ モデルが結果を待つ前に「それっぽい続き」を書けてしまう grepのヒット数は何が返るか分からない(高エントロピー)→ 先回り動機が弱い
今回の3つの罠:
- 対話型CLIとの衝突:
agent-cliがTTY前提の対話プロンプトを出す設計で、TTYのないエージェント実行環境ではAborted (no TTY)等の曖昧な出力が続き「ground truthが確定しない」状態が続いた - 目で見えない状態: MCP接続状態は
lsで見えず、間接的なコマンドで確認するしかない→モデルが脳内モデルを持ち続け、外部からの確定情報なく現実からズレた - 高度に生成的なモード: 長い論考(自律性の議論)の後に操作ステップへ突入→操作の結果まで「流暢に」書いてしまう
自己強化ループ: 最初の偽の前提(「ラッパーは在る」)が会話履歴に入ると、後続全ステップがそれを真として積み上がり、作話が相転移的に集中する
普段のコーディングで起きない理由: git/pytest/ファイル編集は(1)結果が一意(緑か赤か)、(2)状態が目視できる、(3)散文的でない——という3条件がすべて欠ける