<?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[Engineering Agents]]></title><description><![CDATA[Thoughts on building reliable, autonomous, scalable, AI Agents.]]></description><link>https://agentengg.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!43bM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7d72600-0506-4595-9eae-61782ba7b01f_327x327.png</url><title>Engineering Agents</title><link>https://agentengg.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 06 Jul 2026 01:53:40 GMT</lastBuildDate><atom:link href="https://agentengg.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Nishant Sinha]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[agentengg@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[agentengg@substack.com]]></itunes:email><itunes:name><![CDATA[Nishant Sinha]]></itunes:name></itunes:owner><itunes:author><![CDATA[Nishant Sinha]]></itunes:author><googleplay:owner><![CDATA[agentengg@substack.com]]></googleplay:owner><googleplay:email><![CDATA[agentengg@substack.com]]></googleplay:email><googleplay:author><![CDATA[Nishant Sinha]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[AI can code quickly, but can't find good abstractions quickly]]></title><description><![CDATA[I think Dax Raad (OpenCode) finally put words to something many feel about AI coding: AI can produce a lot of code, can absorb complaints and process requests.]]></description><link>https://agentengg.substack.com/p/ai-can-code-quickly-but-cant-find</link><guid isPermaLink="false">https://agentengg.substack.com/p/ai-can-code-quickly-but-cant-find</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Sun, 31 May 2026 15:21:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/1VqKUrxR2C8" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I think Dax Raad (OpenCode) finally put words to something many feel about AI coding: AI can produce a lot of code, can absorb complaints and process requests.<br>But it still *does not* automatically make teams much more productive.<br></p><blockquote><p> It is easy to feel productive because more code is being produced.</p><p>But when you inspect outcomes, the improvement may be smaller than expected.<br>Why?</p></blockquote><p>Because AI increases implementation speed but product work isn&#8217;t just processing requests. User has a problem, ship obvious fix, repeat. There is more to building good software than this.</p><p><br>Good product judgment involves finding one abstraction that solves many problems. Deciding which solution will stay elegant after the next ten requests arrive.<br><br>Elegance is hard to model. Depends on many not-so-explicit factors. <br><br>AI doesn't help directly with that skill. Still depends on experience, code mental models and discussions.</p><blockquote><p>Dax says he used to spend 95% of energy thinking and 5% doing.</p><p>Now maybe it is 96% thinking and 4% doing.</p></blockquote><p><br>The joke carries the point: AI speeds up implementation, improves execution, but the hard judgment work remains. AI does not automatically speed up the work of finding good abstractions.<br><br>So, the takeaway advice is: Generate code fast, but slow down enough to build foundations. Then again move faster from a better base.</p><p>I wrote earlier about how Vercel advocated for <strong>ruthless judgement</strong> when shipping AI-assisted code. </p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;1608a959-bc96-4ba9-bc41-a3955b5a0a58&quot;,&quot;caption&quot;:&quot;AI-generated code creates a new production risk.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;AI Writes Great PRs. That Doesn&#8217;t Mean They&#8217;re Safe to Ship&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:20667898,&quot;name&quot;:&quot;Nishant Sinha&quot;,&quot;bio&quot;:&quot;AI Builder and Advisor. PhD. Founder, OffNote Consulting Labs. Technologist 20+ years. Help businesses bring their vision to practice with GenAI - Agents, Voice, RAG. Make complex (ideas, technology, communication) simple and consumable. &quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c4c6d437-ef13-4142-bd55-1af6776f6a2d_724x1083.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-31T14:11:08.540Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!XH-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agentengg.substack.com/p/ai-writes-great-prs-that-doesnt-mean&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:192734172,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:500865,&quot;publication_name&quot;:&quot;Engineering Agents&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!43bM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7d72600-0506-4595-9eae-61782ba7b01f_327x327.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><p>Dax&#8217;s insight takes it one step further. We need to ask: </p><ul><li><p><strong>Before fixing:</strong> what foundations need re-thinking due to these issues? </p></li><li><p><strong>Before shipping</strong> another fix: did we strengthen the foundation or add another layer on top? Did we solve the class of problem or just the latest instance? Did we find the deeper structure behind it?<br></p></li></ul><div id="youtube2-1VqKUrxR2C8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;1VqKUrxR2C8&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/1VqKUrxR2C8?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Log is the Agent - Reactive runtime for Agents]]></title><description><![CDATA[This is a very peek-into-the-future paper from Yohei Nakajima, the creator of BabyAGI, the *first* truly autonomous agent which went viral.]]></description><link>https://agentengg.substack.com/p/the-log-is-the-agent-reactive-runtime</link><guid isPermaLink="false">https://agentengg.substack.com/p/the-log-is-the-agent-reactive-runtime</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Tue, 26 May 2026 12:30:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!43bM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7d72600-0506-4595-9eae-61782ba7b01f_327x327.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://arxiv.org/pdf/2605.21997">This</a> is a very peek-into-the-future paper from Yohei Nakajima, the creator of BabyAGI, the *first* truly autonomous agent which went viral.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mJzq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mJzq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png 424w, https://substackcdn.com/image/fetch/$s_!mJzq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png 848w, https://substackcdn.com/image/fetch/$s_!mJzq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png 1272w, https://substackcdn.com/image/fetch/$s_!mJzq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mJzq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png" width="685" height="226" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:226,&quot;width&quot;:685,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22478,&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://agentengg.substack.com/i/199317579?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.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_!mJzq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png 424w, https://substackcdn.com/image/fetch/$s_!mJzq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png 848w, https://substackcdn.com/image/fetch/$s_!mJzq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png 1272w, https://substackcdn.com/image/fetch/$s_!mJzq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88d0d717-d573-4edd-b6e4-8d52ffe63bf5_685x226.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><br><br>The title is dramatic. The idea is more interesting than the title.<br><br>At first glance, it seems to oversell the idea of the chat "logs" - all the inputs, outputs, tool calls etc that accumulate during a conversation with Agent. <br><br>Yet another graph memory paper bolted on to the LLM.<br><br>But that's not the point. What it says is that:</p><ul><li><p> the <strong>activegraph</strong> is the single source of truth of everything that happened.</p></li><li><p> the <strong>harness</strong>, the imperative loop around the LLM isn't in there <em>explicitly</em>. </p></li><li><p>you can <strong>trace</strong> from any observation back to exactly what caused it, full details</p></li><li><p>if the conversation bumps into an error state, you can create alternative futures by <strong>branching</strong> and tweaking the prompt without replaying entire history. This isn&#8217;t natural to do now.</p></li></ul><p>So what drives the agent? <br><strong>Implicit reactive events.</strong> <br>tool call event -&gt; append to state<br>output created -&gt; update memory. <br>prompt updated -&gt; fork and re-run</p><p>A declarative set of harness rules sit outside. There is no explicit orchestrator for your Agent - it is in the BIOS of activegraph. Works through implicit reactive events that follow the harness rules.<br><br><strong>What's (or could be) cool about this?</strong><br></p><ul><li><p>Implicit reactive events run the system. Not an <em>easy-to-complicate</em> imperative harness loop. Any <em>fix</em> automatically triggers a deterministic cascade of correct downstream behaviors, rewriting the entire suffix of the graph purely through reactive dataflow.</p></li></ul><ul><li><p>Behaviors and rules are treated as data inside the log, you can append a <code>behavior.updated</code> or <code>prompt.patched</code> event mid-run.</p></li><li><p> enables creating different "futures" with branching. and comparing the futures. Notice a bug? fork and run with the new prompt, reusing all the history.</p></li><li><p>all the provenance, what happened after what, is preserved. enables explicit, precise debugging.<br></p></li></ul><p>Clearly, this creates a <em>humungous</em> graph. How does a human visualize it? The graph isn't a UI feature for humans to stare at; it's a <strong>data substrate</strong> for the agent.</p><p><br><strong>Ask a query to the active graph: how did we arrive at fact X. and it slices through the graph to render the relevant history for you.</strong></p><blockquote><p>Because every object carries strict provenance, if a final report says, <em>&#8220;We recommend avoiding this investment due to regulatory risk,&#8221;</em> a UI wouldn&#8217;t show you the 700-node operational graph. It would isolate and render a <strong>single linear path</strong> showing only the nodes directly connected to that claim:</p><pre><code><code>[User Goal] &#10132; [Planner Behavior] &#10132; [Research Question] &#10132; [Document Source] &#10132; [LLM Extraction] &#10132; [Final Risk Claim]
</code></code></pre><p>By filtering out the other 95% of the graph that didn&#8217;t contribute to this specific conclusion, the visualization becomes incredibly clean and auditable.</p><p></p></blockquote><p><br><br>But the big graph needs compaction. Can't keep appending. If a run hits 1,000,000 events, replaying it from scratch every time would make the system crawl. This graph bloating is a key bottleneck and work in progress.<br><br>There is a GitHub <a href="https://github.com/yoheinakajima/activegraph">implementation</a> too. Not as popular as BabyAGI yet.<br><br>But I like the direction: </p><blockquote><p>Traceability, Branching, and Memory are not three separate features here. They emerge from the same graph. Code (rules) and data (memory) live together.</p></blockquote><h2></h2><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Why Legal AI Remains Unsolved: A Technical Perspective]]></title><description><![CDATA[In spite of the crowded market, legal AI is far from being solved.]]></description><link>https://agentengg.substack.com/p/why-legal-ai-remains-unsolved-a-technical</link><guid isPermaLink="false">https://agentengg.substack.com/p/why-legal-ai-remains-unsolved-a-technical</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Mon, 18 May 2026 15:28:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Hg1X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Agentic AI systems hold immense promise for accelerating legal processes. For example, RAG/search-based Agents let lawyers ask natural-language questions while forcing the model to retrieve from trusted legal databases. </p><p><strong>The legal AI product market is already crowded.</strong> Major names: LexisNexis Prot&#233;g&#233; / Lexis+ AI, Thomson Reuters CoCounsel / Westlaw, Harvey, vLex Vincent AI / Clio, Bloomberg Law, Spellbook, Legora, DraftWise, Luminance, Kira, and Icertis.</p><p><strong>In spite of the crowded market, legal AI is far from being solved.</strong> <a href="https://arxiv.org/abs/2405.20362">Stanford/Yale researchers</a> found that RAG-based legal research tools reduced hallucinations versus general chatbots, but still hallucinated <strong>17% to 33%</strong> of the time across LexisNexis and Thomson Reuters tools.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hg1X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hg1X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!Hg1X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!Hg1X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!Hg1X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hg1X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png&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;:2266925,&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://agentengg.substack.com/i/198229085?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.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_!Hg1X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!Hg1X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!Hg1X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!Hg1X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed78a6e4-9d93-406b-bde3-d42bb2e80c57_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>On popular forums like <a href="https://news.ycombinator.com/item?id=45600263">hackernews</a>, the sentiment is split between &#8220;huge productivity tool&#8221; and &#8220;dangerous unless verified.&#8221; AI can lead them to relevant law faster, but every citation must be checked in Westlaw/Lexis before filing.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w0b5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w0b5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png 424w, https://substackcdn.com/image/fetch/$s_!w0b5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png 848w, https://substackcdn.com/image/fetch/$s_!w0b5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png 1272w, https://substackcdn.com/image/fetch/$s_!w0b5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w0b5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png" width="728" height="146.63099921321793" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:256,&quot;width&quot;:1271,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:87592,&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://agentengg.substack.com/i/198229085?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.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_!w0b5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png 424w, https://substackcdn.com/image/fetch/$s_!w0b5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png 848w, https://substackcdn.com/image/fetch/$s_!w0b5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png 1272w, https://substackcdn.com/image/fetch/$s_!w0b5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08cd0ecb-c10c-46ef-b573-d3c20b8ddb29_1271x256.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>Reddit forums also confirm repeatedly that AI helps with quick direction, summaries, and first-pass research, but lawyers still must verify every source. <a href="https://www.reddit.com/r/legaltech/comments/1nutwxu/is_ai_legal_research_bad/">One thread</a> notes enterprise tools drawing from actual statutes/case law can be useful, but &#8220;it can take some massaging&#8221; and &#8220;All responses have to be verified 24/7&#8221;.</p><p>Interestingly, small law offices turn to AI for relief from overwork. Law firms of all sizes use AI to draft court filings. From this Stanford cyberlaw <a href="https://cyberlaw.stanford.edu/blog/2025/10/whos-submitting-ai-tainted-filings-in-court/">article</a>:</p><blockquote><p>As the 404 Media article observed, &#8220;the legal industry is under great pressure to use AI.&#8221; To overworked attorneys at small law offices, these tools must seem like a godsend.</p></blockquote><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h1>What makes Legal AI so hard?</h1><h3>First, the <strong>query complexity</strong> is mind-boggling.</h3><p>See the slide below from a Harvey presentation. Typical queries involve both semantic and keyword components, domain-specific vocabulary, spanning many specialized legal corpora, and may have many parts to them. </p><p>This needs a full-blown, <a href="https://www.youtube.com/playlist?list=PLLPfjV1xMkS1k9J7q2v3eQ2U-At6p3evM">iterative Agentic search</a> with well-tuned keyword and semantic search engines, filters applied correctly and at right place to scale search, and planner knowing correctly which legal sources to localize to. Building such a powerful Agentic search system is technically quite challenging.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MO3L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MO3L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png 424w, https://substackcdn.com/image/fetch/$s_!MO3L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png 848w, https://substackcdn.com/image/fetch/$s_!MO3L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png 1272w, https://substackcdn.com/image/fetch/$s_!MO3L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MO3L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png" width="981" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:981,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:202893,&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://agentengg.substack.com/i/198229085?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.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_!MO3L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png 424w, https://substackcdn.com/image/fetch/$s_!MO3L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png 848w, https://substackcdn.com/image/fetch/$s_!MO3L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png 1272w, https://substackcdn.com/image/fetch/$s_!MO3L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbba1e39a-1d9d-4da1-82fc-b4749b183773_981x490.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.youtube.com/watch?v=W1MiZChnkfA">source</a> Complexity of Legal Queries</figcaption></figure></div><h5>Why do we need Agents for Legal RAG</h5><p>Now, query complexity isn&#8217;t the only reason we need sophisticated Agents. Legal work has a broad span: besides QA, also includes research planning, drafting, review, and iterative refinement, and considerable human-in-the-loop operation:</p><ul><li><p>Planner agents break a legal research question into sub-questions.</p><ul><li><p>Users can review and edit those sub-questions before the query is sent to search Agents for final answer generation.</p></li><li><p>Having human-in-the-loop enables about 20% improvement in results.</p></li></ul></li><li><p>Reflection agents are used for drafting: critique the draft, find missing clauses or legal issues, then revise.</p></li><li><p>Therefore, the Agentic system must know when to retrieve, reason, critique, validate, and escalate.</p></li></ul><h3>The second issue is far bigger.</h3><p>Legal work often has no single ground-truth answer, especially drafting and complex reasoning.</p><p>A case/citation retrieved by the Agent can be <strong>relevant but legally unusable</strong>. </p><p>Why?</p><ul><li><p>It may be overruled, from a lower court, jurisdictionally weak, stale, or not citable.</p></li><li><p>Pure vector/semantic search does not understand legal authority hierarchy.</p></li><li><p>&#8220;Accuracy&#8221; alone is a weak metric because an answer can look correct but miss authority, citation quality, comprehensiveness, or hallucination risk.</p></li></ul><blockquote><p>This makes the Agent&#8217;s task doubly hard. Finding <em><strong>plausible</strong></em> citations that satisfy the complex query requirements<em> </em>is <strong>not enough</strong>.</p><p>Standard Agentic RAG optimizes for <strong>relevance</strong>. <br>Legal users need <strong>authority, citability, completeness, and defensibility</strong>.</p></blockquote><p></p><h4>Can Knowledge Graphs (KGs) help with this issue?</h4><ul><li><p>After vector search finds contextually relevant content, a <strong>knowledge graph</strong> may be used to improve the quality of the filtered content, separate relevant from the legally useful</p></li><li><p><strong>A KG adds legal relationships.</strong> It represents cases, statutes, courts, jurisdictions, citations, overruling, distinguishing, following, and hierarchy as connected nodes/edges.</p></li><li><p><strong>GraphRAG retrieves semantically, then validates structurally.</strong> First use vector/keyword search to find candidate material; then traverse the graph to check whether those materials are legally valid and authoritative.</p><ul><li><p><strong>It filters weak matches.</strong> A semantically relevant but overruled or non-citable case can be demoted or removed.</p></li><li><p><strong>It boosts stronger authority.</strong> Binding precedent, higher-court decisions, current statutes, and jurisdiction-matched sources rank higher than merely similar text.</p></li><li><p><strong>It improves context completeness.</strong> The graph can pull related controlling law, parent/child doctrines, cited authorities, exceptions, and contrary cases that vector search may miss.</p></li><li><p><strong>It makes citations defensible.</strong></p></li></ul></li></ul><blockquote><p><strong>Knowledge Graphs clearly are a silver bullet in this space.</strong> However, their usefulness depends on finding all applicable precedents, decisions, exceptions, stale citations, court hierarchy, jurisdiction fit, and so on. Building a comprehensive knowledge graph is computationally intensive and requires careful construction of the graph and relationships. Missing, incomplete retrieved information can be <strong>severely risky</strong> for the legal professionals.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3eWd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3eWd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!3eWd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!3eWd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!3eWd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3eWd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png" width="664" height="373.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:664,&quot;bytes&quot;:1174412,&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://agentengg.substack.com/i/198229085?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.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_!3eWd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!3eWd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!3eWd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!3eWd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dcbeba-6f3e-45fd-85a9-a3068782d61e_1672x941.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>How do we evaluate the quality of retrieved citations?</strong></p><p>Conventional Agentic search relies on automated evals: metrics like accuracy, faithfulness, recall, precision, etc. are used on curated datasets to evaluate.</p><p><strong>However, accuracy isn&#8217;t well-defined in Legal QA</strong>. Legal RAG needs a &#8220;usefulness score&#8221; that includes multiple facets: answer relevance, legal authority, citation accuracy, comprehensiveness, current validity, jurisdiction fit. hallucination rate, practitioner usefulness.</p><p>In essence, Legal AI must be evaluated like a lawyer would evaluate work, not like a simple QA benchmark. LLM-as-judge can help triage, but final hallucination checks should be grounded in retrieved sources and legal metadata. This makes building Legal AI benchmarks even harder.</p><div><hr></div><p>Since RAG took the limelight, the legal domain has been considered one of its most promising applications. Yet despite a crowded market of Legal AI products, the problem is far from solved. To summarize:</p><p><strong>Standard RAG is only the first layer for legal AI. </strong></p><ul><li><p>Legal queries are complex.</p></li><li><p>Standard Agentic RAG optimizes for <strong>relevance</strong>; legal users need <strong>authority, citability, completeness, and defensibility</strong>. The results need not only be relevant but also<em> legally usable</em>.</p></li><li><p>GraphRAG can exploit deeper legal <em>metadata</em> (courts, jurisdictions, overrulings, &#8230;) to improve results but building comprehensive graphs is expensive.</p></li><li><p>Need a suite of metrics to evaluate usefulness of citation quality. Useful benchmarks are harder/expensive to create.</p></li><li><p>Finally, human verification is essential for evaluating usefulness. How to minimize the human effort remains to be a challenge.</p><p></p></li></ul><p>What makes Legal AI so hard is a mix of hard queries, relevance being a poor proxy for legal usefulness, absence of realistic benchmarks and difficult evaluation. In law, any relevant source is not necessarily a useful or citable one, and judging output quality often requires expert human review. </p><p>Today&#8217;s products solve parts of this problem, but many still need careful prompting, verification, and user training. The next generation of Legal AI will need to move beyond finding plausible answers toward producing work that is authoritative, needs less verification, and is genuinely useful to law professionals.</p><p></p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How Coding Agents Find Their Way Through Code]]></title><description><![CDATA[Coding Agents Work Because Code Leaves Clues: Localize and Inspect]]></description><link>https://agentengg.substack.com/p/how-coding-agents-find-their-way</link><guid isPermaLink="false">https://agentengg.substack.com/p/how-coding-agents-find-their-way</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Wed, 13 May 2026 10:19:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1IOQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>The Surprising Return of Boring Tools</h2><p>Agents with terminals are suddenly everywhere. Devin, Cursor, Manus, Claude Code, Codex, and several newer agent systems all point in the same direction: give the model a workspace, give it tools, let it act.</p><p>At first glance this sounds like a leap forward in AI capability. But if you watch what these code agents actually do, their actions look quite primitive.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>They list files. They search text. They read snippets. They run tests. They inspect errors. They edit a file and try again.</p><pre><code><code>ls # list
rg "deleteDocument|delete_document" # grep
sed -n '1,160p' src/routes/documents.ts # read
npm test -- documents # test
</code></code></pre><p>This isn&#8217;t trivial. The terminal gives the agent a way to interact with the codebase through stable, named operations, bash commands. It does not have to hold the entire repository in context. It can ask the repo questions.</p><p>That makes code agents feel <strong>less like a single giant model &#8220;understanding&#8221; a project</strong>, and more like a fast junior developer with a very patient shell: look around, search, read, try something, observe the result. </p><p>They use the boring but extremely powerful and scalable UNIX tools to compose together an insightful trail that leads to code understanding and the final answer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1IOQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1IOQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png 424w, https://substackcdn.com/image/fetch/$s_!1IOQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png 848w, https://substackcdn.com/image/fetch/$s_!1IOQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png 1272w, https://substackcdn.com/image/fetch/$s_!1IOQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1IOQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png" width="1092" height="609" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:609,&quot;width&quot;:1092,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1319962,&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://agentengg.substack.com/i/197473945?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.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_!1IOQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png 424w, https://substackcdn.com/image/fetch/$s_!1IOQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png 848w, https://substackcdn.com/image/fetch/$s_!1IOQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png 1272w, https://substackcdn.com/image/fetch/$s_!1IOQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf0b2e-cc74-4aef-95fb-0f2519d95276_1092x609.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Localization: Where Does the Answer Live?</h2><p>Before an agent can fix, explain, or modify code, it has to <strong>localize</strong> the concern: <br><code>Where in this repo does the answer live?</code></p><p>A user asks:</p><blockquote><p>How does this app send email?</p></blockquote><p>The answer may be spread across:</p><pre><code><code>mailer.py
send_email()
send_welcome_email()
settings.SMTP_HOST
users/views.py
auth/views.py</code></code></pre><blockquote><p>This is the localization problem: turn a human question into a searchable handle, the <strong>seed keywords</strong>. That might be a domain word, UI label, error message, route, function name, or config key.</p></blockquote><p>The seed does not need to be final. It only needs to reveal the next one. Code search is not just lookup. It is translation from the user&#8217;s vocabulary into the repository&#8217;s vocabulary.</p><blockquote><h2><strong>If you prefer, I created a short <a href="https://youtu.be/XAwxLLfESoU">Code Search Demo</a> video describing this example in more detail</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sSM3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sSM3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png 424w, https://substackcdn.com/image/fetch/$s_!sSM3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png 848w, https://substackcdn.com/image/fetch/$s_!sSM3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png 1272w, https://substackcdn.com/image/fetch/$s_!sSM3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sSM3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png" width="322" height="220.40641711229947" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:935,&quot;resizeWidth&quot;:322,&quot;bytes&quot;:356507,&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://agentengg.substack.com/i/197473945?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.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_!sSM3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png 424w, https://substackcdn.com/image/fetch/$s_!sSM3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png 848w, https://substackcdn.com/image/fetch/$s_!sSM3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png 1272w, https://substackcdn.com/image/fetch/$s_!sSM3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5f8af6-2569-444e-8ef9-aecfe23a0695_935x640.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><a href="https://youtu.be/XAwxLLfESoU">Demo</a></figcaption></figure></div></blockquote><p></p><h2>Tracing Through Names</h2><p>To answer the above question, the agent starts with a broad concern, then narrows it into the specific files and functions where the behavior lives.</p><p>It might start wide, with the powerful tool <a href="https://github.com/burntsushi/ripgrep">recursive grep</a> (ripgrep, rg):</p><pre><code><code>rg -l "email" # all file mentions of email</code></code></pre><p><strong>result:</strong></p><pre><code><code>src/notifications/mailer.py
src/users/views.py
config/settings.py</code></code></pre><p> <strong>mailer.py</strong> looks to be the key. The next question verifies that. What functions it defines:</p><pre><code><code>rg -n "def " src/notifications/mailer.py</code></code></pre><pre><code><code>4:  def send_email(to, subject, body):
19: def send_welcome_email(user):
26: def send_password_reset(user, token):</code></code></pre><p>Now the search has found a likely base function <strong>send_email</strong>:</p><pre><code><code>email -&gt; mailer.py -&gt; send_email()</code></code></pre><p>Reading just that function reveals the next names:</p><pre><code><code>rg -A 8 "def send_email" src/notifications/mailer.py # read send_email </code></code></pre><pre><code><code>with smtplib.SMTP(settings.SMTP_HOST) as s:
    s.send_message(msg)</code></code></pre><p>Now the search terms are no longer guesses. They came from the code: <code>smtplib</code>, <code>SMTP_HOST</code>, <code>send_email</code>.</p><pre><code><code>rg -n "send_email\\(" --type py
