<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[agentbuild.ai]]></title><description><![CDATA[AgentBuild brings you clear tips, true stories, real connections, and handy tools to help you learn about AI, build great agents, and share your wins. Read each issue, act on one idea, and together we’ll guide AI toward a brighter tomorrow.]]></description><link>https://newsletter.agentbuild.ai</link><image><url>https://substackcdn.com/image/fetch/$s_!OIBg!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3453368a-da00-4960-b174-e3313b941314_256x256.png</url><title>agentbuild.ai</title><link>https://newsletter.agentbuild.ai</link></image><generator>Substack</generator><lastBuildDate>Wed, 12 Aug 2026 10:39:29 GMT</lastBuildDate><atom:link href="https://newsletter.agentbuild.ai/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Sandipan Bhaumik]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[sanbhaumik@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[sanbhaumik@substack.com]]></itunes:email><itunes:name><![CDATA[Sandipan Bhaumik]]></itunes:name></itunes:owner><itunes:author><![CDATA[Sandipan Bhaumik]]></itunes:author><googleplay:owner><![CDATA[sanbhaumik@substack.com]]></googleplay:owner><googleplay:email><![CDATA[sanbhaumik@substack.com]]></googleplay:email><googleplay:author><![CDATA[Sandipan Bhaumik]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Everyone Is Optimising the Wrong Thing in AI Agents]]></title><description><![CDATA[Most teams spend weeks choosing the right model. The real competitive advantage isn't choosing a better model. It's designing better data infrastructure.]]></description><link>https://newsletter.agentbuild.ai/p/why-most-ai-agents-fail-in-production</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/why-most-ai-agents-fail-in-production</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 01 Aug 2026 12:03:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5755f8db-ae97-4739-bcc3-a1f3157cb874_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Before I begin the article, I would like to make a humble request.</strong></em></p><p>One of my goals with this newsletter is to make every issue genuinely useful for you. Rather than guessing what you&#8217;d like to read, I&#8217;ve put together a short survey to understand the topics, challenges, and formats that would be most valuable to you.</p><p>It only takes 30 seconds to complete, and your feedback will directly influence the future content of this newsletter. If there&#8217;s a topic you&#8217;ve been struggling with or would like me to cover, this is the best way to let me know.</p><h3 style="text-align: center;"><strong><span>&#128073; </span><a href="https://forms.gle/8TZVQ1qKiRefLCkdA">Take the survey here</a></strong></h3><p>Thank you, it genuinely helps me write better content for this community.</p><div><hr></div><p>Over the past year, I&#8217;ve had countless conversations with teams building AI agents.</p><p>The discussion almost always starts the same way.</p><p><em>&#8220;Which model should we use?&#8221;</em></p><p>GPT-5? Claude? Gemini? An open-source model?</p><p>It&#8217;s a reasonable question. But it&#8217;s rarely the one that determines whether the project succeeds.</p><p>In production, AI agents usually don&#8217;t fail because the LLM isn&#8217;t intelligent enough.</p><p>They fail because the data infrastructure wasn&#8217;t designed for agents.</p><div><hr></div><h3>Model problem is an illusion, mostly</h3><p>When an agent gives a poor answer, it&#8217;s tempting to blame the model.</p><p>In reality, the root cause is often somewhere else.</p><ul><li><p>The agent couldn&#8217;t find the right information.</p></li><li><p>The retrieved context was outdated.</p></li><li><p>The metadata was incomplete.</p></li><li><p>Permissions prevented access to critical documents.</p></li><li><p>Tool outputs were inconsistent.</p></li><li><p>There was no reliable way to evaluate whether the response was correct.</p></li></ul><p>Changing the model may improve the symptoms.</p><p>But it doesn&#8217;t fix the underlying system.</p><div><hr></div><h3>AI agents are data systems</h3><p>Traditional software follows predefined logic.</p><p>LLM applications generate responses.</p><p>AI agents do something more demanding.</p><p>They continuously retrieve context, invoke tools, maintain memory, reason across multiple steps, and make decisions based on dynamic information.</p><p>That creates different engineering challenge.</p><p>The bottleneck is no longer model capability. The models are great.</p><p>It&#8217;s the quality of the surrounding data system.</p><div><hr></div><h3>Four infrastructure questions you should answer</h3><p>Before choosing an LLM, I believe every architecture review should answer these four questions.</p><ol><li><p><strong>How does the agent acquire context?</strong></p></li></ol><ul><li><p>Where does information come from?</p></li><li><p>Structured databases?</p></li><li><p>Documents?</p></li><li><p>Knowledge graphs?</p></li><li><p>Streaming events?</p></li><li><p>How is relevance determined?</p></li><li><p>How is freshness maintained?</p><p></p></li></ul><ol start="2"><li><p><strong>How does the agent remember?</strong></p><p></p><p>Memory isn&#8217;t just conversation history. You need to define:</p></li></ol><ul><li><p>session memory</p></li><li><p>long-term memory</p></li><li><p>organisational knowledge</p></li><li><p>user-specific context</p></li><li><p>retention and expiry policies</p></li></ul><p>       Memory is a data architecture problem long before it&#8217;s an AI problem.</p><ol start="3"><li><p><strong>How does the agent interact with enterprise systems?</strong></p></li></ol><p>       Most production agents spend more time calling APIs than generating text.</p><ul><li><p>Can tools be discovered?</p></li><li><p>Are they authenticated?</p></li><li><p>Are outputs standardised?</p></li><li><p>Can failures be retried?</p></li><li><p>How are side effects controlled?</p></li></ul><p>        These questions often determine reliability more than model quality.</p><ol start="5"><li><p><strong>How will success be measured?</strong></p></li></ol><p>        This is the question I see missed most often.</p><p>        Teams build agents first. Evaluation comes later.</p><p>         Instead, define success before implementation.</p><ul><li><p> What does a correct response look like?</p></li><li><p>What datasets will validate it?</p></li><li><p>What metrics matter?</p><ul><li><p>Task completion</p></li><li><p>Tool accuracy</p></li><li><p>Groundedness</p></li><li><p>Latency</p></li><li><p>Cost</p></li><li><p>User satisfaction</p></li></ul></li></ul><p>        If you can&#8217;t measure quality, you can&#8217;t improve it.</p><div><hr></div><h3>Your role is changing</h3><p>The next generation of engineers will be distinguished by designing systems that give any capable model the right information, at the right time, with the right controls. </p><p>Models will continue to improve.</p><p>The system around it remains the long-term differentiator.</p><p>That&#8217;s where architectural decisions create lasting advantage.</p><div><hr></div><h3>Want to go deeper?</h3><p>This article only scratches the surface.</p><p>Designing data infrastructure for AI agents is a discipline in its own right, covering topics such as context engineering, memory architectures, retrieval strategies, evaluation frameworks, tool integration, governance, and observability. These are the decisions that determine whether an agent works reliably in production.</p><p>If you&#8217;re a software engineer, data engineer, platform engineer, or architect looking to build production-grade AI systems, I&#8217;ve partnered with Packt to deliver a hands-on workshop on <strong><a href="https://www.linkedin.com/safety/go?url=https%3A%2F%2Fwww.eventbrite.co.uk%2Fe%2Fdesigning-data-infrastructure-for-ai-agents-llms-tickets-1995672648614%3Faff%3Dspeaker%26discount%3Dspeaker&amp;trk=flagship-messaging-web&amp;messageThreadUrn=urn%3Ali%3AmessagingThread%3A2-OTIwMDYzOGMtNDg1ZC00OGY5LTgzZjMtNGE2ZjBiYWYwYzJmXzEwMA%3D%3D&amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_messaging_conversation_detail%3BfMtzvYNvTPW%2B6JVuUTAjqw%3D%3D">Designing Data Infrastructure for AI Agents</a></strong>.</p><p>Rather than focusing on prompt engineering or model comparisons, we&#8217;ll work through the architectural patterns, design principles, and practical exercises needed to build agent systems that are scalable, reliable, and maintainable.</p><p><strong>&#128073; <a href="https://www.linkedin.com/safety/go?url=https%3A%2F%2Fwww.eventbrite.co.uk%2Fe%2Fdesigning-data-infrastructure-for-ai-agents-llms-tickets-1995672648614%3Faff%3Dspeaker%26discount%3Dspeaker&amp;trk=flagship-messaging-web&amp;messageThreadUrn=urn%3Ali%3AmessagingThread%3A2-OTIwMDYzOGMtNDg1ZC00OGY5LTgzZjMtNGE2ZjBiYWYwYzJmXzEwMA%3D%3D&amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_messaging_conversation_detail%3BfMtzvYNvTPW%2B6JVuUTAjqw%3D%3D">[Register for the Packt Workshop]</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_9Mw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_9Mw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png 424w, https://substackcdn.com/image/fetch/$s_!_9Mw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png 848w, https://substackcdn.com/image/fetch/$s_!_9Mw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png 1272w, https://substackcdn.com/image/fetch/$s_!_9Mw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_9Mw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png" width="1869" height="934" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:934,&quot;width&quot;:1869,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2002684,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/209314757?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09aada6f-fb52-4225-bb0a-fcb615bcfabc_1876x934.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_9Mw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png 424w, https://substackcdn.com/image/fetch/$s_!_9Mw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png 848w, https://substackcdn.com/image/fetch/$s_!_9Mw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png 1272w, https://substackcdn.com/image/fetch/$s_!_9Mw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a334dd7-1773-4275-8631-0de627ba7306_1869x934.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I hope to see some of you there.<br><br>Talk soon,<br>Sandi.</p><div><hr></div><p><em><span>P.S. If you&#8217;re new here - </span><strong>welcome</strong><span> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</span></em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br><span>More valuable content coming your way.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Here’s Everything My Substack Dashboard Says]]></title><description><![CDATA[I opened up my Substack analytics - open rates, views, growth, all of it. Now I need two minutes of yours to decide what comes next.]]></description><link>https://newsletter.agentbuild.ai/p/heres-everything-my-substack-dashboard</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/heres-everything-my-substack-dashboard</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Tue, 28 Jul 2026 10:30:34 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d644f1b4-f926-4592-920c-2a6fa13294f7_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today, I&#8217;m opening up my Substack dashboard and showing you exactly what&#8217;s working, what isn&#8217;t, and where I honestly stand. <br><br>I want to be transparent with you folks. You give me your valuable time and you deserve to know this.</p><p>Six months ago, AgentBuild was a few hundred people. Today, it&#8217;s <strong>1100+</strong>, spread across 73 countries - from Bangalore to Boston to Bradwell.</p><p>I want to index on proving value over increasing subscriber count. </p><p>Hence, I&#8217;m going to ask for your help.</p><div><hr></div><h2>First, the Growth Curve</h2><p>A year ago, AgentBuild had roughly 300 followers. Today it&#8217;s 1,158 - nearly a 4x jump, with the steepest acceleration happening in just the last four months. Something clicked around April, right when I doubled down on decision traces, agent registries, and evaluation frameworks instead of chasing whatever AI news cycle was trending that week.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QZOl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QZOl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png 424w, https://substackcdn.com/image/fetch/$s_!QZOl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png 848w, https://substackcdn.com/image/fetch/$s_!QZOl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png 1272w, https://substackcdn.com/image/fetch/$s_!QZOl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QZOl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png" width="1456" height="665" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:665,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:174952,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/208694719?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QZOl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png 424w, https://substackcdn.com/image/fetch/$s_!QZOl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png 848w, https://substackcdn.com/image/fetch/$s_!QZOl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png 1272w, https://substackcdn.com/image/fetch/$s_!QZOl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9379568f-64e8-4497-bcd2-fe71ff286bbc_1678x766.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Where you&#8217;re all reading from:</strong></p><ul><li><p>India: 37%</p></li><li><p>United States: 24%</p></li><li><p>United Kingdom: 7%</p></li><li><p>Germany: 3%</p></li><li><p>Canada: 2%</p></li><li><p>Plus pockets across 68 other countries</p></li></ul><p>That&#8217;s a genuinely global room of practitioners, which still blows my mind every time I look at it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Where I stand today</h2><p>My last 20 posts averaged an open rate between <strong>22.5% and 30.3%</strong>, with a 30-day rolling average of <strong>25.24%</strong>.</p><p>Let&#8217;s put that in context:</p><ul><li><p><strong>General email marketing average:</strong> ~21-22% open rate</p></li><li><p><strong>Substack&#8217;s platform-wide headline number:</strong> often quoted at 35 - 37%</p></li><li><p><strong>Real-world compressed range for niche newsletters in 2025-2026:</strong> closer to 28-32%</p></li></ul><p><strong>So where does that put AgentBuild?</strong> </p><p>Comfortably ahead of generic marketing email, but trailing the Substack averages. I call it &#8220;solid, not spectacular.&#8221; And that&#8217;s fine.</p><p>My best-performing piece, &#8220;Why Solution Architects Are the Real Force Behind Enterprise AI Transformation,&#8221; hit a 30.28% open rate - proof that when the topic lands, the number moves. Which is exactly why I want your input on what topics actually land for you.</p><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;482ff7f9-33bd-47c9-8ed5-1b7c6b56f5e5&quot;,&quot;caption&quot;:&quot;There&#8217;s a role inside every enterprise AI programme that nobody has a clean job title for. It isn&#8217;t the VP who sponsors the initiative. It isn&#8217;t the data scientist who builds the model. It isn&#8217;t the product manager who writes the requirements.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Why Solution Architects Are the Real Force Behind Enterprise AI Transformation&quot;,&quot;publishedBylines&quot;:[],&quot;post_date&quot;:&quot;2026-04-26T10:43:30.092Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/141a97f5-4092-4502-80da-cb58adb9f80a_1280x720.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://newsletter.agentbuild.ai/p/why-solution-architects-are-the-real&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:195512222,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:7,&quot;comment_count&quot;:5,&quot;publication_id&quot;:2211527,&quot;publication_name&quot;:&quot;agentbuild.ai&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!OIBg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3453368a-da00-4960-b174-e3313b941314_256x256.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><p>My most-read piece by a wide margin: <strong>&#8220;Why Agent-to-Agent Communication Fails - How to Design for Failure&#8221;</strong> pulled 897 views, nearly double my typical post. </p><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d44e35a2-f768-483e-9409-e6ee5be3eb85&quot;,&quot;caption&quot;:&quot;Hey everyone,&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Why Agent-to-Agent Communication Fails - How to Design for Failure&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:193058051,&quot;name&quot;:&quot;Sandipan Bhaumik&quot;,&quot;bio&quot;:&quot;I&#8217;ve spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, I share how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/651c04c2-d92e-4a2e-905f-a59346e3e950_1024x1024.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-16T13:02:45.412Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2aeaa59e-f607-44e2-8c59-c89e34f20306_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://newsletter.agentbuild.ai/p/why-agent-to-agent-communication&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:197971759,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:26,&quot;comment_count&quot;:12,&quot;publication_id&quot;:2211527,&quot;publication_name&quot;:&quot;agentbuild.ai&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!OIBg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3453368a-da00-4960-b174-e3313b941314_256x256.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><p>Close behind: my two-part series on <a href="https://newsletter.agentbuild.ai/p/how-to-build-an-ai-agent-registry">building an AI agent registry</a> (586 and 476 views), and <a href="https://newsletter.agentbuild.ai/p/the-evaluation-graph-why-your-ai?r=36xwjn">&#8220;The Evaluation Graph: Why Your AI Pipelines Are Lying to You&#8221;</a> (466 views). </p><p><strong>There&#8217;s a clear pattern here - you want tactical, failure-mode-focused content over broad conceptual overviews.</strong></p><div><hr></div><h2>Take the survey, please</h2><p>If I&#8217;m grading myself against the benchmarks: <strong>good, not great.</strong> I&#8217;m beating the average email newsletter by a healthy margin, but I&#8217;m not yet in &#8220;50%+ open rate, readers treat this like a must-open&#8221; territory that the best niche Substacks report. </p><blockquote><p>There&#8217;s a room to close that gap and the fastest way to close it is writing more of what you actually want, instead of guessing.</p></blockquote><p></p><p>Hence, <strong>I&#8217;ve put together a short survey </strong>to answer three things: </p><ul><li><p>what topics you want more of, </p></li><li><p>what format works best for you, </p></li><li><p>which of the three community features should I launch</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!21YQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!21YQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png 424w, https://substackcdn.com/image/fetch/$s_!21YQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png 848w, https://substackcdn.com/image/fetch/$s_!21YQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png 1272w, https://substackcdn.com/image/fetch/$s_!21YQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!21YQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png" width="664" height="856" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:856,&quot;width&quot;:664,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Your survey deserves a good response rate! 10 tips for success - Sheila B  Robinson&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Your survey deserves a good response rate! 10 tips for success - Sheila B  Robinson" title="Your survey deserves a good response rate! 10 tips for success - Sheila B  Robinson" srcset="https://substackcdn.com/image/fetch/$s_!21YQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png 424w, https://substackcdn.com/image/fetch/$s_!21YQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png 848w, https://substackcdn.com/image/fetch/$s_!21YQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png 1272w, https://substackcdn.com/image/fetch/$s_!21YQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bc1122-b147-425b-9b21-fb6a8726e1bb_664x856.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3 style="text-align: center;">&#128073; <strong><a href="https://forms.gle/8TZVQ1qKiRefLCkdA">Take the survey here</a></strong></h3><p></p><p>Your answers will directly shape the next quarter of AgentBuild issues. This isn&#8217;t a formality - I&#8217;m genuinely building the next stretch of this newsletter around what you tell me. I don&#8217;t want to make assumptions.</p><div><hr></div><h2>What I&#8217;m Building Next</h2><p>Based on the feedback I&#8217;ve already gathered, three things kept coming up as the most wanted next step for this community:</p><ol><li><p><strong>Ask Me Anything sessions</strong> - live, unscripted Q&amp;A where you bring your hardest production AI problems and I answer in real time.</p></li><li><p><strong>Virtual meetups</strong> - smaller group calls connecting practitioners across India, the US, UK, and everywhere else you&#8217;re reading from.</p></li><li><p><strong>A reader community forum</strong> - a space to swap notes and debate frameworks between issues, not just consume them passively.</p></li></ol><p>I&#8217;m committing to build all three. </p><p>The only question left is sequencing - which one should I do first?<br><br>Tell me in the survey above. </p><p>Thank you for being part of the community. I am focusing on delivering value to each of you. Feel free to reach out if you need any help.</p><p>Talk soon,<br>Sandi</p><h3 style="text-align: center;">&#128073; <strong><a href="https://forms.gle/8TZVQ1qKiRefLCkdA">Take the survey here</a></strong></h3><div><hr></div><p><em><span>P.S. If you&#8217;re new here - </span><strong>welcome</strong><span> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</span></em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br><span>More valuable content coming your way.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Why Enterprise AI Needs an Ontology]]></title><description><![CDATA[Ontology is the most talked about topic in Enterprise AI right now. Let's explore why it is important, what it is, and how to build one.]]></description><link>https://newsletter.agentbuild.ai/p/why-enterprise-ai-needs-an-ontology</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/why-enterprise-ai-needs-an-ontology</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 25 Jul 2026 13:03:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/EVlIJyZ1g04" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Six months ago, ontology was a word you heard from librarians and pharma researchers. Now it&#8217;s in every third architecture review I sit in. Teams that spent 2025 building RAG pipelines are arriving at the same problem now: &#8220;<strong>retrieval works, generation is fluent, and the answers are still wrong. WTF!&#8221;</strong></p><p>Palantir built a business on this word. Every catalogue vendor has quietly rebadged its glossary as a semantic layer. Features tagged with the word &#8220;Ontology&#8220; are being released. </p><blockquote><p>Underneath the marketing there&#8217;s a real engineering shift, and it&#8217;s worth separating the two.</p></blockquote><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.agentbuild.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Why Ontology matters for enterprise AI?</h2><p>An LLM reads your data. It doesn&#8217;t understand your business, and nothing in your stack is currently telling it the difference.</p><p>Ask three systems what a customer is. Sales counts anyone who signed. Support counts anyone with a login, which sweeps in two people who never bought. Finance only counts accounts that have paid an invoice. The gap between those definitions is real money, and the only place it&#8217;s written down is in the head of the employees.</p><p>So when someone asks the AI how many customers you have, retrieval pulls all three definitions into the same context and the model hands back one number. It won&#8217;t mention that it merged three incompatible populations to get there, and you&#8217;ve got nothing to check it against.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zJ9Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zJ9Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png 424w, https://substackcdn.com/image/fetch/$s_!zJ9Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png 848w, https://substackcdn.com/image/fetch/$s_!zJ9Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png 1272w, https://substackcdn.com/image/fetch/$s_!zJ9Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zJ9Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png" width="1424" height="1186" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1186,&quot;width&quot;:1424,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:161963,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/208351996?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zJ9Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png 424w, https://substackcdn.com/image/fetch/$s_!zJ9Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png 848w, https://substackcdn.com/image/fetch/$s_!zJ9Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png 1272w, https://substackcdn.com/image/fetch/$s_!zJ9Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95c7d7d9-3411-4855-b304-bd881d62d4de_1424x1186.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A glossary won&#8217;t save you, because a glossary is written for people to read, not for a pipeline to enforce. A tidier schema won&#8217;t either. A foreign key can say two tables are related; it can&#8217;t say what the relationship means. That missing layer is what an ontology holds, in a form the machine reads at query time rather than a form a human reads in a wiki.</p><p>It becomes even more serious in the write path. A chatbot that miscounts customers gives a wrong answer. An agent that miscounts and can act on it does something about it, mails the wrong segment or moves the wrong forecast. That&#8217;s roughly when the word &#8220;ontology&#8220; started coming up in architecture reviews.</p><div><hr></div><h2>What is an Ontology?</h2><p>The textbook definition is Gruber&#8217;s: </p><blockquote><p>an ontology is a <em>formal, explicit specification of a shared conceptualisation.</em></p></blockquote><p>Let&#8217;s look at the four words:</p><ul><li><p>A <em>conceptualisation</em> is the abstract model of what exists in a domain. It&#8217;s already in everyone&#8217;s head, whether written down or not. </p></li><li><p><em>Explicit</em> means it&#8217;s written down. </p></li><li><p><em>Formal</em> means a machine can act on it, not just a person read it. </p></li><li><p><em>Shared</em> means it&#8217;s agreed and owned across a community, not one architect&#8217;s private diagram.</p></li></ul><p>Mechanically, you write statements as triples: subject, predicate, object. </p><p>Here&#8217;s a fragment in Turtle:</p><pre><code><code>:Customer    a  owl:Class .
:PayingCustomer  rdfs:subClassOf  :Customer .
:placed      a  owl:ObjectProperty ;
    rdfs:domain  :Customer ;
    rdfs:range   :Order .</code></code></pre><p>The last block says something a foreign key cannot: <code>placed</code> only ever runs from a customer to an order. Assert that some account placed an order, and a reasoner infers the account is a customer. Nobody typed that fact. It follows.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XtNc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XtNc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png 424w, https://substackcdn.com/image/fetch/$s_!XtNc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png 848w, https://substackcdn.com/image/fetch/$s_!XtNc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png 1272w, https://substackcdn.com/image/fetch/$s_!XtNc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XtNc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png" width="1456" height="1079" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1079,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:193734,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/208351996?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XtNc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png 424w, https://substackcdn.com/image/fetch/$s_!XtNc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png 848w, https://substackcdn.com/image/fetch/$s_!XtNc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png 1272w, https://substackcdn.com/image/fetch/$s_!XtNc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b3a82-e1d6-422f-b464-93c8a7794488_1506x1116.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Then you query the meaning instead of the tables:</p><p>sparql</p><pre><code><code>SELECT ?customer WHERE {
  ?customer  a        :PayingCustomer ;
             :placed  ?order .
}</code></code></pre><p>This returns paying customers across every source system feeding the graph, because the definition of &#8220;paying customer&#8221; lives in one place now instead of three. That&#8217;s the line between a schema and an ontology. </p><blockquote><p>A schema constrains data for one application. An ontology models a domain for many, and it entails things you never wrote down.</p></blockquote><div><hr></div><h2>How to actually build one</h2><p>This is very new for most companies. There is no fromal playbook - but I can see a number of guidances coming out. There are many issues I see with ontology imlementation. Usually a modelling team would take nine months to produce two thousand classes, and nobody uses it. That&#8217;s costly.</p><p>Given what I have learnt so far, I can roughly put some thoughts on the implementation, already working ins ome enteprrises: </p><ol><li><p><strong>Start with competency questions. </strong>Write the twenty questions the ontology must answer, in business language, before you model anything. &#8220;Which counterparties have aggregate credit exposure above &#163;50m across all subsidiaries?&#8221; If your model answers it, that part is done. If you can&#8217;t write the questions, you don&#8217;t have a use case, you have a vocabulary project.</p></li><li><p><strong>Reuse before you build.</strong> FIBO already models counterparty, legal entity, and financial instrument, with a decade of EDM Council work behind it. SNOMED CT has done clinical terms. Your novel IP is the last 10% specific to your firm, not the definition of a legal entity. Reuses existing artefacts.</p></li><li><p><strong>Treat it as software.</strong> Ontologies rot faster than code because nobody owns them. Put the files in Git. Write SHACL shapes as your tests and run them in CI, so a change that breaks a downstream contract fails the build rather than a quarterly report. Give every module a named business owner who signs off changes, and version it properly.</p></li><li><p><strong>Ship thin vertical slices tied to one workflow. </strong>One agent, one domain, one set of competency questions, in production. The organisational fight you&#8217;re picking is agreement on what words mean, and that fight is much easier to win on a small surface with a working demo behind it.</p></li></ol><div><hr></div><h2>The takeaway</h2><p>The ontology conversation isn&#8217;t a semantic web revival. It&#8217;s what happens when systems start acting on their own and the industry discovers it never wrote down what anything means.</p><p>I went deep on this with Jessica Talisman, who has spent her career on taxonomy and ontology work at the sharp end of large organisations. We got into where taxonomies stop and ontologies start, what breaks at enterprise scale, and why most of the failures are organisational rather than technical. Spend sometime this weeked, watch it, and let me know how you found it.</p><div id="youtube2-EVlIJyZ1g04" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;EVlIJyZ1g04&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/EVlIJyZ1g04?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Hope you enjoy it.<br>Happy Weekend.</p><p>Talk soon, <br>Sandi</p><div><hr></div><p><em><span>P.S. If you&#8217;re new here - </span><strong>welcome</strong><span> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</span></em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br><br><br><span>More valuable content coming your way.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><p>Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.agentbuild.ai/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Why AI-written tests pass but still miss the bug]]></title><description><![CDATA[When an AI writes both your code and your tests, the tests stop protecting you. I write about this problem in plain terms and provide a step-by-step fix.]]></description><link>https://newsletter.agentbuild.ai/p/why-ai-written-tests-pass-but-still</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/why-ai-written-tests-pass-but-still</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 18 Jul 2026 13:02:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/04aec3b5-90f4-4b90-a3df-d7c295be9bd9_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>I have been building a lot usign coding agents nowadays. I mostly use Claude Code in VS Code and Cursor. While using Databricks I love using Genie Code - it keeps all the context from the lakehouse and makes it easy to build reliable ML or AI solutions.  </span></p><p><span>If you are buidling with coding agents, you have surely faced this problem. You ask the coding agent to build a feature, it writes the code, writes the tests, and reports success. However, you still find bug was there the whole time. The tests didn&#8217;t catch it. This is a common problem and in this article I will share what works for me most of the time.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3><span>Why this happens</span></h3><p><span>Think about what a test is actually for. A test is a second opinion. You write code that you </span><em><span>think</span></em><span> is right, and you write a test that checks whether it really is. </span><strong><span>The value comes from those two things being separate.</span></strong><span> The code is your attempt. The test is the check on your attempt. If they disagree, you&#8217;ve caught something.</span></p><p><span>Now here&#8217;s what goes wrong with AI.</span></p><p><span>When you ask an AI to write the code </span><em><span>and</span></em><span> the tests in one go, you lose the separation. This creates a </span><strong><span>correlated failure</span></strong><span> or </span><strong><span>model bias propagation</span></strong><span>. Because the LLM shares a &#8220;latent space&#8221; between the test and the implementation, it is statistically likely to produce tests that validate its own mistakes-the model simply predicts the most probable test code given the most probable implementation code it just generated. The code has the bug, and the test is written to expect the buggy behaviour.</span></p><p><span>Consider a simple shopping cart: you ask the AI to calculate the total price, including a 10% tax. The AI rushes the job and writes a calculation function that accidentally skips the tax entirely. Then, it immediately pivots to writing the test. Because the AI is still &#8220;thinking&#8221; about the buggy code it just wrote, it creates a test that expects the total without the tax.</span></p><p><span>Now, you have a buggy function that ignores tax, and a test that celebrates that exact result. The test doesn&#8217;t flag the error because it wasn&#8217;t designed to check for the correct business requirement, it was designed to match the code&#8217;s current, buggy behavior. Everything goes green, even though the feature is fundamentally broken.</span></p><p><span>The test didn&#8217;t fail you because it was a bad test. It failed you because it was written by the same thing that wrote the bug. It&#8217;s marking its own homework.</span></p><p><span>And it gets worse at scale. One developer writing careless tests writes a few. An AI writes dozens in seconds - all neat, all passing, all quietly checking for the wrong thing.</span></p><div><hr></div><h3><span>How I fix this problem</span></h3><p><span>The fix is to put the separation. You want the tests written by something that has </span><em><span>not</span></em><span> seen the code and </span><em><span>cannot</span></em><span> change it. That&#8217;s the whole idea. Everything below is just how to set that up.</span></p><p><span>If you&#8217;re using Claude Code, you do this with something called a </span><strong><a href="https://code.claude.com/docs/en/sub-agents"><span>sub-agent</span></a></strong><span>. A sub-agent is just a helper with a specific job and its own limited set of permissions. You create a sub-agent by adding a small text file to your project or from the terminal on Claude code. </span></p><p><span>In this case, you have to make two sub-agents: </span></p><ul><li><p><span>one that only writes tests</span></p></li><li><p><span>one that only writes code</span></p></li></ul><p><strong><span>The trick is in what each one is </span></strong><em><strong><span>allowed to touch</span></strong></em><strong><span>.</span></strong></p><p><span>If you aren&#8217;t using an agentic framework like Claude Code, the core concept remains the same: force a &#8220;Contextual Firewall&#8221; between your test-writing process and your implementation process. You don&#8217;t need a specific tool; you need a workflow that treats them as separate entities.</span></p><p><span>Let&#8217;s see how to do this step-by-step.</span></p><div><hr></div><h3><span>Step 1 - Create the tester, and don&#8217;t let it write code</span></h3><p><span>Add a file called test-author.md in a folder named .claude/agents/ in your project. Put this inside it:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;039408c9-6b08-4d6b-b20c-8241bd404341&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">---
name: test-author
tools: Read, Write
model: sonnet
---
Write tests based on the requirement I give you.
Do not look at the existing code first.
Write tests for what the feature is supposed to do.</code></pre></div><p><span>The important line is tools: </span><strong><span>Read</span></strong><span>, </span><strong><span>Write</span></strong><span>. This lets the tester read the requirement and write a test file - but it does </span><strong><span>not</span></strong><span> give it permission to change any existing code. </span></p><p><span>Conversely, the Coder will need read access to these tests to understand the criteria it must pass, but restricting its write access is crucial to prevent it from &#8220;hacking&#8221; the tests to suit its own buggy implementation.</span></p><div><hr></div><h3><span>Step 2 - Create the coder, and don&#8217;t let it touch the tests</span></h3><p><span>Add a second file, implementer.md, in the same folder:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;e928c465-ad04-4560-9ac4-fadc4d4c9174&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">---
name: implementer
tools: Read, Edit, Bash
model: opus
---
Make the failing tests pass by changing the code.
Never edit a test file. Never delete a test.
Keep fixing the code and re-running until the tests pass.</code></pre></div><p></p><p><span>This one is the opposite. It can edit code and run the tests (Bash lets it run them), but it&#8217;s told never to touch a test file. So it can&#8217;t cheat by weakening a test that&#8217;s in its way. Its only route to green is to actually fix the code.</span></p><blockquote><p><strong><span>Note:</span></strong><span> using different models can help, but not always - especially within the same model family, where they tend to share the same blind spots. The real independence comes from isolation and tool limits, not the model choice.</span></p></blockquote><div><hr></div><h3><span>Step 3 - Write the tests first, and read them yourself</span></h3><p><span>This step matters the most.</span></p><p><span>Give the tester the requirement - in plain English, what the feature should do. Let it write the tests </span><strong><span>before any code exists</span></strong><span>. Then, perform a </span><strong><span>Senior Engineer Review</span></strong><span>. </span></p><p><span>Position the AI as a Junior Developer generating boilerplate; your job as the Senior Reviewer is to validate the &#8220;contract&#8221; of the feature. You don&#8217;t need to write the code, but you must ensure the tests are asking for the right thing. The AI does the typing; you own the architectural judgement. </span></p><p><strong><span>Don&#8217;t try to automate this part. At least not for critical code.</span></strong></p><p><span>In the shopping cart example, you&#8217;d check: is there a test confirming the total includes tax? If yes, you&#8217;re safe. If the code later forgets the tax, that test will fail, and the bug gets caught right there.</span></p><div><hr></div><h3><span>Step 4 - Let the coder make them pass</span></h3><p><span>Now hand it to the coder. It writes the actual code, runs the tests, sees what fails, fixes it, runs again - until everything&#8217;s green.</span></p><blockquote><p><span>But this time, green means something. The tests it&#8217;s passing were written by something that never saw the code and can&#8217;t be edited by the thing writing the code. The two are genuinely separate again. The second opinion is back.</span></p></blockquote><p><span>Run through the cart example one more time. The tester, working only from your requirement, writes a test that says the total must include tax. The coder writes the function. If it forgets the tax, the test goes red, and the coder has to fix it. The bug that sailed through before now can&#8217;t get past step 4 - because the thing checking for it was never allowed to see the mistake in the first place.</span></p><div><hr></div><h3><span>Reminder</span></h3><p><span>This fixes a specific, common problem: the AI quietly agreeing with its own mistakes. It&#8217;s a real fix and it&#8217;s worth doing.</span></p><p><span>What it doesn&#8217;t fix is </span><em><span>you</span></em><span> asking for the wrong thing. If the requirement you gave the tester was wrong, you&#8217;ll get a perfectly tested version of the wrong feature. The tests can only be as right as the requirement behind them. Checking that the requirement matches what the business actually needs is your job - you need to do it.</span></p><div><hr></div><h3><span>Takeaway</span></h3><p><span>If you&#8217;re letting an AI write your code and your tests together, and trusting the green tick, be careful. That green doesn&#8217;t mean what you think it means. It means the code and the tests agree - and since the same AI wrote both, of course they agree.</span></p><p><span>Do these four things instead:</span></p><ol><li><p><span>Make a tester that can write tests but </span><em><span>can&#8217;t change code</span></em><span>.</span></p></li><li><p><span>Make a coder that can change code but </span><em><span>can&#8217;t touch tests</span></em><span>.</span></p></li><li><p><span>Write the tests first and </span><em><span>read them yourself</span></em><span>.</span></p></li><li><p><span>Let the coder make them pass.</span></p></li></ol><p><span>Separate the two, and the tests start protecting you again - which is what they were always supposed to do.</span></p><div><hr></div><h3>I love diving deep into these topics</h3><p>Some weekends I spend time with teams talking about coding agents - from the basics right through to building production-grade applications with them. Last weekend I did this with a team at a software consultancy. It was fun, and we had such a valuable exchange of ideas. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r8ri!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r8ri!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png 424w, https://substackcdn.com/image/fetch/$s_!r8ri!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png 848w, https://substackcdn.com/image/fetch/$s_!r8ri!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png 1272w, https://substackcdn.com/image/fetch/$s_!r8ri!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r8ri!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png" width="1456" height="685" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:685,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4435177,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/207530714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r8ri!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png 424w, https://substackcdn.com/image/fetch/$s_!r8ri!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png 848w, https://substackcdn.com/image/fetch/$s_!r8ri!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png 1272w, https://substackcdn.com/image/fetch/$s_!r8ri!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d107c1d-a8d6-43c8-ae72-87cc873cc718_3022x1422.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is the best time I get to spend - speaking to people who are genuinly interested in building real things with AI, not slops.</p><p>Thanks for being a part of this community.</p><p>Talk soon,<br>Sandi.</p><div><hr></div><p><em><span>P.S. If you&#8217;re new here - </span><strong>welcome</strong><span> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</span></em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br><span>More valuable content coming your way.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[1000 of you now. Why this newsletter exists?]]></title><description><![CDATA[We just passed 1,000 subscribers. I am grateful. Thank You.]]></description><link>https://newsletter.agentbuild.ai/p/1000-of-you-now-why-this-newletter</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/1000-of-you-now-why-this-newletter</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Mon, 13 Jul 2026 15:55:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/PWguaKitVrg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Okay. Let me just say this properly. </p><p>So the newsletter crossed 1,000 subscribers this week. </p><p>1,000 is nothing in newsletter world. People do that in a weekend with one lucky post. I know that. But those aren&#8217;t the thousand I got.</p><p>The thousand I got are people building AI inside banks, insurers, healthcare companies, startups, consultancies. People who reply to my emails saying &#8220;we hit exactly this last quarter.&#8221; That&#8217;s a different thousand. I&#8217;d take it over 50,000 randoms any day.<br><br>You give me space in your busy inbox - that matters a lot to me. </p><p>Thank you for that. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.agentbuild.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h3>Why I started the newsletter?</h3><p> Everyone&#8217;s shouting about AI. Demos everywhere, announcements everywhere, everyone&#8217;s an expert on LinkedIn by Tuesday. But almost nobody talks about the boring part - what happens six months after the demo, when the thing&#8217;s in production, the data&#8217;s messy, the regulator&#8217;s asking questions, and someone senior wants to know why the numbers moved.</p><blockquote><p>That part. The unglamorous part. That&#8217;s the whole newsletter. Because that&#8217;s where I&#8217;ve spent my career, and honestly, that&#8217;s where yours gets made too.</p></blockquote><p>So nothing changes at 1,000. I&#8217;ll keep writing about the stuff that actually breaks - evaluation, data debt, decisions nobody wrote down. I&#8217;ll keep sharing the failures, mine included, because that&#8217;s where the lessons are. And I&#8217;ll keep reading every single reply, because half my best issues started as one of you saying &#8220;we&#8217;re seeing something weird and nobody&#8217;s writing about it.&#8221;</p><p>Keep sending me those. Seriously.</p><div><hr></div><p>One more thing. I&#8217;m not going to take up space in your inbox just to celebrate - that&#8217;s not what you signed up for.</p><p>So here&#8217;s something useful. I just published a video on why most AI projects fail. It&#8217;s everything I&#8217;ve learnt working with enterprises over the past few years - the patterns I keep seeing, and what I think actually makes these projects succeed.</p><p>Watch it here.</p><div id="youtube2-PWguaKitVrg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;PWguaKitVrg&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/PWguaKitVrg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Talk soon,<br>Sandi</p><div><hr></div><p><em><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">P.S. If you&#8217;re new here - </span><strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">welcome</span></strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);"> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</span></em></p><div><hr></div><p><em><strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">Ask your friends to join.</span></strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);"><br>More valuable content coming your way.</span></em></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</span></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[AI Agent Memory Architecture]]></title><description><![CDATA[Memory in AI Agents: What It Is, How It Breaks, and What to Do About It.]]></description><link>https://newsletter.agentbuild.ai/p/ai-agent-memory-architecture</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/ai-agent-memory-architecture</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 04 Jul 2026 13:03:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/034fba59-84eb-408a-bef7-7c85153f8c98_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The LLM you&#8217;re building on has no memory. I am sure you all know that already. Every call to the model is a fresh start. If your agent appears to remember something, that&#8217;s because you built a system around the model that stores and retrieves information and injects it back into the prompt. <strong>The model itself is stateless.</strong></p><p>So when your agent starts giving wrong answers at scale don&#8217;t look for the failure in the model. It&#8217;s in the memory system you built around it. And if you don&#8217;t understand the memory types and how they behave differently under load, you&#8217;ll spend weeks debugging the wrong layer. I have seen this happen multiple times.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>Why Memory Architecture Is the Real Work</h3><p>Consider what happens in a real production deployment at a financial institution. An agent handles customer queries across thousands of sessions per day. It needs to know <strong>what the customer asked last week</strong>. It needs to know <strong>current product terms</strong>. It needs to know <strong>what it did three steps ago</strong> in the current task. It needs to know that when a customer says <strong>&#8220;the same account as before,&#8221;</strong> they mean their savings, not their current account.</p><p>These are four completely different information retrieval problems. Treating them as one (which is what happens when teams reach for a vector database and call it done) is where agents fall apart in production.</p><blockquote><p>Each of these problems maps to a distinct memory type. Each type has different latency characteristics, different staleness risks, different failure modes, and different architectural requirements.</p></blockquote><div><hr></div><h3>The Four Types of Agent Memory</h3><h4>1. In-Context Memory (Working Memory)</h4><p>This is whatever sits inside the current context window - the active prompt, the conversation so far, the instructions, the retrieved chunks, the tool outputs. It&#8217;s the only memory the model can directly reason over.</p><ul><li><p><strong>What it&#8217;s good for:</strong> The current task. Right now. This session.</p></li><li><p><strong>Constraint:</strong> Context windows are finite. GPT-4o gives you 128K tokens. Claude gives you 200K. They sound large until you&#8217;re injecting retrieved documents, conversation history, system instructions, and tool schemas simultaneously. You will always burn through context faster than you would expect.</p></li><li><p><strong>Failure pattern:</strong> Teams usually design for a 10-turn conversation in testing. Real users run 60-turn sessions. Context fills up, older turns get truncated, and the agent loses track of earlier constraints the user set. The agent doesn&#8217;t tell the user it&#8217;s forgotten. It just starts behaving inconsistently. And that&#8217;s dangerous.</p></li></ul><h4>2. Episodic Memory (What Happened)</h4><p>This is the log of past interactions - previous conversations, completed tasks, decisions made, outcomes observed. It&#8217;s stored externally and retrieved when relevant.</p><ul><li><p><strong>What it&#8217;s good for:</strong> Cross-session continuity. &#8220;Last time we spoke, you were working on the credit risk model.&#8221; Personalisation. Audit trails in regulated environments.</p></li><li><p><strong>Implementation:</strong> Conversation summaries or raw turns get embedded and stored in a <strong>vector database</strong>. At the start of each new session, a semantic search retrieves the most relevant past episodes and injects them into context.</p></li><li><p><strong>Failure Pattern:</strong> Episodic memory grows without bound. A user with 200 past sessions generates thousands of stored chunks. Retrieval latency climbs. Relevance degrades because older episodes are returned alongside recent ones. Teams don&#8217;t notice until p99 latency starts causing timeout errors in production.</p></li></ul><h4>3. Semantic Memory (What Is Known)</h4><p>This is factual, reference knowledge - product documentation, policy documents, regulatory guidance, knowledge base articles. It doesn&#8217;t change per user. It&#8217;s the shared ground truth the agent reasons from.</p><ul><li><p><strong>What it&#8217;s good for:</strong> Answering questions from authoritative sources. Think everything about the business. Grounding the agent in facts rather than hallucination. <strong>RAG (Retrieval Augmented Generation) is almost always semantic memory.</strong></p></li><li><p><strong>Implementation:</strong> Documents are chunked, embedded, and indexed. Queries are embedded and matched via similarity search. Top-K chunks are injected into context.</p></li><li><p><strong>Failure Pattern:</strong> Source documents change, the index doesn&#8217;t (this is very common). Nobody set up a re-indexing trigger. The agent retrieves a policy document from eight months ago with full confidence, because from the vector database&#8217;s perspective it&#8217;s still the most semantically similar result. In a regulated environment, this isn&#8217;t a UX problem. It&#8217;s a compliance problem with vulnerabilities that can cause huge penalties.</p></li></ul><h4>4. Procedural Memory (How to Act)</h4><p>This is the agent&#8217;s knowledge of how to behave - which tools to call, in what order, under what conditions. It&#8217;s not retrieved at runtime in the same way the other types are. It&#8217;s encoded in the system prompt, in tool schemas, in fine-tuned weights, or in explicit workflow definitions.</p><ul><li><p><strong>What it&#8217;s good for:</strong> Consistent behaviour across all users and sessions. If you want the agent to always verify identity before accessing account data, that&#8217;s procedural memory.</p></li><li><p><strong>Failure Pattern:</strong> Procedural memory encoded only in system prompts is brittle. Long system prompts get partially ignored as context fills. Behaviour drift emerges - the agent follows the procedure at the start of a session but deviates by turn 40. Teams don&#8217;t catch this because they test short sessions.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dM3L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dM3L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png 424w, https://substackcdn.com/image/fetch/$s_!dM3L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png 848w, https://substackcdn.com/image/fetch/$s_!dM3L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png 1272w, https://substackcdn.com/image/fetch/$s_!dM3L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dM3L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png" width="1456" height="1170" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1170,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4802198,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/205030730?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dM3L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png 424w, https://substackcdn.com/image/fetch/$s_!dM3L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png 848w, https://substackcdn.com/image/fetch/$s_!dM3L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png 1272w, https://substackcdn.com/image/fetch/$s_!dM3L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c069b4e-77c3-4a5a-adcc-02cb2f410bd2_2304x1852.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Agent interaction flow with different types of memory components</figcaption></figure></div><p></p><div><hr></div><h3>How These Four Types Behave Differently at Scale</h3><p>At low volume , say hundreds of sessions per day, all four types can be bolted onto a single vector database and it mostly works. At production scale, i.e.,  tens of thousands of sessions, millions of stored episodes, documents updating continuously, each type starts failing in a distinct way.</p><p><strong>In-context memory</strong> degrades with session length. The longer the conversation, the more context is consumed, and the more the model has to work with a truncated window. At scale, you need a context management strategy: summarise older turns, compress tool outputs, prioritise what stays in window.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fhz7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fhz7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png 424w, https://substackcdn.com/image/fetch/$s_!Fhz7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png 848w, https://substackcdn.com/image/fetch/$s_!Fhz7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png 1272w, https://substackcdn.com/image/fetch/$s_!Fhz7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fhz7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png" width="1456" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88072,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/205030730?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fhz7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png 424w, https://substackcdn.com/image/fetch/$s_!Fhz7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png 848w, https://substackcdn.com/image/fetch/$s_!Fhz7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png 1272w, https://substackcdn.com/image/fetch/$s_!Fhz7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb27222-8c4d-4baf-b28e-cd20d50694f7_1500x900.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">In-Context Memory Degrades in longer conversations</figcaption></figure></div><p></p><p><strong>Episodic memory</strong> degrades with corpus size. Retrieval latency grows as the episode store fills. Relevance drops as more episodes compete for the same top-K slots. At scale, you need a tiered storage strategy: hot storage for recent episodes (last 30 days), cold storage for older ones, with a recency-weighted retrieval model rather than pure semantic similarity.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wYTZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wYTZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png 424w, https://substackcdn.com/image/fetch/$s_!wYTZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png 848w, https://substackcdn.com/image/fetch/$s_!wYTZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png 1272w, https://substackcdn.com/image/fetch/$s_!wYTZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wYTZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png" width="1456" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:144801,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/205030730?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wYTZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png 424w, https://substackcdn.com/image/fetch/$s_!wYTZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png 848w, https://substackcdn.com/image/fetch/$s_!wYTZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png 1272w, https://substackcdn.com/image/fetch/$s_!wYTZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a5588f0-715a-467f-8d28-75674269adbf_1600x960.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Episodic Memory degrades latency as historical data volume increases (slower answers with larger historical data volumes)</figcaption></figure></div><p><strong>Semantic memory</strong> degrades with document churn. The faster your source documents update, the faster your index goes stale. At scale, you need event-driven re-indexing triggered by document changes, not scheduled batch re-indexing that runs weekly and misses the update that happened on Tuesday.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hD_q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hD_q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png 424w, https://substackcdn.com/image/fetch/$s_!hD_q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png 848w, https://substackcdn.com/image/fetch/$s_!hD_q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png 1272w, https://substackcdn.com/image/fetch/$s_!hD_q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hD_q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:104310,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/205030730?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hD_q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png 424w, https://substackcdn.com/image/fetch/$s_!hD_q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png 848w, https://substackcdn.com/image/fetch/$s_!hD_q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png 1272w, https://substackcdn.com/image/fetch/$s_!hD_q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf3ba5b9-521d-4fe1-9212-caf1b991d961_1600x1067.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Semantic Memory needs data to be updated regularly or it goes stale</figcaption></figure></div><p><strong>Procedural memory</strong> degrades with task complexity. Simple, short tasks follow procedures reliably. Long, multi-step tasks in complex domains show drift. At scale, you need procedures encoded as explicit workflow graphs - not just prose in a system prompt - with checkpoints that verify the agent is still on the correct path.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Pu_r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pu_r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png 424w, https://substackcdn.com/image/fetch/$s_!Pu_r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png 848w, https://substackcdn.com/image/fetch/$s_!Pu_r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!Pu_r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pu_r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:183935,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/205030730?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Pu_r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png 424w, https://substackcdn.com/image/fetch/$s_!Pu_r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png 848w, https://substackcdn.com/image/fetch/$s_!Pu_r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!Pu_r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb3ff55-a618-4632-9728-2043094b01cb_1600x1200.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">With complex task flows Procedural Memory degrades - agent calls wrong tools, takes incorrect actions</figcaption></figure></div><div><hr></div><h3>Architecture Choices and Optimisation Strategies</h3><p><strong>For in-context memory:</strong><br>A common pattern is to use a sliding window with summarisation. Keep the last N turns verbatim, summarise everything older into a compressed context block. If you use Claude Code - you will notice it does that in long conversations. It compresses conversations at one point. (Yes, Claude Code is an agent). <br><br>LLM-generated summaries work well here. For long-running agents, implement a context budget - allocate token limits per component (system instructions, retrieved memory, conversation history, tool outputs) and enforce them at the orchestration layer, not as an afterthought.</p><p><strong>For episodic memory:</strong><br>Separate your recent episode store from your historical episode store. Redis or a fast key-value store handles recent sessions; your vector database handles historical retrieval. I love Databricks LakeBase architecture here - LakeBase can act as the transactional store while the historical data is stored in Delta Lake. (I know Databricks plug, but it is usful to know if you are already using Databricks).<br><br> Apply recency decay to your similarity scores - an episode from yesterday should score higher than a semantically identical episode from six months ago, because context drifts. Build a summarisation pipeline that condenses completed sessions before storage, rather than storing raw turns.</p><p><strong>For semantic memory:</strong><br>Your chunking strategy is your most important decision - <strong>more important than your choice of vector database.</strong> Chunks need to be semantically coherent, not just fixed-size token windows. 512 tokens with sentence boundary respect and document-level metadata outperforms 2048-token sliding windows without metadata. Build a document change detection pipeline that triggers re-embedding on update. Track embedding model versions - if you upgrade your embedding model, you need to re-embed your entire corpus, because old and new vectors aren&#8217;t comparable.</p><p><strong>For procedural memory:</strong><br>Move away from text prose system prompts for complex procedures. Define agent behaviour as a state machine or directed graph - explicit states, explicit transitions, explicit conditions. This gives you auditability (you can log which state the agent was in at each step), testability (you can write unit tests for state transitions), and recoverability (you can restart a failed task from a known state rather than from the beginning).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vRAh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vRAh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png 424w, https://substackcdn.com/image/fetch/$s_!vRAh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png 848w, https://substackcdn.com/image/fetch/$s_!vRAh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png 1272w, https://substackcdn.com/image/fetch/$s_!vRAh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vRAh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png" width="2264" height="1677" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1677,&quot;width&quot;:2264,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4366504,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/205030730?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce580764-4586-4316-933f-55c924f46c8a_2380x1792.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vRAh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png 424w, https://substackcdn.com/image/fetch/$s_!vRAh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png 848w, https://substackcdn.com/image/fetch/$s_!vRAh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png 1272w, https://substackcdn.com/image/fetch/$s_!vRAh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d843cf-3772-4ac5-aef7-7fdaaeecfc3e_2264x1677.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Summary of design approaches for different memory types</figcaption></figure></div><div><hr></div><p>You know what&#8217;s common across all four? <br><strong>Each memory type needs its own evaluation pipeline. <br><br></strong>Not just evaluation of the agent&#8217;s final output - <strong>evaluation of the memory layer itself.</strong> Did episodic retrieval return the right sessions? Did semantic retrieval return current documents? Did the agent follow the correct procedure? Did context management preserve the right information?</p><p>They need to be measured separately. And at production scale, not doing this could prove expensive, and risk reputational damage.<br><br>Now, tell me what kind of memory failure patterns  you observed in your implementations. Give me feedback - tell me how this article helps you. I want to hear more from you.<br><br>If you love listening to experts, this podcast with Denis Rothman, author of <span>Context Engineering for Multi-Agent Systems is very relevant. Denis is a thoughtleader and he describes complex topic in simple human way. You will like it.<br></span></p><div id="youtube2-384hXsu8XZA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;384hXsu8XZA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/384hXsu8XZA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Talk soon,<br>Sandi.</p><div><hr></div><p><em><span>P.S. If you&#8217;re new here - </span><strong>welcome</strong><span> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</span></em><br><br><span>Talk soon,</span><br><span>Sandi.</span></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br><span>More valuable content coming your way.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Context Graph vs Evaluation Graph]]></title><description><![CDATA[Today: What is the difference between a context graph and and an evaluation graph - why both are important - and what questions should you ask today.]]></description><link>https://newsletter.agentbuild.ai/p/context-graph-vs-evaluation-graph</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/context-graph-vs-evaluation-graph</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 27 Jun 2026 09:59:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1ab3800f-88ac-403b-8933-fdebb3e97fb9_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Picture yourself in a restaurant where the menu changes daily. You order &#8220;the soup.&#8221; The chef makes whatever&#8217;s on today&#8217;s board. After few hours you&#8217;re not feeling great, and you go back and ask what was in the soup. The waiter pulls your order slip. It says &#8220;soup.&#8221; And yes, the kitchen did make the soup. But nobody wrote down which soup, made with what, sourced from where, signed off by which supplier. Nobody wrote any of that down next to the order. The order slip is reproducible - they can print it out again and it would say &#8220;soup&#8220;. But they cannot prove what was in the soup that could have made you sick.<br><br>That&#8217;s where most AI teams sit right now. Versioning the order slip beautifully. Not tracking what was actually in the bowl.</p><p>The fix for this isn&#8217;t a better model log. It&#8217;s a different structure that sits alongside it - what I&#8217;ve been calling an <strong>evaluation graph</strong>. Every time the AI runs, it takes a hashed, timestamped snapshot of every governance artefact in force at that exact moment: the glossary term version, the policy version, the dataset certification. So six months later, when the definition has moved from version 2.3 to 2.4, you&#8217;re not reconstructing anything. You look it up. The snapshot tells you exactly which soup the kitchen made that day, and who signed off on the recipe.</p><div><hr></div><h2>Evaluation Graph vs Context Graph</h2><p>People keep confusing this with a <strong>context graph</strong>, which is genuinely a different thing. What the difference? </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QFup!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QFup!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png 424w, https://substackcdn.com/image/fetch/$s_!QFup!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png 848w, https://substackcdn.com/image/fetch/$s_!QFup!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png 1272w, https://substackcdn.com/image/fetch/$s_!QFup!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QFup!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png" width="1456" height="1028" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/39641e74-f8db-4601-be12-e069244c0267_2720x1920.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1028,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:358707,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/203809402?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QFup!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png 424w, https://substackcdn.com/image/fetch/$s_!QFup!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png 848w, https://substackcdn.com/image/fetch/$s_!QFup!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png 1272w, https://substackcdn.com/image/fetch/$s_!QFup!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39641e74-f8db-4601-be12-e069244c0267_2720x1920.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Context Graph vs Evaluation Graph</figcaption></figure></div><p><strong>The evaluation graph is the receipt that proves what was actually served.</strong> It records: today&#8217;s menu version, which supplier the tomatoes came from, which health certification was active, what time the dish left the kitchen. Six months later, if someone asks &#8220;was this dish safe and compliant on that day,&#8221; you don&#8217;t guess, you pull the receipt and know exactly which version of &#8220;today&#8217;s soup&#8221; this was, signed off by whom. That&#8217;s <strong>provenance</strong>. It&#8217;s not about why the waiter brought you soup. It&#8217;s about proving what was true in the kitchen at that exact moment.</p><p><strong>The context graph is the waiter&#8217;s reasoning for why you got soup at all.</strong> Maybe you said &#8220;I&#8217;m not very hungry,&#8221; the waiter remembered you&#8217;re allergic to shellfish from last visit, saw the bisque was off the board today anyway, and recommended the soup as the lightest, safest option. That whole chain - your stated preference, the remembered allergy, the menu constraint, the final recommendation is the <strong>decision lineage</strong>. If you later ask &#8220;why did you suggest soup,&#8221; the context graph is what lets the restaurant reconstruct that reasoning instead of shrugging and saying &#8220;the waiter just did.&#8221;</p><p>So: same dish, two completely different questions.</p><ul><li><p>Evaluation graph: <em>&#8220;Prove what was actually in the bowl, and that it met standards, on that specific day.&#8221;</em> (Provenance, was the input governed correctly?)</p></li><li><p>Context graph: <em>&#8220;Explain why the waiter chose this for you specifically.&#8221;</em> (Lineage, why did the agent decide what it decided?)</p></li></ul><p>A restaurant or a bank can have perfect receipts and a clueless waiter. Or a brilliant waiter with no receipts to back up a regulator's question. You need both, and they're solving for different failure modes. </p><div><hr></div><h3>What this looks like technically</h3><p>Strip away the restaurant for a moment. Here&#8217;s the conceptual shape of both graphs, and the one thing that ties them together.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L4b6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L4b6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png 424w, https://substackcdn.com/image/fetch/$s_!L4b6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png 848w, https://substackcdn.com/image/fetch/$s_!L4b6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png 1272w, https://substackcdn.com/image/fetch/$s_!L4b6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L4b6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png" width="1456" height="1028" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1028,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:310949,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/203809402?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L4b6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png 424w, https://substackcdn.com/image/fetch/$s_!L4b6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png 848w, https://substackcdn.com/image/fetch/$s_!L4b6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png 1272w, https://substackcdn.com/image/fetch/$s_!L4b6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9840778e-3cf3-4ce5-a1e4-aa2729a10789_2720x1920.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Context Graph and Evaluation Graph connected through the RunID</figcaption></figure></div><p>A <strong>context graph</strong> is built from three kinds of nodes. <br></p><ul><li><p><strong>Entities: </strong>the customers, products, policies, and people your business already has some version of in a knowledge graph. </p></li><li><p><strong>Decision events:</strong> each time an agent or a human makes a choice, that choice becomes its own node, carrying the inputs, the policy applied, any exception made, and the outcome. </p></li><li><p><strong>Temporal state:</strong> because the graph needs to know not just what&#8217;s true now, but what was true at the moment the decision happened. Sarah was a Director in May; she&#8217;s a VP today. The graph needs to know which one mattered when.</p></li></ul><p></p><p>An <strong>evaluation graph</strong> is built differently, because it&#8217;s answering a different question. Its core node is a <strong>context snapshot </strong>taken at the exact moment a model runs, hashed and timestamped, pointing to the specific versions of every governance artefact in force at that instant: the glossary definition, the policy version, the dataset certification. Alongside that sits the <strong>run</strong> itself - the model version, the prompt template, the retrieval configuration, and a <strong>failure taxonomy</strong> that lets you diagnose, after the fact, whether a wrong answer was a model failure, a context failure, or a policy gap.</p><blockquote><p><strong>The two graphs aren&#8217;t separate systems sitting in isolation. </strong>They connect through one shared reference: <strong>the run</strong>, or the decision event itself. Every decision event in the context graph that involved a model call can carry a pointer to the evaluation graph&#8217;s snapshot for that exact run. <br><br>When someone asks &#8220;why did the agent decide this,&#8221; you walk the context graph. When someone asks &#8220;what was governing the system when it decided that,&#8221; you follow the same run ID into the evaluation graph and pull the snapshot. One graph for the reasoning, one graph for the proof, joined at the single point where the AI actually executed.</p></blockquote><p>Practically, this doesn&#8217;t require building either graph from scratch on a green field. If you&#8217;re already running something like MLflow or Databricks AI Agent Evaluation, the run node is just a thin wrapper around the run ID your platform already generates. The context snapshot capture can be a pre-run hook - a lightweight call to your catalog and glossary APIs that resolves the current versions of everything relevant, hashes them, and writes the snapshot before the model executes. The heavier lift is the context graph side, because that one has to live inside the execution path - you can&#8217;t capture a decision event you weren&#8217;t watching for when it happened.</p><div><hr></div><h2>What I&#8217;d actually do about it</h2><p>These concepts are new and pretty early for many organisations. My advise is to be congnizant and ask questions for every AI build that passes through the architecture team. So, before your next model goes anywhere near a regulated workflow, ask one question out loud in the project meeting: if a regulator asks us to reproduce this exact answer in six months, what&#8217;s allowed to change underneath us between now and then?</p><p>Then write down every governed artefact that answer depends on. Glossary terms. Policy versions. Dataset certifications. For each one, name who owns it and how often it moves. If you can&#8217;t answer that for every item on the list, you don&#8217;t have an evaluation graph yet - you have a model log dressed up as proof.</p><p>That&#8217;s not a backlog item to schedule for next quarter. It&#8217;s the difference between &#8220;we can rerun the query&#8221; and &#8220;we can actually explain the decision.&#8221;</p><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;918244ac-85dd-442f-aada-8f274aa2ad63&quot;,&quot;caption&quot;:&quot;Here is a pattern I have seen more times than I can count.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Evaluation Graph: Why Your AI Pipelines Are Lying to You&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:193058051,&quot;name&quot;:&quot;Sandipan Bhaumik&quot;,&quot;bio&quot;:&quot;I&#8217;ve spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, I share how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/651c04c2-d92e-4a2e-905f-a59346e3e950_1024x1024.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-02T13:31:15.010Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/980b3675-19d5-4893-85c7-521bc9ff584a_1280x720.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://newsletter.agentbuild.ai/p/the-evaluation-graph-why-your-ai&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:196205889,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2211527,&quot;publication_name&quot;:&quot;agentbuild.ai&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!OIBg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3453368a-da00-4960-b174-e3313b941314_256x256.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>Where to go next</h2><p>I&#8217;d genuinely like to know what you&#8217;re seeing on your side. Has anyone asked your team to reproduce a decision and found the same gap I&#8217;m describing? Is this something your governance and AI teams have already wired together, or is it still sitting in the gap between two calendars like it was at the bank above? <br><br>Hit reply or drop a comment. Tell me about the patterns you&#8217;re seeing, they usually end up shaping what I write next.</p><p>Talk soon,<br>Sandi</p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em><br><br>Talk soon,<br>Sandi.</p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><p>Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[AI Engineer Conference Talk: The Production AI Playbook]]></title><description><![CDATA[Today: The five pillars that separate production AI from expensive pilots, the actual judge prompt we use for evaluation, and a banking case study where the model wasn't picked until week seven.]]></description><link>https://newsletter.agentbuild.ai/p/ai-engineer-conference-talk-the-production</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/ai-engineer-conference-talk-the-production</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 20 Jun 2026 13:02:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/ObTPqBGsEbA" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">I recorded a talk at the AI Engineer Conference in London in April 2026, and I&#8217;m sharing the full recording.</span></p><blockquote><p><em><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">A quick note before you watch: this was recorded in April 2026, and the pace of change in this space means a few things have already moved on. Databricks has since shipped more platform features that make some of these pillars easier to implement than I describe in the talk. My own thinking keeps shifting too, as I talk to more customers and fold new patterns into the framework. I&#8217;ll keep sharing those updates here and on the YouTube channel as they land.</span></em></p></blockquote><p></p><div id="youtube2-ObTPqBGsEbA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ObTPqBGsEbA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/ObTPqBGsEbA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p></p><p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">Here&#8217;s what it covers.</span></p><p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">The talk is called </span><strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">&#8220;The Production AI Playbook&#8221; </span></strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">and the core argument is this: most AI projects fail for the same five reasons, and almost none of them are about the model.</span></p><p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">I open with a pattern most of you will recognise: the Week 1 to 14 doom loop. Teams pick a model, build features, demo to leadership, ship, and watch it fall apart within weeks because nobody built the infrastructure underneath it. Gartner puts enterprise AI project failure above 40%. I&#8217;ve watched it happen first-hand, more than once.</span></p><p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">From there I walk through five pillars, each one a dependency for the next: <br>Evaluation, <br>Observability, <br>Data Foundation, <br>Orchestration, <br>Governance. </span></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);"><br>Two pillars get particular depth. On evaluation, I show the actual judge prompt structure we use for LLM-as-judge scoring, including the fix for non-determinism: running each test case three times and flagging anything with high score variance before it ships. On orchestration, I cover the patterns that hold up in production against the ones that only survive in demos, including failure modes nobody puts on slides: context window bleed, cascading failures, and trust boundary violations between agents.</span></p><p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">The spine of the talk is a real case study: a retail bank, 18,000 calls a month, a prior attempt that burned $85,000 over six months with nothing shipped. The second attempt took eight weeks, and the model wasn&#8217;t chosen until week seven. Everything before that was evaluation and infrastructure. The result: 87% accuracy, 62% call deflection, and a tripled API-call bug caught in two hours that would otherwise have cost $43,200 a year in wasted fees.</span></p><p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">I also include a section on </span><em><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">what I&#8217;d do differently</span></em><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">. Three things that surprised us even after the framework held up: the test case library needs a named owner or it quietly rots, prompt version logs need to capture intent and not just the diff, and behavioural evals cost far more to run at scale than most teams budget for.</span></p><p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">If you&#8217;re building or running production AI, this one will be useful.</span></p><p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">Here&#8217;s in the link to the </span><a href="https://drive.google.com/drive/folders/1acC5n1iE_63onW0S6960cYsAdHOMxVQE"><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">resources</span></a><span data-color="#ead1dc" style="color: rgb(234, 209, 220);"> I talk about in the video.<br><br>I aslo did an online talk in the same conference on Multi-Agent Orchestration Patterns, more tehcnical deep dive into patterns and failures modes when you build agentic workflows.</span></p><div id="youtube2-2czYyrTzILg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;2czYyrTzILg&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/2czYyrTzILg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">Talk soon,<br></span><strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">Sandi</span></strong></p><div><hr></div><p><em><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">P.S. If you&#8217;re new here - </span><strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">welcome</span></strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);"> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</span></em></p><div><hr></div><p><em><strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">Ask your friends to join.</span></strong><span data-color="#ead1dc" style="color: rgb(234, 209, 220);"><br>More valuable content coming your way.</span></em></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><span data-color="#ead1dc" style="color: rgb(234, 209, 220);">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</span></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Context Intelligence: Why Your Agent Passes Every Test and Fails in Production]]></title><description><![CDATA[Today: The model is no longer the hard part. The advantage now sits in whether your agents know how your business actually works.]]></description><link>https://newsletter.agentbuild.ai/p/context-intelligence-why-your-agent</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/context-intelligence-why-your-agent</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 13 Jun 2026 12:22:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/aRNPLi7qNFA" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>An agent quotes a customer an SLA that expired eighteen months ago. It sounded confident, the document it cited was real, and it still got the answer wrong, because the current contract never reached it.</p><p>The model did its job. What failed was everything around the model. The context. And that&#8217;s the shift worth getting your head around: the intelligence is largely a solved problem now, and the bottleneck has moved to context.</p><p>Prukalpa Sankar, Founder and Co-CEO of Atlan, puts it bluntly: with AI, context might be everything, because &#8220;the intelligence is already here.&#8221; The model is the easy part. The hard, durable, defensible part is whether your agents understand how your business actually works. That understanding is what people are starting to call context intelligence.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>What context intelligence actually is</h2><p>It isn&#8217;t a bigger prompt or a better retrieval setup. It&#8217;s the infrastructure that gives an agent shared, governed, current knowledge of your organisation, plus a memory of the decisions it and its predecessors have made. Two ingredients: a map of how things relate, and a record of why things happened.</p><p>That map and that record are the context graph. A context graph is a living model of your business as a set of entities and the relationships between them, this customer, that contract, this SLA, that exception, joined to the decisions taken against them. <a href="https://foundationcapital.com/ideas/context-graphs-ais-trillion-dollar-opportunity">Foundation Capital, in their </a><em><a href="https://foundationcapital.com/ideas/context-graphs-ais-trillion-dollar-opportunity">Context Graphs</a></em><a href="https://foundationcapital.com/ideas/context-graphs-ais-trillion-dollar-opportunity"> essay</a> by Jaya Gupta and Ashu Garg, made the sharpest version of the argument: the durable asset isn&#8217;t the data an agent reads, it&#8217;s the decision trace it leaves behind. What was gathered, what rule applied, why an action was allowed. Capture that, and precedent becomes something an agent can look up instead of guess at. The agent stops having data with no judgement and starts having judgement.</p><div><hr></div><h2>Why this is the accuracy story</h2><p>Most enterprise agents fail on a trust gap, not a model gap. The SLA agent didn&#8217;t need a cleverer model. It needed to know which contract was current, that it was allowed to act on it, and what had been decided in similar cases before. None of that lives in the model. All of it lives in the context.</p><p>Without it, you get what Prukalpa calls context sprawl: every agent building its own private, partial view of the world, none of them agreeing on what &#8220;active customer&#8221; even means. Fifty agents, fifty versions of the truth, no shared map. Accuracy in that environment isn&#8217;t a model property. It&#8217;s an infrastructure property.</p><p>This is where the runtime and the infrastructure get confused. <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">Anthropic&#8217;s work on context engineering</a> covers the runtime half: context is finite, and the discipline is fitting in the fewest high-value tokens at the moment of inference, not the most. That&#8217;s real, but it assumes the right context already exists to be selected. Context intelligence is the layer below it, the one that decides what context exists, whether it can be trusted, and whether the agent may use it. One is what you put in the window. The other is what&#8217;s available to put there at all.</p><div><hr></div><h2>How to think about building it</h2><p>You can read most failures here as three debts coming due. </p><ul><li><p><strong>Data Debt:</strong> no single governed source of what&#8217;s true, so your agents disagree.</p></li><li><p><strong>Decision Debt:</strong> nobody captured why past actions were taken, so the context graph has no memory. </p></li><li><p><strong>Evaluation Debt:</strong> no framework to check whether the context an agent actually used was the right context. Work out which one is biting and you know where to start.</p></li></ul><p>The build order matters more than the architecture diagram. The instinct is to spend two years plumbing every system into a perfect context layer before anything ships. Prukalpa&#8217;s advice is the opposite, and it&#8217;s right: bootstrap from the systems you already have, the CRM, the ERP, the BI definitions, get the context layer roughly 80% of the way there, and let the flywheel start turning. Every decision an agent makes then becomes institutional memory the next agent inherits. You don&#8217;t design the context graph up front. You grow it.</p><p>Which is why this isn&#8217;t really an AI problem at heart. It&#8217;s the next turn of data engineering: <strong>context as a governed product, with owners, versions, and tests, sitting between your data and your agents.</strong> The teams who treated data as a product a decade ago have a head start. The ones still treating context as something you cram into a prompt are about to learn the difference in production.</p><blockquote><p>The open question, the one nobody at the table has a clean answer to yet, is who inside the enterprise actually owns this layer. </p></blockquote><p>I got into exactly that with Prukalpa Sankar on the podcast. She&#8217;s been arguing for the context layer longer than almost anyone, and it&#8217;s the clearest thinking I&#8217;ve heard on where this is heading. </p><div id="youtube2-aRNPLi7qNFA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;aRNPLi7qNFA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/aRNPLi7qNFA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Also, read Prukalpa&#8217;s article - <a href="https://atlan.com/context-and-chaos/issue/what-an-enterprise-context-layer-actually-is/">What an Enterprise Context Layer Actually Is</a></p><p>Enjoy your weekend.</p><p>Talk soon, <br>Sandi</p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br>More valuable content coming your way.</em></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How to Build an AI Agent Registry — Part 2: Risk Class and Autonomy Level]]></title><description><![CDATA[Today: Agent Registry - The enforcement layer that makes your registry more than a catalogue. What is it? how to build it?]]></description><link>https://newsletter.agentbuild.ai/p/how-to-build-an-ai-agent-registry-408</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/how-to-build-an-ai-agent-registry-408</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Wed, 10 Jun 2026 14:12:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2f7cc492-0927-4dfa-8106-3be6bea02709_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>Where We Left Off</h3><p><a href="https://newsletter.agentbuild.ai/p/how-to-build-an-ai-agent-registry?r=36xwjn">Part 1 covered Schema and Ownership</a>: the description and accountability layer of an Agent Registry. Unity Catalog as the agent registry. AWS IAM for per-agent identity. CloudTrail for audit trails. A stack that answers the questions an audit demands: what exists, who owns it, what it can do.</p><p>That is necessary, but it is not sufficient.</p><p>Schema and Ownership describe an agent. They do not constrain it. An agent with a well-documented schema and a clear owner can still make a consequential decision without human approval, access data it should not touch, or operate at an autonomy level the business never signed off on. That is where <strong>Risk Class</strong> and <strong>Autonomy Level </strong>come in and where the registry becomes a governance control rather than a filing system.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;524d8c03-8dad-4574-8aac-45032e14b1b9&quot;,&quot;caption&quot;:&quot;The Problem&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Build an AI Agent Registry &#8212; Part 1: Schema and Ownership &quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:193058051,&quot;name&quot;:&quot;Sandipan Bhaumik&quot;,&quot;bio&quot;:&quot;I&#8217;ve spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, I share how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/651c04c2-d92e-4a2e-905f-a59346e3e950_1024x1024.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-06-06T13:01:27.753Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dcff23d1-a3ff-456d-950a-d704252082f7_1280x720.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://newsletter.agentbuild.ai/p/how-to-build-an-ai-agent-registry&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:200870763,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:8,&quot;comment_count&quot;:5,&quot;publication_id&quot;:2211527,&quot;publication_name&quot;:&quot;agentbuild.ai&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!OIBg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3453368a-da00-4960-b174-e3313b941314_256x256.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>Component 3: Risk Class - Not All Agents Carry Equal Risk</h3><p>Risk classification is the decision that determines what governance an agent receives. If you get it wrong and you either over-govern low-risk agents until teams route around the process, or under-govern high-risk agents until something goes wrong in production.</p><p>The four risk categories worth working with in a regulated environment:</p><ol><li><p><strong>Low Risk</strong>: bounded output, read-only, no consequential action. An agent that summarises documents or answers questions from a knowledge base.</p></li><li><p><strong>Medium Risk</strong>: supervised action. The agent can write or update records, but a human reviews before execution.</p></li><li><p><strong>High Risk</strong>: consequential action inside a tightly constrained boundary. The agent can execute without per-action approval, but only against approved tools, approved data paths, and fully audited systems.</p></li><li><p><strong>Critical Risk</strong>: autonomous consequential action across multiple systems, with downstream effects that are difficult or impossible to reverse.</p></li></ol><p>In Databricks, risk class is best treated as governed metadata attached to the agent assets you register. For example, on Unity Catalog models, model versions, and functions, all of which support tagging. That makes risk class visible, queryable, and reviewable across the lifecycle. If an agent gains new tools, new data access, or a broader execution boundary, the classification should be reassessed before the next promotion.</p><p>So, if you ar eon Databricks, use Unity Catalog to register the agent, its model versions, its functions, and its metadata. Use tags to record risk class. Use Unity Catalog privileges, managed authentication, and deployment-time permission checks to enforce which tools and data paths are actually reachable at runtime. If you need an explicit risk-policy engine that says, for example, a High Risk agent may call Tool A but never Tool B, that policy layer still sits outside Databricks - in an API gateway, middleware layer, or external authoriser.</p><p>That is the line between registry and policy engine. Databricks gives you the governed assets, the permissions model, and the audit surface. If you need deterministic policy decisions over agent behaviour itself, you compose that on top.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D2-T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D2-T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png 424w, https://substackcdn.com/image/fetch/$s_!D2-T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png 848w, https://substackcdn.com/image/fetch/$s_!D2-T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png 1272w, https://substackcdn.com/image/fetch/$s_!D2-T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D2-T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png" width="1456" height="972" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:972,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:173493,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/201449801?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!D2-T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png 424w, https://substackcdn.com/image/fetch/$s_!D2-T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png 848w, https://substackcdn.com/image/fetch/$s_!D2-T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png 1272w, https://substackcdn.com/image/fetch/$s_!D2-T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25bffc3-fa81-4151-beec-3b723b3f77d0_1486x992.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Conceptual: Runtime flow of enforcing risk class rules on Agents</figcaption></figure></div><p><strong>On the AWS-native path:</strong> <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/policy-understanding-cedar.html">Amazon Bedrock AgentCore Gateway with Cedar policies </a>provides a similar enforcement pattern - deterministic allow/deny decisions on every tool call, with Lambda interceptors for dynamic validation. Cedar policies are authored in a declarative language and evaluated against principal, action, and resource with optional conditions over request context. Worth monitoring as it moves towards general availability.</p><div><hr></div><h3>Component 4: Autonomy Level - How Independently an Agent Operates</h3><p>Risk class tells you what an agent is allowed to do. Autonomy level tells you how much independent judgement it is permitted to exercise in doing it. These are related but distinct. A High Risk agent can still operate at L1 with human approval, or at L3 with bounded multi-step execution. The risk class constrains the action space. The autonomy level constrains the operating model.</p><p>The five levels from the registry:</p><ul><li><p>L0 - <strong>Assistive only</strong>. Generates output for human review. No execution.</p></li><li><p>L1 - <strong>Human-approved actions</strong>. The agent proposes; a human confirms before execution.</p></li><li><p>L2 - <strong>Semi-autonomous workflows</strong>. Executes within defined boundaries without per-action approval.</p></li><li><p>L3 - <strong>Goal-driven execution</strong>. Plans and executes multi-step tasks. Human oversight at checkpoints, not per action.</p></li><li><p>L4 - <strong>Multi-agent autonomy</strong>. Coordinates with other agents, spawns sub-agents, orchestrates complex workflows with minimal human intervention.</p></li></ul><p>In Databricks, autonomy level should be treated as an explicit registry attribute you manage in your own governance model, not as a built-in Unity Catalog field with native enforcement semantics. The platform gives you the places to record it, such as model and model-version metadata, but the meaning of L0 through L4 remains an operating policy you define and then enforce through workflow design, approvals, deployment controls, and runtime boundaries.<br><br>MLflow Tracing captures the full execution path - every tool call, every decision point, every input and output - linked to the agent version and autonomy level at the time of execution. In a regulatory investigation, that trace is the evidence.<br><br>So, autonomy level is declared in the registry, promotion is gated through MLflow deployment workflows, runtime execution is bounded by Databricks permissions and isolated tool execution, and trace evidence is captured through MLflow. The registry records the autonomy decision; the surrounding control plane makes it real.<br></p><p><strong>Open source alternative:</strong> Microsoft released the Agent Governance Toolkit in April 2026 under MIT licence, an open source project that addresses runtime security governance for autonomous agents. It includes execution rings inspired by CPU privilege levels, kill switches for emergency agent termination, and circuit breakers. It maps directly to the <a href="https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026/">OWASP Top 10 for Agentic Applications (2026)</a> and is the most purpose-built open source option currently available for autonomy-level enforcement.</p><div><hr></div><h3>What the Registry Now Does</h3><p>Across both parts, the four components work as a single control system.</p><p>Schema tells the registry what the agent is. Ownership tells it who is accountable. Risk Class tells it what level of control the agent requires, and that classification is carried as governed metadata across the agent&#8217;s registered assets. Autonomy Level tells it how much independent judgement the agent is permitted to exercise, and that decision is enforced through release workflows, runtime permissions, and execution boundaries rather than left implicit in code.</p><p>The audit request scenario from Part 1 - fourteen agents, nobody can answer, is no longer possible. Every agent has a schema record, an owner, a declared risk class, an explicit autonomy level, governed access to tools and data, and an execution trail that can be reconstructed through MLflow and platform audit logs. The registry is not a reporting artefact. It is the control plane that makes autonomous operation in a regulated environment defensible.</p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em><br><br>Talk soon,<br>Sandi.</p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><p>Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How to Build an AI Agent Registry — Part 1: Schema and Ownership ]]></title><description><![CDATA[This week: Agent Registry - The infrastructure layer that turns an agent sprawl problem into a governance capability. What is it? how to build it?]]></description><link>https://newsletter.agentbuild.ai/p/how-to-build-an-ai-agent-registry</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/how-to-build-an-ai-agent-registry</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 06 Jun 2026 13:01:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/dcff23d1-a3ff-456d-950a-d704252082f7_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>The Problem</h3><p>An organisation deploys 50 agents across 6 teams over the course of a year. Without any central register, wihtout any ownership mapping, wihtout any shared schema.</p><p>Then the audit request arrives.</p><p>They ask the following questions:</p><ul><li><p>Which agents are live? </p></li><li><p>Who approved the one touching customer financial data? </p></li><li><p>What has it been told in its system prompt? <br></p></li></ul><p>Nobody could answer.<br><br>This is not a technology failure. The agents worked fine but the governance infrastructure was never built.</p><div><hr></div><h3>A Note on the choice of technology</h3><p>Before we process, I want to make a note on my technology choices here. The architecture in this issue is Databricks-on-AWS. That is not a neutral choice, but it reflects where I spend most of my time. I work with Tier 1 UK financial institutions, and the patterns I see repeatedly across those engagements have shaped this stack.</p><p>Databricks gives me Unity Catalog for governance, lineage, and access control across the full data and AI estate. AWS gives me IAM for identity and CloudTrail for audit trails. These tools are production-stable, work in hybrid deployments, and hold up under compliance scrutiny. Where open source alternatives exist and are worth knowing about, I have noted them inline.</p><p>Where open source alternatives exist and are worth knowing about, I have noted them inline. But the primary recommendation here is the stack I have seen hold up under real compliance scrutiny.</p><div><hr></div><h3>What an Agent Registry Actually Is</h3><p>An Agent Registry is the control layer that makes an agent estate governable. It is not a dashboard. It is not a catalog you update manually. It is infrastructure, the layer that sits beneath your agents and answers the questions an audit demands: what exists, who owns it, what it can do, and how much autonomy it operates with.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cYGa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cYGa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png 424w, https://substackcdn.com/image/fetch/$s_!cYGa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png 848w, https://substackcdn.com/image/fetch/$s_!cYGa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png 1272w, https://substackcdn.com/image/fetch/$s_!cYGa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cYGa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png" width="936" height="1384" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1384,&quot;width&quot;:936,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1082439,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/200870763?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cYGa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png 424w, https://substackcdn.com/image/fetch/$s_!cYGa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png 848w, https://substackcdn.com/image/fetch/$s_!cYGa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png 1272w, https://substackcdn.com/image/fetch/$s_!cYGa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e2a288-6e7e-4e83-8dc3-9074689cd41e_936x1384.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">I posted this on <a href="https://www.linkedin.com/posts/sandipanbhaumik_an-audit-request-arrives-%F0%9D%9F%8F%F0%9D%9F%92-%F0%9D%90%9A%F0%9D%90%A0%F0%9D%90%9E%F0%9D%90%A7%F0%9D%90%AD-activity-7468582493735260160-IoDM?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAASFSfgBvs8z6304VU0bKtIIWJHdDqqIil4">LinkedIn</a></figcaption></figure></div><p><strong>It has four components.</strong> This issue covers the first two: Schema and Ownership. Part 2, out on Wednesday, covers Risk Class and Autonomy Level - <em>the enforcement layer.</em></p><p>I am splitting this deliberately. </p><ul><li><p>Schema and Ownership are about description and accountability - what an agent is and who controls it.</p></li><li><p>Risk Class and Autonomy Level are about enforcement - what an agent is allowed to do and what stops it. </p></li></ul><p>These are different engineering problems. Collapsing them into one piece does neither justice.</p><div><hr></div><h3>Component 1: Schema &#8212; How an Agent Describes Itself</h3><p>Schema is the agent&#8217;s self-declaration. Without it, agents are opaque. Orchestration breaks. Integration fails silently. You cannot route work to an agent you cannot describe.</p><p>A schema record needs to capture: capabilities and skills, the APIs and tools the agent can call, input and output formats, memory and context handling behaviour, access permissions, and communication protocols.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RZa9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RZa9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png 424w, https://substackcdn.com/image/fetch/$s_!RZa9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png 848w, https://substackcdn.com/image/fetch/$s_!RZa9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!RZa9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RZa9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png" width="1456" height="990" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:990,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:165120,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/200870763?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RZa9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png 424w, https://substackcdn.com/image/fetch/$s_!RZa9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png 848w, https://substackcdn.com/image/fetch/$s_!RZa9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!RZa9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a314844-1c5f-42ec-b862-baba73e51971_1568x1066.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Agent Schema Components</figcaption></figure></div><p><a href="https://www.databricks.com/product/unity-catalog">Unity Catalog (UC)</a> is the agent registry in this stack. It governs agent tools as registered, versioned functions - each one a securable object with access control, lineage tracking, and metadata surfaced through <a href="https://docs.databricks.com/aws/en/catalog-explorer/">Catalog Explorer</a> or the REST API. It supports attribute-based access control on tags, which means you can attach metadata directly to agent capability records and build access policies around them. If you think about it, UC becomes the same governance layer that already covers your data assets, your ML models, and your pipelines, just extended to agents without adding a separate system.</p><p>Unity Catalog also works across Databricks workspaces on AWS, Azure, and GCP. If your agent estate spans cloud environments, governance travels with it through the same control plane. That&#8217;s powerful.</p><p><strong><a href="https://aws.amazon.com/blogs/machine-learning/the-future-of-managing-agents-at-scale-aws-agent-registry-now-in-preview/">AWS AgentCore Agent Registry</a> </strong>is worth knowing about as a complementary discovery layer. It stores agent records across frameworks and clouds and supports semantic search and approval workflows - and is useful if your estate includes agents running entirely outside Databricks and you need a single cross-platform catalogue. It is a discoverability tool, not a governance layer. For most <strong>Databricks-on-AWS </strong>deployments, Unity Catalog covers the registry function without it.</p><p><em><strong>Open source alternative: </strong>purpose-built open source agent registry tooling is immature right now. The practical path is a lightweight service catalogue like Backstage for discoverability combined with OPA for policy enforcement - neither of which was designed for agents, but both of which work today without significant custom engineering. I have found this <a href="https://github.com/agentoperations/agent-registry">GitHub Repo</a>, I never tried it or even explored it - might you might want to have a look.<br><br>If you find one or know one - let me know in comments.</em></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ibdV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ibdV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png 424w, https://substackcdn.com/image/fetch/$s_!ibdV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png 848w, https://substackcdn.com/image/fetch/$s_!ibdV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png 1272w, https://substackcdn.com/image/fetch/$s_!ibdV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ibdV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png" width="1456" height="1121" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1121,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:217939,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/200870763?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ibdV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png 424w, https://substackcdn.com/image/fetch/$s_!ibdV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png 848w, https://substackcdn.com/image/fetch/$s_!ibdV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png 1272w, https://substackcdn.com/image/fetch/$s_!ibdV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b0c877-4acf-49a1-87ff-218f36e24e15_1660x1278.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>Component 2: Ownership &#8212; Who Controls the Agent</h3><p>Ownership is where shadow AI comes from. An agent without an owner is an agent nobody is responsible for. In regulated environments, that is not an abstract risk.</p><p>An ownership record needs to capture: the team or business owner, accountability mapping, the access governance model, the escalation path, approval authority, and lifecycle responsibility - including who decommissions the agent and when.</p><p>On the identity side, AWS IAM is the enforcement mechanism. Each agent should operate under a dedicated IAM role with least-privilege permissions - no shared credentials, no roles that accumulate access over time. <a href="https://aws.amazon.com/blogs/security/iam-policy-autopilot-an-open-source-tool-that-brings-iam-policy-expertise-to-builders-and-ai-coding-assistants/">IAM Policy Autopilot</a>, allows AI coding tools to generate baseline IAM policies directly from application code, reducing the gap between what an agent was built to do and the permissions it actually holds.</p><p>Accountability trails run through <a href="https://aws.amazon.com/cloudtrail/">AWS CloudTrail</a>. Every registry access and administrative action is logged. In AgentCore Agent Registry, CloudTrail integration is built in, meaning you have an auditable record of who approved an agent, when it was registered, and when its record was last modified.</p><p>Unity Catalog extends this further. Audit logs capture every agent action. <a href="https://www.databricks.com/product/artificial-intelligence/ai-gateway">Unity AI Gateway</a> release introduced MCP server governance - controlling which agents can access which external systems and tracking how that data is used. Ownership in the registry is not just a field in a database. It maps directly to the IAM role, the Unity Catalog access policy, and the audit trail.</p><p><em><strong>Open source alternative: </strong><a href="https://www.openpolicyagent.org/">Open Policy Agent (OPA)</a> provides policy enforcement for ownership and access governance in environments not running on the Databricks or AWS managed stack. It is cloud-agnostic and widely used in regulated industries.<br><br>If you find good open-source stack please comment here. I am looking for them as well.</em></p><div><hr></div><h3>Coming Wednesday: Risk Class and Autonomy Level</h3><p>Schema and Ownership tell you what an agent is and who is responsible for it. </p><p>That is necessary but not sufficient.</p><p>The harder question is what an agent is allowed to do and what stops it when it operates outside its boundaries.</p><p>Part 2 covers Risk Class: how risk classification moves from a metadata tag in Unity Catalog to a live runtime control via Unity AI Gateway and AgentCore Policy. I will also cover Autonomy Level, the scale from assistive-only (L0) to multi-agent autonomy (L4), and the kill switch infrastructure that makes higher autonomy levels safe enough to deploy in a regulated environment.</p><p>This is the part of the registry most organisations skip entirely. It is also the part that determines whether your governance is real or decorative.<br><br>Talk soon,<br>Sandi.</p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><p>Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How to Fund the Right AI Use Case ]]></title><description><![CDATA[This week: New video on YouTube - how to find the right use-cases to fund your AI initiatives. How to make data-driven decisions based on infrastrcuture gap and business value.]]></description><link>https://newsletter.agentbuild.ai/p/how-to-fund-the-right-ai-use-case</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/how-to-fund-the-right-ai-use-case</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 30 May 2026 13:03:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/TPfHtbTne78" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey everyone,</p><p>Mnay organisations I talk to gathers 50-100 AI use cases. They hold a big &#8220;priority workshop.&#8221; They vote on business value, strategic fit, and stakeholder excitement. They pick the top three, hand them to the engineering team, and wait for the magic to happen.</p><p>Six months later, the project is quietly shelved. </p><p>The reason? &#8220;The data infrastructure doesn&#8217;t support it.&#8221;</p><p>In my latest video, I talk about why this happens and more importantly, how to stop it using a framework I&#8217;ve been developing for production AI.<br><br></p><div id="youtube2-TPfHtbTne78" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;TPfHtbTne78&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/TPfHtbTne78?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h3>The &#8220;Human-to-Agent&#8221; Gap</h3><p>The core problem is something I call the &#8220;Human vs. Agent&#8221; data standard.</p><p>As technical people, we often forget that data built for a human analyst is completely different from data built for an AI agent. </p><ul><li><p><strong>Humans</strong> can reconcile messy schemas and ask a colleague for help.</p></li><li><p><strong>AI Agents</strong> cannot. They either fail, or worse, they fail silently.</p></li></ul><p>If your infrastructure is built for BI dashboards, it simply won&#8217;t sustain a fully autonomous AI agent.</p><div><hr></div><h3>The 8-Dimension Assessment</h3><p>To fix this, I&#8217;ve broken down AI readiness into <strong>8 key dimensions</strong> across two groups:</p><p>1.  <strong>Data Infrastructure</strong>: Consumers, Access Latency, Schema Rigor, and Metadata.</p><p>2.  <strong>AI Operations</strong>: Error Handling, Memory/State, Evaluation, and Observability.</p><p>The goal isn&#8217;t to be &#8220;perfect&#8221; at all of them. The goal is to be <strong>honest</strong>. When you score your current setup (1 to 4) against what a use case actually requires, the &#8220;readiness&#8221; of your project stops being a debate and starts being a number.</p><div><hr></div><h3>Finding Your &#8220;Beachhead&#8221;</h3><p>The most actionable part of this framework is finding your <strong>Beachhead Use Case</strong>. </p><p>A beachhead isn&#8217;t your most ambitious goal (like a fully autonomous loan negotiator). It&#8217;s the use case where:</p><p>1.  The infrastructure gap is <strong>small</strong> (you can ship in weeks, not months).</p><p>2.  The business value is <strong>standalone</strong> (it pays for itself immediately).</p><p>By starting here, you aren&#8217;t just &#8220;doing a pilot&#8221; - you&#8217;re building the foundation that makes the ambitious stuff possible later.</p><div><hr></div><h3>Want to run this assessment yourself?</h3><p>I&#8217;ve put together a full walkthrough of these 8 dimensions and how to build your own &#8220;Gap Map.&#8221; If you&#8217;re tired of the &#8220;AI priority workshops&#8221; that lead nowhere, this might be the most useful 15 minutes of your week.</p><p><strong><a href="https://docs.google.com/spreadsheets/d/1i6e4Dfa543HuGCc4nrWWSXtKcZ5-ph-YiKRFDz1QMoc/edit?usp=drive_link">Check out the full breakdown here.</a></strong><br></p><p>I&#8217;d love to hear your thoughts&#8212;drop a comment on the video and let me know which of the 8 dimensions is currently the biggest blocker in your org.</p><p>Have a great weekend,</p><p>Sandi.</p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><p>Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[MCP: What’s Actually Working, What’s Breaking, and How to Do It Right]]></title><description><![CDATA[This week: Honest look at the Model Context Protocol and what history says about where this goes next. A decision tree, an architecture pattern, and several best practices.]]></description><link>https://newsletter.agentbuild.ai/p/mcp-whats-actually-working-whats</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/mcp-whats-actually-working-whats</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 23 May 2026 13:01:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cb30b2a9-2996-402a-aef2-b89d112fe862_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This article is too long for email - it might have been truncated. Please read on Substack.</em><strong><br><br>TL;DR</strong></p><ul><li><p>MCP is the right abstraction for standardising tool access across multiple agents, but most teams are deploying it without the governance it needs</p></li><li><p>Five failure modes keep appearing in regulated environments: hardcoded credentials, no authorisation layer between model and tool, invisible tool calls, server sprawl, and untracked data residency</p></li><li><p>MCP is not always the right choice. Direct function calling, existing APIs, and async queues are better fits for several common patterns</p></li><li><p>The fix isn&#8217;t complicated: treat MCP servers as infrastructure, instrument every tool call at the boundary, and never let the model be your policy engine</p></li></ul><div><hr></div><h2>MCP is at that USB moment</h2><p>Something shifted in 2024. Developers started asking, &#8220;can we connect an LLM to our tools?&#8221; and then wondering, &#8220;how do we do it without building a different integration for every model, every framework, every team?&#8221;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>These are the questions MCP answers. The <a href="https://modelcontextprotocol.io/docs/getting-started/intro">Model Context Protocol</a>, originally developed by Anthropic and released in November 2024, and now gaining ground as a <em>de facto</em> standard.</p><p>By mid-2025, MCP had moved from research-adjacent to actively deployed. GitHub Copilot, Cursor, Claude, and a growing list of enterprise agent frameworks had either adopted or announced support. The server ecosystem - registries, SDKs in Python and TypeScript, community-contributed connectors for everything from PostgreSQL to Salesforce had expanded fast. Almost every other product has its MCP.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OVSZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OVSZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png 424w, https://substackcdn.com/image/fetch/$s_!OVSZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png 848w, https://substackcdn.com/image/fetch/$s_!OVSZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png 1272w, https://substackcdn.com/image/fetch/$s_!OVSZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OVSZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png" width="1095" height="615" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:615,&quot;width&quot;:1095,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OVSZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png 424w, https://substackcdn.com/image/fetch/$s_!OVSZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png 848w, https://substackcdn.com/image/fetch/$s_!OVSZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png 1272w, https://substackcdn.com/image/fetch/$s_!OVSZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8382e34c-7c87-49a5-adcb-a78880f2a186_1095x615.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That speed should give you pause.</p><p><strong>This is a pattern we&#8217;ve seen before. </strong>When USB was introduced in 1996, it solved a real problem: a dozen incompatible port types on the back of every PC. It was the right abstraction. And within a few years, &#8220;plug and play&#8221; had become a running joke because the driver ecosystem moved faster than the discipline around it. Devices connected. Systems crashed. Enterprise IT spent years cleaning up what consumer enthusiasm had shipped. While the protocol was fine, the deployment culture was not.</p><p><strong>MCP is at that USB moment.</strong> The abstraction is right. The ecosystem is moving faster than the engineering rigour around it. Teams are shipping MCP servers in sprints, demoing them to CTOs, and having them in production eight weeks later. Six months after that, nobody can tell you what tools the agent is calling, the credentials haven&#8217;t been rotated since go-live, and there is no audit trail that would survive a compliance review.</p><p>The protocol didn&#8217;t fail them. The deployment pattern did.</p><p>This article is about the difference.</p><div><hr></div><h2>Tool Definition: A Contract with Non-Determinism</h2><p>The fundamental difference between an MCP tool and a standard API is that it is a contract between a traditional, deterministic backend system and a non-deterministic LLM agent. Standard API engineering assumes a consumer will call a function exactly as documented. Agent tooling requires developers to accept that the model will interpret the description and choose the arguments. This non-deterministic usage is why building for agents requires a higher degree of protective rigor around entitlement, validation, and audit than standard integration patterns.</p><div><hr></div><h2>What MCP gets right?</h2><p>MCP is solving a real problem, and the core of it is genuinely well-designed.</p><h4>The integration tax is real, and MCP eliminates it</h4><p>Before MCP, connecting an agent to a tool meant writing bespoke integration code. Every model had its own function-calling format. Every framework had its own abstraction layer. If you wanted to switch from one agent framework to another, you rebuilt your integrations. If you wanted the same capability accessible across multiple agents, you duplicated the logic and prayed for consistency.</p><p>Without a shared protocol, every team builds its own integration in the shape of its own constraints - its available libraries, its preferred auth pattern, its interpretation of what the downstream system needs. The result is integration sprawl that compounds with every new team that touches the same system. MCP breaks that coupling. A single MCP server exposes a set of tools, resources, and prompts under a standardised interface. Any MCP-compatible client regardless of which model or framework it uses, can discover and invoke those tools through the same protocol. Write once, expose everywhere.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GaJV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56224518-2b04-4b43-8f22-603903daa70d_1108x533.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GaJV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56224518-2b04-4b43-8f22-603903daa70d_1108x533.png 424w, https://substackcdn.com/image/fetch/$s_!GaJV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56224518-2b04-4b43-8f22-603903daa70d_1108x533.png 848w, https://substackcdn.com/image/fetch/$s_!GaJV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56224518-2b04-4b43-8f22-603903daa70d_1108x533.png 1272w, https://substackcdn.com/image/fetch/$s_!GaJV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56224518-2b04-4b43-8f22-603903daa70d_1108x533.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GaJV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56224518-2b04-4b43-8f22-603903daa70d_1108x533.png" width="1108" height="533" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56224518-2b04-4b43-8f22-603903daa70d_1108x533.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:533,&quot;width&quot;:1108,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GaJV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56224518-2b04-4b43-8f22-603903daa70d_1108x533.png 424w, https://substackcdn.com/image/fetch/$s_!GaJV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56224518-2b04-4b43-8f22-603903daa70d_1108x533.png 848w, https://substackcdn.com/image/fetch/$s_!GaJV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56224518-2b04-4b43-8f22-603903daa70d_1108x533.png 1272w, https://substackcdn.com/image/fetch/$s_!GaJV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56224518-2b04-4b43-8f22-603903daa70d_1108x533.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is what happened when REST became the default for web APIs in the early 2000s, displacing the chaos of SOAP, WSDL, and proprietary RPC formats. REST won because it was simple enough that teams could independently build to the same standard and have things actually work. MCP is attempting the same move at the agent-tool layer.</p><h4>Runtime capability discovery changes the architecture</h4><p>One of the underappreciated features of MCP is the tools/list endpoint. Think of it like DNS for tools - you don&#8217;t hardcode IP addresses into your application, you resolve them at runtime. An agent queries the server on startup, gets a schema-described list of available tools, and decides which to invoke based on the task. Your agent architecture can evolve without redeployment every time a tool is added or changed.</p><h4>Where it genuinely shines</h4><p>MCP is strongest when the problem is standardised access to well-defined internal systems. Four use cases stand out:</p><ul><li><p><strong>Internal tool registries.</strong> A platform team builds and owns MCP servers for canonical internal capabilities - search, data retrieval, workflow triggers. Agent teams consume them without needing to understand the underlying integration. The boundary is clean, the ownership is clear, and the interface is versioned. This is the internal developer platform model applied to agent tooling.</p></li><li><p><strong>Governed data catalogue access.</strong> An agent needs to query dataset metadata, lineage, or schema. Exposing a data catalog (Unity Catalog, Alation, Collibra, DataHub) via MCP gives the agent a structured, permissioned interface without direct database access. The server enforces what the agent can see. This matters enormously in financial services, where an agent browsing raw schema can inadvertently surface data it has no business touching.</p></li><li><p><strong>Regulated workflow triggers.</strong> An agent initiates a downstream process - raises a ticket, submits a form, triggers a notification. MCP provides a typed, auditable interface for those triggers. The tool schema documents exactly what inputs are required; the server enforces them. The schema is the contract.</p></li><li><p><strong>Multi-agent orchestration.</strong> A supervisor agent delegates to specialist subagents, each with its own MCP server exposing its capabilities. The supervisor discovers what each subagent can do and orchestrates accordingly. This is where capability discovery really earns its keep; it makes composition between agents tractable without tight coupling.</p></li><li><p><strong>Tool Design for LLM Token Efficiency.</strong> The effectiveness of a tool is measured by its use within the LLM's context window. Prioritize tool interfaces that minimize the total volume of tokens consumed. For instance, prefer a <code>search_datasets(query: str)</code> tool to a generic <code>list_all_datasets()</code> tool. Furthermore, design tools with parameters for pagination and truncation to ensure the tool output - the data returned to the LLM is as concise and high-signal as possible. Refer to Anthropic&#8217;s blog: <a href="https://www.anthropic.com/engineering/writing-tools-for-agents">Writing effective tools for agents &#8212; with agents</a></p></li></ul><p>A minimal MCP server for a governed data catalog wraps your catalog API behind a typed search_datasets tool enforcing domain filters, capping result limits, and keeping the agent away from raw schema access entirely. The tool definition is the contract; the server enforces it.</p><p>This is MCP doing what it&#8217;s designed for.</p><div><hr></div><h2>What risks MCP brings?</h2><p>MCP moves fast to production. The failure modes tend to follow shortly after because the protocol makes it easy to ship something that works in a POC before the operational questions have been answered.</p><p>These are the five patterns you should understand.</p><h4>Developers often forget &#8220;credential best practices&#8221;</h4><p>Hardcoded credentials are not a new problem. What MCP changes is the rate at which new service boundaries get created. Spinning up an MCP server takes minutes - a few lines of Python, a decorator, done. That speed means teams are creating new integration points faster than their credential management habits have been built to handle. The result is more hardcoded credentials, in more places, with less visibility than traditional integration patterns would produce.</p><p>In a UK financial institution, this creates obligations that a missing credential policy would directly fail to meet under the Digital Operational Resilience Act (DORA). A credential with no owner and no rotation policy fails that bar.</p><p><strong>DO NOT DO THIS: hardcoded credential in MCP server</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;1877be29-8bb0-4052-893a-e17311eeae2c&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">DATABASE_URL = &#8220;postgresql://svc_agent:SuperSecret123@prod-db:5432/customers&#8221;</code></pre></div><p>The credential is now wherever this server runs. If the server is containerised, the credential is in the image or the environment. If the image is pushed to a registry, it may be in the layer history. The blast radius of a compromise is the entire downstream system, not just the agent. This is the digital equivalent of writing your vault combination on a Post-it and sticking it to the outside of the vault.<br></p><h4>Models usually have access to every tool in an MCP server - this is not <em>least priviledge</em></h4><p>MCP puts tool invocation decisions in the hands of the model. The model reads the tool schemas, decides which tool to call, and constructs the arguments. Nothing in the base protocol validates whether that decision was appropriate, whether the arguments are safe, or whether the calling agent had the entitlement to invoke that tool for that user in that context.</p><blockquote><p>This is Saltzer and Schroeder&#8217;s <em>principle of least privilege</em> - articulated in their 1975 paper <a href="https://www.cs.virginia.edu/~evans/cs551/saltzer/">&#8220;The Protection of Information in Computer Systems&#8221;</a> and <strong>still the foundation of access control design</strong>. <br><br>The principle states that every component should operate with only the permissions it actually needs. A model that has access to every tool in an MCP server, for every user, at all times, is a maximal privilege configuration. It is the opposite of least privilege.</p></blockquote><p>In regulated industries, this matters concretely. An agent that can invoke a transfer_funds or update_credit_limit tool should not be making that invocation based solely on what the model infers from a user message. The trust chain is broken.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;17c48e96-80ea-44f1-8b9f-a6bfccabeba2&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">python

