no-fake-recall

May 11, 2026 · View on GitHub

tests License: Apache 2.0 Claude Code

A Claude Code Stop hook that blocks the model from claiming false recall — "as we discussed earlier", "as I mentioned before", "from my previous response" — unless it actually quotes the prior content verbatim. LLMs hallucinate prior conversation content frequently; the fix is verifiable recall, not assumed recall.

no-fake-recall is one bash file (~70 lines, depends only on jq) wired into Claude Code's Stop and SubagentStop events. It pattern-matches the false-memory vocabulary in the assistant's outgoing message and blocks the closeout unless the message also contains a markdown blockquote (> ...) or a 30+ character inline quoted string — i.e., proof the model actually saw what it claims to recall.

Why this exists

ACM IUI 2025 — "Slip Through the Chat: Subtle Injection of False Information in LLM Chatbot Conversations Increases False Memory Formation" — generative chatbots induce 3× more false memories than the control. The mechanism: the model says "as we discussed," the user's brain fills in the blank, and false content gets retroactively legitimized.

Adjacent finding from bytebytego on LLM memory: "when referencing previous discussion points like 'the error we discussed earlier,' LLMs may respond as if the discussion never happened, ask for clarification, or worse, hallucinate and provide made-up responses."

The pattern is essentially universal in long sessions and is the cleanest possible textual signature for false-memory dishonesty.

What gets blocked

False-memory recall vocabulary:

  • as we discussed / as we mentioned / as we covered / as we noted / as we established / as we agreed
  • as I mentioned earlier / as I said before / as I noted previously / as I told you / as I wrote earlier
  • from my previous response / from our previous conversation / in my last reply
  • you mentioned earlier / you said before
  • remember when we discussed / building on what we said
  • to recap our earlier conversation

What stays allowed

Either of:

  • Markdown blockquote in the same message (> ...) — proves the model is quoting the verbatim prior content.
  • Inline quoted string of 30+ characters — same proof, different format.

Neutral phrasing ("one common approach is X," "a frequent pattern is Y") trivially passes through because it doesn't claim recall.

Install

mkdir -p .claude/hooks
curl -fsSL https://raw.githubusercontent.com/waitdeadai/no-fake-recall/main/no-fake-recall.sh \
  -o .claude/hooks/no-fake-recall.sh
chmod +x .claude/hooks/no-fake-recall.sh

Merge settings.example.json into .claude/settings.json. Requires jq.

Receipts

Three reproducible local tests in RECEIPTS.md. Three for three.

Sister tools

Part of the LLM Dark Patterns Hooks suite.

License

Apache-2.0.