<?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 is the practical publication for designing, governing, and operating AI agents that work in the real world.]]></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>Sat, 26 Sep 2026 21:47:51 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[How to Fix "Decision Blindness" in AI Agents]]></title><description><![CDATA[Traditional event logs only tell you what your system did. Here is how to use decision traces to capture the context, evidence, and logic behind why it made a choice.]]></description><link>https://newsletter.agentbuild.ai/p/how-to-fix-decision-blindness-in</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/how-to-fix-decision-blindness-in</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 19 Sep 2026 13:03:50 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ca9fb558-38ec-4fbe-ac64-374f9b7a02fe_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>We&#8217;re continuing our series on what really breaks when AI agents move from demos to production. <br><br><a href="https://newsletter.agentbuild.ai/p/why-agent-to-agent-communication?r=36xwjn">Part 1: Communcation Failure: Why Agent-to-Agent Communication Fails</a><br><a href="https://newsletter.agentbuild.ai/p/evaluating-agent-handoffs-not-just?r=36xwjn">Part 2: Contract Failure: Why AI Agent Handoffs Fails</a><br><a href="https://newsletter.agentbuild.ai/p/your-agent-isnt-hallucinating-its?r=36xwjn">Part 3: Context Failure: Your Agent Isn&#8217;t Hallucinating&#8230;</a><br><a href="https://newsletter.agentbuild.ai/p/evaluating-agent-handoffs-not-just?r=36xwjn">Part 4: Evaluation Failure: Evaluating AI Agent Handoffs</a><br><a href="https://newsletter.agentbuild.ai/p/agent-sprawl-the-hidden-nightmare?r=36xwjn">Part 5: Agent Sprawl: The Hidden Nightmare of Your Next Agent Call</a><br><br>Today, we are tackling the direct consequence of the agent sprawl: <strong>Decision Blindness</strong>.</em></p><div class="callout-block" data-callout="true"><p style="text-align: center;"><em>&#128073; <strong>Request</strong>: I'd love to hear from you. Take the short survey at the bottom of this article and tell me what you'd like to learn more about.</em></p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8IKQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8IKQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 424w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 848w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 1272w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png" width="6912" height="3111" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3111,&quot;width&quot;:6912,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2372433,&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/213779764?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f70d4d-addd-4a54-9a14-61b374ec7ae2_6912x3456.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_!8IKQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 424w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 848w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 1272w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 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><p>When you have multiple agents talking to each other, passing data, and executing tasks, you eventually hit a deeply uncomfortable moment. Nope, it&#8217;s not when the system crashes, crashing is easy to debug. It&#8217;s when the system <em>succeeds</em>, and absolutely nobody in the room can explain why. Trust me, it happens a lot.</p><p>Let&#8217;s say a customer gets approved for a loan, or an automated fraud investigation escalates a case. You open your observability dashboard, and technically, everything looks perfect. The agent called a model, retrieved some documents, fired off a few tools, and returned a result. </p><p>But then a compliance officer taps you on the shoulder and asks, </p><p>&#8220;Why did the AI make that decision?&#8221; </p><p>And no one in the team knows why.</p><p>I call this <strong>decision blindness</strong>. Your logs are telling you exactly what happened, but you have absolutely no idea why. To fix it, we have to rethink how we monitor these systems from the ground up.</p><div><hr></div><h2>Standard telemetry has limitations</h2><p>When we start building agentic systems, we naturally reach for conventional software observability. We track the standard APM (Application Performance Monitoring) metrics: model calls, API requests, token usage, and latency. That&#8217;s a great baseline, but a decision is fundamentally more than a sequence of network events.</p><p>Imagine an agent deciding whether to approve a customer request. Your event log might show that it retrieved a customer profile, pulled a policy document, called an LLM, and approved the request. You can see the execution pathway clearly, but the reasoning context is completely hidden. </p><ul><li><p>Which specific facts about that customer actually triggered the approval? </p></li><li><p>What alternative choices did the agent weigh before it crossed the threshold to act? </p></li></ul><blockquote><p>Traditional event logs tell you what the infrastructure did, whereas a decision trace tells you how the system actually arrived at its conclusion.</p></blockquote><div><hr></div><h2>Agents break traditional tracing</h2><p>In traditional software, execution is deterministic enough that we can trace a decision straight through the code. If condition A is true, the system executes branch B. You can read the logic like a map.</p><p>Agents simply don&#8217;t work like that. Their decisions emerge from a messy, highly dynamic interaction between context, retrieved data, shifting policies, tool outputs, and the models themselves. All of those variables can change independently. The underlying foundation model might get an unseen update, your vector database might return slightly different context due to a new embedding, or a policy document might be rewritten. Because of this fluidity, just recording the final answer and the API calls isn&#8217;t enough. You have to capture the exact state of the world at the exact moment the decision was made.</p><div><hr></div><h2>Architecting a decision trace</h2><p>A useful way to solve this is to treat every consequential agent decision as something that produces a structured trace. Instead of just tracking timestamps and API spans, you track the flow of logic.</p><p>The architecture of a good decision trace looks like this: Decision, Evidence, Context, Policy, Actions, and finally, the Outcome.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kpGT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kpGT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kpGT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kpGT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kpGT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kpGT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg" width="2694" height="1339" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1339,&quot;width&quot;:2694,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:491228,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/216346546?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90efd413-0d69-438c-bc32-dd4abadf1077_2752x1536.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_!kpGT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kpGT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kpGT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kpGT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4606853-9bb2-414e-8462-beeb40d358bb_2694x1339.jpeg 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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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"><em>Simplified Decision Tracing Architecture</em></figcaption></figure></div><p>So, if an agent declines a transaction, the trace shouldn&#8217;t just record a &#8220;Declined&#8221; state in the database. It should explicitly show that it declined the transaction because of an unusual amount and a geographic inconsistency (<strong>the evidence</strong>), based on the current account state (<strong>the context</strong>), using Fraud Policy v3.8 (<strong>the constraints</strong>), after querying the transaction history and a sanctions API (<strong>the actions</strong>). Now you have a tangible, serialized record that another engineer, an auditor, or an investigator can actually reconstruct.</p><p>For a deeper dive read this article:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;8c10af95-9cd8-495c-b396-369a631dd0b8&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.873Z&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><div><hr></div><h2>RAG has a provenance problem</h2><p>I have seen this technical trap here that caught me off guard a number of times, especially when using Retrieval-Augmented Generation (RAG). Suppose your agent outputs a note saying, <em>&#8220;The customer appears to have breached policy X.&#8221;</em> Where exactly did that conclusion come from?</p><p>If the agent pulled that from a retrieved document, you need absolute provenance. You need to log the document ID, the exact version hash of that document, the specific chunk that was retrieved, and the timestamp. Without this kind of provenance, your evidence is basically ephemeral. Six months from now, you might still have the agent&#8217;s answer saved, but if that policy document has been updated three times since then, you&#8217;ll have no reliable way to prove what information the agent was actually looking at when it made the call. For production AI in regulated environments, that missing link is a massive liability.</p><div><hr></div><h2>How to implement this - few tricks</h2><p>So, how do you practically wire this up? You don&#8217;t need to invent a new database, but you do need to change how you prompt your models and how you pass data.</p><p><strong>1. Force structured outputs.</strong> Stop letting your agents reply with free-text paragraphs. Instead, force the LLM to return a rigid JSON object for every significant move. Alongside the final <code>action</code>, require fields for <code>evidence_used</code>, <code>policy_version</code>, and <code>alternative_rejected</code>. By making the model explicitly output its dependencies, you instantly generate the data for your decision trace right at the source.</p><p><strong>2. Leverage OpenTelemetry &#8220;baggage.&#8221;</strong> When Agent A (the Researcher) finds a piece of evidence and passes the job to Agent B (the Executor), that evidence needs to travel with the request. Use standard distributed tracing features like <strong>OpenTelemetry baggage</strong> to pass this reasoning context along the chain. That way, when the final Executor agent makes a move, your trace contains the entire inherited history of <em>why</em>.</p><p><strong>3. Hijack your LLM observability tools.</strong> Platforms like LangSmith, Langfuse, Braintrust, or Datadog LLM are great for capturing prompts and latencies. But don&#8217;t just use their defaults. Push your structured decision JSON into their custom metadata tags. You want to be able to query your dashboard for <em>&#8220;Show me all decisions where Fraud Policy v3.8 was applied,&#8221;</em> not just <em>&#8220;Show me traces that took longer than 2 seconds.&#8221;</em></p><div><hr></div><h2>Evaluating integrity over outcomes</h2><p>To be clear, I&#8217;m not suggesting we need to capture the model&#8217;s private, rambling chain-of-thought. We don&#8217;t need a massive text dump of the LLM talking to itself in the logs. What we really need is a structured, machine-readable record of the decision pathway.</p><p>This shift changes how we evaluate agents entirely. Right now, most evals just ask if the final answer was correct, which only measures outcome correctness. With decision traces, we can finally start asking if the agent arrived at that decision using acceptable evidence, authorized policies, and permitted actions. We can measure decision integrity. An agent can stumble into the right answer using completely hallucinated policies, and if you&#8217;re only checking the final output, you&#8217;d never know your system is hallucinating its logic.<br><br>Read my article below where I talk about Evaluation Graph:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:193583020,&quot;url&quot;:&quot;https://contextandchaos.substack.com/p/context-graphs-as-ai-evaluation-infrastructure&quot;,&quot;publication_id&quot;:585908,&quot;embedding_publication_id&quot;:2211527,&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.146Z&quot;,&quot;like_count&quot;:20,&quot;comment_count&quot;:2,&quot;bylines&quot;:[{&quot;id&quot;:193058051,&quot;name&quot;:&quot;Sandipan Bhaumik&quot;,&quot;handle&quot;:&quot;sanbhaumik&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.029Z&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;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://contextandchaos.substack.com/p/context-graphs-as-ai-evaluation-infrastructure?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web&amp;embedding_publication_id=2211527"><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">6 months ago &#183; 20 likes &#183; 2 comments &#183; Sandipan Bhaumik</div></a></div><div><hr></div><h2>The Multi-Agent cascading failure</h2><p>Take this exact problem and scale it up to a multi-agent architecture where you have a Planner, a Researcher, an Analyst, and an Executor all working together. The Executor makes the final call, but which agent introduced the critical piece of evidence? Which one decided to discard a valid constraint, and where did a flawed assumption enter the pipeline?</p><p>Traditional distributed tracing tools like Jaeger or OpenTelemetry will gladly tell you that Agent A called Agent B, and how many milliseconds it took. It won&#8217;t tell you that Agent A&#8217;s decision was based on stale evidence that Agent B then treated as indisputable fact. That is the dangerous gap between workflow observability and decision observability.</p><p>Ultimately, we need to change the fundamental question we ask when designing these systems. Don&#8217;t just ask if you can see what the agent did. Ask if you can reconstruct why it happened. A bad decision is highly visible, but decision blindness is silent. Having a log that just reads &#8220;LLM call, tool call, response&#8221; isn&#8217;t true observability. It&#8217;s just a receipt. And when a serious audit comes around, a receipt isn&#8217;t going to save you.</p><div><hr></div><h2>Stop printing receipts</h2><p>Ultimately, we need to change the fundamental question we ask when designing these systems. The next time you&#8217;re reviewing a new agent architecture with your team, don&#8217;t just ask, <em>&#8220;Can we see what the agent did?&#8221;</em> </p><blockquote><p>Ask, <em>&#8220;Can we prove exactly why it did it?&#8221;</em></p></blockquote><p>A bad decision in production is highly visible. The business usually feels it immediately. But decision blindness is silent. It sits hidden in your system, just waiting for the worst possible moment - an audit, a customer complaint, a compliance review to reveal that nobody actually knows how your AI works.</p><p>Having an observability dashboard that just reads &#8220;LLM call -&gt; tool call -&gt; response&#8221; isn&#8217;t true observability. It&#8217;s just a receipt. It tells you the transaction happened, but it tells you absolutely nothing about the logic behind the purchase. And when a serious audit comes around, a receipt isn&#8217;t going to save you.</p><div><hr></div><p><strong>One request:</strong><br><br>Please take the survey.</p><p><br>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. Tell me what you want to learn.</p><h3 style="text-align: center;"><strong>&#128073; <a href="https://forms.gle/8TZVQ1qKiRefLCkdA">Take the survey here</a></strong></h3><p>Thanks for reading,<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[Agent Sprawl: The Hidden Nightmare of Your Next Agent Call]]></title><description><![CDATA[Think adding another AI agent will solve your workflow problems? Think again. We explore the hidden nightmare of "agent sprawl" and the four boundaries you must verify before scaling up.]]></description><link>https://newsletter.agentbuild.ai/p/agent-sprawl-the-hidden-nightmare</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/agent-sprawl-the-hidden-nightmare</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 12 Sep 2026 13:03:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/017978e4-7e54-4baf-8fce-b8c972f0a2f5_1792x1002.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>We&#8217;re continuing our series on what really breaks when AI agents move from demos to production. <br><br><a href="https://newsletter.agentbuild.ai/p/why-agent-to-agent-communication?r=36xwjn">Part 1: Communcation Failure: Why Agent-to-Agent Communication Fails</a><br><a href="https://newsletter.agentbuild.ai/p/evaluating-agent-handoffs-not-just?r=36xwjn">Part 2: Contract Failure: Why AI Agent Handoffs Fails</a><br><a href="https://newsletter.agentbuild.ai/p/your-agent-isnt-hallucinating-its?r=36xwjn">Part 3: Context Failure: Your Agent Isn&#8217;t Hallucinating&#8230;</a><br><a href="https://newsletter.agentbuild.ai/p/evaluating-agent-handoffs-not-just?r=36xwjn">Part 4: Evaluation Failure: Evaluating AI Agent Handoffs</a><br><br>Today in we explore <strong>Agent Sprawl</strong> - why using too many agents become a nightmare.</em></p><div class="callout-block" data-callout="true"><p style="text-align: center;"><em>&#128073; <strong>Request</strong>: I'd love to hear from you. Take the short survey at the bottom of this article and tell me what you'd like to learn more about.</em></p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8IKQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8IKQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 424w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 848w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 1272w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png" width="6912" height="3111" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3111,&quot;width&quot;:6912,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2372433,&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/213779764?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f70d4d-addd-4a54-9a14-61b374ec7ae2_6912x3456.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_!8IKQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 424w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 848w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 1272w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 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><p>There is a moment in almost every agent architecture where the diagram starts looking impressive.</p><p>It begins simply:</p><div class="callout-block" data-callout="true"><p>User &#8594; Agent &#8594; Tools</p></div><p>Then someone asks:</p><p>&#8220;What if we add a planner?&#8221;</p><p>So it becomes:</p><div class="callout-block" data-callout="true"><p>User &#8594; <strong>Planner</strong> &#8594; Agent &#8594; Tools</p></div><p>Then:</p><p>&#8220;What if we add a researcher?&#8221;</p><p>Now we have:</p><div class="callout-block" data-callout="true"><p>Planner &#8594; <strong>Researcher</strong> &#8594; Analyst &#8594; Executor</p></div><p>Then someone adds a critic.</p><p>Then a reviewer.</p><p>Then a verifier.</p><p>Before long, the architecture looks like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6kQG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6kQG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6kQG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6kQG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6kQG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6kQG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg" width="2669" height="1301" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1301,&quot;width&quot;:2669,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:496992,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/215340520?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc4f785-2166-45f6-978b-2af80483e526_2814x1536.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_!6kQG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6kQG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6kQG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6kQG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71fb252c-7f74-49b7-9396-a18d5422de7a_2669x1301.jpeg 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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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">The sophisticated Agentic Workflow Arechitecture on a slide Deck <em>(often created using AI nowadays)</em></figcaption></figure></div><p>It looks sophisticated.</p><p>It looks like a system built for serious work.</p><p>But there is an uncomfortable question we don&#8217;t ask often enough:</p><blockquote><p><strong>Did we actually make the system better?</strong></p></blockquote><p>Or did we just create six systems we now have to operate?</p><div><hr></div><h2>Every agent is another boundary</h2><p>Adding an agent doesn&#8217;t just add another capability.</p><p>It adds another <strong>system boundary</strong>.</p><p>And every boundary creates work.</p><p>A new agent usually means:</p><ul><li><p>another context boundary</p></li><li><p>another handoff</p></li><li><p>another interface</p></li><li><p>another failure mode</p></li><li><p>another thing to evaluate</p></li><li><p>another component to observe</p></li><li><p>another source of latency</p></li><li><p>another source of cost</p></li></ul><p>And the problem compounds.</p><p>Imagine a simple workflow:</p><div class="callout-block" data-callout="true"><p>Agent A &#8594; Agent B &#8594; Agent C</p></div><p>Agent A produces something that B needs to understand.</p><p>B transforms it and passes something to C.</p><p>Now suppose A is changed.</p><p>The output changes slightly.</p><p>B still works.</p><p>Its own evaluation still passes.</p><p><strong>But C starts failing because B&#8217;s interpretation of A&#8217;s output has changed.</strong></p><p>Nothing is necessarily &#8220;broken&#8221; inside any individual agent.</p><p>The <strong>boundary</strong> is broken.</p><p>This is exactly the kind of problem we&#8217;ve spent decades dealing with in distributed systems.</p><p>Except now the components aren&#8217;t deterministic services.</p><p>They are probabilistic systems interpreting language, context and intent.</p><p>That&#8217;s a very different kind of boundary.</p><div><hr></div><h2>Agent Sprawl</h2><p>This is <strong>Agent Sprawl</strong>.</p><p>It is the tendency to turn every capability into another autonomous agent without first proving that the boundary adds value.</p><blockquote><p>It is the agent equivalent of creating a microservice for every function in a codebase.</p></blockquote><p>Microservices taught us an important lesson:</p><p><strong>Decomposition is not automatically architecture.</strong></p><p>You don&#8217;t create a service because you just can.</p><p>You create one because a boundary gives you something valuable.</p><p>Perhaps it gives you:</p><ul><li><p>independent scaling</p></li><li><p>independent deployment</p></li><li><p>ownership</p></li><li><p>security isolation</p></li><li><p>fault isolation</p></li><li><p>a different data lifecycle</p></li></ul><p>The same principle should apply to agents.</p><p>The question should be:</p><blockquote><p><strong>&#8220;What boundary does making this another agent give us?&#8221;</strong></p></blockquote><div><hr></div><h2>Not every role needs to be an agent</h2><p>Consider a research workflow.</p><p>You might design it as:</p><div class="callout-block" data-callout="true"><p>Planner &#8594; Researcher &#8594; Analyst &#8594; Critic &#8594; Reviewer &#8594; Writer</p></div><p>That&#8217;s six agents.</p><p>But perhaps the actual requirements are much simpler.</p><p>The planner might just be a structured planning step.</p><p>The researcher might be a tool-calling capability.</p><p>The critic might be an evaluation step.</p><p>The reviewer might be a deterministic validation process.</p><p>And perhaps only the analyst and writer actually need autonomous reasoning.</p><p>Suddenly the architecture becomes:</p><div class="callout-block" data-callout="true"><p>Planner (strutured code) &#8594; Researcher (tool call) &#8594; <strong>Analyst</strong> &#8594; Critic (Eval)&#8594; Reviewer (coded validation) &#8594; <strong>Writer</strong></p></div><p>That&#8217;s not necessarily less sophisticated.</p><p>It may be <strong>more engineered</strong>.</p><blockquote><p>The mistake is assuming that every logical role in a workflow deserves an autonomous identity.</p></blockquote><p>A function isn&#8217;t automatically an agent.</p><p>A prompt isn&#8217;t automatically an agent.</p><p>A tool isn&#8217;t automatically an agent.</p><p>A validation step certainly doesn&#8217;t need to become an agent just because an LLM could perform it.</p><p>The best agent architecture usually has fewer AI agents.</p><div><hr></div><h2>So when should you create another agent?</h2><p>I use a simple test.</p><p>A new agent should introduce at least one meaningful boundary.</p><p>The following framework helps:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!su03!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!su03!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg 424w, https://substackcdn.com/image/fetch/$s_!su03!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg 848w, https://substackcdn.com/image/fetch/$s_!su03!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!su03!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!su03!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg" width="2665" height="1309" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1309,&quot;width&quot;:2665,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:598004,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/215340520?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f1ad7e-5a7b-4980-9837-8e5c59a2362e_2816x1536.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_!su03!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg 424w, https://substackcdn.com/image/fetch/$s_!su03!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg 848w, https://substackcdn.com/image/fetch/$s_!su03!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!su03!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08773d9b-7565-49a7-b817-86394b85230c_2665x1309.jpeg 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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 Framework to control Agent Sprawl in a Multi-Agent Workflow.</figcaption></figure></div><h4>1. Capability boundary</h4><p>The new agent does something fundamentally different from the existing agent.</p><p>For example, a specialised coding agent may have different reasoning patterns, tools and execution environments from a customer-service agent.</p><h4>2. Data boundary</h4><p>The new agent operates on a different data domain or requires different access.</p><p>For example, separating customer-facing reasoning from an internal risk-data environment may be a meaningful boundary.</p><h4>3. Authority boundary</h4><p>The new agent has a different level of permission.</p><p>An agent that recommends a transaction and an agent that can actually execute it may need to be separate because their authority is fundamentally different.</p><h4>4. Failure-isolation boundary</h4><p>The new agent can fail independently without taking down the rest of the workflow.</p><p>This can be particularly valuable for expensive or unpredictable operations.</p><p>If creating the agent doesn&#8217;t give you one of these boundaries, ask yourself why it exists.</p><p>Maybe it shouldn&#8217;t.</p><div><hr></div><h2>The hidden cost of adding another agent</h2><p>Suppose a customer asks:</p><blockquote><p>&#8220;Can I increase my credit limit?&#8221;</p></blockquote><p>The request passes through:</p><div class="callout-block" data-callout="true"><p>Router &#8594; Customer Agent &#8594; Policy Agent &#8594; Risk Agent &#8594; Decision Agent</p></div><p>The final answer is wrong.</p><p>Where do you look?</p><p>The model?</p><p>The prompt?</p><p>The context?</p><p>The handoff?</p><p>The policy?</p><p>The retrieved data?</p><p>The risk calculation?</p><p>The decision?</p><p>The interaction between two of them?</p><p>The more agents you add, the more possible places there are for something to go wrong.</p><p>And importantly, the failure may not belong to any one agent.</p><p>It can emerge <strong>between agents</strong>.</p><p>That&#8217;s the real cost of decomposition.</p><p>Not just more boxes.</p><p>More <strong>arrows</strong>, more interactions.</p><div><hr></div><h2>The architecture diagram hides this</h2><p>This is where agent architecture can become deceptive.</p><p>On the diagram, adding another agent is easy.</p><p>You draw another box.</p><p>Connect with arrows.</p><p>Done.</p><p>But the production system doesn&#8217;t see boxes.</p><p>It sees:</p><ul><li><p><strong>state</strong></p></li><li><p><strong>context</strong></p></li><li><p><strong>messages</strong></p></li><li><p><strong>permissions</strong></p></li><li><p><strong>tool calls</strong></p></li><li><p><strong>timeouts</strong></p></li><li><p><strong>retries</strong></p></li><li><p><strong>model versions</strong></p></li><li><p><strong>handoffs</strong></p></li><li><p><strong>failures</strong></p></li><li><p><strong>evaluations</strong></p></li></ul><p>And humans trying to figure out what happened when the workflow produced the wrong answer.</p><blockquote><p>The diagram gets more impressive.</p><p>The operating model gets harder.</p></blockquote><p>That&#8217;s why I think we need to change how we talk about multi-agent architecture.</p><p>The goal shouldn&#8217;t be to maximise the number of agents.</p><p>The goal should be to create <strong>useful boundaries</strong>.</p><div><hr></div><h2>Decompose for boundaries</h2><p>The same principle applies whether you&#8217;re designing microservices, data platforms or agentic systems.</p><p>A boundary should earn its place.</p><p>If it gives you independent capability, data isolation, authority separation or failure isolation, it may be worth the complexity.</p><p>If it exists because someone thought:</p><blockquote><p>&#8220;Wouldn&#8217;t it be cool if we had another agent?&#8221;</p></blockquote><p>It probably doesn&#8217;t.</p><p>Because every agent you add creates another system boundary you now have to operate.</p><p>And eventually, the question stops being:</p><p><strong>&#8220;How many agents do we need?&#8221;</strong></p><p>It becomes:</p><p><strong>&#8220;How many boundaries can we afford to operate?&#8221;</strong></p><p>That&#8217;s a much more useful architectural question.</p><div><hr></div><p><em> See you in Part 6, where we'll look at <strong>Decision Blindless</strong></em></p><div><hr></div><p>If you are interested in multi-agent system architectures, you might like this video.</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><div><hr></div><p><strong>One request:</strong><br><br>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. Tell me what you want to learn.</p><h3 style="text-align: center;"><strong>&#128073; <a href="https://forms.gle/8TZVQ1qKiRefLCkdA">Take the survey here</a></strong></h3><p>Thanks for reading,<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[Evaluating Agent Handoffs, not just the Agents]]></title><description><![CDATA[How to ev aluate AI Agent handoff, why this needs ot be a part of the architecuture, what could go wrong and how to plan for it.]]></description><link>https://newsletter.agentbuild.ai/p/evaluating-agent-handoffs-not-just</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/evaluating-agent-handoffs-not-just</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 05 Sep 2026 13:03:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/78ef92e9-4fe1-47bb-b53d-34801439ebc1_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>We&#8217;re continuing our series on what really breaks when AI agents move from demos to production. In Part 1 we explored <a href="https://newsletter.agentbuild.ai/p/why-agent-to-agent-communication">why agent-to-agent communication fails</a>, and in Part 2 we looked at <a href="https://newsletter.agentbuild.ai/p/why-ai-agent-handoffs-fail?r=36xwjn">why the agent handoff fails</a>, Part 3 takes us one layer deeper, <a href="https://newsletter.agentbuild.ai/p/your-agent-isnt-hallucinating-its">what happens when an agent has the right information, but the wrong context?</a>.<br><br>Today we explore why Agent Handoffs need to be evaluated differently than the converntional evaluation mechanics.</em></p><div><hr></div><blockquote><p><span>This is the fourth piece in a series I&#8217;m running, </span><em>Things That Break When Agents Meet Reality</em><span>. It&#8217;s about the engineering problems that only surface once agentic systems leave the demo and have to survive production.</span></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8IKQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8IKQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 424w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 848w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 1272w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png" width="6912" height="3111" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3111,&quot;width&quot;:6912,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2372433,&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/213779764?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f70d4d-addd-4a54-9a14-61b374ec7ae2_6912x3456.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_!8IKQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 424w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 848w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.png 1272w, https://substackcdn.com/image/fetch/$s_!8IKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c6633ed-f245-43e2-89e6-e331b418cb4d_6912x3111.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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 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><p>I&#8217;ve been thinking about a failure mode that is going to become increasingly common as we build bigger agentic workflows.</p><p>You evaluate an agent.</p><p>It passes.</p><p>You evaluate the next agent.</p><p>It passes too.</p><p>You wire them together.</p><p>Then something goes wrong.</p><p>I&#8217;ve seen variations of this in distributed systems for years. A service can work perfectly when you test it on its own and still cause problems when it becomes part of a larger system.</p><p>Agents make this harder because the boundary between two components isn&#8217;t always a clean API.</p><ul><li><p>Sometimes it&#8217;s JSON.</p></li><li><p>Sometimes it&#8217;s a message.</p></li><li><p>Sometimes it&#8217;s a chunk of retrieved context.</p></li><li><p>Sometimes it&#8217;s an instruction that one model has generated for another model.</p></li><li><p>And sometimes it&#8217;s all of those things at once.</p></li></ul><p>That makes a simple question surprisingly difficult:</p><p><strong>What exactly are we evaluating?</strong></p><div><hr></div><h2>Let&#8217;s say we have three agents</h2><p>Take a fairly ordinary enterprise workflow.</p><p>A customer asks for a refund.</p><p>We have:</p><ul><li><p>a <strong>Researcher</strong> that looks up the customer and relevant policy</p></li><li><p>a <strong>Decision Agent</strong> that determines whether the refund should be approved</p></li><li><p>an <strong>Executor</strong> that updates the CRM and triggers the appropriate action</p></li></ul><p>Individually, they look good.</p><p>The Researcher retrieves the right information.</p><p>The Decision Agent makes the right decision.</p><p>The Executor calls the right API.</p><p>You run your evaluation suite and get something like:</p><pre><code><code>Researcher       96%
Decision Agent   95%
Executor         99%</code></code></pre><p>You&#8217;d be pretty comfortable taking those numbers to a review meeting.</p><p>Then you run the complete workflow.</p><p>And the success rate is much lower than expected.</p><p>The obvious reaction is to go back and look for the &#8220;bad agent&#8221;.</p><p>But that may be the wrong place to look.</p><p>Consider the handoff between the Researcher and the Decision Agent.</p><p>The Researcher might return:</p><pre><code><code>{
  "customer_id": "12345",
  "issue": "refund",
  "eligibility": "uncertain",
  "policy": "refund_policy_v3",
  "evidence": [
    "Purchased 41 days ago",
    "Product was returned"
  ]
}</code></code></pre><p>Looks fine.</p><p>But on another the same Researcher agent returns:</p><pre><code><code>{
  "customer_id": "12345",
  "issue": "refund",
  "eligibility": "likely",
  "policy": "refund_policy_v3",
  "evidence": [
    "Purchased 41 days ago"
  ]
}</code></code></pre><p>Still valid JSON.</p><p>Still all the expected fields.</p><p>The Researcher may even get a good score for this output.</p><p>But now the Decision Agent has to decide what &#8220;likely&#8221; means.</p><p>Is that enough to approve the refund?</p><p>Does it mean more evidence is required?</p><p>Should it send the case to a human?</p><p>We&#8217;ve got a perfectly reasonable agent talking to another perfectly reasonable agent, and <strong>the system can still make the wrong decision.</strong></p><p>That&#8217;s the bit that tends to get missed.</p><p>The <strong>handoff</strong> itself is part of the system.</p><div><hr></div><h2>This is where I think our testing habits need to change</h2><p>We&#8217;ve been doing this in software engineering for a long time.</p><p>We unit test components.</p><p>Then we test the interfaces between them.</p><p>Then we test the complete application.</p><p>Then, if we&#8217;re serious about production reliability, we deliberately make things fail.</p><p>Agent systems need the same treatment.</p><p>So yes, evaluate the individual agents.</p><p>But also evaluate:</p><pre><code><code>Agent A &#8594; Agent B</code></code></pre><p>and:</p><pre><code><code>Agent B &#8594; Agent C</code></code></pre><p>and eventually:</p><pre><code><code>Agent A &#8594; Agent B &#8594; Agent C</code></code></pre><p>The first tells you whether an agent can perform its job.</p><p>The second tells you whether two agents can actually work together.</p><p>The third tells you whether the workflow achieves what you intended.</p><p>Those are different tests.</p><p>I&#8217;ve seen teams put a lot of effort into the first one and surprisingly little into the other two.</p><div><hr></div><h1>The handoff needs a contract</h1><p>When we talk about APIs, we&#8217;re comfortable with the idea of a contract.</p><p>The producer knows what it has to send.</p><p>The consumer knows what it is going to receive.</p><p>We can test that contract.</p><p>Agent handoffs need something similar.</p><p>And I don&#8217;t mean simply checking that the output conforms to a JSON schema.</p><p>A schema can be perfectly valid while the meaning is wrong.</p><p>I&#8217;d want to test things such as:</p><ul><li><p>Is the required information present?</p></li><li><p>Is the information current?</p></li><li><p>Is uncertainty represented?</p></li><li><p>Can the receiving agent distinguish &#8220;unknown&#8221; from &#8220;no&#8221;?</p></li><li><p>Is the evidence attached?</p></li><li><p>Can we trace where the information came from?</p></li><li><p>Is there enough context for the next decision?</p></li><li><p>What happens when something is missing?</p></li></ul><p>That last question is particularly important.</p><p>A production system will eventually receive an incomplete handoff.</p><p>The interesting question isn&#8217;t whether that can happen. It will.</p><p>The question is what the next agent does when it does.</p><ul><li><p>Does it stop?</p></li><li><p>Does it ask for more information?</p></li><li><p>Does it make a guess?</p></li><li><p>Does it escalate?</p></li><li><p>Does it quietly continue?</p></li></ul><p>That&#8217;s an evaluation case.</p><div><hr></div><h1>Then there is the workflow itself</h1><p>Let&#8217;s say we&#8217;ve done all of that.</p><p>A is good.</p><p>A &#8594; B is good.</p><p>B is good.</p><p>B &#8594; C is good.</p><p>We still haven&#8217;t proved that:</p><p><strong>A &#8594; B &#8594; C</strong></p><p>works.</p><p>Why?</p><p>Because the workflow has a state.</p><p>And that state changes.</p><p>Imagine the Researcher retrieves a customer&#8217;s account at 10:01.</p><p>The Decision Agent makes its decision at 10:02.</p><p>At 10:03, the Executor performs the action.</p><p>What if something changed between those steps?</p><p>The account was updated.</p><p>A policy changed.</p><p>A previous transaction appeared.</p><p>A permission was revoked.</p><p>Another process modified the same record.</p><p>The information passed between the agents might have been correct when it was produced and wrong when it was acted upon.</p><p>That&#8217;s not really an LLM problem.</p><p>It&#8217;s a distributed-systems problem.</p><p>And I think that&#8217;s a useful way of looking at agentic architectures.</p><p>Here, we&#8217;re just building systems where some of the components happen to be probabilistic.</p><div><hr></div><h1>The evaluation needs to know what was true at the time</h1><p>This is where I&#8217;ve become increasingly interested in the idea of an <strong>Evaluation Graph</strong>.<br><br>I have writiten about it here:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;015cdfbf-7c3e-4af9-b8fd-c1dff674c5d7&quot;,&quot;caption&quot;:&quot;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&#8230;&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;Context Graph vs Evaluation Graph&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-27T09:59:32.110Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ab3800f-88ac-403b-8933-fdebb3e97fb9_1280x720.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://newsletter.agentbuild.ai/p/context-graph-vs-evaluation-graph&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:203809402,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:8,&quot;comment_count&quot;:2,&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><p>Suppose an evaluation says:</p><pre><code><code>Evaluation #1842