rg -C 1 "SMTP" config/settings.py #verify settings.py contains SMTP settings</code></code></pre><p>The trace becomes:</p><pre><code><code>email
-&gt; mailer.py
-&gt; send_email()
-&gt; smtplib + SMTP_HOST
-&gt; signup + password reset callers</code></code></pre><p>After a few searches, the answer is localized and grounded: </p><blockquote><p>The app emailer uses Python&#8217;s <code>smtplib</code>, configured through SMTP env vars, and is triggered by signup and password reset.</p></blockquote><p>This is the key idea. <em>ripgrep</em> <strong>does not understand email</strong>. It helps the agent follow the names that the program already uses to connect the feature together.</p><h2>The Agentic Search Loop</h2><p>The email example has the basic code-agent loop:</p><blockquote><p><strong>seed term -&gt; search -&gt; inspect -&gt; discover better term -&gt; search again</strong></p></blockquote><p>A result might reveal a filename, function name, import, route, error string, or test. Any of those can become the next query.</p><p>Good seed terms usually come from the terms closest to the user:</p><pre><code><code>domain words: email, invoice, document
UI labels: "Send invite", "Delete document"
routes: /documents/:id, POST /login
errors: 403, forbidden, invalid token
config: SMTP_HOST, DATABASE_URL
tests: password reset, rejects empty name</code></code></pre><p>Each step narrows the question: from rough domain language, to repo vocabulary, to the files where behavior actually lives.</p><p>Tests add another source of names. They are search amplifiers. A failing test might mention the exact route, expected status code, fixture, or error string:</p><pre><code><code>test failure -&gt; expected 403 -&gt; search "403" -&gt; find policy check
</code></code></pre><p>Finally, <strong>how do we know the loop is converging?</strong> The match set gets smaller. The same files keep recurring. The names in code start lining up with the user&#8217;s question.</p><h2>ripgrep: The Detective Workhorse</h2><p><code>ripgrep</code> is popular with code agents for a simple reason: it is cheap enough to use repeatedly and scales to large files.</p><p>That matters because agentic search is many small queries, not one big query.</p><pre><code><code>rg -l "email"
rg -n "def " src/notifications/mailer.py
rg -A 8 "def send_email" src/notifications/mailer.py
rg -n "send_email\\(" --type py
rg -C 1 "SMTP" config/settings.py</code></code></pre><p>Each variant answers a slightly different <strong>localization question</strong>.</p><blockquote><p><code>rg -l</code> gives the shape of the match set: which files even matter? <code>rg -n</code> gives line numbers, so the agent can jump to the right place. <code>-A</code>, <code>-B</code>, and <code>-C</code> reveal nearby context without reading the whole file. Type filters and globs keep the search inside the relevant part of the repo. Respecting <code>.gitignore</code> usually keeps irrelevant artifacts out of the way.</p></blockquote><p>This makes <code>ripgrep</code> useful in two ways at once.</p><ul><li><p>First, it is localized content search: find symbols, strings, comments, routes, errors, and config keys.</p></li><li><p>Second, it navigates repo structure: which directories mention this? Which file types? Which tests? Which modules keep recurring?</p></li></ul><p><code>ripgrep</code><strong> is not semantic search.</strong> It will not know that <em>send mail</em> and <em>dispatch notification</em> are related unless the code gives it a bridge. Codebases have plenty of bridges: function names, imports, tests, constants, routes, and error messages. In fact, Claude Code <a href="https://github.com/anthropics/claude-code/issues/20836">abandoned vector embedding based semantic search</a> in favor of keyword based explicit, agentic search.</p><p>Why is exact search so powerful? In a repo, names point to dependencies: functions have callers, routes have handlers, modules are imported, errors have branches, and tests have expectations.</p><p>In practice, several more optimizations are needed to make code agents scale. Repeated ripgrep queries eat up a lot of tokens and do repeated work. How do we cache? A clever solution is to build a code-map of your entire repository and query it to localize before making explicit ripgrep calls. For example, the <a href="https://github.com/tirth8205/code-review-graph">code-review-graph</a> tool provides a MCP server to query the local code map.</p><h2>Beyond Code: Named Interfaces for Agents</h2><p>Code is friendly to agents because it already has named, inspectable surfaces. The filesystem gives the agent a few reliable moves:</p><pre><code><code>list what exists
search for a name
read the nearby context
run the thing
inspect the result</code></code></pre><p>Interestingly, this search pattern is starting to show up outside code. <strong>Agent memory</strong> can be written to files. <strong>Plans, summaries, and observations</strong> can live in a workspace and be retrieved later with the same moves: <code>ls</code> to see what exists, <code>cat</code> or <code>sed</code> to read state, <code>rg</code> to recover something relevant.</p><p>But not everything agents need is naturally a file tree. Databases, APIs, conversations, logs, dashboards, and long-term memory all have structure that may not fit cleanly into normal files. Can we extend the same boring search pattern to them?</p><p>The design question here is whether they should expose filesystem-like surfaces:</p><ul><li><p>What is <code>ls</code> for a database? Tables, rows, schemas, recent queries?</p></li><li><p>What is <code>grep</code> for agent memory? Content search, metadata search, embeddings, or all three?</p></li><li><p>Find some early ideas in the article below.</p></li></ul><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;982edc49-d259-430c-b3d2-da6a3b6d16b1&quot;,&quot;caption&quot;:&quot;OpenClaw scaled because of a simple insight: the UNIX filesystem is a good operating surface for agents. Not just for storage, but as a read-write-edit interface.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Databases are becoming filesystems for agents&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:20667898,&quot;name&quot;:&quot;Nishant Sinha&quot;,&quot;bio&quot;:&quot;AI Builder and Advisor. PhD. Founder, OffNote Consulting Labs. Technologist 20+ years. Help businesses bring their vision to practice with GenAI - Agents, Voice, RAG. Make complex (ideas, technology, communication) simple and consumable. &quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c4c6d437-ef13-4142-bd55-1af6776f6a2d_724x1083.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-07T16:38:48.449Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!dpA4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agentengg.substack.com/p/databases-are-becoming-filesystems&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:196751941,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:500865,&quot;publication_name&quot;:&quot;Engineering Agents&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!43bM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7d72600-0506-4595-9eae-61782ba7b01f_327x327.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><blockquote><p>The lesson from code agents is that agents are effective when the knowledge base is exposed through <em>named operations</em> that allow inspection and localization.</p><p>The future of Agentic Search isn&#8217;t about giving models bigger prompts or more tools. It is more about giving every knowledge base a surface that allows the agent to localize and inspect at multiple resolutions.</p><p></p></blockquote><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Databases are becoming filesystems for agents]]></title><description><![CDATA[Building virtual Bash filesystems]]></description><link>https://agentengg.substack.com/p/databases-are-becoming-filesystems</link><guid isPermaLink="false">https://agentengg.substack.com/p/databases-are-becoming-filesystems</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Thu, 07 May 2026 16:38:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dpA4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>OpenClaw scaled because of a simple <a href="https://offnote.substack.com/p/towards-society-of-agents-the-coordination">insight</a>: the <strong>UNIX filesystem</strong> is a <a href="https://arxiv.org/pdf/2601.11672">good operating surface</a> for agents. Not just for storage, but as a read-write-edit interface.</p><p>If an agent can read, write, edit, and search files, it can do a surprising amount of useful work. It can inspect the current state of the world. It can modify that state. It can keep versions through Git. It can recover when something goes wrong. It can use commands like `ls`, `cat`, `grep`, `find`, `head`, and `wc` without needing a new API for every small action.</p><p>That is a strong primitive.</p><h3>But the ordinary filesystem has limits.</h3><p><em>It is not where most data lives</em>. Your context is spread across Postgres, Mongo, Redis, Elasticsearch, S3, Slack, Google Drive, remote server files, docs systems, logs, tickets, traces, and many other places.</p><blockquote><p>Moving back data from a specialized index back to ordinary filesystem may not be feasible.</p><p>Also, normal filesystems are not great at many things agents need: indexing, metadata, filtering, and efficient search over large collections.</p><p><strong>Databases</strong> already solve many of these problems.</p></blockquote><p>So maybe the answer is not to force everything into files. The better move is to expose databases through the same interface as a standard filesystem.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Database as virtual filesystem</h3><p>The agent keeps the simple interface. The backend gets to remain specialized.</p><p>`ls` can list folders, tables, collections, channels, documents, or query namespaces.</p><p>`cat` can read a file, row, document, message, page, or stored context item.</p><p>`find` can traverse the virtual hierarchy.</p><p>`grep` can search content, ideally by using the backend&#8217;s native index instead of downloading everything and scanning locally.</p><p>In summary: keep the filesystem API as the agent-facing operating surface, but let the system underneath route those commands to the right database, index, object store, or SaaS tool.</p><p>Several recent efforts point in this direction.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dpA4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dpA4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png 424w, https://substackcdn.com/image/fetch/$s_!dpA4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png 848w, https://substackcdn.com/image/fetch/$s_!dpA4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png 1272w, https://substackcdn.com/image/fetch/$s_!dpA4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dpA4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png" width="728" height="467.2327868852459" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:783,&quot;width&quot;:1220,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:184514,&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://agentengg.substack.com/i/196751941?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.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_!dpA4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png 424w, https://substackcdn.com/image/fetch/$s_!dpA4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png 848w, https://substackcdn.com/image/fetch/$s_!dpA4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png 1272w, https://substackcdn.com/image/fetch/$s_!dpA4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5797663d-6368-4e67-809c-b5d0ef6b1964_1220x783.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.strukto.ai/mirage">source</a></figcaption></figure></div><h3>Virtual Filesystems for Databases</h3><p><a href="https://www.oschina.net/comment/news/397061">LangSmith Agent Builder</a> treats agent memory as files: AGENTS.md, skills, tools.json, and knowledge files. The interesting part is that these do not have to live on a literal filesystem. They can be stored in Postgres while still being exposed to the agent as files. The agent gets a familiar workspace. The system gets database-backed persistence and management.</p><p><a href="https://www.mintlify.com/blog/how-we-built-a-virtual-filesystem-for-our-assistant">Mintlify built ChromaFs</a>, a virtual filesystem over Chroma. Their docs assistant could use commands like ls, cat, grep, and find over indexed documentation. This made the docs corpus feel like a filesystem to the agent, while avoiding the cost and latency of spinning up a real sandbox for every session.</p><p><a href="https://leoniemonigatti.com/blog/virtual-filesystem-elasticsearch.html">Leonie Monigatti implmented one with Elasticsearch</a>. The virtual filesystem supports the core Bash commands, but the backing store is an Elasticsearch index. The useful detail is how <em>grep</em> works: first use Elasticsearch <em>regex</em> for coarse search, then do more exact filtering in memory. That is the kind of translation layer these systems need.</p><blockquote><p>Both above rely on  <strong><a href="https://github.com/vercel-labs/just-bash">just-bash</a></strong> by Vercel Labs, a TypeScript reimplementation of bash that supports <code>grep</code>, <code>cat</code>, <code>ls</code>, <code>find</code>, and <code>cd</code>. just-bash exposes a pluggable <code>IFileSystem</code> interface, so it handles all the parsing, piping, and flag logic while (for Mintlify) ChromaFs translates every filesystem call into a Chroma query.</p></blockquote><p><a href="https://www.strukto.ai/mirage">Mirage</a> pushes the idea further. It tries to expose many data sources as one universal filesystem workspace: S3, Google Drive, Slack, Postgres, Mongo, Redis, remote files, and more. The agent can run familiar Bash-like commands across all of them.</p><p>A virtual Bash interface over popular DBs is powerful. The agent does not need a different interaction pattern for every data source. It can inspect heterogeneous systems through one modest interface, without changing its workflow.</p><h3>What&#8217;s the catch?</h3><p>What does <em>grep</em> mean on S3? Does it download files, stream them, use an index, or run remotely?</p><p>What does <em>cat</em> mean on a huge database table? (Mirage turns rows into JSON format)</p><ul><li><p>What does <em>ls</em> mean over Slack?</p></li><li><p>Are permissions inherited correctly from the source system?</p></li><li><p>Are search semantics the same across Elasticsearch, Chroma, Postgres, object storage, and Google Drive?</p></li></ul><p>This is where the abstraction gets tricky.</p><p>A universal Bash interface for agents is welcome news. The common set of Bash commands: ls, cat, grep, find, head, and wc are boring commands, but boring is often what makes an interface useful. Models already understand them. Developers understand them. Workflows compose around them.</p><p>But the hard part is making the abstraction cheap, faithful and predictable enough for agents to rely on it.</p><p>If that happens, then we will have extended society of Agents. </p><ul><li><p>Talking seamlessly to many databases, indices, object stores, and SaaS tools </p></li><li><p>Exposed through the simple, modest filesystem interface, which agents already know how to use.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Why RAG Teams Waste Months Trying the Wrong Fixes ]]></title><description><![CDATA[How to Choose the Right Fix for your Agentic Search Pipeline]]></description><link>https://agentengg.substack.com/p/why-rag-teams-waste-months-trying</link><guid isPermaLink="false">https://agentengg.substack.com/p/why-rag-teams-waste-months-trying</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Tue, 05 May 2026 15:21:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!usZX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A lot of RAG debugging (Agentic Search in 2026)  starts the same way: try better chunking, add metadata, add reranking, switch on hybrid search, try HyDE, rewrite the query, add table summaries, test a few more examples.</p><p>Some of these fixes may help. But unless you know <strong>what failure you are fixing</strong>, this is mostly <strong>expensive guessing</strong>. When RAG quality is unstable, the temptation is to keep adding fixes. The better first question is: <strong>what exactly is broken?</strong></p><p>Most engineers can now recite the common RAG fixes I mentioned above. Unfortunately, they see these fixes as quick knobs to experiment with. Trying these one after another can lead to months of wasted effort, debugging fatigue, and deep frustration.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!usZX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!usZX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png 424w, https://substackcdn.com/image/fetch/$s_!usZX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png 848w, https://substackcdn.com/image/fetch/$s_!usZX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png 1272w, https://substackcdn.com/image/fetch/$s_!usZX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!usZX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png" width="629" height="354" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:354,&quot;width&quot;:629,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:301503,&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://agentengg.substack.com/i/196547006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.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_!usZX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png 424w, https://substackcdn.com/image/fetch/$s_!usZX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png 848w, https://substackcdn.com/image/fetch/$s_!usZX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png 1272w, https://substackcdn.com/image/fetch/$s_!usZX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b8301c6-cad7-41e9-8148-732027113dc2_629x354.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>What&#8217;s the solution then? The harder part is knowing <strong>which trick matches which failure</strong>. A reranker, for example, helps when the right chunk is already retrieved but buried too low. It does not solve the same problem as better chunking or HyDE. Identifying the <em>right</em> <strong>failure mode</strong> <em>quickly</em> is far more important than the specific fix you try.</p><div><hr></div><h2>Failure Modes of Agentic Search?</h2><p>One useful way to think about RAG is how to setup <strong><a href="https://www.youtube.com/watch?v=-8Yeg1IgzJs">bridges</a></strong> between <em>what the user asks</em> and <em>where the answer lives in your documents</em>. A bad answer usually means one of those bridges failed: the system did not retrieve the right evidence, retrieved it but ranked it poorly, retrieved without paying heed to the surrounding context, or could not distinguish the correct chunk from a similar but wrong one.</p><p>These are different failure modes and each mode comes with its own bag of fixes. That is why I prefer grouping RAG fixes by <strong>failure mode</strong> instead of treating them as a checklist.</p><h3>The first failure mode is Missing Context.</h3><p>Sometimes the retriever finds the right paragraph, but the generated answer still feels incomplete or brittle. The paragraph may mention the answer, but not the section logic, assumptions, definitions, or surrounding details needed to use it correctly.</p><p>That is the problem <strong>structure-aware chunking</strong> tries to solve. Chunking by document structure instead of fixed token count keeps paragraphs closer to the section they belong to. <strong>Metadata</strong> such as section name, fragment title, date, or source gives the model additional placement context. And retrieving small chunks but passing a <strong>larger surrounding window</strong> to the LLM helps the system zoom out before generating.</p><p>The goal is not simply <em>better chunking</em>. The goal is to restore enough context for the answer to be correct and make sense.</p><h3>Second failure mode: Weak query-document Bridge.</h3><p>Sometimes the answer exists in the corpus, but the user&#8217;s query does not <em>connect cleanly</em> to the document text. This happens with short queries, vague queries, synonyms, domain-specific phrasing, and tables.</p><p>A couple of different fixes work here, depending on <strong>why</strong> the query failed to connect.</p><p><strong>Hybrid search</strong> helps because keyword search and semantic search catch different kinds of relevance. <strong>HyDE</strong> helps when the original query is too thin, by creating a richer retrieval target. <strong>Multi-query retrieval</strong> helps by searching from several phrasings or intent guesses. For <strong>tables</strong>, summaries often work better than raw embeddings because they turn rows and numbers into language the query can match.</p><p>Again, the goal is not to <em>try HyDE</em> or <em>use hybrid search</em>. The goal is to make the user&#8217;s question easier to connect to the right evidence.</p><h3>The third failure mode is Bad Ranking.</h3><p>Sometimes the right chunk is retrieved, but it appears too low in the list. To a user, that might mean it is never seen. To an LLM, it means the useful evidence may be diluted by earlier noisy chunks.</p><p>That is where <strong>rerankers</strong> help. They do not necessarily expand what you retrieve; they improve the order of what you already found. The goal is to put the best evidence at the top.</p><h3>Fourth failure mode: Weak Generalization to new queries.</h3><p>A RAG pipeline can look good on easy examples and still fail in production. The real test is whether it can choose correctly when several chunks look similar, but only one is actually right.</p><p>That is why hard negatives or hard distractors matter. They test whether the retriever and the overall pipeline can distinguish close matches from correct matches. That enables generalization to unseen production queries.</p><div><hr></div><p>So instead of asking, &#8220;Should we add HyDE?&#8221;, &#8220;Should we use hybrid search?&#8221;, or &#8220;Should we change chunk size?&#8221;, ask a more basic question first:</p><p><strong>What kind of failure are we seeing?</strong></p><ul><li><p>Is it missing context?  </p></li><li><p>A weak query-document bridge?  </p></li><li><p>Bad ranking?  </p></li><li><p>Low generalization?</p></li><li><p>Agent&#8217;s plan is incomplete</p></li><li><p>&#8230;</p></li></ul><p>In practice, failure modes rarely show up cleanly. They are often entangled, and one failure can look like another.</p><p>A missing-context problem may look like a weak bridge problem.<br>A ranking problem may look like a generation problem.<br>A weak query-document match may look like &#8220;the model is hallucinating.&#8221;</p><p>So diagnosis takes effort and practice. You have to inspect execution logs, review retrieved chunks, look at failed queries, compare near-misses, and study the data closely.</p><p>I&#8217;ll be writing more on this topic. Subscribe to this series, and follow my YouTube <a href="https://www.youtube.com/watch?v=SI_xQZLOZoc&amp;list=PLLPfjV1xMkS1k9J7q2v3eQ2U-At6p3evM&amp;index=1">Agentic Search series</a> for deeper walkthroughs.</p><div><hr></div><p><strong>Related Posts:</strong></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;76c4485e-4c35-4dfb-9d16-1d12459350d5&quot;,&quot;caption&quot;:&quot;Vector search is a crude proxy for relevance.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Vector search is a crude proxy for Relevance&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:20667898,&quot;name&quot;:&quot;Nishant Sinha&quot;,&quot;bio&quot;:&quot;AI Builder and Advisor. PhD. Founder, OffNote Consulting Labs. Technologist 20+ years. Help businesses bring their vision to practice with GenAI - Agents, Voice, RAG. Make complex (ideas, technology, communication) simple and consumable. &quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c4c6d437-ef13-4142-bd55-1af6776f6a2d_724x1083.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-18T07:09:01.554Z&quot;,&quot;cover_image&quot;:null,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agentengg.substack.com/p/vector-search-is-a-crude-proxy-for&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:191340012,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:1,&quot;publication_id&quot;:500865,&quot;publication_name&quot;:&quot;Engineering Agents&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!43bM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7d72600-0506-4595-9eae-61782ba7b01f_327x327.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;82fcf05d-0959-43f4-98f2-38be51686770&quot;,&quot;caption&quot;:&quot;You&#8217;ve probably heard about the standard (R)etrieval (AG) recipe for finding answers to queries: chunk documents, embed chunks as numeric vectors, similarity search with queries, then LLM. You&#8217;ve also heard the backlash: this approach is chunk-sensitive, too non-contextual, doesn&#8217;t work alone, needs fine-tuning, brute-force and so on.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Vector vs Vectorless RAG Is the Wrong Debate&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:20667898,&quot;name&quot;:&quot;Nishant Sinha&quot;,&quot;bio&quot;:&quot;AI Builder and Advisor. PhD. Founder, OffNote Consulting Labs. Technologist 20+ years. Help businesses bring their vision to practice with GenAI - Agents, Voice, RAG. Make complex (ideas, technology, communication) simple and consumable. &quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c4c6d437-ef13-4142-bd55-1af6776f6a2d_724x1083.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-04-22T13:15:03.033Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!SLvt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agentengg.substack.com/p/vector-vs-vectorless-rag-is-the-wrong&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:195025245,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:500865,&quot;publication_name&quot;:&quot;Engineering Agents&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!43bM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7d72600-0506-4595-9eae-61782ba7b01f_327x327.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:117827025,&quot;url&quot;:&quot;https://offnote.substack.com/p/llm-ir-1-why-your-gpt-vector-search&quot;,&quot;publication_id&quot;:218637,&quot;publication_name&quot;:&quot;OffNote Labs Newsletter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!olva!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52d9747-24a3-469e-a92e-0852d2ec0617_274x274.png&quot;,&quot;title&quot;:&quot;(LLM-IR #1) Why your GPT + Vector Search RAG demo won't make it to production?&quot;,&quot;truncated_body_text&quot;:&quot;One of the most popular use cases made feasible by ChatGPT / OpenAI APIs is the ability to chat with custom documents, company web pages, video transcripts and so on. Here is how the popular embed-and-match recipe works:&quot;,&quot;date&quot;:&quot;2023-05-09T15:08:16.261Z&quot;,&quot;like_count&quot;:8,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:20667898,&quot;name&quot;:&quot;Nishant Sinha&quot;,&quot;handle&quot;:&quot;ekshaks&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c4c6d437-ef13-4142-bd55-1af6776f6a2d_724x1083.jpeg&quot;,&quot;bio&quot;:&quot;AI Builder and Advisor. PhD. Founder, OffNote Consulting Labs. Technologist 20+ years. Help businesses bring their vision to practice with GenAI - Agents, Voice, RAG. Make complex (ideas, technology, communication) simple and consumable. &quot;,&quot;profile_set_up_at&quot;:&quot;2021-07-30T15:33:59.198Z&quot;,&quot;reader_installed_at&quot;:null,&quot;publicationUsers&quot;:[{&quot;id&quot;:120730,&quot;user_id&quot;:20667898,&quot;publication_id&quot;:218637,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:218637,&quot;name&quot;:&quot;OffNote Labs Newsletter&quot;,&quot;subdomain&quot;:&quot;offnote&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Insights on Generative AI, Voice Agents, Retrieval, Deep Learning, and Problem Solving at Scale. &quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e52d9747-24a3-469e-a92e-0852d2ec0617_274x274.png&quot;,&quot;author_id&quot;:20667898,&quot;primary_user_id&quot;:20667898,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2020-11-20T05:22:51.802Z&quot;,&quot;email_from_name&quot;:&quot;Nishant Sinha&quot;,&quot;copyright&quot;:&quot;Nishant Sinha&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:null,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}},{&quot;id&quot;:428941,&quot;user_id&quot;:20667898,&quot;publication_id&quot;:500865,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:500865,&quot;name&quot;:&quot;Engineering Agents&quot;,&quot;subdomain&quot;:&quot;agentengg&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Thoughts on building reliable, autonomous, scalable, AI Agents.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7d72600-0506-4595-9eae-61782ba7b01f_327x327.png&quot;,&quot;author_id&quot;:20667898,&quot;primary_user_id&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#00C2FF&quot;,&quot;created_at&quot;:&quot;2021-09-24T04:05:33.758Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Nishant Sinha&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:null,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;twitter_screen_name&quot;:&quot;ekshakhs&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://offnote.substack.com/p/llm-ir-1-why-your-gpt-vector-search?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!olva!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52d9747-24a3-469e-a92e-0852d2ec0617_274x274.png" loading="lazy"><span class="embedded-post-publication-name">OffNote Labs Newsletter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">(LLM-IR #1) Why your GPT + Vector Search RAG demo won't make it to production?</div></div><div class="embedded-post-body">One of the most popular use cases made feasible by ChatGPT / OpenAI APIs is the ability to chat with custom documents, company web pages, video transcripts and so on. Here is how the popular embed-and-match recipe works&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 years ago &#183; 8 likes &#183; Nishant Sinha</div></a></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Passive Workplace Revolt against AI]]></title><description><![CDATA[80% of Enterprise Workers are resisting AI Adoption]]></description><link>https://agentengg.substack.com/p/the-passive-workplace-revolt-against</link><guid isPermaLink="false">https://agentengg.substack.com/p/the-passive-workplace-revolt-against</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Thu, 30 Apr 2026 05:42:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!43bM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7d72600-0506-4595-9eae-61782ba7b01f_327x327.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>80% of enterprise workers are avoiding or actively sabotaging AI tools, and only 26% cite fear of job loss as the reason. <br><br>Reddit threads like <a href="https://www.reddit.com/r/BetterOffline/comments/1o4eyup/how_are_people_coping_with_having_ai_forced_on/">this</a> are full of employees complaining how the management doesn't understand that AI isn't useful for their tasks and how they fake AI usage to stay aligned. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZQM3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZQM3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png 424w, https://substackcdn.com/image/fetch/$s_!ZQM3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png 848w, https://substackcdn.com/image/fetch/$s_!ZQM3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png 1272w, https://substackcdn.com/image/fetch/$s_!ZQM3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZQM3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png" width="733" height="242" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:242,&quot;width&quot;:733,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59942,&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://agentengg.substack.com/i/195958245?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.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_!ZQM3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png 424w, https://substackcdn.com/image/fetch/$s_!ZQM3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png 848w, https://substackcdn.com/image/fetch/$s_!ZQM3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png 1272w, https://substackcdn.com/image/fetch/$s_!ZQM3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4e197f-2658-476a-83a2-61afe89e47c5_733x242.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Token-maxxing is in!</p><blockquote><p>&#8220;Employees at Meta Platforms who want to show off their AI superuser chops are competing on an internal leaderboard for status as a &#8220;Session Immortal&#8221;&#8212; or, even better, &#8220;Token Legend.&#8221;</p></blockquote><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><br>The resistance is structural, not emotional. Why is this reaction ununsual? Three core reasons:<br>1. <strong>AI changes the work itself.</strong> You move from being a hands-on developer to a code manager.<br>2. <strong>AI&#8217;s output is unpredictable.</strong> We are biased to expect consistency and determinism from software. Non-determinism creates distrust.<br>3. <strong>The stakes feel existential</strong>. "this will make you more productive" sounds like "this will make half of you unnecessary". why will I stay useful is not clarified.<br></p><div><hr></div><p><br>Orgs succeeding at adoption treat it as a &#119836;&#119841;&#119834;&#119847;&#119840;&#119838; &#119846;&#119834;&#119847;&#119834;&#119840;&#119838;&#119846;&#119838;&#119847;&#119853; &#119842;&#119847;&#119842;&#119853;&#119842;&#119834;&#119853;&#119842;&#119855;&#119838;: <br>- involving workers in design, <br>- providing role-specific training, and <br>- measuring outcomes instead of logins.</p><p>Really nice investigation on this issue <a href="https://www.vectrel.ai/blog/enterprise-ai-worker-resistance-quiet-rebellion">here</a>.</p><p>I did a quick short on this topic sometime back. Getting the hang of it! <br>Watch more videos by me on AI Engineering <a href="https://www.youtube.com/@OffNoteLabs/shorts">here</a> &#8212; Do subscribe!</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;28381eff-6ba6-437a-87e2-7e9fa0d54c17&quot;,&quot;duration&quot;:null}"></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Vector vs Vectorless RAG Is the Wrong Debate]]></title><description><![CDATA[All roads lead to Localization]]></description><link>https://agentengg.substack.com/p/vector-vs-vectorless-rag-is-the-wrong</link><guid isPermaLink="false">https://agentengg.substack.com/p/vector-vs-vectorless-rag-is-the-wrong</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Wed, 22 Apr 2026 13:15:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SLvt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You&#8217;ve probably heard about the standard (<strong>R)etrieval (AG)</strong> recipe for finding answers to queries: <em>chunk documents, embed chunks as numeric vectors, similarity search with queries</em>, then <em>LLM</em>. You&#8217;ve also heard the backlash: this approach is chunk-sensitive, too non-contextual, doesn&#8217;t work alone, needs fine-tuning, brute-force and so on. </p><p>Add <strong>hybrid</strong> search, <strong>hierarchy</strong>, <strong>contextualization</strong>, <strong>graphs</strong>, <strong>rerankers</strong>, <strong>agent loops</strong>, or switch to something like <a href="https://github.com/VectifyAI/PageIndex">PageIndex</a> and say: this is vectorless, don&#8217;t need vector embeddings anymore! LLMs will handle long documents directly.</p><p>This is where the discussion gets muddled.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SLvt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SLvt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png 424w, https://substackcdn.com/image/fetch/$s_!SLvt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png 848w, https://substackcdn.com/image/fetch/$s_!SLvt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png 1272w, https://substackcdn.com/image/fetch/$s_!SLvt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SLvt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png" width="350" height="482.29665071770336" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:418,&quot;resizeWidth&quot;:350,&quot;bytes&quot;:151778,&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://agentengg.substack.com/i/195025245?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.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_!SLvt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png 424w, https://substackcdn.com/image/fetch/$s_!SLvt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png 848w, https://substackcdn.com/image/fetch/$s_!SLvt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png 1272w, https://substackcdn.com/image/fetch/$s_!SLvt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53074d87-841a-4635-8a18-7522dc08f0c3_418x576.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><p>Most RAG debate compares <strong>implementations</strong><em> (how)</em>, not <strong>retrieval strategies </strong><em>(what/why</em><strong>)</strong>. We keep enumerating methods instead of forming a domain understanding. </p><ul><li><p>There is naive RAG, advanced RAG, GraphRAG, HippoRAG, PageIndex, Hindsight, and so on. </p></li><li><p>Next, we fall back on weak empirical takes or social media commentary: RAG is dead, GraphRAG is better, or you rarely need GraphRAG. All you need is Memory.</p></li></ul><blockquote><p>It is easy to add another X-Rag to the list. Happens on a daily basis. <br>Why? Lack of clarity on what any of these methods is trying to achieve.</p><p>For example, how does the default chunk-embed-match method compare to the newer pageindex method? The latter claims they are vectorless - is that the key differentiator?</p></blockquote><p>Not knowing the <em><strong>what</strong></em> and <em><strong>why</strong></em> of a retrieval method pushes the engineer to keep switching methods and retuning knobs. There are <em>hundreds</em> of those knobs floating around. Different ways to chunk, embed, fine-tune, rerank, filter, graph ANN configurations, graph representations, ingestion configs, memory formats and so on. </p><blockquote><p>I&#8217;ve seen teams waste months tweaking configurations before they realize what is actually wrong with their search engine. </p></blockquote><p>One of the core retrieval problems is simpler than the jargon makes it sound: <strong>localization</strong>.</p><p></p><h2><strong>Localization Is the Core Retrieval Problem</strong></h2><p>Localization is the art of narrowing down from a huge corpus to a much smaller subset that is likely to contain the answer.</p><p>Say you have a million documents. In comes a query. The retrieval system cannot brute-force compare the query with the whole corpus in one shot. Many reasons why: queries span many attributes, keywords vs metadata, could be multi-hop and so on.</p><p>The system needs to <strong>localize</strong>: reduce that million to a few tens or hundreds of candidate documents, sections, or chunks that <em>plausibly contain the answer</em> to the query. Localization must be efficient. Once done, examine the localized candidates  to extract the final answer (say, by reasoning using LLM). </p><p>Once you think this way, many retrieval methods become easier to compare. </p><p>Not &#8220;vector vs vectorless.&#8221;<br>Not &#8220;old RAG vs new RAG.&#8221;<br>Not &#8220;LLM-based vs classical.&#8221;</p><div class="pullquote"><h3>The real question is:<strong> how does this system localize?</strong></h3></div><p>A <em>vector-full</em> approach localizes by </p><ul><li><p><em>hashing</em> (embedding) each document into a small vector, hashing the query too,</p></li><li><p>scoring query vs all documents at scale, </p></li><li><p>then filtering the top-K results. </p></li><li><p>In short: hash -&gt; score -&gt; filter. Each stage determines how efficient overall localization is.</p></li></ul><p>A <em>vectorless</em> approach like <a href="https://github.com/VectifyAI/PageIndex">PageIndex</a> localizes differently. </p><ul><li><p>It builds a hierarchy of sections, tagged with summaries of what lies below. Intuitively, a <em><strong>table of contents</strong></em>, tagged with per item summary.</p></li><li><p>The <em>query</em> is matched against that structure, iteratively top-down or one-shot</p></li><li><p>and the engine narrows toward the sections most likely to answer it.</p></li><li><p>once localized, reason through the full sub-documents, or <em>redo</em> localization.</p></li></ul><p>The first approach compares the query against everything in one flat sweep. The second one uses structure to progressively narrow the search space. The retrieval policy is tree-guided rather than pool-wide.</p><div class="pullquote"><h4><strong>The important distinction is not really vector-full vs vectorless. </strong></h4><h4>Both are trying to do the same thing<strong>: </strong></h4><h4><strong>Localize the query to a smaller relevant region of the corpus.</strong></h4></div><p></p><p>Once you see this, a lot of noisy debate becomes easier to parse. Embeddings are an implementation choice. LLM reasoning is an implementation choice. Summaries are an implementation choice. Even &#8220;vectorless&#8221; is just a description of one mechanism. Those are all answers to <strong>how</strong>. </p><blockquote><p>It was never about vectors or LLM magic. What we really care about is <strong>efficient localization.</strong></p><p>In fact, the key question is:<em> </em></p><p><em>Which localization strategy works best for your problem?</em></p></blockquote><p>More broadly, it is not just about Search. Localization is core to keeping <strong>context compact</strong>/relevant inside <strong>Agents</strong> (<a href="https://openai.com/index/harness-engineering/">harness engineering</a>). </p><p>We&#8217;re perfectly content if classic <strong>grep</strong> is enough to <strong>zero in</strong> to the right code parts.</p><div><hr></div><h2><strong>Avoid Arguments about How Before You Know the Objective</strong></h2><p>A lot of retrieval discussion goes in circles because the objective is never made explicit.</p><p>Engineers switch methods without a clear model of what changed. They compare branded systems instead of comparing retrieval policies.</p><p>That is what makes search feel more mysterious than it is.</p><p>If you can clearly state how your system localizes to relevant documents, you are already thinking at a more useful level than most RAG discourse.</p><p>Too much discussion lives in the how. The interesting part is usually the what.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Claude Code Leak has an Unexpected Side-effect]]></title><description><![CDATA[46-page architecture description]]></description><link>https://agentengg.substack.com/p/the-claude-code-leak-has-an-unexpected</link><guid isPermaLink="false">https://agentengg.substack.com/p/the-claude-code-leak-has-an-unexpected</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Sat, 18 Apr 2026 10:02:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!t0D_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There is a full unofficial 46-page paper that talks about its architecture in comprehensive detail. Based on a source-based analysis of publicly available Claude Code TypeScript code, using that code to reconstruct the system design. </p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><strong>Summary of Key Ideas</strong></p><ul><li><p>The paper&#8217;s main claim is that Claude Code itself is <strong>architecturally simple</strong> at the center: <strong>a basic loop that calls the model, runs tools, and repeats.</strong> The real sophistication sits in the surrounding harness.</p></li><li><p>That harness is what the paper focuses on: permissions, context management, extensibility, subagent orchestration, and durable session persistence.</p></li><li><p>The authors frame Claude Code as a system optimized around five values: human control, safety/security, reliable execution, capability amplification, and context adaptability.</p></li><li><p>Claude Code uses a <strong>layered safety model</strong> rather than trusting user approvals alone: deny-first rules, multiple permission modes, an ML-based auto-mode classifier, hook interception, and optional shell sandboxing.</p></li><li><p><strong>Context management is treated as a first-class bottleneck.</strong> The paper argues Claude Code uses a <strong>multi-step compaction pipeline</strong> plus lazy loading of instructions and tools so the context window stays usable over long sessions.</p></li><li><p><strong>Extensibility</strong> is split into four distinct mechanisms, each with a different role: <strong>MCP</strong> for tool integration, <strong>plugins</strong> for packaging, <strong>skills</strong> for lightweight instruction shaping, and <strong>hooks</strong> for lifecycle interception.</p></li><li><p><strong>Subagents</strong> are presented as isolated workers rather than just extra prompts in the same thread. They can run with separate configs, tools, and even separate worktrees.</p></li><li><p><strong>Persistence</strong> is append-oriented: transcripts are stored as JSONL, can be resumed or forked, and are designed to outlive the active context window.</p></li></ul><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t0D_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t0D_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png 424w, https://substackcdn.com/image/fetch/$s_!t0D_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png 848w, https://substackcdn.com/image/fetch/$s_!t0D_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png 1272w, https://substackcdn.com/image/fetch/$s_!t0D_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t0D_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png" width="856" height="890" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:890,&quot;width&quot;:856,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131906,&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://agentengg.substack.com/i/194597430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.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_!t0D_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png 424w, https://substackcdn.com/image/fetch/$s_!t0D_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png 848w, https://substackcdn.com/image/fetch/$s_!t0D_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png 1272w, https://substackcdn.com/image/fetch/$s_!t0D_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5161fb89-c7f3-4dde-82ed-22e2f255ecae_856x890.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">How Claude Code Builds its System Prompt  <a href="https://www.dbreunig.com/2026/04/04/how-claude-code-builds-a-system-prompt.html">source</a></figcaption></figure></div><p></p><p><strong>My takes on what stands out most:</strong></p><ul><li><p>The strongest surprise is how much of the product is &#8220;scaffolding,&#8221; not model logic. The paper keeps coming back to the idea that the core loop is simple and most of the engineering effort is in the control system around it.</p></li><li><p>The permission system is more layered than most people would guess. The paper identifies seven safety layers, not just &#8220;ask user before running command.&#8221;</p></li><li><p>User approval prompts are considered behaviorally unreliable because users approve about 93% of them. So the design response was not &#8220;ask better,&#8221; but &#8220;rely less on prompts and more on boundaries.&#8221;</p></li><li><p>Context management is not one summary step, but a five-stage compaction pipeline plus lazy-loading of instructions, rules, and tool definitions.</p></li><li><p>CLAUDE.md is apparently not just a static instruction file. The paper describes a <strong>hierarchy</strong> of memory files, path-scoped <strong>lazy loading</strong>, and even the detail that this content is injected as user-context rather than system-prompt content. <strong>A fully modular pipeline to create CLAUDE.md</strong>.</p></li><li><p>A particularly interesting design choice: resumed or forked sessions do not restore previously granted session permissions. The system treats each session as a fresh trust boundary, even at the cost of friction.</p></li><li><p>The persistence model is unusually transparent. Instead of opaque state, the paper says Claude Code uses append-only JSONL transcripts and sidechain transcript files for subagents.</p></li><li><p>The paper points to one sharp edge: under adversarial/performance pressure, some safety guarantees can weaken together because multiple layers share latency and cost constraints. It cites a case where commands with more than 50 subcommands may collapse into a single generic approval path.</p></li></ul><p></p><p>Anthropic never wrote a detailed architecture document - all we know, about the model and its harness, is from their piece-wise communications. So, this unofficial structured writeup fills in a crucial gap. Read the full paper <a href="https://arxiv.org/html/2604.14228v1">here</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How do you turn a Vibe Coder into a Senior Engineer? (channeling Karpathy)]]></title><description><![CDATA[How do you turn a vibe coder into a senior engineer?]]></description><link>https://agentengg.substack.com/p/how-do-you-turn-a-vibe-coder-into</link><guid isPermaLink="false">https://agentengg.substack.com/p/how-do-you-turn-a-vibe-coder-into</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Tue, 14 Apr 2026 07:05:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-JOx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o0xC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o0xC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png 424w, https://substackcdn.com/image/fetch/$s_!o0xC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png 848w, https://substackcdn.com/image/fetch/$s_!o0xC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png 1272w, https://substackcdn.com/image/fetch/$s_!o0xC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o0xC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png" width="541" height="138" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:138,&quot;width&quot;:541,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:24564,&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://agentengg.substack.com/i/194156936?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.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_!o0xC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png 424w, https://substackcdn.com/image/fetch/$s_!o0xC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png 848w, https://substackcdn.com/image/fetch/$s_!o0xC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png 1272w, https://substackcdn.com/image/fetch/$s_!o0xC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc873cd-7aec-44ef-b630-922704c67d81_541x138.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption"><a href="https://www.linkedin.com/posts/thekonst_the-vibe-coding-debate-is-missing-the-point-activity-7448637595544113152-0Ubs?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAAuj6kBnH0WXYgRp7oUQ4oo0H_zv9cUH6k">source</a></figcaption></figure></div><p>How do you turn a vibe coder into a senior engineer? </p><p>&#119822;&#119849;&#119853;&#119842;&#119846;&#119842;&#119859;&#119838; &#119839;&#119848;&#119851; &#119851;&#119838;&#119845;&#119842;&#119834;&#119835;&#119842;&#119845;&#119842;&#119853;&#119858;, &#119847;&#119848;&#119853; &#119843;&#119854;&#119852;&#119853; &#119855;&#119838;&#119845;&#119848;&#119836;&#119842;&#119853;&#119858;.</p><p>Most teams are still trying to solve this with more &#120366;&#120362;&#120356;&#120371;&#120368;-prompting.</p><blockquote><p>Scaling a vibe-coded prototype without understanding its foundations is like building the second floor of a house without checking if the first floor has load-bearing walls.<br></p></blockquote><p>That is the wrong approach. The right layer is to setup defaults: <strong>encode judgment once, get it on every task.</strong></p><p>There are a couple of approaches floating around that do this. I&#8217;ll discuss two of them in this post.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Addy Osmani&#8217;s <a href="https://github.com/addyosmani/agent-skills">Agent Skills</a> repository. Emulate a senior engineer&#8217;s workflow through a sequence of /slash commands. The (ex-) vibe coder follows this sequence deliberately during coding or creates a meta-command that loop over these atomic steps.</p><p>This is a pretty comprehensive set of commands with detailed prompts that cover all stages of development from spec&#8217;ing to shipping.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-JOx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-JOx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png 424w, https://substackcdn.com/image/fetch/$s_!-JOx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png 848w, https://substackcdn.com/image/fetch/$s_!-JOx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png 1272w, https://substackcdn.com/image/fetch/$s_!-JOx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-JOx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png" width="929" height="848" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0fd21ca-9862-404b-8fac-a66af278476c_929x848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:848,&quot;width&quot;:929,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:145019,&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://agentengg.substack.com/i/194156936?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.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_!-JOx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png 424w, https://substackcdn.com/image/fetch/$s_!-JOx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png 848w, https://substackcdn.com/image/fetch/$s_!-JOx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png 1272w, https://substackcdn.com/image/fetch/$s_!-JOx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0fd21ca-9862-404b-8fac-a66af278476c_929x848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><p>The repo <a href="https://github.com/forrestchang/andrej-karpathy-skills">forrestchang/andrej-karpathy-skills</a> tackles the painpoint at a more abstract layer. AI moves fast at cost of silent, expensive mistakes: how to constrain its persona into a more deliberate agent. </p><p>Targets four key frustrating scenarios:</p><ul><li><p>wrong assumptions that ship to production</p></li><li><p>overengineered code and bloated diffs</p></li><li><p>edits that spill into unrelated files</p></li><li><p>weak verification, so humans become full-time babysitters</p></li></ul><p>The big idea is &#119847;&#119848;&#119853; to write better prompts or enable easy manual guidance. Instead, set behavior-level constraints so the model acts like a careful engineer by default.The repo focuses on a persistent CLAUDE.md style/persona layer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n0DW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n0DW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.png 424w, https://substackcdn.com/image/fetch/$s_!n0DW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.png 848w, https://substackcdn.com/image/fetch/$s_!n0DW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.png 1272w, https://substackcdn.com/image/fetch/$s_!n0DW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n0DW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.png" width="585" height="557" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec389776-a09b-4800-8155-a84aff8bea82_585x557.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:557,&quot;width&quot;:585,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97418,&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://agentengg.substack.com/i/194156936?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.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_!n0DW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.png 424w, https://substackcdn.com/image/fetch/$s_!n0DW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.png 848w, https://substackcdn.com/image/fetch/$s_!n0DW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.png 1272w, https://substackcdn.com/image/fetch/$s_!n0DW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec389776-a09b-4800-8155-a84aff8bea82_585x557.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Instead of manually steering with /slash commands on each task, this sets coarser-level defaults: ask clarifying questions, avoid overengineering, keep edits scoped, and verify before saying done.</p><div><hr></div><p>Vibe coding opened a huge new frontier for 10x output and faster iteration, but it also introduced a tax: constant babysitting and heavy review.  </p><p>The practical middle path is not to slow AI down, but to channel it with clear engineering defaults and human checkpoints.  </p><p>Let the developer stay in control of intent, boundaries, and final quality, while AI contributes speed, exploration, and bursts of implementation leverage.  </p><p>That is how you keep the upside of velocity without paying for it later in reliability debt.</p><div><hr></div><p>I wrote earlier about operational risks associated with AI written code. Ruthless judgement during /ship and desire to own what they ship are hallmarks of an AI-assisted Senior Engineer.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;15341ccb-db43-42c4-bedc-d7016560fe19&quot;,&quot;caption&quot;:&quot;AI-generated code creates a new production risk.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;AI Writes Great PRs. That Doesn&#8217;t Mean They&#8217;re Safe to Ship&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:20667898,&quot;name&quot;:&quot;Nishant Sinha&quot;,&quot;bio&quot;:&quot;AI Builder and Advisor. PhD. Founder, OffNote Consulting Labs. Technologist 20+ years. Help businesses bring their vision to practice with GenAI - Agents, Voice, RAG. Make complex (ideas, technology, communication) simple and consumable. &quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c4c6d437-ef13-4142-bd55-1af6776f6a2d_724x1083.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-31T14:11:08.540Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!XH-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agentengg.substack.com/p/ai-writes-great-prs-that-doesnt-mean&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:192734172,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:500865,&quot;publication_name&quot;:&quot;Engineering Agents&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!43bM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7d72600-0506-4595-9eae-61782ba7b01f_327x327.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Skills are not free lunch]]></title><description><![CDATA[Agents fail badly at selecting the right skills at scale]]></description><link>https://agentengg.substack.com/p/skills-are-not-free-lunch</link><guid isPermaLink="false">https://agentengg.substack.com/p/skills-are-not-free-lunch</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Thu, 09 Apr 2026 17:28:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!T7Et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Skills are not the free lunch people hoped for.<br><br>We spent too much time debating MCP vs Skills.<br>But the real issue is: How is Agent&#8217;s capability selection under overload?<br><br>Skills looked like the missing abstraction for agents: package tool use, load on demand, reduce context clutter, avoid system instruction bloat. <br><br>But this paper points to a harder reality.<br><br>In real settings (34k Skills), &#119853;&#119841;&#119838; &#119840;&#119834;&#119842;&#119847;&#119852; &#119839;&#119851;&#119848;&#119846; &#119852;&#119844;&#119842;&#119845;&#119845;&#119852; &#119837;&#119838;&#119840;&#119851;&#119834;&#119837;&#119838;. Even when the right skills are available, agents often fail to load and use them correctly!<br><br>Force-loading curated skills gave Claude 55.4%, but letting the agent decide dropped that to 51.2%. Add distractors, and it fell to 43.5%.<br><br>The bottleneck isn't just retrieving skills.<br>It is recognizing which ones matter, ignoring the wrong ones, and adapting them to the task.<br><br>The proposed fix isn&#8217;t obvious: &#119826;&#119844;&#119842;&#119845;&#119845; &#119825;&#119838;&#119839;&#119842;&#119847;&#119838;&#119846;&#119838;&#119847;&#119853;.<br>Instead of treating retrieved skills as fixed, refine them: improve clarity, discard irrelevant parts, merge what matters.<br><br>On &#119827;&#119838;&#119851;&#119846;&#119842;&#119847;&#119834;&#119845;-&#119809;&#119838;&#119847;&#119836;&#119841; 2.0, that pushed Claude Opus 4.6 from 57.7% to 65.5%.</p><p>Some notes:</p><ul><li><p>There is a sharp drop in skill usage even when curated skills are available. This suggests that agents struggle to recognize relevant skills from their names and descriptions alone, and refining skill metadata may help agents better select which skills to load.</p></li><li><p>What is Skill Refinement:  the process of transforming retrieved skills into more useful forms</p><ul><li><p>the agent reflects on which skills were useful and which were misleading</p></li><li><p>(more costly, better perf) agent can even merge and synthesize across multiple retrieved skills, extracting the relevant portions from each and combining them into a single coherent skill while discarding irrelevant content.</p></li><li><p>Refinement is assisted by the meta-skill <em>skill-creator </em>from Claude</p></li></ul></li></ul><p></p><h4>Key lesson: A better packaging layer does not remove the decision problem. </h4><p>The core problems are here to stay:<br>- How does your Agent pick the right one from hundreds of Skills or Tools?<br>- Even when the right Skills are retrieved, does the Agent deploy them correctly?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T7Et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T7Et!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png 424w, https://substackcdn.com/image/fetch/$s_!T7Et!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png 848w, https://substackcdn.com/image/fetch/$s_!T7Et!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png 1272w, https://substackcdn.com/image/fetch/$s_!T7Et!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T7Et!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png" width="567" height="583" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:583,&quot;width&quot;:567,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:138580,&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://agentengg.substack.com/i/193711708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.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_!T7Et!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png 424w, https://substackcdn.com/image/fetch/$s_!T7Et!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png 848w, https://substackcdn.com/image/fetch/$s_!T7Et!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png 1272w, https://substackcdn.com/image/fetch/$s_!T7Et!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b500f35-a976-4f9e-975f-b4cd5b66a359_567x583.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://arxiv.org/pdf/2604.04323v1">source</a></figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Agents Can Turn Your Messy Notes Into a Coherent Wiki]]></title><description><![CDATA[What If Your Notes Organized Themselves?]]></description><link>https://agentengg.substack.com/p/agents-can-turn-your-messy-notes</link><guid isPermaLink="false">https://agentengg.substack.com/p/agents-can-turn-your-messy-notes</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Tue, 07 Apr 2026 13:23:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jrhc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Karpathy <a href="https://x.com/karpathy/status/2039805659525644595">proposed</a> an <a href="http://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f">approach</a> to create personal knowledge bases with low effort. </p><p>Like most of his other <em>quick</em> tweets, this too went viral.</p><p>In summary: how to use Agents to store, manipulate, retrieve from a unified (personal) knowledge Wiki. Given only a raw dump of documents of your interest, changing over time. An auto-updated, human-readable index, of all your knowledge. Do this with minimal human effort.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tFBu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tFBu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png 424w, https://substackcdn.com/image/fetch/$s_!tFBu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png 848w, https://substackcdn.com/image/fetch/$s_!tFBu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png 1272w, https://substackcdn.com/image/fetch/$s_!tFBu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tFBu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png" width="473" height="527" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:527,&quot;width&quot;:473,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110988,&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://agentengg.substack.com/i/193438724?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.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_!tFBu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png 424w, https://substackcdn.com/image/fetch/$s_!tFBu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png 848w, https://substackcdn.com/image/fetch/$s_!tFBu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png 1272w, https://substackcdn.com/image/fetch/$s_!tFBu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c1b6b41-3ef2-43ea-aaa6-1a738d32b4d4_473x527.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://x.com/karpathy/status/2039805659525644595">source</a></figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><strong>Here&#8217;s the high-level plan:</strong></h3><ul><li><p>Dump all your documents into a folder. </p></li><li><p>Agent turns that into a <strong>Knowledge Wiki</strong> - a map for your knowledge, some call it a <em>second brain</em>. This is collection of markdown files, organized by concepts, relations between documents, cite original wherever required.</p></li><li><p>Query the full Wiki using plain English, again through an Agent.</p></li><li><p>The Wiki evolves as you add more documents.</p></li><li><p>Easily navigate through Wiki using Obsidian. That serves as the Data IDE. View raw data and make manual edits if required.<br><br>You can ask it (all sorts of) things like:<br>- "Which other docs reference this concept?"<br>- "What connects these two concepts?"<br>- "What are the most important insights in this (sub-)project?"<br>- and more..<br><br>All curation is Agent-automated. No vector database. No config files. Fully end user enabled.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jrhc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jrhc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jrhc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jrhc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jrhc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jrhc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg" width="527" height="553.491921005386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1170,&quot;width&quot;:1114,&quot;resizeWidth&quot;:527,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!jrhc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jrhc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jrhc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jrhc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246a9f68-effe-41fe-8c83-e51d1066984d_1114x1170.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://x.com/himanshustwts/status/2039811786602607052?s=20">source</a>: </figcaption></figure></div><blockquote><p>It turns out that several researchers/influencers already have created and maintain personal versions of this Wiki concept. For example, <a href="https://x.com/lexfridman/status/2039841897066414291?s=20">Lex Fridman</a>, <a href="https://x.com/omarsar0/status/2039810525652025715?s=20">@omarsar0</a> and others.</p><p>Karpathy put the requirements (PRD) out, which were mostly implicit till this point. More details below.</p></blockquote><div><hr></div><p>If you&#8217;ve followed the whole retrieval ecosystem, RAG, vector databases, knowledge graphs, and the frameworks around them, it might seem surprising that a much simpler approach, just dumping files into a workspace and letting the agent grep through them, works at all.</p><p>However, this approach isn&#8217;t quite out of the blue. We could have seen this coming:</p><ul><li><p><a href="https://pageindex.ai/blog/pageindex-intro">PageIndex</a> - vectorless RAG</p></li><li><p>Openclaw - filesystem + .md as database. read more <a href="https://offnote.substack.com/p/towards-society-of-agents-the-coordination">here</a>.</p></li><li><p>many other recent ..</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5NiF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5NiF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5NiF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5NiF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5NiF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5NiF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg" width="1456" height="607" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:607,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;loop&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="loop" title="loop" srcset="https://substackcdn.com/image/fetch/$s_!5NiF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5NiF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5NiF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5NiF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110c545f-e33f-47fe-b4f7-6867736b11c4_2418x1008.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>All of above rely on </p><ul><li><p>store all data as .md files, stored with some hierarchy</p></li><li><p>building or reusing external indices (directory path or content-summary based) for all the data transformed </p></li><li><p>Openclaw and others update the .md files with task reflections, updates etc</p><p></p></li></ul><div><hr></div><h3><strong>Karpathy&#8217;s Proposal</strong></h3><blockquote><p>Karpathy&#8217;s proposal generalizes this to the full docs lifecyle:</p><ul><li><p>create a (road) map to organize the documents. This map or index is itself a collection of .md files - the Wiki.</p></li><li><p>update the map as new docs arrive</p></li><li><p>generic-query these documents (no additional infra other than Agent and tools)</p><p></p></li></ul></blockquote><p>Building a personalized Wiki, which adapts to new knowledge is, in many ways, the holy grail for the end-user. </p><p>As much as this excites me, I can already see several blockers to making it reliable, scalable, and genuinely useful in practice.</p><ul><li><p>Can Agents keep data clean and organized as we keep throwing more documents at it? </p></li><li><p>What topic clusters will it choose? Do they align with what human expects? What is the granularity of concepts? Too many concepts will disorient both human and search.</p></li><li><p>Will the global overview lose fine-grained details in the articles? Even make it harder to retrieve back the details?</p></li><li><p>How do we query at scale? One way to scale this is nested retrieval as in PageIndex - lookup top level index, then go down level by level to the original docs. At some point, however, you need to trust that the LLM can perform <em>faithful</em> reasoning over a large-enough context. That may not hold. More scalable options include using <a href="https://github.com/tobi/qmd">qmd</a> for searching markdown files.</p></li><li><p>What hurts most with Agent vibe coding is that humans lose the mental map of their code base. Are humans ok losing the map for their personal KB too?</p></li></ul><div><hr></div><p></p><p>In my opinion, we will have vibe-success building such Wikis over tens or even hundreds of documents. But then, we will run into data management issues (overlapping, incomplete, conflicting data) and consequently, poor query results, seeding disillusionment with personal knowledge bases again.</p><p>Potential workarounds:</p><ul><li><p>Keeping human in the loop for curating, re-organizing the data. This essential to enable persisted, long-term learning, but leads to increased human effort.</p></li><li><p>File+Grep-based Agentic search has a ceiling. Implement iterative agentic search with advanced <a href="https://offnote.substack.com/p/llm-ir-2-rag-from-scratch-bridging">bridges</a>.</p></li><li><p>Pull back parts of the knowledge base into weights of the LLM by fine-tuning. I&#8217;ve strong reservations here, mainly because it reverses the nice <a href="https://offnote.substack.com/p/the-quest-for-a-modular-llm-agent">modularity</a> we have between the controller LLM and the data.</p></li></ul><p></p><p>A few open source efforts (<a href="https://www.linkedin.com/feed/update/urn:li:activity:7446253320886910976/">this</a> with a lot of community discussions) are already on way to create these autonomous Personal Knowledge Wikis. Excited to see how the space evolves and how far we can go with minimal human-in-the-loop !</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Is MCP Dead?]]></title><description><![CDATA[CLI Agents all you need?]]></description><link>https://agentengg.substack.com/p/is-mcp-dead</link><guid isPermaLink="false">https://agentengg.substack.com/p/is-mcp-dead</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Fri, 03 Apr 2026 08:29:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ySk6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Is MCP dead? A lot of people seem to think so. </strong><br>CLI agents operating on filesystems have taken over.<br><br>The funny part is that MCP&#8217;s complexity did not disappear. It just moved somewhere less visible. The complexity isn't gone.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><br>First, a quick look at the CLI agents and &#8220;super-agents&#8221;. They are converging on the same basic primitives (<a href="https://offnote.substack.com/p/towards-society-of-agents-the-coordination">read in detail</a> here):<br>- hierarchical object storage<br>- filesystem as memory<br>- terminal as the universal interface<br>- git for versioning and conflict handling<br></p><p>This matters because it simplifies the surface area of agent systems. Instead of building everything around a dedicated protocol layer with explicit service metadata, agents can increasingly work through the interfaces that software systems already expose: files, shells, processes, and repositories.<br><br>This stack is simpler than the earlier &#8220;everything through MCP&#8221; vision.<br>But the wrong conclusion is that MCP&#8217;s bottlenecks have disappeared.<br>They have not. <strong>They have moved!</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ySk6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ySk6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png 424w, https://substackcdn.com/image/fetch/$s_!ySk6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png 848w, https://substackcdn.com/image/fetch/$s_!ySk6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png 1272w, https://substackcdn.com/image/fetch/$s_!ySk6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ySk6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png" width="693" height="463" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:463,&quot;width&quot;:693,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:486350,&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://agentengg.substack.com/i/193048381?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.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_!ySk6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png 424w, https://substackcdn.com/image/fetch/$s_!ySk6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png 848w, https://substackcdn.com/image/fetch/$s_!ySk6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png 1272w, https://substackcdn.com/image/fetch/$s_!ySk6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1024f5ee-cf65-4e1d-9293-1cf5fa74f6a1_693x463.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br><br>&#119813;&#119842;&#119851;&#119852;&#119853;, &#119820;&#119810;&#119823;&#8217;&#119852; &#119838;&#119857;&#119849;&#119845;&#119842;&#119836;&#119842;&#119853; &#119835;&#119845;&#119848;&#119834;&#119853; &#119842;&#119852; &#119835;&#119838;&#119836;&#119848;&#119846;&#119842;&#119847;&#119840; &#119842;&#119846;&#119849;&#119845;&#119842;&#119836;&#119842;&#119853; &#119810;&#119819;&#119816; &#119835;&#119845;&#119848;&#119834;&#119853;.<br>Earlier, the clutter was visible in eager-loaded service metadata and tool registries.<br>Now the same sprawl can show up as a growing universe of CLI commands, flags, and external service wrappers.<br><br>The burden of managing that complexity has shifted to (or stays with) the agent.<br><br>&#119826;&#119838;&#119836;&#119848;&#119847;&#119837;, &#119853;&#119841;&#119838; &#119839;&#119842;&#119845;&#119838;&#119852;&#119858;&#119852;&#119853;&#119838;&#119846; &#119842;&#119852; &#119835;&#119838;&#119842;&#119847;&#119840; &#119834;&#119852;&#119844;&#119838;&#119837; &#119853;&#119848; &#119834;&#119836;&#119853; &#119845;&#119842;&#119844;&#119838; &#119834; &#119837;&#119834;&#119853;&#119834;&#119835;&#119834;&#119852;&#119838;.<br>You can get surprisingly far with files, grep, hierarchy and conventions.</p><p>The filesystem is a powerful substrate, and in many cases it is enough. Files are easy to inspect, easy to version, and easy to integrate into existing developer workflows. But the filesystem is not a database. You can get far with grep and hierarchical naming conventions, but friction appears quickly when you need richer retrieval, structured relationships, scalable writes or consistent shared state.<br><br>So yes, the stack is getting simpler.<br>But simplification at the interface layer does not remove coordination complexity. &#119816;&#119853; &#119843;&#119854;&#119852;&#119853; &#119851;&#119838;&#119845;&#119848;&#119836;&#119834;&#119853;&#119838;&#119852; &#119842;&#119853;.</p><p>The key lesson is not that MCP lost and CLI won. When one interface layer gets simpler, the burden usually reappears somewhere else: tool discovery, state management, retrieval, or conflict handling.</p><p><br>The important question is no longer &#8220;Do you use MCP or CLI?&#8221;<br>It is: &#119856;&#119841;&#119838;&#119851;&#119838; &#119842;&#119852; &#119858;&#119848;&#119854;&#119851; &#119852;&#119853;&#119834;&#119853;&#119838;, &#119846;&#119838;&#119846;&#119848;&#119851;&#119858;, &#119834;&#119847;&#119837; &#119853;&#119848;&#119848;&#119845;-&#119852;&#119838;&#119845;&#119838;&#119836;&#119853;&#119842;&#119848;&#119847; &#119836;&#119848;&#119846;&#119849;&#119845;&#119838;&#119857;&#119842;&#119853;&#119858; &#119834;&#119836;&#119853;&#119854;&#119834;&#119845;&#119845;&#119858; &#119845;&#119842;&#119855;&#119842;&#119847;&#119840; &#119847;&#119848;&#119856;?</p><p>Key takewaway: Understand where the coordination layer has moved in your system.</p><p><br></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[AI Writes Great PRs. That Doesn’t Mean They’re Safe to Ship]]></title><description><![CDATA[The Dangerous Gap Between &#8220;Looks Good&#8221; and &#8220;Safe to Ship&#8221;]]></description><link>https://agentengg.substack.com/p/ai-writes-great-prs-that-doesnt-mean</link><guid isPermaLink="false">https://agentengg.substack.com/p/ai-writes-great-prs-that-doesnt-mean</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Tue, 31 Mar 2026 14:11:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XH-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI-generated code creates a new production risk.</p><p>The issue is not that the code looks bad. It often looks surprisingly polished, sometimes more polished than what many engineers would write under time pressure.</p><p>The problem is that a <strong>clean PR</strong> is not the same as <strong>safe-to-ship code</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Models can generate convincing implementations without understanding the implicit constraints around your system:</p><ul><li><p>infrastructure limits</p></li><li><p>runtime dependencies</p></li><li><p>operational quirks</p></li><li><p>failure patterns that only show up in production</p></li></ul><p>That creates a dangerous gap between looks correct and is safe.</p><p>The <strong>right stance is to leverage AI</strong>, not rely on it.</p><p>AI can help teams move faster through grunt work.<br>But engineering judgment now shifts from writing every line to <strong>ruthlessly reviewing</strong> what gets shipped.</p><p>If you&#8217;re using AI coding tools in real systems, this is the psychological and technical battle that matters most. Hard learned lessons from using agents in production.</p><p>I think we are finally zeroing in on what the  top engineering skills are for the upcoming cobuild-with-AI generation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XH-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XH-K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png 424w, https://substackcdn.com/image/fetch/$s_!XH-K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png 848w, https://substackcdn.com/image/fetch/$s_!XH-K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png 1272w, https://substackcdn.com/image/fetch/$s_!XH-K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XH-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png" width="740" height="545" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:545,&quot;width&quot;:740,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91610,&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://agentengg.substack.com/i/192734172?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.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_!XH-K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png 424w, https://substackcdn.com/image/fetch/$s_!XH-K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png 848w, https://substackcdn.com/image/fetch/$s_!XH-K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png 1272w, https://substackcdn.com/image/fetch/$s_!XH-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cd730c-d80b-4ba6-8959-ea9b9a9b17a6_740x545.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">source: https://vercel.com/blog/agent-responsibly</figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[A Sweet Spot between SFT and RL ]]></title><description><![CDATA[Model Tuning Tradeoffs: Efficiency vs Generalization]]></description><link>https://agentengg.substack.com/p/a-sweet-spot-between-sft-and-rl</link><guid isPermaLink="false">https://agentengg.substack.com/p/a-sweet-spot-between-sft-and-rl</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Sun, 29 Mar 2026 06:58:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MpLs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In SFT (Supervised Fine-tuning) approaches, student models (being trained) imitate teacher traces too closely. Excess of information to learn from. High chances of memorizing irrelevant stuff.</p><p>In contrast, RL approaches learn from rewards provided at the end of the run. Less supervision - better generalization. However, each trace has too little information/supervision. We need many runs / rollouts to separate relevant actions from noise. </p><p>Is there a middle ground - efficiency + generalization?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><a href="https://arxiv.org/abs/2603.21383">PivotRL</a> is one in the several recent approaches to find a middle ground between RL and SFT.</p><ul><li><p>(<strong>filter</strong>) narrow down to key moments in the traces - pivots. Actions at the pivot points vary highly across runs.</p></li><li><p>(<strong>reuse</strong>). transfer rewards across traces with equivalent intermediate actions.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MpLs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MpLs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png 424w, https://substackcdn.com/image/fetch/$s_!MpLs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png 848w, https://substackcdn.com/image/fetch/$s_!MpLs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png 1272w, https://substackcdn.com/image/fetch/$s_!MpLs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MpLs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png" width="552" height="452" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:452,&quot;width&quot;:552,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:223442,&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://agentengg.substack.com/i/192483849?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.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_!MpLs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png 424w, https://substackcdn.com/image/fetch/$s_!MpLs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png 848w, https://substackcdn.com/image/fetch/$s_!MpLs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png 1272w, https://substackcdn.com/image/fetch/$s_!MpLs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5c93875-daea-474e-9f2e-42d0de9fc95c_552x452.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Also, see <a href="https://thinkingmachines.ai/blog/on-policy-distillation/">article</a> on on-policy distillation with dense supervision from Thinking Machines. Dense supervision tries to find a similar sweet spot.</p><p>Yet another middle ground is Near-Future Policy Optimization (<a href="https://arxiv.org/pdf/2604.20733">NFPO</a>), which uses a checkpoint from later in the same training run as your trajectory source. Why? External teacher trajectories (from a stronger model) are high quality - but far from your current policy. The model struggles to absorb them. Past replay trajectories are close to your current policy but you&#8217;ve already learned from them.<br><br>NPO finds a middle path: </p><p>Great overview of different related techniques (Mar 2026)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!otUb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!otUb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png 424w, https://substackcdn.com/image/fetch/$s_!otUb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png 848w, https://substackcdn.com/image/fetch/$s_!otUb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png 1272w, https://substackcdn.com/image/fetch/$s_!otUb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!otUb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png" width="489" height="858" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:858,&quot;width&quot;:489,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:211796,&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://agentengg.substack.com/i/192483849?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.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_!otUb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png 424w, https://substackcdn.com/image/fetch/$s_!otUb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png 848w, https://substackcdn.com/image/fetch/$s_!otUb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png 1272w, https://substackcdn.com/image/fetch/$s_!otUb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1397b1-45a4-4f42-8506-39e14c689f76_489x858.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.linkedin.com/posts/zhoutongfu_a-quiet-convergence-is-happening-in-rl-for-share-7448572894353432576-gu8C/?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAAuj6kBnH0WXYgRp7oUQ4oo0H_zv9cUH6k">source</a></figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Mistake in Agentic Coding: Going Straight From Intent to Code]]></title><description><![CDATA[Agentic Spec-Driven Development Needs a Compiler Mindset]]></description><link>https://agentengg.substack.com/p/the-mistake-in-agentic-coding-going</link><guid isPermaLink="false">https://agentengg.substack.com/p/the-mistake-in-agentic-coding-going</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Wed, 25 Mar 2026 07:10:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pVxq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You should not ask Codex or Claude Code to generate code directly from a high-level specification. First plan. Then write code.</p><p>This is now standard practice. For a long time, developers tried to generate code directly from top-level specifications, and the results were often poor. It is very difficult to make one-shot generated code reliably match a high-level spec.</p><p>How did we solve this?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>We introduced a formal planning phase: an artifact that translates intent into a lower-level structure that can guide implementation. That works much better. The lesson is that autonomous code generation can work, but only with careful scaffolding.</p><p>There is a useful analogy here to compiler design. A compiler translates code into lower-level instructions automatically, at scale, and with high reliability. Its advantage comes from using multiple phases. Each phase analyzes the whole program at one level of abstraction and then converts it into the next intermediate form. Trying to collapse all of that into a single pass would be algorithmically harder and much more difficult to debug. Multiple smaller phases keep the process tractable and clean.</p><blockquote><p>Agents do not automate coding.<br>They automate (first-phase) draft generation.</p></blockquote><p>Agent-driven code generation should work the same way. We need multiple intermediate specifications of increasing granularity that eventually lead to low-level code, while still keeping tight control over what gets generated. </p><p>Over time, more of our intent can be pushed into specifications and guardrails, giving us an Agent workflow with its own sequence of &#8220;compile&#8221; phases.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pVxq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pVxq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png 424w, https://substackcdn.com/image/fetch/$s_!pVxq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png 848w, https://substackcdn.com/image/fetch/$s_!pVxq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png 1272w, https://substackcdn.com/image/fetch/$s_!pVxq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pVxq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png" width="736" height="660" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:736,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209790,&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://agentengg.substack.com/i/192054396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.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_!pVxq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png 424w, https://substackcdn.com/image/fetch/$s_!pVxq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png 848w, https://substackcdn.com/image/fetch/$s_!pVxq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png 1272w, https://substackcdn.com/image/fetch/$s_!pVxq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F911b283a-2131-4eaf-91c7-a7a46b8c8a54_736x660.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">For instance, pre.dev uses this multi-phase generation idea (from <a href="https://www.indiehackers.com/post/tech/building-a-fully-agentic-engineer-and-growing-it-to-500k-arr-AmXRemXjPfYkTFGSUUy1">here</a>)</figcaption></figure></div>]]></content:encoded></item><item><title><![CDATA[Stuck in Eval loop? Look for a better abstraction]]></title><description><![CDATA[Most teams spend their time making evals frameworks more robust so they can catch and fix low-level errors again and again.]]></description><link>https://agentengg.substack.com/p/stuck-in-eval-loop-look-for-a-better</link><guid isPermaLink="false">https://agentengg.substack.com/p/stuck-in-eval-loop-look-for-a-better</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Mon, 23 Mar 2026 16:28:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!43bM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7d72600-0506-4595-9eae-61782ba7b01f_327x327.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most teams spend their time making evals frameworks more robust so they can catch and fix low-level errors again and again.<br><br>This can also become a loop:<br>better evals, better error detection, more patching, more edge cases.<br><br>The deeper question is rarely asked:<br>is the system failing because the abstraction is wrong?<br><br>That kind of debugging sits one level above error fixing.<br>It is slower, less obvious, and harder to prioritize.<br><br>Which is exactly why most teams skip it.<br><br>If your evals keep finding new failures, the problem may not be your coverage.<br>It may be that you are debugging the implementation instead of the design.</p><p></p><div><hr></div><p>For example, how <a href="https://www.linkedin.com/posts/hema-raghavan-1581075_ai-machinelearning-codingagents-activity-7441613860081590272-eisR?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAAuj6kBnH0WXYgRp7oUQ4oo0H_zv9cUH6k">Kumo AI team</a> escaped low level Pytorch/XGBoost library errors by working at higher layer.</p><p></p><blockquote><p>Coding agents are only as good as the abstractions they work with.<br><br>We put this to the test using <strong><a href="https://www.linkedin.com/company/kumo-ai/">Kumo</a></strong>'s Research Agent to build an account-level fraud model &#8212; and the results were eye-opening.<br><br>When coding agents work with low-level frameworks, mistakes are almost inevitable.<br><br>PyTorch errors: double class imbalance, loss averaged by data size instead of sample size<br>XGBoost errors: label granularity issues, label leakage<br><br>These aren't careless mistakes &#8212; they're a symptom of working with the wrong abstractions. Low-level frameworks weren't designed for the way agents reason about problems.<br><br>With <strong><a href="https://www.linkedin.com/company/kumo-ai/">Kumo</a></strong>'s Research Agent, the same task produced zero errors &#8212; and required just 55 lines of code instead of 1,014. The resulting model was also 10% more accurate than an expert-built XGBoost model in production.<br>The lesson? The abstraction layer matters as much as the agent itself. Kumo gives coding agents the right foundation to reason about relational data &#8212; so they stop making the kinds of mistakes that quietly undermine your models.<br>We're seeing this play out across fraud detection, recommendations, risk scoring, and more. The teams winning with AI aren't just picking the best agent &#8212; they're pairing it with the right platform.</p></blockquote><p></p><p>Yet another instance of this - build better GPU abstractions to allow Agents to optimize GPU programs better. <a href="https://www.linkedin.com/posts/conorbronsdon_modular-how-to-beat-unsloths-cuda-kernel-activity-7418366503865176064-YbBn?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAAuj6kBnH0WXYgRp7oUQ4oo0H_zv9cUH6k">here</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[End of Era for Python?]]></title><description><![CDATA[Wes Mckinney argues that in the new world where agent writes software, Python loses its data science edge to Go and Rust.]]></description><link>https://agentengg.substack.com/p/end-of-era-for-python</link><guid isPermaLink="false">https://agentengg.substack.com/p/end-of-era-for-python</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Sun, 22 Mar 2026 05:02:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-QWj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://wesmckinney.com/blog/agent-ergonomics/">Wes Mckinney</a> argues that in the new world where agent writes software, Python loses its data science edge to Go and Rust. The full stack Python will be eaten away from bottom, which will be re-engineered to allow agents to be more productive.</p><p>Do you agree? Will be interesting to see how this hypothesis pans out in the next few years.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-QWj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-QWj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png 424w, https://substackcdn.com/image/fetch/$s_!-QWj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png 848w, https://substackcdn.com/image/fetch/$s_!-QWj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png 1272w, https://substackcdn.com/image/fetch/$s_!-QWj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-QWj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png" width="830" height="444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:444,&quot;width&quot;:830,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128251,&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://agentengg.substack.com/i/191732000?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.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_!-QWj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png 424w, https://substackcdn.com/image/fetch/$s_!-QWj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png 848w, https://substackcdn.com/image/fetch/$s_!-QWj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png 1272w, https://substackcdn.com/image/fetch/$s_!-QWj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf95be00-9df3-407f-8281-ff1098f5ab8e_830x444.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[ Cursor vs ChatGPT vs OpenRouter]]></title><description><![CDATA[AI Isn&#8217;t About Models. It&#8217;s About Distribution.]]></description><link>https://agentengg.substack.com/p/popular-distribution-channels-for</link><guid isPermaLink="false">https://agentengg.substack.com/p/popular-distribution-channels-for</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Fri, 20 Mar 2026 12:16:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!64j7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>New models like MinimaxMiniMax M2.7 are distributed quickly among <strong>infra, dev and apps</strong> model distribution layers. Here&#8217;s a quick comparison among them.</p><h2><strong>Model Access Layers (APIs / Infra Gateways)</strong></h2><p>&#128073; <em>&#8220;Where developers get models&#8221;</em></p><ul><li><p><strong>OpenRouter</strong></p></li><li><p><strong>Ollama</strong></p></li><li><p><strong>Vercel</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div></li></ul><p><strong>What they do</strong></p><ul><li><p>Aggregate or host models (OpenAI, Anthropic, OSS, etc.)</p></li><li><p>Provide unified APIs, routing, pricing abstraction</p></li><li><p>Sit <strong>between model providers and apps</strong></p></li></ul><p><strong>Mental model</strong></p><blockquote><p>Like AWS for models &#8212; infra layer, not end-user apps</p></blockquote><h2><strong>Developer Tools / Coding Environments</strong></h2><p>&#128073; <em>&#8220;Where developers use models while building&#8221;</em></p><ul><li><p><strong>Trae</strong></p></li><li><p><strong>opencode</strong></p></li><li><p><strong>kilocode</strong></p></li></ul><p><strong>What they do</strong></p><ul><li><p>AI inside IDE / CLI / dev workflows</p></li><li><p>Help generate, edit, debug code</p></li><li><p>Tight feedback loop with developers</p></li></ul><p><strong>Mental model</strong></p><blockquote><p>Like VS Code + Copilot layer &#8212; high engagement, sticky usage</p></blockquote><p></p><h2>3) <strong>User-Facing Apps / Aggregators</strong></h2><p>&#128073; <em>&#8220;Where end users discover and use models&#8221;</em></p><ul><li><p><strong>Yupp</strong></p></li><li><p><strong>Zo</strong></p></li></ul><p><strong>What they do</strong></p><ul><li><p>Provide chat interfaces / multi-model access</p></li><li><p>Often compare models or unify UX</p></li><li><p>Distribution = <strong>eyeballs + usage</strong></p></li></ul><p><strong>Mental model</strong></p><blockquote><p>Like ChatGPT-style surfaces, but multi-model</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!64j7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!64j7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png 424w, https://substackcdn.com/image/fetch/$s_!64j7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png 848w, https://substackcdn.com/image/fetch/$s_!64j7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png 1272w, https://substackcdn.com/image/fetch/$s_!64j7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!64j7!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png" width="1200" height="467.42857142857144" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:409,&quot;width&quot;:1050,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:74885,&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://agentengg.substack.com/i/191574114?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!64j7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png 424w, https://substackcdn.com/image/fetch/$s_!64j7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png 848w, https://substackcdn.com/image/fetch/$s_!64j7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png 1272w, https://substackcdn.com/image/fetch/$s_!64j7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b0fe5f-6ac8-4374-83f0-adf91471b518_1050x409.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Two Key Practices to Build Agents Safely in Production]]></title><description><![CDATA[Too much of the conversation is about weekend vibe-coded demos; too little is about the operational discipline needed in production.]]></description><link>https://agentengg.substack.com/p/two-key-practices-to-build-agents</link><guid isPermaLink="false">https://agentengg.substack.com/p/two-key-practices-to-build-agents</guid><dc:creator><![CDATA[Nishant Sinha]]></dc:creator><pubDate>Thu, 19 Mar 2026 07:01:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!43bM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7d72600-0506-4595-9eae-61782ba7b01f_327x327.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Too much of the conversation is about weekend vibe-coded demos; too little is about the operational discipline needed in production.</p><p>The real gap is not prompt creativity; it is the engineering discipline to make prompted systems <strong>observable</strong> and <strong>safe to change</strong>. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Two ideas matter most.</p><p>First, <strong>make all behavior observable</strong>. A prompt is not just text; it is executable business logic. That means every run should be traced: prompt version, retrieved context, tool calls, outputs, latency, and cost. Once you can see runs clearly, silent failures stop being anecdotes and become measurable alerts you can act on.</p><p>Second, <strong>make changes safely</strong>. Prompt updates should be <strong>evaluated</strong> on a <strong>small but representative set of real production cases</strong>, with rubrics tied to actual product outcomes. The strongest setup combines LLM-as-a-judge for nuance with deterministic checks for things code can verify reliably. Over time, continuous evaluation becomes your canary system for prompts, catching regressions before users do.</p><p>The payoff is simple: you ship with confidence, improve systematically, and build a moat through <strong>measured learning rather than one-off prompt tricks</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://agentengg.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Agents! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>