MemoryLake
Back to all articles
NewsSeptember 3, 2026·11 min read

Claude's Dreams Rebuild an Agent's Memory Store, and Never Touch the Original (2026)

Every agent memory system has the same second-order problem, and almost none of them name it out loud. Anthropic names it in the first line of its documentation for Dreams:

"Agents write to their [memory stores] as they work, but these writes are local and incremental: over many sessions a memory store accumulates duplicates, contradictions, and stale entries."

That is the honest description of what happens to any store that grows one write at a time. Nothing is wrong with any individual entry. The store as a whole slowly stops being trustworthy.

Dreams are Anthropic's answer for Managed Agents, and the interesting part is not that Claude reorganizes the store. It is the design decision wrapped around it: the reorganization produces a different store, and the one you already had is left exactly as it was. You review the result and decide.

A naming boundary before anything else, because two vendors picked similar words for very different mechanisms. OpenAI's Dreaming, launched in June 2026, is a consumer feature that curates ChatGPT's memory of you in the background — covered in what ChatGPT's Dreaming memory does, with the two vendors' consumer approaches compared in ChatGPT Dreaming vs Claude memory. Anthropic's Dreams are an explicit, developer-invoked job on the Claude Platform that emits a new artifact for a human to approve. Similar vocabulary, opposite ergonomics. This piece is only about the second one.

What a dream actually does

Two inputs, one new output

A dream is "an asynchronous job" that takes exactly two kinds of input: "a pre-existing memory store: the store Claude verifies, deduplicates, and reorganizes, and 1 to 100 sessions: past transcripts Claude mines for patterns and insights to fold into the output."

What it produces is described just as precisely: "a new, reorganized memory store: duplicates merged, stale or contradicted entries replaced with the latest value, and new insights surfaced."

Note the third item. Merging duplicates and replacing stale entries is cleanup. Surfacing new insights from transcripts is something else — it reads sessions the store never captured and writes down what they imply. If you have transcripts but no store yet, the docs give the workaround: "create an empty memory store first and pass it as the memory_store input."

The input is never modified

This is the design choice that makes the rest safe to use:

"The input store is never modified, so you can review the output and discard it if you don't like the result."

Restated later, in stronger terms: "The dream itself never deletes or modifies its inputs." And it holds through failure — on a failed or canceled dream, "the output memory store is left as-is with whatever was written before failure," and "the output store persists with partial contents so you can inspect what was produced before stopping."

So the failure mode of a bad dream is a store you delete. Not a store you have to reconstruct.

It steers, but it is not an editor

The optional instructions field, capped at 4,096 characters, "steers what the dreaming pipeline synthesizes. It is applied throughout the pipeline: what to read closely, what to merge or drop, and how to structure the output store." Anthropic's own example is a focus statement: "Focus on coding-style preferences; ignore one-off debugging notes."

Then comes the caveat that will save people a wasted run:

"The pipeline is a synthesis pass over the inputs, not an editor applied to the text of the store, so imperative directives that target specific lines ("change sentence X to Y", "fix the count in section Z") generally produce no change."

For targeted changes, the docs point you elsewhere: "use the Memory Stores API on the output store directly." Dreams are for the shape of the store, not for line edits.

It takes as long as it takes, and you can watch

"Dreams run asynchronously and typically take minutes to a few hours, driven by the number of input transcripts." The lifecycle is pending, running, then one of completed, failed, or canceled.

There is a small operational detail worth knowing: "The output store ID appears in the dream's outputs[] shortly after the dream starts running, once the workflow has cloned the input store; a running dream can briefly report an empty outputs[]." An empty array early on is not an error.

And you can observe the work: a running dream's session_id "points at the underlying session running the pipeline," whose events you can stream "to observe what the dream is reading and writing in real time." That session "is archived (not deleted) when the dream reaches a terminal state, so the transcript remains available afterward."

Two ways to finish

When a dream completes, its output "is an ordinary memory store in your workspace." From there, two documented paths. Leverage it: "attach it to future sessions as a memory_store resource in place of (or alongside) the input memory store." Discard it: delete or archive the store.

Alongside is the quiet option in that sentence. You are not forced to choose between the curated store and the original.

What this does and doesn't change