Score: 0.94</code></code></pre><p>Fine.</p><p>But what does that score actually mean six months later?</p><ul><li><p>Which model produced it?</p></li><li><p>Which prompt?</p></li><li><p>Which data?</p></li><li><p>Which policy?</p></li><li><p>Which business definition?</p></li><li><p>Which retrieved documents?</p></li><li><p>Which agent version?</p></li><li><p>Which context?</p></li><li><p>Which permissions?</p></li></ul><p>If you can&#8217;t answer those questions, you have a score, but you don&#8217;t necessarily have a reproducible evaluation.</p><p>Now imagine recording the evaluation together with the context surrounding it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1fTO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1fTO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1fTO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1fTO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1fTO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1fTO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg" width="1456" height="1887" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1887,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2241900,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/213779764?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.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_!1fTO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1fTO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1fTO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1fTO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c2a0593-afe8-44dc-b2b6-54c8ac53b839_1824x2364.jpeg 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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Now the evaluation isn&#8217;t floating on its own.</p><p>It has relationships.</p><p>You can trace the result back to the conditions under which it was produced.</p><p>That&#8217;s a much more useful thing to have when you&#8217;re running a production system.</p><div><hr></div><h1>The world changes underneath your evals</h1><p>Here&#8217;s a simple example.</p><p>You run the same evaluation today and tomorrow.</p><p>The test input hasn&#8217;t changed.</p><p>The workflow hasn&#8217;t changed.</p><p>The model hasn&#8217;t changed.</p><p>Today it passes.</p><p>Tomorrow it fails.</p><p>What happened?</p><p>Maybe the model changed.</p><p>But maybe the underlying data changed.</p><p>Maybe the policy changed.</p><p>Maybe a business definition changed.</p><p>Maybe a retrieved document was updated.</p><p>Maybe the context supplied to the agent was different.</p><p>Without that information, it&#8217;s very easy to blame the model for a failure that actually came from somewhere else.</p><p>This is why I don&#8217;t think evaluation should be treated as a snapshot.</p><p>For production systems, an evaluation is really a statement about a system <strong>at a particular point in time, under particular conditions</strong>.</p><p>Those conditions need to be part of the evaluation record.</p><div><hr></div><h1>This is where the evaluation surface starts getting large</h1><p>Now add another agent.</p><p>Then a verifier.</p><p>Then a router.</p><p>Then a fallback.</p><p>Then shared memory.</p><p>Then a human approval step.</p><p>Then a couple of external tools.</p><p>The architecture starts looking something like this:</p><pre><code><code>                  &#9484;&#9472;&#9472;&#8594; Planner &#9472;&#9472;&#8594; Executor
Researcher &#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
                  &#9492;&#9472;&#9472;&#8594; Verifier &#9472;&#9472;&#8594; Planner</code></code></pre><p>Every new component adds another thing to evaluate.</p><p>But that&#8217;s only half of it.</p><p>Every new connection adds another boundary.</p><p>And every boundary can carry:</p><ul><li><p>context</p></li><li><p>state</p></li><li><p>instructions</p></li><li><p>uncertainty</p></li><li><p>data</p></li><li><p>assumptions</p></li></ul><p>That&#8217;s what I mean by <strong>Evaluation Surface Area</strong>.</p><p>It isn&#8217;t simply the number of agents in your architecture.</p><p>It&#8217;s everything that can influence the outcome.</p><p>Once you see it this way, adding another agent isn&#8217;t a free architectural decision.</p><p>You&#8217;re also adding more behaviour that needs to be understood and tested.</p><p>Now you see, there is so much underneath you need to engineer for.</p><p><em>(And you see posts claiming to &#8220;replace &lt;insert job title&gt; with AI Agents&#8221;, it is not that easy.)</em></p><div><hr></div><h1>What I want in the production trace</h1><p>This changes the telemetry I&#8217;d want from an agent system too.</p><p>A final answer isn&#8217;t enough.</p><p>If the workflow failed, I want to be able to walk backwards through it.</p><p>Something like:</p><pre><code><code>Workflow: 84721

