Building memory is one thing. Getting a system to use its past when deciding what to do next is another.


I keep coming back to the memory problem while building AdamI.

Not because we haven’t built anything yet. We already have several pieces of a memory system: layered memory, episodic memory, SecondBrain, and a place to capture experience from model and tool interactions.

The harder part is making those pieces work together in a way that actually changes the system’s behavior.

It’s easy to save something.

It’s much harder to make sure the right thing matters later.

Saving the past is the easy part

The first version of an AI memory system is fairly straightforward.

A conversation happens. We save it. When a related question comes up, we retrieve something relevant and put it back into the model’s context.

That can be useful. It can also create the impression that the system remembers.

But once you start building an agent that handles tasks over time, retrieval alone feels incomplete.

Imagine AdamI receives a request, works through several steps, encounters a tool failure, and leaves the task unfinished.

Later, the user comes back.

A basic memory system might retrieve the original conversation. It could even produce a convincing summary of what happened.

But that’s not necessarily enough.

The system also needs to know that the task is still open, which steps actually completed, what failed, and whether the environment has changed since the previous attempt.

Otherwise, it may give an excellent account of yesterday’s work and then repeat yesterday’s mistake.

That’s the distinction I’ve been thinking about: remembering a conversation is not the same as carrying a task forward.

We already had pieces of this problem elsewhere

This became especially clear as AdamI’s lifecycle grew beyond a single request-and-response loop.

The kernel now has an event-driven path, a persistent task queue, session-level coordination, and separate components for routing, planning, and execution.

That architecture creates situations where memory has to do more than help the model write a better answer.

A task can remain unfinished.

An event can arrive while another task is running.

A tool call can return an error.

A process can restart.

In those situations, the system needs to recover enough context to continue safely. It cannot simply treat every new interaction as a fresh conversation.

And this connects directly to the previous log, When The System Learns To Wait.

Waiting is only useful if the system can retain what it was waiting for.

If a task pauses and the reason for that pause disappears, waiting hasn’t solved much. We’ve just moved the failure to a later moment.

One kind of memory cannot do everything

This is part of why AdamI has more than one memory-related component.

SecondBrain is useful for collected notes and resources. Episodic memory concerns what happened. Layered memory provides different ways to retain and retrieve context. The experience sink captures information from model and tool interactions.

These are different responsibilities.

A saved document is not an unfinished task.

An unfinished task is not a past experience.

A past experience is not automatically a reliable instruction for the future.

That last distinction matters more than it first appears.

Suppose an agent tried a tool, failed, and later recorded that the tool was unreliable.

Should the next run avoid the tool entirely?

Maybe. But perhaps the failure was temporary. Perhaps the input was malformed. Perhaps the permission was missing and has since been granted.

A memory system that blindly turns every past event into a future rule can make an agent less capable, not more.

We need to preserve enough context to understand what happened without treating every remembered conclusion as permanent truth.

The part I care about most is what changes next

For me, this is where memory starts becoming interesting.

The value of an experience is not just that we can retrieve it. It’s that the experience can inform the next decision.

If a task failed because a tool timed out, a later attempt should have access to that information.

If the user already approved one step but not the next, the system should preserve that distinction.

If an earlier assumption was corrected, the correction should matter more than the original assumption.

And if the system cannot verify whether an action completed, it should not turn an uncertain result into a confident memory.

None of this requires pretending that an agent has human experiences or a human sense of self.

It requires something more practical: keeping track of what happened, what we believe happened, and how much confidence we should place in that record.

There’s also an important difference between using history and inventing continuity.

A model can produce a smooth narrative about its previous work. That doesn’t prove the work happened. We still need execution records and verifiable state outside the model’s own description.

Memory should help reconstruct the situation, not replace evidence.

Where AdamI stands today

I want to be careful about the distinction between the architecture we’re building and the capability we’ve already demonstrated.

AdamI has memory-related modules, a persistent task queue, an experience-capture path, and simulation/replay tooling. Those are useful foundations.

But having the pieces in a repository is not the same as proving that the whole system can reliably learn from experience across long-running tasks.

We still need to test the connections.

Does a recovered task have the context it actually needs?

Can we distinguish an observed tool result from an interpretation written by the model?

If two pieces of remembered information disagree, which one should affect the next action?

Can a replay show why the system made a particular decision?

And when earlier information becomes stale, can the system recognize that before acting on it?

Those are the questions I’m more interested in now than simply increasing the amount of information AdamI can store.

A larger memory database would be easy to celebrate. It would also be a weak measure of progress if the system continued making the same mistakes.

Memory needs boundaries too

There’s another complication.

The more an agent remembers, the more tempting it becomes to let that memory influence everything.

But not every piece of stored information deserves the same authority.

A user preference should not become permission to perform an unrelated action.

A previous tool result should not be treated as proof that the same result is still true today.

A model-generated summary should not override a verified execution record.

And an experience from one task should not automatically become a general rule for every future task.

This is where memory, ownership, and the Guardian layer start to meet.

We need a way to preserve useful history while keeping authorization and verification separate.

Remembering that something was permitted yesterday does not necessarily mean it is permitted now.

That’s an important lesson for any agent we expect to operate over time.

What comes next

The next step isn’t to add more memory types just because we can.

It’s to make the existing pieces earn their place in the runtime.

I want to focus on a few concrete situations: an interrupted task, a failed tool call, a corrected assumption, and a task resumed after the surrounding state has changed.

For each one, we should be able to examine what was stored, what was recovered, and whether that history affected the next decision in the intended way.

And if the outcome changes, we should be able to trace why.

That’s the kind of progress I want AdamI’s future logs to document. Not just that we added another component, but what the component changed in a real execution path.

I’ve started thinking of memory less as a place where an agent keeps its past and more as part of how it carries unfinished work into the future.

A system can store an enormous amount of information and still behave as if every day is its first day.

What I’m trying to build is something that can use its history without becoming trapped by it.

That feels like the next meaningful step for AdamI.


AdamI Digital Life Log — Building a persistent AI system, one engineering problem at a time.