{"id":1759,"date":"2026-07-28T11:03:44","date_gmt":"2026-07-28T18:03:44","guid":{"rendered":"https:\/\/www.kenwalger.com\/blog\/?p=1759"},"modified":"2026-07-28T11:03:48","modified_gmt":"2026-07-28T18:03:48","slug":"active-working-memory","status":"publish","type":"post","link":"https:\/\/www.kenwalger.com\/blog\/ai-engineering\/active-working-memory\/","title":{"rendered":"Active Working Memory: The RAM of Agentic Systems"},"content":{"rendered":"<p><em>Part 2 of the Building the AI Memory Stack series<\/em><\/p>\n<p>When I published the <a href=\"https:\/\/www.kenwalger.com\/blog\/ai-engineering\/architecture\/context-window-is-not-memory\/?utm_source=kenwalger_blog&#038;utm_medium=blog&#038;utm_campaign=building-the-ai-memory-stack\">first article<\/a> in this series, I thought I was writing about context windows.<\/p>\n<p>The more I wrote, the more I found myself bouncing between documents. I had the glossary open in one browser tab. The <a href=\"https:\/\/sovereignplatform.dev\/terms\/memory-as-infrastructure.html?utm_source=kenwalger_blog&#038;utm_medium=blog&#038;utm_campaign=building-the-ai-memory-stack\">Memory as Infrastructure<\/a> article was open in another. A third tab contained notes about <a href=\"https:\/\/sovereignplatform.dev\/terms\/context-hydration.html?utm_source=kenwalger_blog&#038;utm_medium=blog&#038;utm_campaign=building-the-ai-memory-stack\">Context Hydration<\/a>. GitHub was open with the SDK specifications, and a handful of Architecture Decision Records were sitting beside my editor.<\/p>\n<p>None of those documents individually contained &#8220;the answer.&#8221; Together, they formed the temporary collection of information I needed before I could make progress.<\/p>\n<p>Then something unexpected happened.<\/p>\n<p>I was no longer writing about context windows.<\/p>\n<p>I was reconstructing a memory hierarchy, and the context window was only its first layer.<\/p>\n<p>That is why this became a series.<\/p>\n<p>In Part 1, I argued that the context window is best understood as the CPU cache of an AI system. It is an execution surface, not a memory system. Like CPU cache, it is optimized for fast access and exists only for the duration of the work being performed.<\/p>\n<p>But caches do not populate themselves.<\/p>\n<p>Neither do context windows.<\/p>\n<h2>The Working Set Before the Work<\/h2>\n<p>Before I could write, I assembled a working set.<\/p>\n<pre><code class=\"language-text\">Browser tabs and open documents\n\n- Sovereign Systems glossary\n- Memory as Infrastructure\n- Context Hydration notes\n- SDK specifications\n- Architecture Decision Records\n- GitHub repository\n- Article draft\n\n            |\n            v\n\n    Active Working Memory\n\n            |\n            v\n\n      Context Window\n\n            |\n            v\n\n         Reasoning\n<\/code><\/pre>\n<p>That collection was not my long-term memory. It was a temporary working set assembled for one task. My brain still had to compare ideas, notice contradictions, and produce something new. The documents simply gave the reasoning process the information it needed.<\/p>\n<p>Agentic systems work in much the same way.<\/p>\n<p>Before a model begins reasoning, documents have been retrieved, tools have executed, state has been restored, policies evaluated, and responses normalized. The prompt is usually the final artifact produced by an orchestration layer, not the beginning of one.<\/p>\n<p>By the time the model receives its first token, dozens of retrieval, filtering, ranking, and assembly decisions may already have been made.<\/p>\n<p>That assembled execution state is what I call <strong><a href=\"https:\/\/sovereignplatform.dev\/terms\/active-working-memory.html?utm_source=kenwalger_blog&#038;utm_medium=blog&#038;utm_campaign=building-the-ai-memory-stack\">Active Working Memory<\/a><\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.kenwalger.com\/blog\/wp-content\/uploads\/2026\/07\/mermaid-diagram-2026-07-28-104256.png\" alt=\"Active Working Memory Diagram\" \/><\/p>\n<p>This article is about the second layer in that stack.<\/p>\n<h2>Models Reason. Applications Assemble.<\/h2>\n<p>One sentence captures the distinction this entire article is trying to make.<\/p>\n<blockquote><p>\n  <strong>Models reason. Applications assemble.<\/strong>\n<\/p><\/blockquote>\n<p>Those are different responsibilities.<\/p>\n<p>A model does not retrieve documents.<\/p>\n<p>A model does not decide which Git commit matters.<\/p>\n<p>A model does not know whether a tool response is stale.<\/p>\n<p>An application does.<\/p>\n<p>Consider a concrete case. An agent is asked to update a Python SDK.<\/p>\n<p>It retrieves the ADR describing the package boundary.<\/p>\n<p>It loads the glossary definition of Active Working Memory.<\/p>\n<p>It checks the current implementation on GitHub.<\/p>\n<p>Only then does it build the prompt.<\/p>\n<p>People often talk about &#8220;putting something into the context window.&#8221;<\/p>\n<p>That wording quietly suggests the context window is responsible for finding, selecting, and organizing information.<\/p>\n<p>It isn&#8217;t.<\/p>\n<p>By the time inference begins, the application has already decided what the model will, and will not, be allowed to see.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.kenwalger.com\/blog\/wp-content\/uploads\/2026\/07\/mermaid-diagram-2026-07-28-104408-scaled.png\" alt=\"Working Memory Sequence Diagram\" \/><\/p>\n<p>The context window does not begin the process. It receives the result of the process.<\/p>\n<p>Many failures blamed on the model are actually failures of context assembly. The wrong evidence was retrieved. A stale document won. A constraint never made it into the working set. Those are architecture problems before they are model problems.<\/p>\n<h2>RAM for Agentic Systems<\/h2>\n<p>If the context window is the CPU cache, Active Working Memory is the system RAM.<\/p>\n<table>\n<thead>\n<tr>\n<th>Layer<\/th>\n<th>Primary Responsibility<\/th>\n<th>Typical Owner<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Durable Memory<\/td>\n<td>Preserve knowledge<\/td>\n<td>Storage \/ Application<\/td>\n<\/tr>\n<tr>\n<td>Active Working Memory<\/td>\n<td>Assemble task state<\/td>\n<td>Orchestrator<\/td>\n<\/tr>\n<tr>\n<td>Context Window<\/td>\n<td>Present selected information<\/td>\n<td>Runtime<\/td>\n<\/tr>\n<tr>\n<td>Model<\/td>\n<td>Perform inference<\/td>\n<td>LLM<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Each layer has a distinct responsibility. No layer substitutes for another. A larger context window does not repair poor selection, and a better model cannot reason over evidence it never receives.<\/p>\n<h2>Search Finds. Context Assembly Decides.<\/h2>\n<p>Search answers one question.<\/p>\n<p><em>What information exists?<\/em><\/p>\n<p>Context assembly answers another.<\/p>\n<p><em>Given this task, what information belongs together?<\/em><\/p>\n<p>Those sound similar. Architecturally, they are completely different.<\/p>\n<p>Active Working Memory presents that second decision to the model.<\/p>\n<p>Two systems can use the same model, the same context window, and the same knowledge store yet produce very different results, because one assembles a concise, relevant working set while the other floods the model with loosely related information.<\/p>\n<p>The model is identical.<\/p>\n<p>The memory architecture is not.<\/p>\n<h2>An Architectural Boundary<\/h2>\n<p>Once Active Working Memory is treated as a real layer, context assembly stops looking like prompt engineering and starts looking like systems architecture.<\/p>\n<p>Information crosses this boundary only after decisions have been made about relevance, authority, recency, format, and priority.<\/p>\n<p>Every unnecessary document increases <a href=\"https:\/\/sovereignplatform.dev\/terms\/context-tax.html?utm_source=kenwalger_blog&#038;utm_medium=blog&#038;utm_campaign=building-the-ai-memory-stack\">Context Tax<\/a>. Every verbose tool response competes for attention. Every missing source creates a blind spot the model cannot recognize from inside the window.<\/p>\n<p>The context window can only reason over what Active Working Memory hands it.<\/p>\n<h2>Looking Ahead<\/h2>\n<p>The working set I assembled while writing this article disappeared as soon as the article was finished.<\/p>\n<p>The article remained.<\/p>\n<p>That distinction turns out to matter.<\/p>\n<p>Agentic systems face the same decision. What belongs only in today&#8217;s working set? What deserves to become tomorrow&#8217;s memory?<\/p>\n<p>That is where Part 3 begins.<\/p>\n<p>Models don&#8217;t assemble context. They inherit it.<\/p>\n<p><strong>Working memory is not where knowledge lives. It is where knowledge collaborates.<\/strong><\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-48 synved-social-resolution-single synved-social-provider-facebook nolightbox\" data-provider=\"facebook\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Facebook\" href=\"https:\/\/www.facebook.com\/sharer.php?u=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F1759&amp;t=Active%20Working%20Memory%3A%20The%20RAM%20of%20Agentic%20Systems&amp;s=100&amp;p[url]=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F1759&amp;p[images][0]=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-content%2Fuploads%2F2026%2F07%2Fmermaid-diagram-2026-07-28-104256.png&amp;p[title]=Active%20Working%20Memory%3A%20The%20RAM%20of%20Agentic%20Systems\" style=\"font-size: 0px;width:48px;height:48px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"Facebook\" title=\"Share on Facebook\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"48\" height=\"48\" style=\"display: inline;width:48px;height:48px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/www.kenwalger.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/96x96\/facebook.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-48 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F1759&amp;text=Hey%20check%20this%20out\" style=\"font-size: 0px;width:48px;height:48px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"48\" height=\"48\" style=\"display: inline;width:48px;height:48px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/www.kenwalger.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/96x96\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-48 synved-social-resolution-single synved-social-provider-reddit nolightbox\" data-provider=\"reddit\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Reddit\" href=\"https:\/\/www.reddit.com\/submit?url=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F1759&amp;title=Active%20Working%20Memory%3A%20The%20RAM%20of%20Agentic%20Systems\" style=\"font-size: 0px;width:48px;height:48px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"reddit\" title=\"Share on Reddit\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"48\" height=\"48\" style=\"display: inline;width:48px;height:48px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/www.kenwalger.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/96x96\/reddit.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-48 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&amp;url=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F1759&amp;title=Active%20Working%20Memory%3A%20The%20RAM%20of%20Agentic%20Systems\" style=\"font-size: 0px;width:48px;height:48px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"48\" height=\"48\" style=\"display: inline;width:48px;height:48px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/www.kenwalger.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/96x96\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-48 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Active%20Working%20Memory%3A%20The%20RAM%20of%20Agentic%20Systems&amp;body=Hey%20check%20this%20out:%20https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F1759\" style=\"font-size: 0px;width:48px;height:48px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"48\" height=\"48\" style=\"display: inline;width:48px;height:48px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/www.kenwalger.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/96x96\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>Part 2 of the Building the AI Memory Stack series When I published the first article in this series, I thought I was writing about context windows. The more I wrote, the more I found myself bouncing between documents. I had the glossary open in one browser tab. The Memory as Infrastructure article was open &hellip; <a href=\"https:\/\/www.kenwalger.com\/blog\/ai-engineering\/active-working-memory\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Active Working Memory: The RAM of Agentic Systems&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pmpro_default_level":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1807,1831],"tags":[1877,1871,1879,1873,1876,1868,1870,1805,1880],"yst_prominent_words":[],"class_list":["post-1759","post","type-post","status-publish","format-standard","hentry","category-ai-engineering","category-architecture","tag-active-working-memory","tag-agentic-ai","tag-ai-memory-architecture","tag-ai-systems-design","tag-context-tax","tag-context-window","tag-memory-as-infrastructure","tag-rag","tag-retrieval-orchestration","pmpro-has-access"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8lx70-sn","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/posts\/1759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/comments?post=1759"}],"version-history":[{"count":4,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/posts\/1759\/revisions"}],"predecessor-version":[{"id":1765,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/posts\/1759\/revisions\/1765"}],"wp:attachment":[{"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/media?parent=1759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/categories?post=1759"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/tags?post=1759"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/www.kenwalger.com\/blog\/wp-json\/wp\/v2\/yst_prominent_words?post=1759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}