<?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[Agentic Engineering]]></title><description><![CDATA[Where the hype ends, and the build begins]]></description><link>https://newsletter.agentengineering.co</link><image><url>https://substackcdn.com/image/fetch/$s_!J5ef!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfd107e-a784-4492-be0c-1ade75f87224_256x256.png</url><title>Agentic Engineering</title><link>https://newsletter.agentengineering.co</link></image><generator>Substack</generator><lastBuildDate>Sat, 31 Oct 2026 16:53:14 GMT</lastBuildDate><atom:link href="https://newsletter.agentengineering.co/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Packt]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[agenticengineering@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[agenticengineering@substack.com]]></itunes:email><itunes:name><![CDATA[Packt]]></itunes:name></itunes:owner><itunes:author><![CDATA[Packt]]></itunes:author><googleplay:owner><![CDATA[agenticengineering@substack.com]]></googleplay:owner><googleplay:email><![CDATA[agenticengineering@substack.com]]></googleplay:email><googleplay:author><![CDATA[Packt]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[#11: Deep search can still give you a shallow answer]]></title><description><![CDATA[The four-part loop and three architectures that determine whether an agent truly researched the question]]></description><link>https://newsletter.agentengineering.co/p/11-deep-search-can-still-give-you</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/11-deep-search-can-still-give-you</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Thu, 29 Oct 2026 18:53:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/81e08b20-46af-4e24-87f2-a65ee6c57463_1672x941.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The word <em>deep</em> tells us very little about how much research actually happened. An agent can search several sources and still produce a confident answer from incomplete or inconsistent evidence.</p><p>A deep search agent is meant to do more: break the problem into smaller tasks, choose the right sources, check what it finds and return for another pass when the evidence does not hold up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0oPJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0oPJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0oPJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0oPJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0oPJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0oPJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:526490,&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.agentengineering.co/i/222673156?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.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_!0oPJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0oPJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0oPJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0oPJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ff698bf-7db6-4f9a-b50f-5dcd9da078b1_1672x941.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></figure></div><p>We&#8217;ll use finance as the worked example because it makes these moving parts easy to see, but the same architecture applies wherever an agent must research before it responds.</p><h3><strong>The core loop</strong></h3><p style="text-align: justify;">The fundamental pattern of a deep search agent can be expressed as a four-phase loop:</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DY5Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.png 424w, https://substackcdn.com/image/fetch/$s_!DY5Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.png 848w, https://substackcdn.com/image/fetch/$s_!DY5Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.png 1272w, https://substackcdn.com/image/fetch/$s_!DY5Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DY5Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.png" width="1200" height="136" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:136,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33737,&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;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.agentengineering.co/i/222673156?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.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_!DY5Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.png 424w, https://substackcdn.com/image/fetch/$s_!DY5Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.png 848w, https://substackcdn.com/image/fetch/$s_!DY5Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.png 1272w, https://substackcdn.com/image/fetch/$s_!DY5Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868b0e64-3fc8-4663-baaa-8eaf6f33c1cd_1200x136.png 1456w" sizes="100vw"></picture><div></div></div></div></figure></div><p>The agent plans subtasks, executes them using tools, validates the results and either replans when it finds gaps or synthesizes a final report.</p><h4><strong>Phase 1: Plan</strong></h4><p>The agent receives a research question and decomposes it into subtasks with explicit dependencies.</p><p>For a comparison of NVIDIA, AMD and Intel, for example, a planner might assign separate tasks for gathering each company&#8217;s financial data, reviewing market news and analysing filings. Those tasks can run in parallel, while calculating growth rates and writing the final comparison must wait for their results.</p><p>Good plans have measurable outcomes such as &#8220;fetch revenue data&#8221; rather than vague goals such as &#8220;understand the company.&#8221;</p><h4><strong>Phase 2: Search and execute</strong></h4><p>The agent executes each subtask using the appropriate tools. In our financial example, those might include data APIs, SEC EDGAR, web search and earnings-transcript databases. In another domain, the sources could be internal documentation, research papers, case law or product data.</p><p>This is where the &#8220;deep&#8221; in deep search comes from. The agent does not fire one search query and return the first plausible answer. It selects the right tool for each subtask, handles errors and retries, and accumulates its findings in a scratchpad.</p><h4><strong>Phase 3: Validate</strong></h4><p>This is the phase that separates deep search from naive automation. The agent checks its findings for:</p><ul><li><p><strong>Internal consistency:</strong> Does a figure from a regulatory filing match the company&#8217;s earnings transcript?</p></li><li><p><strong>Completeness:</strong> Did we successfully gather information for every company?</p></li><li><p><strong>Reasonableness:</strong> Is 500% year-over-year growth plausible, or did the agent parse a table incorrectly?</p></li><li><p><strong>Missing evidence:</strong> If one API call failed, does the task need to be retried through another source?</p></li></ul><p>Validation matters beyond finance. Any research agent can produce a polished answer from incomplete, contradictory or incorrectly parsed evidence. The validator&#8217;s job is to notice before that answer reaches the user.</p><h4><strong>Phase 4: Synthesize or replan</strong></h4><p>If validation passes, the agent combines its findings into a structured report. If validation exposes gaps or errors, it returns to the planning phase with an updated understanding of what is missing.</p><p>The loop continues until the agent has enough validated evidence to produce its final response.</p><h3><strong>The components behind the loop</strong></h3><p>Making each phase work requires several supporting components operating 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_!3Zi4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Zi4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png 424w, https://substackcdn.com/image/fetch/$s_!3Zi4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png 848w, https://substackcdn.com/image/fetch/$s_!3Zi4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png 1272w, https://substackcdn.com/image/fetch/$s_!3Zi4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Zi4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png" width="1200" height="408" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:408,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:90587,&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.agentengineering.co/i/222673156?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.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_!3Zi4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png 424w, https://substackcdn.com/image/fetch/$s_!3Zi4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png 848w, https://substackcdn.com/image/fetch/$s_!3Zi4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png 1272w, https://substackcdn.com/image/fetch/$s_!3Zi4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9c41186-6cd4-44ff-a86e-8610e0ef40cc_1200x408.png 1456w" sizes="auto, 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>The orchestrator manages the research loop, delegating work to the planner, tool executor, validator and synthesizer. A context manager and scratchpad prevent token overflow, preserve intermediate findings, and maintain an audit trail.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NkzW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NkzW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png 424w, https://substackcdn.com/image/fetch/$s_!NkzW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png 848w, https://substackcdn.com/image/fetch/$s_!NkzW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png 1272w, https://substackcdn.com/image/fetch/$s_!NkzW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!NkzW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png" width="1538" height="958" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:958,&quot;width&quot;:1538,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:236245,&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.agentengineering.co/i/222673156?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58ff00b5-c9e8-43b3-afdd-5de648f929fb_1800x1080.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_!NkzW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png 424w, https://substackcdn.com/image/fetch/$s_!NkzW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png 848w, https://substackcdn.com/image/fetch/$s_!NkzW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png 1272w, https://substackcdn.com/image/fetch/$s_!NkzW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd41e50-fbd7-4b9e-bcbf-60d5ca80258f_1538x958.png 1456w" sizes="auto, 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>Every implementation combines these components in some form. What changes is how much responsibility each component carries.</p><h3><strong>Three architectural approaches</strong></h3><p>Real implementations reveal three broad approaches to building deep search agents. Each makes a different trade-off between complexity, cost and capability.</p><h4><strong>Approach 1: Single agent with ReAct loop</strong></h4><p>The simplest approach uses one LLM agent with access to tools, running in a ReAct&#8212;or Reason and Act&#8212;loop.</p><p>Given a task, the agent reasons about what to do next, takes an action, observes the result and repeats until the task is complete. One model handles planning, execution, validation and synthesis within a single conversation context.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZAOe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.png 424w, https://substackcdn.com/image/fetch/$s_!ZAOe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.png 848w, https://substackcdn.com/image/fetch/$s_!ZAOe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.png 1272w, https://substackcdn.com/image/fetch/$s_!ZAOe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZAOe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.png" width="1200" height="65" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:65,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19641,&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.agentengineering.co/i/222673156?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.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_!ZAOe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.png 424w, https://substackcdn.com/image/fetch/$s_!ZAOe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.png 848w, https://substackcdn.com/image/fetch/$s_!ZAOe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.png 1272w, https://substackcdn.com/image/fetch/$s_!ZAOe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48dbbd32-805e-4f57-88e7-91f3820817aa_1200x65.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Step-DeepResearch, an open-source 32B model fine-tuned for deep research, is one example of this architecture.</p><p>This approach is the easiest to implement and debug. However, it can struggle with context overflow on complex assignments, offers limited parallelism and provides no role specialization.</p><p>It is best suited to focused research tasks with limited scope.</p><h4><strong>Approach 2: Multi-agent with specialized roles</strong></h4><p>The second approach assigns each phase of the research loop to a separate agent. Each agent receives its own prompt, tools and context window, then passes structured output to the next stage.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!08Kr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.png 424w, https://substackcdn.com/image/fetch/$s_!08Kr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.png 848w, https://substackcdn.com/image/fetch/$s_!08Kr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.png 1272w, https://substackcdn.com/image/fetch/$s_!08Kr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!08Kr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.png" width="1200" height="121" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:121,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34385,&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.agentengineering.co/i/222673156?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.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_!08Kr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.png 424w, https://substackcdn.com/image/fetch/$s_!08Kr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.png 848w, https://substackcdn.com/image/fetch/$s_!08Kr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.png 1272w, https://substackcdn.com/image/fetch/$s_!08Kr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2b83a2-7faf-4715-b8b9-a828e8758690_1200x121.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Dexter is one example. It uses four agents&#8212;planning, action, validation and answer generation&#8212;alongside routing that directs requests to the appropriate data source.</p><p>The advantage is a clean separation of responsibilities. Context remains isolated, and failures are easier to trace to a particular stage. The trade-off is higher token usage and additional coordination overhead.</p><p>This approach suits comprehensive analysis where quality matters more than minimizing cost.</p><h4><strong>Approach 3: Deep orchestrator with MCP</strong></h4><p>The third approach uses a central orchestrator to manage a dependency graph and execute tasks through standardized Model Context Protocol servers.</p><p>The orchestrator plans upfront, verifies the output of each step and replans only when something fails.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hdy7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hdy7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png 424w, https://substackcdn.com/image/fetch/$s_!Hdy7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png 848w, https://substackcdn.com/image/fetch/$s_!Hdy7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png 1272w, https://substackcdn.com/image/fetch/$s_!Hdy7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hdy7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png" width="1456" height="396" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:396,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:243487,&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.agentengineering.co/i/222673156?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.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_!Hdy7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png 424w, https://substackcdn.com/image/fetch/$s_!Hdy7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png 848w, https://substackcdn.com/image/fetch/$s_!Hdy7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png 1272w, https://substackcdn.com/image/fetch/$s_!Hdy7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd54c89d9-de0c-4527-adf0-825b44911ad7_4036x1098.png 1456w" sizes="auto, 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>The AI Alliance Deep Research Agent for Finance, built with <code>mcp-agent</code>, follows this pattern. It combines upfront planning, a task dependency graph and deterministic code-based checks.</p><p>One of the project&#8217;s key findings was that deterministic validation performed more reliably than asking an LLM to verify factual claims. If a number must match, a schema must validate or a required field must exist, code can often check it more consistently than another model call.</p><p>The MCP approach allows compatible tools to be added through a standardized interface and has proved suitable for production use. Its main cost is the additional infrastructure required to configure and operate it.</p><p>It is best suited to systems where reliability, traceability and standardized tool access matter.</p><h3><strong>Which approach should you choose?</strong></h3><p>For learning and prototyping, begin with a single-agent ReAct loop. It exposes the mechanics without requiring a large supporting system.</p><p>When the research becomes broader, the context grows or the cost of a wrong answer increases, specialized agents provide clearer boundaries and stronger validation.</p><p>For production systems that depend on several tools, require traceable execution or need deterministic checks, an orchestrator and task graph offer the strongest foundation.</p><p>The architectures differ, but the underlying discipline does not: plan the work, retrieve the evidence, validate what came back and synthesize only what survives those checks.</p><div class="callout-block" data-callout="true"><p>This issue grew out of a chapter in <em>Building AI Agents for Finance</em> by <a href="https://www.linkedin.com/in/hanane-ai-agent/">Hanane Dupouy</a> and <a href="https://www.linkedin.com/in/elmofatiche/">Fayssal El Mofatiche</a>. I adapted the authors&#8217; explanation for a broader Agentic Engineering audience, but the four-phase loop and architectural thinking you&#8217;ve just read began with their work.</p><p>I&#8217;m linking to the book because useful ideas deserve a clear path back to the people who developed them, and because some of you may want to continue into the detailed financial examples and Python implementations that could not fit here.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.amazon.com/Building-Agents-Finance-financial-architectures/dp/1837022291/&quot;,&quot;text&quot;:&quot;Explore the book&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.amazon.com/Building-Agents-Finance-financial-architectures/dp/1837022291/"><span>Explore the book</span></a></p></div><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fnOb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 424w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 848w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 1272w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!fnOb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png" width="1456" height="217" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:217,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:731802,&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.agentengineering.co/i/221738390?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb4f5a-d708-4210-8acd-d7cad3c930aa_2131x738.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_!fnOb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 424w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 848w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 1272w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div>]]></content:encoded></item><item><title><![CDATA[🎙️Episode 6: Your agent should forget more]]></title><description><![CDATA[Oracle&#8217;s Nacho Mart&#237;nez Rinc&#243;n on context rot, memory poisoning and why storing everything is not memory]]></description><link>https://newsletter.agentengineering.co/p/episode-6-your-agent-should-forget</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/episode-6-your-agent-should-forget</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Tue, 27 Oct 2026 14:37:33 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/221738390/e89f2e3b2e076e81d6d58600f496f73c.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>There is a tempting answer to the agent-memory problem: save everything.</p><p>Keep every message, tool call, decision and error. Embed the lot. Trust that the right fragment will return when the agent needs it.</p><p>Nacho Mart&#237;nez Rinc&#243;n&#8217;s objection is wonderfully direct:</p><blockquote><p>&#8220;Storing everything is not memory.&#8221;</p></blockquote><p>Memory, he argues, begins when a system decides what to keep, what to revise and what it can safely forget.</p><p>For our first live episode of the <em>Agentic Engineering</em> podcast, I spoke with <a href="https://www.linkedin.com/in/jasperan/">Nacho</a>, an AI Engineer and Developer Advocate at Oracle and co-instructor of DeepLearning.AI courses on agent memory and adaptive agents. We began with a simple question: <em>what should an agent remember?</em></p><p>The audience made the question much harder.</p><p><em>Before we dive in, a quick word from PlayerZero. </em></p><div><hr></div><div class="callout-block" data-callout="true"><h3 style="text-align: center;"><strong>Before you add another agent, give them all the same context</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.vpdae.com/redirect/3wlaphwalbmxtyatx2zhx9pe123" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OR0r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 424w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 848w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 1272w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!OR0r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png" width="600" height="146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:146,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16052,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.vpdae.com/redirect/3wlaphwalbmxtyatx2zhx9pe123&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.agentengineering.co/i/221505943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8907c41a-cc1b-474b-bc17-1e4f56bd1e28_600x400.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_!OR0r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 424w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 848w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 1272w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 1456w" sizes="auto, 100vw" loading="lazy" fetchpriority="high"></picture><div></div></div></a></figure></div><h5 style="text-align: center;"><strong>PlayerZero is the AI orchestration and context platform for engineering teams</strong></h5><p>Code isn&#8217;t the bottleneck anymore. Context and review are. Every agent your team adds starts from its own partial picture, and your senior engineers end up filling the gaps by hand.</p><p>PlayerZero builds one engineering world model from your code, tickets, and telemetry, then orchestrates agents across product, engineering, QA, support, and SRE on top of it. Work moves between teams with full context attached. When an agent reaches the edge of what it should decide, it pulls in the right person with the investigation already done. That decision goes back into the model, so the next agent inherits it.</p><p>Key Data doubled its release velocity. Cayuse catches 90% of issues before production.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.vpdae.com/redirect/3wlaphwalbmxtyatx2zhx9pe123&quot;,&quot;text&quot;:&quot;See how it works&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.vpdae.com/redirect/3wlaphwalbmxtyatx2zhx9pe123"><span>See how it works</span></a></p></div><div><hr></div><h3>A larger context window does not solve the problem</h3><p>An agent&#8217;s working context is useful during a task. It holds the conversation, the files being examined, and the information needed for the next decision.</p><p>But allowing that context to grow indefinitely eventually works against the agent. Important instructions begin competing with old messages, irrelevant details and earlier attempts. Nacho calls this <strong>context rot</strong>: the system technically has more information, yet becomes less capable of using it well.</p><p>Long-term memory should not become an overflow cupboard for everything that no longer fits in the context window.</p><p>Most of what happens during a task should disappear with it. The useful part is whatever could change a future decision.</p><h3>Remember the lesson, not the entire conversation</h3><p>One of the most practical ideas from the conversation was to turn completed work into a reusable lesson.</p><p>Suppose an agent encounters an error, investigates it and eventually finds a fix. Saving the full exchange leaves the next agent to reconstruct the experience from hundreds of messages.</p><p>A better memory might contain only:</p><ul><li><p>the problem it encountered</p></li><li><p>the error that exposed it</p></li><li><p>the action that resolved it</p></li></ul><p>Those traces can then be consolidated into a skill the agent retrieves when it meets a similar problem again.</p><p>The important distinction is that the agent is not replaying its past. It is carrying forward what the past taught it.</p><p>Nacho also recommends waiting until a task has finished before creating most durable memories. Only then can the system distinguish a temporary detail from a lesson worth keeping. The obvious exception is a dangerous failure that needs an immediate &#8220;never do that again&#8221; rule.</p><h3>Memory creates a new attack surface</h3><p>The discussion became more uncomfortable when we reached memory poisoning.</p><p>An instruction that once disappeared at the end of a session can now survive for weeks. A compromised skill file, malicious update, or false memory may quietly influence decisions long after the original interaction has been forgotten by the user.</p><p>Nacho explains why memory systems need provenance, version histories, and checks that reveal when a trusted file has changed. The system must remember&#8212;but it must also be able to show where that memory came from and what has happened to it since.</p><p>The live audience took us further into enterprise memory architectures, decay strategies, shared memory between agents, and whether these systems can be built without deep coding expertise.</p><p>Watch the full conversation for Nacho&#8217;s practical (and provocative) answer to the question of what an agent should carry into its next session.</p><div class="callout-block" data-callout="true"><p style="text-align: center;">If you want to take these ideas into implementation, Nacho will lead our <strong><a href="https://agentengineering.co/events/build-memory-aware-agents">Build Memory-Aware AI Agents</a></strong> workshop on 21 November.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://luma.com/agentic-memory?utm_source=agenticeng&quot;,&quot;text&quot;:&quot;Register here&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://luma.com/agentic-memory?utm_source=agenticeng"><span>Register here</span></a></p></div><p>I&#8217;ll be back on Thursday. Until then, keep building!</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fnOb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 424w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 848w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 1272w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!fnOb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png" width="2050" height="306" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:306,&quot;width&quot;:2050,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:731802,&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.agentengineering.co/i/221738390?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb4f5a-d708-4210-8acd-d7cad3c930aa_2131x738.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_!fnOb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 424w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 848w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 1272w, https://substackcdn.com/image/fetch/$s_!fnOb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3e033-39cd-4965-93cc-ca784db4c370_2050x306.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[#10: Every agent framework comes with a tax]]></title><description><![CDATA[10 popular options compared by what they make easier and what your team will be left to deal with]]></description><link>https://newsletter.agentengineering.co/p/10-every-agent-framework-comes-with</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/10-every-agent-framework-comes-with</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Thu, 22 Oct 2026 14:57:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a33da4e0-2634-490b-9130-4405559d4856_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p>I have to admit, typing <strong>#10</strong> into this title felt good. After a few weeks of series, webinars and worthwhile detours, we&#8217;re back to our usual issues. I hadn&#8217;t realised how much I&#8217;d missed seeing the issue number in its usual place.</p></div><p>This week&#8217;s issue began with a framework survey from a <a href="https://www.amazon.com/Building-Agents-Finance-financial-architectures/dp/1837022291/ref=sr_1_1?crid=16PDSRTBIAU0B&amp;dib=eyJ2IjoiMSJ9.cplntFUMGmpGwHzKkS_kvCPIUzpm2IMsCJcOeS9LN1ae6ID-Q99rATH6iuHLKliIvVTbXuRttXYA2_boKLzfdMxKGsbQvGGgfGfcJW-Dp01De7Usofzoy96br4h8gcdoL0_MSWhwe8zwsEX9VPTY4QVdxwIp0pDGnm4MGmsaJcC_42AbDzV4G0mZw5UUDrQTnJTk7w_aI08VBujkJPtFuTPcALHhGkum6Ez2PLPecT4.E6mmsKOYz4fMnaZeTvWmYP3Mt71koEpmdmCAMup4G7g&amp;dib_tag=se&amp;keywords=Building+AI+Agents+for+Finance&amp;qid=1792598165&amp;sprefix=building+ai+agents+for+finance%2Caps%2C296&amp;sr=8-1">Packt book on financial agents</a>. But as I worked through it, the comparison felt useful beyond finance. The same decisions (how much orchestration you need, where your data lives, how outputs are validated, and how much control you are willing to hand to a platform) appear in almost every agent project.</p><p>So I&#8217;ve condensed the survey into a practical map of ten frameworks.</p><p>The aim is not to leave you knowing all ten frameworks inside out. It is to help you narrow the field and understand which trade-offs matter for your work. Start with the frameworks already on your shortlist, then use the comparisons to see what each would give you&#8212;and what your team would have to maintain.</p><p><em>Before we compare the frameworks, a quick word from PlayerZero. The frameworks we discuss in this issue shape how agents are built and orchestrated. But PlayerZero addresses another part of the stack, giving those agents a shared, current view of your code, tickets, and telemetry.</em></p><div><hr></div><div class="callout-block" data-callout="true"><h3 style="text-align: center;"><strong>Before you add another agent, give them all the same context</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.vpdae.com/redirect/3wlaphwalbmxtyatx2zhx9pe123" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OR0r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 424w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 848w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 1272w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OR0r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png" width="600" height="146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:146,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16052,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.vpdae.com/redirect/3wlaphwalbmxtyatx2zhx9pe123&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.agentengineering.co/i/221505943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8907c41a-cc1b-474b-bc17-1e4f56bd1e28_600x400.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_!OR0r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 424w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 848w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 1272w, https://substackcdn.com/image/fetch/$s_!OR0r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F907bd9ef-5c41-4c51-8879-69e75fe7e1d3_600x146.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h5 style="text-align: center;"><strong>PlayerZero is the AI orchestration and context platform for engineering teams</strong></h5><p>Code isn&#8217;t the bottleneck anymore. Context and review are. Every agent your team adds starts from its own partial picture, and your senior engineers end up filling the gaps by hand.</p><p>PlayerZero builds one engineering world model from your code, tickets, and telemetry, then orchestrates agents across product, engineering, QA, support, and SRE on top of it. Work moves between teams with full context attached. When an agent reaches the edge of what it should decide, it pulls in the right person with the investigation already done. That decision goes back into the model, so the next agent inherits it.</p><p>Key Data doubled its release velocity. Cayuse catches 90% of issues before production.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.vpdae.com/redirect/3wlaphwalbmxtyatx2zhx9pe123&quot;,&quot;text&quot;:&quot;See how it works&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.vpdae.com/redirect/3wlaphwalbmxtyatx2zhx9pe123"><span>See how it works</span></a></p></div><div><hr></div><h3><strong>LangChain/LangGraph: Modular orchestration and RAG</strong></h3><p>LangChain is arguably the most widely adopted open-source framework for building LLM-powered applications. It provides modular abstractions for prompts, tools, memory and chains of reasoning. Over time, it has grown into an ecosystem that supports RAG, tool integration and multi-agent orchestration.</p><p>LangGraph, a companion project, extends LangChain by introducing graph-based agent workflows. Instead of linear prompt chains, LangGraph allows for branching, looping and controlled execution graphs, making it a highly customisable and powerful way to design complex agent systems.</p><ul><li><p><strong>Strengths:</strong> Combines broad tool and data integrations with RAG and flexible graph-based orchestration. It supports branching, persistent state and human approval points for complex workflows.</p></li><li><p><strong>Limitations:</strong> Its flexibility brings complexity, performance overhead and a steep learning curve. Enterprise observability, compliance and deployment require additional tooling, while fast API changes can leave older guidance behind.</p></li></ul><h3><strong>Google ADK</strong></h3><p>The Google Agent Development Kit is Google&#8217;s framework for developing and deploying AI agents. It is optimised for its managed Agent Engine runtime and the Gemini family of models, but designed to be model-agnostic. Unlike lightweight open-source tools or experimental research frameworks, ADK is positioned as an enterprise-grade platform for organisations that need production-scale agent systems with security controls.</p><ul><li><p><strong>Strengths:</strong> Combines reasoning agents, deterministic workflows and custom Python logic within a graph-based runtime. Native Google Cloud integration adds enterprise scaling, monitoring and access controls.</p></li><li><p><strong>Limitations:</strong> ADK is powerful but heavyweight, with a smaller community ecosystem and considerable infrastructural lock-in once workflows depend on Google Cloud services.</p></li></ul><h3><strong>CrewAI: Role-based multi-agent collaboration</strong></h3><p>CrewAI is an open-source Python framework designed for building teams of collaborating agents. Unlike frameworks that emphasise orchestration pipelines, CrewAI is built around the metaphor of a crew of specialists working towards a common goal.</p><p>Each agent has a role, a goal, a backstory that defines how it behaves and access to tools such as APIs, code execution and retrieval functions.</p><ul><li><p><strong>Strengths:</strong> Organises agents around recognisable roles, goals and delegation patterns. It supports sequential, parallel and hybrid workflows that resemble committees or specialist teams.</p></li><li><p><strong>Limitations:</strong> The open-source core requires additional tooling for production observability, validation and governance, and may struggle at enterprise scale.</p></li></ul><h3><strong>AutoGen: Conversational orchestration</strong></h3><p>AutoGen, developed by Microsoft, is an open-source framework designed for multi-agent conversational systems. Its core philosophy is that agents should interact through dialogue, both with one another and with humans, to solve complex tasks collaboratively.</p><p>Instead of hard-coded pipelines, AutoGen uses natural-language conversations as the control mechanism. Agents communicate through messages, text or function calls, making workflows more flexible and interpretable.</p><ul><li><p><strong>Strengths:</strong> Coordinates specialist agents through recorded conversations, with support for tools, code execution and human participation. This makes collaborative reasoning transparent and easier to inspect.</p></li><li><p><strong>Limitations:</strong> Conversational orchestration can be verbose, slow and expensive to scale. AutoGen is also now in maintenance mode, with Microsoft directing new projects towards Microsoft Agent Framework.</p></li></ul><h3><strong>OpenAI Agents SDK</strong></h3><p>The OpenAI Agents SDK is OpenAI&#8217;s production-ready framework for building agent-based systems. Unlike experimental frameworks or open-source prototypes, the SDK is designed for enterprise deployment.</p><ul><li><p><strong>Strengths:</strong> Provides handoffs, session memory, parallel guardrails, hosted tools and built-in tracing. These production controls make multi-agent workflows easier to operate and audit.</p></li><li><p><strong>Limitations:</strong> Its strongest tracing and hosted-tool capabilities remain tied to OpenAI, while the framework offers less freedom than LangGraph and may become expensive at scale.</p></li></ul><h3><strong>PydanticAI: Type-safe agents for structured data</strong></h3><p>PydanticAI&#8212;stable at 1.0 since September 2025, with a substantially redesigned 2.0 released in June 2026&#8212;comes from the creators of Pydantic, the widely used Python library for data validation. It brings strict typing, schema validation and reliable structured outputs into the world of AI agents.</p><ul><li><p><strong>Strengths:</strong> Enforces typed schemas, validates model outputs and retries malformed responses automatically. It integrates easily with Python APIs, data pipelines and larger orchestration frameworks.</p></li><li><p><strong>Limitations:</strong> PydanticAI validates output structure, not the quality of the model&#8217;s reasoning, and still needs another framework for complex orchestration.</p></li></ul><h3><strong>Mistral AI agents: Lightweight, open-weight performance</strong></h3><p>The philosophy behind Mistral&#8217;s agent framework is deliberately lean and open-weight-first, in contrast to enterprise-heavy offerings such as Google ADK or the OpenAI Agents SDK. It aims to give developers fast, cost-effective and flexible agent infrastructure without vendor lock-in.</p><ul><li><p><strong>Strengths:</strong> Offers efficient open-weight models alongside hosted agents with retrieval, code execution, memory and handoffs. Local deployment supports cost control and data sovereignty.</p></li><li><p><strong>Limitations:</strong> Its agent ecosystem is younger and offers fewer built-in governance and observability features, often leaving orchestration to third-party frameworks. Smaller models may also sacrifice reasoning quality for speed.</p></li></ul><h3><strong>smolagents: Minimalist code-first agents</strong></h3><p>smolagents is Hugging Face&#8217;s lightweight, code-first agent framework, designed around a simple philosophy: agents should write and execute code to solve tasks. Unlike orchestration-heavy frameworks or enterprise platforms, smolagents makes every agent step a readable, runnable Python snippet.</p><ul><li><p><strong>Strengths:</strong> Uses visible, executable Python as the agent&#8217;s primary way of solving tasks. Its lightweight, model-agnostic design makes agent behaviour easier to understand and prototype.</p></li><li><p><strong>Limitations:</strong> Designed primarily for learning and prototyping, it has basic orchestration, fewer integrations and limited enterprise governance. Any production use involving generated code requires careful sandboxing.</p></li></ul><h3><strong>Claude Agent SDK: Safe-by-design agentic workflows</strong></h3><p>Claude, Anthropic&#8217;s family of models, is widely recognised for its safety-first design philosophy. The Claude Agent SDK&#8212;renamed from the Claude Code SDK in September 2025&#8212;is the agent harness that powers Claude Code: a production-hardened loop for gathering context, taking action and verifying results, exposed so developers can build their own agents on the same engine.</p><ul><li><p><strong>Strengths:</strong> Combines sessions, subagents, hooks, Agent Skills and MCP connectivity with safety-oriented controls. Computer Use extends automation to systems that lack APIs.</p></li><li><p><strong>Limitations:</strong> It offers less orchestration flexibility than LangGraph or CrewAI and is tied to Claude models. Its community focuses more on MCP and Skills than on orchestration recipes.</p></li></ul><h3><strong>LlamaIndex: Data-centric agents</strong></h3><p>LlamaIndex began as GPT Index, a framework for connecting large language models to external data sources. While best known for its RAG capabilities, it has since evolved into a data-centric agent framework with support for multiple agent types, introspection and orchestration.</p><ul><li><p><strong>Strengths:</strong> Grounds agents in documents, databases, APIs and knowledge graphs. Its retrieval-focused agents, memory and event-driven workflows make it a strong data layer for data-heavy applications.</p></li><li><p><strong>Limitations:</strong> LlamaIndex is stronger at data grounding than orchestration and requires additional tooling for enterprise observability. Advanced capabilities such as knowledge graphs also demand more setup.</p></li></ul><p>If you&#8217;re weighing these options for a real project, I hope the view below makes the trade-offs a little easier to hold in your head.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hcDT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hcDT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png 424w, https://substackcdn.com/image/fetch/$s_!hcDT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png 848w, https://substackcdn.com/image/fetch/$s_!hcDT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png 1272w, https://substackcdn.com/image/fetch/$s_!hcDT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!hcDT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png" width="4160" height="2133" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2133,&quot;width&quot;:4160,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:450807,&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.agentengineering.co/i/221505943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab52ab30-bbde-402f-acf8-3c6f62ed988b_4800x2133.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_!hcDT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png 424w, https://substackcdn.com/image/fetch/$s_!hcDT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png 848w, https://substackcdn.com/image/fetch/$s_!hcDT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png 1272w, https://substackcdn.com/image/fetch/$s_!hcDT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d7f964-a97b-4e8f-9a17-bac136317e5a_4160x2133.png 1456w" sizes="auto, 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>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[🎙️ Episode 5: Before you add another agent, fix the context engine]]></title><description><![CDATA[Watch now (54 mins) | Denis Rothman on why production AI needs governed context, hard controls and a human who can still say no]]></description><link>https://newsletter.agentengineering.co/p/before-you-add-another-agent-fix</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/before-you-add-another-agent-fix</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Tue, 20 Oct 2026 16:17:33 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/221099716/80ddb7ffa5c3d76868bbef5e59c3c948.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Context engineering is often described as giving an AI system the right information at the right time.</p><p><a href="https://www.linkedin.com/in/denis-rothman/?isSelfProfile=false">Denis Rothman</a> thinks that definition stops being useful the moment an agent enters a real business.</p><p>Once an agent can retrieve private data, remember previous interactions, and take action, the question is not about whether it has enough context. It is whether it should have access to that context at all&#8212;and who will be accountable for what happens next.</p><p>For this episode of the <em>Agentic Engineering</em> podcast, I spoke with Denis, an AI systems architect, author and someone I&#8217;ve had the pleasure (and occasional pain :P) of editing across several books. He has spent more than four decades working with AI and enterprise systems, which means he is not especially impressed by ideas that were solved by database administrators 25 years ago and have now returned wearing an agentic label.</p><h2>The context engine should not have to run the company</h2><p>Denis&#8217;s central argument is that much of the work must happen before information reaches the agent.</p><p>Company data should already have an owner. Access levels should already be clear. Policies should be current, and unreliable information should be marked as such. The agent should not be expected to work out which version of reality the organisation meant to give it.</p><p>He describes a production system handling hundreds of thousands of tasks each day. The difficult work was not adding an LLM. It was mapping the approval hierarchy, cleaning the incoming data and deciding which actions were allowed to proceed.</p><p>That required months of workshops with people across the business. The AI was only one component.</p><div class="callout-block" data-callout="true"><p style="text-align: center;"><strong>If Denis&#8217;s insistence on making agent systems measurable over impressive resonates with you, he&#8217;s taking that thinking into code on October 25.</strong></p><p style="text-align: center;"><strong>In </strong><em><strong>Graph Engineering for AI Agents</strong></em><strong>, he will lead 5 hands-on labs covering graph-based agent workflows, reliability, governance gates, and GraphRAG retrieval with provenance. It&#8217;s designed for engineers trying to work out whether an agent plan is safe and worth the cost.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://agentengineering.co/events/graph-engineering-ai-agents&quot;,&quot;text&quot;:&quot;Save your spot&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://agentengineering.co/events/graph-engineering-ai-agents"><span>Save your spot</span></a></p></div><h2>A prompt is not a permission system</h2><p>We now place an extraordinary amount of faith in instructions such as &#8220;do not reveal sensitive information&#8221; or &#8220;ask before taking action.&#8221;</p><p>But those instructions are still being interpreted by the same model we are trying to control.</p><p>Denis argues that the real limits should sit outside the prompt. The retrieval layer should refuse data the user cannot access. The system should block tasks that are not authorised. Budgets should have hard limits.</p><p>Then comes his most radical piece of agent architecture: a human being.</p><p>His preferred structure combines the agent doing the work, another agent pushing back on it and an experienced person checking what matters. Removing experts in the name of automation, he warns, often means removing the people most capable of noticing when the system is quietly wrong.</p><h2>Eventually, the CFO enters the room</h2><p>More controls create more cost. Denis&#8217;s answer is not to remove the controls. It is to ask whether the system still earns its place.</p><p>Track the tokens. Measure the outcome. Build a dashboard. If the agent costs more than the value it creates, stop the project.</p><p>&#8220;We&#8217;ve been living in AI Disneyland for a few years,&#8221; Denis says. &#8220;But it&#8217;s over.&#8221;</p><p>It sounds ominous&#8212;Denis hears that from me several times during the episode&#8212;but his argument is ultimately practical. The way to build ambitious AI systems is not to believe in them more. It is to give them clean data, hard boundaries and people experienced enough to say no.</p><p>Watch the full conversation for Denis&#8217;s wonderfully unsentimental take on agents, context governance and what happens when the demos finally meet the balance sheet.</p><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation on Thursday.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[#9: AI harness for software engineering teams]]></title><description><![CDATA[Beating the Cognitive Attention Deficit]]></description><link>https://newsletter.agentengineering.co/p/ai-harness-for-software-engineering</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/ai-harness-for-software-engineering</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Thu, 15 Oct 2026 16:08:03 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7380e9d3-6d05-48ef-9496-48abc8db5351_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4><code>Editor&#8217;s note</code></h4><p>As AI makes code easier to produce, a different constraint is becoming harder to ignore: the human attention required to specify, review and trust it.</p><p>In this issue, <a href="https://www.linkedin.com/in/adriangonzalezsanchez/">Adri&#225;n Gonz&#225;lez S&#225;nchez</a>, Technical Product Manager at Microsoft AI and author of Packt&#8217;s <em><a href="https://www.packtpub.com/en-us/product/generative-ai-for-leaders-playbook-9781806388493">Generative AI for Leaders Playbook</a></em>, explains how an AI harness can help teams protect that attention. </p><p>But first, here&#8217;s a practical 30-minute session from Infisical on giving agents access without exposing credentials.</p><div><hr></div><div class="callout-block" data-callout="true"><p style="text-align: center;"><strong>Agent Vault in Action</strong></p><p style="text-align: center;"><strong>Give Agents Access, Not Secrets</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.vpdae.com/redirect/39ol0anr9mudl5b8mwr0whvmpfc" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oBq_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891abd5a-36c9-41f8-9dfb-1c51557c119e_1199x358.png 424w, https://substackcdn.com/image/fetch/$s_!oBq_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891abd5a-36c9-41f8-9dfb-1c51557c119e_1199x358.png 848w, https://substackcdn.com/image/fetch/$s_!oBq_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891abd5a-36c9-41f8-9dfb-1c51557c119e_1199x358.png 1272w, https://substackcdn.com/image/fetch/$s_!oBq_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891abd5a-36c9-41f8-9dfb-1c51557c119e_1199x358.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oBq_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891abd5a-36c9-41f8-9dfb-1c51557c119e_1199x358.png" width="1199" height="358" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/891abd5a-36c9-41f8-9dfb-1c51557c119e_1199x358.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:358,&quot;width&quot;:1199,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76498,&quot;alt&quot;:&quot;Infisical banner&quot;,&quot;title&quot;:&quot;Infisical banner&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.vpdae.com/redirect/39ol0anr9mudl5b8mwr0whvmpfc&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.agentengineering.co/i/214857157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff6e44a-725b-4bc8-a168-17601ec2e802_1200x628.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Infisical banner" title="Infisical banner" srcset="https://substackcdn.com/image/fetch/$s_!oBq_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891abd5a-36c9-41f8-9dfb-1c51557c119e_1199x358.png 424w, https://substackcdn.com/image/fetch/$s_!oBq_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891abd5a-36c9-41f8-9dfb-1c51557c119e_1199x358.png 848w, https://substackcdn.com/image/fetch/$s_!oBq_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891abd5a-36c9-41f8-9dfb-1c51557c119e_1199x358.png 1272w, https://substackcdn.com/image/fetch/$s_!oBq_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891abd5a-36c9-41f8-9dfb-1c51557c119e_1199x358.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 style="text-align: justify;">Your agent needs credentials to do its job, but a long-lived key stored in its config can end up in logs or get pulled out through prompt injection.</p><p>Join Infisical on October 21 at 1 PM ET for a 30-minute live demo of Agent Vault. You&#8217;ll see how agents can call APIs without ever seeing the underlying credentials, plus how to limit which services they can reach and cut off their access automatically when a session expires.</p><p>We&#8217;ll also show how to add these controls to Claude Code, Codex, or your own agent without code changes, and how to trace a request back to the agent that made it when you need to investigate.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.vpdae.com/redirect/39ol0anr9mudl5b8mwr0whvmpfc&quot;,&quot;text&quot;:&quot;Save your spot&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.vpdae.com/redirect/39ol0anr9mudl5b8mwr0whvmpfc"><span>Save your spot</span></a></p></div><div><hr></div><p style="text-align: justify;">I think for the last few years, we have been optimizing the wrong scarcity. AI adoption within software engineering is clearly settled: roughly 90% of developers use AI daily per <a href="https://cloud.google.com/blog/products/ai-machine-learning/announcing-the-2025-dora-report">Google&#8217;s 2025 DORA report</a>, and <a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/">GitHub merges 43 million pull requests a month</a>, up 23% year over year. Regardless of the source, it is clear that code is no longer scarce or even expensive.</p><p style="text-align: justify;">But delivery tells another story. The DORA report finds that AI amplifies whatever organizational system (e.g., team composition, collaboration workflows, assets) it lands in rather than fixing it. At the individual level, <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">METR&#8217;s randomized trial</a> found experienced developers 19% slower with AI on real tasks, while believing they were 20% faster. And for some strange reason, the industry has prioritized <strong>tokenmaxxing</strong> and individual per-developer &#8220;productivity&#8221; (vanity) metrics such as number of PRs enabled by AI, rather than focusing on the overall productivity of the teams, and the actual outcome and additional value generated thanks to AI.</p><p style="text-align: justify;">So we can say that the constraint has moved. It is no longer about generating code; it is the processes and collaboration workflows within software engineering teams, and the human attention needed to specify, verify, and decide. And in these times of hyperactivity and multitasking, that attention is limited and is being spent pretty badly. I call this the <strong>cognitive attention deficit</strong>: the growing gap between what our AI systems produce and what our software teams can responsibly attend to.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iLup!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iLup!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!iLup!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!iLup!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!iLup!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!iLup!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2296690,&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.agentengineering.co/i/214857157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.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_!iLup!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!iLup!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!iLup!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!iLup!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dad4b0-2851-45ce-8740-275bcf9a1991_1774x887.png 1456w" sizes="auto, 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>The deficit has multiple answers, but from an engineering perspective, the emerging solution can be what we call the <strong>AI harness</strong>.</p><h2>What a harness actually is (in the context of development teams)</h2><p style="text-align: justify;">The metaphor is exact: a harness does not make the horse stronger, but it makes its strength usable by directing force, preventing damage, letting the driver watch the road. An AI harness does the same for human attention: not a product you buy, but a set of artifacts and rules built once and reused, so judgment is spent only where judgment is required. Five components, in my experience:</p><blockquote><p><strong>Durable driving artifacts</strong></p></blockquote><p style="text-align: justify;">Intent used to be carried by people. The engineer who wrote the code remembered why. In the case of AI agents with limited memory, intent must live somewhere durable: a co-authored spec for ambiguous and higher-stakes work, executable tests for crisp logic, given-when-then scenarios for user-facing behavior, etc. So basically everything that goes beyond simple and ephemeral prompts, and that can be reviewed, reproduced, or handed to a colleague within the same team.</p><blockquote><p><strong>Machine-checkable guardrails</strong></p></blockquote><p style="text-align: justify;">Without this, &#8220;almost right&#8221; pieces sail through a tired human review at six in the evening. So here we move verification from tired humans to tireless machines: tests generated after humans define what correct means, evaluation suites, policy checks, or CI gates. Every automated check refunds attention to the questions machines cannot answer, while avoiding the trap of expecting humans to keep the review processes at the same pace as the AI-enabled development.</p><blockquote><p><strong>Engineering memory</strong></p></blockquote><p style="text-align: justify;">When work moves at machine speed, no one holds the whole picture, and decisions get generally made blind. The answer is old-fashioned: decision records, kept current, mandatory in a narrow set of sensitive places rather than aspirational everywhere. The test: if the author leaves and the chat session is gone, does the &#8220;why&#8221; survive? If not, someone pays attention twice for the same decision.</p><blockquote><p><strong>Attention gates</strong></p></blockquote><p style="text-align: justify;">Three practices, none of which cost money. First, assign a named reviewer when the work begins. An unassigned review queue is not a process; it is merely a hope that someone will take responsibility. Second, set a WIP limit for the review stage. Most teams limit the stages that were bottlenecks before AI while leaving the new constraint, human review, uncapped. And third, explicit confidence thresholds that determine when an agent should produce no output at all. An empty suggestion is cheaper than a plausible but incorrect one.</p><blockquote><p><strong>Delegation rules</strong></p></blockquote><p style="text-align: justify;">The agent harness must clearly define who has decision-making authority. Evaluate each decision using three questions: Is it reversible? What is its potential blast radius? How ambiguous is the specification? If it is reversible, contained, and clearly specified, let the agent decide and stop spending human attention on it. If it is irreversible, far-reaching, or ambiguous, assign the decision in advance to a named person. The costliest failures I have seen were caused not by bad decisions, but by decisions nobody owned.</p><p style="text-align: justify;">The traditional process protected scarce code-building capacity, so the gates sat in front of implementation. The harness protects scarce attention, so the gates move with fewer in front of the keyboard, and more around specification, verification, and decisions. Teams that keep old processes while using new AI tools tend to slow the machine and still exhaust the humans (something we are experiencing nowadays, too often); while teams with a proper AI harness run faster because attention is pre-allocated.</p><p style="text-align: justify;">There is also a wellbeing argument we should stop calling soft. Review fatigue means people approve what they would have questioned a year ago, leading even to declining confidence in their own judgment. An unmanaged attention deficit is paid in burnout. So we can say that harnesses enable sustainable pace, made structural.</p><h2>So where do we start?</h2><p style="text-align: justify;">Well, I don&#8217;t have a general answer. But if your review queue grows while releases stay flat, measure three numbers: time to first review, review duration, rework rate. They usually show where attention leaks and bottlenecks appear. Close the leakiest seam first: a WIP limit and reviewer of record if review is drowning, a real spec practice if rework climbs, decision records in your most sensitive directory if the same questions keep returning, one page of delegation rules, etc. But not all five components at once; do it progressively and keep improving your operating system and technical harness.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PpVi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PpVi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!PpVi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!PpVi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!PpVi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!PpVi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.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;:1774210,&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.agentengineering.co/i/214857157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.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_!PpVi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!PpVi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!PpVi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!PpVi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38720fd2-6285-4d1f-bceb-735ac7aaae05_1536x1024.png 1456w" sizes="auto, 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 style="text-align: justify;">And remember, every new tool and model release increases the agent's capability and, therefore, its potential impact within the harness. As a result, the value of investing in robust controls, delegation rules, and review processes compounds over time. The winning software engineering teams will not be the ones with the strongest agents; everyone will have those as they progressively become a commodity. They will be the ones who decide deliberately and in advance where their human attention goes and where AI takes care of things.</p><div class="callout-block" data-callout="true"><h4>Catch up with Adri&#225;n</h4><p>Explore Adri&#225;n&#8217;s new Packt book, <em><a href="https://www.packtpub.com/en-us/product/generative-ai-for-leaders-playbook-9781806388493">Generative AI for Leaders Playbook</a></em>, connect with him on <a href="https://www.linkedin.com/in/adriangonzalezsanchez/">LinkedIn</a>, subscribe to his <a href="https://adriangonzalezsanchez.substack.com/">Substack</a>, or take one of his <a href="https://www.deeplearning.ai/courses?q=adrian+gonzalez+sanchez">DeepLearning.AI courses</a>. He also has a new course on software engineering teamwork coming soon, which is closely connected to the ideas explored in this article.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7JEQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7JEQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!7JEQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!7JEQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!7JEQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!7JEQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.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;:1925339,&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.agentengineering.co/i/214857157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.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_!7JEQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!7JEQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!7JEQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!7JEQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2571ee3f-e4b9-49be-aef3-dfbd994e5f14_1536x1024.png 1456w" sizes="auto, 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><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Agent harness fundamentals]]></title><description><![CDATA[Watch now (52 mins) | Youssef Hosni and Luca Berton on the engineering that turns model output into work you can inspect and constrain]]></description><link>https://newsletter.agentengineering.co/p/webinar-agent-harness-fundamentals</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/webinar-agent-harness-fundamentals</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Thu, 15 Oct 2026 07:14:11 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/220349170/e93711f1e6bf88229ee17d82ddc7ff37.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p>This session grew from a question many (or all) of us have asked after an agent produces something impressive: <em>Can I trust this enough to use it?</em> <a href="https://www.linkedin.com/in/youssef-hosni-b2960b135/?isSelfProfile=false">Youssef Hosni</a> and <a href="https://www.linkedin.com/in/lucaberton/?isSelfProfile=false">Luca Berton</a> answer not with reassurance, but with the practical engineering that allows trust to be earned.</p></div><p>There is a particular moment many of us recognise when working with a coding agent. It produces something impressive, perhaps much faster than we could have written it ourselves&#8212;and then we pause.</p><p>Did it follow the repository&#8217;s conventions? Did it test the right things? What did it overlook? How much of this can we safely trust?</p><p>That pause is what this webinar is really about.</p><p>Youssef Hosni and Luca Berton show us that the answer is not simply a better model or a longer prompt. It is the engineering we build around the model: the agent harness.</p><h3>Teach the agent how you work</h3><p>Youssef begins with <strong>skills</strong>: reusable procedures that capture how you want recurring work to be done.</p><p>His demonstration uses a code-review skill that asks the agent to inspect correctness, consider edge cases, examine the relevant tests and support its findings with evidence. Instead of explaining that process again in every prompt, you teach it once and continue refining it as you learn.</p><p>He also draws an important distinction between the different parts of a harness:</p><ul><li><p>A <strong>prompt</strong> describes the task in front of you.</p></li><li><p><code>CLAUDE.md</code> or <code>AGENTS.md</code> explains how the project works.</p></li><li><p>A <strong>skill</strong> preserves a reusable procedure.</p></li><li><p>A <strong>tool</strong> allows the agent to take an action.</p></li><li><p>A <strong>subagent</strong> handles a focused piece of work in a separate context.</p></li></ul><p>It is a small shift in thinking, but a meaningful one. You are no longer hoping that the agent interprets one enormous prompt correctly. You are giving its work a structure it can return to.</p><h3>Give yourself evidence, not reassurance</h3><p>Luca takes the next step: how do you know the result is actually safe to accept?</p><p>His example starts with a subtle bug. Searching for <code>active</code> customers also returns those marked <code>inactive</code>, because the original function relies on substring matching. Claude Code fixes the implementation, but Luca does not stop at a plausible answer.</p><p>He adds a <em>hook</em> that automatically runs the unit tests whenever the agent changes a file. He then introduces a read-only <em>reviewer subagent</em>, working in a separate context, to compare the implementation against its acceptance criteria.</p><p>Finally, he adds <em>guardrails</em> that prevent the agent from touching protected files, altering its own configuration, or committing and pushing code. The agent can help with the work without quietly inheriting authority it was never meant to have.</p><p>Together, the demonstrations create a practical loop:</p><p><em>Provide context &#8594; invoke a skill &#8594; make the change &#8594; run automatic checks &#8594; review independently &#8594; enforce permissions &#8594; let a human decide.</em></p><p>What I appreciated most about this session is that it does not ask us to trust agents more blindly. It shows us how to create the conditions in which trust can be earned.</p><p>The aim, as Luca says near the end, is not simply more autonomy. It is <em>autonomy with evidence.</em></p><p>Watch the full webinar to see Youssef and Luca build each layer&#8212;and to borrow the parts that could make your own work feel a little less uncertain.</p><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Agentic Engineering now has a home beyond your inbox]]></title><description><![CDATA[Meet the new platform and the Guild community growing around it]]></description><link>https://newsletter.agentengineering.co/p/agentic-engineering-now-has-a-home</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/agentic-engineering-now-has-a-home</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Tue, 13 Oct 2026 15:37:22 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e01d499a-20ed-4552-994a-30529f4dd3ba_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>An article can explain an idea. But it cannot answer the question that occurs two days later when you try to use that idea in your own stack.</p><p>With more than 7,000 of us now reading Agentic Engineering, I wanted us to have somewhere those questions could go.</p><p>So we built the <a href="https://agentengineering.co/">Agentic Engineering platform</a>. </p><p><em>(If one of the workshops catches your eye, I&#8217;ve included a small extra discount for you further down. Continue reading!)</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Zg_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Zg_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.png 424w, https://substackcdn.com/image/fetch/$s_!3Zg_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.png 848w, https://substackcdn.com/image/fetch/$s_!3Zg_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.png 1272w, https://substackcdn.com/image/fetch/$s_!3Zg_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Zg_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.png" width="1456" height="762" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:762,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1927150,&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.agentengineering.co/i/220169653?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53289596-893e-4fd6-96c9-d31fbc2bbc5b_1456x1048.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_!3Zg_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.png 424w, https://substackcdn.com/image/fetch/$s_!3Zg_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.png 848w, https://substackcdn.com/image/fetch/$s_!3Zg_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.png 1272w, https://substackcdn.com/image/fetch/$s_!3Zg_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71144aae-d511-4c8b-ac41-5ab58c7cd0c3_1456x762.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><h3>What we&#8217;ve put there</h3><ul><li><p>Hands-on workshops and live Q&amp;As with practitioners</p></li><li><p>Working repositories, slides, and practical guidance from engineers and architects</p></li><li><p>Perspectives from experts who have built and shipped these systems</p></li></ul><p>Upcoming workshops cover <a href="https://agentengineering.co/events/agents-skills-standard-pass">agent skill engineering</a>, <a href="https://agentengineering.co/events/claude-code-bootcamp">Claude Code</a>, <a href="https://agentengineering.co/events/graph-engineering-ai-agents">graph engineering</a> and more.</p><p>Each one is designed to leave you with something concrete to try <em>and</em> people you can return to when trying it raises new questions.</p><h3>The Guild is the part I&#8217;m most excited about</h3><p>Registering for a workshop also gives you access to <a href="https://agentengineering.co/community/chat/build-memory-aware-ai-agents-e766fc">the Guild</a>, our live community chat with dedicated rooms built around each workshop. The conversation can begin before the session and continue after everyone has left the call. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vF8n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vF8n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png 424w, https://substackcdn.com/image/fetch/$s_!vF8n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png 848w, https://substackcdn.com/image/fetch/$s_!vF8n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png 1272w, https://substackcdn.com/image/fetch/$s_!vF8n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!vF8n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png" width="2962" height="1463" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1463,&quot;width&quot;:2962,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:484403,&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.agentengineering.co/i/220169653?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2367d0e0-627a-49e2-b9de-d06483e5d52a_3022x1530.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_!vF8n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png 424w, https://substackcdn.com/image/fetch/$s_!vF8n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png 848w, https://substackcdn.com/image/fetch/$s_!vF8n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png 1272w, https://substackcdn.com/image/fetch/$s_!vF8n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7b4bf5-005d-4223-8230-ebaec2c683ed_2962x1463.png 1456w" sizes="auto, 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>We created it for that exact moment when you&#8217;re back at your desk trying to make an idea work in your own system.</p><p>You shouldn&#8217;t have to figure out what comes next alone &#129730;</p><div class="callout-block" data-callout="true"><p style="text-align: center;"><strong>A small thank you for being here</strong><br>Workshop tickets are already discounted, but you can take a further <strong>20% off</strong> the current price with the code <strong><span data-color="#fc1702" style="color: rgb(252, 23, 2);">AGENTIC20</span></strong>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://agentengineering.co/events&quot;,&quot;text&quot;:&quot;Sign up today&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://agentengineering.co/events"><span>Sign up today</span></a></p></div><h3>A little further ahead</h3><p><a href="https://agentengineering.co/membership">Agentic Engineering Pro</a> will be our year-round membership. It is for people who want ongoing access to our workshops, experts, resources and community rather than signing up for one event at a time.</p><p>For Pro members, that means:</p><ul><li><p><strong>Every live workshop included</strong> with practitioner-led sessions throughout the year</p></li><li><p><strong>The full Packt library</strong> of books, videos and audiobooks available whenever you need to go deeper</p></li><li><p><strong>More direct access inside the Guild</strong> through weekly AMAs, work-in-progress reviews and a place to ask for help when you are stuck</p></li></ul><p>Pro isn&#8217;t open yet, but the waitlist is.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://agentengineering.co/&quot;,&quot;text&quot;:&quot;Explore Agentic Engineering&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://agentengineering.co/"><span>Explore Agentic Engineering</span></a></p><p>The newsletter isn&#8217;t going anywhere. We&#8217;ll continue publishing the expert articles, practical lessons, and interviews you already receive. The platform gives you a way to take those ideas further.</p><p>Have a look around. I&#8217;d love to know what you think and what you&#8217;d like us to build next.</p><p>I&#8217;ll be back in your inbox on Thursday with our regular issue.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Decoding FDE (Part 4): Run the fit check]]></title><description><![CDATA[A practical test of whether life on the deployment front line suits you or you&#8217;d be happier within sprinting distance of an IDE]]></description><link>https://newsletter.agentengineering.co/p/decoding-fde-part-4-run-the-fit-check</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/decoding-fde-part-4-run-the-fit-check</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Thu, 08 Oct 2026 15:53:49 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e9924311-8fb3-4a19-b0d7-958a8106f21b_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p>Four issues, several diagrams, and one familiar acronym later, we&#8217;ve reached the end of <em>Decoding FDE</em>.</p><p>We began by asking what a Forward Deployed Engineer actually does, separated the role from consulting and outsourcing, and traced the model from Palantir to the new generation of AI companies. For the final part, Henry turns the question back on you.</p><p>What kind of person thrives on the deployment front line, and does the way you work make FDE a good fit for you?</p><p>If you&#8217;ve been with us from <em><a href="https://open.substack.com/pub/agenticengg/p/decoding-fde-part-1-deploy-the-engineer?r=8770aj&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">Part 1</a></em>, thanks for staying deployed.</p></div><h3><strong><span>Who is suitable for FDE and who isn&#8217;t</span></strong></h3><p>Through my previous work, I&#8217;ve identified five core drivers shared by high-agency professionals: <span>curiosity, a spirit of exploration and innovation, the ability to learn independently, self-motivation, and strong hands-on competence</span>.</p><p>These qualities are the entry ticket to FDE, <span>but far from sufficient. Beyond these five drivers, the FDE role demands a set of very specific additional traits, and there are several personality profiles that are explicitly unsuited for it. I have seen too many outstanding engineers struggle to adapt after transitioning to an FDE position, and in most cases, the problem lies not in their capabilities, but in their personality and work preferences.</span></p><div class="callout-block" data-callout="true"><p><strong>Did you know Palantir FDEs don&#8217;t need a CS degree?</strong></p><p>Palantir&#8217;s current <a href="https://jobs.lever.co/palantir/dab396d4-2f14-4796-aac0-0d82883dccf0">Forward Deployed Software Engineer listing</a> asks for a strong engineering background, preferably in fields such as computer science, mathematics, software engineering, physics, or data science. The important word is preferably. A CS degree is one route into the role, not the only one.</p><p>The surprise is not that technical depth is optional. It isn&#8217;t. Palantir still expects strong programming ability, analytical judgement, and the ability to work with technical and non-technical stakeholders while the objective keeps changing. <span>The degree can vary. The engineering bar cannot.</span></p></div><h3><strong><span>Five traits suitable for FDE</span></strong></h3><blockquote><p><strong>They do not resist sales and communication.</strong> </p></blockquote><p>A typical FDE&#8217;s daily work does not involve writing code behind closed doors, but directly engaging with clients&#8217; CTOs, business leads, procurement teams, compliance officers, and IT personnel. A common scenario looks like this. When a client&#8217;s CTO interrupts you mid-demo, an FDE should not respond with, &#8220;I&#8217;ll revise it and come back next week.&#8221; Instead, they should immediately open the IDE, adjust the prompt, and rerun it right there for the client to see. Making adjustments while the client is present is the norm for FDEs.</p><blockquote><p><strong>They embrace the grey area.</strong> </p></blockquote><p>What an FDE receives is not a clear PRD, but a vague line such as, &#8220;We want to do something with AI.&#8221; The client may not even be able to articulate what they truly want, and it falls to the FDE to walk with them as they turn that nebulous expectation into something concrete. If you can only spring into action when presented with clear requirements, working as an FDE will leave you feeling anxious every day.</p><blockquote><p><strong>They have solid engineering fundamentals, without needing 10x-level excellence.</strong> </p></blockquote><p>An FDE does not have to be the person with the cleanest code or the deepest algorithmic expertise in the company. What the role requires is <em>end-to-end deliverability</em>&#8212;the ability to hack together a clickable front-end page, set up a runnable back-end service, and connect the model to business data sources. In the realm of FDE, &#8220;good enough&#8221; is not a flaw, but a virtue.</p><blockquote><p><strong>They thrive on feedback-driven refinement.</strong> </p></blockquote><p>A typical FDE&#8217;s work is full of moments when clients tell them to go back and redo something. A demo you put together today may be rejected by the business stakeholder tomorrow with, &#8220;This isn&#8217;t what I want.&#8221; A solution agreed last week may have to be completely rebuilt this week because the client has assigned a new executive to the project. <strong>T</strong>he right fit for an FDE role takes such feedback as fuel, assumes full end-to-end ownership, and never shifts blame by claiming, &#8220;The requester wasn&#8217;t clear enough.&#8221;</p><blockquote><p><strong>They are sensitive to model boundaries.</strong> </p></blockquote><p>This is the most technical and least explicit requirement. An FDE must be able to judge which tasks are suitable for an LLM, which are not, and how to design the appropriate fallback. Such sensitivity cannot be learned from academic papers. It can only be forged through repeated exposure to failure cases. As those failures accumulate, the FDE develops a kind of muscle memory for model boundaries&#8212;when to use RAG, when to rely on hard-coded rules, and when human intervention is mandatory<span>.</span></p><h3><strong><span>Who may struggle in the FDE role</span></strong></h3><blockquote><p><strong>Those who hide in code.</strong> </p></blockquote><p>An FDE spends roughly 50% of their time not writing code. Instead, they are occupied with client meetings, internal coordination, product discussions, and moving contracts forward. If your source of happiness is writing code uninterrupted for four straight hours, an FDE role will leave you in a state of chronic mental exhaustion.</p><blockquote><p><strong>Those who cannot get moving without OKRs.</strong> </p></blockquote><p>The goal of an FDE is rooted in the client, not in a performance sheet. Progress is determined jointly by the client&#8217;s project milestones, changes in model capabilities, and your own judgement of the scenario. Those accustomed to knowing what to do only after receiving their OKRs will struggle to find an anchor point.</p><blockquote><p><strong>Those who value promotion more than delivering quality work.</strong> </p></blockquote><p>FDEs can be at a disadvantage within the promotion systems of large tech companies. Metrics such as customer satisfaction, project closure, and code reuse often carry less weight in promotion reviews than lines of code written or deployment frequency. If promotion tops your list of work motivations, FDE may not be the right career path for you.</p><blockquote><p><strong>Those who resist commercial contexts.</strong> </p></blockquote><p>FDEs must understand their clients&#8217; P&amp;L, ROI, procurement processes, and compliance requirements. If you naturally resent talking about money, contracts, or business logic, working as an FDE will make you feel as though you are betraying your technical ideals<span>.</span></p><div class="callout-block" data-callout="true"><p><strong><span>The FDE self-check</span></strong></p><p><span>There are seven questions, each corresponding to a real FDE work scenario. </span></p><ol><li><p><span>Would you be willing to shift 50% of your working day away from coding and towards client meetings, messages, and calls?</span></p></li><li><p><span>When a client tells you, &#8220;This won&#8217;t work, but I can&#8217;t put my finger on why,&#8221; is your first reaction curiosity or impatience?</span></p></li><li><p><span>No one writes a PRD for you. Can you work with Claude Code to build a functioning prototype that is ready to show a client within a week?</span></p></li><li><p><span>A client has asked you to revise the same deliverable eight times. Can you maintain sound judgment instead of mechanically following every request?</span></p></li><li><p><span>When the model gives a wrong answer, is your first reaction to design a fallback or to complain that the model is no good?</span></p></li><li><p><span>Would you be willing to work on contracts, write reports, coordinate client acceptance, and align compliance terms with the legal team?</span></p></li><li><p><span>Can you accept rapid prototyping and rapid failure?</span></p></li></ol><p>If you answered &#8220;yes&#8221; to 6-7 questions, you can seriously consider applying for the FDE role. If you answered &#8220;yes&#8221; to fewer than three, you may want to think twice.</p><p>If you answered &#8220;yes&#8221; to 3-5 questions, pay closer attention to the questions you answered &#8220;no&#8221; to. They will tell you more than the final score.</p></div><p>Five traits, four warning signs, and seven self-assessment questions all boil down to a single question. <em><strong><span>Are you willing to sharpen your product sense, engineering capability, and business judgement at the same time, within the same workflow?</span></strong></em></p><h3><strong><span>FDE won&#8217;t be the last</span></strong></h3><p>FDE is one of the first clearly defined job profiles to emerge from the AI industrial revolution, with a formal title, defined salary bands, dedicated job descriptions, and validation from paying clients. It is not simply another name for a high-agency professional. It gives tangible form to the abstract ideas driving this wave of restructuring.</p><p>I think it is only the first role in the new division of labor to acquire a name. What comes next may include Forward Deployed PMs, Forward Deployed Designers, and Forward Deployed Researchers. Any role that is tightly coupled with customer scenarios and responsible for nurturing products to maturity amid ambiguity may develop its own &#8220;forward-deployed&#8221; variant.</p><p>Job titles may change, but the underlying logic remains the same. Model capabilities take the lead, Product Form plays catch-up, and job structures are redrawn around the workflow.</p><h3><strong>Three final notes</strong></h3><blockquote><p><strong>For technical professionals</strong></p></blockquote><p>FDE does not require you to be the best coder in the company, but it does require you to shift roughly half of your time from coding to client-facing work. If your answer is yes, the market window has just opened, and recruitment is accelerating across leading model companies, cloud vendors, and the in-house AI teams of major tech firms. If your answer is &#8220;no&#8221;, that is perfectly fine too. Other roles will emerge for you in this new division of labor.</p><blockquote><p><strong>For HR and OD teams</strong></p></blockquote><p>Beware of the disconnect between job titles and actual responsibilities. Your company may already have FDEs on the payroll under titles such as &#8220;Solution Expert&#8221;, &#8220;Industry Architect&#8221;, or &#8220;AI Application Engineer&#8221;. Identifying these employees, recognizing the work they already do, and giving them a career path that reflects it may be far more effective than recruiting new staff from scratch.</p><blockquote><p><strong>For managers</strong></p></blockquote><p>The FDE model is not only for external deployment. It can also be applied internally. Embedding several internal FDEs within business teams to carry the model team&#8217;s capabilities into real workflows may be far more effective than creating another AI department and holding ten more cross-team alignment meetings. Departmental silos are not dismantled by organizational design, but by a working demo.</p><p>Career transformation in the AI era is already underway, and FDE is the first signal flare. It tells us that model capabilities are advancing quickly enough to force entirely new roles into existence.</p><p>I would like to leave you with one concrete question. <em><strong>If three new positions appear on your company&#8217;s organizational chart three years from now, what do you think they will be?</strong></em></p><p>Figuring out the answer may be more valuable than reading this entire article.</p><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Decoding FDE (Part 3): Trace the deployment model]]></title><description><![CDATA[How Palantir&#8217;s playbook moved into AI companies and what China changed when it arrived]]></description><link>https://newsletter.agentengineering.co/p/decoding-fde-part-3-trace-the-deployment</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/decoding-fde-part-3-trace-the-deployment</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Thu, 01 Oct 2026 15:54:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/20418d3b-09a0-4827-a923-77f7d8c922b7_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p>In the last two weeks, we&#8217;ve established that FDE is neither consulting in AI clothing nor outsourcing with better branding. This week, Henry traces the role from Palantir into today&#8217;s AI companies, then follows it into China.</p><p><span>We picked China because it presents the same basic problem, powerful models that still have to be made useful inside real businesses, but a very different enterprise environment. That makes it a clean test of which parts of the FDE model are fundamental and which are simply American defaults.</span></p><p><span>Let&#8217;s get straight into it!</span></p></div><h3><strong><span>One origin, two FDE models</span></strong></h3><p>Many people assume OpenAI coined the term FDE. It didn&#8217;t. The role originated at Palantir, then re-emerged in a different form inside the new generation of AI companies after 2023.</p><p>Looking at the two versions side by side makes it easier to see what stayed the same&#8212;and what changed.</p><p>Let&#8217;s start with a timeline<span>.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0oBz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7690c3-042d-4644-9afa-9239043e8867_1380x473.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0oBz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7690c3-042d-4644-9afa-9239043e8867_1380x473.png 424w, https://substackcdn.com/image/fetch/$s_!0oBz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7690c3-042d-4644-9afa-9239043e8867_1380x473.png 848w, https://substackcdn.com/image/fetch/$s_!0oBz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7690c3-042d-4644-9afa-9239043e8867_1380x473.png 1272w, https://substackcdn.com/image/fetch/$s_!0oBz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7690c3-042d-4644-9afa-9239043e8867_1380x473.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0oBz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7690c3-042d-4644-9afa-9239043e8867_1380x473.png" width="1380" height="473" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da7690c3-042d-4644-9afa-9239043e8867_1380x473.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:473,&quot;width&quot;:1380,&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_!0oBz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7690c3-042d-4644-9afa-9239043e8867_1380x473.png 424w, https://substackcdn.com/image/fetch/$s_!0oBz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7690c3-042d-4644-9afa-9239043e8867_1380x473.png 848w, https://substackcdn.com/image/fetch/$s_!0oBz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7690c3-042d-4644-9afa-9239043e8867_1380x473.png 1272w, https://substackcdn.com/image/fetch/$s_!0oBz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7690c3-042d-4644-9afa-9239043e8867_1380x473.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>The FDE role began at Palantir, whose early intelligence clients could not simply send a neat list of requirements back to headquarters. Palantir embedded engineers alongside analysts and operational teams so they could see the problem first-hand, build inside the customer environment, and carry what they learned back into the product. By 2009, the same model had entered Palantir&#8217;s commercial work.</p><p>The history can be reduced to one operating decision. Instead of asking the customer to translate a messy operational problem into a software requirement, put an engineer close enough to solve it with them.</p><p>After ChatGPT was released, AI companies encountered the same problem. Access to a powerful model did not give customers a working Product Form. OpenAI, Anthropic, Cohere, Scale AI, and others began building FDE teams to carry use cases from the first demo into production.</p><p>The relationship remained the same. Customers were buying more than software. They were buying <em><strong>tools combined with engineers capable of solving their problems</strong></em>.</p><p>What changed was the work itself. Palantir&#8217;s FDEs focused heavily on data integration, ontology modelling, and permission governance. The new generation works more with prompt design, agent orchestration, tool calling, evaluations, and workflow integration. The former resembles an advanced systems integrator. The latter looks more like a product engineer working beyond the company boundary.</p><p>After 2023, Palantir&#8217;s original playbook found a new home inside AI companies. But that convergence has largely been American. In China, FDE has followed a different route.</p><div><hr></div><p style="text-align: center;"><em>For less hype and more engineering, pull up a chair.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentengineering.co/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.agentengineering.co/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h3><strong>FDE in China: From solution architect to AI implementation engineer</strong></h3><p>The term FDE has not been around for long in China, but the work itself did not emerge out of thin air. To understand how the role is developing there, we must first recognise its two local foundations, then identify the three ways in which it differs from the US model<span>.</span></p><h4><strong>Two local foundations</strong></h4><p>The first foundation was <em><strong>the solution architect at a cloud vendor</strong></em>. Over the past decade, Alibaba Cloud, Tencent Cloud, and Huawei Cloud have built established teams of solution architects responsible for explaining architectures to customers, building POCs, formulating migration plans, and coordinating delivery until launch. Huawei also has a dedicated delivery engineer track responsible for implementing projects in customers&#8217; data centres.</p><p>This system already covers much of the work associated with FDE, but its focus remains on <em><strong>pre-sales and deployment</strong></em>. Solution architects do not own end-to-end product iteration. Requirement changes must go through a formal change process, while product or model replacements depend on scheduling from headquarters.</p><p>The second foundation is <em><strong>the role now emerging from AI start-ups</strong></em>. MiniMax has advertised an &#8220;AI pre-sales solutions expert&#8221; position on BOSS Zhipin, while companies and model teams such as Moonshot AI, Zhipu AI, Alibaba&#8217;s Tongyi, and Tencent&#8217;s Hunyuan are recruiting for similar roles.</p><p>The titles vary, but the job descriptions are highly consistent. They involve understanding customer scenarios, creating demos, tuning prompts, implementing RAG, drafting delivery plans, and coordinating with the customer&#8217;s engineering team until launch. <em><strong>These roles are the closest thing to a native Chinese FDE</strong></em><span>.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gsf-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gsf-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png 424w, https://substackcdn.com/image/fetch/$s_!gsf-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png 848w, https://substackcdn.com/image/fetch/$s_!gsf-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png 1272w, https://substackcdn.com/image/fetch/$s_!gsf-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!gsf-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png" width="1447" height="1087" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1087,&quot;width&quot;:1447,&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_!gsf-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png 424w, https://substackcdn.com/image/fetch/$s_!gsf-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png 848w, https://substackcdn.com/image/fetch/$s_!gsf-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png 1272w, https://substackcdn.com/image/fetch/$s_!gsf-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ec6827-a84e-4826-8e82-a152ad45fc91_1447x1087.png 1456w" sizes="auto, 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><strong>Three differences in the local terrain</strong></p><ul><li><p><strong>Private deployment and data compliance make a pure API model difficult.</strong> Chinese enterprise customers place much greater emphasis than their US counterparts on data residency, control over model deployment, and auditability. In my experience, API calls and prompt work may account for only 30% of an FDE project. The remaining 70% involves moving the model into the customer&#8217;s data centre, implementing authentication and permissions, connecting it to the internal data platform, and completing compliance requirements.</p></li><li><p><strong>Smaller gaps between models push the competition into the engineering layer.</strong> In the US, model capability can be a stronger initial differentiator. Among Chinese offerings such as Tongyi, Doubao, Kimi, GLM, and DeepSeek, customers are less likely to choose on model benchmarks alone. Their evaluation criteria therefore fall largely on <strong>agent orchestration, RAG retrieval quality, tool integration, and workflow design</strong>. What Chinese FDEs compete on is not &#8220;how powerful my model is,&#8221; but &#8220;whether I can actually get this business up and running.&#8221;</p></li><li><p><strong>Enterprise willingness to pay and procurement cycles differ from those in the US.</strong> It is difficult to replicate a Palantir-style model built around intensive on-site work and high-value software contracts. Chinese customers&#8217; budgets follow annual procurement plans, and payment tends to be project-based. The FDE business model therefore often takes a hybrid form of <em><strong>subscription + private-deployment licence + project delivery</strong></em>.</p></li></ul><h3><strong><span>A </span>distinctive model: The in-house FDE</strong></h3><p>AI teams inside many large technology companies have begun serving &#8220;internal customers&#8221; through an FDE-like model<strong>.</strong> Alibaba Cloud PAI engineers work directly with teams inside Taobao, while Tencent Hunyuan uses a similar mechanism across WeChat and its advertising business lines.</p><p>Job listings with titles such as &#8220;industry implementation engineer,&#8221; &#8220;AI application engineer,&#8221; and &#8220;intelligent business specialist&#8221; are essentially <em><strong>in-house FDEs</strong></em>. They translate the capabilities of the model team end to end into working systems for the business unit.</p><p>This offers leaders at large companies another option. Embed several internal FDEs within the business units, get the first demo running, and put the ROI data in front of the business head. That can break down departmental silos faster than ten alignment meetings.</p><p>China&#8217;s version of FDE is not a direct copy of Palantir&#8217;s. Private deployment, enterprise procurement, and in-house AI teams have reshaped the role around local constraints. The title may be imported, but the job is already becoming its own thing.</p><p>That tells us how FDE travelled. It does not tell us who should take the job. In <em>Part 4</em>, we turn to the more personal question: <em><span>who thrives as an FDE and who gets crushed by it?</span></em></p><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Will OpenAI Eat Jev's Lunch?]]></title><description><![CDATA[How TypeSafe made AI decisions fast and calibrated and why OpenAI may be able to do the same]]></description><link>https://newsletter.agentengineering.co/p/will-openai-eat-jevs-lunch</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/will-openai-eat-jevs-lunch</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Tue, 29 Sep 2026 16:17:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!234a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p>This isn&#8217;t our usual Thursday issue, but Jev moved rather quickly from a launch announcement to one of the week&#8217;s most argued-over ideas. Waiting until our four-part series wrapped would have meant joining the conversation after it had already moved on.</p><p>To help us make sense of what comes next, we turned to <a href="https://www.linkedin.com/in/john-berryman-864b1713/">John Berryman</a>, who has spent years building AI and search systems and is the co-author of <em>Prompt Engineering for LLMs</em>. In this piece, he looks past the launch-week excitement to ask a harder question: does Jev have a defensible advantage, or can OpenAI reproduce its fast, probabilistic decision-making and wire it directly into its own models and agents?</p><p>Consider this a special Tuesday dispatch. It sits outside our <a href="https://open.substack.com/pub/agenticengg/p/decoding-fde-part-1-deploy-the-engineer?r=8770aj&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">four-part </a><em><a href="https://open.substack.com/pub/agenticengg/p/decoding-fde-part-1-deploy-the-engineer?r=8770aj&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">Decoding FDE</a></em><a href="https://open.substack.com/pub/agenticengg/p/decoding-fde-part-1-deploy-the-engineer?r=8770aj&amp;utm_campaign=post-expanded-share&amp;utm_medium=web"> series</a>, which continues on Thursday as planned.</p></div><div><hr></div><p><strong><a href="https://arcturus-labs.com/blog/2026/09/16/typesafes-jev-trades-text-generation-for-instant-calibrated-decisions/">TypeSafe&#8217;s Jev</a></strong> introduced a new spin on large language models that has taken the AI world by storm. According to <strong><a href="https://vercel.com/blog/ai-gateway-jev-model-launch">Vercel</a></strong>, &#8220;Jev was adopted faster than any other model in AI Gateway history.&#8221; But there are clouds forming on the horizon. OpenAI is undoubtedly paying attention&#8230; and deciding what to do next.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!234a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!234a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!234a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!234a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!234a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!234a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg&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;:null,&quot;alt&quot;:&quot;A bulky OpenAI robot licks its lips and reaches toward the enormous sandwich a skinny TypeSafe robot is happily eating.&quot;,&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;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="A bulky OpenAI robot licks its lips and reaches toward the enormous sandwich a skinny TypeSafe robot is happily eating." title="A bulky OpenAI robot licks its lips and reaches toward the enormous sandwich a skinny TypeSafe robot is happily eating." srcset="https://substackcdn.com/image/fetch/$s_!234a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!234a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!234a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!234a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a10f188-573e-4aa9-8c88-648831664498_1536x1024.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></figure></div><p>I wish all the best for TypeSafe, but if they truly live up to their promises, then I&#8217;m concerned that OpenAI is well positioned to fast-follow. And not just to replicate Jev&#8217;s flagship product, but also to fold that capability into upcoming models and agents and offer some really useful new behavior that Jev is not positioned to reproduce.</p><p>Here is my thesis in brief: OpenAI has for years used their LLMs as implicit classifiers; they just haven&#8217;t trained them for general classification tasks, and they haven&#8217;t packaged up general classification as a standalone product. If OpenAI can replicate the training, then they will be able to replicate Jev in short order. Moreover, OpenAI is positioned to use this new classifier inside their existing models and agents, which can be useful for quick model selection, more efficient thinking, better security guardrails, and generally smarter, faster, and cheaper models.</p><p>The key factor deciding all of this is whether or not TypeSafe has a moat to protect themselves. The biggest moat I see is in TypeSafe&#8217;s training data and training processes.</p><h3>What&#8217;s old is new again</h3><p>Before I make my case, let me state my assumptions and back them up with some relevant history and examples from OpenAI.</p><p>My main assumption is that Jev is using something quite close to a conventional large language model. As evidence of this, <strong><a href="https://www.latent.space/p/ainews-here-are-6-clones-of-jev-in">Latent Space reports</a></strong> that many of the early clones are indeed LLM-based.</p><p>Here&#8217;s the idea. Given a <code>state</code> and a set of <code>questions</code>, Jev&#8217;s LLM generates a single token or, more accurately, generates the probability distribution over all possible next tokens. The logprobs associated with every possible token at that one step are then massaged into whatever format Jev needs to return. (From here on I&#8217;ll just say &#8220;probabilities&#8221; instead of &#8220;logprobs&#8221; &#8211; for our purposes they&#8217;re interchangeable.)</p><p>For a <code>noul</code> question, Jev looks at just two tokens, <code>true</code> and <code>false</code>, ignores everything else, and normalizes their probabilities into a single probability that the answer is <em>true</em>. For a <code>choice</code> question, Jev can be prompted with a list of possibilities &#8211; say <code>A=happy, B=sad, C=angry, D=afraid</code> &#8211; and it looks at the relative probabilities of those four tokens to build out the full distribution, selecting the highest as the winner. The choice pattern is pretty much what I blogged about way back in 2025 in <strong><a href="https://arcturus-labs.com/blog/2025/03/31/supercharging-llm-classifications-with-logprobs/">Supercharging LLM Classifications with Logprobs</a></strong>, and even without fine-tuning it was already showing promise. (Sigh... what do they say about ideas and the importance of execution?) I haven&#8217;t thought hard about the <code>score</code> primitive, but I suspect it&#8217;s a variant of the same pattern.</p><p>Part of the premise of this post is that OpenAI might be poised to quickly take advantage of this idea, and this becomes clearer if you understand how. OpenAI has been using large language models implicitly as specialized classifiers since at least the introduction of tool calling.</p><p>Back in early 2024, I wrote <strong><a href="https://blog.jnbrymn.com/2024/01/30/tool-invocation--demonstrating-the-marvel-of-gpts-flexibility">Tool Invocation &#8211; Demonstrating the Marvel of GPT&#8217;s Flexibility</a></strong>, where I coaxed a GPT model into revealing exactly how it decides to call a tool. The following is what a chat session looks like internally. Here, there is a user message, an assistant response without a tool call, and then another user message that prompts the assistant to make a tool call:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VZpC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VZpC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png 424w, https://substackcdn.com/image/fetch/$s_!VZpC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png 848w, https://substackcdn.com/image/fetch/$s_!VZpC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png 1272w, https://substackcdn.com/image/fetch/$s_!VZpC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!VZpC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png" width="1209" height="438" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:438,&quot;width&quot;:1209,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A ChatML transcript with each token highlighted in a different color to show token boundaries, ending in a tool call to get_temperature for Berlin.&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;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="A ChatML transcript with each token highlighted in a different color to show token boundaries, ending in a tool call to get_temperature for Berlin." title="A ChatML transcript with each token highlighted in a different color to show token boundaries, ending in a tool call to get_temperature for Berlin." srcset="https://substackcdn.com/image/fetch/$s_!VZpC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png 424w, https://substackcdn.com/image/fetch/$s_!VZpC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png 848w, https://substackcdn.com/image/fetch/$s_!VZpC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png 1272w, https://substackcdn.com/image/fetch/$s_!VZpC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eb9255-2995-43e0-b218-aa62220b4cc1_1209x438.png 1456w" sizes="auto, 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&#8217;ve color-coded the text to indicate token boundaries. If you haven&#8217;t seen ChatML before, it&#8217;s the internal markup language that OpenAI introduced for organizing user-agent conversation prompts. <code>&lt;|im_start|&gt;</code> and <code>&lt;|im_end|&gt;</code> are reserved tokens that delimit the messages, and the first token after <code>&lt;|im_start|&gt;</code> identifies the speaker, either <code>user</code> or <code>assistant</code>.</p><p>Right after <code>&lt;|im_start|&gt;assistant</code>, the very first token the model predicts is either <code>\n</code> or <code>to=function.</code>. If it predicts <code>\n</code>, it continues on with a normal natural-language response. If it predicts <code>to=function.</code>, then that sequence of tokens effectively functions as a classifier deciding whether or not a tool should be invoked at all. The next handful of tokens identify which tool to call &#8211; <code>get_temperature</code> &#8211; another classifier, this time picking from the list of available tools. After that, the model generates argument names, then argument values, which can also be vaguely considered as classifiers or estimators. Finally, when the model generates a <code>&lt;|im_end|&gt;</code> token, that too is a classifier which reads &#8220;true&#8221; when the model believes the message is complete.</p><div class="callout-block" data-callout="true"><p><strong>Some LLMs just don&#8217;t know when to shut up</strong></p><p>Back when I was at GitHub working on Copilot, I had the opportunity to work with a very new and very raw internal API for GPT-4. Out of the gate, we knew something was way off because, after an initially very coherent response, the model would have trouble wrapping up. It would end every response with something like &#8220;Let me know if you have any other questions. Have a nice day. Have a great week. Have a good time. Have a wonderful life. Have a special day. ...&#8221; and it would keep on like this until it hit the response token limit.</p><p>As it turns out, the API required us to set some header values which would allow the model to use those special message delimiters <code>&lt;|im_start|&gt;</code> and <code>&lt;|im_end|&gt;</code>. In effect, we were disallowing the model to ever predict the end of its response &#8211; it literally had no internal ability to shut itself up!</p></div><p>The point I was making in that old post is that OpenAI has been using single tokens as little micro-classifiers for years. Each token carried a probability: should we use a tool or not, which tool should we use, is the assistant finished. That may be close to Jev&#8217;s core trick, except for one important thing: these micro-classifiers are specialists, only suitable for these little tasks, whereas Jev&#8217;s classifiers are general. But walk back a step or two, and you see how this might be a small thing after all, because an LLM is effectively an extraordinarily general classifier that is constantly assigning a probability distribution for every subsequent token.</p><h3>Does TypeSafe have a moat?</h3><p>I&#8217;m actually rooting for Jev. I think they&#8217;ve found something very interesting that&#8217;s been hiding under our noses all along.</p><p>Architecture-wise, I don&#8217;t think there&#8217;s much of a moat for the very reasons stated above. I think TypeSafe is using a conventional large language model for Jev, or something close to it. And even if not, conventional LLMs seem a good fit for general classification work.</p><p>Perhaps the real moat is in the training data itself. Not the raw data, but the technique for turning it into something that trains Jev to be &#8220;calibrated&#8221;. TypeSafe&#8217;s cofounder Diogo Almeida said as much when someone suggested the data mattered more than the architecture:</p><p>If I were building that data set, I&#8217;d want a huge pile of examples where the outcome is already known &#8211; support tickets and how they actually got routed, resumes and whether that candidate actually got hired, product reviews and their actual star ratings, moderation queues and their actual verdicts, prediction markets and how they actually resolved &#8211; each one paired with a question whose true answer I already know. The point isn&#8217;t to teach Jev about support tickets or resumes specifically. It&#8217;s to show it thousands of situations across wildly different domains and and build its ability to generalise across classification tasks.</p><p>Then there&#8217;s the reinforcement learning. I wonder what this entails. Autonomous agents navigating decisions with a limited set of options, like the Wikipedia demo or Doom demos they built on their site? Maybe predicting the outcomes of events that happened after the pre-training cutoff? I don&#8217;t know, but if there&#8217;s secret sauce, then it&#8217;s probably here.</p><p>Note that none of this is a moat unless Jev is actually accurate. Speed, cost, and ease of use are obvious, but accuracy is the one thing that&#8217;s hard to check. I&#8217;ve already found domains where <strong><a href="https://arcturus-labs.com/blog/2026/09/16/typesafes-jev-trades-text-generation-for-instant-calibrated-decisions/#but-are-those-probabilities-any-good">Jev&#8217;s probabilities don&#8217;t hold up</a></strong>. Time will tell if Jev is sufficiently general and accurate for the use cases people are attempting to use it for.</p><h3>Soon it will be OpenAI&#8217;s move</h3><p>So what&#8217;s OpenAI&#8217;s next move here? The obvious one is to just copy Jev and ship it as a new model type. Jev is clearly popular, and if the moat is shallow, then OpenAI has the skill, the hardware, and the funding to pull it off.</p><p>But OpenAI could do something even more interesting than copy Jev, they could fold the classification capability into a conventional LLM and reap some interesting rewards.</p><h4>An LLM that answers its own questions</h4><p>Remember that special syntax that signaled a tool call, <code>to=function.</code>? OpenAI could do something similar here: introduce new syntax, say, a new tag, <code>&lt;prediction&gt;</code>, that the model can drop into its own context whenever it needs a quick classifier judgment. Here&#8217;s an example of how that might look:</p><pre><code><code>&lt;user&gt;
So Donny said "nice haircut" to me today. Does he like me?
&lt;/user&gt;
&lt;assistant&gt;
&lt;thinking&gt;
Let me size this up.