# Dangerous: model output routes directly to tool execution

async def run_agent(user_message: str, user_id: str):

    response = anthropic_client.messages.create(

        model=&#8221;claude-sonnet-4-20250514&#8221;,

        tools=mcp_tools,  # All tools. No entitlement check. No context.

        messages=[{&#8221;role&#8221;: &#8220;user&#8221;, &#8220;content&#8221;: user_message}]

    )

    for block in response.content:

        if block.type == &#8220;tool_use&#8221;:

            # The model decided. The server executes. Nothing in between.

            result = await mcp_session.call_tool(block.name, block.input)
</code></pre></div><p>This code grants the model access to all tools (<code>tools=mcp_tools</code>), establishing a maximal privilege configuration. The model&#8217;s <code>tool\_use</code> block is immediately trusted as the final decision, bypassing any policy or validation check. Execution proceeds directly to <code>mcp\_session.call\_tool</code> without confirming the user&#8217;s entitlement or context.</p><blockquote><p>The model is a reasoning engine. It is not a policy engine. These are different things, and conflating them is how you end up with agents doing things nobody authorised them to do.</p></blockquote><p></p><h4>MCP invocations still require explicit instrumentation to be traced end&#8209;to&#8209;end</h4><p>Any RPC to a separate process requires explicit instrumentation to appear in your trace - that is not unique to MCP. What makes MCP different is that the protocol is new enough that most observability platforms have no native integration for it yet. With a mature HTTP or gRPC stack, there is a reasonable chance your tracing library auto-instruments at the transport layer. With MCP, there is not. Teams adopting it now are on their own.</p><p>An MCP tool call is an RPC to a separate process. Without explicit instrumentation, that call disappears from your trace. You can see the model&#8217;s input and output. You cannot see which tool was called, with what arguments, what the server returned, how long it took, or whether it failed. This is the observability equivalent of a black box flight recorder that stops recording five minutes before the crash. You have most of the data. You&#8217;re missing exactly the part that matters.</p><p>For regulated deployments, this is an audit problem. The FCA&#8217;s Senior Managers and Certification Regime (SM&amp;CR) creates personal accountability for outcomes. If an agent made a decision that affected a customer - a credit flag, a document retrieval, a workflow trigger - and that decision was influenced by a tool call, you need to reconstruct exactly what the tool returned. If the tool call isn&#8217;t in your trace, you cannot reconstruct it. &#8220;The model did it&#8221; is not an explanation that satisfies a regulator.</p><p>The fix lies in instrumentation at the MCP boundary, not inside the server. This is shown in the MCPGateway pattern below.</p><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;6d4f435e-42df-4be4-8d92-e08b88f403d4&quot;,&quot;caption&quot;:&quot;Hey everyone,&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Decision Traces: The Missing Black Box &#9992;&#65039; for AI Agents&quot;,&quot;publishedBylines&quot;:[],&quot;post_date&quot;:&quot;2026-04-18T13:31:15.874Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d180d4d2-5f06-49f5-986e-d83ffdedf651_1280x720.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://newsletter.agentbuild.ai/p/decision-traces-the-missing-black&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:194595643,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2211527,&quot;publication_name&quot;:&quot;agentbuild.ai&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!OIBg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3453368a-da00-4960-b174-e3313b941314_256x256.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><h4>Every team builds one, no one owns them - there is no established governance for MCP servers</h4><blockquote><p>In a large organisation, the absence of a shared standard is a vacuum that teams fill independently - each making a locally rational decision that creates a globally irrational system.</p></blockquote><p><strong>The MCP equivalent: </strong>without governance, every team designs its own simple system. The risk team builds an MCP server for their data warehouse. The finance team builds a different MCP server for the same data warehouse with different auth. The platform team builds a third server that partially overlaps with both. <strong>The agent now sees twelve tools that do variations of the same thing. </strong>The people who built them have moved on. No deprecation path exists. This is not a hypothetical - it is the same pattern that played out with internal REST APIs at most large organisations that adopted microservices without a service catalogue, and it is already starting to repeat with MCP.</p><blockquote><p>The structural cause is <a href="https://www.laws-of-software.com/laws/hyrum/">Hyrum&#8217;s Law</a>: observed by Google engineer <a href="https://www.hyrumwright.org/">Hyrum Wright</a> and now widely referenced in software engineering: <em>&#8220;With a sufficient number of users of an API, it does not matter what you promise in the contract &#8212; all observable behaviours of your system will be depended on by somebody.&#8221;</em> <br><br>Once a team starts using your MCP server, they will depend on its undocumented behaviours. Deprecating it without governance becomes painful very quickly.</p></blockquote><p>Treating MCP servers as infrastructure from the first deployment - with an owner, a version, a changelog, and a deprecation policy is not bureaucracy. It is the thing that lets you move fast in two years without digging out from under your own sprawl.</p><h3>MCP doesn&#8217;t answer the data residency question </h3><p>MCP doesn't answer the data residency question, and neither should it, but because MCP makes it trivially easy to spin up a new server anywhere, <strong>teams are creating new data residency exposure points faster than they're tracking them</strong>.</p><p>This is the failure mode that almost never appears in ecosystem documentation and is the one most likely to cause a material incident in regulated industries.</p><p>When an agent calls an MCP tool, data flows in both directions: the arguments sent to the tool, and the response returned. In a regulated context, both can contain customer data, personally identifiable information, or material non-public information. The question of where that data flows - which process handles it, which logs capture it, which jurisdiction it transits through - is not answered by the protocol. <strong>That is not a criticism of MCP. It is simply a boundary you need to understand.</strong></p><blockquote><p>The MCP server is a process. That process can run anywhere. If it runs in a container in a region that is not approved for the data it is handling, you have a data residency violation before the tool even returns a result. If the tool call arguments are logged by intermediary infrastructure before reaching your server, you have a data handling question that needs a documented answer.</p></blockquote><p>For UK firms post-Brexit, this intersects with UK GDPR, FCA data governance expectations, and potentially the location requirements of your outsourcing arrangements. The compliance question is not &#8220;does MCP support data residency?&#8221; - it does not operate at that layer - but &#8220;can you trace every byte of this tool call, confirm where it went, and show it never left an approved boundary?&#8221;</p><p>That answer requires mapping the full data flow before deploying any MCP server that touches regulated data. Not after the first incident.</p><div><hr></div><h2>Do you actually need MCP?</h2><p>I see it commonly - every team jumps to the conclusion of using MCP very fast. MCP is infrastructure and infrastructure has a cost - operational overhead, governance burden, complexity. The Unix philosophy, articulated by Doug McIlroy in the early 1970s, puts it plainly: <em>&#8220;Write programs that do one thing and do it well.&#8221;</em> Before you introduce a protocol for interoperability, ask whether you actually need interoperability.</p><p>Here is a decision tree I like to use to help teams make that decision:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sgfI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sgfI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png 424w, https://substackcdn.com/image/fetch/$s_!sgfI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png 848w, https://substackcdn.com/image/fetch/$s_!sgfI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png 1272w, https://substackcdn.com/image/fetch/$s_!sgfI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sgfI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png" width="1456" height="501" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:501,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:404630,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/198907603?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sgfI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png 424w, https://substackcdn.com/image/fetch/$s_!sgfI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png 848w, https://substackcdn.com/image/fetch/$s_!sgfI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png 1272w, https://substackcdn.com/image/fetch/$s_!sgfI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F323ff459-d359-4154-9b70-7911bc77e93d_3714x1278.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Decision Tree: Do you need MCP?</figcaption></figure></div><p>Let&#8217;s make each branch concrete.</p><ul><li><p><strong>When direct function calling is the right answer</strong></p><p>If you have a single agent, a small number of tools, and no requirement for reuse across teams or frameworks, native function calling in the Anthropic SDK is simpler, cheaper, and easier to observe. No additional process boundary. No MCP server to maintain. No capability discovery overhead. Adding an MCP server here is the software equivalent of installing industrial plumbing to fill a kettle.<br></p></li><li><p><strong>When a well-governed existing API beats MCP</strong></p><p>If the downstream system already has a REST or gRPC API with proper authentication, rate limiting, observability, and documentation - a Salesforce API, an internal risk platform, a data catalogue with its own REST interface, wrapping it in an MCP server often adds a layer without adding value.<br></p><p><strong>The test is simple: </strong>does the MCP layer provide something the existing API does not? If the answer is capability discovery for agent consumption, standardised schema, or unified access across multiple systems, MCP earns its keep. If the answer is &#8220;it&#8217;s just a wrapper,&#8221; you&#8217;ve added a process boundary, a deployment artefact, and an operational dependency for no functional gain.<br></p></li><li><p><strong>When an async pattern is the right architecture</strong></p><p>MCP is synchronous request-response. The agent calls a tool, blocks, and waits. That is fine for fast, bounded operations. It is the wrong shape for long-running jobs (submit and poll, not block), audit-required fire-and-forget (a message queue with dead-letter handling gives you durability and replay that MCP cannot), and event-driven workflows where the agent should be consuming from a stream, not polling in a loop.</p></li></ul><p>MCP solves a specific problem well. The mistake is treating it as the default integration pattern for anything agent-related, rather than the right answer to a specific architectural question.</p><div><hr></div><h2>One pattern that works</h2><p>Let me show you an architecture pattern to address these failure modes above. First, let&#8217;s understand the few best practice that matter here. It a bit of recap, but worth a refresh.</p><ol><li><p><strong>MCP servers are infrastructure, not glue code.</strong> You need an owner, you need versioning, changelog, deprecation policy. It should be registered in your internal catalogue and deployed through the same pipeline as your other services. <br><br>&#8220;Who owns this MCP server?&#8221; should have a human name attached to it.</p></li><li><p><strong>Every tool call must be observable.</strong> Instrument at the boundary - in the layer between the orchestrator and the MCP session - not inside the server. The instrumentation wrapper is shared infrastructure, not something each team spends time re-implementing.</p></li><li><p><strong>The model never touches credentials or entitlements directly.</strong> There is always an authorisation layer between the model&#8217;s invocation decision and the tool&#8217;s execution. This is not optional in a regulated environment. It is least privilege applied at the agent layer.</p></li><li><p><strong>Credentials are runtime injection, not baked-in secrets. </strong>Retrieve credentials at server startup via your secrets manager (AWS Secrets Manager, HashiCorp Vault, Azure Key Vault) - never at image build time, never from environment variables baked into a container. The credential is never in your code, never in your image layer history, and has a documented owner and rotation policy. Rotation is handled by the secrets manager; the server picks up new credentials on the next startup cycle.</p></li><li><p><strong>Define quality before deployment using Evals. </strong>The observability focus in production must be preceded by rigorous quality assurance during development. And these ar enot unit tests -  you need systematic measurement of the LLM's ability to use the tool correctly. Advocate for comprehensive evaluation tasks grounded in complex, real-world scenarios to measure tool efficacy. For debugging, run these evaluations programmatically, instructing agents to output their reasoning steps alongside the tool invocation. This practice helps developers probe exactly why an LLM selects or struggles with specific tools, ensuring the quality of the non-deterministic contract before it is exposed to regulated production environments.</p><p></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W1VZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W1VZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png 424w, https://substackcdn.com/image/fetch/$s_!W1VZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png 848w, https://substackcdn.com/image/fetch/$s_!W1VZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png 1272w, https://substackcdn.com/image/fetch/$s_!W1VZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W1VZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png" width="1456" height="780" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:780,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:871903,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/198907603?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W1VZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png 424w, https://substackcdn.com/image/fetch/$s_!W1VZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png 848w, https://substackcdn.com/image/fetch/$s_!W1VZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png 1272w, https://substackcdn.com/image/fetch/$s_!W1VZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5a864ed-fc85-47a0-a5f8-219724b69b28_1814x972.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Sequence Diagram: MCP call Orchestration Pattern</figcaption></figure></div><p>Every tool call passes through the Guardrail Layer before it gets anywhere near the MCP server. That layer validates tokens, masks PII, fetches credentials from the Secrets Manager at runtime, and writes an immutable audit entry before execution starts. The MCP server receives a clean, credentialled, traced call. The response comes back, gets sanitised, and the trace span closes. The user gets a safe payload. Nothing touches the downstream system without a paper trail.</p><div><hr></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;08263cf6-6773-45b3-8a29-0a11f3ceedc0&quot;,&quot;caption&quot;:&quot;Hello everyone,&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How Do You Test AI - Practical Talk on AI Evaluation Approaches&quot;,&quot;publishedBylines&quot;:[],&quot;post_date&quot;:&quot;2026-03-14T14:31:07.946Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1bba58bf-642c-4eaf-8200-d48de101715b_1280x720.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://newsletter.agentbuild.ai/p/how-do-you-test-ai-practical-talk&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:190921146,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2211527,&quot;publication_name&quot;:&quot;agentbuild.ai&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!OIBg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3453368a-da00-4960-b174-e3313b941314_256x256.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>Conclusion</h2><p>MCP is the right abstraction at the right layer. The standardisation problem it solves is real, and the use cases where it works well are genuinely valuable enterprise problems. <strong>The protocol is not the issue.</strong></p><blockquote><p>What history tells us from USB to REST to microservices is that good protocols get adopted faster than the discipline to deploy them safely. </p></blockquote><p>That gap is where incidents come from. This is commonly described as the difference between a sharp knife and a blunt one: the sharp knife is more dangerous in the wrong hands, but it&#8217;s the right tool for someone who knows what they&#8217;re doing.</p><p>The teams that get this right usually ask the boring questions first - who owns this, where does the data go, what happens when this call fails at 2am - and build systems accordingly. <br><br><strong>That&#8217;s not caution. That&#8217;s just engineering.</strong></p><div><hr></div><h2>Using or building with MCP?</h2><p>Don't let speed compromise security. Apply the governance and architectural rigor outlined here to your MCP servers now. Build your Authorization and Observability Layer first to ensure your tool calls are secure, auditable, and compliant from day one.<br><br>Tell me in comments whether this resonates, what other challenges are you facing, and where did MCP do the magic for you. I am eager to learn from your experience - so please comment, leave a feedback.</p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><p>Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Why Agent-to-Agent Communication Fails - How to Design for Failure]]></title><description><![CDATA[This week: Agent communication is a major problem in multi-agent syatems. What ar ethe common failure modes, how to design for them, and key lessons I have learned.]]></description><link>https://newsletter.agentbuild.ai/p/why-agent-to-agent-communication</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/why-agent-to-agent-communication</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 16 May 2026 13:02:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2aeaa59e-f607-44e2-8c59-c89e34f20306_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey everyone,<br><br>If you&#8217;ve been building AI applications recently, you&#8217;ve likely noticed a massive architectural shift. We are moving away from monolithic, &#8220;do-everything&#8221; prompts and toward multi-agent systems. It&#8217;s an elegant idea: instead of one massive language model struggling to write code, test it, and document it simultaneously, you spin up specialized agents - a Coder, a Tester, and a Writer - and have them collaborate.</p><p>But as teams push these systems into production, they are hitting a wall. Having five smart agents does not automatically equal one smart system.</p><p>The industry is quickly learning a hard lesson: <strong>orchestration is an understood problem, and communication reliability is the actual bottleneck .</strong> You can easily instantiate ten agents using frameworks like <a href="https://www.langchain.com/langgraph">LangGraph</a>, <a href="https://microsoft.github.io/autogen/">AutoGen</a>, or <a href="https://www.crewai.com/">CrewAI</a>. But getting them to talk to each other reliably without hallucinating payloads, dropping context, or getting stuck in infinite loops is where the real engineering happens.</p><p>Let&#8217;s break down the first principles of agent communication, look at how they fail in production, and explore how modern production systems are solving these exact problems.</p><div><hr></div><h3>The First Principles of Agent Communication </h3><p>At its core, getting agents to collaborate requires the same fundamentals as distributed computing, but with a chaotic twist: the &#8220;nodes&#8221; in this network are <strong>non-deterministic text engines</strong>.<br></p><h4>1. Message Passing</h4><p><strong>Principle:</strong> Message passing is the transfer of information from one node to another. When Agent A finishes its job, it must hand off a payload to Agent B to trigger the next step.</p><ul><li><p><strong>Failure Mode:</strong> The Hallucinated Payload.</p></li><li><p><strong>Example:</strong> A Data Extraction Agent is told to pull a user&#8217;s ID and pass it to a Database Agent. Instead of passing <code>12345</code>, the agent passes, <em>&#8220;Here is the user ID you requested: 12345.&#8221;</em> The Database Agent expects an integer, receives a conversational string, and crashes.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4zk2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4zk2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png 424w, https://substackcdn.com/image/fetch/$s_!4zk2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png 848w, https://substackcdn.com/image/fetch/$s_!4zk2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png 1272w, https://substackcdn.com/image/fetch/$s_!4zk2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4zk2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png" width="462" height="138.02146690518782" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:334,&quot;width&quot;:1118,&quot;resizeWidth&quot;:462,&quot;bytes&quot;:50133,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/197971759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37a08a44-d9c8-43a7-beca-849f019149df_1118x334.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4zk2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png 424w, https://substackcdn.com/image/fetch/$s_!4zk2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png 848w, https://substackcdn.com/image/fetch/$s_!4zk2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png 1272w, https://substackcdn.com/image/fetch/$s_!4zk2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb65a643-4086-4917-a5f5-6f235b4cf274_1118x334.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Agents communicating in natural langugage are prone to errors</figcaption></figure></div></li><li><p><strong>Why it happens:</strong> LLMs are fine-tuned to be helpful conversationalists, not strict state machines. Without hard constraints, they inject pleasantries and markdown formatting into their outputs, corrupting the message payload.</p></li></ul><p></p><h4>2. Protocols and Interfaces - H2A, A2C, A2A</h4><p><strong>Principle:</strong> Protocols dictate the rules of engagement. In modern agentic systems, we categorize these interfaces into three distinct buckets:</p><ul><li><p><strong>H2A (Human-to-Agent):</strong> Conversational, unstructured, and forgiving (e.g., ChatGPT).</p></li><li><p><strong>A2C (Agent-to-Computer):</strong> Rigid and deterministic. The industry standard here is the <strong><a href="https://en.wikipedia.org/wiki/Model_Context_Protocol">Model Context Protocol (MCP)</a></strong>. Introduced by Anthropic in late 2024 and now hosted under the Linux Foundation, MCP standardizes how agents securely connect to external tools, IDEs, and databases.</p></li><li><p><strong>A2A (Agent-to-Agent):</strong> Peer-to-peer communication between two non-deterministic models. This is historically the most fragmented layer, but the industry recently coalesced around the <strong><a href="https://a2a-protocol.org/">Agent-to-Agent (A2A) Protocol</a></strong>. Originally released by Google in April 2025 and unified with IBM&#8217;s <a href="https://research.ibm.com/projects/agent-communication-protocol">Agent Communication Protocol (ACP)</a>, A2A is now a Linux Foundation open standard for cross-framework agent discovery and task delegation over HTTP and JSON-RPC.</p></li><li><p><strong>Failure Mode:</strong> Interface Confusion.</p></li><li><p><strong>Example:</strong> A developer uses MCP to perfectly connect a Research Agent to a PostgreSQL database (A2C). But when the Research Agent hands the data to a Writer Agent (A2A), the developer lets them communicate in conversational English. The Writer Agent misinterprets the unstructured text and hallucinates missing facts.</p></li><li><p><strong>Why it happens:</strong> Developers often treat A2A communication like H2A communication. Unless you enforce machine-readable protocols for peer-to-agent handoffs, conversational drift will inevitably break your architecture.</p><p></p></li></ul><h4>3. Shared Context and State</h4><p><strong>Principle:</strong> Agents need a shared understanding of the environment, current progress, and available data to collaborate effectively.</p><ul><li><p><strong>Failure Mode:</strong> Context Desynchronization.</p></li><li><p><strong>Real-World Example:</strong> A Researcher Agent analyzes a 50-page PDF and passes a brief outline to a Writer Agent. The Writer tries to draft the article but fabricates details because it lacks access to the source material.</p></li><li><p><strong>Why it happens:</strong> Context windows are expensive. To save tokens and latency, builders often restrict the context passed downstream. This creates asymmetric information - Agent A knows something Agent B doesn&#8217;t, leading to poor decisions.</p><p></p></li></ul><h4>4. Intent Alignment</h4><p><strong>Principle:</strong> Every agent in the chain must understand the overarching goal of the user, not just its localized sub-task, to ensure the final output is cohesive.</p><ul><li><p><strong>Failure Mode:</strong> The Telephone Game.</p></li><li><p><strong>Example:</strong> A user asks for a &#8220;brief, humorous summary of the latest AI news.&#8221; The Manager Agent passes the news to the Summarizer Agent but forgets to include the &#8220;humorous&#8221; instruction. The Summarizer writes a dry academic brief.</p></li><li><p><strong>Why it happens:</strong> Information decays across hops. When breaking a complex prompt into smaller agentic tasks, the nuance of the original user prompt is easily lost in translation.<br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7Wex!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Wex!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png 424w, https://substackcdn.com/image/fetch/$s_!7Wex!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png 848w, https://substackcdn.com/image/fetch/$s_!7Wex!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png 1272w, https://substackcdn.com/image/fetch/$s_!7Wex!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Wex!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png" width="282" height="316.25291181364395" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1348,&quot;width&quot;:1202,&quot;resizeWidth&quot;:282,&quot;bytes&quot;:322038,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/197971759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7Wex!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png 424w, https://substackcdn.com/image/fetch/$s_!7Wex!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png 848w, https://substackcdn.com/image/fetch/$s_!7Wex!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png 1272w, https://substackcdn.com/image/fetch/$s_!7Wex!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d90dcb4-e204-4f0d-9ced-08bb6055f20a_1202x1348.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Reference read: https://arxiv.org/pdf/2407.04503</figcaption></figure></div></li></ul><h4>5. Memory and Feedback Loops</h4><p><strong>Principle:</strong> When Agent B rejects Agent A&#8217;s work, Agent A needs memory of the failure and the ability to correct itself without repeating the exact same mistake.</p><ul><li><p><strong>Failure Mode:</strong> The Infinite Death Spiral.</p></li><li><p><strong>Example:</strong> A Coding Agent writes a Python script. The Execution Agent runs it, encounters a <code>SyntaxError</code>, and passes the error back. The Coder apologizes, generates the <em>exact same code</em>, and sends it back. They repeat this loop 50 times until the API budget is drained.</p></li><li><p><strong>Why it happens:</strong> LLMs are highly sensitive to their immediate context. If the feedback isn&#8217;t explicit, or if the model&#8217;s internal weights heavily favor a flawed syntax pattern, it will deterministically generate the same wrong answer.</p></li></ul><div><hr></div><h3>How To Solve This - Patterns That Are Working</h3><p>Building reliable multi-agent systems requires shifting your mindset from &#8220;prompt engineering&#8221; to &#8220;protocol engineering.&#8221; Here is how top-tier engineering teams are building resilience into their agent networks.</p><h4>1. Enforce Structured Outputs (a.k.a Strict Schemas)</h4><p>Never let agents talk to each other in free-text prose if they are exchanging data. Treat agent communication exactly like an API. Use tools like OpenAI&#8217;s <a href="https://platform.openai.com/docs/guides/structured-outputs">Structured Outputs</a>, <a href="https://pydantic.dev/docs/validation/latest/get-started/">Pydantic</a>, or standard Python libraries like <code>instructor</code> to enforce JSON schemas. If Agent A needs to pass an ID to Agent B, structurally guarantee that the output is <em>only</em> a valid JSON object matching your exact schema.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XcFw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XcFw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png 424w, https://substackcdn.com/image/fetch/$s_!XcFw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png 848w, https://substackcdn.com/image/fetch/$s_!XcFw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png 1272w, https://substackcdn.com/image/fetch/$s_!XcFw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XcFw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png" width="494" height="256.30125523012555" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:744,&quot;width&quot;:1434,&quot;resizeWidth&quot;:494,&quot;bytes&quot;:111632,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/197971759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea39515a-ab4b-4726-8a70-bbe2b6377e96_1434x744.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XcFw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png 424w, https://substackcdn.com/image/fetch/$s_!XcFw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png 848w, https://substackcdn.com/image/fetch/$s_!XcFw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png 1272w, https://substackcdn.com/image/fetch/$s_!XcFw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab90ea2b-4e01-4c49-afaa-cf811f71e138_1434x744.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Example - Agents communicate in structured schemas</figcaption></figure></div><h4>2. Adopt Standardized Protocols</h4><p>Stop reinventing the wheel for tool use and communication. Implement <strong>MCP</strong> for all A2C interactions to securely connect your agents to external systems. For A2A interactions, adopt the <strong>A2A Protocol</strong> to standardize payload structures instead of injecting variables into conversational prompt templates. Leveraging these standards ensures your agents can operate reliably across different platforms and enterprise environments.</p><h4>3. Centralize State (The &#8220;Blackboard&#8221; Pattern)</h4><p>Instead of passing massive context back and forth between agents like a hot potato, use a centralized state mechanism. In graph-based frameworks like LangGraph, all agents read from and write to a single, shared state object or &#8220;blackboard.&#8221; This ensures no agent is operating on outdated or asymmetric information.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q2pv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q2pv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png 424w, https://substackcdn.com/image/fetch/$s_!Q2pv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png 848w, https://substackcdn.com/image/fetch/$s_!Q2pv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png 1272w, https://substackcdn.com/image/fetch/$s_!Q2pv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q2pv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png" width="202" height="277.11875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:878,&quot;width&quot;:640,&quot;resizeWidth&quot;:202,&quot;bytes&quot;:63160,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/197971759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2389899-1eb9-45cf-b9eb-4180639bd055_640x878.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q2pv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png 424w, https://substackcdn.com/image/fetch/$s_!Q2pv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png 848w, https://substackcdn.com/image/fetch/$s_!Q2pv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png 1272w, https://substackcdn.com/image/fetch/$s_!Q2pv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0bdc79-6c9c-4039-9a11-37fea2385cd4_640x878.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Blackboard pattern for Agent co-ordination</figcaption></figure></div><h4>4. Implement Observability and Tracing</h4><p>When a multi-agent system fails, it fails silently and weirdly. You cannot debug these systems with standard print statements. You need dedicated LLM observability platforms like <a href="https://smith.langchain.com/">LangSmith</a>, <a href="https://langfuse.com/docs">Langfuse</a>, or <a href="https://mlflow.org/releases/3/">MLflow 3.0</a> to trace the exact input, output, and execution path of every single node. If the Telephone Game happens, you need to see exactly which agent dropped the context.</p><h4>5. Defensive Programming: Retries and HITL</h4><p>Expect agents to fail. Wrap inter-agent communication in standard retry logic with programmatic guardrails (like <a href="https://github.com/NVIDIA-NeMo/Guardrails">NVIDIA&#8217;s NeMo Guardrails</a>). If Agent A sends malformed data, catch the error programmatically and format it into a rigid prompt to force a correction. For critical workflows like writing to a production database (or deleting production databases) - enforce a Human-in-the-Loop (HITL) pause. Let the system wait for human approval before executing destructive actions.</p><div><hr></div><h3>Lessons Learnt</h3><ul><li><p><strong>Treat agents like microservices:</strong> A2A communication should mirror microservice architecture. Define rigid, structured API contracts for every handoff and validate payloads before they reach the next node.</p></li><li><p><strong>Embrace MCP and emerging standards:</strong> Separate your A2C (tool use) from your A2A (agent coordination). Use standardized open-source protocols like MCP and A2A to offload the complexity of system integrations so your agents can focus on logic.</p></li><li><p><strong>Cap your feedback loops:</strong> Always implement hard limits on iterative loops. If agents go back-and-forth more than three times without success, throw an exception and escalate to a human or a deterministic fallback script.</p></li><li><p><strong>Persist the global goal:</strong> Inject the original user intent into the system prompt of <em>every</em> agent in the pipeline. Do not assume intent will survive passing through three different LLM nodes.</p></li></ul><p>Multi-agent architectures are the future of complex AI applications, but they require rigorous distributed systems engineering. By enforcing strict protocols and shared state, you can stop the silent failures and build agentic systems that actually work in the real world.</p><div><hr></div><h3>See It In Action</h3><p>I&#8217;ve talked about the common patterns and failure modes of multi-agent orchestration and how to design for them in this video. Have a look.<br></p><div id="youtube2-2czYyrTzILg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;2czYyrTzILg&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/2czYyrTzILg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><br>As always your comments and feedback are welcome. Please share your experience and thoughts. <br><br>Thanks,<br>Sandi.</p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Beyond the RAG Pipeline: 3 Unspoken Truths About AI in Production]]></title><description><![CDATA[This week: The industry is building skyscrapers on top of a swamp of probability. Here is how world-class engineering teams are actually hardening their systems.]]></description><link>https://newsletter.agentbuild.ai/p/beyond-the-rag-pipeline-3-unspoken</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/beyond-the-rag-pipeline-3-unspoken</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sun, 10 May 2026 09:01:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4pnh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4pnh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4pnh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4pnh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4pnh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4pnh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4pnh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg" width="1456" height="964" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:964,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:470387,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/196997144?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4pnh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4pnh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4pnh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4pnh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab240f26-bf6f-4df0-bb12-bd6dde4b8a6c_4928x3264.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.pexels.com/photo/three-wooden-human-like-figurines-sitting-on-the-edge-of-a-wooden-box-14606305/">Photo by Marco Bianchetti</a></figcaption></figure></div><p>If you are reading yet another think-piece on &#8220;scaling autonomous agents&#8221; or &#8220;optimizing your basic RAG pipeline,&#8221; you are observing the trailing edge of the industry. We all know the standard playbook by now: deploy an LLM-as-a-judge, set up a vector database, and run basic semantic search. That is no longer a competitive advantage; it is table stakes.</p><p>To survive in production at scale today, engineering teams must stop treating generative models like brilliant, autonomous colleagues and start treating them like chaotic, highly expensive engine components.</p><p>Here are the three architectural blind spots that standard DevOps playbooks are ignoring - and how to fix them.</p><div><hr></div><h3>1. Stop Building Agents. Build State Machines.</h3><p>The current industry obsession is giving LLMs autonomy - letting them chain tools, determine their own loops, and &#8220;think&#8221; their way out of problems. However, in an enterprise production environment, autonomy is just another word for liability.</p><p>You do not want an autonomous agent; you want a rigid, locked-down <strong>Finite State Machine (FSM)</strong>.</p><blockquote><p>Your software architecture should entirely dictate the exact path, the boundaries, and the execution graph. The LLM should <em>only</em> be utilized for the transition logic. Its sole job is to ingest messy, unstructured user input and output a deterministic decision: &#8220;Do we transition to State A or State B?&#8221;</p></blockquote><p>By stripping the model of its agency and restricting it to routing and classification, your latency drops, your reliability scales, and crucially, your system becomes highly debuggable when an edge case inevitably breaks the flow.</p><div><hr></div><h3>2. Eradicate the &#8220;Politeness Tax&#8221;</h3><p>If you audit your raw token logs, you will likely find that you are paying thousands of dollars a month - and sacrificing hundreds of milliseconds of latency per request - just to let your model clear its throat.</p><p>Every time a background model outputs, <em>&#8220;Certainly! I&#8217;d be happy to extract that data for you. Here is the requested JSON:&#8221;</em>, you are burning compute. At scale, politeness is an engineering flaw.</p><p>You cannot fix this with prompt engineering alone. You must enforce <strong>strict grammar constraints at the inference level</strong>. Do not politely ask the model to return JSON in the system prompt; force the API to accept <code>{</code> as the absolute only valid first token. Strip out all conversational abilities from your background processing models.</p><blockquote><p><strong>You do not need a polite assistant in your backend data pipeline; you need a ruthless text calculator.</strong></p></blockquote><div><hr></div><h3>3. Neutralize &#8220;Zombie Memory&#8221; in Semantic Caching</h3><p>Semantic caching is universally recommended to reduce API costs. A user asks a question, you embed it, check if you have answered a mathematically similar query recently, and return the cached answer.</p><p>What nobody discusses is <strong>semantic cache rot</strong>. If you are caching answers about dynamic data, like your pricing tiers, live inventory, or active user permissions, the underlying reality will eventually change, but your vector cache remains static. When this happens, the cache intercepts the query and serves up a perfectly formatted, highly confident answer that is now entirely false. Your system isn&#8217;t hallucinating; it is remembering a dead reality.</p><p>To solve this, a simple Time-to-Live (TTL) expiration is insufficient. You must bind your vector cache invalidation directly to your database webhooks. If a product goes out of stock in your primary database, your system must aggressively and automatically flush the neighborhood of vectors in your cache that map to that specific product&#8217;s metadata.</p><div><hr></div><h3>The Takeaway</h3><p>Moving AI from a compelling local demo to a hardened production environment requires a fundamental shift in engineering mindset. It is not about finding the perfect prompt or chasing the newest foundational model.</p><p>The best AI engineers do not try to find perfect model outputs . They build perfect architectural nets to catch the model when it inevitably behaves unpredictably.</p><div><hr></div><h3>What is your production AI blind spot?</h3><p>We are all writing the playbook for production AI in real-time, and the best lessons come from the trenches, not the demo environments. Hit reply and tell me about the weirdest silent failure mode you have caught in production recently, the one that no standard DevOps tool saw coming. </p><p>If this issue helped you rethink your architecture, do me a favor: forward it to the engineer on your team who is currently trying to solve a systems problem with another paragraph of prompt engineering.<br><br>Talk soon,<br>Sandi.</p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Evaluation Graph: Why Your AI Pipelines Are Lying to You]]></title><description><![CDATA[This week: the Evaluation Graph - and why the shape of your eval matters more than the score. Your system is a graph. Your evaluations are pipelines. That gap is where production failures live.]]></description><link>https://newsletter.agentbuild.ai/p/the-evaluation-graph-why-your-ai</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/the-evaluation-graph-why-your-ai</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 02 May 2026 13:31:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/980b3675-19d5-4893-85c7-521bc9ff584a_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here is a pattern I have seen more times than I can count.</p><p>A team deploys an AI system into production. It passes every evaluation they ran. Accuracy looked good. The stakeholder demo went well. The pilot was declared a success. Three months later, the system is quietly shelved because the outputs no longer make sense - or worse, they never did, and nobody caught it until real users started complaining.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>When I dig into what went wrong,  I often find the shape of the evaluation resulting in low quality agentic decisions.</p><blockquote><p>The teams running linear eval pipelines - input goes in, score comes out - are measuring <em>a snapshot of a moment</em>. They are not measuring how their system behaves as context shifts, as data drifts, as agents hand off to other agents, as the real world does what the real world always does. They are measuring a straight line. Their system is a graph.</p></blockquote><p>That mismatch is why so many AI evaluations feel thorough and turn out to be worthless.</p><div><hr></div><h2>Pipelines vs Graphs</h2><p>The word &#8216;pipeline&#8217; is everywhere in AI engineering. Data pipelines, inference pipelines, eval pipelines. We&#8217;ve adopted it as the default mental model for how AI systems work.</p><p>And for a lot of data engineering, it&#8217;s correct. Data flows in one direction. You extract, you transform, you load. A pipeline is a clean metaphor because data really does flow like water through a pipe.</p><blockquote><p>But AI systems in production - especially multi-agent systems, RAG architectures, and anything that has to maintain context across multiple turns or tool calls - do not behave like pipelines. They behave like graphs. There are loops. There are conditional branches. There are nodes that depend on the state of other nodes that were resolved two steps earlier. Context that was established at step one can poison or distort the output at step seven.</p></blockquote><p>When you evaluate a graph as if it were a pipeline, you get a false sense of confidence. You test the happy path. You test the input-output pair. You miss the edges. You miss the feedback loops. You miss the context that has been accumulating and silently corrupting your system&#8217;s reasoning.</p><p>I&#8217;ve started calling this <strong>context drift</strong> - the phenomenon where a system&#8217;s outputs because the context it&#8217;s operating in has shifted in ways your evaluations weren&#8217;t designed to detect. A pipeline eval can&#8217;t catch context drift. Only a graph-shaped evaluation can.</p><div><hr></div><h2>What is an Evaluation Graph?</h2><p>The Evaluation Graph is not a tool or a framework you install. It&#8217;s a mental model - a different way of thinking about what you&#8217;re actually evaluating and when.</p><p>In a pipeline eval, you define a set of test cases, run your system against them, and score the outputs. Done. Repeatable. Clean.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!giWY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!giWY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png 424w, https://substackcdn.com/image/fetch/$s_!giWY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png 848w, https://substackcdn.com/image/fetch/$s_!giWY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!giWY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!giWY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png" width="1456" height="786" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:786,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4300298,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/196205889?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!giWY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png 424w, https://substackcdn.com/image/fetch/$s_!giWY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png 848w, https://substackcdn.com/image/fetch/$s_!giWY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!giWY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F042d535b-3fc1-4947-b044-eb32d3129986_2464x1330.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Evaluation Graph Concept - Generated by Author</figcaption></figure></div><p>In an evaluation graph, you map out the nodes of your system - the points where decisions are made, where context is retrieved, where agents hand off to each other, where state is read or written - and you evaluate at each node, not just at the final output.</p><div><hr></div><h2>Here is what that changes in practice.</h2><p><strong>First</strong>, <strong>you gain localised failure detection.</strong> When a pipeline eval fails, you know something went wrong. You don&#8217;t know where. When a graph eval fails, you know exactly which node broke down - was it the retrieval? The reranker? The summarisation step? The router that decided which agent to call? You can fix what&#8217;s actually broken instead of rerunning the whole system hoping for different results.</p><p><strong>Second</strong>, <strong>you can evaluate context propagation. </strong>I have seen this skipped many times. It&#8217;s not enough to evaluate whether each node produces a good output given its input. You need to evaluate whether the context being passed between nodes is coherent, relevant, and not accumulating noise. I&#8217;ve seen systems where individual components all scored above 90% in isolation, but the system as a whole produced nonsense because each node was passing slightly degraded context to the next one. No pipeline eval would catch that.</p><p><strong>Third, you can evaluate decision boundaries.</strong> Multi-agent systems have routing logic - conditions that decide which agent runs next, or whether to escalate, or whether to call a tool. These decision boundaries are often the most fragile part of a production AI system, and they&#8217;re almost never tested explicitly. In an evaluation graph, they are nodes. They get evaluated just like everything else.</p><div><hr></div><h2>How to Build One</h2><p>Starting with the evaluation graph doesn&#8217;t require you to throw away your existing evals. It requires you to extend them in a specific direction.</p><p><strong>The first step is decomposition. </strong>Draw out your system - literally, on a whiteboard or in a diagram - and identify every point where a meaningful decision is made or meaningful state changes. Each of those points is a node. Each connection between nodes is an edge. What you&#8217;re drawing is the evaluation graph. Most teams are surprised by how many nodes they find that they&#8217;ve never evaluated.</p><p><strong>The second step is context mapping.</strong> For each edge in the graph, define what context is being passed from one node to the next. What does the downstream node need to function correctly? What could the upstream node pass that would corrupt the downstream output? These become your edge-level test cases - not just input-output pairs, but context-propagation scenarios.</p><p><strong>The third step is failure mode enumeration.</strong> For each node, ask: what does this node look like when it&#8217;s failing quietly? Not failing loudly - that&#8217;s easy to catch. Quiet failures are the dangerous ones. A retrieval node that returns plausible but wrong documents. A router that sends requests to the wrong agent 15% of the time. A summarisation step that subtly omits the most important information. These failure modes need to be in your evaluation suite explicitly. If they&#8217;re not, you won&#8217;t find them until a user does.</p><p><strong>The fourth step</strong>, and this is where graph-shaped evaluation really separates from pipeline evaluation is <strong>composing your node-level evals into end-to-end scenarios </strong>that test the interaction effects. Not just &#8216;does node A work&#8217; and &#8216;does node B work&#8217;, but &#8216;when node A produces this class of output, does node B degrade in a predictable way&#8217;. The interactions between nodes are often where production AI systems fail.</p><div><hr></div><h2>This Needs a Shift in Mindset</h2><p>The teams that build AI systems that hold up in production are building the most rigorous evaluation infrastructure. And rigorous evaluation infrastructure starts with a simple question: <strong>is my evaluation shaped like my system?</strong></p><p>If your system is a graph and your evaluations are pipelines, you have a gap. That gap is where production failures live.</p><p>The evaluation graph is not a perfect solution - no evaluation framework is. Context still drifts in ways you won&#8217;t anticipate. Failure modes you didn&#8217;t enumerate will still appear. But it gets you structurally closer to what&#8217;s actually happening in your system, and that&#8217;s the difference between catching problems in staging and catching them after a customer has seen them.</p><p>This is one of the core concepts I&#8217;m currently working on. If it resonates with what you&#8217;re seeing in your own work, I&#8217;d genuinely like to hear about it. Hit reply and tell me what you see. The patterns you share inform what I write next.</p><p>Talk soon,<br>Sandi</p><div><hr></div><p>&#128073; I wrote more about the Eval Graphs in my article on Atlan&#8217;s community substack.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:193583020,&quot;url&quot;:&quot;https://metadataweekly.substack.com/p/context-graphs-as-ai-evaluation-infrastructure&quot;,&quot;publication_id&quot;:585908,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Context &amp; Chaos&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!q3WY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d54bd2c-07b0-430f-9c05-9c349d9bf3d0_300x300.png&quot;,&quot;title&quot;:&quot;Context Graphs as AI Evaluation Infrastructure&quot;,&quot;truncated_body_text&quot;:&quot;About the Author: Sandipan Bhaumik have spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, he shares how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work.&quot;,&quot;date&quot;:&quot;2026-04-09T14:05:59.147Z&quot;,&quot;like_count&quot;:11,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:193058051,&quot;name&quot;:&quot;Sandipan Bhaumik&quot;,&quot;handle&quot;:&quot;sanbhaumik&quot;,&quot;previous_name&quot;:&quot;Sandi Bhaumik&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/651c04c2-d92e-4a2e-905f-a59346e3e950_1024x1024.png&quot;,&quot;bio&quot;:&quot;I&#8217;ve spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, I share how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work.&quot;,&quot;profile_set_up_at&quot;:&quot;2023-12-29T14:48:55.893Z&quot;,&quot;reader_installed_at&quot;:&quot;2024-02-15T19:29:15.030Z&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null},&quot;primaryPublicationId&quot;:2211527,&quot;primaryPublicationName&quot;:&quot;agentbuild.ai&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://newsletter.agentbuild.ai&quot;,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://metadataweekly.substack.com/p/context-graphs-as-ai-evaluation-infrastructure?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!q3WY!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d54bd2c-07b0-430f-9c05-9c349d9bf3d0_300x300.png" loading="lazy"><span class="embedded-post-publication-name">Context &amp; Chaos</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Context Graphs as AI Evaluation Infrastructure</div></div><div class="embedded-post-body">About the Author: Sandipan Bhaumik have spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, he shares how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">4 months ago &#183; 11 likes &#183; Sandipan Bhaumik</div></a></div><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Why Solution Architects Are the Real Force Behind Enterprise AI Transformation]]></title><description><![CDATA[The demo worked. The boardroom loved it. Six months later, someone made a call. It always goes to the same person.]]></description><link>https://newsletter.agentbuild.ai/p/why-solution-architects-are-the-real</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/why-solution-architects-are-the-real</guid><pubDate>Sun, 26 Apr 2026 10:43:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/141a97f5-4092-4502-80da-cb58adb9f80a_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There&#8217;s a role inside every enterprise AI programme that nobody has a clean job title for. It isn&#8217;t the VP who sponsors the initiative. It isn&#8217;t the data scientist who builds the model. It isn&#8217;t the product manager who writes the requirements.</p><p>It&#8217;s the person who gets pulled into the room when the demo worked brilliantly and the deployment didn&#8217;t. The person who has to figure out why a system that impressed everyone in the boardroom is now sitting in a security review queue with no clear owner, no evaluation criteria, and a go-live deadline nobody wants to move.</p><p><strong>That person is usually a Solutions Architect.</strong></p><p>And in this new world of AI transfomration architects are lacking the frameworks to match the responsibility they&#8217;ve been handed.</p><div><hr></div><h3><strong>What the role has become</strong></h3><p>I&#8217;ve spent eighteen years in enterprise data and AI. The last several watching what happens when organizations decide to take AI seriously.</p><blockquote><p>Here&#8217;s what I keep seeing: Solutions Architects are becoming the load-bearing wall of AI transformation programmes. By default.</p></blockquote><p>They&#8217;re the ones who understand both the technology and the business context. They&#8217;re trusted enough to sit in executive sessions and technical ones. They have enough credibility to push back on vendor claims and enough pragmatism to know what actually ships.</p><p>So they get handed things. Big things.</p><p>Define the production readiness criteria. Assess whether the data infrastructure can support this use case. Figure out who owns the outcome when the model is wrong. Translate what the VP wants into something the engineering team can build. Get security and compliance aligned before the launch date nobody will move.</p><blockquote><p>That&#8217;s not an implementation role. That&#8217;s an organizational diagnostic role. And most architects are not prepared for it.</p></blockquote><div><hr></div><h3><strong>The gap nobody names</strong></h3><p>The architects I see are not struggling because they can&#8217;t build. They can build. They&#8217;re struggling because the job has shifted <strong>from build to diagnose</strong>, and they don&#8217;t yet have the instruments for it.</p><p>When a doctor walks into a room, they&#8217;re not improvising. They have a diagnostic protocol. Repeatable questions. Known patterns. A framework that tells them what to look for and in what order, so they can tell the difference between something that needs immediate intervention and something that needs monitoring.</p><blockquote><p>Right now, most architects walking into an AI programme are improvising. Drawing on instinct built from past projects. Pattern-matching against things they&#8217;ve seen before, hoping the pattern holds.</p></blockquote><p>Sometimes it does. Often it doesn&#8217;t.</p><p>And when it doesn&#8217;t, the cost isn&#8217;t just the failed project. It&#8217;s the six months of organizational trust that went with it. The next AI initiative that&#8217;s three times harder to fund because this one didn&#8217;t ship. The architect who now has a complicated story to tell about why the thing they led didn&#8217;t work.</p><div><hr></div><h3><strong>What real preparation looks like</strong></h3><p>I&#8217;ve been thinking for a long time about what it would mean to give architects the diagnostic tools they actually need. Something closer to a practitioner&#8217;s handbook for the organizational side of AI deployment. Not a vendor comparison or a tutorial on which framework to use.</p><p><strong>The kind of resource that helps you walk into an early-stage AI programme and ask the right questions before anyone starts building. </strong>That gives you a structured way to identify where the real risk is - not the model risk, but the <strong>Data Debt</strong> sitting in pipelines that haven&#8217;t been touched in three years. The <strong>Decision Debt</strong> in an organization where nobody has agreed on who owns an AI error. The <strong>Evaluation Debt</strong> in a team that&#8217;s been running vibe checks and calling it validation.</p><p>The kind of resource that helps you have the conversation with the VP that reframes the whole initiative - not as a technology project, but as an organizational readiness problem that happens to have a technology solution.</p><p>That&#8217;s the conversation that changes outcomes. And most architects don&#8217;t have a framework for it yet.</p><div><hr></div><h3><strong>Why I&#8217;m spending time on this</strong></h3><p>I&#8217;ve watched enough of these programmes - close enough to see the failure modes in detail - that the patterns are starting to feel predictable. Which means these are preventable.</p><p>I can walk into a kickoff meeting now and have a reasonable sense of what&#8217;s going to go wrong six months later. Not because I&#8217;m smarter than anyone in the room. Because I&#8217;ve seen it before. Enough times that it&#8217;s stopped feeling like bad luck and started feeling like a diagnostic problem with a known set of causes.</p><p>What I want to do - what I&#8217;m actively working on - is make that pattern recognition transferable. To give architects the frameworks that took me years of seeing things go wrong to develop, so they don&#8217;t have to learn the same lessons at the same cost.</p><p>That&#8217;s the work I&#8217;m orienting around. That&#8217;s the shape I want to give this community.</p><p>If you&#8217;re an architect who&#8217;s been handed one of these programmes - or knows you&#8217;re about to be - I&#8217;d genuinely like to hear what&#8217;s hard about it right now?</p><p>Talk soon,<br><strong>Sandi</strong></p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div><hr></div><p>Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Decision Traces: The Missing Black Box ✈️ for AI Agents]]></title><description><![CDATA[Decision traces explained - what they are, why every consequential AI agent needs them, and the architecture that makes reasoning auditable, defensible, and improvable.]]></description><link>https://newsletter.agentbuild.ai/p/decision-traces-the-missing-black</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/decision-traces-the-missing-black</guid><pubDate>Sat, 18 Apr 2026 13:31:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d180d4d2-5f06-49f5-986e-d83ffdedf651_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey everyone,<br><br>Hope you all are doing well. Today, I am bringing up something that is increasingly coming up in my customer discussions. Not everyone is giving it a name, but the requirements they define clearly point to building <em><strong>Decision Traces</strong></em>.</p><p>Let me explain.</p><p><a href="https://en.wikipedia.org/wiki/Flight_recorder">Flight data recorders (FDR)</a> are popularly know as the <strong>black box</strong> of the aircraft. Technically the black box contains the FDR and the Cockpit Voice Recorder (CVR). The FDR turns raw sensor traces into timelines that explain crashes, reveal root causes, and drive global aviation safety improvements. Before flight data recorders were mandated, when something went wrong, investigators worked from witness accounts, wreckage patterns, and whatever instruments happened to be installed at the time. The analysis was mostly incomplete, often contradictory, and it rarely led to systemic changes. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gVgt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gVgt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png 424w, https://substackcdn.com/image/fetch/$s_!gVgt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png 848w, https://substackcdn.com/image/fetch/$s_!gVgt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!gVgt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gVgt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Infographic showing five major aviation accidents and how flight data recorders enabled investigators to understand causes and improve safety.&quot;,&quot;title&quot;:&quot;Infographic showing five major aviation accidents and how flight data recorders enabled investigators to understand causes and improve safety.&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Infographic showing five major aviation accidents and how flight data recorders enabled investigators to understand causes and improve safety." title="Infographic showing five major aviation accidents and how flight data recorders enabled investigators to understand causes and improve safety." srcset="https://substackcdn.com/image/fetch/$s_!gVgt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png 424w, https://substackcdn.com/image/fetch/$s_!gVgt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png 848w, https://substackcdn.com/image/fetch/$s_!gVgt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!gVgt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88666d62-0e47-4451-bece-f33a324b4d7e_2848x1600.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The aviation industry knew flying was becoming more consequential with more routes, more passengers, more complex airspace, but the infrastructure to understand <em><strong>why things failed </strong></em>hadn&#8217;t kept pace with the deployment of the systems themselves. It was invented in response to the recognition that consequential systems operating at scale need a structured record of their reasoning - not just their outcomes.</p><p><strong>AI agents are at the same inflection point today. </strong>And the industry, especially in the regulated space is recognizing that.</p><div><hr></div><h2>What&#8217;s the gap right now?</h2><p>An AI agent deployed in a production system today typically produces two things: an input log and an output. What it doesn&#8217;t produce is the reasoning chain between them in any structured, queryable, auditable way .</p><p>This gap has a name. It&#8217;s called <strong>Decision Debt</strong>, one of the three categories of debt that block AI from working in production. Decision Debt accumulates when you build and deploy AI systems before defining how decisions get made, recorded, and reviewed. It&#8217;s not a future problem. It&#8217;s accumulating now, in every agent deployment that ships without trace infrastructure.</p><p>A decision trace is the record of how an agent got from context to conclusion: what it knew, what it considered, what it weighted, what it discarded, and at what confidence level it committed to an action. </p><p><strong>IMPORTANT:</strong> It&#8217;s not a log file. Logs capture events. Traces capture <em>reasoning</em>.</p><p>The distinction matters because when something goes wrong - and in any system operating at scale, you need to answer a different set of questions than a log can address. </p><p>Answering &#8220;what happened&#8221; is not enough, but <em><strong>&#8220;why did the agent conclude that, given what it had access to?</strong></em>&#8221; matters more.</p><div><hr></div><h2>This is a historical pattern</h2><p>Aviation gets to the black box through painful iteration. Financial services gets to trade surveillance infrastructure the same way. Healthcare builds clinical decision support audit trails only after near-misses force the question.</p><p>The pattern across every regulated industry is identical: consequential system deploys, operates without adequate observability, incident occurs, retroactive audit reveals the trace infrastructure was never built, expensive fixes follow.</p><p>What&#8217;s different with AI agents is that we can see this pattern coming before the incidents accumulate. The decision trace problem is visible now, in advance, to anyone who has watched the previous cycles play out in adjacent domains.</p><p>Nuclear power operations built decision logging infrastructure into control room design before widespread deployment. And that&#8217;s not because regulators demanded it initially, but because the engineers understood that a system making consequential decisions in real time needed to be interrogable after the fact. </p><blockquote><p>The Chernobyl investigation was partially possible because <a href="https://grokipedia.com/page/investigations_into_the_chernobyl_disaster#:~:text=The%20assessment%20relied%20heavily%20on,positive%20void%20coefficient%20of%20reactivity.">operator actions were timestamped and sequenced</a>. The lessons extracted shaped reactor design globally.</p></blockquote><p>The equivalent for AI agents isn&#8217;t complicated in principle. </p><p><strong>It is, however, work that almost nobody has started.</strong></p><div><hr></div><h2>What Decision Trace Infrastructure actually need?</h2><p>The architecture for a decision trace system has five functional layers, and each one has a specific job. Here&#8217;s how they fit together.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LZl-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LZl-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png 424w, https://substackcdn.com/image/fetch/$s_!LZl-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png 848w, https://substackcdn.com/image/fetch/$s_!LZl-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png 1272w, https://substackcdn.com/image/fetch/$s_!LZl-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LZl-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png" width="1456" height="1089" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1089,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4869833,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/194595643?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LZl-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png 424w, https://substackcdn.com/image/fetch/$s_!LZl-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png 848w, https://substackcdn.com/image/fetch/$s_!LZl-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png 1272w, https://substackcdn.com/image/fetch/$s_!LZl-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64c05d96-bc2e-4d87-ae6b-2ca02d500c9a_2396x1792.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Illustration of a Decision Trace Pipleine</figcaption></figure></div><ol><li><p><strong>Input Capture Service</strong> is where the trace begins - at the moment a request enters the system. Query, user identity, session context, and request metadata are captured here, backed by a metadata store (PostgreSQL can be a straightforward choice). This is the &#8220;who asked what, when, and from where&#8221; layer. Without it, you have no anchor for the rest of the trace.</p><p></p></li><li><p><strong>State Retrieval and Context Snapshot</strong> captures the world as the agent saw it at decision time: which data versions were active, which policy definitions were in force, which catalog references were resolved. This layer pulls from a prerequisites datastore - Redis for low-latency state, S3 for snapshot durability. It&#8217;s also the layer that makes post-incident analysis possible. When you need to understand why the agent concluded what it did three months ago, you need to know what it <em>knew</em> at that moment - not what the system knows now.</p><p></p><div class="callout-block" data-callout="true"><p>This layer is, in practical terms, where a context graph lives - even if most implementations don't call it that yet. A context graph is simply the structured representation of what the agent knew and how those things related to each other at decision time: data assets, policies, catalog nodes, versions, and their connections. The reason <a href="https://foundationcapital.com/ideas/context-graphs-ais-trillion-dollar-opportunity">"context graph" is gaining traction</a> as a term without a settled definition is precisely because this layer has been missing from most agent architectures. Once you build the snapshot layer properly, you have one.</p></div><p></p></li><li><p><strong>Reasoning Chain and Decision Engine</strong> is the core trace layer. Chain-of-thought steps, intermediate logic, intermediate outputs - all captured as structured records. It is the path the agent took to reach the final answer. Every branch, every intermediate conclusion, every tool invocation that shaped the reasoning is an addressable record here.</p><p></p></li><li><p><strong>Policy Binding Service</strong> records the guardrails, rules, and decision logic that were active during the reasoning process. This is what separates a decision trace from a debugging log. You&#8217;re not just capturing what the agent did, you&#8217;re capturing the constraints it was operating under. When a compliance team asks &#8220;was the agent following the policy that was in force on this date,&#8221; this layer answers that question directly.</p><p></p></li><li><p><strong>Outcome and Action Capturing</strong> records the final response, the action taken, and critically - any redress or complaint data attached to that outcome. This closes the loop between the agent&#8217;s decision and its real-world consequence. It&#8217;s also the layer that feeds dispute resolution workflows when customers or regulators challenge an outcome.</p></li></ol><p>All five layers feed into an <strong>Immutable Audit Record</strong> - timestamped, hashed, and written to an immutable trace store (S3, Delta Lake or a ledger database). The immutability is a must-have. It is the architectural guarantee that the record cannot be altered after the fact, which is what makes it defensible in a regulatory or legal context. The diagram you see specifies retention period, which aligns with financial services conduct requirements and is a reasonable baseline for any regulated environment.</p><p>From the trace store, a <strong>Trace Query Service and Data Lake</strong> make the records queryable at scale. This is the operational distinction you need to understand. A queryable trace lets you ask: &#8220;Show me every decision where the policy binding service applied rule X and the outcome was Y.&#8221; That&#8217;s the difference between evidence and insight.</p><p>The four downstream outputs from this architecture tell you exactly what it&#8217;s designed to serve: <strong>Redress and Dispute Resolution</strong> (when a decision is challenged), <strong>Audit Trail Reporting</strong> (when a regulator asks), <strong>Debugging and Root Cause Analysis</strong> (when something fails), and <strong>Improvement and ML Training</strong> (when you want to make the system better using real decision data).</p><p>No single layer here is novel in isolation. Input capture, immutable storage, policy versioning exist in adjacent systems already. What doesn&#8217;t exist yet, in any standardised form for AI agents, is this stack assembled as a coherent, purpose-built trace infrastructure. That&#8217;s the gap this architecture closes.</p><div><hr></div><h2>Why enterprise architects need to move on this now</h2><p>This infrastructure is necessary to build the cleanest parth through regulatory scrutiny, incident response, and enterprise customer due diligence. The same principle made structured engineering logging standard practice in distributed systems. You cannot debug what you cannot observe. You cannot improve what you cannot measure. And you cannot defend in a board meeting, a regulatory inquiry, or a customer audit what you never recorded.</p><blockquote><p><strong>Decision traces are the observability layer for AI reasoning.</strong> It is the infrastructure equivalent of distributed tracing in microservices, now applied to systems that don&#8217;t just execute code, but form conclusions and take actions.</p></blockquote><p>The good news is that this is buildable now, with current tooling, before the incidents force it. The question is whether engineering organisations treat it as foundational infrastructure from the first production deployment, or discover its absence after the fact.</p><div><hr></div><h2>Call To Action</h2><p>If you are building AI agents for anything consequential, the time to design trace infrastructure is before the first production deployment. Start by mapping which decisions your agent makes that you could not currently explain, audit, or defend: that list is your build priority.</p><p>If this framing is useful, share it with the architect or engineering lead on your AI team - this is the conversation that needs to happen before the system goes live, not after.</p><p>Leave a feedback or comment. Share your opinion about this topic.</p><p>Thanks,<br>Sandi.</p><p><br>&#128073; You might also find my article published on Atlan&#8217;s community Substack useful: </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:193583020,&quot;url&quot;:&quot;https://metadataweekly.substack.com/p/context-graphs-as-ai-evaluation-infrastructure&quot;,&quot;publication_id&quot;:585908,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Context &amp; Chaos&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!q3WY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d54bd2c-07b0-430f-9c05-9c349d9bf3d0_300x300.png&quot;,&quot;title&quot;:&quot;Context Graphs as AI Evaluation Infrastructure&quot;,&quot;truncated_body_text&quot;:&quot;About the Author: Sandipan Bhaumik have spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, he shares how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work.&quot;,&quot;date&quot;:&quot;2026-04-09T14:05:59.147Z&quot;,&quot;like_count&quot;:11,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:193058051,&quot;name&quot;:&quot;Sandipan Bhaumik&quot;,&quot;handle&quot;:&quot;sanbhaumik&quot;,&quot;previous_name&quot;:&quot;Sandi Bhaumik&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/651c04c2-d92e-4a2e-905f-a59346e3e950_1024x1024.png&quot;,&quot;bio&quot;:&quot;I&#8217;ve spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, I share how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work.&quot;,&quot;profile_set_up_at&quot;:&quot;2023-12-29T14:48:55.893Z&quot;,&quot;reader_installed_at&quot;:&quot;2024-02-15T19:29:15.030Z&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null},&quot;primaryPublicationId&quot;:2211527,&quot;primaryPublicationName&quot;:&quot;agentbuild.ai&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://newsletter.agentbuild.ai&quot;,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://metadataweekly.substack.com/p/context-graphs-as-ai-evaluation-infrastructure?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!q3WY!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d54bd2c-07b0-430f-9c05-9c349d9bf3d0_300x300.png" loading="lazy"><span class="embedded-post-publication-name">Context &amp; Chaos</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Context Graphs as AI Evaluation Infrastructure</div></div><div class="embedded-post-body">About the Author: Sandipan Bhaumik have spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, he shares how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">4 months ago &#183; 11 likes &#183; Sandipan Bhaumik</div></a></div><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div><hr></div><p>Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[I was offline. Here's what happened when I came back.]]></title><description><![CDATA[This edition covers the AI engineering conference I attended, my talk on multi-agent orchestration patterns, a new article on context graphs, and a deep-dive video on AI latency]]></description><link>https://newsletter.agentbuild.ai/p/context-graphs-multi-agent-orchestration</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/context-graphs-multi-agent-orchestration</guid><pubDate>Sat, 11 Apr 2026 13:31:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tBb9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello everyone,</p><p>I owe you an explanation for going quiet last Saturday.</p><p>We took an Easter break as a family - properly offline, no laptop, in the English countryside. It was superb, the rolling green fields actually delivered on the promise. - and it was sunny &#9728;&#65039; </p><p>Right. I&#8217;m back. And there&#8217;s quite a lot to catch you up on.</p><div><hr></div><h3><strong>I was at an AI engineering conference this week</strong></h3><p>And I gave a talk, it will be out soon. This is the first time it happened in Europe and I got to meet so many smart, talented founders and engineers. It was awesome experience. In-person events are irreplaceable. </p><p>I attended some fabulouse sessions on cutting-edge stuff on AI. And of course OpenClaw dominated the discussion.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tBb9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tBb9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png 424w, https://substackcdn.com/image/fetch/$s_!tBb9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png 848w, https://substackcdn.com/image/fetch/$s_!tBb9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png 1272w, https://substackcdn.com/image/fetch/$s_!tBb9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tBb9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png" width="1275" height="684" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:684,&quot;width&quot;:1275,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:652683,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/193865270?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tBb9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png 424w, https://substackcdn.com/image/fetch/$s_!tBb9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png 848w, https://substackcdn.com/image/fetch/$s_!tBb9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png 1272w, https://substackcdn.com/image/fetch/$s_!tBb9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ad96e6-9ac1-4325-9965-549b75af1adf_1275x684.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Check out the conference here: https://www.ai.engineer/europe</p><div><hr></div><h3><strong>I also made it to the online track of the conference</strong></h3><p>And the topic was something I&#8217;ve been working towards for a while - <strong>Multi-Agent Orchestration Patterns for Production.</strong></p><div id="youtube2-2czYyrTzILg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;2czYyrTzILg&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/2czYyrTzILg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>The core argument: the field is moving fast, but most teams hit the same wall. They build multi-agent systems like they built single-agent systems. Same assumptions, same trust in the &#8220;it works in the demo&#8221; signal. And then production arrives, and nothing holds.</p><p>The talk walked through choreography vs orchestration, immutable state patterns, circuit breakers, and why distributed systems thinking is no longer optional if you&#8217;re building agents at any meaningful scale.<br><br>Check it out.</p><div><hr></div><h3><strong>A piece I wrote just went live </strong></h3><p>This one has been in the works for a while, and I&#8217;m genuinely proud of it.</p><p>I wrote a guest article for Context &amp; Chaos introducing two concepts I&#8217;ve been developing from my work with regulated enterprises: <strong>context drift and the evaluation graph.</strong></p><p>When an AI system gives you an answer, that answer wasn&#8217;t produced in a vacuum. It was produced against a specific version of your world - a specific definition of what &#8220;active customer&#8221; meant that week, a specific policy that was in force that month, a specific dataset that may or may not still exist.</p><p>Think of it like this: imagine a doctor&#8217;s notes. It&#8217;s not enough to record what prescription they wrote. You also need to know what guidelines were current that day, what the patient&#8217;s history showed at that point, what the lab results said. Without that context, the notes are incomplete. Enterprise AI has the same problem. We&#8217;re recording the prescription. We&#8217;re not recording everything else that informed it.</p><p>This is original IP, and I think it&#8217;s going to become a recurring theme in how regulated industries think about AI governance. </p><p>Here is the article:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:193583020,&quot;url&quot;:&quot;https://metadataweekly.substack.com/p/context-graphs-as-ai-evaluation-infrastructure&quot;,&quot;publication_id&quot;:585908,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Context &amp; Chaos&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!q3WY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d54bd2c-07b0-430f-9c05-9c349d9bf3d0_300x300.png&quot;,&quot;title&quot;:&quot;Context Graphs as AI Evaluation Infrastructure&quot;,&quot;truncated_body_text&quot;:&quot;About the Author: Sandipan Bhaumik have spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, he shares how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work.&quot;,&quot;date&quot;:&quot;2026-04-09T14:05:59.147Z&quot;,&quot;like_count&quot;:9,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:193058051,&quot;name&quot;:&quot;Sandipan Bhaumik&quot;,&quot;handle&quot;:&quot;sanbhaumik&quot;,&quot;previous_name&quot;:&quot;Sandi Bhaumik&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/651c04c2-d92e-4a2e-905f-a59346e3e950_1024x1024.png&quot;,&quot;bio&quot;:&quot;I&#8217;ve spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, I share how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work.&quot;,&quot;profile_set_up_at&quot;:&quot;2023-12-29T14:48:55.893Z&quot;,&quot;reader_installed_at&quot;:&quot;2024-02-15T19:29:15.030Z&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null},&quot;primaryPublicationId&quot;:2211527,&quot;primaryPublicationName&quot;:&quot;agentbuild.ai&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://newsletter.agentbuild.ai&quot;,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://metadataweekly.substack.com/p/context-graphs-as-ai-evaluation-infrastructure?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!q3WY!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d54bd2c-07b0-430f-9c05-9c349d9bf3d0_300x300.png" loading="lazy"><span class="embedded-post-publication-name">Context &amp; Chaos</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Context Graphs as AI Evaluation Infrastructure</div></div><div class="embedded-post-body">About the Author: Sandipan Bhaumik have spent almost 2 decades building Data &amp; AI foundations. Now, through AgentBuild Weekly, he shares how builders and founders can move beyond AI hype to create Agentic systems that think, adapt, and truly work&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">4 months ago &#183; 9 likes &#183; Sandipan Bhaumik</div></a></div><div><hr></div><h3><strong>New YouTube video: The AI Latency Stack</strong></h3><p>While you&#8217;re in content-consumption mode this weekend, I also want to point you to a video I put out recently on AI application latency - it keeps coming up in conversations and I wanted to have something concrete to point people to.</p><div id="youtube2-fN1hxUdfkss" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;fN1hxUdfkss&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/fN1hxUdfkss?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><strong>The short version: </strong>after your AI system ships to production, the model is almost never the problem. It&#8217;s a set of architectural decisions - streaming, database writes on the critical path, cold starts, context window bloat, prompt caching, sequential calls that should be parallel - that compound into something that makes users give up and go back to the manual process. The video walks through seven of these layers and how to address them, without swapping models or changing vendors.</p><p>Worth a watch if you&#8217;re anywhere near a production AI deployment right now.</p><div><hr></div><p>That&#8217;s it for this week. </p><p>A lot happened in a short space of time, and I wanted to share it with you directly. As always - reply if anything resonates, or if you&#8217;re wrestling with something I touched on.<br><br>Talk soon, <br>Sandi</p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div><hr></div><p>Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The High Agency Engineer Will Win the AI Era. Here's What I'm Seeing in the Field.]]></title><description><![CDATA[My job gives me an unusual view. I get to sit inside a lot of organisations and watch how engineering teams are actually responding to AI. Not the conference version. The real version.]]></description><link>https://newsletter.agentbuild.ai/p/the-high-agency-engineer-will-win</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/the-high-agency-engineer-will-win</guid><pubDate>Sat, 28 Mar 2026 14:31:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4548c2a9-cf59-4242-a54f-1750eec9c5e4_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;m seeing something in the field right now that is genuinely opening my eyes.</p><p>I&#8217;m lucky. My job puts me in front of a lot of engineering teams across a lot of organisations. Some are moving fast. Some are moving slow. And I get to see both. Not from a distance, up close, in the actual conversations where decisions get made.</p><p><em><strong>What I&#8217;m watching is a quiet split happening inside engineering teams. </strong></em>And I think it matters for anyone thinking about where this profession is heading.</p><div><hr></div><p>Two engineers. Same company. Same tools available. Same access to AI. Completely different outcomes.</p><p>One of them, when they hit a hard problem, opens a chat window and starts working through it out loud. They dump in the messy context. The half-baked question. The data that doesn&#8217;t quite make sense yet. They&#8217;re not looking for autocomplete. They&#8217;re looking for a way through.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!--i9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!--i9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!--i9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!--i9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!--i9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!--i9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9266339,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/192393790?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!--i9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!--i9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!--i9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!--i9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab87c78-7849-4b7f-8417-9407a2bdb768_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>The other one says &#8220;AI isn&#8217;t reliable enough for this.&#8221; And goes back to doing it the slow way.</p><p>I&#8217;ve watched this play out across banks, fintechs, and large regulated enterprises. And the gap between these two engineers is only getting wider.</p><div><hr></div><h2><strong>What high agency actually looks like</strong></h2><p>I was working with a team recently trying to make sense of a large pile of unstructured documents. Audit logs, policy docs, historical reports. This kind of work that normally takes weeks of someone&#8217;s time.</p><p>One engineer on the team didn&#8217;t wait to be told how. She had no prior experience with the specific tooling. But she sat down, broke the problem into pieces, and used AI to work through each one. By end of day she had something working. Not perfect. But working.</p><blockquote><p>She didn&#8217;t have a playbook. She made one.</p></blockquote><p>That&#8217;s what high agency looks like in practice. Not waiting for a process document. Not waiting for someone to say it&#8217;s approved. When they hit a wall, the first instinct is to figure out what question to ask - not explain why the wall is there.</p><div><hr></div><h2><strong>What the resistance sounds like</strong></h2><p>I want to be careful here. <strong>The engineers pushing back on AI are not lazy.</strong> Many of them are the most experienced people in the room.</p><p>But the resistance has a pattern.</p><p>&#8220;It hallucinates too much for our use case.&#8221; </p><p>&#8220;Security hasn&#8217;t signed it off yet.&#8221; </p><p>&#8220;The outputs aren&#8217;t consistent enough to trust.&#8221; </p><p>&#8220;This is hype, let it settle.&#8221;</p><p>Some of these are valid. I work in regulated environments. I understand the constraints.</p><blockquote><p>But what I notice is this. The engineers saying these things have usually not given AI their hardest problem. They&#8217;ve given it easy tasks, watched it stumble, and concluded it isn&#8217;t ready. They&#8217;re evaluating a tool they haven&#8217;t really pushed.</p></blockquote><p>The high agency engineers hit the same limitations. They just treat them as constraints to work around, not reasons to stop.</p><div><hr></div><h2><strong>There&#8217;s something underneath the resistance</strong></h2><p>I think it goes deeper than technology skepticism.</p><p>A lot of experienced engineers have built their identity around already knowing the answer. They&#8217;re the person people come to. The one who&#8217;s seen this before.</p><p>AI is uncomfortable for that identity. Because the value is shifting. It&#8217;s moving away from already knowing - toward knowing how to ask. That&#8217;s a different skill. And it asks you to be a beginner again, at least partially.</p><p>The engineers I see thriving have a looser grip on what they already know. They&#8217;re curious before they&#8217;re skeptical. </p><p><strong>They pick the tool up before they critique it.</strong></p><div><hr></div><h2><strong>One practical thing</strong></h2><p>Ask yourself honestly: when did you last give AI your genuinely hardest problem?</p><p>Not &#8220;summarise this document.&#8221;  or &#8220;tidy up this function.&#8221; </p><p>The real hard thing. The one you&#8217;ve been circling because you don&#8217;t quite know where to start.</p><p>I&#8217;ve seen engineers use AI to compress weeks of analysis into a day. I&#8217;ve seen it catch patterns in production failures that a team had been chasing for months. I&#8217;ve seen it unlock a business conversation that had been stuck for a quarter - just by helping someone structure their thinking clearly enough to explain it.</p><p>None of that happened because the technology was perfect. It happened because someone decided to figure it out.</p><blockquote><p>The job of an engineer is changing. I&#8217;m watching it happen. The ones adapting aren&#8217;t the most experienced or the most technical. They&#8217;re the ones most willing to stay curious.</p></blockquote><p>That&#8217;s the only practical advice I have.</p><p>One question before you go - <em><strong>what's the most interesting thing you've seen an engineer do with AI that nobody is talking about yet?</strong></em></p><p>Hit reply and tell me. </p><p>Talk soon,<br>Sandi</p><div><hr></div><p><em>P.S. If you&#8217;re new here - <strong>welcome</strong> &#127881;. AgentBuild is a community of practitioners working through the real challenges of getting AI into production inside large organisations. Every week I share practical, grounded thinking from the people doing this work at the sharp end. The goal is never theory - it&#8217;s always: what can you use Monday morning.</em></p><div><hr></div><p><em><strong>Ask your friends to join.</strong><br>More valuable content coming your way.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share agentbuild.ai&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.agentbuild.ai/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share agentbuild.ai</span></a></p><div><hr></div><p>Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentbuild.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading agentbuild.ai! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>