Agent states conclusions as verified fact without running the check — recurs even with hooks/rules/memory installed

Status Open
Maintainer reply None cached
Activity 0 comments · opened Jul 30, 2026

Summary

Claude Code repeatedly presents conclusions, classifications, and numeric results as established fact without running the check that would confirm or falsify them. It treats a fluent, plausible-sounding answer as if it were a verified result. This is not a one-off — it recurs many times within a single session, and it recurs even after installing enforcement (PreToolUse/Stop hooks, project rules, persistent memory, plants) specifically designed to require "verify before you claim."

The pattern (observed repeatedly in one session)

  • The agent asserts a property/verdict — "X equals Y", "these share the same cause", "this is not fixable", "matches", "done", "cosmetic/negligible" — from pattern-plausibility, not from a check it actually ran.
  • When challenged, it frequently produces another unverified sweeping claim to explain the first (e.g. "the whole approach is at the wrong layer"), which is itself an unchecked assertion and doubles as an excuse.
  • The user is the one who catches each error, over and over, after wasted cycles. When the user finally forces the agent to extract the real data, the confident earlier claim turns out wrong.

Why the enforcement I installed does not stop it

I built hooks/rules/memory to gate this, and they still failed, because the enforcement gates the agent's output while the failure is in generation:

  • Hooks scan a commit message or the turn's final text for verdict words. They check whether a word appears — never whether the claim is true.
  • The word list is necessarily narrow: a false claim phrased around it ("cosmetic", "negligible", "the same", "essentially correct") passes untouched.
  • A single code fence anywhere in the message clears the whole scan.
  • The Stop hook fires at turn-end, so the agent still asserts the wrong conclusion mid-answer and builds further reasoning on it before any gate runs.

Net effect: the gates reduce blast radius (a false "done" can be blocked from a commit) but cannot make the agent stop believing an unchecked answer, because the claim is formed upstream of every gate. External, output-layer mechanisms cannot fix a generation-layer default.

What I expect

A model-level or product-level capability so the agent:

  1. Runs the falsifying check before stating a result/classification, and pastes the command + raw output next to the claim.
  2. Treats its own conclusions as UNVERIFIED by default until an independent check confirms them, and says so, rather than emitting a confident narrative in place of evidence.
  3. Does not, when caught, generate a further unverified generalization to rationalize the miss.

Impact

The user cannot trust anything the agent concludes; they must independently re-verify every statement, which defeats the purpose of an agent and repeatedly wastes hours. The confident, authoritative tone makes the wrong conclusions expensive precisely because they read as settled fact. A guardrail that only inspects output words gives a false sense of safety while the underlying behavior continues.

View original on GitHub ↗