&lt;prediction&gt;
claim: Donny is romantically interested in Jess.
probability: 0.04
&lt;/prediction&gt;

Yeah, "nice haircut" is not exactly a love confession.
&lt;/thinking&gt;

I hate to break it to you, but... probably not.
&lt;/assistant&gt;
</code></code></pre><p>There&#8217;s one interesting difference from ordinary tool calling. With a normal tool call, the model generates the function name and arguments, then generation stops &#8211; the agent harness has to take over, actually call the function, and feed the result back in a new turn. Here, there&#8217;s no handoff. The classifier isn&#8217;t a tool living outside the model; it&#8217;s a capability built into the model itself. The model asks its question and answers it in the same breath, without ever leaving the GPU.</p><p>Normal decoding works like this: at each position, the model produces a set of logits, one per vocabulary token; those get turned into a probability distribution via softmax; and then some decoding strategy (greedy, top-p, whatever) picks a single token, which gets appended to the sequence and fed back in for the next step. But at the point where the model has written <code>probability:</code>, we don&#8217;t want ordinary decoding. The claim is phrased as a statement, so under the hood the model is really still weighing two implicit outcomes &#8211; true or false. We want to read the logits for the <code>true</code> and <code>false</code> tokens at that position, normalize just those two against each other, and write the resulting probability back into the sequence as text, <code>0.04</code>, instead of whatever token would normally win. The model then continues decoding as if it had generated that number itself, because as far as the rest of the forward pass is concerned, it did. It&#8217;s a strange trick, but it&#8217;s the same kind of guided decoding that constrained-output libraries already do at inference time &#8211; just applied to probabilities instead of grammar.</p><p>The other trick is that this one special position needs to behave differently from a normal token prediction. Normally the model is estimating &#8220;what token comes next in this text&#8221;. Here we need it to estimate something closer to &#8220;what&#8217;s the true answer to this question&#8221;, which is a related but distinct skill. Many frontier models now use mixture-of-experts architectures, so it&#8217;s not a stretch to imagine that a few rounds of fine-tuning could carve out an expert that specializes in exactly this kind of calibrated snap judgment, while the rest of the model keeps doing what it already does well (I&#8217;m oversimplifying MoE routing considerably, but I suspect you understand how this might map to a real system.)</p><h4>The payoff for an LLM with built-in classification</h4><p>Look how the model just used itself in that Donny and Jess example. If TypeSafe is right, these little Jev-like judgments will be quite accurate &#8211; and less prone to hallucination than just asking a model to state a confidence value in plain text. (Caveats apply &#8211; see TypeSafe&#8217;s own <strong><a href="https://docs.typesafe.ai/model-jaggedness/jev-1.13">rundown of Jev&#8217;s jagged edges</a></strong>. Jev works best for fast, System One judgments, not math or multi-hop reasoning.)</p><p>The best part is the aforementioned fact that we never have to leave the GPU to take advantage of this new, lightning-fast generalized classification system. The LLM quite literally can just ask itself, right there in the thinking block, as shown above. The payoff is immediate: the model&#8217;s own reasoning gets more accurate and better grounded, because it&#8217;s checking its assumptions against trained-in calibrated estimates instead of likely next token vibes.</p><p>And once a model has been fine-tuned to drop a <code>&lt;prediction&gt;</code> into its own thinking, there&#8217;s no reason to stop at romance advice. A few more patterns come to mind:</p><p>During a long reasoning trace, the model could periodically check whether it&#8217;s actually done, and if not, which task to tackle next:</p><pre><code><code>&lt;prediction&gt;
query: Which of these remaining tasks should I do next?
options: A=verify the test suite passes, B=update the changelog, C=nothing, I'm done
probabilities: A=0.71, B=0.24, C=0.05
answer: A
&lt;/prediction&gt;
</code></code></pre><p>That&#8217;s a cheap way to short-circuit a reasoning trace that&#8217;s wandering, instead of waiting for the model to talk itself into stopping.</p><p>Or, right after a tool call, the model could check whether the call itself was safe before actually running it:</p><pre><code><code>&lt;user&gt;
Can you check my account balance? Use my API key sk-live-83fj2ndk9 for auth.
&lt;/user&gt;
&lt;assistant&gt;
to=function.check_balance
{"account_id": "12345", "api_key": "sk-live-83fj2ndk9"}