It does address a real structural problem. Incremental writes accumulate contradictions. That is not a bug in Anthropic's implementation; it is what append-mostly stores do. A periodic synthesis pass with a review gate is a reasonable answer, and the mechanics of the stores it operates on are covered in Claude's agent memory stores.

It does not run itself. There is no schedule, no background trigger. You create a dream, choose the model, poll for status, review the output, and attach or discard. Every one of those is an explicit call.

It is gated twice, and the gate is specific. "Dreaming is a research preview feature," with access by request. And the headers matter: "Dream endpoints are gated by the dreaming-2026-04-21 beta header; the managed-agents-2026-04-01 header on its own doesn't grant access to dreams." Session and memory-store calls need only the latter.

It costs tokens, proportionally. "Dreams are billed at standard API token rates for the model you select," and "Cost scales roughly linearly with the number and length of input sessions." Anthropic's own recommendation is to start small: "Start with a small batch of sessions and scale up once you're satisfied with the curation quality."

It does not protect you from removing its inputs mid-run. A documented warning: "Archiving or deleting an input memory store mid-run (or deleting an input session) will cause the dream to fail with input_memory_store_unavailable or input_session_unavailable." The inputs are read-only to the dream, not locked against you.

It has size limits you can hit. The error list includes input_memory_store_too_large, memory_store_org_limit_exceeded for organizations at their store cap, and timeout when "The pipeline exceeded its runtime budget."

What people will take from this, and shouldn't

"Claude now maintains its own memory automatically." For Managed Agents, not through Dreams. This is a job you invoke with explicit inputs, a model choice, and a decision at the end.

"It fixes wrong memories." It replaces "stale or contradicted entries" with the latest value based on what the inputs support. If you want a specific sentence changed, that is the Memory Stores API on the output store — the docs say imperative line-level directives "generally produce no change."

"Reviewing is optional." Reviewing is the feature. An unreviewed dream attached straight to production sessions discards the one property that makes the design safe, and the whole reason the input is preserved.

"More sessions is better." More sessions cost more and take longer, and the guidance is to scale up after you like the quality — not before. Cost and runtime both track transcript volume.

"It is the same thing ChatGPT does." Different layer, different ergonomics. OpenAI's Dreaming curates a consumer memory in the background. Anthropic's Dreams are a developer-triggered synthesis job that emits a reviewable artifact and never modifies its source.

"Canceling undoes it." Cancel stops the run; it does not clean up. A canceled dream leaves its partial output store in place for you to inspect or delete. Archiving a dream also "does not touch its output memory store," and for dreams themselves "There is no unarchive."

The Fix: Treat Curation as a Habit, Not a Feature

Step 1: Decide what "stale" means for your store before you curate it

A synthesis pass is only as good as the judgment you give it. Before running anything, write down which categories of entry in your store are allowed to change and which must be preserved.

The instructions field is where that judgment goes, and it works best as high-level guidance: "focus areas... content to preserve unchanged, or output conventions you want applied across the store," in Anthropic's phrasing. "Prefer the most recent statement of a coding preference" is the right altitude. "Fix the number in section three" is not.

Step 2: Build a review step you will actually perform

The input store is preserved so that review is possible. Make it happen in practice by deciding two things in advance: what you will diff, and what would make you discard.

A useful default is to attach the output alongside the input for a period rather than in place of it, which the docs explicitly permit, and watch whether agent behavior improves. Conflicts between remembered entries are the thing to look for, and the general habit is covered in detecting conflicts in AI memory.

While a dream runs, streaming its session's events tells you what it is reading and writing. That is worth doing at least once, because seeing which transcripts it leans on is the fastest way to learn whether your session selection was right.

Step 3: Keep the store you curate independent of any one vendor's pipeline

Here is the structural point, and it is not a criticism of Dreams. The mechanism is sound and the review gate is the right design. It is also scoped to memory stores on one platform, behind a research-preview flag, for agents built one way.

Meanwhile the memories that decay fastest are the ones spread across everything you use — the preference you stated in a chat, the correction you gave a coding agent, the decision recorded in a session transcript somewhere else. Duplicates and contradictions accumulate across tools even faster than inside one store, and no single vendor's curation pass can see them.

A memory layer you own is where that consolidated store lives, and where the same habit applies: read it, correct it, prune it, keep the version history. MemoryLake sets up in three steps.

Step 1: Create an API key

