<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Llm on Nicole van der Hoeven</title><link>https://nicolevanderhoeven.com/tags/llm/</link><description>Recent content in Llm on Nicole van der Hoeven</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Nicole van der Hoeven</copyright><lastBuildDate>Thu, 30 Jul 2026 09:00:00 +0900</lastBuildDate><atom:link href="https://nicolevanderhoeven.com/tags/llm/index.xml" rel="self" type="application/rss+xml"/><item><title>The Great Doubt: What Building an AI Agent Taught Us About Trust (KubeCon Japan 2026)</title><link>https://nicolevanderhoeven.com/blog/20260730-the-great-doubt-kubecon-japan/</link><pubDate>Thu, 30 Jul 2026 09:00:00 +0900</pubDate><guid>https://nicolevanderhoeven.com/blog/20260730-the-great-doubt-kubecon-japan/</guid><description>&lt;p&gt;This week I spoke at &lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-japan/"&gt;KubeCon + CloudNativeCon Japan 2026&lt;/a&gt; in Yokohama, Japan. I gave a talk called &lt;em&gt;The Great Doubt: What Building an AI Agent Taught Us About Trust&lt;/em&gt;. Here&amp;rsquo;s the abstract:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When we started building an AI assistant for observability, we thought the hard part would be making it smart. We were wrong. The hard part was knowing when to trust it.&lt;/p&gt;
&lt;p&gt;AI agents hallucinate, forget context, and confidently give wrong answers. Traditional testing doesn&amp;rsquo;t catch these failures. What&amp;rsquo;s needed is evaluation grounded in systematic doubt.&lt;/p&gt;
&lt;p&gt;This talk shares lessons from shipping an AI agent to production: how to build a golden dataset of use cases you must get right, how to use LLM-as-judge when there&amp;rsquo;s no ground truth, and how to use OpenTelemetry traces to debug eval failures. You&amp;rsquo;ll also hear what&amp;rsquo;s still unsolved: evaluating multi-agent handoffs and closing the feedback loop between what users ask and what your evals cover.&lt;/p&gt;
&lt;p&gt;Kyoto School philosopher Nishitani Keiji called this &amp;ldquo;The Great Doubt&amp;rdquo; (大疑): questioning every assumption until only what survives is real. For AI agents, that&amp;rsquo;s not philosophy. It&amp;rsquo;s the job.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The talk walks through the layers of doubt we worked through while building &lt;a href="https://notes.nicolevanderhoeven.com/Grafana+Assistant"&gt;Grafana Assistant&lt;/a&gt;: doubting the agent itself, then doubting our tests, then the LLM-as-judge, then our own scores — and finally doubting whether the doubt was even justified. Each layer needed a different tool, from a golden dataset run in a fully synthetic observability environment, through online evals on live traffic, to per-conversation OpenTelemetry traces that link every eval score back to the exact LLM and tool calls that produced it.&lt;/p&gt;
&lt;p&gt;You can find the slides at &lt;a href="https://nicole.to/doubtslides"&gt;nicole.to/doubtslides&lt;/a&gt;, and you can watch the full talk below:&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/uW9Hlp3fT14?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="resources"&gt;Resources&lt;/h2&gt;
&lt;p&gt;Grafana Assistant (generally available for Grafana OSS, Grafana Cloud, and Grafana Play):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://grafana.com/docs/grafana-cloud/machine-learning/assistant/"&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://play.grafana.org"&gt;Try it out on Grafana Play&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Assistant Investigations (Grafana Cloud):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gra.fan/investigations"&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agent Observability (Grafana Cloud):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gra.fan/agento11y"&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;o11y-bench (OSS):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gra.fan/o11ybench"&gt;Site&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Investigations Arena:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/YPfqchw8LCo"&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="related-reading"&gt;Related reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;My notes on &lt;a href="https://notes.nicolevanderhoeven.com/Grafana+Assistant"&gt;Grafana Assistant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;My Context Horizon piece &lt;a href="https://contexthorizon.substack.com/p/unlearnings-from-building-grafana"&gt;&lt;em&gt;Unlearnings from building Grafana Assistant&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://amzn.to/4vZNlPD"&gt;&lt;em&gt;The Way of Zen&lt;/em&gt;&lt;/a&gt; by Alan W. Watts&lt;/li&gt;
&lt;li&gt;&lt;a href="https://amzn.to/3RgXGIP"&gt;&lt;em&gt;Zen Mind, Beginner&amp;rsquo;s Mind&lt;/em&gt;&lt;/a&gt; by Shunryu Suzuki&lt;/li&gt;
&lt;li&gt;&lt;a href="https://amzn.to/4vQW2eQ"&gt;&lt;em&gt;Religion and Nothingness, Volume 1&lt;/em&gt;&lt;/a&gt; by Nishitani Keiji&lt;/li&gt;
&lt;li&gt;&lt;a href="https://amzn.to/4yFff6d"&gt;&lt;em&gt;Philosophers of Nothingness: An Essay on the Kyoto School&lt;/em&gt;&lt;/a&gt; by James W. Heisig&lt;/li&gt;
&lt;/ul&gt;</description></item><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>High INT, Low WIS: What LLM Benchmarks Miss</title><link>https://nicolevanderhoeven.com/blog/20260423-high-int-low-wis-llm-benchmarks/</link><pubDate>Thu, 23 Apr 2026 09:00:00 +0100</pubDate><guid>https://nicolevanderhoeven.com/blog/20260423-high-int-low-wis-llm-benchmarks/</guid><description>&lt;p&gt;Originally posted &lt;a href="https://contexthorizon.substack.com/p/high-int-low-wis-what-llm-benchmarks"&gt;here&lt;/a&gt; on Context Horizon.&lt;/p&gt;
&lt;p&gt;In the tabletop roleplaying game Dungeons &amp;amp; Dragons (D&amp;amp;D), the very first thing you do when you create a character is to choose ability scores. Ability scores are numbers that determine how good you are at the game&amp;rsquo;s main characteristics: Strength (STR), Dexterity (DEX), Constitution (CON), Intelligence (INT), Wisdom (WIS), and Charisma (CHA). 20 is the default maximum that a character can have in any ability, though some in-game events/items can increase that.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the thing, though: every D&amp;amp;D player knows that a 20 Intelligence doesn&amp;rsquo;t mean your wizard aces every check. Whether you have proficiency in the specific skill still matters. That 20 INT wizard, for all their raw cognitive horsepower, can absolutely still fail to identify a magical rune. The ability score is a starting point, not a verdict.&lt;/p&gt;
&lt;p&gt;This is exactly what&amp;rsquo;s happening to LLM benchmarks. All the general LLM/AI model benchmarks are ability scores. They tell you something real about a model&amp;rsquo;s general capabilities, the same way a 20 INT tells you something real about a wizard. But as frontier models crowd toward the top of every leaderboard, we&amp;rsquo;re running into a problem D&amp;amp;D solved decades ago: the stat block isn&amp;rsquo;t the character. And it was never supposed to be.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nicolevanderhoeven.com/assets/20260423-safira-l10-stats.png" alt="A screenshot of the stats of my Level 10 bard. Low INT, but look at that CHA!" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A screenshot of the stats of my Level 10 bard. Low INT, but look at that CHA!&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="the-stat-block-a-tour-of-the-ability-scores-everyones-maxing-out"&gt;The stat block: A tour of the ability scores everyone&amp;rsquo;s maxing out&lt;/h2&gt;
&lt;p&gt;There are so many new models and model versions out there that it&amp;rsquo;s hard to keep up with what we&amp;rsquo;re supposed to be using for which tasks. LLM benchmarks have come to be relied on to give a somewhat objective assessment of each model&amp;rsquo;s capability. Here are a few big ones that exist.&lt;/p&gt;
&lt;h3 id="general-knowledgereasoning"&gt;General knowledge/reasoning&lt;/h3&gt;
&lt;h4 id="mmlu-measuring-massive-multitask-language-understanding-2020"&gt;MMLU (Measuring Massive Multitask Language Understanding, 2020)&lt;/h4&gt;
&lt;p&gt;MMLU is the classic &amp;ldquo;general knowledge&amp;rdquo; INT check. It was &lt;a href="https://arxiv.org/abs/2009.03300"&gt;released in September 2020 by Hendrycks et al.&lt;/a&gt; and contains 15,908 multiple-choice questions across 57 subjects (humanities, social science, STEM, other). However, there were a few issues with it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2406.04127"&gt;a study in 2024&lt;/a&gt; showed that 6.49% of those questions contained errors&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nytimes.com/2024/04/15/technology/ai-models-measurement.html"&gt;The New York Times reported&lt;/a&gt; (2024) that data contamination was an issue — models could be trained on the MMLU questions (and answers) to inflate their MMLU scores&lt;/li&gt;
&lt;li&gt;many frontier LLMs soon consistently achieved high scores&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In response, a new benchmark called &lt;a href="https://github.com/TIGER-AI-Lab/MMLU-Pro"&gt;MMLU-Pro&lt;/a&gt; was created with 12,000 questions that each have 10 options. The increase in options theoretically required more reasoning capability than the original benchmark, but frontier models are already knocking at 90% on the MMLU-Pro.&lt;/p&gt;
&lt;h4 id="humanitys-last-exam-hle-2025"&gt;Humanity&amp;rsquo;s Last Exam (HLE, 2025)&lt;/h4&gt;
&lt;p&gt;HLE was developed specifically to address the fact that LLMs &amp;ldquo;now achieve over 90% accuracy on popular benchmarks like MMLU&amp;rdquo; (from &lt;a href="https://lastexam.ai"&gt;the HLE site&lt;/a&gt;). The &lt;a href="https://arxiv.org/abs/2501.14249"&gt;paper by Phan et al&lt;/a&gt; explains the lengths they took to make it hard enough to be meaningful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;they solicited high-quality questions from nearly 1000 subject matter experts, even going as far as paying them for successful submissions (with a total prize pool of US $500,000)&lt;/li&gt;
&lt;li&gt;they included graduate-level classics (one of the questions includes translating Palmyrene script)&lt;/li&gt;
&lt;li&gt;they reviewed potential submissions using current LLMs and only proceeded with submissions if the LLMs are unable to answer correctly&lt;/li&gt;
&lt;li&gt;experts then reviewed the submissions further&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As a result, HLE scores are low — intentionally so:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;While current LLMs achieve very low accuracy on HLE, recent history shows benchmarks are quickly saturated – with models dramatically progressing from near-zero to near-perfect performance in a short timeframe [13, 45]. Given the rapid pace of AI development, it is plausible that models could exceed 50% accuracy on HLE by the end of 2025. (&lt;a href="https://arxiv.org/abs/2501.14249"&gt;Phan et al., 2025&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="software-engineering"&gt;Software engineering&lt;/h3&gt;
&lt;h4 id="humaneval-openai-2021"&gt;HumanEval (OpenAI, 2021)&lt;/h4&gt;
&lt;p&gt;In 2021, OpenAI released &lt;a href="https://arxiv.org/abs/2107.03374"&gt;a paper&lt;/a&gt; and &lt;a href="https://github.com/openai/human-eval"&gt;an evaluation harness&lt;/a&gt; for a benchmark consisting of 164 Python programming problems based on publicly available code on GitHub. It was developed to test coding in particular.&lt;/p&gt;
&lt;p&gt;Eventually, though, experts found that the problem sets in HumanEval were insufficient and ambiguous (&lt;a href="https://arxiv.org/abs/2305.01210"&gt;Liu et al., 2023&lt;/a&gt;). HumanEval+ was released to include more tests, but the next benchmark&amp;rsquo;s authors &lt;a href="https://arxiv.org/abs/2403.07974"&gt;suggested that models might be overfitting&lt;/a&gt; to HumanEval+ as well, memorizing the dataset and answers rather than genuinely demonstrating reasoning ability.&lt;/p&gt;
&lt;h4 id="livecodebench-2024"&gt;LiveCodeBench (2024)&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://arxiv.org/abs/2403.07974"&gt;Jain et al.&lt;/a&gt; tried a different approach to HumanEval to avoid data contamination: it was released with a continuously-updated coding benchmark. Problems have release dates and models can only be evaluated using problems released &lt;em&gt;after&lt;/em&gt; their training data cutoff dates.&lt;/p&gt;
&lt;p&gt;LiveCodeBench represents a shift in benchmarks towards a more continuous, dynamic measure. However, the last submission to the benchmark was &lt;a href="https://github.com/LiveCodeBench/submissions"&gt;9 months ago&lt;/a&gt; at the time of this writing, and &lt;a href="https://livecodebench.github.io/"&gt;the leaderboard&lt;/a&gt; has not been updated since then either, suggesting the benchmark is no longer being actively maintained.&lt;/p&gt;
&lt;h4 id="swe-bench-2024"&gt;SWE-bench (2024)&lt;/h4&gt;
&lt;p&gt;This benchmark was created by &lt;a href="https://openreview.net/pdf?id=VTF8yNQM66"&gt;Jimenez et al.&lt;/a&gt; to include 2,294 actual GitHub issues from 12 Python projects. When it launched, it was a much harder benchmark than predecessors, with models scoring 2-4%. Today, models are scoring around 70-80% on the original benchmark. There were enough issues with the original&amp;rsquo;s dataset quality that variants were introduced, including &lt;a href="https://openai.com/index/introducing-swe-bench-verified/"&gt;OpenAI&amp;rsquo;s SWE-bench Verified&lt;/a&gt;. Today, &lt;a href="https://www.swebench.com/"&gt;the SWE-bench website&lt;/a&gt; shows these variants:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SWE-bench&lt;/li&gt;
&lt;li&gt;SWE-bench Verified&lt;/li&gt;
&lt;li&gt;SWE-bench Multilingual&lt;/li&gt;
&lt;li&gt;SWE-bench Multimodal&lt;/li&gt;
&lt;li&gt;SWE-bench Lite&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="agents-and-tool-use"&gt;Agents and tool use&lt;/h3&gt;
&lt;p&gt;This last category is a preview of where I think the field should go: benchmarks that measure &lt;em&gt;what a model does&lt;/em&gt; rather than just &lt;em&gt;what a model knows&lt;/em&gt;. Here are some of them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GAIA (&lt;a href="https://arxiv.org/abs/2311.12983"&gt;Mialon et al., 2023&lt;/a&gt;) — 466 real-world assistant tasks that combine web browsing, file reading, and multi-step reasoning. Easy for humans (92% success), hard for models (15% success for GPT-4), at least at launch.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tbench.ai/"&gt;Terminal-Bench&lt;/a&gt; — agents working in actual Linux terminals. Tasks include &amp;ldquo;build the Linux kernel from source&amp;rdquo; and &amp;ldquo;configure a git server plus a webserver on port 8080.&amp;rdquo; No mocks; if it doesn&amp;rsquo;t actually build, it fails.&lt;/li&gt;
&lt;li&gt;WebArena (&lt;a href="https://arxiv.org/abs/2307.13854"&gt;Zhou et al., 2023&lt;/a&gt;) — realistic simulated websites (Reddit, GitLab, e-commerce) where agents complete actual user goals like &amp;ldquo;filter the last six months of orders by refund status.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These benchmarks are harder to saturate than general-knowledge ones, because passing means the thing actually has to work in the real world. A model can memorise a question; it can&amp;rsquo;t memorise a Linux kernel that isn&amp;rsquo;t there until it builds it.&lt;/p&gt;
&lt;h2 id="the-wrong-answer-build-a-harder-general-benchmark"&gt;The wrong answer: Build a harder general benchmark&lt;/h2&gt;
&lt;p&gt;By now, you probably see that benchmarks tend to go the same way: A benchmark is created, models get too good at it and perform too well to be useful, and then a variant benchmark is created to address the problem.&lt;/p&gt;
&lt;p&gt;This is the &lt;em&gt;saturation problem&lt;/em&gt; in a nutshell: a benchmark that once provided meaningful information to help distinguish models eventually fails to do so because all the models&amp;rsquo; scores cluster at the top.&lt;/p&gt;
&lt;p&gt;Saturation occurs for two reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Contamination&lt;/em&gt;: Many benchmarks publish their problem sets online, and models train on data scraped from the web. The benchmark now measures memorization, not capability.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Overfitting&lt;/em&gt;: Model providers are incentivized to optimize specifically for gaming performance on benchmarks. Scores go up without corresponding capability improvements.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you have a party of wizards with 20 INT, &amp;ldquo;What&amp;rsquo;s your INT score?&amp;rdquo; stops being an interesting question because any wizard&amp;rsquo;s Fireball will hit the same. Building harder benchmarks is like an arms race for ability scores, when what you actually want to know is whether your wizard can kill a dragon.&lt;/p&gt;
&lt;p&gt;Harder benchmarks don&amp;rsquo;t tell us what we want to know: &lt;em&gt;can this model do my specific job?&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="the-right-answer-skill-checks-with-real-dcs"&gt;The right answer: skill checks with real DCs&lt;/h2&gt;
&lt;p&gt;The fix isn&amp;rsquo;t a harder ability check. It&amp;rsquo;s a different kind of check altogether. In D&amp;amp;D, straight ability checks are rare compared to skill checks. There are 18 official skills that break down the six ability scores into more granular activities. For example, your wizard is much more likely to roll one of these instead of a straight INT check:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arcana&lt;/li&gt;
&lt;li&gt;History&lt;/li&gt;
&lt;li&gt;Investigation&lt;/li&gt;
&lt;li&gt;Nature&lt;/li&gt;
&lt;li&gt;Religion&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these are still based on INT, but test narrow &lt;em&gt;types of intelligence&lt;/em&gt; rather than general intelligence.&lt;/p&gt;
&lt;p&gt;Specific, domain-grounded benchmarks are what the field actually needs. The evaluations that actually help practitioners share a structure: they test a specific skill in a specific context, and they&amp;rsquo;re judged by the people who have to live with the results.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://arxiv.org/abs/2009.13081"&gt;MedQA&lt;/a&gt; tests whether a model can answer the kind of clinical question a physician might face. &lt;a href="https://arxiv.org/abs/2308.11462"&gt;LegalBench&lt;/a&gt; tests whether a model can correctly identify enforceability clauses, classify contract language, and apply legal reasoning. &lt;a href="https://arxiv.org/abs/2311.11944"&gt;FinanceBench&lt;/a&gt; tests whether a model can answer the kind of question a financial analyst would actually ask about a real 10-K filing. None of these are trying to rank models on general intelligence. They&amp;rsquo;re asking the only question that matters downstream: &lt;em&gt;can this model do this specific job well enough?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This week, Grafana released &lt;a href="https://github.com/grafana/o11y-bench"&gt;o11y-bench&lt;/a&gt;, an open benchmark for observability-specific agent tasks. I&amp;rsquo;m biased — I work there — but it&amp;rsquo;s a useful illustration of the shape I&amp;rsquo;m describing. o11y-bench doesn&amp;rsquo;t ask whether a model is smart in general. It asks whether an agent can do the things observability engineers actually do: read production traces, correlate logs with metrics, figure out why the thing that&amp;rsquo;s supposed to be working isn&amp;rsquo;t. &lt;a href="https://o11ybench.ai/"&gt;Its leaderboard&lt;/a&gt; shows models&amp;rsquo; performance for each activity.&lt;/p&gt;
&lt;p&gt;Does that mean that more specific benchmarks won&amp;rsquo;t get saturated? No. We&amp;rsquo;ve already seen this play out with SWE-bench. But they&amp;rsquo;ll get saturated more slowly and remain more meaningful measures along the way.&lt;/p&gt;
&lt;p&gt;These are skill checks with DCs that matter to someone. They&amp;rsquo;re not trying to produce a single scalar ranking of &amp;ldquo;which model is smartest.&amp;rdquo; They&amp;rsquo;re asking whether the wizard recognizes the family crest belonging to a political faction or knows this specific cult&amp;rsquo;s practices, not whether the wizard is good at &amp;ldquo;wizarding&amp;rdquo; in the abstract.&lt;/p&gt;
&lt;h2 id="roll-for-initiative-what-this-means-in-practice"&gt;Roll for initiative: What this means in practice&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re an engineer picking a model for production: stop picking by leaderboard. Find or build an eval that reflects your actual use case. A handful of representative examples, graded the way you&amp;rsquo;d grade them if you were doing the work yourself, will tell you more than a dozen public benchmarks.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re a researcher thinking about what to build next: the interesting work is at the specific-and-grounded end of the spectrum, not the general-and-bigger end. Another harder general-knowledge benchmark will saturate in eighteen months. A well-designed domain benchmark, co-built with the people who actually do the work, can stay useful for years.&lt;/p&gt;
&lt;p&gt;And if you&amp;rsquo;re anyone else watching this field from the outside: be skeptical of the headlines. When a new model scores 94% on a benchmark you&amp;rsquo;ve never heard of, ask what it measures and whether the thing it measures is the thing you actually care about. Usually the answer is &amp;ldquo;not really,&amp;rdquo; and that&amp;rsquo;s the most important thing a benchmark score won&amp;rsquo;t tell you.&lt;/p&gt;
&lt;p&gt;The goal of a character sheet was never to produce one number that ranks the character. It was to give a DM enough information to run a meaningful encounter — and to give the player enough to know when to try, when to pass, and when to roll with advantage. LLM evaluation should work the same way. Not a ranking; a readiness check. Can this specific model clear this specific challenge? Roll for initiative.&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><item><title>Observability for GenAI Applications (Grafana ❤️🔥 OpenTelemetry Community Call #4)</title><link>https://nicolevanderhoeven.com/blog/20260121-gocc04-observability-for-genai-applications/</link><pubDate>Wed, 21 Jan 2026 16:00:00 +0100</pubDate><guid>https://nicolevanderhoeven.com/blog/20260121-gocc04-observability-for-genai-applications/</guid><description>&lt;p&gt;In this community call with my coworker Liudmila Molkova, we dove into the emerging field of observability for Generative AI applications. We explored how to instrument LLM-powered applications using OpenTelemetry, what metrics and traces matter most when monitoring AI workloads, and how to debug issues in complex AI pipelines. The discussion covered prompt tracing, token usage monitoring, latency considerations, and the unique challenges of observing non-deterministic AI systems.&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/LfDVygRWQJU?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;</description></item><item><title>AI Observability with Ishan Jain (Grafana Office Hours #29)</title><link>https://nicolevanderhoeven.com/blog/20241108-goh29-ai-observability-with-ishan-jain/</link><pubDate>Fri, 08 Nov 2024 18:24:29 +0100</pubDate><guid>https://nicolevanderhoeven.com/blog/20241108-goh29-ai-observability-with-ishan-jain/</guid><description>&lt;p&gt;In this Grafana Office Hours, Ishan Jain talks about AI Observability with Grafana: what it entails, factors to consider when monitoring and observing LLMs, and how to do it all with Grafana. He is joined by Senior Developer Advocate Nicole van der Hoeven.&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/9X7M-bvnZG0?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;</description></item></channel></rss>