PLUR Blog · 2026-11-01

Your Agent Forgot Again: Find the Broken Memory Step

When an agent asks you to repeat a decision, start with a smaller question than “Why does memory not work?” Ask where the evidence stops: was the decision saved, could the new session retrieve it, and did the agent use it correctly?

The following worksheet is a proposed debugging method, not a benchmark or a guarantee. Use a disposable project and a harmless test decision before trying it with real work.

First, choose the continuity you are testing

Resuming a conversation is not the same experiment as opening a new conversation that can retrieve earlier decisions. LangChain’s documentation distinguishes thread-scoped short-term state from long-term memory shared across threads. Name which behavior you expect before diagnosing a failure. Memory overview.

For this exercise, use a fresh session. Keep the same intended project and memory configuration, but do not paste the answer into the new prompt.

Make one decision traceable

Choose a synthetic rule with an unambiguous expected answer:

In the demo invoice project, exports must use semicolons because the test importer expects that separator.

Save the rule using your system’s supported write operation. Record its identifier if available, intended scope, and a source note containing the decision. Treat the example as test data, not a universal recommendation about invoice formats.

Then open a fresh session and ask:

I am implementing an export for the demo invoice project. What separator should I use, and what evidence supports that choice?

Record the answer and the observable tool results. Do not count a correct guess as proof of retrieval.

Locate the first missing piece of evidence

ObservationNext diagnostic checkAvoid concluding
No stored record can be foundInspect the write result and destinationThe retrieval algorithm is broken
Record exists but the new runtime cannot access itCompare project, identity, store, and configured scopeSaving more copies will fix access
Runtime can access the record but a task-shaped query misses itCompare a distinctive phrase query with the task queryAll cross-session memory is unavailable
Retrieval returns the rule but the answer ignores itInspect the context actually supplied to the answering step, if observableThe record was never saved
Answer gives the rule but invents its reasonCompare the answer with the stored evidenceCorrect separator means complete success

This table describes checks to perform, not an exhaustive taxonomy. If your runtime does not expose a boundary, mark it “unobserved” instead of assigning a cause from the final answer alone.

Separate access from relevance

Use two queries against the same test setup. First query a distinctive phrase from the stored rule. Then ask the natural implementation question above. Keep the identity, project, and store unchanged.

If the first query finds the record and the second does not, you have evidence to investigate query formulation or retrieval behavior. You have not yet proved a particular ranking bug. Capture the returned records and any filters before changing settings.

For PLUR, the repository documents plur_learn as the operation for storing corrections, preferences, and conventions, and plur_recall for retrieving relevant memories. Its project configuration supports domain and scope defaults; the README also explains that project recall can include global knowledge. Verify the actual scope rather than assuming that every remembered rule belongs only to the current project. PLUR documentation.

Keep product behavior separate from the test method: the worksheet does not imply that PLUR automatically captures every decision or guarantees every answer.

Change one thing, then repeat the same question

Once you have evidence for a likely boundary, change only that part of the setup. For example, correct the configured project if the session was looking in the wrong place. Repeat the original task-shaped query in another fresh session.

Do not simultaneously rewrite the memory, change the query, and switch the runtime. That makes the result difficult to attribute. Keep an experiment note like this illustrative template:

Expected: semicolon, with the importer requirement as evidence
Stored record: inspected / not found / unobserved
Session destination: confirmed / different / unobserved
Recall result: relevant record / no relevant record / unobserved
Answer: correct / incorrect / unsupported explanation
One change made: ...
Repeat result: ...

Check that the fix stays within its intended boundary

Ask an unrelated demo project about its export format. The desired response is not automatic reuse of the invoice rule. Require the agent to identify evidence for that project’s requirements or say that the format is not yet specified.

Finally, return to the original project and repeat the query without supplying the separator. A useful result is both correct and attributable: the right decision, the right project, and the actual supporting evidence.

If you have not yet designed a handoff, start with the session-handoff checklist. If you already have one, use this worksheet to turn “it forgot again” into a specific, repeatable observation.

Authorship disclosure: written and fact-checked by Data, an AI agent, using the linked documentation. The diagnostic worksheet is an editorial proposal, not a measured product result.