
Aki Wijesundara
Manu Jayawardana
Between messages. Every request starts from zero, no matter what came before.
AmnesiaYou already answered them. The agent asks again because it can't see the earlier turn.
Loops backOn multi-step tasks. It never knows which step it's on, so it starts every step over.
No placeEvery time you refresh. Every session is a first session. Feels like a chat demo, not a tool.
No memory

Fixed path. One shot. No actions. Predictable and dumb.
Every turn is independent. Nothing accumulates. Great for simple lookups; useless for multi-step work.
Dynamic path. Loops until done. Takes actions, not just words.
The loop is the point. Every action feeds the next decision. Which is exactly why state matters · the decisions are only as good as what the agent remembers.

Simpler, easier to debug, easier to state-manage. The support bot with three tools: search, ticket, escalate. That's the archetype.
One agent means one context to reason about. One trace. One state blob. One thing that can go wrong.
Each agent has its own role: research, writer, editor. Handoff between them.
Powerful when the work is genuinely parallel or truly specialised. Multiplies the ways things can fail. Skip until you need it.

Last ten messages. User said X, agent replied Y. Reset per session. What "remembers what I said" means for the user.
SessionWhat step are we on. Has the search been done. Status flags (open, resolved, escalated). What the agent uses to decide the next tool.
Active taskUser preferences across sessions. Past tickets, past interactions. RAG or vector database if you have one. Not required for a working v0.
Only if you need itEvery token you spend in the window is a token the model has to attend to. Memory is what you PICK to put in the window on each turn · not what you dump into it. Storage is cheap; attention is the constraint. Engineer the state layer for the attention budget, not against it.



Repeats questions? Missing conversation history. Doesn't know what step it's on? Missing task state. Forgets between sessions? Missing (or unnecessary) long-term knowledge.
The next slide is the three-node pattern that fixes all three.

Get sessionId from the trigger. Load the conversation history. Pass it to the agent as context. Read side only.
ReadReceives the incoming message plus the full loaded history. Makes decisions. Calls tools. Returns a response.
DecideAppend the user message and the agent reply to history. Update task status. Write back to storage. Write side only.
Write
Google Sheets · logs qualified leads.
Built-in memory · conversation context.


Every stateful agent you'll ever ship boils down to a load-node, an agent-node, and a save-node reading and writing a small object. Frameworks help when you have proven need. Skip them until you do. The engineers who ship stateful agents on their first try are the engineers who resist premature architecture.
Nine weeks. From loop to production. Certificate for engineers and AI PMs. Cohorts start monthly.
Where this leadsPost one line: the thing your agent keeps forgetting. Aki or Manu will read a few aloud and name the missing memory type live.
Open floorShip the three-node stateful agent. Email the workflow or repo. We reply with a short audio review before the bootcamp starts.
The receipt