no-fake-recall
May 11, 2026 · View on GitHub
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.
- no-vibes, time-anchor, no-curfew, no-sycophancy, no-cliffhanger, honest-eta
- no-fake-stats, no-fake-cite (sister fact-fabrication hooks)
- minmaxing — parent harness
License
Apache-2.0.