&lt;prediction&gt;
claim: This tool call is unsafe to run.
probability: 0.97
&lt;/prediction&gt;

That's a live API key sitting in plaintext arguments &#8211; too risky to send as-is.
&lt;/assistant&gt;
</code></code></pre><p>The same pattern works for scanning a tool&#8217;s response for prompt injection. And since it&#8217;s always the same question asked the same way, it&#8217;s easy to imagine this getting sugared down to something like <code>&lt;safety_score&gt;0.94&lt;/safety_score&gt;</code>, with an instruction baked into the model to just stop generating if the score drops too low.</p><p>The same trick could route work between models: by periodically asking &#8220;does this need a bigger model, a smaller model, or this model?&#8221; and letting a bit of reinforcement learning push the answer toward whatever is cheapest without sacrificing accuracy.</p><pre><code><code>&lt;prediction&gt;
query: Does this task require a bigger model, a smaller model, or this model?
options: A=bigger model, B=smaller model, C=this model
probabilities: A=0.05, B=0.77, C=0.18
answer: B
&lt;/prediction&gt;
</code></code></pre><p>Furthermore, if there really is a dedicated &#8220;expert&#8221; in there specializing in these snap judgments, the model might not even need the special <code>&lt;prediction&gt;</code> syntax most of the time. It could just get routed to whenever a snap judgment is warranted, mid-sentence, as a normal part of the forward pass &#8211; no tag required. Fine-tuning that expert inside a model that also handles everything else an LLM does might even have synergistic effects, making the LLM smarter at snap judgments and more flexible and general in classifications.</p><p>Finally, everyone is going to want classification for images and speech as soon as they can get it. If Jev-style classification can be folded into a conventional text LLM like I&#8217;ve sketched here, then soon, OpenAI will make general classification available for images and speech. Conversely, classification baked into a speech model would be especially handy for something like a live voice agent &#8211; deciding in real time whether to interrupt, escalate, or just keep listening.</p><h3>Will TypeSafe survive?</h3><p>Time will tell whether Jev&#8217;s claims about accuracy and generality actually hold up across the full range of tasks people are already throwing at it. If they do, TypeSafe&#8217;s survival comes down to the moat: how hard it really is to replicate their training data and their reinforcement learning process. If that&#8217;s genuinely hard, they&#8217;ll probably be fine &#8211; and might even end up in an unusually good position to get acquired by OpenAI outright, rather than out-competed by them. Everything I&#8217;ve sketched above is a real capability upgrade for a frontier lab: faster thinking, cheaper thinking, and sharper System One judgment baked directly into the flagship model.</p><p>If the moat is thin, OpenAI just builds it themselves, and TypeSafe&#8217;s window closes fast.</p><p>Meanwhile, Diogo Almeida, TypeSafe&#8217;s Founder CEO, is confident &#8220;If model quality matters, then we are going to be in a very good position for a long time&#8221; (<strong><a href="https://www.youtube.com/watch?v=cFx9Z3ZXca0&amp;t=1925s">from his interview with Latent Space</a></strong>).</p><p>Godspeed, TypeSafe. Godspeed.</p><div><hr></div><p>If John&#8217;s analysis of Jev demonstrates anything, it&#8217;s his instinct for looking past the launch story and finding the engineering question underneath. You&#8217;ll find more of that thinking, alongside his work helping teams build, evaluate, and improve LLM and agent systems, at <a href="https://arcturus-labs.com/">Arcturus Labs</a>.</p><p>That&#8217;s it for this special dispatch. We&#8217;ll return to <em>Decoding FDE</em> on Thursday.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Decoding FDE (Part 2): Debug the definition]]></title><description><![CDATA[Why FDE looks like consulting and software outsourcing and why the feedback loop says otherwise]]></description><link>https://newsletter.agentengineering.co/p/decoding-fde-part-2-debug-the-definition</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/decoding-fde-part-2-debug-the-definition</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Thu, 24 Sep 2026 16:03:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/42be0804-f3f9-4644-b7ef-ae76f24022cd_1477x1065.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p>Last week, we looked at why model companies are sending engineers into customer environments. This week comes the awkward question: isn&#8217;t that just consulting&#8230; or outsourcing with a better acronym?</p><p>The resemblance is annoyingly convincing. Hence, in Part 2, Henry draws the boundary between the three and shows why confusing them is an efficient way for both clients and candidates to hit a wall.</p></div><h3><strong><span>Why FDE looks like consulting</span></strong></h3><p><span>When people first read an FDE job description, the same question tends to follow.</span></p><p><span>&#8220;Isn&#8217;t this just McKinsey or Accenture for AI?&#8221;</span></p><div><hr></div><p style="text-align: center;"><em>For less hype and more engineering, pull up a chair.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentengineering.co/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.agentengineering.co/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p><span>The comparison is understandable. FDEs embed with customers, turn loosely defined business problems into workable use cases, align technical teams with senior executives, and stay involved from discovery through deployment.</span></p><p><span>The McKinsey resemblance comes from problem framing and executive advisory. The Accenture resemblance comes from embedded technical delivery. Add the client-site travel, conference-room whiteboards and stakeholder meetings, and the roles can look similar.</span></p><p><span>But those similarities describe how the work is delivered, not its centre of gravity. Traditional consulting starts with the client&#8217;s processes and asks how they should change. FDE work starts with the model&#8217;s capabilities and asks how far they can be made useful inside those processes&#8212;then carries what fails back to the model company.</span></p><p><span>Consultants are hired to redraw process boundaries. FDEs are hired to discover model boundaries.</span></p><p><span>Put these two side by side in a table, and the differences will become immediately apparent.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XzG-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XzG-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.png 424w, https://substackcdn.com/image/fetch/$s_!XzG-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.png 848w, https://substackcdn.com/image/fetch/$s_!XzG-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.png 1272w, https://substackcdn.com/image/fetch/$s_!XzG-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!XzG-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.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;: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_!XzG-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.png 424w, https://substackcdn.com/image/fetch/$s_!XzG-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.png 848w, https://substackcdn.com/image/fetch/$s_!XzG-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.png 1272w, https://substackcdn.com/image/fetch/$s_!XzG-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea08bc0-e953-4034-9674-010fa7e16ba6_1800x1350.png 1456w" sizes="auto, 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>The most revealing row in the table is <em><strong>Knowledge durability</strong></em>.</p><p>Traditional consulting scales through asset reuse. A solution developed for one bank can be adapted for another, while a retail playbook can be reused across multiple clients. Each engagement adds to a library of frameworks, benchmarks and delivery patterns. Much of that knowledge can remain valuable for years.</p><p>FDE knowledge compounds differently. Domain understanding and implementation judgement endure, but model-specific techniques can depreciate remarkably quickly. A prompt chain carefully assembled today may be reduced to a single instruction by the next model release.</p><p>That does not mean FDEs rebuild everything from zero. It means they must repeatedly test the model&#8217;s boundaries, reconsider the toolchain and reshape the <em><strong>Product Form</strong></em> as capabilities change.</p><p>The durable asset is not a fixed playbook. It is the ability to rerun the loop when the model moves underneath you<span>.</span></p><div class="callout-block" data-callout="true"><p><strong>What exactly is Product Overhang?</strong></p><p><span>I use </span><em><strong><span>Product Overhang</span></strong></em><span> to describe the gap between what a model can do and what the existing product allows users to do.</span></p><p><span>The capability exists, but the access points, permissions, context or workflow integrations needed to make it useful do not.</span></p><p><span>An FDE&#8217;s job is to close that gap. They translate latent model capability into something that works inside the client&#8217;s environment. Clients are not simply buying access to an API. They are buying confidence that someone can turn its unused capability into a working part of their business.</span></p></div><p>The <em><strong>Project structure</strong></em> row follows from the same distinction. A traditional consulting engagement usually begins with a Statement of Work (or SOW), a Work Breakdown Structure (or WBS) and agreed acceptance criteria. That model works when the objectives and expected deliverables can be defined before the contract is signed.</p><p>An FDE engagement often begins one step earlier. Clients arrive with something closer to this:</p><p>&#8220;I know AI should be able to do something for me, but I have no idea what that is.&#8221;</p><p>The goal itself is part of the project.</p><p>FDEs still work within contracts and commercial boundaries, but the scope is often mission-led rather than fully specified upfront. Each iteration clarifies what the model can do, what the business actually needs and what shape the eventual <em><strong>Product Form</strong></em> should take.</p><p>The deliverable reflects that difference. A consulting engagement may produce recommendations, a redesigned operating model, an implementation plan or, in some cases, production software. FDE work is ultimately judged by what remains running inside the client&#8217;s environment.</p><p>It may be small, clunky or short on a polished interface. But people are invoking it, modifying it and complaining about it every day. In other words, it is alive.</p><p>The distinction is not that consultants never ship code. It is that an FDE mission has not proved itself until the product survives contact with a real workflow.</p><p>The <em><strong>Competitive edge</strong></em> row is subtler.</p><p>An FDE&#8217;s advantage is not a secret methodology. It is a current, intuitive grasp of the model&#8217;s boundaries. Every recent deployment reveals something useful&#8212;what breaks under messy inputs, which workflows need guardrails and where human intervention remains unavoidable.</p><p>Some of that knowledge can be documented, but documentation cannot fully replace the judgement built through repeated exposure to real failures. Model boundaries move quickly, so the engineers closest to current deployments often see the change first.</p><p>When someone asks whether FDE is simply a new version of Accenture, the most useful answer is that the two may share a client-facing delivery model, but they operate different learning loops.</p><p>Traditional consulting primarily helps the client reshape its processes. FDE uses those processes to discover what the model can and cannot reliably do&#8230; then carries that evidence back to the model company.</p><h3><strong><span>FDE is not software outsourcing</span></strong></h3><p><span>If saying &#8220;FDE is the new Accenture&#8221; is the first layer of misinterpretation, then &#8220;FDE is overpriced software outsourcing&#8221; constitutes the second layer. This second layer is far more misleading, as the superficial evidence appears overwhelmingly convincing: FDE consultants do go to clients&#8217; premises to write code, do customize functions according to clients&#8217; business needs, and do have their working hours allocated by clients. At first glance, they seem no different from outsourcing engineers.</span></p><p><span>But a single glance at </span><em><strong><span>the feedback loop</span></strong></em><strong><span> </span></strong><span>reveals the difference immediately. Outsourcing is built around requirement fulfilment. FDE is built around co-exploration.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7-8E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7-8E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png 424w, https://substackcdn.com/image/fetch/$s_!7-8E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png 848w, https://substackcdn.com/image/fetch/$s_!7-8E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png 1272w, https://substackcdn.com/image/fetch/$s_!7-8E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!7-8E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png" width="1575" height="1728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1728,&quot;width&quot;:1575,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:198009,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7-8E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png 424w, https://substackcdn.com/image/fetch/$s_!7-8E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png 848w, https://substackcdn.com/image/fetch/$s_!7-8E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png 1272w, https://substackcdn.com/image/fetch/$s_!7-8E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ece9beb-7348-4eb6-a5dc-efe48832d88d_1575x1728.png 1456w" sizes="auto, 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>The crucial difference in this diagram is not the straightforward flow across the top. It is the additional feedback chain running back to the model company.</p><p>That chain is not decoration. It is the real reason the FDE role exists.</p><p>Break the distinction down and four comparisons emerge.</p><ul><li><p><strong>The work they take on is fundamentally different.</strong> Outsourcing vendors typically take on SOWs&#8212;a clear set of requirements agreed before the contract is signed. The document specifies what to build, which technology to use, how the work will be accepted and what happens if the terms are not met. FDEs, by contrast, often take on missions. The client may not know exactly what it wants. It knows only that &#8220;AI should be able to help me with something.&#8221; SOWs are built on the premise of certainty. Missions are built on the premise of exploration. These are two fundamentally different postures from which to begin a project.</p></li><li><p><strong>The scope of work differs.</strong> Outsourcing usually delivers a defined component (a module, website or data pipeline) then moves on. FDE is more likely to take end-to-end ownership, from the original business problem and model selection to <em><strong>Product Form</strong></em> design and user adoption after launch.</p></li><li><p><strong>The billing model is different.</strong> When a model company dispatches an FDE, it cares about more than the project fee. Will the client continue using the model? Will it become a retained customer? Will adoption expand into other lines of business? Long-term usage and adoption matter more than the number on an acceptance document.</p></li><li><p><strong>Feedback flows to different destinations.</strong> In conventional outsourcing, client feedback usually remains within the vendor relationship. With FDE, it flows back to the model company&#8217;s roadmap. Failed prompts, unreliable tool calls and problems discovered in real workflows can inform future evaluations, tools and product features. In that sense, every FDE customer becomes a natural design partner for the model company.</p></li></ul><p>This is the real value model companies are paying for when they recruit FDEs. They are not simply selling a service. At the client&#8217;s site, they are collecting real-world Product Form signals.</p><p>Those signals cannot be captured through questionnaires or market surveys. They come back through an engineer who has personally watched the model hit roadblocks inside a specific client workflow&#8212;and had to make it work.</p><div class="callout-block" data-callout="true"><p><strong>What do FDEs earn at OpenAI and Anthropic?</strong></p><p><span>As of September 2026, </span><a href="https://openai.com/careers/forward-deployed-engineer-%28fde%29-sf-san-francisco/"><span>OpenAI&#8217;s San Francisco FDE role</span></a><span> lists compensation of $185,000&#8211;$300,000 plus equity. </span><a href="https://job-boards.greenhouse.io/anthropic/jobs/5302966008"><span>Anthropic&#8217;s US FDE role</span></a><span> lists an annual salary of $280,000&#8211;$320,000. The figures are not directly comparable, and neither reveals the complete package. But they make one thing clear. Model companies are not paying these amounts for outsourced working hours. They are paying for someone who can take on the combined risk of the product, the client, and the model.</span></p><p><span>When I began my career at a central state-owned enterprise in 2006, the company was undergoing its own digital transformation. I remember our group paying Accenture consultants 3,500 yuan per day. They remained on site for years and were described by the media as the &#8220;gold-collar workers&#8221; of that era. I later moved to SAP, where consultants became an even more visible symbol of the same category.</span></p><p><span>FDEs may become their equivalent in the AI era. In my view, demand for them (and the salaries attached) will continue to rise over the next 24 to 36 months.</span></p></div><p><span>Outsourcing is Labor Arbitrage, and FDE is </span><em><strong><span>a frontline perceptron</span></strong></em><span>. </span>Confusing the two leads clients to structure FDE engagements around rigid SOWs and candidates to approach the role like outsourced delivery. Both sides will hit a wall very quickly<span>.</span></p><p><span>That tells us what FDE is </span><em><span>not</span></em><span>. </span><em><span>Part 3</span></em><span> traces the role from Palantir, the software company that pioneered the FDE model, to the new generation of AI companies, then follows it into China. Same role. Very different soil.</span></p><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Build your personal AI engineering system]]></title><description><![CDATA[Watch now (66 mins) | Louis-Fran&#231;ois Bouchard on portable skills, safer automation and building an AI setup that remembers how you work]]></description><link>https://newsletter.agentengineering.co/p/webinar-build-your-personal-ai-engineering</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/webinar-build-your-personal-ai-engineering</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Tue, 22 Sep 2026 15:55:40 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/216730917/3943a9558512243b8ab73c110c5fd00a.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Working with a coding agent can feel wonderfully simple at first. Give it a task, correct a few mistakes and move on. Then the setup starts growing.</p><p>Your instructions end up spread across different tools. The agent forgets something useful from yesterday. Skills pile up. Context gets noisy. And the moment you reach a usage limit (or simply close your laptop) the work stops.</p><p>A bigger model will not tidy this up for you. It is a systems problem.</p><p>Last week, I hosted a free session with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Louis-Fran&#231;ois Bouchard&quot;,&quot;id&quot;:130571458,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!f-b9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c5d976-f699-4595-8b6d-6ffa3e42a5e5_400x400.jpeg&quot;,&quot;uuid&quot;:&quot;33775dd1-1607-4c6f-a894-35319e4b369e&quot;}" data-component-name="MentionToDOM"></span>, co-founder and CTO of <a href="https://towardsai.com/">Towards AI</a>, creator of <a href="https://www.youtube.com/@WhatsAI">What&#8217;s AI</a> and co-author of <em><a href="https://www.amazon.com/Building-LLMs-Production-Reliability-Fine-Tuning/dp/B0D4FFPFW8/ref=sr_1_1?crid=2T9BKXUALHQUM&amp;dib=eyJ2IjoiMSJ9.Qr3e3VSH8LSo_j1M7sV7GeZ_fRJDyLZqJM222TvJLddNNxBW2qcRhyjB_eKvRwvvaLtGRkc6ZiSBE2qoIWOPFNLxZ7U0W4qOE6q-uTwJZVuAz7ZXXPHWm5SGNqJJe9hBMJnvydn2c-KNDeUeFhUinbW4_VAxTORLwdBGdSl6DjrrtoHDebsJNZ7gRWjFWzuruY9muPeifmuG3z0aOxyzZbEubY1qWRW1TwP1PZAnm1k.p9n0-MQJSeT15qgSx1kFcNS4KwAq7oubx1B2zA87ePw&amp;dib_tag=se&amp;keywords=Building+LLMs+for+Production&amp;qid=1789995281&amp;sprefix=%2Caps%2C279&amp;sr=8-1">Building LLMs for Production</a></em>. Louis walked us through the personal AI engineering system he uses every day, including the parts that work well and the mistakes that became rather expensive lessons.</p><h3>Give your working knowledge one home</h3><p>Louis keeps his notes, skills, meeting summaries, and instructions in one Obsidian vault made from Markdown files.</p><p>Simple indexes tell the agent what each folder contains, so it can find what it needs without dragging the whole vault into every task. Because the information is stored outside the coding agent, Louis can use the same knowledge with Claude Code, Codex or another tool.</p><p>You <em>don&#8217;t</em> have to copy his choice of software. The bigger idea is to stop leaving useful knowledge scattered across whichever AI tool you happened to use that day.</p><div><hr></div><p style="text-align: center;"><em>For less hype and more engineering conversations, pull up a chair.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentengineering.co/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.agentengineering.co/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h3>Don&#8217;t schedule a task because it worked once</h3><p>Louis does not turn a new workflow into an overnight job immediately.</p><p>He runs it himself first. Then he tries it again in a fresh thread. Only after it works reliably does he let it run while he is away.</p><p>He still watches how long it takes and how many tokens it uses. When one regular task suddenly went from around sixteen minutes to an hour and a half after a model change, he killed it.</p><p>Automation still needs supervision. It just needs less of it over time.</p><h3>Prompts are not permissions</h3><p>Louis runs much of his setup on a dedicated Mac mini. His agents have plenty of freedom on that machine, but the machine itself has strict limits. The agents use separate accounts, receive read-only access where possible, and work with restricted API keys.</p><p>There is a reason for that&#8230; one agent was getting close to its subscription limit, found an API key elsewhere, and used it to keep working. It spent roughly $300 in two minutes.</p><p>Asking an agent not to do something is not the same as preventing it from doing it. The safest guardrails live outside the prompt.</p><h3>Memory needs maintenance too</h3><p>Saving every correction may sound useful. Eventually, however, the agent starts carrying old and irrelevant instructions into new work.</p><p>Louis&#8217;s system reviews completed tasks for useful lessons and regularly cleans up duplicate or outdated material. Anything removed is archived rather than immediately deleted.</p><p>He is open about the fact that this is still experimental. A personal knowledge vault can become messy, and it can become a single point of failure. Giving an agent memory does not remove the need to manage that memory.</p><p>The full webinar includes his vault structure, the way he moves between coding agents and his approach to scheduled work. The audience Q&amp;A towards the end also gets into memory conflicts, spending limits and the awkward question of whether all this machinery is, in fact, making us <em>more</em> productive.</p><div class="callout-block" data-callout="true"><p>You can follow <a href="https://www.linkedin.com/in/whats-ai/">Louis-Fran&#231;ois Bouchard on LinkedIn</a> and find more of his work through the <a href="https://www.youtube.com/@WhatsAI">What&#8217;s AI YouTube channel</a> and <a href="https://louistowardsai.substack.com/">newsletter</a>. Louis has set himself a personal goal of reaching 100k YouTube subscribers this year, so if you find his work useful, subscribe and help him get there.</p></div><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Decoding FDE (Part 1): Deploy the engineer ]]></title><description><![CDATA[Why AI companies are embedding engineers inside customer teams, and what they discover when an API is no longer enough]]></description><link>https://newsletter.agentengineering.co/p/decoding-fde-part-1-deploy-the-engineer</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/decoding-fde-part-1-deploy-the-engineer</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Thu, 17 Sep 2026 15:47:20 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c51782e5-9d4c-4328-94d8-aeff4d55b265_1477x1065.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p>Apparently, three weeks inside an agent harness only made you want another series. The poll at the end of <a href="https://open.substack.com/pub/agenticengg/p/inside-the-harness-part-3-change?r=8770aj&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">Part 3</a> returned a resounding vote for more.</p><p>The timing works nicely, however. Earlier this week, we published a conversation with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Tanya&quot;,&quot;id&quot;:6902597,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e1f3b40f-571a-4e1e-a08b-9c56365fc228_48x48.png&quot;,&quot;uuid&quot;:&quot;2d847bcf-267b-49ac-9d04-ad74764ddd4d&quot;}" data-component-name="MentionToDOM"></span> Dixit, an FDE at Google. Rather than let the subject disappear into the <a href="https://open.substack.com/pub/agenticengg/p/episode-4-forward-deployed-engineer?r=8770aj&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">podcast archive</a>, we&#8217;re keeping the FDE momentum going and taking the conversation onto the page.</p><p>Henry (the same author who took us <em><a href="https://newsletter.agentengineering.co/p/inside-the-harness-part-1-start-with">Inside the Harness</a></em>) is back to pull the role apart properly. Across four parts, we&#8217;ll examine why FDE exists, what it isn&#8217;t, where it came from, and who should consider taking it on.</p></div><p>Over the past month, four friends have told me they were considering a career change. One is a front-end developer, another a solutions architect, the third a product manager, and the fourth an algorithm engineer. They come from different backgrounds, generations, and cities, but they all asked me the same question about the same three-letter acronym.</p><h3><strong>Is FDE worth pursuing?</strong></h3><p>FDE stands for <em><strong>Forward Deployed Engineer</strong></em>. Two years ago, the term was still confined to Palantir&#8217;s orbit. Today, recruiters lead with it, job boards are filling with it, and social media regularly nominates it as one of the AI era&#8217;s most valuable new roles.</p><p>In May 2026, OpenAI launched the <a href="https://openai.com/index/openai-launches-the-deployment-company/">OpenAI Deployment Company</a> with more than $4 billion in initial investment. Its premise was explicit. Embed engineers specialising in frontier-AI deployment inside organisations and help turn model capability into working systems. <a href="https://www.anthropic.com/careers/jobs">Anthropic</a> is also recruiting FDEs across the United States and Europe. A title once heard mostly within Palantir circles is becoming an industry category.</p><p>In an earlier essay, <em><a href="https://my.feishu.cn/wiki/AfvNwnZiEirKPSkmUz7cfDlYnM1">To Super Individuals</a></em>, I described the &#8220;human engine&#8221; as curiosity, self-learning, self-motivation, and hands-on competence reinforcing one another in a closed loop. But those qualities need somewhere to land. If super individuals are the raw material of the AI era&#8217;s new division of labour, FDE is one of the clearest job forms to emerge from 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_!QV0M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QV0M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.png 424w, https://substackcdn.com/image/fetch/$s_!QV0M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.png 848w, https://substackcdn.com/image/fetch/$s_!QV0M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.png 1272w, https://substackcdn.com/image/fetch/$s_!QV0M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QV0M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.png" width="1363" height="1154" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1154,&quot;width&quot;:1363,&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_!QV0M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.png 424w, https://substackcdn.com/image/fetch/$s_!QV0M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.png 848w, https://substackcdn.com/image/fetch/$s_!QV0M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.png 1272w, https://substackcdn.com/image/fetch/$s_!QV0M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26d27ca5-430f-4567-bc40-9eb2d56816b7_1363x1154.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>From my perspective, FDE belongs to neither consulting nor outsourcing. It is closer to the &#8220;super individual&#8221; given a specific organisational position, standing in the gap between model companies and their customers.</p><div><hr></div><p style="text-align: center;"><em>For less hype and more engineering, pull up a chair.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentengineering.co/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.agentengineering.co/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><div class="callout-block" data-callout="true"><p><strong>But where did the term &#8216;forward deployed&#8217; come from?</strong></p><p>The phrase has military roots. <a href="https://history.defense.gov/Portals/70/Documents/annual_reports/1988_DoD_AR.pdf">Forward-deployed forces</a> are stationed close to where they may be needed rather than held at a domestic base, allowing them to respond quickly when circumstances change.</p><p>Palantir brought the same idea into software. Instead of keeping engineers at headquarters and receiving requirements after they had passed through several layers, it placed them in the field to work directly with customers and take responsibility for the outcome. As one long-serving Palantir FDE <a href="https://community.palantir.com/t/who-are-palantir-fdes/6847/4">describes it</a>, the role is less about delivering predefined technical components and more about solving the customer&#8217;s problem alongside them.</p><p>It is no coincidence that OpenAI and Anthropic have returned to this model. The technology has changed, but the deployment principle has not. Put engineers close enough to the problem that they can see it clearly.</p></div><p>Across this four-part series, I&#8217;ll work through the three questions those conversations kept returning to.</p><ul><li><p>Is FDE just consulting dressed in AI clothing? Where does it diverge from traditional consulting?</p></li><li><p>Is it a more advanced form of software outsourcing? What separates it from the vendor work many engineers already do?</p></li><li><p>Would I suit an FDE role? Who thrives in it, and who gets crushed by it?</p></li></ul><p>My view is cautiously optimistic. FDE is gaining momentum, but it is not a universal escape hatch for anyone looking to reinvent their career in AI. Before we hype it, we need to understand what the job asks of people.</p><h3>Start with OpenAI&#8217;s deployment company</h3><p>If I had to choose one event that marked FDE&#8217;s move from specialist jargon into the mainstream, it would be 11 May 2026.</p><p>That was the day OpenAI announced the <a href="https://openai.com/index/openai-launches-the-deployment-company/">OpenAI Deployment Company</a>, a standalone business unit created to embed Forward Deployed Engineers inside organisations trying to put frontier AI to work. It launched with more than $4 billion in initial investment.</p><p>OpenAI also agreed to acquire Tomoro, a UK-based applied AI consultancy. The deal would bring ~150 experienced Forward Deployed Engineers and Deployment Specialists into the new company from day one.</p><p>The scale of the hiring is just as revealing. As of September 2026, a search of <a href="https://openai.com/careers/search/?q=forward%20deployed">OpenAI&#8217;s careers page</a> returns 25 forward-deployed roles across North America, Europe, Asia and Australia. Alongside general FDE positions are dedicated roles covering healthcare, legal work, government and semiconductors.</p><p>This is not a small experimental team. OpenAI is building a global deployment function with industry-specific depth.</p><p>Anthropic is making much the same move. Its Applied AI team is recruiting <a href="https://job-boards.greenhouse.io/anthropic/jobs/5391021008">Forward Deployed Engineers</a> to embed directly with strategic customers. Some positions require engineers to spend between 25 and 50 per cent of their time working at client sites.</p><p>One example is Anthropic&#8217;s partnership with the financial technology company FIS. Anthropic&#8217;s Applied AI team and FDEs are <a href="https://www.investor.fisglobal.com/news-releases/news-release-details/fis-brings-agentic-ai-banking-anthropic-starting-financial">embedded within FIS</a> to co-design a Financial Crimes AI Agent. Just as importantly, they are transferring enough knowledge for FIS to build and scale further agents independently.</p><p>This is the FDE role in practice. It is not pre-sales architecture, client training, or technical evangelism. FDEs work inside the customer&#8217;s environment, alongside the teams who understand the business, and turn a model into something that can survive contact with real data, controls, and workflows.</p><p>Put that relationship into a diagram and the three-way structure becomes clearer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1TWN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1TWN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png 424w, https://substackcdn.com/image/fetch/$s_!1TWN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png 848w, https://substackcdn.com/image/fetch/$s_!1TWN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png 1272w, https://substackcdn.com/image/fetch/$s_!1TWN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!1TWN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png" width="1456" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&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_!1TWN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png 424w, https://substackcdn.com/image/fetch/$s_!1TWN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png 848w, https://substackcdn.com/image/fetch/$s_!1TWN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png 1272w, https://substackcdn.com/image/fetch/$s_!1TWN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a57e448-ee4e-4947-87b8-21e8db1775b8_2172x724.png 1456w" sizes="auto, 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><span>Note that the two most informative lines in this diagram are the feedback loops that FDE transmits to both sides. </span><em><span>Towards the client side</span></em><span>, FDE does not sell the model as a SaaS; instead, it integrates the client&#8217;s data, permissions, compliance requirements, and internal systems into a pipeline capable of running the model. </span><em><span>Towards the model provider side</span></em><span>, FDE brings the client&#8217;s real pain points and failure samples back to the product and research teams to influence the roadmap &#8212; a faulty tool calling pattern may well become the next built-in abstraction in the SDK.</span></p><p><span>This is why FDE has been simultaneously reinstated by two leading model companies in this round, and the reasoning behind it goes far beyond a simple &#8220;we also want to follow Palantir&#8217;s lead and do consulting&#8221;. It serves as a </span><em><span>signal acquisition device</span></em><span> for model companies: the densest customer pain points on the front line can only be captured when their own personnel are present, as requirements relayed through partners always come with an extra layer of detachment. Anthropic is taking a hybrid approach: on one hand, it operates FDE in-house, and on the other, it builds joint venture deployment networks with consulting firms and PE giants. One leans toward self-operation, the other toward the ecosystem, but their core logic is identical: </span><em><strong><span>a model company is no longer just an API provider, but will dispatch engineers to embed in the client&#8217;s product team</span></strong><span>.</span></em></p><p>The most revealing lines in the diagram are the two feedback loops.</p><ul><li><p><em><strong>For the customer</strong></em>, an FDE does more than provide access to a model. They connect it to the customer&#8217;s data, permissions, compliance controls, and internal systems until it can operate inside a real workflow.</p></li><li><p><em><strong>For the model company</strong></em>, the loop runs in reverse. The FDE carries real pain points and failure cases back to the product and research teams. A tool-calling failure that often appears in customer deployments may eventually become a new abstraction built into the SDK.</p></li></ul><p>This is why the return of FDE goes far beyond model companies borrowing Palantir&#8217;s consulting playbook. An FDE also acts as a <em><strong>signal acquisition device</strong></em>. The hardest deployment problems are easiest to understand from inside the customer&#8217;s workflow. By the time requirements have travelled through several intermediaries, some of that signal has already been lost.</p><p>Direct FDEs preserve that feedback loop. Partner networks solve a different problem by extending the model company&#8217;s reach. Anthropic combines both approaches, embedding its own engineers while expanding deployment through the <a href="https://www.anthropic.com/news/claude-partner-network">Claude Partner Network</a> and a new <a href="https://www.anthropic.com/news/enterprise-ai-services-company">enterprise AI services company</a>.</p><p>The core logic is the same&#8230; <em><strong>a model company can no longer stop at providing an API. It must get close enough to the customer&#8217;s product team to understand why deployment fails and help make it work.</strong></em></p><p>That explains why FDE exists, but it doesn&#8217;t quite explain what kind of work it is.</p><p>From the outside, it looks like consulting with an API key&#8230; or outsourcing with better branding. In Part 2, we will debug both these assumptions.</p><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[🎙️ Episode 4: Forward Deployed Engineer, the job everyone's hiring for and no one can quite explain]]></title><description><![CDATA[Google's Tanya Dixit breaks down what the role involves, once you get past the title]]></description><link>https://newsletter.agentengineering.co/p/episode-4-forward-deployed-engineer</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/episode-4-forward-deployed-engineer</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Tue, 15 Sep 2026 15:07:32 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/215777479/3d285e48b99cbcd61f018390ebe12694.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Every so often the industry invents a job title, throws it at LinkedIn, and leaves the rest of us to figure out what it means. This year&#8217;s contender: <em>forward deployed engineer</em>. Half the internet insists it&#8217;s consulting with better branding. The other half seems convinced it&#8217;s the last job standing once AI writes all our code for us. I had opinions. I also had questions. </p><p>So for episode 4, I got <strong><a href="https://www.linkedin.com/in/tanya-dixit-computer-vision/">Tanya Dixit</a></strong> on the podcast, a forward deployed engineer at Google, to sort out which half is right (spoiler: neither, entirely). Yes, <em>also</em> called Tanya. No, we did not plan that but the transcript was a nightmare to edit.</p><p>Tanya&#8217;s route here was not a tidy straight line. She started out building satellite hardware in embedded systems, back before deep learning was cool enough to have its own hoodie. Then the math from her undergrad started clicking, she did a nano-degree, and somehow that spiralled into a master&#8217;s from ANU (university medal, no big deal) and a career that&#8217;s touched everything from enterprise AI to bushfire risk modelling. By the time she landed on forward deployed engineering, she&#8217;d basically done a full lap of the ML lifecycle. Build it, prove it, deploy it, fix it, repeat.</p><p>This is why the conversation doesn&#8217;t stay in the shallow end. We get into what her actual week looks like, and the coding-to-customer-calls ratio is not what most people guess. If you assume &#8220;forward deployed&#8221; is code for &#8220;technical enough to be in the room but not enough to be at the keyboard&#8221;... you&#8217;re in for a surprise.</p><div class="callout-block" data-callout="true"><p>Funnily enough, if this episode leaves you wanting to try the job rather than just hear about it, Tanya&#8217;s got you covered there too. On 19th September, she&#8217;s co-instructing a live workshop called <em><strong>Forward Deployed Engineering: From AI Demo to Production</strong></em> alongside <strong><a href="https://www.linkedin.com/in/keithbourne/">Keith Bourne</a></strong> (FDE at Tribe AI, author of <a href="https://www.amazon.com/Unlocking-Data-Generative-RAG-fundamentals/dp/1806381656/ref=sr_1_1?crid=2XYUOZ3539JON&amp;dib=eyJ2IjoiMSJ9.8qFnMqSH0Gq-G7SJbgcTYtiTT7RyvP2J3D2iJWzJh8nd5-CumwjJIMbpktOb6EA1TIzPF4aHZx95x0XDDMLlxJKAvLUGQdccP4QPsLqQactNjf5a0gwM1EivykU_H6UDwowxOMwR0quMeNKjmchoytrLfi8mLsntMpHRlKf7UQChIaxdCEUtbWuamwkvk18zBSN6fXPr_epLN9k1g9Zxal9NcN49f9O8NKfM9-y337A.hMZrhCi7KBHXx7QGdhsczfMQD65X_jKQYph2BGQoLDU&amp;dib_tag=se&amp;keywords=Unlocking+Data+with+Generative+AI+and+RAG&amp;qid=1789455927&amp;sprefix=unlocking+data+with+generative+ai+and+rag+%2Caps%2C336&amp;sr=8-1">Unlocking Data with Generative AI and RAG</a>). </p><p>It&#8217;s not a webinar where you nod along and take notes. You&#8217;re handed a realistic 90-day AI-agent deployment for a regulated customer, and you have to scope it, define the success metrics, design the security controls, and then defend the whole plan in a CISO hot seat, which is exactly as fun as it sounds. </p><p>You&#8217;ll walk away with an actual skills gap analysis, a career action plan, and a much clearer sense of whether this job is for you or just looks good from the outside.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://luma.com/fde-workshop?utm_source=nl&quot;,&quot;text&quot;:&quot;Get Me Into the FDE Hot Seat &#8594;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://luma.com/fde-workshop?utm_source=nl"><span>Get Me Into the FDE Hot Seat &#8594;</span></a></p></div><p>We also get properly into the thing everyone eyeing this career path wants to know: where does an FDE&#8217;s job stop and the product team&#8217;s job start? Tanya draws that line with far more precision than I expected going in, and her answer for why companies are suddenly hiring for this role like it&#8217;s going out of fashion made a few things click for me. Turns out standard SaaS playbooks and AI products are not playing the same game at all.</p><p>Then there&#8217;s the bit I haven&#8217;t stopped thinking about since we recorded. As models get better and coding gets, in her words, increasingly commoditised, does that mean the industry just needs fewer FDEs? She doesn&#8217;t reach for the easy optimist answer, and she doesn&#8217;t reach for the easy doom answer either. What she gives instead is a proper mental model for which parts of this job survive and which don&#8217;t... and yes, we did end up in recursive self-improvement territory, because apparently no 2026 tech conversation is complete without it.</p><p>If you're building AI products, working anywhere near enterprise customers, or just trying to work out where the humans still fit in this whole picture, do yourself a favour and watch the full thing rather than skimming for quotes.</p><p>The full episode is live now with audio and video. Go watch it, and if Tanya&#8217;s take here makes you want more, she&#8217;s finally starting to write on Substack too. </p><div class="callout-block" data-callout="true"><p>And if Tanya&#8217;s <em>Forward Deployed Engineering (FDE) Workshop: From AI Demo to Production</em> is still sitting in an open tab somewhere on your browser...</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://luma.com/fde-workshop?utm_source=nl&quot;,&quot;text&quot;:&quot;Save your seat immediately&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://luma.com/fde-workshop?utm_source=nl"><span>Save your seat immediately</span></a></p></div><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Inside the harness (Part 3): Change the tools]]></title><description><![CDATA[How the same ReAct loop becomes a coding agent and what happens when its context and capabilities no longer fit]]></description><link>https://newsletter.agentengineering.co/p/inside-the-harness-part-3-change</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/inside-the-harness-part-3-change</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Fri, 11 Sep 2026 15:04:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0f69415c-8f00-4971-8d96-1c8434c98dfa_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p>Two Fridays ago, our agent checked the weather. Last week, we gave it a plan and taught the harness to tap it on the shoulder when it wandered. This week, the same loop gets dropped into a codebase.</p><p>In the final part of <em>Inside the Harness</em>, we see how a change of tools creates a coding agent, then deal with what happens when its context and capabilities no longer fit. The loop stays put. The harness grows around it.</p><p>This also concludes our Friday scheduling experiment. Normal service resumes next issue. But before we dive in&#8230;</p><div class="poll-embed" data-attrs="{&quot;id&quot;:1205577}" data-component-name="PollToDOM"></div></div><p>Leave the harness exactly where it is. Swap the tools, point it at a codebase, and the same loop becomes a coding agent.</p><h3><strong><span>Same harness, new tools</span></strong></h3><p><span>The experiment here is deliberately simple: keep the harness and its system prompt as they are, and change only the tools. If the harness skeleton is genuinely generic, that one swap should be enough to turn a research agent into a coding agent.</span></p><p><span>The system prompt, therefore, stays almost untouched:</span></p><div class="callout-block" data-callout="true"><p><code>&lt;agent name=&#8221;Tara&#8221;&gt;</code></p><p><code>You&#8217;re a helpful agent.</code></p><p><code>&lt;/agent&gt;</code></p><p><code>&lt;task&gt;</code></p><p><code>Your task is to use the given tools to solve the user&#8217;s problem.</code></p><p><code>&lt;/task&gt;</code></p><p><code>&lt;notes&gt;</code></p><p><code>- Parallel tool calling is supported.</code></p><p><code>&lt;/notes&gt;</code></p></div><p>Only the toolset changes. Out go the research tools; in come three tools that let the agent work directly with a codebase, defined here in JSON:</p><div class="callout-block" data-callout="true"><p><code>[</code></p><p><code>{</code></p><p><code>&#8220;name&#8221;: &#8220;read_file&#8221;,</code></p><p><code>&#8220;description&#8221;: &#8220;Read a file from disk.&#8221;,</code></p><p><code>&#8220;input_schema&#8221;: {</code></p><p><code>&#8220;type&#8221;: &#8220;object&#8221;,</code></p><p><code>&#8220;properties&#8221;: {</code></p><p><code>&#8220;path&#8221;: { &#8220;type&#8221;: &#8220;string&#8221; }</code></p><p><code>},</code></p><p><code>&#8220;required&#8221;: [&#8221;path&#8221;]</code></p><p><code>}</code></p><p><code>},</code></p><p><code>{</code></p><p><code>&#8220;name&#8221;: &#8220;write_file&#8221;,</code></p><p><code>&#8220;description&#8221;: &#8220;Write content to a file. Set is_appending=true to append instead of overwrite.&#8221;,</code></p><p><code>&#8220;input_schema&#8221;: {</code></p><p><code>&#8220;type&#8221;: &#8220;object&#8221;,</code></p><p><code>&#8220;properties&#8221;: {</code></p><p><code>&#8220;path&#8221;: { &#8220;type&#8221;: &#8220;string&#8221; },</code></p><p><code>&#8220;content&#8221;: { &#8220;type&#8221;: &#8220;string&#8221; },</code></p><p><code>&#8220;is_appending&#8221;: { &#8220;type&#8221;: &#8220;boolean&#8221;, &#8220;default&#8221;: false }</code></p><p><code>},</code></p><p><code>&#8220;required&#8221;: [&#8221;path&#8221;, &#8220;content&#8221;]</code></p><p><code>}</code></p><p><code>},</code></p><p><code>{</code></p><p><code>&#8220;name&#8221;: &#8220;bash&#8221;,</code></p><p><code>&#8220;description&#8221;: &#8220;Execute a shell command.&#8221;,</code></p><p><code>&#8220;input_schema&#8221;: {</code></p><p><code>&#8220;type&#8221;: &#8220;object&#8221;,</code></p><p><code>&#8220;properties&#8221;: {</code></p><p><code>&#8220;command&#8221;: { &#8220;type&#8221;: &#8220;string&#8221; }</code></p><p><code>},</code></p><p><code>&#8220;required&#8221;: [&#8221;command&#8221;]</code></p><p><code>}</code></p><p><code>}</code></p><p><code>]</code></p></div><p>That&#8217;s it! <code>read_file</code> inspects the codebase, <code>write_file</code> changes it, and <code>bash</code> runs commands. Nothing else in the loop moves.</p><h4><strong><span>How this fixes a bug</span></strong></h4><p>Say the user asks the agent to fix a failing test. The run looks roughly like this:</p><div class="callout-block" data-callout="true"><p><code>user: add() in src/adder.py has a bug, pytest is failing, can you fix it?</code></p><p><code>assistant &#8594; bash(&#8221;pytest tests/test_adder.py&#8221;)</code></p><p><code>tool_result:</code></p><p><code>FAILED tests/test_adder.py::test_negative</code></p><p><code>assert add(-1, 1) == 0 # got -2</code></p><p><code>assistant &#8594; read_file(&#8221;src/adder.py&#8221;)</code></p><p><code>tool_result:</code></p><p><code>def add(a, b):</code></p><p><code>return a - b # &#8592; obvious at a glance</code></p><p><code>assistant &#8594; write_file(</code></p><p><code>&#8220;src/adder.py&#8221;,</code></p><p><code>&#8220;def add(a, b):\n return a + b\n&#8221;</code></p><p><code>)</code></p><p><code>assistant &#8594; bash(&#8221;pytest tests/test_adder.py&#8221;)</code></p><p><code>tool_result:</code></p><p><code>2 passed in 0.03s</code></p><p><code>assistant: Fixed. add() was written as a - b; changed it back to a + b, all tests pass.</code></p></div><p>That&#8217;s a complete code-change loop: run the test, inspect the source, make the change, then verify it. Underneath, it is still ReAct&#8212;think &#8594; tool use &#8594; tool result &#8594; think. No new control flow required.</p><p><span>Drawn out:</span></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vP9h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefa179a2-5035-415b-9447-8ed234a04ea1_3204x200.png 424w, https://substackcdn.com/image/fetch/$s_!vP9h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefa179a2-5035-415b-9447-8ed234a04ea1_3204x200.png 848w, https://substackcdn.com/image/fetch/$s_!vP9h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefa179a2-5035-415b-9447-8ed234a04ea1_3204x200.png 1272w, https://substackcdn.com/image/fetch/$s_!vP9h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefa179a2-5035-415b-9447-8ed234a04ea1_3204x200.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!vP9h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefa179a2-5035-415b-9447-8ed234a04ea1_3204x200.png" width="1456" height="91" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/efa179a2-5035-415b-9447-8ed234a04ea1_3204x200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:91,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41506,&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.agentengineering.co/i/215219617?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefa179a2-5035-415b-9447-8ed234a04ea1_3204x200.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_!vP9h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefa179a2-5035-415b-9447-8ed234a04ea1_3204x200.png 424w, https://substackcdn.com/image/fetch/$s_!vP9h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefa179a2-5035-415b-9447-8ed234a04ea1_3204x200.png 848w, https://substackcdn.com/image/fetch/$s_!vP9h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefa179a2-5035-415b-9447-8ed234a04ea1_3204x200.png 1272w, https://substackcdn.com/image/fetch/$s_!vP9h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefa179a2-5035-415b-9447-8ed234a04ea1_3204x200.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Three tools and one loop are enough for a straightforward bug fix. For something larger, such as a feature spanning several files, add the Plan-then-Act layer from Part 2. The job changes; the underlying structure does not.</p><p>That is the point: <em><strong>the harness skeleton is generic, while the tools determine the agent&#8217;s shape</strong></em><strong>.</strong> Replace <code>web_search</code> and <code>web_fetch</code> with <code>read_file</code>, <code>write_file</code>, and <code>bash</code>, and a research agent becomes a coding agent.</p><p><span>Speaking of context cost &#8212; some tools&#8217; return values are naturally huge. A bash build can dump thousands of lines of stdout. A </span><code>read_file</code><span> on a real file is hundreds of lines easy. A </span><code>web_fetch</code><span> against a real article is tens of thousands of tokens in one shot. Stuff all of that into context as-is and ten turns later the window pops.</span></p><div><hr></div><p style="text-align: center;"><em>For less hype and more engineering, pull up a chair.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentengineering.co/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.agentengineering.co/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h4><strong><span>Why does write_file support appending?</span></strong></h4><p><span>It is less about convenience than context. Without an append option, adding one line to a 1,000-line file could mean sending the entire file through the tool call again&#8212;and leaving all 1,000 lines sitting in the context window. Incremental writes avoid paying that cost for a tiny change.</span></p><p><span>The problem gets worse with tool results. A build can produce thousands of lines of output, while reading a real file can consume hundreds more. Keep feeding all of that back into the loop, and even a generous context window begins to look rather less generous.</span></p><p><span>The harness now needs somewhere else to put it. That brings us to context offloading.</span></p><h3><strong><span>Offloading: When context won&#8217;t fit</span></strong></h3><p><span>Every tool result goes back into the message history. A repository-wide search or noisy build can add thousands of tokens in a single call&#8212;useful in the moment, dead weight a few turns later.</span></p><p><span>Even a 200k-token context window begins to look rather less generous during a serious coding task. As it fills, the agent can lose track of earlier details, contradict itself, or simply run out of room.</span></p><p><span>The harness layer&#8217;s first answer is context offloading.</span></p><h4><strong><span>How offloading works</span></strong></h4><p>The rule is simple: when a tool result exceeds a set size, the harness writes the raw content to disk and leaves a path in the context. If the agent needs the details later, it retrieves them with <code>read_file</code>.</p><p>Suppose a <code>bash</code> call produces 1,000 tokens. The tool result the agent receives might look like this:</p><div class="callout-block" data-callout="true"><p><code>{</code></p><p><code>&#8220;role&#8221;: &#8220;tool&#8221;,</code></p><p><code>&#8220;tool_call_id&#8221;: &#8220;call_042&#8221;,</code></p><p><code>&#8220;content&#8221;: &#8220;[OFFLOADED] saved to abc123.log (1024 tokens). Use read_file to retrieve.&#8221;</code></p><p><code>}</code></p></div><p>The 1,000 tokens never enter the agent&#8217;s context. The harness intercepts the output and replaces it with a roughly 30-token pointer.</p><p>From the agent&#8217;s perspective, nothing else changes. It still calls <code>bash</code>, receives a tool result, and decides whether it needs to read the file. No new tool. No change to the ReAct loop. Just a smaller payload<strong>.</strong></p><h4><strong><span>Offloading is not compression</span></strong></h4><p><span>It is easy to confuse offloading with </span><strong><span>context compression</span></strong><span>. Both make room in the context window, but they do it differently:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bKBK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bKBK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png 424w, https://substackcdn.com/image/fetch/$s_!bKBK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png 848w, https://substackcdn.com/image/fetch/$s_!bKBK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png 1272w, https://substackcdn.com/image/fetch/$s_!bKBK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!bKBK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png" width="578" height="1863" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1863,&quot;width&quot;:578,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:86047,&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.agentengineering.co/i/215219617?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.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_!bKBK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png 424w, https://substackcdn.com/image/fetch/$s_!bKBK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png 848w, https://substackcdn.com/image/fetch/$s_!bKBK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png 1272w, https://substackcdn.com/image/fetch/$s_!bKBK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c170465-4b1e-4a2c-b8c7-295cde2bec7d_578x1863.png 1456w" sizes="auto, 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><span>They diverge on three axes:</span></p><ul><li><p><strong><span>Trigger timing:</span></strong><span> Offloading happens </span><strong><span>the moment the tool_result is born</span></strong><span> &#8212; the harness sees the return is over threshold and externalizes it on the spot. Compression happens </span><strong><span>the moment context is about to blow</span></strong><span> &#8212; only when occupancy is near the ceiling does the harness go back, scan history, and summarize.</span></p></li><li><p><strong><span>Lossy vs. lossless:</span></strong><span> Offloading is </span><strong><span>lossless and recoverable</span></strong><span> &#8212; not a byte of the original is lost; only the storage location changed, and the agent gets it back verbatim with read_file. Compression is </span><strong><span>lossy</span></strong><span> &#8212; summarize crushes 10 turns of conversation into a 200-word summary, and the dropped info is gone for good.</span></p></li><li><p><strong><span>Layer of abstraction:</span></strong><span> Offloading lives at the </span><strong><span>mechanism layer</span></strong><span>, handling hot/cold tiering of individual tool_results. Compression lives at the </span><strong><span>last-resort layer</span></strong><span>, packing whole stretches of history into archives. One is like the OS&#8217;s paging scheduler; the other is like tarring up old logs.</span></p></li></ul><p><span>The framing I like is this: </span><em><strong><span>offloading is hot/cold tiered storage; Compression is archival compression.</span></strong></em><span> The former goes first because it&#8217;s lossless and cheap. The latter is the fallback because it&#8217;s lossy but life-saving.</span></p><p>That is offloading&#8217;s place in the harness: when tool results are too large, move them instead of shrinking them.</p><div class="poll-embed" data-attrs="{&quot;id&quot;:1205618}" data-component-name="PollToDOM"></div><p>But fitting the agent&#8217;s working data solves only half the problem. Its capabilities may not fit either. That&#8217;s where Skill comes in.</p><h3><strong><span>Skill: Capability organization at the harness layer</span></strong></h3><p>So far, the harness has been helping one agent complete one task. Production introduces a different problem: the same agent may need dozens&#8212;or hundreds&#8212;of specialist capabilities. It might write Python one moment and diagnose a Kubernetes alert the next, each with a different set of instructions and pitfalls.</p><p>Loading all that guidance into the system prompt does not scale. If one Skill takes 3,000 tokens, fifty of them consume 150,000 tokens before the task has even begun. Even if they fit, the model must reason through a wall of mostly irrelevant instructions on every turn.</p><p>The harness&#8217;s answer to this capability explosion is Skill: make every capability available without loading all of them into context at once.</p><h4><strong><span>Load only the index at startup</span></strong></h4><p>Skill uses a simple form of progressive loading. Each Skill lives in a folder containing a <code>SKILL.md</code> file. At startup, the harness reads only the file&#8217;s frontmatter&#8212;a small metadata header containing its name and description&#8212;and adds that information to the system prompt&#8217;s <code>&lt;skills&gt;</code> index.</p><p>The full instructions remain on disk until the agent decides it needs them.</p><p>Here is the <code>&lt;skill-system&gt;</code> block from Claude Code:</p><div class="callout-block" data-callout="true"><p><code>&lt;skill-system&gt;</code></p><p><code>&lt;instruction&gt;</code></p><p><code>You have access to skills that provide optimized workflows for specific tasks. Each skill contains best practices, frameworks, and references to additional resources.</code></p><p><code>**Progressive Loading Pattern:**</code></p><p><code>1. When a user query matches a skill&#8217;s use case, immediately call `read_file` on the skill&#8217;s main file using the path attribute provided in the skill tag below</code></p><p><code>2. If an explicit requested skill is provided in the system context, load that skill first even if the user message is short</code></p><p><code>3. Read and understand the skill&#8217;s workflow and instructions</code></p><p><code>4. The skill file contains references to external resources under the same folder</code></p><p><code>5. Load referenced resources only when needed during execution</code></p><p><code>6. Follow the skill&#8217;s instructions precisely</code></p><p><code>&lt;/instruction&gt;</code></p><p><code>&lt;skills&gt;</code></p><p><code>&lt;skill name=&#8221;image-generation&#8221; path=&#8221;/Users/henry/.agents/skills/image-generation/SKILL.md&#8221;&gt;</code></p><p><code>Use this skill when the user requests to generate, create, imagine, or visualize images ...</code></p><p><code>&lt;/skill&gt;</code></p><p><code>&lt;skill name=&#8221;skill-creator&#8221; path=&#8221;/Users/henry/.agents/skills/skill-creator/SKILL.md&#8221;&gt;</code></p><p><code>Create new skills, modify and improve existing skills, and measure skill performance ...</code></p><p><code>&lt;/skill&gt;</code></p><p><code>&lt;/skills&gt;</code></p><p><code>&lt;/skill-system&gt;</code></p></div><h4><strong><span>What the prompt leaves out</span></strong></h4><p><span>Two absences matter:</span></p><ul><li><p><strong><span>No new tool.</span></strong><span> The harness does not need an invoke_skill() or load_skill() function. When the model selects a Skill, it uses the coding agent&#8217;s existing read_file tool to load the relevant SKILL.md. Skill simply reuses the filesystem.</span></p></li><li><p><strong><span>No Skill body.</span></strong><span> The index contains only a name, description, and path. The full instructions stay on disk until they are needed.</span></p></li></ul><p><span>That is progressive disclosure at the harness layer: keep the map in context, then load the instructions on demand.</span></p><h4><strong><span>Why not retrieve the right Skill?</span></strong></h4><p><span>Why not treat Skill selection as a search problem? Use BM25 or embeddings to match the user&#8217;s request against every Skill description, load the top results, and move on.</span></p><p><span>That can work, but if retrieval happens only once, the candidate set is fixed before the agent fully understands the task.</span></p><p><span>&#8220;Debug the alert that just fired&#8221; might begin with checking logs. Those logs may point towards a recent deployment, and resolving the incident may eventually require a company-specific postmortem. Each Skill becomes relevant at a different point in the reasoning chain.</span></p><p><span>Keeping the compact </span><code>&lt;skills&gt;</code><span> index in the system prompt lets the model reconsider its options on every ReAct turn. Retrieval could also be rerun each time, so the real choice is not search versus reasoning. It is one-shot selection versus selection that evolves with the task.</span></p><h4><strong><span>The full sequence</span></strong></h4><p>Startup, selection, and loading look 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_!Pvco!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pvco!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png 424w, https://substackcdn.com/image/fetch/$s_!Pvco!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png 848w, https://substackcdn.com/image/fetch/$s_!Pvco!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png 1272w, https://substackcdn.com/image/fetch/$s_!Pvco!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pvco!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png" width="1456" height="2137" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2137,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:285203,&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.agentengineering.co/i/215219617?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.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_!Pvco!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png 424w, https://substackcdn.com/image/fetch/$s_!Pvco!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png 848w, https://substackcdn.com/image/fetch/$s_!Pvco!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png 1272w, https://substackcdn.com/image/fetch/$s_!Pvco!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05123a4-46b9-4c1a-b86a-70813b2d693f_2110x3097.png 1456w" sizes="auto, 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><span>The one line in this sequence diagram worth observing is the </span><code>read_file</code><span> call in the middle. It uses the same generic tool the Coding Agent already had. No new abstraction. Harness support for Skill costs zero net new tool surface.</span></p><h4><strong><span>Skill on the harness map</span></strong></h4><p>Skill does not change the ReAct loop or add another tool. It simply separates what the agent should always see from what it should load only when needed.</p><p>That small act of deferral is what lets an agent carry a hundred capabilities without dragging a hundred playbooks through every turn. With that, the harness map is complete.</p><h3><strong><span>Closing the loop on </span></strong><em><strong><span>Inside the Harness</span></strong></em></h3><p>Over the past three Fridays, we&#8217;ve taken the agent harness apart together, one mechanism at a time. If you&#8217;ve been with us since that first weather forecast, thank you for following the loop all the way through.</p><p>By now, a harness should look less like black-box middleware and more like a stack of small mechanisms:</p><ul><li><p><strong>ReAct makes the agent move.</strong> It supplies the basic rhythm: reason, act, observe, repeat.</p></li><li><p><strong>Plan-then-Act gives it direction.</strong> The agent works from an explicit plan instead of chasing whatever catches its attention next.</p></li><li><p><strong>Nudge keeps it on track.</strong> The harness brings the plan back into focus when it begins to fade.</p></li><li><p><strong>Offloading protects the context window.</strong> Oversized results move elsewhere without being permanently discarded.</p></li><li><p><strong>Skill makes capabilities manageable.</strong> The index stays visible; the full instructions appear only when needed.</p></li></ul><p>Each layer answers a failure exposed by the one beneath it. Each does one job, and you can tune each without rebuilding the entire system.</p><p>That is the larger point of harness engineering. The ReAct loop makes an agent run. The harness is what gives it a chance of surviving contact with reality.</p><div class="callout-block" data-callout="true"><p><strong>Keep up with Henry</strong></p><p>If three weeks inside the harness have left you wanting to poke at one yourself, Henry (the author responsible for your past three Fridays inside the harness) is building <a href="https://github.com/deer-flow/llm-space">LLM Space</a>, an open-source desktop app for prototyping agent ideas, inspecting harness runs, and replaying the bits that went wrong. Rather on theme, really.</p><p>&#8594; <a href="https://github.com/deer-flow/llm-space">Explore LLM Space on GitHub</a><br>&#8594; <a href="https://x.com/henry19840301">Follow Henry on X</a></p></div><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Your RAG pipeline doesn’t know when it’s wrong]]></title><description><![CDATA[Watch now (102 mins) | Imran Ahmad on turning one-shot retrieval into a system that can evaluate its evidence, try again and admit when it doesn&#8217;t know]]></description><link>https://newsletter.agentengineering.co/p/free-webinar-your-rag-pipeline-doesnt</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/free-webinar-your-rag-pipeline-doesnt</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Tue, 08 Sep 2026 15:03:37 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/214542949/71ef2ad002e7068eb9a98afa3c22189d.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p>The more conversations we have with people building these systems, the more useful material we find that cannot be contained within a single weekly issue. Rather than leave those sessions sitting in an archive or force them into our usual publishing cadence, we&#8217;ve decided to make a little more room in the week for them.</p><p>Between our regular issues, we&#8217;ll occasionally share technical sessions that deserve more than a forgotten recording link. A couple of weeks ago, we brought you <a href="https://open.substack.com/pub/agenticengg/p/free-webinar-building-ai-agent-harnesses?r=8770aj&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">Nicole K&#246;nigstein&#8217;s webinar</a> on building AI agent harnesses for finance. This time, it&#8217;s <a href="https://www.linkedin.com/in/cloudanum/">Imran Ahmad</a>&#8217;s free webinar on the architecture of Agentic RAG.</p><p>Imran is a data scientist, AI architect, visiting professor, and the author of <em><a href="https://www.amazon.com/Agents-Every-Engineer-Must-Build/dp/1806109018/ref=sr_1_1?crid=357XEKWTU324E&amp;dib=eyJ2IjoiMSJ9.ElM92zcKd8pyXC5FH4xCW6-n6eV4tuLPkc6TfC4xzgVFRYF48gYjzNLRtQV8uBKLRcxWM_dmXd4X8crNRWB_QycD1I7HDEswhiAG6faLDVwTZKLIYzSIpvhnFvVPHYlnj55yUpmFhidqOsYmGxITTPGBO3x25GxFaFAkIQTGo9gPr04XVXnlEHGHcqwpy3I6m8_iXN32y0_28X5b7jocJAGzsqH5_uDIODXPc6OrmpQ.2jQzZVNakiuguitgnFF2c-_JyxnL-OstfY0ANHT2RmM&amp;dib_tag=se&amp;keywords=30+Agents+Every+AI+Engineer+Must+Build&amp;qid=1788788020&amp;sprefix=%2Caps%2C278&amp;sr=8-1">30 Agents Every AI Engineer Must Build</a></em>. His work looks beyond agent demos to the decisions that matter in production: when to add agency, where to place evaluation, and whether another loop is worth the extra cost and latency.</p><p>We&#8217;ve also put together a free take-home pack with Imran&#8217;s complete slide deck, a practical guide to 10 production agent patterns, and a one-page map of 30 agent architectures. You&#8217;ll find it later in the article.</p><p>Enough preamble. Let&#8217;s get into it!</p></div><p><span>Traditional RAG has an awkward habit: it keeps going.</span></p><p><span>Ask it about an internal company acronym, and it retrieves the closest available chunks. Misspell that acronym, and it still retrieves the closest available chunks. Those chunks are passed to the model, and the model produces an answer that may sound perfectly credible&#8212;even when the information needed to answer the question was never found.</span></p><p><span>Every component completed its assigned task. The system still failed.</span></p><p><span>That is the problem Imran explores in this free Agentic Engineering webinar on the architecture of agentic RAG.</span></p><p><span>His argument is not that conventional RAG is broken, nor that every retrieval pipeline now needs an agent. It is that traditional RAG is largely a one-way street. Once retrieval begins, there is often no meaningful point at which the system can inspect what it found, recognise that it is insufficient, and change course.</span></p><p><span>Agentic RAG introduces that missing loop.</span></p><h3><strong><span>RAG is really automated context generation</span></strong></h3><p><span>Large language models know a great deal, but they do not know everything about your organisation.</span></p><p><span>They may not know your internal terminology, current policies, proprietary research, or the particular meaning your company has assigned to an acronym. RAG addresses this by finding relevant information in an external knowledge source and adding it to the model&#8217;s prompt.</span></p><p><span>In other words, RAG automates context generation.</span></p><p><span>The familiar pipeline looks something like this: documents are divided into chunks, converted into embeddings, and stored in a vector database. When someone asks a question, the system searches for similar chunks, places them in the prompt, and asks the model to generate an answer from that context.</span></p><p><span>It is a useful architecture. There is a reason it became one of the first patterns companies reached for when building applications with large language models.</span></p><p><span>But its simplicity relies on several assumptions: that the user&#8217;s question is also a good search query, that the first retrieval will find the right evidence, that similarity means relevance, and that adding more context will improve the answer.</span></p><p><span>None of those assumptions is reliably true.</span></p><h3><strong><span>The problem with a one-way pipeline</span></strong></h3><p><span>Consider a user asking about an internal tool but misspelling its name.</span></p><p><span>The vector search does not necessarily respond with &#8220;I can&#8217;t find that.&#8221; It returns whichever chunks happen to be mathematically closest. A reranker may rearrange those chunks, but it is still ranking a weak set of results. The model then receives that material and does what it was designed to do: generate a plausible response.</span></p><p><span>The failure began before generation. The model was handed evidence that never supported the question.</span></p><p><span>Traditional RAG has no natural recovery mechanism here. It retrieves once and moves forward. It does not necessarily ask whether the query was misunderstood, whether a different source should be searched, or whether the available evidence is strong enough to justify an answer.</span></p><p><span>Adding an agent changes the shape of that pipeline. Retrieval can become a loop:</span></p><p style="text-align: center;"><strong>Plan</strong></p><p style="text-align: center;">&#8595;</p><p style="text-align: center;"><strong>Retrieve </strong></p><p style="text-align: center;">&#8595;</p><p style="text-align: center;"><strong>Evaluate </strong></p><p style="text-align: center;">&#8595;</p><p style="text-align: center;"><strong>Adapt</strong></p><p style="text-align: center;">&#8595;</p><p style="text-align: center;"><strong>Try again</strong></p><p><span>That sounds like a small architectural change. In practice, however, it changes where the system is allowed to exercise judgement.</span></p><div class="callout-block" data-callout="true"><p style="text-align: center;"><strong>A little something for being here</strong></p><p style="text-align: center;">If you&#8217;d rather build the patterns than just read about them, Imran is teaching a live, six-hour workshop on September 12.</p><p style="text-align: center;">In <em>10 Essential AI Agents Every Engineer Must Build</em>, you&#8217;ll build 10 working agents spanning RAG, tool use, fact-checking, multi-agent orchestration, multimodal AI, and autonomous planning. You&#8217;ll leave with the complete code repository, reusable architectures, and a complimentary copy of <em><a href="https://www.amazon.com/Agents-Every-Engineer-Must-Build/dp/1806109018/ref=sr_1_1?crid=357XEKWTU324E&amp;dib=eyJ2IjoiMSJ9.ElM92zcKd8pyXC5FH4xCW6-n6eV4tuLPkc6TfC4xzgVFRYF48gYjzNLRtQV8uBKLRcxWM_dmXd4X8crNRWB_QycD1I7HDEswhiAG6faLDVwTZKLIYzSIpvhnFvVPHYlnj55yUpmFhidqOsYmGxITTPGBO3x25GxFaFAkIQTGo9gPr04XVXnlEHGHcqwpy3I6m8_iXN32y0_28X5b7jocJAGzsqH5_uDIODXPc6OrmpQ.2jQzZVNakiuguitgnFF2c-_JyxnL-OstfY0ANHT2RmM&amp;dib_tag=se&amp;keywords=30+Agents+Every+AI+Engineer+Must+Build&amp;qid=1788788020&amp;sprefix=%2Caps%2C278&amp;sr=8-1">30 Agents Every AI Engineer Must Build</a></em>.</p><p style="text-align: center;">Tickets are normally $169.99. Agentic Engineering subscribers get 20% off with the private code <strong>AE20</strong>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://luma.com/10aiagents?coupon=AE20&amp;utm_source=agenticengnl&quot;,&quot;text&quot;:&quot;Get your ticket here&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://luma.com/10aiagents?coupon=AE20&amp;utm_source=agenticengnl"><span>Get your ticket here</span></a></p></div><h3><strong><span>Add agency where a specific failure needs it</span></strong></h3><p><span>&#8220;Agentic RAG&#8221; can make it sound as though the entire system must suddenly become autonomous. That is not the useful way to think about it.</span></p><p><span>Agency can be introduced at different points in the pipeline, depending on the failure you are trying to correct.</span></p><p><span>At the retrieval stage, an agent can interpret the user&#8217;s request, break a complicated question into smaller searches, rewrite a weak query, or choose between available retrieval tools.</span></p><p><span>After retrieval, it can examine the evidence and ask whether the results are truly relevant. If important information is missing, it can search again rather than blindly passing weak context downstream.</span></p><p><span>At the generation stage, another check can compare the final answer with the retrieved evidence, add citations, or reject claims that the sources do not support.</span></p><p><span>You may not need all three.</span></p><p><span>If retrieval is the main weakness, putting another agent around generation could add cost without fixing the actual problem. If the answer is poorly grounded despite strong retrieval, changing the search strategy may not help.</span></p><p><span>The important question is not, &#8220;How do we make this RAG pipeline agentic?&#8221;</span></p><p><span>It is, &#8220;Where does our existing pipeline fail, and would adding judgement at that point help it recover?&#8221;</span></p><p><span>Imran&#8217;s own course materials put the principle neatly: &#8220;Only add agency when you can name the failure it fixes.&#8221; The accompanying </span><a href="https://www.neurals.ca/agents/agentic-rag/"><span>Agentic RAG course hub</span></a><span> maps different failure modes to patterns including adaptive retrieval, corrective RAG, GraphRAG and groundedness checks.</span></p><h3><strong><span>A useful system needs the courage to say &#8220;I don&#8217;t know&#8221;</span></strong></h3><p><span>One of the most valuable behaviours in a knowledge system may also be one of the least impressive in a demo: refusing to answer.</span></p><p><span>If the retrieved passages do not contain the requested information, a reliable system should be able to say so. It might ask the user to clarify an acronym, try another source or explain that it could not find enough evidence.</span></p><p><span>That is much more useful than producing a polished answer from irrelevant material.</span></p><p><span>An evaluator inside the retrieval loop can provide that gate. It can score the evidence, check whether it covers the question, and decide whether the system should proceed, search again, or stop.</span></p><p><span>Of course, adding an evaluator does not make the system correct. The evaluator can make a poor judgement too. Its decisions need test cases, thresholds, and traces of their own.</span></p><p><span>The improvement is architectural rather than magical: the system now has a place where failure can be noticed.</span></p><h3><strong><span>More context is not always better context</span></strong></h3><p><span>Another assumption behind basic RAG is that retrieving more information gives the model a better chance of answering accurately.</span></p><p><span>Initially, it often does. But the relationship does not continue indefinitely.</span></p><p><span>As more chunks enter the prompt, relevant evidence competes with irrelevant material. Different sources may contradict each other. A precise but lengthy passage can pull the model away from the user&#8217;s original question. Imran describes this as a signal-and-noise problem: the goal is not to maximise context but to preserve the right signal.</span></p><p><span>Large context windows do not remove this problem. Being able to place the equivalent of several books into a prompt does not mean the model will identify the right paragraph, weigh every source correctly, or remain focused on the original task.</span></p><p><span>This is where an agent can help curate context rather than merely accumulate it. It can search for missing evidence, reject weak results, and recognise contradictions before generation.</span></p><p><span>But again, that judgement has a price.</span></p><h3><strong><span>Retrieval should reflect the question being asked</span></strong></h3><p><span>A short factual question and a request to explain a complete block of code do not require the same kind of context.</span></p><p><span>With a fixed RAG pipeline, they may still be treated in much the same way. The same chunk size, overlap, retrieval algorithm, and number of results are used regardless of the question.</span></p><p><span>An agentic retrieval layer can make the process more adaptive. Depending on the tools and indexes available, it can choose a retrieval strategy, change the query, search multiple sources, or gather a wider section of material when the answer depends on information spread across several passages.</span></p><p><span>For a compound question, it might separate the request into several searches and confirm that each part has been answered. For a vague query, it might rewrite the search or ask the user for clarification. For a technical question, it may retrieve a larger, more coherent unit rather than an isolated fragment.</span></p><p><span>The underlying trade-offs do not disappear. Larger chunks carry more context but reduce precision. Smaller chunks may retrieve precisely while cutting away something essential. Semantic chunking can preserve meaning, but it introduces more computation and complexity.</span></p><p><span>Agency allows the system to make choices within those trade-offs. It does not abolish them.</span></p><h3><strong><span>If the system can change course, you need to see where it went</span></strong></h3><p><span>A fixed pipeline is relatively easy to follow. The query went in, a set of chunks came back, and the model generated an answer.</span></p><p><span>An agentic system may rewrite the query, call more than one retriever, reject the first result, alter its plan, and try again. That adaptability is the point&#8212;but it also makes the system harder to inspect.</span></p><p><span>Imran recommends a provenance layer that records the path the system took. What did it search for? Which evidence did it retrieve? Why was one result accepted and another rejected? Which tool did it choose? Where did the final claim come from?</span></p><p><span>Without those traces, it becomes difficult to distinguish a retrieval failure from an evaluation failure or a generation failure. The system may be more capable, but the team responsible for it will know less about why it behaved as it did.</span></p><p><span>Observability is therefore not an optional dashboard added after the architecture is complete. It is part of what makes an adaptive retrieval loop governable.</span></p><h3><strong><span>Agency sends a bill</span></strong></h3><p><span>Each planning step, evaluation, and retry may require another model call. That adds latency, token usage, and another possible point of failure.</span></p><p><span>A system that runs three searches and evaluates each one may retrieve better evidence than a one-shot pipeline. It may also take longer and cost considerably more.</span></p><p><span>Imran&#8217;s advice is refreshingly blunt: &#8220;Don&#8217;t hire a PhD for the job of a receptionist.&#8221;</span></p><p><span>A small, focused model may be enough to classify a query, choose a retriever, or judge whether two passages are relevant. Some of these decisions can be handled by local or quantised models. Others may not require an LLM at all.</span></p><p><span>The most sophisticated model should not automatically be placed inside every part of the loop. The model&#8212;and the loop itself&#8212;should be proportionate to the decision being made.</span></p><p><span>This is where agentic RAG becomes an engineering problem rather than a naming exercise. The team has to decide where another round of reasoning is worth its cost.</span></p><div class="callout-block" data-callout="true"><p style="text-align: center;"><strong><span data-color="#fd2e1b" style="color: rgb(253, 46, 27);">Still thinking about it?</span></strong></p><p style="text-align: center;"><span>You could be building these systems with Imran on September 12. </span></p><p style="text-align: center;"><span>Agentic Engineering subscribers can take 20% off the workshop with code </span><strong><span>AE20</span></strong><span> if ten working agents sound more useful than ten more bookmarked tutorials.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://luma.com/10aiagents?coupon=AE20&amp;utm_source=agenticengnl&quot;,&quot;text&quot;:&quot;SAVE YOUR SEAT&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://luma.com/10aiagents?coupon=AE20&amp;utm_source=agenticengnl"><span>SAVE YOUR SEAT</span></a></p></div><h3><span>The goal is not maximum agency</span></h3><p><span>The choice is not between an outdated RAG pipeline and a fully autonomous knowledge agent.</span></p><p><span>There is a spectrum between them.</span></p><p><span>A conventional pipeline may be entirely sufficient for a narrow, predictable knowledge base. A retrieval evaluator may solve the most serious failure without changing anything else. A more complex investigation might justify query decomposition, multiple retrieval tools, and several rounds of evidence gathering.</span></p><p><span>The right architecture is the smallest one that can recognise and recover from the failures that matter.</span></p><p><span>That is the real case for agentic RAG. It does not simply retrieve more information or attach an agent to a familiar acronym. It gives the system a chance to notice that the evidence is weak before fluent language turns that weakness into an answer.</span></p><h3>Your webinar companion pack</h3><ul><li><p><span>Explore the </span><a href="https://github.com/cloudanum/webinar-agentic-rag-labs"><span>hands-on labs</span></a> and supporting material on GitHub.</p></li><li><p>Download <em><strong><a href="https://agentic-rag-toolkit.packt-4364.chatgpt.site/">The Agent Engineer&#8217;s Field Guide</a></strong></em> for 10 production agent patterns, including when to use them, what tends to break first, and how to evaluate them.</p></li><li><p>Download <em><strong><a href="https://agentic-rag-toolkit.packt-4364.chatgpt.site/">30 Agents at a Glance</a></strong></em> for a one-page map of all 30 architectures, organised from foundational patterns to specialised and domain-specific systems.</p></li><li><p>Download Imran&#8217;s <a href="https://agentic-rag-toolkit.packt-4364.chatgpt.site/">slide deck</a> to revisit the architectures, retrieval loops, and implementation patterns later.</p></li><li><p><span>Continue through the patterns in Imran&#8217;s book, </span><em><strong><a href="https://www.amazon.com/Agents-Every-Engineer-Must-Build/dp/1806109018/ref=sr_1_1?crid=357XEKWTU324E&amp;dib=eyJ2IjoiMSJ9.ElM92zcKd8pyXC5FH4xCW6-n6eV4tuLPkc6TfC4xzgVFRYF48gYjzNLRtQV8uBKLRcxWM_dmXd4X8crNRWB_QycD1I7HDEswhiAG6faLDVwTZKLIYzSIpvhnFvVPHYlnj55yUpmFhidqOsYmGxITTPGBO3x25GxFaFAkIQTGo9gPr04XVXnlEHGHcqwpy3I6m8_iXN32y0_28X5b7jocJAGzsqH5_uDIODXPc6OrmpQ.2jQzZVNakiuguitgnFF2c-_JyxnL-OstfY0ANHT2RmM&amp;dib_tag=se&amp;keywords=30+Agents+Every+AI+Engineer+Must+Build&amp;qid=1788788020&amp;sprefix=%2Caps%2C278&amp;sr=8-1"><span>30 Agents Every AI Engineer Must Build</span></a></strong></em><strong>.</strong></p></li></ul><div><hr></div><p style="text-align: center;"><em>For less hype and more engineering, pull up a chair.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentengineering.co/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.agentengineering.co/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Inside the harness (Part 2): Give it a plan]]></title><description><![CDATA[How planning and nudges keep a ReAct loop from losing the plot]]></description><link>https://newsletter.agentengineering.co/p/inside-the-harness-part-2-give-it</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/inside-the-harness-part-2-give-it</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Fri, 04 Sep 2026 15:33:29 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9fea4ab5-0384-496c-857c-e442eaa15441_1478x1064.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code> </h4><p>Last week in <em>Part 1</em>, we stripped the agent harness back to its ReAct loop and left it walking in rather expensive circles.</p><p>This week, we give it a plan. <em>Part 2</em> looks at how <code>write_todos</code>, a quick briefing and well-timed nudges add strategy without changing the loop underneath.</p><p>Turns out, even sophisticated agents benefit from writing things down <em>and</em> being reminded to look at what they wrote.</p></div><p><span>Throw a complex question at pure multi-turn ReAct, and a structural flaw shows up &#8212; the model walks step by step with no global view. Hit it with a research question that needs five or six angles assembled together, and it&#8217;ll grab the most obvious two or three in the first few steps and call it done. It doesn&#8217;t even know which angles it skipped.</span></p><p><span>The fix is crude but effective: </span><em><span>make it write the plan down first, then execute</span></em><span>.</span></p><h3><strong><span>A new tool: write_todos</span></strong></h3><p><span>In the Deep Research harness, we add one new tool: </span><code>write_todos</code><span>. It does nothing! It literally just writes a TODO list into the agent&#8217;s state. The flip switch is one line in the system prompt:</span></p><div class="callout-block" data-callout="true"><p><code>&lt;agent name=&#8221;Tara&#8221;&gt;</code></p></div><p><span>You&#8217;re a helpful agent.</span></p><div class="callout-block" data-callout="true"><p><code>&lt;/agent&gt;</code></p><p><code>&lt;task&gt;</code></p><p><code>Your task is to use the given tools to solve the user&#8217;s problem.</code></p><p><code>Use `write_todos` to make a plan and break down tasks.</code></p><p><code>&lt;/task&gt;</code></p><p><code>&lt;notes&gt;</code></p><p><code>- Parallel tool calling is supported.</code></p><p><code>- If you are unfamiliar with a topic, you can use a one-time `web_search` to get a general understanding of it before planning.</code></p><p><code>- Don&#8217;t forget to update todos using `write_todos` after each task is done.</code></p><p><code>&lt;/notes&gt;</code></p></div><p><span>Look at the line inside </span><code>&lt;task&gt;: Use \write_todos `to make a plan and break down tasks.`</code><span> That single sentence flips the model from &#8220;see one step, take one step&#8221; to &#8220;plan first, then act.&#8221;</span></p><p><span>The tool&#8217;s schema is dirt simple:</span></p><div class="callout-block" data-callout="true"><p><code>{</code></p><p><code>&#8220;name&#8221;: &#8220;write_todos&#8221;,</code></p><p><code>&#8220;description&#8221;: &#8220;Create or update the current plan.&#8221;,</code></p><p><code>&#8220;input_schema&#8221;: {</code></p><p><code>&#8220;type&#8221;: &#8220;object&#8221;,</code></p><p><code>&#8220;properties&#8221;: {</code></p><p><code>&#8220;todo_list&#8221;: {</code></p><p><code>&#8220;type&#8221;: &#8220;array&#8221;,</code></p><p><code>&#8220;items&#8221;: {</code></p><p><code>&#8220;type&#8221;: &#8220;object&#8221;,</code></p><p><code>&#8220;properties&#8221;: {</code></p><p><code>&#8220;content&#8221;: { &#8220;type&#8221;: &#8220;string&#8221; },</code></p><p><code>&#8220;status&#8221;: {</code></p><p><code>&#8220;type&#8221;: &#8220;string&#8221;,</code></p><p><code>&#8220;enum&#8221;: [&#8221;pending&#8221;, &#8220;in_progress&#8221;, &#8220;completed&#8221;]</code></p><p><code>}</code></p><p><code>},</code></p><p><code>&#8220;required&#8221;: [&#8221;content&#8221;, &#8220;status&#8221;]</code></p><p><code>}</code></p><p><code>}</code></p><p><code>},</code></p><p><code>&#8220;required&#8221;: [&#8221;todo_list&#8221;]</code></p><p><code>}</code></p><p><code>}</code></p></div><h3><strong><span>The new behavior</span></strong></h3><p><span>Add this one tool and the loop visibly changes shape. Take a sample question: &#8220;research the current state of Chinese EV exports to Europe in 2026.&#8221; The transcript now looks like:</span></p><div class="callout-block" data-callout="true"><p><code>user: Research the state of Chinese EV exports to Europe in 2026</code></p><p><code>assistant &#8594; tool_use: write_todos([</code></p><p><code>{ content: &#8220;Understand the overall scale of Chinese EV exports to Europe in 2026&#8221;, status: &#8220;in_progress&#8221; },</code></p><p><code>{ content: &#8220;Map the main players and their European market share&#8221;, status: &#8220;pending&#8221; },</code></p><p><code>{ content: &#8220;Track EU tariff policy and anti-subsidy investigations&#8221;, status: &#8220;pending&#8221; },</code></p><p><code>{ content: &#8220;Summarize local manufacturing and channel strategy&#8221;, status: &#8220;pending&#8221; }</code></p><p><code>])</code></p><p><code>assistant &#8594; tool_use: web_search(&#8221;2026 Chinese EV Europe export data&#8221;)</code></p><p><code>... (several web_search / web_fetch turns) ...</code></p><p><code>assistant &#8594; tool_use: write_todos([</code></p><p><code>{ content: &#8220;Understand the overall scale of Chinese EV exports to Europe in 2026&#8221;, status: &#8220;completed&#8221; },</code></p><p><code>{ content: &#8220;Map the main players and their European market share&#8221;, status: &#8220;in_progress&#8221; },</code></p><p><code>...</code></p><p><code>])</code></p><p><code>... (work through the remaining items) ...</code></p><p><code>assistant: &lt;final answer&gt;</code></p></div><p><span>The biggest difference vs. pure multi-turn ReAct is that </span><code>write_todos</code><span> call right at the top &#8212; it pins down the exam outline upfront. If execution skips a dimension, there&#8217;s an unchecked pending item sitting on the plan. The model comes back and picks it up.</span></p><div><hr></div><p style="text-align: center;"><em>Building agents that need to work beyond the demo? Join us for the engineering that holds up in production.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentengineering.co/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.agentengineering.co/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p><span>Side-by-side helps. Pure multi-turn ReAct first:</span></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!91Uj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.png 424w, https://substackcdn.com/image/fetch/$s_!91Uj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.png 848w, https://substackcdn.com/image/fetch/$s_!91Uj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.png 1272w, https://substackcdn.com/image/fetch/$s_!91Uj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!91Uj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.png" width="1456" height="164" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:164,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22744,&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.agentengineering.co/i/214003496?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.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_!91Uj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.png 424w, https://substackcdn.com/image/fetch/$s_!91Uj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.png 848w, https://substackcdn.com/image/fetch/$s_!91Uj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.png 1272w, https://substackcdn.com/image/fetch/$s_!91Uj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc54a89-0de1-4098-8ce6-4c6b0479bd91_1780x200.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p><span>Each step only looks at the current </span><code>tool_result</code><span>. No looking back, no looking ahead. Now Plan-then-Act:</span></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N2iI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.png 424w, https://substackcdn.com/image/fetch/$s_!N2iI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.png 848w, https://substackcdn.com/image/fetch/$s_!N2iI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.png 1272w, https://substackcdn.com/image/fetch/$s_!N2iI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!N2iI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.png" width="1456" height="88" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:88,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41428,&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.agentengineering.co/i/214003496?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.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_!N2iI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.png 424w, https://substackcdn.com/image/fetch/$s_!N2iI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.png 848w, https://substackcdn.com/image/fetch/$s_!N2iI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.png 1272w, https://substackcdn.com/image/fetch/$s_!N2iI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8deff7-c8ef-4d5f-a165-b35d73807dd4_3319x200.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p><span>What&#8217;s new: a plan at the start, and a state-update after each step. The loop itself didn&#8217;t change. We just added one tool and one line of system prompt.</span></p><p><span>That&#8217;s the Plan-then-Act skeleton. In practice, you&#8217;ll run into two small pitfalls:</span></p><ul><li><p><span>First, on unfamiliar topics, the plan goes off the rails. The model has only a vague grasp of the field. The four sub-tasks it lists from that half-baked understanding might miss the most important dimension from the start.</span></p></li><li><p><span>Second, mid-run, the model forgets to update todos. It finishes task two but doesn&#8217;t call </span><code>write_todos</code><span> to mark it completed, and the new sub-task it discovered along the way never makes it onto the list. The plan quietly decays.</span></p></li></ul><p><span>Two small patches, one for each.</span></p><h3><strong><span>Patch A: Brief yourself before planning</span></strong></h3><p><span>The first pitfall is easy to grok &#8212; </span><em><span>the model can&#8217;t plan something it doesn&#8217;t recognize</span></em><span>.</span></p><p><span>Say the user throws a niche term at it, like &#8220;research how pp-ocr performs on long-tail Chinese classical text.&#8221; The model has only a fuzzy notion of pp-ocr (&#8221;Baidu&#8217;s open-source OCR engine, I think?&#8221;). If it goes straight to </span><code>write_todos</code><span>, it&#8217;ll probably list four lukewarm items: figure out what it is, check performance, list pros and cons, summarize. The dimensions that actually matter (its multilingual branches, version history, benchmark against a specific competitor) never get touched.</span></p><h4><strong><span>One-time briefing</span></strong></h4><p><span>The patch is light. In the system prompt, explicitly allow the agent one web_search </span><em><strong><span>before</span></strong></em><span> planning, purely to build basic familiarity with the topic:</span></p><div class="callout-block" data-callout="true"><p><code>&lt;notes&gt;</code></p><p><code>- Parallel tool calling is supported.</code></p><p><code>- If you are unfamiliar with a topic, you can use a one-time `web_search`</code></p><p><code>to get a general understanding of it before planning.</code></p><p><code>- Don&#8217;t forget to update todos using `write_todos` after each task is done.</code></p><p><code>&lt;/notes&gt;</code></p></div><p><span>Two key phrases here: one-time and before planning. This isn&#8217;t a blanket &#8220;search whenever you want&#8221; &#8212; it&#8217;s a hard-coded </span><em><strong><span>protocol</span></strong></em><span> in the system prompt: before you plan, you can do exactly one web_search to brief yourself.</span></p><p><span>With that briefing, the model searches &#8220;pp-ocr&#8221; once, skims the first few snippets, learns it&#8217;s a PaddlePaddle-family OCR model with v1 through v5, multilingual branches for Chinese / English / Japanese / Korean, server-side and lightweight variants&#8230; </span><em><strong><span>then</span></strong></em><span> writes the todos. The plan turns from &#8220;look up what it is&#8221; (</span><em><span>useless</span></em><span>) into &#8220;compare v4 vs v5 recognition accuracy on handwritten classical text&#8221; (</span><em><span>actionable</span></em><span>).</span></p><p><span>That patches the input side of planning. The next pitfall is on the output side &#8212; the model forgets to update its own todos.</span></p><h3><strong><span>Patch B: Nudge after every step</span></strong></h3><p><span>The second pitfall &#8212; </span><em><strong><span>the model forgets to maintain its todos</span></strong></em><strong><span>.</span></strong></p><p><span>You&#8217;ve seen this. The opening plan lists four neat items. Item one gets done; the model jumps to item two without updating anything. Halfway through item three, it realizes it needs a new sub-task, but instead of appending it to the list, it just searches. By the end of the run, the plan state looks the same as it did after step one. Updated once, never again.</span></p><p><span>Putting &#8220;remember to update todos&#8221; in the system prompt isn&#8217;t enough to fix this. The prompt is a one-shot backdrop. After a few turns, the model&#8217;s attention weights have shifted to the more recent </span><code>tool_results</code><span>. The backdrop&#8217;s reminders fade.</span></p><h4><strong><span>Mechanism: nudge</span></strong></h4><p><span>The harness&#8217;s solution is called a </span><em><strong><span>nudge</span></strong><span> &#8212; </span><strong><span>after every tool_result</span></strong></em><span>, when the todo list is non-empty, the harness hard-codes an extra reminder onto the context for the model:</span></p><div class="callout-block" data-callout="true"><p><code>Don&#8217;t forget to update todos using `write_todos` after each task is done.</code></p></div><p><span>This isn&#8217;t a user message, and it isn&#8217;t an assistant message the model generated. It&#8217;s a system-reminder spliced in by the harness right after the </span><code>tool_result</code><span>. From the model&#8217;s perspective: every time it finishes a step and is about to plan its next move, this line is in its face.</span></p><p><span>In sequence diagram form:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SpWB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SpWB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png 424w, https://substackcdn.com/image/fetch/$s_!SpWB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png 848w, https://substackcdn.com/image/fetch/$s_!SpWB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png 1272w, https://substackcdn.com/image/fetch/$s_!SpWB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!SpWB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png" width="1456" height="1427" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1427,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119994,&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.agentengineering.co/i/214003496?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.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_!SpWB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png 424w, https://substackcdn.com/image/fetch/$s_!SpWB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png 848w, https://substackcdn.com/image/fetch/$s_!SpWB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png 1272w, https://substackcdn.com/image/fetch/$s_!SpWB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465b2827-7429-463c-989f-efbecdde23b7_1484x1454.png 1456w" sizes="auto, 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><span>Two harness actions worth noticing: one, pass the tool_result back to the LLM as-is; two, when &#8220;current todo list is non-empty,&#8221; </span><em><strong><span>also</span></strong></em><span> append a system-reminder. Both arrive in the same message. From the model&#8217;s view, it looks as if the tool return came bundled with a built-in nudge.</span></p><p><span>And the nudge </span><em><strong><span>fires on every tool_result.</span></strong></em><span> Not just at the start, not every few rounds. As long as the plan isn&#8217;t done, it keeps firing. The model&#8217;s attention gets pulled back to &#8220;what&#8217;s my plan progress?&#8221; again and again, and the probability of forgetting to update drops sharply.</span></p><p><span>Patch A covers the input side of planning. Patch B covers the output side. Together with the </span><code>write_todos</code><span> tool itself, the harness for Deep Research is done &#8212; from single-turn ReAct, to multi-turn loop, to Plan-then-Act with two patches. That&#8217;s all of it.</span></p><p><span>But what does the same skeleton look like with a different toolset? </span>That&#8217;s the crucial question we&#8217;ll answer in <em><a href="https://newsletter.agentengineering.co/p/inside-the-harness-part-3-change">Part 3</a></em>, where we cut to coding&#8230; then follow the loop until its tool results and capabilities no longer fit.</p><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p>Tanya D&#8217;cruz<br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Inside the harness (Part 1): Start with the loop]]></title><description><![CDATA[How a weather lookup becomes deep research without changing the ReAct machinery underneath]]></description><link>https://newsletter.agentengineering.co/p/inside-the-harness-part-1-start-with</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/inside-the-harness-part-1-start-with</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Fri, 28 Aug 2026 15:34:31 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5786e877-6860-4e14-b8b3-d9b5c46684a0_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p>Agent harnesses have acquired a remarkable amount of jargon for something often built around a simple ReAct loop: think, call a tool, inspect the result, repeat. </p><p>Over the next three issues, we&#8217;re taking that loop apart and watching the harness grow around it as the problems get harder. <em>Part 1</em> strips the ReAct loop back to its basics. <em>Part 2</em> adds planning and nudges to help keep it on course. <em>Part 3</em> turns the same loop into a coding agent, then tackles what happens when its context and capabilities no longer fit.</p><p>We&#8217;re publishing all three parts on Fridays to see whether a technical deep dive fares better once the midweek inbox stampede has passed. After <em>Part 3</em>, we&#8217;ll return to our usual schedule.</p></div><p><span>Crack open any agent thread these days, and the buzzwords fly: Multi-Agent, Deep Research, Skill, Sub-Agent, Orchestrator&#8230; each one more abstract and more intimidating than the last. But peel the fancy wrapping off, layer by layer, and what&#8217;s actually running underneath is the same loop: the model thinks, calls a tool, looks at the result, thinks again</span><strong><span>.</span></strong><span> A bare-bones ReAct loop.</span></p><p><span>The staircase looks roughly like this:</span></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZXQs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.png 424w, https://substackcdn.com/image/fetch/$s_!ZXQs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.png 848w, https://substackcdn.com/image/fetch/$s_!ZXQs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.png 1272w, https://substackcdn.com/image/fetch/$s_!ZXQs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZXQs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.png" width="1456" height="165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:165,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:69403,&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.agentengineering.co/i/213143990?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.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_!ZXQs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.png 424w, https://substackcdn.com/image/fetch/$s_!ZXQs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.png 848w, https://substackcdn.com/image/fetch/$s_!ZXQs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.png 1272w, https://substackcdn.com/image/fetch/$s_!ZXQs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c535808-dc20-4a39-952a-c3a195f62ad5_2482x281.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p><span>Each step adds almost nothing to the last. Multi-turn just lets the loop spin more.</span></p><p>Plan gives the loop a persistent TODO list<span>. Coding Agent swaps </span><code>web_search</code><span> for read_file and bash. Offloading and Skill are two different compromises for when stuff stops fitting in the context window. The point of internalising a harness isn&#8217;t memorising each level&#8217;s name but rather seeing clearly what problem each level solves that the level below it didn&#8217;t.</span></p><p><span>That&#8217;s the path this series takes. We start with the weather forecast.</span></p><h3><strong><span>Single-turn ReAct loop: Weather forecast</span></strong></h3><p><span>Picture the smallest possible scenario: the user asks, &#8220;is it cold in Beijing today?&#8221; We give the model a single tool: </span><code>get_weather(city).</code></p><p><span>The model takes one look at the question and makes one decision: &#8220;I can&#8217;t answer this on my own, I need to look it up.&#8221; So it emits a </span><code>tool_use</code><span>: </span><code>get_weather(city=&#8221;Beijing&#8221;)</code><span>. The harness picks up that </span><code>tool_use</code><span>, actually runs the function, takes the result (say </span><code>{&#8221;temp&#8221;: 3, &#8220;condition&#8221;: &#8220;sunny&#8221;}</code><span>), and shoves it back into the message queue as a </span><code>tool_result</code><span>. The model takes another look and decides whether to call another tool or answer the user. If it answers, what it emits is plain text (no </span><code>tool_use</code><span>) and the loop ends.</span></p><p><span>That&#8217;s one full ReAct round-trip: </span><strong><span>Reason (decide what to call) &#8594; Act (emit tool_call) &#8594; Observe (look at tool_result)</span></strong><span>, then either go again or hand back the final answer.</span></p><h4><strong><span>What the harness actually is</span></strong></h4><p>Strip it down, and the harness is almost embarrassingly simple<span>:</span></p><div class="callout-block" data-callout="true"><p><code>messages = [{&#8221;role&#8221;: &#8220;user&#8221;, &#8220;content&#8221;: user_input}]</code></p><p><code>while True:</code></p><p><code>response = llm.call(messages, tools=TOOLS)</code></p><p><code>messages.append(response)</code></p><p><code>if not response.tool_calls:</code></p><p><code># Model didn&#8217;t call any tools &#8212; loop terminates</code></p><p><code>break</code></p><p><code># Run all tool_calls in parallel, pack results back in</code></p><p><code>results = run_tools_parallel(response.tool_calls)</code></p><p><code>messages.extend(results)</code></p><p><code>return response.content</code></p></div><p><span>The harness doesn&#8217;t ask &#8220;have we searched enough?&#8221; or &#8220;should we try a different keyword?&#8221; The only thing it checks is: </span><em><span>does this assistant turn contain a tool_call? If yes, execute. If no, exit.</span></em><span> All the thinking is the model&#8217;s; the harness is just a courier.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XzRJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XzRJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png 424w, https://substackcdn.com/image/fetch/$s_!XzRJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png 848w, https://substackcdn.com/image/fetch/$s_!XzRJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png 1272w, https://substackcdn.com/image/fetch/$s_!XzRJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!XzRJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png" width="1456" height="1069" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1069,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:161615,&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.agentengineering.co/i/213143990?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.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_!XzRJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png 424w, https://substackcdn.com/image/fetch/$s_!XzRJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png 848w, https://substackcdn.com/image/fetch/$s_!XzRJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png 1272w, https://substackcdn.com/image/fetch/$s_!XzRJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa449d49-58e3-4d9c-82af-d04eec8a5561_2084x1530.png 1456w" sizes="auto, 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><h4><strong><span>Emitting multiple tool_calls in one turn</span></strong></h4><p><span>The interesting bit comes with the next question: &#8220;which is colder, Beijing or Shanghai?&#8221;</span></p><p><span>A competent model isn&#8217;t going to look up Beijing first and then Shanghai. It emits two </span><code>tool_use</code><span> calls in the same assistant turn:</span></p><div class="callout-block" data-callout="true"><p><code>{</code></p><p><code>&#8220;role&#8221;: &#8220;assistant&#8221;,</code></p><p><code>&#8220;content&#8221;: [</code></p><p><code>{&#8221;type&#8221;: &#8220;tool_use&#8221;, &#8220;id&#8221;: &#8220;t1&#8221;, &#8220;name&#8221;: &#8220;get_weather&#8221;, &#8220;input&#8221;: {&#8221;city&#8221;: &#8220;Beijing&#8221;}},</code></p><p><code>{&#8221;type&#8221;: &#8220;tool_use&#8221;, &#8220;id&#8221;: &#8220;t2&#8221;, &#8220;name&#8221;: &#8220;get_weather&#8221;, &#8220;input&#8221;: {&#8221;city&#8221;: &#8220;Shanghai&#8221;}}</code></p><p><code>]</code></p><p><code>}</code></p></div><p><span>On the harness side, as long as you wrote run_tools to execute in parallel (the </span><code>run_tools_parallel</code><span> in the pseudocode above), both queries fire at once. Two </span><code>tool_results</code><span> come back together. Next turn, the model sees them side by side and answers the comparison directly.</span></p><p><span>This is a property of ReAct that people consistently underrate: a single assistant turn can fan out to any number of </span><code>tool_calls</code><span>. When you write your harness, don&#8217;t default to &#8220;one at a time&#8221; &#8212; the moment you hit &#8220;compare three cities&#8221; or &#8220;read ten files in parallel,&#8221; it&#8217;ll be painfully slow.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YwAY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YwAY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png 424w, https://substackcdn.com/image/fetch/$s_!YwAY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png 848w, https://substackcdn.com/image/fetch/$s_!YwAY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png 1272w, https://substackcdn.com/image/fetch/$s_!YwAY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!YwAY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png" width="1456" height="1829" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1829,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:145380,&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.agentengineering.co/i/213143990?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.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_!YwAY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png 424w, https://substackcdn.com/image/fetch/$s_!YwAY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png 848w, https://substackcdn.com/image/fetch/$s_!YwAY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png 1272w, https://substackcdn.com/image/fetch/$s_!YwAY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45149146-170c-40a8-a7c9-f41ab73a80f8_1656x2080.png 1456w" sizes="auto, 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><h4><strong><span>Is single-turn enough?</span></strong></h4><p>For a straightforward weather check, yes. But ask for Beijing&#8217;s chance of rain this Friday compared with the same week over the past five years, and one lookup no longer does the job.</p><p>The model has to produce the forecast, retrieve the historical data, compare the two, and perhaps go back to fill in anything it missed. It needs a <em><strong><mark data-color="#e6b8af" style="background-color: rgb(230, 184, 175); color: rgb(0, 0, 0);">multi-turn loop</mark></strong></em>, with each step shaped by what the previous one returned.</p><h3><strong><span>Multi-turn loop: Deep research</span></strong></h3><p><span>Swap </span><code>get_weather</code><span> for two more general tools (</span><code>web_search</code> and <code>web_fetch</code><span>) and you&#8217;ve got the skeleton of Deep Research.</span></p><p><span>Two tools, but the behaviour space they open up jumps by orders of magnitude. The model can search, pull back a pile of candidate links, pick the most relevant one or two and fetch the full text, realise it&#8217;s missing something and search again with a different keyword, fetch the next link. The whole trajectory is </span><em><strong><span>meandering, stop-and-go</span></strong></em><span>. How many steps, when to pivot &#8212; entirely the model&#8217;s call.</span></p><p>In a multi-turn run, every tool call depends on what the previous one returned. Search and retrieval interleave, and the trajectory is not known in advance: the agent might converge in three turns or still be missing pieces at fifteen.</p><h4><strong><span>The shape of a multi-turn loop</span></strong></h4><p><span>Drawn as a sequence diagram, the shape is clean:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eyia!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eyia!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png 424w, https://substackcdn.com/image/fetch/$s_!eyia!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png 848w, https://substackcdn.com/image/fetch/$s_!eyia!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png 1272w, https://substackcdn.com/image/fetch/$s_!eyia!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!eyia!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png" width="1456" height="1286" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1286,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152913,&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.agentengineering.co/i/213143990?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.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_!eyia!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png 424w, https://substackcdn.com/image/fetch/$s_!eyia!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png 848w, https://substackcdn.com/image/fetch/$s_!eyia!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png 1272w, https://substackcdn.com/image/fetch/$s_!eyia!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0fc9b7d-938c-49cc-9aa8-b0ec4df829f5_2047x1808.png 1456w" sizes="auto, 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>The harness code is unchanged. The loop simply spins more times<span>.</span></p><h4><strong><span>Who decides when the loop stops?</span></strong></h4><p><span>This is the most counterintuitive part of multi-turn ReAct: the LLM decides when to halt, not the harness.</span></p><p>Whether the loop continues<span> or not is the </span><em><strong><span>model&#8217;s call</span></strong></em><strong><span>.</span></strong><span> If it thinks it doesn&#8217;t have enough, it emits another </span><code>web_search</code><span>. If it thinks it does, it skips </span><code>tool_use</code><span> and just produces text. The harness doesn&#8217;t get a vote.</span></p><h3><strong><span>What&#8217;s still missing</span></strong></h3><p><span>The multi-turn loop solves &#8220;one step isn&#8217;t enough.&#8221; But it has an obvious flaw: the model is purely reactive &#8212; wherever its eyes land, that&#8217;s where it goes next. No global view. Easy to wander off. A complex question that really should be researched along five dimensions might trap it on the first dimension for seven or eight searches while the others get forgotten. Or it picks a bad keyword early and turns spinning in the wrong direction, eating tokens and producing nothing.</span></p><p>Pure ReAct can keep moving, but it cannot guarantee that it is going anywhere. It has tactics, but no strategy. And an agent without a strategy is just a rather expensive way to walk in circles.</p><p>In <em><a href="https://newsletter.agentengineering.co/p/inside-the-harness-part-2-give-it">Part 2</a></em> of this series, we give it a plan.</p><p>In <em><a href="https://newsletter.agentengineering.co/p/inside-the-harness-part-3-change">Part 3</a></em> of this series, we cut to coding.</p><div><hr></div><p style="text-align: center;"><em>Agentic Engineering grew out of a desire to create something useful for people trying to make sense of agentic AI and beyond. If you&#8217;d like to support that direction, please tell your friends about us.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentengineering.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Agentic Engineering&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.agentengineering.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Agentic Engineering</span></a></p><div><hr></div><p>That&#8217;s it for this one. We&#8217;ll pick up the conversation next week.</p><p>Until then, keep building.</p><blockquote><p><span>Tanya D&#8217;cruz</span><br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Building AI agent harnesses for finance]]></title><description><![CDATA[Nicole K&#246;nigstein on why reliable financial agents are an engineering problem, not simply a model problem]]></description><link>https://newsletter.agentengineering.co/p/free-webinar-building-ai-agent-harnesses</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/free-webinar-building-ai-agent-harnesses</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Sat, 22 Aug 2026 16:02:59 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/212138401/5d8761732d5f9606dd5ca28c84c57010.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><h4><code>Editor&#8217;s note</code></h4><p><span>A quick programming detour from us this week.</span></p><p><span>If you regularly read Agentic Engineering, you know our core issues tend to follow a fairly deliberate cadence. This isn&#8217;t one of those issues. Yesterday, we hosted a free live session with </span><strong><a href="https://www.linkedin.com/in/nicole-koenigstein/"><span>Nicole K&#246;nigstein</span></a><span> </span></strong><span>on building AI agent harnesses for finance, and rather than let a useful conversation disappear into the webinar graveyard, we wanted to make the full recording freely available here.</span></p><p><span>Nicole is an AI researcher working on agentic systems and transformers, an instructor, consultant, and O&#8217;Reilly author. She teaches large language models and agentic architectures for organizations including the University of Oxford and O&#8217;Reilly Media, and much of her work focuses on the considerably harder problem that begins after an AI prototype works: making the resulting system reliable enough for production.</span></p><p><span>Enough preamble. Let&#8217;s get into the harness.</span></p></div><p><span>The conversation around agents has moved quickly from prompts to context, loops, orchestration, and now harnesses. But finance is a particularly unforgiving place to discover that a capable model and a reliable system are two very different things.</span></p><p><a href="https://www.linkedin.com/in/nicole-koenigstein/"><span>Nicole</span></a><span> spent the session unpacking what has to exist around the model: coordination, verification, observability, control, model selection, evaluation, and the boundaries between agents. Her central argument is a useful one for anyone building agents, whether or not you work in finance: </span><em><span>an agent is the model plus the harness.</span></em></p><p><span>And once you start thinking about agents that way, reliability becomes less about finding a smarter model and much more about engineering the system around it.</span></p><p><span>The video above contains the complete session and Q&amp;A. Below, we&#8217;ve turned the central ideas from Nicole&#8217;s talk into a written companion for those who would rather read or return to the concepts later.</span></p><div class="callout-block" data-callout="true"><h4>Want to go from understanding the harness to engineering one?</h4><p>This free webinar introduced the architecture behind reliable AI agents for finance. We see how the model, harness, coordination layer, and reliability mechanisms fit together. </p><p>On August 29, Nicole will take that foundation into <strong>Agentic AI for Finance</strong>, our four-day intensive workshop where you&#8217;ll move from understanding those systems to building them hands-on using real financial workflows.</p><p>We&#8217;ve broken down what you&#8217;ll build, what you&#8217;ll take away, and the other benefits of joining the intensive at the end of this article, so keep reading. Or, if you&#8217;re already convinced and would rather skip the rest of our pitch, you can book your place right away.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://luma.com/agentic-ai-for-finance&quot;,&quot;text&quot;:&quot;Book your seat now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://luma.com/agentic-ai-for-finance"><span>Book your seat now</span></a></p></div><h3><strong><span>The AI engineering problem has moved</span></strong></h3><p><span>For a long time, the dominant pattern in machine learning was fairly straightforward: task &#8594; model &#8594; output. If performance was poor, you improved the model.</span></p><p><span>Agents change that equation. Once tools, retrieval, memory, multiple agents, and decision points are incorporated into the architecture, the question shifts from &#8220;Can the model solve this task?&#8221; to &#8220;Can the system execute a stable sequence of decisions?&#8221;</span></p><p><span>That shift also explains the move from prompt engineering to context engineering and, now, harness engineering. Prompt engineering optimizes the input. Context engineering optimizes what the model sees. Harness engineering deals with everything that governs how the system actually operates: orchestration, tools, memory, retrieval, verification, governance, security, feedback, and execution loops.</span></p><p><span>The result is a different operating model: execute &#8594; observe &#8594; verify &#8594; correct &#8594; repeat. The model still matters, but it is now one component inside a much larger engineering problem.</span></p><h3><strong><span>Strong agents can still make a weak system</span></strong></h3><p><span>This was perhaps the most important warning in the session. It is tempting to assume that if every individual agent in a multi-agent system performs well, the resulting system should perform well too. It doesn&#8217;t necessarily follow.</span></p><p><span>Nicole points to the compounding reliability problem: when independent components execute sequentially, overall system success depends on the success probabilities across those components. Errors can compound as the chain becomes longer.</span></p><p><span>Imagine an agentic financial workflow involving ten decisions. Even if the individual components are reasonably capable, failures at one stage can affect everything downstream. Add retries as the default recovery mechanism, and the system may eventually produce an answer, but now you have another problem: cost and latency.</span></p><p><span>Nicole describes three consequences of trying to brute-force reliability through repeated attempts: more compute, more money, and more latency.</span></p><p><span>And average latency can hide the real production experience. A system with an acceptable mean response time but poor p95 or p99 latency can still feel broken to a meaningful portion of its users.</span></p><p><span>Reliability, in other words, cannot simply be retried into existence.</span></p><h3><strong><span>The difficult part often lives between agents</span></strong></h3><p><span>One of the more useful distinctions Nicole makes is between communication and coordination.</span></p><p><span>Communication is the exchange of messages. Coordination controls what the agents </span><em><span>do</span></em><span>. That matters because an agent handoff isn&#8217;t equivalent to a conventional function call.</span></p><p><span>When one agent hands something to another, the receiving agent has to </span><em><strong><span>interpret</span></strong></em><span> the message. A schema can ensure that the message has the right structure, but it cannot guarantee that the meaning survived the handoff intact.</span></p><p><span>The same applies to delegation. Calling a sub-agent isn&#8217;t simply calling another tool. You are introducing another probabilistic inference process into the system. That means the boundaries between agents deserve their own engineering attention.</span></p><p><span>Nicole&#8217;s argument here is particularly important for evaluation: if you evaluate only the final output, you may completely miss a coordination problem occurring within the system.</span></p><p><span>You need signals around the handoffs themselves. You need telemetry. You need to understand whether agents are communicating correctly, whether coordination is progressing as intended, and where meaning begins to drift.</span></p><p><span>As Nicole puts it, you can&#8217;t improve coordination using output-only feedback.</span></p><h3><strong><span>Maybe the model doesn&#8217;t need to change</span></strong></h3><p><span>This leads to a more interesting possibility.</span></p><p><span>A great deal of AI development still revolves around the model: use a more capable model, fine-tune it, or wait for the next generation. But Nicole&#8217;s research explores another direction: keep the model fixed and improve the harness around it.</span></p><p><span>The adjustable state of the system can move away from model weights and into the surrounding harness. Execution traces and trajectories can be scored, fed back into the system, and used to improve how it behaves.</span></p><p><span>Nicole took this further in her own open-source work.</span></p><p><span>Rather than hard-coding every coordination choice before the system has even executed a task, she began experimenting with </span><em><strong><span>learned coordination</span></strong></em><span>: allowing aspects of the harness to become adaptive, auditable, and transferable.</span></p><p><span>In her experiments, the benefits were particularly visible on coordination-heavy tasks, where she reported improvements in reliability and quality alongside lower costs. Simpler procedural tasks saw less improvement.</span></p><p><span>There is an important engineering principle hiding in there: not every task needs the same agent architecture.</span></p><h3><strong><span>Stop giving every job to your strongest model</span></strong></h3><p><span>That principle also applies to model selection. There is an understandable instinct when building agentic systems to reach for the strongest reasoning model available, particularly for high-stakes domains. But stronger and more expensive everywhere does not mean </span><em><span>better</span></em><span>.</span></p><p><span>In Nicole&#8217;s coding experiments, harder, coordination-heavy tasks benefited from a stronger planner, while simpler stages could be handled by cheaper models. She found that distributing models according to the demands of each stage could reduce token consumption and improve speed. More surprisingly, in her experiments, the resulting code was also judged better than code produced using the top-tier model at maximum effort throughout.</span></p><p><span>This isn&#8217;t an argument for universally choosing smaller models. It is an argument for </span><em><strong><mark data-color="#fff1f2" style="background-color: rgb(255, 241, 242); color: rgb(0, 0, 0);"><span>matching capability to responsibility</span></mark></strong></em><span>.</span></p><p><span>Nicole offered a useful mental model during the Q&amp;A: think about building a multi-agent system the way you would build a team.</span></p><p><span>If you were staffing the equivalent workflow inside an organization, you probably wouldn&#8217;t hire the same person for every role. Some jobs require deep expertise. Others require analysis, verification, classification, retrieval, or straightforward execution.</span></p><p><span>The skills should be complementary. Agent architectures can be designed the same way.</span></p><h3><strong><span>Coding agents need harnesses too</span></strong></h3><p><span>There was also a useful detour into coding agents.</span></p><p><span>Nicole described an experience in which an AI coding assistant, used without sufficiently strict instructions and boundaries, altered working agent code and introduced serious bugs and security problems.</span></p><p><span>Her takeaway was not that coding agents shouldn&#8217;t be used. Quite the opposite.</span></p><p><span>It was that using them effectively requires the same engineering discipline we expect elsewhere in an agentic system: clear instructions, guardrails, skills, hooks, review, and people who understand the system well enough to recognize when generated code is wrong.</span></p><p><span>There is a broader lesson here. AI can accelerate implementation, but it does not remove the need to know what good implementation looks like.</span></p><h3><strong><span>What this means for financial agents</span></strong></h3><p><span>Finance makes all of these problems harder to ignore.</span></p><p><span>A research assistant, portfolio-analysis system, financial-document agent, or other agentic workflow may need to retrieve evidence, coordinate multiple reasoning steps, invoke tools, maintain state, validate intermediate results, and operate within clearly defined constraints.</span></p><p><span>And probabilistic systems bring their own hazards.</span></p><p><span>During the Q&amp;A, Nicole specifically warned about forward-looking bias in financial applications. Models are extremely good at pattern matching, which can also lead them to derive patterns and make suggestions that are not adequately supported by the underlying facts.</span></p><p><span>So the problem is not merely whether an LLM knows finance.</span></p><p><span>The problem is whether the system surrounding it can constrain what it does, verify what it produces, expose how it arrived there, and respond sensibly when something goes wrong.</span></p><p><span>That is the territory of the harness.</span></p><h3><strong><span>The agent is bigger than the model</span></strong></h3><p><span>Nicole closed the main presentation with a progression worth keeping: executable reasoning &#8594; inspectable states &#8594; feedback-driven control &#8594; learned harness decisions.</span></p><p><span>It captures a shift we&#8217;re increasingly interested in at Agentic Engineering.</span></p><p><span>The model is becoming one component inside a much larger engineering problem.</span></p><p><span>The interesting work is moving outward: into the runtime, the context, the tools, the coordination layer, the evaluation system, the boundaries, the feedback loops, and the machinery responsible for keeping the whole thing under control.</span></p><p><span>That is especially visible in finance, where the cost of a system being </span><em><span>mostly right</span></em><span> can become very real, very quickly.</span></p><p><span>And perhaps that&#8217;s the simplest way to think about harness engineering: </span><em><strong><span>Capability comes from the model. Dependability has to be engineered around it.</span></strong></em></p><div><hr></div><h3 style="text-align: center;">The foundation is set. Now, build the thing.</h3><p>This free webinar covered the architecture. You learnt why a financial agent is not simply a model with a clever prompt, but a system in which the harness controls what the model can access, do, remember, verify, and prove.</p><p><a href="https://luma.com/agentic-ai-for-finance">Agentic AI for Finance</a>, Nicole&#8217;s four-day intensive, is where you <em>build</em> that system.</p><p>You&#8217;ll connect models to financial data, tools, and memory; engineer verification and governance into the workflow; and see what happens when all those neat boxes on an architecture diagram actually have to work together. The aim is to leave knowing how to build an agent that is useful, observable, and safe to operate.</p><h4 style="text-align: center;">What you&#8217;ll leave with</h4><p>Alongside the hands-on build experience, you&#8217;ll get:</p><ul><li><p>Four days of live access to the workshop with <a href="https://www.linkedin.com/in/nicole-koenigstein/">Nicole</a></p></li><li><p>Downloadable code templates, datasets, and architecture blueprints</p></li><li><p>Lifetime access to the workshop recordings</p></li><li><p>A free copy of <a href="https://www.amazon.com/Building-Agents-Finance-Financial-Architectures-ebook/dp/B0GSVS1RWJ/ref=sr_1_1?crid=QEEFABEOPZZG&amp;dib=eyJ2IjoiMSJ9.0QzpGX-Yg29AvYaA2xR0Uoont3_Dr4LuPNhLdN-6Q2RKP-ny11icnhiFuFPXBfO_qp2gjiTyi9GM-vKvSjwGPPdJDv8JS6200yVst1UacaJaUNuGX1QUCeEMEgPNbjSkl7LENiL000hGdNTfh616MKO4NKdrO_cge99u6aIcuKQ9a7c_oEE5iDaVYUQxG_kr8yLAVSVWF0uUEftc5t6HurrvEpQQc4DSacS6MoF6qOY.cGr83Bf3rNIVQkXoLRFxOjra7D2-ZipikTmpNF1FHZE&amp;dib_tag=se&amp;keywords=Building+AI+Agents+for+Finance&amp;qid=1787412046&amp;sprefix=building+ai+agents+for+finance%2Caps%2C349&amp;sr=8-1">Building AI Agents for Finance</a> to go deeper into the engineering covered during the program</p></li><li><p>A certificate on completion, plus practical experience relevant to work across quantitative research, fintech, portfolio management, and financial engineering</p></li></ul><p><a href="https://luma.com/agentic-ai-for-finance">Agentic AI for Finance</a> runs across August 29&#8211;31 and September 12&#8211;13, giving you time between sessions to digest what you&#8217;ve built before moving into the next stage.</p><p>So if you enjoyed Nicole&#8217;s webinar and want to take the next step from understanding the architecture to engineering it yourself, book your spot for Agentic AI for Finance below.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://luma.com/agentic-ai-for-finance&quot;,&quot;text&quot;:&quot;Book your spot now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://luma.com/agentic-ai-for-finance"><span>Book your spot now</span></a></p><div><hr></div><p>That&#8217;s it for this one. We&#8217;ll pick up our regular programming next week.</p><p>Until then, don&#8217;t just engineer the agent. Engineer the harness.</p><blockquote><p><span>Tanya D&#8217;cruz</span><br><em>Editor-in-Chief</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[🎙️ Episode 3: The agent autonomy trap]]></title><description><![CDATA[Podcast with Ben Auffarth on bounded autonomy, calibrated confidence, meaningful human oversight and why businesses should fund the dataset before the agent]]></description><link>https://newsletter.agentengineering.co/p/episode-3-the-case-for-less-autonomous</link><guid isPermaLink="false">https://newsletter.agentengineering.co/p/episode-3-the-case-for-less-autonomous</guid><dc:creator><![CDATA[Tanya D'cruz]]></dc:creator><pubDate>Thu, 20 Aug 2026 15:03:37 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/211965147/54ef00c61004d185e6b97d6116b1d464.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><span>AI agents are usually placed on an imaginary ladder. At the bottom, they assist. A little higher, they complete tasks. Eventually, they plan, act, learn and operate without us. Every step towards autonomy is treated as progress.</span></p><p><span>But autonomy is not free. The further a system can go on its own, the more room it has to drift, hallucinate, misinterpret a goal or make a consequential decision before someone notices.</span></p><p><span>For this episode of the Agentic Engineering podcast, I spoke with Ben Auffarth, Director and Chief Data Officer at Chelsea AI, founder of Chelsea AI Ventures, and author of several bestselling AI and machine learning books, including </span><em><a href="https://www.amazon.com/Generative-LangChain-production-ready-applications-LangGraph/dp/1837022011/ref=sr_1_1?crid=1LSOJHBEXGLG1&amp;dib=eyJ2IjoiMSJ9.4VGrkVel_z4pXJ-zkVpgjJr1H50j_XBLpXMI-7XsshRg5z71pjF0os_PUg7AO1PI32LlREYG-WwBXJgUT1OZ_n4lFFTr449UXkFMuuMjIMUPaVw0i4XsXNGlOu8eWcu-usB0ge4B7vDXLnpQ9kRYysDYHxgbJpVZ5vrE0SHQnnI_LqmewlYTwwureX1EYJ2wFzqLDOGSc-sGA8t3FHllt2Q0v8kYTKIDmfSQf-p-LRk._aKH_mgissnIRFrT9a8a7xUHLBMNkIuyNcXSNLmDZwo&amp;dib_tag=se&amp;keywords=Generative+AI+with+LangChain&amp;qid=1787222316&amp;sprefix=generative+ai+with+langchain%2Caps%2C505&amp;sr=8-1"><span>Generative AI with LangChain</span></a></em><span>, </span><em><a href="https://www.amazon.com/Machine-Learning-Time-Python-state-ebook/dp/B09GS44ZP4/ref=sr_1_1?crid=1GHH5HGC3AF2O&amp;dib=eyJ2IjoiMSJ9.V6T27nBIc2d7O4OGkXEeOvpXIYX7XuY2NsR33KqWlzXBZ71e4Z_AEkXN8gVk9qWRw_vm6SekP_dVBBzPpmZKbeW_iMsVrIW10S_ab2KBtnPpYfFo8VzsYxH76OslEVwQp7BSAZisc1dWDsu7vrY3G-DafGqhh39L01HOGT1UzNtadMmJ0opvIVc-cR2vYjR2ya2QvqwNiN8SiwpdRpW5Eas_kHN6nn63Om5heZ3y_Rk.9gIXJsJ_yLFyT0JQFST61OHmuYW1ElDDd00hZDa7Dv0&amp;dib_tag=se&amp;keywords=Machine+Learning+for+Time-Series+with+Python&amp;qid=1787222345&amp;sprefix=generative+ai+with+langchain%2Caps%2C395&amp;sr=8-1"><span>Machine Learning for Time-Series with Python</span></a></em><span> and </span><em><a href="https://www.amazon.com/Artificial-Intelligence-Python-Cookbook-algorithms-ebook/dp/B08GQ8TN8C/ref=sr_1_1?crid=Q18DQHWXHMFV&amp;dib=eyJ2IjoiMSJ9.q5a4atn9A3e4CGblFiKJPakEsugGAtmYvNPiT9tiX_zplXdGvb6HDaD231exozzMQ5dE0EBIel0LiB9e3YMl0cnm-fsMDWhUoD3TYTsdGY0OEQpSF4qrYFyx7BQtSp93l1HTBgXTtGGmaTGO64RQH-pA1k-jHjY_fgkaLes8cHjTxELb6rlYQMsCEAt3mm1EjoR6rjITnmqMQV2O9qqyQbFB_Z4oIAK_lLAfdnYNaTs.QfmD4a-40rKv1y8IoZt7TT8gOc3WXmcbAAenc6xX9qM&amp;dib_tag=se&amp;keywords=Artificial+Intelligence+with+Python+Cookbook&amp;qid=1787222386&amp;sprefix=machine+learning+for+time-series+with+python%2Caps%2C538&amp;sr=8-1"><span>Artificial Intelligence with Python Cookbook</span></a></em><span>. Ben holds a PhD in computational neuroscience and has built systems across finance, insurance, travel and other regulated environments.</span></p><p><span>Our conversation centred on a digital-footprint intelligence platform his team is building for estate agents. It is the kind of problem that sounds made for an autonomous agent: search for a person, gather information, assess the evidence and produce a useful profile.</span></p><p><span>Ben&#8217;s team made a different choice. They use LLMs extensively during development (to build datasets, run experiments, and improve the underlying system) but limit their authority when a real user is being evaluated.</span></p><p><span>That decision led us to a more useful question than simply asking &#8220;How autonomous can this agent become?&#8221;, which is </span>&#8594;</p><p><span>How much autonomy does the system actually need?</span></p><h3><strong><span>What does Neighborhood do, and where does AI fit into the system?</span></strong></h3><p><em><span>Neighborhood helps estate agents prioritise prospective property buyers. An enquiry may contain little more than a name, email address, telephone number and sometimes an address. The platform enriches those details with publicly available information, tries to verify that it has found the correct person and returns a profile with match scores and source information.</span></em></p><p><em><span>The difficult part is not finding someone with the right name; it is knowing whether the information belongs to this particular person. We use LLMs to help build datasets, extract information and run experiments quickly. At inference time, however, the LLM does not make the final matching or prioritisation decision. Those decisions are handled by more deterministic models and statistical methods. That is what I mean by bounded autonomy.</span></em></p><h3><strong><span>What tells the system that it has found enough information?</span></strong></h3><p><em><span>A general search engine may return many possible matches and leave someone to work through them. An LLM-based search tool can return a neat answer with a confidence percentage, but that number is not necessarily calibrated. If a model says it is 70 per cent confident, it does not mean that comparable answers are correct 70 per cent of the time.</span></em></p><p><em><span>We wanted confidence to have a measurable meaning. Neighborhood uses statistical principles, information theory and record-linkage methods to estimate the probability of a match. A common name in a large city begins with more uncertainty, and each additional piece of matching evidence adjusts that probability. The system stops relying on whatever the LLM &#8220;feels&#8221; and works with confidence that can be compared against data.</span></em></p><h3><strong><span>Can missing information become a hidden penalty?</span></strong></h3><p><em><span>Some people have extensive digital footprints, while others share very little or use platforms the system cannot access. The absence of information should not automatically become evidence that someone is suspicious or unlikely to proceed.</span></em></p><p><em><span>We found that a comprehensive profile does not necessarily mean someone is a stronger buyer. We therefore try not to downgrade people heavily when little information is available. More information may help an estate agent ask better questions, but that is a product assumption to test&#8212;not a universal truth. Sometimes the most accurate answer is simply that we do not know enough.</span></em></p><h3><strong><span>Is a more autonomous agent necessarily more advanced?</span></strong></h3><p><em><span>Autonomy is often presented as a measure of technical maturity. I do not think it is something to pursue for its own sake. The more autonomy we add, the more control we give up and the more variance we introduce.</span></em></p><p><em><span>Agents can look impressive in short demonstrations, but benchmarks involving longer tasks still show very low completion rates. If reliability matters, moving down the autonomy scale can be the better engineering decision. Use the LLM for tasks it performs relatively well, such as extracting information, and place deterministic decisions and constraints around it.</span></em></p><div class="callout-block" data-callout="true"><p>If you&#8217;re enjoying Ben&#8217;s approach to building AI systems that can actually be measured, he&#8217;s leading a hands-on workshop on August 29.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/the-genai-build-lab-build-production-ready-rag-on-a-budget-tickets-1994016271345?keep_tld=true&quot;,&quot;text&quot;:&quot;Take a look&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/the-genai-build-lab-build-production-ready-rag-on-a-budget-tickets-1994016271345?keep_tld=true"><span>Take a look</span></a></p></div><h3><strong><span>What does meaningful human oversight look like?</span></strong></h3><p><em><span>Putting a person at the end of a workflow does not guarantee meaningful oversight. If the system is usually correct and its output looks professional, the reviewer may gradually stop examining the evidence and simply approve each recommendation.</span></em></p><p><em><span>In Neighborhood, we avoid asking whether an entire profile &#8220;looks right.&#8221; Instead, we ask the reviewer to identify a believable anchor, such as a company or location that connects the information to the correct person. They can also say they are unsure. Human oversight should contribute evidence or judgement the system does not possess; otherwise, it is merely rubber-stamping.</span></em></p><h3><strong><span>How do you evaluate whether the system&#8217;s confidence is justified?</span></strong></h3><p><em><span>A system may retrieve accurate information and still attach it to the wrong person. That is why we expose the evidence behind a profile, our confidence in each piece and its provenance. The estate agent can inspect the original sources and provide feedback, while the final decision remains with them.</span></em></p><p><em><span>The business measure is not whether a profile looks comprehensive. It is whether the system helps estate agents spend their time with the right prospective buyers. Evaluation must cover identity matching, evidence quality, confidence calibration and the usefulness of the eventual recommendation&#8212;not only the final score.</span></em></p><h3><strong><span>Are we confusing a successful demo with a reliable system?</span></strong></h3><p><em><span>Agent demonstrations usually show examples in which the system finds the right information, follows the right steps and produces a convincing answer. Production introduces ambiguous identities, inaccessible data, regional differences and inputs that look nothing like the demonstration.</span></em></p><p><em><span>At Neighborhood, we used agents and repeated runs to help create a labelled dataset, then combined those outputs with human evaluation. We train and tune more deterministic models against that data and track the results of each experiment. That may be less exciting than showing an agent browsing autonomously, but it gives us something we can measure and reproduce.</span></em></p><h3><strong><span>What should a business leader establish before deploying an agent?</span></strong></h3><p><em><span>I would ask for four things: a labelled evaluation set, a baseline to improve upon, an understanding of the cost of a wrong answer and a measurement of response variance. Run the same input several times and see whether the system gives the same answer. If it does not, average performance may conceal an agent that cannot be trusted on an individual decision.</span></em></p><p><em><span>Businesses often want to fund the agent before they fund the dataset. That is backwards. Without representative data, you cannot reliably build, compare or govern the system. In many AI projects, the dataset, not the model, is the real bottleneck.</span></em></p><h3><strong><span>How much autonomy should engineers give an agent?</span></strong></h3><p><em><span>There is a perception that because a system uses AI, less engineering is required. In practice, the opposite is often true.</span></em></p><p><em><span>You need to define the outcome clearly, establish a benchmark early, and constrain what the system is allowed to do. Deterministic checks and filters can prevent entire categories of failure. An orchestration framework such as LangGraph can also make the available paths explicit: some decisions can be made by the model, while others remain ordinary conditional logic.</span></em></p><p><em><span>The question is not whether the agent could make another decision autonomously. It is whether that autonomy improves the system enough to justify the additional variance and loss of control.</span></em></p><div><hr></div><p><span>Ben&#8217;s case for bounded autonomy is not an argument against agents. His team uses LLMs to create data, accelerate experimentation, extract information, and improve development. The argument is about placing autonomy where it creates value </span><em><span>and</span></em><span> removing it where consistency matters more.</span></p><p><span>That distinction becomes especially important now as agents move from helping people produce content or write code towards influencing decisions about buyers, customers, patients and applicants.</span></p><p><span>The most advanced system may not be the one permitted to do everything. It may be the one whose builders know exactly where the model is useful, where deterministic software should take over and where a person must still make the call.</span></p><p><span>Before asking how autonomous an agent can become, businesses should decide what happens when it is confidently wrong.</span></p><div><hr></div><p style="text-align: center;"><em>Less hype, more engineering conversations with the experts. </em></p><p style="text-align: center;"><em>Pull up a chair.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.agentengineering.co/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.agentengineering.co/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>