// The guide
Your AI remembers what you said — and forgets what it did.
We filed a bug report upstream. A few days later we asked our assistant a simple question: "did Anthropic fix the bug we reported?" Its memory — semantic search over every conversation we had ever had with it — could not surface the filing. A one-line gh issue list --author answered instantly. The assistant had done the work and could not remember doing it.
That failure is not a fluke. It is structural, it applies to most AI memory systems being built right now, and it has a clean fix. Here is both, from our own logs, July 2026.
Why the memory missed it
Transcript-based memory indexes what was said. But the durable fact in that session — the issue number, the URL, the repo — was never said. It was born in a tool result: the output of the command that created the issue. Tool results scroll past as structured noise; nobody narrates them back into prose. So the one fact worth keeping never entered the record the memory searches.
Generalize it and the shape is everywhere: created issue URLs, PR numbers, published document ids, payment ids. The facts that most need to be recallable later are exactly the ones that appear only in tool output — the part of the session that transcript memory is worst at.
Words get remembered. Actions get forgotten. And your assistant's most valuable facts are born in actions.
The fix: journal actions at the moment they happen
The fix we shipped is deliberately boring — deterministic, not clever. A post-tool hook watches tool results as they come back. When it recognizes a significant action — an issue created, a PR opened, a release published — it extracts the identifier from the tool result and appends one line to a journal note:
date · action · repo · url · title
The journal is a plain note the memory system indexes like any other. That single property changes the guarantee: facts become recallable by construction. No model discipline required, no hoping the assistant thinks to write things down, no prose summary that might omit the URL. The hook fires, the line lands, the fact is findable.
Ask "did Anthropic fix the bug we reported?" now and the journal line carries the issue URL straight into recall — and the URL leads to the live answer.
The doctrine underneath
Three principles fall out of this, and they generalize past our stack:
- External systems remain the source of truth. GitHub knows the issue's real state; Stripe knows the payment's real state. Memory should never try to mirror that — mirrors go stale the moment they are made.
- Memory holds the pointer that routes there. The journal line does not store the bug's status. It stores enough to find it: the URL, the date, one line of context. Recall the pointer, follow it, get the current truth.
- Curation beats raw capture. A one-line curated fact outperforms a thousand lines of transcript. More capture is not better memory; better selection is better memory.
If you are building agent memory, the checklist is short: watch the tool results, not just the words; write pointers, not mirrors; and make the writing deterministic, because the facts that matter most are the ones nobody remembers to mention.
This one is not a side note for us — the action journal ships as part of Klyr, which gives Claude Code a persistent memory. Your assistant's conversations are searchable, and so is what it actually did: every issue, PR and document it touched, one pointer per action, recallable months later.
On the words side of memory, see the auto-compact threshold post — compaction is where transcript memory goes to die.
FAQ
Why can't my AI assistant remember things it did, only things we discussed?
Because transcript-based memory indexes prose, and facts created by actions — issue URLs, PR numbers, document ids — appear only in tool results that never get narrated back as prose. The fact is born outside the record the memory searches.
What is the action-journal pattern?
A deterministic post-tool hook that recognizes significant actions in tool results (issue created, PR opened, release published), extracts the identifier, and appends one pointer line — date, action, repo, url, title — to a note the memory system indexes. Facts become recallable by construction.
Why store pointers instead of the facts themselves?
Because external systems are the source of truth and mirrors go stale. The journal stores enough to find the live record — the URL and one line of context — so recall routes you to the current state instead of a snapshot.
Is more captured conversation better memory?
No. Curation beats raw capture: a one-line curated fact outperforms a thousand lines of transcript. The goal is selection, not volume.
Does this require a smarter model?
No — that is the point. The journal is written by a deterministic hook, not by the model deciding to take notes. It works even when the model never thinks to mention what it did.