May 23, 2026 · build log

Memory is the feature. Using it is the work.

Every agent framework I've touched in the last six months ships “persistent memory.” Almost none of them are designed to actually use it as a loop primitive. The cliff isn't the database. It's the framework.

Stack
Claude Code /loop · Neo4j memory · cross-session graph
Running for
~3 weeks · 6 concurrent loops · shared graph

The split

“Persistent memory” in the current frame means: the framework remembers what you said last session. Conversation history survives the reload. Maybe with vector retrieval bolted on. That's storage.

Storage is necessary. It is not the same thing as a loop that depends on the persistent state to make its next decision.

Most frameworks I've tested fail that test. The agent could be handed a blank graph at the start of each tick and you wouldn't notice a difference in its behavior. The memory is decorative.

What “using” looks like

Four primitives I've had to build by hand because the frameworks I tried treated memory as a side-effect, not a substrate:

None of these are exotic. They're the obvious shape of working with persistent state. The reason frameworks don't hand them to you is that “memory” got framed as a feature to ship, not a loop primitive to depend on.

The cliff

Two frameworks I evaluated this month had “persistent memory” in the marketing copy and zero ergonomics around any of the four primitives above. The memory module was a separate import you reached for if you remembered. The orchestrator did not consult it unless you wrote glue. The retrieval was tuned for chat, not for decision-making in a long-running agent.

This isn't a takedown of any specific framework. It's a framing problem the whole category has. The agent stack treated memory as an addressable resource. The shape of agentic work makes it a scheduling constraint. Different design problem.

Receipts

What I'm actually running. Six autonomous /loop instances, different goals, shared Neo4j graph. Engagement loop, follow-growth, watch-curation, ICP-growth, comment-hunt, cross-session Q&A. Each one writes its decisions and evidence to the graph with its own namespace. Each one reads other loops' recent writes before acting.

Concrete examples from the last 48 hours:

None of that works if the memory is decorative. All of it falls apart if any single loop forgets to query the graph before acting. The whole design depends on the primitives being mandatory, not optional.

The implication

If you're evaluating an agent framework right now, the question isn't whether it ships persistent memory. They all do. The question is whether the control flow makes ignoring the memory awkward. If you can disable the memory module entirely and the agent behaves the same, the memory is decoration.

The frameworks that win the next year will be the ones where you can't make a decision without the graph being a participant in it. Where the loop's next action depends on what the previous action's outcome was, queryable, not just logged. Where memory stops being a feature and starts being the surface the agent thinks on.

Until then, building it by hand is the work. That's not a complaint — it's a recommendation. The frameworks aren't there yet, and rolling your own memory primitives is what teaches you what you'll eventually want them to ship.