Input
  &#8595;
Agent A
  &#9500;&#9472; model/version
  &#9500;&#9472; prompt/version
  &#9500;&#9472; retrieved data
  &#9500;&#9472; context
  &#9500;&#9472; tool calls
  &#9492;&#9472; output
       &#8595;
A &#8594; B
  &#9500;&#9472; payload
  &#9500;&#9472; context
  &#9492;&#9472; validation
       &#8595;
Agent B
  &#9500;&#9472; decision
  &#9492;&#9472; output
       &#8595;
B &#8594; C
  &#9500;&#9472; payload
  &#9492;&#9472; context
       &#8595;
Agent C
  &#9500;&#9472; tool calls
  &#9492;&#9472; action
       &#8595;
Outcome</code></code></pre><p>If something went wrong, I want to find the <strong>first place the system deviated from the expected path</strong>.</p><p>Maybe retrieval was wrong.</p><p>Maybe the handoff dropped some context.</p><p>Maybe the policy was stale.</p><p>Maybe the Decision Agent made a bad call.</p><p>Maybe the Executor received a valid instruction that was no longer safe to execute.</p><p>Maybe a retry caused the action to happen twice.</p><p>The trace should let me work that out.</p><p>Otherwise we&#8217;re left staring at the final answer and asking the model why it did something.</p><p>That&#8217;s not a particularly good debugging strategy.</p><div><hr></div><h1>So what should we actually evaluate?</h1><p>For a production workflow, I&#8217;d think about it this way.</p><blockquote><p><strong>The agent</strong></p><p>Can it do its job?</p><p><strong>The handoff</strong></p><p>Can the next agent reliably understand what it received?</p><p><strong>The workflow</strong></p><p>Does the complete sequence produce the right outcome?</p><p><strong>The failure path</strong></p><p>What happens when something is missing, stale, delayed or broken?</p><p><strong>The context</strong></p><p>What data, policy, model, prompt and state were in force when the evaluation happened?</p></blockquote><p>That last one is easy to overlook.</p><p>But it becomes incredibly important once your system is changing underneath you.</p><div><hr></div><h1>Evaluation has to become part of the architecture</h1><p>This is probably the biggest shift in thinking for me.</p><p>Evaluation shouldn&#8217;t sit at the end of the development process as a test suite we run before deployment.</p><p><strong>For an agentic system, evaluation needs to sit alongside the architecture.</strong></p><p>The agent graph tells us how work moves through the system.</p><p>The evaluation graph tells us how we understand and explain that behaviour.</p><p>And the two need to stay connected.</p><p>Because eventually someone is going to ask:</p><blockquote><p>Why did this agent make that decision?</p></blockquote><p>And &#8220;because it scored 94% on our eval set&#8221; isn&#8217;t going to be a satisfactory answer.</p><p>We need to be able to trace that decision back through the agent, the handoff, the context, the data, the policy, the model and the state of the system at that moment.</p><p>That&#8217;s the level of evaluation I think production agent systems are going to need.</p><p>Not just:</p><p><strong>Did it pass?</strong></p><p>But:</p><p><strong>What happened, under what conditions, and can we prove it?</strong></p><p>That&#8217;s a much harder engineering problem.</p><p>It&#8217;s also a much more interesting one.</p><blockquote><p><strong>Evaluate the nodes. Evaluate the edges. And keep the context that makes the evaluation meaningful.</strong></p></blockquote><div><hr></div><p><em> See you in Part 5, where we'll look at <strong>why your agent can pass every evaluation and still fail in production.</strong></em></p><div><hr></div><p><strong>One request:</strong><br><br>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. Tell me what you want to learn.</p><h3 style="text-align: center;"><strong>&#128073; <a href="https://forms.gle/8TZVQ1qKiRefLCkdA">Take the survey here</a></strong></h3><p>Thanks for reading,<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[Your Agent Isn’t Hallucinating. It’s Operating With the Wrong Context.]]></title><description><![CDATA[Why production AI agents return convincing answers that turn out to be completely wrong, and how state drift, stale data, and missing operational context cause silent failures in the enterprise.]]></description><link>https://newsletter.agentbuild.ai/p/your-agent-isnt-hallucinating-its</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/your-agent-isnt-hallucinating-its</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 22 Aug 2026 13:03:10 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5975d8e7-1efd-406e-b71f-def9ee07f372_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>We&#8217;re continuing our series on what really breaks when AI agents move from demos to production. In Part 1 we explored <a href="https://newsletter.agentbuild.ai/p/why-agent-to-agent-communication">why agent-to-agent communication fails</a>, and in Part 2 we looked at <a href="https://newsletter.agentbuild.ai/p/why-ai-agent-handoffs-fail?r=36xwjn">why the agent handoff fails</a>, Part 3 takes us one layer deeper: <strong>what happens when an agent has the right information, but the wrong context?</strong></em></p><div><hr></div><p>A few months ago, I was digging into why some AI systems return completely convincing answers that turn out to be dead wrong.</p><p>The interesting failures aren&#8217;t obvious hallucinations. The tricky cases look airtight on paper: the document is real, the customer is real, the policy is accurate, and the text was interpreted faithfully. Yet the final output is completely broken.</p><p>The problem isn&#8217;t the data itself. The agent simply has the right information applied to the wrong context.</p><div><hr></div><h2>Think about cooking dinner</h2><p>Imagine preparing a meal for friends. You have chicken, vegetables, rice, spices, and a recipe you&#8217;ve made dozens of times. Halfway through prep, someone mentions that one of the guests is vegetarian.</p><p>Nothing in your kitchen failed. The chicken was fresh, the recipe was solid, and your technique was fine. You just lacked a crucial constraint about the people you were cooking for, and that missing detail invalidates the rest of your plan.</p><p>Enterprise AI agents run into this constantly.</p><div><hr></div><h2>When a good RAG response isn&#8217;t enough</h2><p>Suppose an employee asks an HR bot: <em>&#8220;How much parental leave am I entitled to?&#8221;</em></p><p>The system queries the internal knowledge base, pulls a valid policy document citing 26 weeks, quotes it accurately, and references the source. It looks flawless.</p><p>Except the employee is based in another region, works on a contractor agreement rather than permanent staff, or the policy was revised last week and the search index hasn&#8217;t refreshed.</p><p>The document wasn&#8217;t fabricated, retrieval didn&#8217;t crash, and the model didn&#8217;t misread the text. The agent simply had no awareness of the situation surrounding the query.</p><p>We&#8217;ve gotten quite good at feeding documents into LLMs. What we haven&#8217;t nailed is ensuring that data applies to this specific user, task, and moment in time.</p><div><hr></div><h2>RAG answers &#8220;what looks relevant?&#8221;</h2><p>Standard RAG follows a predictable loop: user asks a question, the engine retrieves matching snippets, feeds them into the prompt, and the model outputs an answer.</p><p>The weak point is semantic relevance.</p><p>A search index will easily identify an SLA document for a question about service levels. But that document might be superseded by an addendum signed six months later, an unindexed regional policy, or an active exception logged in Salesforce.</p><p>The document is semantically relevant, but operationally invalid for that specific scenario.</p><div><hr></div><blockquote><p><span>This is the third piece in a series I&#8217;m running, </span><em>Things That Break When Agents Meet Reality</em><span>. It&#8217;s about the engineering problems that only surface once agentic systems leave the demo and have to survive production. </span></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xNIg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xNIg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.png 424w, https://substackcdn.com/image/fetch/$s_!xNIg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.png 848w, https://substackcdn.com/image/fetch/$s_!xNIg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.png 1272w, https://substackcdn.com/image/fetch/$s_!xNIg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xNIg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.png" width="6912" height="3130" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3130,&quot;width&quot;:6912,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2377892,&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/212218556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc971d684-d2b1-4099-9cbb-2703a561cce8_6912x3456.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_!xNIg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.png 424w, https://substackcdn.com/image/fetch/$s_!xNIg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.png 848w, https://substackcdn.com/image/fetch/$s_!xNIg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.png 1272w, https://substackcdn.com/image/fetch/$s_!xNIg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f26814d-4bd5-4533-8f9b-59b13f9d06fa_6912x3130.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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 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>Context is scattered across systems</h2><p>In production environments, the data required to resolve a single interaction rarely lives in one place.</p><p>A routine customer query might pull identity from the CRM, subscription tiers from Stripe, negotiated terms from the contract repo, open tickets from Zendesk, historical usage from Snowflake, and real-time events from Kafka.</p><p>The agent doesn&#8217;t need a dump of everything, in fact, dumping raw state degrades performance. It needs the exact slice of state governing that specific decision.</p><div><hr></div><h2>Context goes stale</h2><p>Systems drift out of sync all the time.</p><p>If a company shortens its cancellation window from 30 days to 14 days, the source database might update immediately while the vector store lags behind. The agent keeps quoting the 30-day policy. The model didn&#8217;t hallucinate, semantic search didn&#8217;t fail, and the pipeline ran as designed. The data was simply historically true, but currently false.</p><p>This creates a core infrastructure challenge: is a document valid because it matches search terms, or because it reflects the current operational state?</p><p>Basic metadata like <code>created_at</code> and <code>updated_at</code> rarely cuts it. Systems need fields like <code>valid_from</code>, <code>valid_until</code>, <code>supersedes</code>, <code>source_system</code>, and <code>scope</code>, because <em>last updated</em> and <em>currently applicable</em> are entirely different concepts.</p><div><hr></div><h2>Multi-agent compounding errors</h2><p>This gets significantly messier across multi-agent workflows.</p><pre><code><code>Customer Agent -&gt; Pricing Agent -&gt; Compliance Agent -&gt; Execution Agent
</code></code></pre><p>Each service queries its own domain: the customer agent reads the CRM, the pricing agent checks billing tiers, compliance reads policy docs, and execution writes to the transactional database.</p><p>Each agent executes its sub-task correctly, but they might operate on mismatched snapshots of state. One sees a legacy plan, another reads an updated tier, and compliance applies an exception logged yesterday that the execution worker never receives.</p><p>By the end of the chain, nobody hallucinated, but the pipeline failed due to <strong>context fragmentation</strong>. It&#8217;s an insidious failure mode because every individual log looks green in isolation.</p><div><hr></div><h2>The missing source of truth</h2><p>Enterprise systems frequently have conflicting definitions of basic terms.</p><p>If an account is marked <code>Active</code> in HubSpot, <code>Past Due</code> in Stripe, and <code>At Risk</code> in Zendesk, which one does the agent rely on?</p><p>A human operator knows that Stripe owns payment state while HubSpot owns account lifecycle. An LLM lacks that institutional intuition unless it is explicitly engineered into the pipeline.</p><p>Teams need clear ownership around business objects:</p><ul><li><p>What the field represents</p></li><li><p>Which system owns authoritative write access</p></li><li><p>Update latency and sync schedules</p></li><li><p>Entity boundaries and constraints</p></li></ul><p>Prompt engineering cannot fix underlying data governance gaps.</p><div><hr></div><h2>The handoff dilemma</h2><p>When a research agent finishes a task and passes output to an analyst agent, what should that payload contain?</p><p>Passing the entire raw dialogue blows up the context window with conversational noise, token bloat, and stale assumptions. Conversely, sending a bare-bones summary drops critical constraints, source provenance, and workflow state.</p><p>Agent handoffs require intentional payload schemas: passing the exact state required for downstream decisions; nothing more, nothing less.</p><div><hr></div><h2>Engineering context assembly</h2><p>For simple chatbots, context is just conversation history and a few retrieved chunks. For decision-making agents, context becomes an active assembly layer:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ME0O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ME0O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ME0O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ME0O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ME0O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ME0O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg" width="1456" height="996" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:996,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2482775,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentbuild.ai/i/212218556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.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_!ME0O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ME0O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ME0O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ME0O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f69f960-b83e-48a4-8d93-a7f3e9cef90c_2480x1696.jpeg 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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Before prompt construction, an assembly pipeline must resolve:</p><ul><li><p><strong>Time:</strong> Is the data current and actively enforced?</p></li><li><p><strong>Entity:</strong> Does this rule apply to this specific account or tier?</p></li><li><p><strong>Authority:</strong> Is this the definitive system of record for this attribute?</p></li><li><p><strong>State:</strong> What prior steps and mutations occurred in this session?</p></li><li><p><strong>Permissions:</strong> Does the user/agent have authorization to view this data?</p></li><li><p><strong>Provenance:</strong> Can we trace the origin of this assertion?</p></li></ul><p>These are traditional data engineering patterns applied upstream of LLM orchestration.</p><div><hr></div><h2>Bigger context windows won&#8217;t solve this</h2><p>Expanding context windows to millions of tokens doesn&#8217;t eliminate the need for curation.</p><p>Giving a model an unfiltered firehose of internal data introduces conflicting policies, outdated records, noisy intermediate reasoning, and distraction. The engineering challenge isn&#8217;t how many tokens a model can swallow; it&#8217;s how reliably we assemble the exact state required for a specific decision.</p><div><hr></div><h2>The evaluation split</h2><p>When an agent takes the wrong action, the default reaction is to blame model reasoning.</p><p>In reality, agent evaluations need to decouple two distinct questions:</p><ol><li><p><strong>Reasoning Quality:</strong> Did the model reach a sound conclusion based on the payload provided?</p></li><li><p><strong>Context Quality:</strong> Did the orchestration layer supply the correct, authoritative state in the first place?</p></li></ol><p>If the reasoning failed, you tweak the prompt, model, or tool definitions. If the context was wrong, no amount of prompt tweaking will prevent the failure.</p><div><hr></div><h2>Why this matters for action-taking agents</h2><p>When an agent just generates text, bad context produces bad copy. When an agent has write access, bad context triggers bad transactions.</p><p>A refund bot might look up the right policy, calculate the correct amount, and match the customer record, yet execute a duplicate payout because it lacked visibility into a refund processed ten minutes prior.</p><p>At that stage, context management becomes part of the system&#8217;s operational control plane.</p><div><hr></div><h2>Rethinking RAG</h2><p>RAG isn&#8217;t going anywhere, but its role needs reframing.</p><p>Moving from simple document search to context assembly means pulling simultaneously from vector indexes, transactional APIs, event buses, state machines, and access control layers.</p><blockquote><p>RAG provides reference material. Context provides the operational situation.</p></blockquote><div><hr></div><p><em> See you in Part 4, where we'll look at <strong>why your agent can pass every evaluation and still fail in production.</strong></em></p><div><hr></div><p><strong>One request:</strong><br><br>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. Tell me what you want to learn.</p><h3 style="text-align: center;"><strong>&#128073; <a href="https://forms.gle/8TZVQ1qKiRefLCkdA">Take the survey here</a></strong></h3><p>Thanks for reading,<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[Why AI Agent Handoffs Fail]]></title><description><![CDATA[The handoff is the new API boundary, and most teams treat it like a prompt. Why that fails without ever throwing an error, and what a reliable handoff carries instead.]]></description><link>https://newsletter.agentbuild.ai/p/why-ai-agent-handoffs-fail</link><guid isPermaLink="false">https://newsletter.agentbuild.ai/p/why-ai-agent-handoffs-fail</guid><dc:creator><![CDATA[Sandipan Bhaumik]]></dc:creator><pubDate>Sat, 15 Aug 2026 13:03:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/32774701-7e06-4bea-b91f-55dcb839d0e0_2750x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Things That Break When Agents Meet Reality &#183; Part 2</em></p><p>A customer rang the bank on a Monday morning. They had been locked out of their own account.</p><p>No breach. No fraud. A legitimate person, a legitimate transaction, frozen by a system that had done exactly what it was built to do.</p><p>The team pulled the trace. Every step had completed. The research agent ran, the analysis agent ran, the decision agent ran. The observability dashboard showed one word across the whole pipeline.</p><p><strong>SUCCESS.</strong></p><p>Nothing had crashed. That was the problem.</p><div><hr></div><h2>Three boxes, three arrows</h2><p>On a whiteboard the pipeline looked clean.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fMRa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fMRa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png 424w, https://substackcdn.com/image/fetch/$s_!fMRa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png 848w, https://substackcdn.com/image/fetch/$s_!fMRa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png 1272w, https://substackcdn.com/image/fetch/$s_!fMRa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fMRa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png" width="1456" height="198" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:198,&quot;width&quot;:1456,&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_!fMRa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png 424w, https://substackcdn.com/image/fetch/$s_!fMRa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png 848w, https://substackcdn.com/image/fetch/$s_!fMRa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png 1272w, https://substackcdn.com/image/fetch/$s_!fMRa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a804fc-2013-49a3-92d1-b3a168b16bd0_2964x404.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Three agents, three capabilities, one workflow. </p><p>But the boxes weren&#8217;t where the trouble lived. <strong>The trouble lived in the arrows.</strong></p><p>Every arrow is a boundary. The research agent had told the analysis agent that a customer carried a high risk score. The analysis agent read &#8220;high risk&#8221; as <em>reject</em>. The research agent had meant <em>worth a closer look</em>. Nowhere in the trace did those two readings ever meet. No exception fired, because from the machine&#8217;s point of view nothing was wrong. A value went in, a value came out, the run went green.</p><p>We have spent decades learning to engineer boundaries between software components. We call them APIs. We write contracts, specify schemas, validate inputs, version interfaces, handle errors, monitor latency. We do all of it because of one lesson that cost the industry a great deal to learn: <strong>the interface between two systems usually matters more than either system on its own.</strong></p><p>Now the components on both sides of the interface are language models. And somewhere along the way we started treating the interface as a prompt.</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_!t4Np!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t4Np!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.png 424w, https://substackcdn.com/image/fetch/$s_!t4Np!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.png 848w, https://substackcdn.com/image/fetch/$s_!t4Np!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.png 1272w, https://substackcdn.com/image/fetch/$s_!t4Np!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t4Np!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.png" width="6912" height="3017" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3017,&quot;width&quot;:6912,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2350181,&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/211292059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53bf117c-5d49-4d61-9f6d-38193ff73af3_6912x3456.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_!t4Np!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.png 424w, https://substackcdn.com/image/fetch/$s_!t4Np!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.png 848w, https://substackcdn.com/image/fetch/$s_!t4Np!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.png 1272w, https://substackcdn.com/image/fetch/$s_!t4Np!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6179589e-f9a7-42a3-825f-f5d4ff7e41e8_6912x3017.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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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><blockquote><p>This is the second piece in a series I&#8217;m running, <em>Things That Break When Agents Meet Reality</em>. It&#8217;s about the engineering problems that only surface once agentic systems leave the demo and have to survive production. Part 1, <a href="https://newsletter.agentbuild.ai/p/why-agent-to-agent-communication">Why Agent-to-Agent Communication Fails</a>, landed on one line: having five smart agents doesn&#8217;t give you one smart system. That leaves an obvious next question. If agents have to communicate reliably, what does that communication actually have to be?</p></blockquote><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>An agent handoff isn&#8217;t a conversation</h2><p>Picture the research agent telling the analysis agent what it found.</p><p>A person might say: &#8220;I found three transactions that look off. You should take a closer look.&#8221;</p><p>Perfectly reasonable between two humans. But strip the human out of the receiving end and the sentence falls apart. </p><ul><li><p>Does &#8220;three&#8221; mean exactly three? </p></li><li><p>Does &#8220;off&#8221; have a threshold behind it? </p></li><li><p>Which transactions, on what evidence, to what confidence? </p></li><li><p>Is this a claim that they are fraudulent, or a request to check?</p></li></ul><p>People resolve that ambiguity without noticing. Deterministic software refuses to. </p><blockquote><p>Language models sit in the worst possible place between the two: brilliant at interpreting ambiguity, and equally brilliant at inventing an interpretation when there shouldn&#8217;t be one. </p></blockquote><p>In a fraud pipeline, that second talent is the one that freezes a real customer&#8217;s account.</p><div><hr></div><h2>The old world had contracts for a reason</h2><p>A traditional service call carries a contract:</p><pre><code><code>{
  "customer_id": "12345",
  "risk_score": 0.87,
  "decision": "REVIEW"
}</code></code></pre><p>Drop <code>customer_id</code> and the request fails. Send <code>risk_score</code> as text and validation fails. Send a decision outside the permitted set and the request fails. That strictness is deliberate. The system would rather stop loudly than guess quietly.</p><p>Replace the sender with an agent and the same information arrives like this:</p><blockquote><p>&#8220;I&#8217;ve identified the customer as 12345. Based on the available information, this appears to be the relevant account.&#8221;</p></blockquote><p>Useful to read. Miserable to build on. The receiver now has to parse prose to recover a value that was never meant to be ambiguous. We took a deterministic interface and swapped in a probabilistic one, then acted surprised when the decision at the far end drifted.</p><div><hr></div><h2>Contract drift: the change nobody made</h2><p>Here is the failure mode that is specific to agents.</p><p>Two agents agree on a shape:</p><pre><code><code>customer_id
account_status
risk_score</code></code></pre><p>Six months later someone edits the sending agent&#8217;s prompt. It starts returning two extra fields:</p><pre><code><code>customer_id
account_status
risk_score
reasoning
recommended_action</code></code></pre><p>Nothing breaks. The JSON is valid. The workflow runs. But the receiving agent quietly starts leaning on <code>recommended_action</code> instead of forming its own judgement. The architecture has changed and no one touched the API.</p><p>That is contract drift. With traditional software, an interface change is an event: a version bump, a review, a deprecation notice. With agents, the meaning of an interface can shift because of a prompt edit, a model upgrade, a new tool, a memory change, a policy tweak. The schema stays valid while its meaning moves underneath you. That is a different class of problem, and most monitoring is blind to it.</p><div><hr></div><h2>The most dangerous handoff is the one that succeeds</h2><p>A malformed API call gives you an error, which is a gift, really. <strong>It tells you where to look.</strong></p><p>An agent gives you something worse: a well-formed answer that means something other than what the sender intended.</p><p>The research agent says &#8220;high risk score.&#8221; The decision agent hears <em>reject</em>. The research agent meant <em>investigate</em>. Nothing fails and the pipeline completes. The dashboard goes green. And a customer who did nothing wrong spends Monday on hold.</p><blockquote><p>Semantic failures are more dangerous than technical ones, because every tool we own is built to catch the technical kind.</p></blockquote><div><hr></div><h2>What a handoff should actually carry</h2><p>Start treating handoffs as contracts rather than messages, and a useful contract works on four layers.</p><ol><li><p><strong>Structure.</strong> What fields exist. The schema.</p></li><li><p><strong>Semantics.</strong> What those fields mean. A field called <code>status</code> with the value <code>VULNERABLE</code> is valid JSON and almost useless on its own. Has the customer disclosed vulnerability, has the system inferred it, has a human confirmed it, is it a legal protection, was it true yesterday and unchecked since? The schema is fine. The meaning is undefined, and in a regulated business the meaning is the whole point.</p></li><li><p><strong>Authority.</strong> What the receiver is allowed to do with the payload. Receiving a risk score is not the same as being cleared to freeze an account on it.</p></li><li><p><strong>Provenance.</strong> Where the information came from. <code>risk_score = 0.87</code> is a number until you know which model produced it, on what data, under which policy, and when.</p></li></ol><p>A mature handoff stops being &#8220;here&#8217;s some JSON.&#8221; It becomes: <strong>here is what I know, what it means, where it came from, and what you are allowed to do with it.</strong></p><div><hr></div><h2>Every arrow is an evaluation point</h2><p>This is the part I think matters most, and it is where the whole series has been heading.</p><p>We tend to evaluate agents one box at a time. Did the research agent find the right transactions? Did the decision agent make the right call? Useful questions, but they are incomplete.</p><p>The better question lives on the arrow: <strong>did the sending agent give the receiver everything it needed to do its job correctly? </strong>That is a different evaluation, and it is one you can actually run. Schema validity, completeness, semantic correctness, context preservation, intent preservation, evidence quality, confidence calibration. Each of those can be checked at the boundary before the payload moves on.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VnRJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VnRJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.png 424w, https://substackcdn.com/image/fetch/$s_!VnRJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.png 848w, https://substackcdn.com/image/fetch/$s_!VnRJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.png 1272w, https://substackcdn.com/image/fetch/$s_!VnRJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VnRJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.png" width="1456" height="739" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:739,&quot;width&quot;:1456,&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_!VnRJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.png 424w, https://substackcdn.com/image/fetch/$s_!VnRJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.png 848w, https://substackcdn.com/image/fetch/$s_!VnRJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.png 1272w, https://substackcdn.com/image/fetch/$s_!VnRJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e03ed44-aab7-4244-8c49-fff4a0c05c3f_2844x1444.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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Do that, and the arrows in your diagram stop being decoration. They become the places you measure. When something goes wrong in production, you stop reaching for &#8220;the agent hallucinated&#8221; and start asking which handoff corrupted the workflow. That question has an answer. The other one never did.</p><p>This is <strong>Evaluation Debt </strong>in its native habitat. It is also why evaluation isn&#8217;t a final checkbox bolted on at the end of the pipeline. It&#8217;s the architecture that keeps the whole thing alive, and in an agentic system that architecture lives on the boundaries, not inside the boxes.</p><div><hr></div><h2>The architecture that follows</h2><p>Once handoffs are contracts, the system grows the parts it was missing. Validation before a payload reaches the next agent. Versioning when the contract changes on purpose, so drift becomes an event again. Tracing, so you can see what crossed every boundary. Evaluation at each arrow. A defined failure path when the receiver rejects a payload, and human escalation when the system can&#8217;t establish that a handoff is safe.</p><blockquote><p>Agent orchestration starts to look far more like distributed systems engineering than like prompt design. That is the mindset shift I think the next year of this work turns on.</p></blockquote><p>Back to the customer on hold. In the pipeline that catches this, &#8220;high risk&#8221; never reaches the decision agent as a bare phrase. It arrives as a typed claim with a meaning, a source, and a ceiling on what can be done with it. The decision agent can act on <em>investigate</em> and is not permitted to escalate it to <em>freeze</em> on its own. The dashboard still goes green. This time the green is telling the truth.</p><div><hr></div><h2>Where this goes next</h2><p>We are building software components that can reason, which is genuinely powerful and quietly introduces something APIs never had. An API never decides what your payload probably means. An agent does. The space between two agents isn&#8217;t an API and it isn&#8217;t a conversation. It&#8217;s a third thing: <strong>a reasoning boundary</strong>, and it has to be engineered on purpose.</p><p>The next pieces in this series follow the cracks further out. </p><ul><li><p>What happens when you keep adding agents to a system that already has too many. </p></li><li><p>Why an agent can pass every evaluation and still fail in production. </p></li><li><p>What happens when an agent has all the right information and still lacks the context to use it.</p><p></p></li></ul><p>If you take one line into your next design review, take this one: <strong>the boundary between two agents is a contract, and an untested contract is a production incident with a delay on it.</strong></p><p>See you in Part 3.</p><div><hr></div><p><strong>One request:</strong><br><br>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. Tell me what you want to learn.</p><h3 style="text-align: center;"><strong>&#128073; <a href="https://forms.gle/8TZVQ1qKiRefLCkdA">Take the survey here</a></strong></h3><p>Thanks for reading,<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[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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kRv2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kRv2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.png 424w, https://substackcdn.com/image/fetch/$s_!kRv2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.png 848w, https://substackcdn.com/image/fetch/$s_!kRv2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.png 1272w, https://substackcdn.com/image/fetch/$s_!kRv2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kRv2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.png" width="6912" height="3113" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3113,&quot;width&quot;:6912,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2373002,&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/197971759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6869d957-d7f0-4c37-9098-af8f9a6c15d7_6912x3456.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_!kRv2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.png 424w, https://substackcdn.com/image/fetch/$s_!kRv2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.png 848w, https://substackcdn.com/image/fetch/$s_!kRv2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.png 1272w, https://substackcdn.com/image/fetch/$s_!kRv2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf989dbe-3b17-4f62-919a-bdfc581667e6_6912x3113.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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 buttonBase-GK1x3M"><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" class="icon-noB79L"><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 buttonBase-GK1x3M"><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 icon-noB79L"><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></channel></rss>