<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agents on Nicole van der Hoeven</title><link>https://nicolevanderhoeven.com/tags/agents/</link><description>Recent content in Agents on Nicole van der Hoeven</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Nicole van der Hoeven</copyright><lastBuildDate>Thu, 07 May 2026 16:00:00 +0100</lastBuildDate><atom:link href="https://nicolevanderhoeven.com/tags/agents/index.xml" rel="self" type="application/rss+xml"/><item><title>The Architecture of Forgetting</title><link>https://nicolevanderhoeven.com/blog/20260507-architecture-of-forgetting/</link><pubDate>Thu, 07 May 2026 16:00:00 +0100</pubDate><guid>https://nicolevanderhoeven.com/blog/20260507-architecture-of-forgetting/</guid><description>&lt;p&gt;Originally posted &lt;a href="https://contexthorizon.substack.com/p/the-architecture-of-forgetting"&gt;here&lt;/a&gt; on Context Horizon.&lt;/p&gt;
&lt;p&gt;In early April, &lt;a href="https://github.com/openclaw/openclaw/releases/tag/v2026.4.5"&gt;a new version of everyone&amp;rsquo;s favourite lobster, OpenClaw, was shipped&lt;/a&gt; with an interesting new feature: &lt;a href="https://docs.openclaw.ai/concepts/dreaming"&gt;dreaming&lt;/a&gt;. It&amp;rsquo;s a memory consolidation feature. But to understand why it matters, we need to back up.&lt;/p&gt;
&lt;p&gt;Early AI chatbots, like the initial GPT wrappers, had zero memory. Every conversation started fresh. You asked a question, you got an answer, and you moved on: a glorified search engine.&lt;/p&gt;
&lt;p&gt;Somewhere along the way we began to expect more and more of our chatbots. Models acquired context windows that became their de facto short-term memory. As the context window filled up, they remembered what had been said earlier in the conversation, making them better conversational partners. Still, it was ephemeral: close the tab, start fresh. And it had a hard ceiling: hit the limit, and the oldest things fall off. This felt like forgetting because &lt;em&gt;it was&lt;/em&gt;. But it was also, accidentally, a form of curation. Finite space forced priority.&lt;/p&gt;
&lt;p&gt;Then came the push for real persistence. RAG pipelines, vector databases, memory files, agent frameworks that write notes to themselves. Now our agents can remember that we prefer the Oxford comma, that we just started a new project at work, that our D&amp;amp;D character is named Zuhri. This felt like the solution. More memory = better agent.&lt;/p&gt;
&lt;p&gt;That mostly works— until it doesn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;As it turns out, the problem with AI memory isn&amp;rsquo;t that agents forget too much. It&amp;rsquo;s that &lt;strong&gt;they forget too little&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="why-remembering-is-hard"&gt;Why remembering is hard&lt;/h2&gt;
&lt;p&gt;It turns out that having a persistent memory, even for an agent like OpenClaw that has that as one of its defining features, doesn&amp;rsquo;t solve all the memory problems.&lt;/p&gt;
&lt;p&gt;I happen to have an OpenClaw agent that named itself Iris.&lt;/p&gt;
&lt;p&gt;Iris does a lot of things for me, including parsing my meeting notes to identify next actions, curating my tasks and projects, and generating a daily briefing. She also creates a summary of the day&amp;rsquo;s work based on my meetings, conversations, and notes. One day she was giving me the daily summary, and here&amp;rsquo;s that conversation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Iris: &amp;hellip;Tonsil is finally healed after weeks of pain&amp;hellip;
Me: Wait what? Where did you get the tonsil stuff?
Iris: From your memory file — it&amp;rsquo;s in the Apr 10 daily note context: &amp;ldquo;Tonsil finally healed — Nicole no longer in pain 🎉&amp;rdquo;. I&amp;rsquo;ve had that sitting in memory since the Apr 10 summary. Is that wrong? Was it something else that healed, or is the tonsil detail off?
Me: I have no idea where you got that. I have never had issues with my tonsil.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Where did that come from? I&amp;rsquo;m still not sure, but I occasionally have meetings in cafés, and it&amp;rsquo;s possible that a meeting recording overheard the conversation of someone else in the café. That got faithfully transcribed, copied over into my notes, and written into Iris&amp;rsquo;s memory. Iris treated it as fact for days.&lt;/p&gt;
&lt;p&gt;The problem isn&amp;rsquo;t that Iris forgot. It&amp;rsquo;s that she remembered the wrong thing&amp;hellip; and didn&amp;rsquo;t know how to forget it.&lt;/p&gt;
&lt;p&gt;Imagine this at scale: not one wrong fact, but dozens, quietly shaping every summary, every recommendation, every task Iris surfaces for me. The signal-to-noise ratio degrades until it doesn&amp;rsquo;t matter if Iris remembers mostly accurate memories— I won&amp;rsquo;t trust it.&lt;/p&gt;
&lt;p&gt;So how do you build a memory system that knows what to keep? Researchers have been working on this longer than you might think.&lt;/p&gt;
&lt;h2 id="meet-the-residents-of-smallville"&gt;Meet the residents of Smallville&lt;/h2&gt;
&lt;p&gt;Stanford researchers Park et al. &lt;a href="https://arxiv.org/abs/2304.03442"&gt;released a charming study in 2023&lt;/a&gt; called &lt;em&gt;Generative Agents: Interactive Simulacra of Human Behavior&lt;/em&gt; in which they talk about how they created a simulated environment called Smallville, populated it with 25 generative agents, and then watched.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nicolevanderhoeven.com/assets/20260507-smallville.png" alt="Smallville, a simulated environment populated with 25 generative agents" loading="lazy" decoding="async"&gt;
&lt;em&gt;Source: Park et al. (2023)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The study was an attempt to simulate emergent social behavior, but the key insight I took from it isn&amp;rsquo;t the sim itself— it&amp;rsquo;s what they had to do to the inhabitants of Smallville to enable the rich social interactions they wanted to observe.&lt;/p&gt;
&lt;p&gt;The researchers had to give the inhabitants a way to remember.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nicolevanderhoeven.com/assets/20260507-smallville-memory-architecture.png" alt="The memory architecture of Smallville’s generative agents — observation, retrieval, action, and reflection" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;Above is a diagram of the memory architecture of every generative agent.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Observation:&lt;/em&gt; The agent perceives new information. The new information is saved into the &lt;em&gt;memory stream&lt;/em&gt;, a database that serves as the record of everything an agent has experienced.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Retrieval:&lt;/em&gt; When the agent is looking for information, a retrieval function takes that information from the memory stream and passes it onto the agent.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Action:&lt;/em&gt; The agent, armed with retrieved information, can decide to act.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Reflection:&lt;/em&gt; Patterns are synthesized from the observations and written back to the memory stream.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To determine which memories to retrieve at any given point in time, the researchers scored memories according to three weighted factors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Recency:&lt;/em&gt; when a memory was observed&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Importance:&lt;/em&gt; how significant the memory was&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Relevance:&lt;/em&gt; how closely related a memory is to the input memory (the agent&amp;rsquo;s current context)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The top-ranking memories that fit within the agent&amp;rsquo;s context window were selected to be retrieved and used with the prompt.&lt;/p&gt;
&lt;p&gt;The researchers also introduced a second type of memory: reflection. Reflections were generated when a threshold of important scores was reached per day, which typically happened 2-3 times a day.&lt;/p&gt;
&lt;p&gt;Crucially, reflection is a &lt;em&gt;compression&lt;/em&gt; step — the agent doesn&amp;rsquo;t just accumulate observations, it periodically steps back and asks &amp;ldquo;what do these observations actually mean?&amp;rdquo; That reflection pass is where low-signal memories get subordinated to higher-order patterns. That&amp;rsquo;s the first instance of intelligent forgetting.&lt;/p&gt;
&lt;p&gt;The Smallville paper was published in 2023. Three years later, the same insight shipped in a lobster.&lt;/p&gt;
&lt;h2 id="dreaming-of-electric-lobsters"&gt;Dreaming of electric lobsters&lt;/h2&gt;
&lt;p&gt;Every system that has solved the memory problem has solved it the same way: not by storing more, but by knowing what to throw away.&lt;/p&gt;
&lt;p&gt;Your brain does it while you sleep by consolidating important experiences into long-term memory, letting the rest dissolve. Some programming languages do it with garbage collection, periodically scanning for unused objects and reclaiming that space. Databases do it with compaction: Loki, Cassandra, and other LSM-tree-inspired systems periodically merge and discard obsolete data so reads stay fast.&lt;/p&gt;
&lt;p&gt;In all cases, the architecture of good memory is really the architecture of intelligent forgetting. OpenClaw&amp;rsquo;s dreaming feature is the same insight applied to agents.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nicolevanderhoeven.com/assets/20260507-architecture-of-forgetting-dreaming.svg" alt="Diagram of OpenClaw’s internal memory architecture. The default components (“Awake”) are in black, and the new components are in blue (“Dreaming”)." loading="lazy" decoding="async"&gt;
&lt;em&gt;Diagram of OpenClaw&amp;rsquo;s internal memory architecture. The default components (&amp;ldquo;Awake&amp;rdquo;) are in black, and the new components are in blue (&amp;ldquo;Dreaming&amp;rdquo;).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Note that without dreaming, there is no automatic promotion from the active context window to daily notes and then to long-term memory. When a new bit of information is mentioned, the agent has to decide whether it should be added to the daily note and/or the long-term memory file manually. Dreaming, by contrast, is an automated process.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s called &amp;ldquo;Dreaming&amp;rdquo; because the feature works similarly to the biological process, as if in three sleep phases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Light phase:&lt;/em&gt; Creates a session corpus from session files and then succeeding sweeps tally how many times a chunk has been recalled in a session (a counter called &lt;code&gt;lightHit&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;REM phase:&lt;/em&gt; Spots patterns and themes from chunks and adds a reinforcement signal (&lt;code&gt;remHits&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Deep phase:&lt;/em&gt; Ranks the candidates by several factors and promotes those that exceed a threshold score to long-term memory in &lt;code&gt;MEMORY.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Just like in the Smallville simulation, OpenClaw ranks information by several categories. Here&amp;rsquo;s the table of signals and weights from the &lt;a href="https://docs.openclaw.ai/concepts/dreaming#deep-ranking-signals"&gt;OpenClaw docs&lt;/a&gt; at the time of writing:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frequency&lt;/td&gt;
&lt;td&gt;0.24&lt;/td&gt;
&lt;td&gt;How many short-term signals the entry accumulated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relevance&lt;/td&gt;
&lt;td&gt;0.30&lt;/td&gt;
&lt;td&gt;Average retrieval quality for the entry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query diversity&lt;/td&gt;
&lt;td&gt;0.15&lt;/td&gt;
&lt;td&gt;Distinct query/day contexts that surfaced it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recency&lt;/td&gt;
&lt;td&gt;0.15&lt;/td&gt;
&lt;td&gt;Time-decayed freshness score&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consolidation&lt;/td&gt;
&lt;td&gt;0.10&lt;/td&gt;
&lt;td&gt;Multi-day recurrence strength&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conceptual richness&lt;/td&gt;
&lt;td&gt;0.06&lt;/td&gt;
&lt;td&gt;Concept-tag density from snippet/path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Only candidates that have high scores according to these signals graduate to be part of &lt;code&gt;MEMORY.md&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="how-dreaming-helps-with-forgetting"&gt;How dreaming helps with forgetting&lt;/h3&gt;
&lt;p&gt;The new dreaming architecture doesn&amp;rsquo;t ever &lt;em&gt;delete&lt;/em&gt; things, technically. The forgetting is more passive. However, it&amp;rsquo;s still an improvement in a few ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Low-signal chunks don&amp;rsquo;t get promoted:&lt;/em&gt; Anything that doesn&amp;rsquo;t cross the deep phase thresholds simply never reaches MEMORY.md. It exists, but it&amp;rsquo;s functionally invisible to future sessions.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Score competition:&lt;/em&gt; The staging index has finite attention, so chunks compete against each other for recall signal. A high-frequency chunk that keeps getting surfaced crowds out low-frequency ones. Relative obscurity is functional forgetting.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Recency decay on scoring:&lt;/em&gt; The deep phase ranking includes a recency signal. So something that was frequently recalled two weeks ago but hasn&amp;rsquo;t come up since will score lower than something with fewer total hits but recent activity. Time degrades relevance passively.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What&amp;rsquo;s notable: all three are selection mechanisms, not deletion mechanisms. The corpus files still exist. The staging index entries still exist. Nothing is removed&amp;hellip; it&amp;rsquo;s just progressively less likely to be chosen. This is forgetting as diminishing probability of retrieval, not erasure.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the garbage collection analogy again: the objects are still in memory, they&amp;rsquo;re just unreachable.&lt;/p&gt;
&lt;h3 id="transparency"&gt;Transparency&lt;/h3&gt;
&lt;p&gt;Dreaming also adds a layer of transparency. Aside from the session corpus and staging files, it also produces some output about its decisions. All three dreaming stages create files per day that live in &lt;code&gt;.openclaw/workspace/memory/dreaming/{phase}/YYYY-MM-DD.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example of an entry in the &lt;code&gt;light&lt;/code&gt; directory:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Light Sleep
- Candidate: &amp;#34;Don&amp;#39;t Call It Eval&amp;#34; blog post (Context Horizon): `Dont Call It Eval - Blog Post Outline.md` — full outline with 7 open questions; `Dont Call It Eval - Draft.md` — 2,550-word draft, 6 sections; `Dont Call It Eval - Opening Research.md` — Tier 1/2/3 shortlist of popular AI eval po
- confidence: 0.62
- evidence: memory/2026-04-19.md:13-15
- recalls: 0
- status: staged
- Candidate: &amp;#34;Don&amp;#39;t Call It Eval&amp;#34; blog post (Context Horizon): **Thesis (locked):** &amp;#34;AI eval community has rediscovered software testing and given it a new name. The testing world has been busy since.&amp;#34;
- confidence: 0.62
- evidence: memory/2026-04-19.md:17-17
- recalls: 0
- status: staged
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This entry identified a blog draft I was working on.&lt;/p&gt;
&lt;p&gt;REM sleep goes through these candidates and highlights when it spots themes:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# REM Sleep
### Reflections
- Theme: `assistant` kept surfacing across 532 memories.
- confidence: 1.00
- evidence: memory/2026-04-12.md:27-29, memory/.dreams/session-corpus/2026-04-17.txt:26-26, memory/.dreams/session-corpus/2026-04-17.txt:28-28
- note: reflection
### Possible Lasting Truths
- &amp;#34;Don&amp;#39;t Call It Eval&amp;#34; blog post (Context Horizon): **Datadog Bits AI eval platform** (Apr 7, 2026) — &amp;#34;Bring the noise&amp;#34; = noise injection = production-like envs from 90s QA. SECTION HEADERS are gold (&amp;#34;When one improvement caused subtle regressions&amp;#34;, &amp;#34;Why tool-level testing and live [confidence=0.58 evidence=memory/2026-04-19.md:30-33]
- &amp;#34;Don&amp;#39;t Call It Eval&amp;#34; blog post (Context Horizon): **Thesis (locked):** &amp;#34;AI eval community has rediscovered software testing and given it a new name. The testing world has been busy since.&amp;#34; [confidence=0.58 evidence=memory/2026-04-19.md:17-17]
- &amp;#34;Don&amp;#39;t Call It Eval&amp;#34; blog post (Context Horizon): **Title:** &amp;#34;Don&amp;#39;t Call It Eval&amp;#34; (Nicole&amp;#39;s original; I picked it over &amp;#34;Congratulations, you&amp;#39;ve invented testing&amp;#34;) [confidence=0.58 evidence=memory/2026-04-19.md:27-27]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In this case, REM sleep correctly identified that I&amp;rsquo;m currently working on the &lt;a href="https://grafana.com/docs/grafana-cloud/machine-learning/assistant/"&gt;Assistant&lt;/a&gt; feature at work (which had already been promoted to long-term memory) and the blog post that the light sleep phase had identified.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the same day&amp;rsquo;s deep sleep file:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Deep Sleep
- Ranked 10 candidate(s) for durable promotion.
- Promoted 3 candidate(s) into MEMORY.md.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And here&amp;rsquo;s the addition to &lt;code&gt;MEMORY.md&lt;/code&gt; for the same day:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;## Promoted From Short-Term Memory (2026-04-26)
&amp;lt;!-- openclaw-memory-promotion:memory:memory/2026-04-19.md:17:17 --&amp;gt;
- **Thesis (locked):** &amp;#34;AI eval community has rediscovered software testing and given it a new name. The testing world has been busy since.&amp;#34; [score=0.926 recalls=0 avg=0.620 source=memory/2026-04-19.md:17-17]
&amp;lt;!-- openclaw-memory-promotion:memory:memory/2026-04-19.md:27:27 --&amp;gt;
- **Title:** &amp;#34;Don&amp;#39;t Call It Eval&amp;#34; (Nicole&amp;#39;s original; I picked it over &amp;#34;Congratulations, you&amp;#39;ve invented testing&amp;#34;) [score=0.926 recalls=0 avg=0.620 source=memory/2026-04-19.md:27-27]
&amp;lt;!-- openclaw-memory-promotion:memory:memory/2026-04-19.md:12:12 --&amp;gt;
- Three files in openclaw-output: [score=0.894 recalls=0 avg=0.620 source=memory/2026-04-19.md:12-12]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;There&amp;rsquo;s also an entry in &lt;code&gt;DREAMS.md&lt;/code&gt; for the entire sequence, which is more dreamlike and human-readable. The per-day Deep Sleep file is the structured internal audit trail; &lt;code&gt;DREAMS.md&lt;/code&gt; is the rolling, more narrative log for humans.&lt;/p&gt;
&lt;p&gt;This level of transparency and reflection is a welcome change when you compare it to what I had before, which was nothing. Iris had to manually decide on the spot what had to be written where, and those decisions were not logged anywhere.&lt;/p&gt;
&lt;h2 id="the-tonsil-dilemma"&gt;The tonsil dilemma&lt;/h2&gt;
&lt;p&gt;So dreaming could have prevented the tonsil hallucination, right? Well&amp;hellip; no.&lt;/p&gt;
&lt;p&gt;In this case, the idea of my supposed tonsil pain had come from an external source: my meeting recordings. Iris had faithfully manually added that to the daily note for the day, then decided to call on it a few days later, unprompted, in conversation with me.&lt;/p&gt;
&lt;p&gt;With dreaming, Iris still could have made those decisions. But in fact, even if she hadn&amp;rsquo;t, dreaming could have made it &lt;em&gt;worse&lt;/em&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Light phase sweeps it and scores it well since it&amp;rsquo;s recent and distinctive.&lt;/li&gt;
&lt;li&gt;Tonsil pain could be included in queries about health, such as the daily health tracker that is part of Iris&amp;rsquo;s tasks. REM phase sees a pattern and increments &lt;code&gt;remHits&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Deep phase ranks it highly and it crosses the promotion threshold.&lt;/li&gt;
&lt;li&gt;It gets written to &lt;code&gt;MEMORY.md&lt;/code&gt; and gets loaded &lt;em&gt;every session&lt;/em&gt;. And long-term memory is sticky. Only manual intervention (by me or by Iris) removes things from that file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Even dreaming doesn&amp;rsquo;t solve everything. Dreaming adds a mechanism for forgetting. It doesn&amp;rsquo;t prevent OpenClaw from remembering the wrong things in the first place.&lt;/p&gt;
&lt;h3 id="the-residual-layer"&gt;The residual layer&lt;/h3&gt;
&lt;p&gt;Every memory architecture we&amp;rsquo;ve looked at — biological sleep consolidation, garbage collection, LSM compaction, Smallville&amp;rsquo;s reflection pass, OpenClaw&amp;rsquo;s dreaming — has the same shape: automated compression plus a residual human layer. Your brain has you. GC has the programmer. Iris&amp;rsquo;s dreaming has me. The human in the loop isn&amp;rsquo;t a bug in the design; it&amp;rsquo;s load-bearing.&lt;/p&gt;
&lt;h2 id="whats-worth-keeping"&gt;What&amp;rsquo;s worth keeping&lt;/h2&gt;
&lt;p&gt;Dreaming is a genuine step forward for OpenClaw&amp;rsquo;s memory architecture. The mechanism of passive forgetting isn&amp;rsquo;t perfect, but the automated promotion systems do add a necessary layer of periodic reflection.&lt;/p&gt;
&lt;p&gt;But there are limitations. Dreaming can&amp;rsquo;t yet distinguish between a memory worth keeping and a hallucinated tonsil. It can only measure how often something gets recalled. The next frontier is &lt;em&gt;active forgetting&lt;/em&gt;: automated demotion from &lt;code&gt;MEMORY.md&lt;/code&gt;, weighted by signals like source provenance and trust. The provenance side of that work landed in &lt;a href="https://github.com/openclaw/openclaw/releases/tag/v2026.4.29-beta.2"&gt;v2026.4.29-beta.2&lt;/a&gt; — memory now exposes evidence-kind drilldown and privacy/provenance reports, so you can at least &lt;em&gt;see&lt;/em&gt; where a memory came from. But the demotion half — automatically down-ranking memories based on a low-trust source like an audio transcript — still hasn&amp;rsquo;t been built.&lt;/p&gt;
&lt;p&gt;What remains, for now, is the human layer. The transparency of the dreaming process becomes a checkpoint for the human in the loop by surfacing promotion decisions. I still read the summaries. I still catch the errors. I still decide what goes into long-term memory and what gets quietly corrected. That&amp;rsquo;s not a gap in the system — it&amp;rsquo;s probably the right design. The most important memories should require a human to notice them twice.&lt;/p&gt;
&lt;p&gt;Good memory systems are defined by what they &lt;em&gt;don&amp;rsquo;t&lt;/em&gt; keep as much as by what they &lt;em&gt;do&lt;/em&gt; keep.&lt;/p&gt;</description></item><item><title>Unlearnings from building Grafana Assistant</title><link>https://nicolevanderhoeven.com/blog/20260409-unlearnings-from-building-grafana-assistant/</link><pubDate>Thu, 09 Apr 2026 09:00:00 +0100</pubDate><guid>https://nicolevanderhoeven.com/blog/20260409-unlearnings-from-building-grafana-assistant/</guid><description>&lt;p&gt;Originally posted &lt;a href="https://open.substack.com/pub/contexthorizon/p/unlearnings-from-building-grafana?r=7xe6zg&amp;amp;utm_campaign=post&amp;amp;utm_medium=web&amp;amp;showWelcomeOnShare=true"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Everyone&amp;rsquo;s talking about what you need to &lt;em&gt;learn&lt;/em&gt; to build AI agents: Prompt engineering. Tool calling. Retrieval strategies. The content ecosystem is full of it. But while I was watching Context Window Episode 1, it struck me that Mat Ryer, Cyril Tovena, and Sven Großmann&amp;ndash; some of the team behind Grafana Assistant&amp;ndash; spent most of their time on something different: what they had to &lt;em&gt;unlearn&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Grafana Assistant started as a weekend hackathon project. By the time it shipped, the team had thrown out a popular framework, flipped their assumptions about tool design, and discovered that some of the instincts you bring from conventional software development actively work against you when you&amp;rsquo;re building agents.&lt;/p&gt;
&lt;p&gt;I pulled out the ten moments where received wisdom turned out to be wrong. If you&amp;rsquo;re building anything agentic right now, these are worth sitting with.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/TGWVqBAeIzI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="-langchain-will-help-us-build-faster"&gt;❌ LangChain will help us build faster&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/langchain-ai/langchain"&gt;LangChain&lt;/a&gt; is an opensource framework for building applications that use LLMs. It provides structured components that can be used for rapid prototyping.&lt;/p&gt;
&lt;p&gt;In the video, Tovena talks about how they started with LangChain during the initial hackathon because they thought it would help them build more quickly, but instead it became obvious fairly early on that the opposite was true. They didn&amp;rsquo;t end up using a lot of the features that LangChain provided and felt they needed more flexibility and speed.&lt;/p&gt;
&lt;h3 id="abstraction-overhead"&gt;Abstraction overhead&lt;/h3&gt;
&lt;p&gt;One possible reason for their troubles with LangChain is that LangChain has standard abstractions for prompts, tool use, and orchestration&amp;ndash; things that sound good in theory. But sometimes abstractions lend themselves to creating a sort of black box in your stack, where you don&amp;rsquo;t know what&amp;rsquo;s happening inside it. It sounds like the Assistant team missed the oversight and control of what was happening.&lt;/p&gt;
&lt;h2 id="-use-the-same-prompt-for-every-model"&gt;❌ Use the same prompt for every model&lt;/h2&gt;
&lt;p&gt;They also talked about how for the sake of simplicity and consistency, they initially used the same prompt for every model. However, they found out that this actually led to worse results. They found more success in creating slightly different prompts for different models, playing to their strengths and weaknesses a bit more.&lt;/p&gt;
&lt;p&gt;There is even an argument (&lt;a href="https://arxiv.org/abs/2401.00595"&gt;Mizrahi et al.&amp;rsquo;s &amp;ldquo;State of What Art? A Call for Multi-Prompt LLM Evaluation&lt;/a&gt;) that AI benchmarks that involve sending multiple LLMs the same prompt is a brittle and unreliable way to assess LLM capabilities. Different models respond differently to prompt variations.&lt;/p&gt;
&lt;p&gt;In practice, what this means is that switching models isn&amp;rsquo;t a drop-in replacement. Even if a new model scores better on benchmarks, your prompts were written with a specific model&amp;rsquo;s tendencies in mind. The unlearning here is letting go of the idea that a prompt is model-agnostic — it&amp;rsquo;s more like a conversation style, and different models have different conversational defaults.&lt;/p&gt;
&lt;h2 id="-treat-errors-as-failures"&gt;❌ Treat errors as failures&lt;/h2&gt;
&lt;p&gt;Traditionally in software, you catch errors and hide them from the user: you log them, handle them, but treat that transaction as a failed one.&lt;/p&gt;
&lt;p&gt;The Assistant team had to unlearn this habit when dealing with an LLM, because with agents, error messages &lt;em&gt;are&lt;/em&gt; useful data. Feeding it back to the LLM often results in it learning from its own mistake and trying again. It&amp;rsquo;s basically letting the agent debug itself, in a manner that Ryer noted was remarkably similar to how we humans debug errors too.&lt;/p&gt;
&lt;h2 id="-return-errors-in-structured-json"&gt;❌ Return errors in structured JSON&lt;/h2&gt;
&lt;p&gt;On the subject of error messages, Großmann mentioned that at one point they were trying to format the errors in JSON or stringified JSON. This practice shows solid engineer intuition because usually, structuring information helps machines process it faster and more accurately. What they found here was the reverse: it was easier and yielded better results when the LLM was just passed the entire error in natural language.&lt;/p&gt;
&lt;h2 id="-build-as-many-tools-as-possible"&gt;❌ Build as many tools as possible&lt;/h2&gt;
&lt;p&gt;The team mentioned that at the start, they were inclined to create as many tools/skills for Assistant: one for everything that could be done in Grafana. This made sense until they saw LLMs struggle to determine which tool to use in which context.&lt;/p&gt;
&lt;p&gt;To help LLMs identify the correct tool, they added tool descriptions and also experimented with combining multiple tools into fewer, parameterized, tools. These helped, although the team still observed that allowing users to create their own tools (with potentially very general tool descriptions) could potentially confuse LLMs.&lt;/p&gt;
&lt;h2 id="-bigger-context-window--better"&gt;❌ Bigger context window = better&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://developers.googleblog.com/en/new-features-for-the-gemini-api-and-google-ai-studio/"&gt;Gemini 1.5 Pro announced&lt;/a&gt; it had a 2M context window back in 2024, and it might seem that other providers had lagged behind: &lt;a href="https://openai.com/index/gpt-4-1/"&gt;OpenAI&lt;/a&gt; only announced support for 1M tokens in 2025 and &lt;a href="https://www.anthropic.com/news/claude-opus-4-6"&gt;Anthropic&lt;/a&gt; followed in 2026. However, the Assistant team pointed out that context wasn&amp;rsquo;t everything. They said that they noticed that bigger wasn&amp;rsquo;t necessarily better, also pointing out that the chat summarization feature on IDEs like &lt;a href="https://cursor.com/"&gt;Cursor&lt;/a&gt; could still sometimes lose important details when summarizing.&lt;/p&gt;
&lt;p&gt;This finding seems to coincide with a 2023 Stanford study (&lt;a href="https://arxiv.org/abs/2307.03172"&gt;Lost in the Middle: How Language Models Use Long Contexts&lt;/a&gt;) that found there was a performance degradation when models access information within a very large context. In the video, they talked about how their system prompts were often 40k tokens long (half for the prompt itself and then the other half for tools).&lt;/p&gt;
&lt;h2 id="-start-with-a-multi-agent-architecture"&gt;❌ Start with a multi-agent architecture&lt;/h2&gt;
&lt;p&gt;Tovena mentioned that creating a multi-agent architecture for Assistant yielded more mixed results than he expected. He said that passing context between agents is difficult, outputs were inconsistent, and there was a bit of a &amp;ldquo;telephone game&amp;rdquo; problem where agents didn&amp;rsquo;t always perfectly understand the intent or output of other agents.&lt;/p&gt;
&lt;p&gt;In early 2026, &lt;a href="https://arxiv.org/abs/2601.13295"&gt;Khatua et al. released a study&lt;/a&gt; called &amp;ldquo;CooperBench: Why Coding Agents Cannot Be Your Teammates Yet&amp;rdquo; that showed that AI agents aren&amp;rsquo;t great at collaboration. The study suggests, surprisingly, that this might be because AI agents lack human social habits that help us collaborate better, such as feeling obliged to do what we say and having a good understanding of what others&amp;rsquo; plans are.&lt;/p&gt;
&lt;p&gt;The Assistant team&amp;rsquo;s experience is also a perfect example of &lt;a href="https://www.laws-of-software.com/laws/gall/"&gt;Gall&amp;rsquo;s Law&lt;/a&gt;, which states that it&amp;rsquo;s easier to start with simplicity and build complexity than the other way around.&lt;/p&gt;
&lt;h2 id="-plan-around-models-as-they-are-now"&gt;❌ Plan around models as they are now&lt;/h2&gt;
&lt;p&gt;Software has always moved quickly, but it feels like AI models are moving faster. &lt;a href="https://hai.stanford.edu/assets/files/hai_ai_index_report_2025.pdf"&gt;Stanford&amp;rsquo;s AI Index Report 2025&lt;/a&gt; reported that models went from having a 50% chance to near-human performance in roughly 2 years (2021-2023). In fact, benchmarks keep getting retired as AI saturates them&amp;ndash; meaning that benchmarks can&amp;rsquo;t reliably be used to distinguish between good and bad models because all the models are testing near the ceiling.&lt;/p&gt;
&lt;p&gt;The rapid pace of development around AI requires us to not be so attached to our work: Großmann recalled an incident where someone wrote a joke prompt that spoke like a dog that shockingly did better than their other system prompts. Ryer also mentioned that at one point someone deleted all the system prompts and Assistant weirdly became more accurate.&lt;/p&gt;
&lt;p&gt;The lesson is clear: plan for models to improve, and plan to redo a lot of your work when they do.&lt;/p&gt;
&lt;h2 id="-we-dont-need-evals"&gt;❌ We don&amp;rsquo;t need evals&lt;/h2&gt;
&lt;p&gt;The Assistant team said that they went from having no evals to employing several types of evals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;integration-style evals that exercise whole workflows&lt;/li&gt;
&lt;li&gt;unit-style evals that feed inputs plus a system prompt and check the output&lt;/li&gt;
&lt;li&gt;LLM-as-judge, where they pass conversations to an LLM to ask it to judge whether it answered the user&amp;rsquo;s questions.&lt;/li&gt;
&lt;li&gt;user feedback in the form of thumbs during conversations with Assistant&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Beyond evaluation, they talked about how important it was to be able to observe AI. At the very minimum, showing what Assistant is doing at all times (thinking out loud) is very important to them because it builds users&amp;rsquo; trust in the thinking process and, eventually, in the result.&lt;/p&gt;
&lt;p&gt;Evals aren&amp;rsquo;t a sign that you don&amp;rsquo;t trust your product. They&amp;rsquo;re how you build the confidence to keep shipping it.&lt;/p&gt;
&lt;h2 id="-assume-people-already-know-how-to-work-with-ai"&gt;❌ Assume people already know how to work with AI&lt;/h2&gt;
&lt;p&gt;When you ship an AI feature, it&amp;rsquo;s tempting to assume the hard work is done. You&amp;rsquo;ve built the thing. Users will figure it out.&lt;/p&gt;
&lt;p&gt;What the Grafana Assistant team found was that this assumption doesn&amp;rsquo;t hold. Users came in with wildly different mental models of what an AI assistant could or should do — some treating it like a search box, others expecting it to read their minds, most not yet sure how to prompt it effectively.&lt;/p&gt;
&lt;p&gt;Their insight was that this isn&amp;rsquo;t just a UX problem to solve on your end. It&amp;rsquo;s a shared responsibility: AI should try to help the user, but the user also needs to learn how to work with AI. And building an assistant that teaches people how to use it well (through good responses, gentle corrections, showing its work) is part of building the product.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s also a deeper point here specific to observability. Grafana Assistant isn&amp;rsquo;t just an AI feature; it&amp;rsquo;s a way of interacting with your own infrastructure. Every good interaction teaches you something about what questions to ask, what signals to look for, what it means to understand a system. In other words: learning to use AI well makes you a better engineer. The tool and the skill co-evolve.&lt;/p&gt;
&lt;p&gt;This is the unlearning that sits furthest from the code. It&amp;rsquo;s not about prompts or architectures or frameworks. It&amp;rsquo;s about recognising that you&amp;rsquo;re not just shipping a feature&amp;ndash; you&amp;rsquo;re introducing a new way of working. That takes time. And it&amp;rsquo;s worth designing for explicitly.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary&lt;/h2&gt;
&lt;p&gt;What strikes me most about this list isn&amp;rsquo;t any single item — it&amp;rsquo;s the pattern. Most of these unlearnings point in the same direction: &lt;em&gt;less is more, and messiness is the point.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Less abstraction. Fewer tools. Smaller context. Simpler architecture. And rather than hiding the mess — the errors, the reasoning, the uncertainty — let it show. That&amp;rsquo;s where the trust gets built.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re all still early with this. The team that built one of the most thoughtful AI products I&amp;rsquo;ve seen up close still didn&amp;rsquo;t have evals when they launched. That&amp;rsquo;s not a criticism — it&amp;rsquo;s a reminder. You don&amp;rsquo;t need to have it all figured out before you ship. You just need to commit to keep unlearning.&lt;/p&gt;</description></item></channel></rss>