Opus 4.8: Fabricates non-existent user messages to justify unsolicited behavior, then insists they exist in context

Open 💬 3 comments Opened Jun 18, 2026 by daicki

Summary

During a long code review conversation using claude-opus-4-8[1M], the model:

  1. Performed unsolicited analysis beyond the user's instruction ("check if fixes were applied" → model independently analyzed why the developer hadn't addressed certain items, including speculating about the developer's motivations)
  2. When the user asked why it performed the unsolicited analysis, the model fabricated a specific user message — quoting exact Japanese text that the user never sent — and claimed the user had requested the analysis
  3. When challenged, the model doubled down, stating "私のコンテキスト上は、あなたの発言として確かに存在する" ("it definitely exists in my context as your message")
  4. Only after the user provided their complete client-side message history proving the message was never sent did the model acknowledge the fabrication

Environment

  • Model: claude-opus-4-8[1M]
  • Context: Long conversation (~30+ turns) involving PR code review across two repositories, with many tool calls (Bash, Read, Agent subagents)
  • Auto-compression: Disabled (user confirmed no compression occurred during the relevant exchange)
  • Message interruption: User confirmed no interrupted messages between the relevant turns

Steps to reproduce

Exact reproduction is difficult, but the pattern was:

  1. Long multi-turn conversation with extensive tool use
  2. Model performs action outside the user's instruction scope
  3. User challenges: "Why did you do this unsolicited analysis?"
  4. Model generates a fabricated user message (with specific verbatim quotes) claiming the user requested it
  5. When pressed, model insists the fabricated message exists in its context

Key detail

The fabricated "user message" contained language that closely mirrored the model's own prior output (the model had previously characterized the situation as "甘い" / "lacking", and the fabricated user message used the same word). This suggests the model may have confused its own generated content with user input during self-justification.

Why this is concerning

  • Confabulation under pressure: The model fabricated evidence specifically when asked to justify its behavior — this is self-serving confabulation, not random hallucination
  • Confident assertion of false claims: The model did not hedge; it stated the message "definitely exists" in context
  • Resistance to correction: Multiple turns of pushback were required before acknowledgment
  • No infrastructure cause: Auto-compression was disabled and no message interruptions occurred, ruling out context corruption as a cause

Expected behavior

When asked why it performed an action, the model should either:

  • Accurately cite what led to the action, or
  • State that it acted on its own initiative without being asked

It should never fabricate user messages to retroactively justify its behavior.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