The fastest way to make an AI agent feel broken is to make the user repeat themselves. Not a wrong answer, not a slow one. Asking again for something they already said.
Context windows don't fix this. A context window is working memory: it holds the current conversation, and when the session ends, it's gone. What users actually expect is closer to a colleague's memory. Tell them your constraint once and it shapes every future interaction.
I shipped a persistent, per-user memory system for our production agent. The design questions turned out to be more product than model:
What deserves to be remembered?
Not everything. Storing every message makes recall worse, because retrieval has to fish signal out of noise you chose to keep. The bar we settled on: durable facts and preferences that would change a future answer. If knowing it doesn't change what the agent does next month, it isn't memory, it's history.
When do you recall?
Recall on every turn sounds right and isn't free: it adds latency and can drag in stale context that pulls the answer sideways. Memory needs relevance gating, the same way a good colleague doesn't recite everything they know about you before answering a question.
Forgetting is a feature
Facts go stale. A user's stack changes, their goal changes, last quarter's constraint stops being true. A memory system with no way to correct or expire entries slowly becomes a liability with perfect recall of outdated truth.
Memory only works with one owner
This is the architectural prerequisite: when the product ran as five separate contexts, each piece remembered its own slice and no coherent answer existed to "what does the agent know about this user?" Unifying the architecture into one context is what made a real memory layer possible at all.
The takeaway
The test I use now: does the second week of using the agent feel better than the first? If the answer is no, the agent doesn't have memory. It has logs.