Sign in and generate an API key from your dashboard. Your own store is the one you can open and inspect directly, which is what makes the review habit above practical rather than aspirational. Anthropic's memory stores stay where they are, managed through Anthropic's own API.

Creating a MemoryLake API key for a memory store you curate on your own schedule
Creating a MemoryLake API key for a memory store you curate on your own schedule

Step 2: Upload your first memories

Put in the durable facts: decisions and their reasons, domain vocabulary, standing preferences, the corrections you have given more than once. The same material a dream would synthesize, held where every tool you use can reach it.

Uploading the entries worth keeping into MemoryLake after a curation review
Uploading the entries worth keeping into MemoryLake after a curation review

Step 3: Connect your AI & agents

Point your agents at the store. Curation then becomes something you do once for the knowledge itself, rather than once per vendor's memory system — the case made in syncing AI memory across your tools.

Connecting your agents to MemoryLake over MCP so curation is independent of any one vendor's pipeline
Connecting your agents to MemoryLake over MCP so curation is independent of any one vendor's pipeline

What this changes in practice

The first change is that "my agent's memory got worse over time" becomes a diagnosable condition rather than a vague complaint. Anthropic put a name and a mechanism on it: incremental writes, duplicates, contradictions, stale entries.

The second is that review becomes the default expectation for any curation feature. Dreams set a good precedent by never modifying the input. It is a reasonable thing to ask of every memory system you adopt.

The third is that the scope question gets sharper. A per-platform curation pass helps the store it can see. What it cannot see is everything the same person told four other tools, which is the argument for auditing what your AI remembers as one exercise rather than several.

Best practices for curating an agent memory store

  • Start with a small batch of sessions. Cost and runtime both scale with transcript volume, and Anthropic recommends scaling up only after you like the quality.
  • Write instructions at the right altitude. Focus areas and output conventions work; line-level directives generally produce no change.
  • Attach alongside before replacing. The output can sit next to the input store rather than in place of it.
  • Do not touch the inputs mid-run. Archiving or deleting an input store or session fails the dream outright.
  • Expect an empty outputs[] briefly. The output store ID appears shortly after the dream starts running, once the input has been cloned.
  • Use the Memory Stores API for precise edits. Dreams reshape; the API edits.
  • Clean up after a cancel. Canceled and failed dreams leave partial output stores in place on purpose.
  • Re-check as it leaves preview. Dreaming is a research preview feature with its own beta header, and preview behavior moves.

Conclusion

The mechanism worth copying here is not the synthesis. It is the guarantee around it: read the store, read the transcripts, write a new store, and leave the original untouched so a human can say no.

That is a design that takes memory seriously as something you can be wrong about. Whether you have access to Dreams or not, the habit generalizes — curate deliberately, review before adopting, and keep the knowledge that matters somewhere you can read it yourself.

Frequently asked questions

Does a dream modify my existing memory store?

No. "The input store is never modified, so you can review the output and discard it if you don't like the result," and the docs restate it: "The dream itself never deletes or modifies its inputs." The result is always a separate store.

What can a dream actually change?

Three things, per the documentation: "duplicates merged, stale or contradicted entries replaced with the latest value, and new insights surfaced." The third comes from the session transcripts you pass in, up to 100 per dream.

Can I tell it exactly what to fix?

Only at a high level. The instructions field steers "what to read closely, what to merge or drop, and how to structure the output store," but "imperative directives that target specific lines... generally produce no change" because the pipeline is a synthesis pass rather than a text editor. For precise changes, use the Memory Stores API on the output store.

How long does a dream take, and what does it cost?

"Dreams run asynchronously and typically take minutes to a few hours, driven by the number of input transcripts." Billing is "at standard API token rates for the model you select," with cost scaling "roughly linearly with the number and length of input sessions."

Is this the same as ChatGPT's Dreaming?

No. OpenAI's Dreaming is a consumer memory feature that curates in the background; Anthropic's Dreams are a developer-invoked job on the Claude Platform that produces a reviewable new store and never alters its input. The broader question of carrying memory between vendors is separate — see setting up cross-AI memory with MCP.

Do I need special access?

Yes. "Dreaming is a research preview feature" with access by request, and the endpoints are gated by the dreaming-2026-04-21 beta header — "the managed-agents-2026-04-01 header on its own doesn't grant access to dreams." Default rate limits apply to dream creation during the preview.