<?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[Dynamic Stability]]></title><description><![CDATA[The messy middle of AI and data science - evaluation, risk and fairness, and building systems that stay upright in the real world.]]></description><link>https://wrenchatwork.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!BGeC!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9853467d-813d-421f-b998-cc2580918ae2_842x842.png</url><title>Dynamic Stability</title><link>https://wrenchatwork.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 21 Jun 2026 10:37:16 GMT</lastBuildDate><atom:link href="https://wrenchatwork.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Wren Dougherty]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[wrenchatwork@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[wrenchatwork@substack.com]]></itunes:email><itunes:name><![CDATA[Wren Dougherty]]></itunes:name></itunes:owner><itunes:author><![CDATA[Wren Dougherty]]></itunes:author><googleplay:owner><![CDATA[wrenchatwork@substack.com]]></googleplay:owner><googleplay:email><![CDATA[wrenchatwork@substack.com]]></googleplay:email><googleplay:author><![CDATA[Wren Dougherty]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[A Support System Architecture I Couldn't Have Imagined a Year Ago]]></title><description><![CDATA[AI capabilities are changing so fundamentally, so fast, that the established patterns aren't the only option anymore. Build your own playbook.]]></description><link>https://wrenchatwork.substack.com/p/a-support-system-architecture-i-couldnt</link><guid isPermaLink="false">https://wrenchatwork.substack.com/p/a-support-system-architecture-i-couldnt</guid><dc:creator><![CDATA[Wren Dougherty]]></dc:creator><pubDate>Tue, 20 Jan 2026 12:46:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7AxV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A small company had years of support knowledge trapped in WhatsApp chats and email threads. Experts answered similar and novel questions from scratch, over and over. All that hard-won knowledge was lost and unusable.</p><p>So I built them an AI-driven support platform with Claude Code - a tool I&#8217;d been using extensively (almost addictively) since its launch. This project evolved alongside it, rebuilt multiple times as we both got better.</p><p>Over the past year, every update to Claude prompted a rethink of what the &#8220;best possible buildable solution&#8221; was. The biggest change was when Anthropic released the Agent SDK, which changed everything from data structures to UI. </p><p>It landed somewhere I couldn&#8217;t have even imagined a year ago. After all that rebuilding, here are my five main learnings - patterns that ended up enabling more than just support.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7AxV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7AxV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png 424w, https://substackcdn.com/image/fetch/$s_!7AxV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png 848w, https://substackcdn.com/image/fetch/$s_!7AxV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png 1272w, https://substackcdn.com/image/fetch/$s_!7AxV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7AxV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png" width="1456" height="679" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:679,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2951839,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.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_!7AxV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png 424w, https://substackcdn.com/image/fetch/$s_!7AxV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png 848w, https://substackcdn.com/image/fetch/$s_!7AxV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.png 1272w, https://substackcdn.com/image/fetch/$s_!7AxV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b54f1f-469f-4fc4-b7cf-bc432d429836_2568x1198.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">Every question flows through AI processing + UI-enabled expert review; verified answers become a knowledge base that makes future answers more reliable.</figcaption></figure></div><p><strong><a href="https://wrenchat.work/case-study/support-agent">Interactive version with demos &#8594;</a></strong></p><div><hr></div><h2><strong>The Top Learnings</strong></h2><p><strong>1. Collaboration over automation</strong><br>This isn&#8217;t an &#8220;answer-bot&#8221;. AI drafts, experts refine, and every refinement teaches the system. The human touch isn&#8217;t a fallback - it&#8217;s the source of quality that compounds over time.</p><p><strong>2. Between RAG and brute force tokens: Context Engineering</strong><br>Vector search is overkill - and still can&#8217;t combine constraints like &#8220;beginner + budget + low-light.&#8221; Giant context windows are tempting but degrade unpredictably. There&#8217;s a middle path: the structured data of a database, with the reasoning of an LLM.</p><p><strong>3. Agents adapt when workflows fail</strong><br>Fixed pipelines break on edge cases. Agents adapt: search again, try different strategies, cross-reference dynamically.</p><p><strong>4. UIs should show the AI&#8217;s work, not its transcript</strong><br>Chat is friction - instead, structure its reasoning into interactive UI. Glance and click, not read and type.  Chat when needed, not by default.</p><p><strong>5. An agent is only as good as its tools</strong><br>Each tool shapes how the agent reasons about your data. Design them well, and edge cases handle themselves.</p><div><hr></div><h2><strong>1. Collaboration Over Automation</strong></h2><p><em><strong>For this client, the human touch was the point</strong></em></p><p>Full automation makes sense in a lot of contexts. But it&#8217;s not the only model.</p><p>This client valued the human connection. The goal wasn&#8217;t to replace experts - it was to make their jobs more pleasant while capturing knowledge that was otherwise disappearing into WhatsApp threads.</p><p>So instead of an answer-bot, I built a system where AI drafts and experts refine. Every response goes through someone who knows the domain. The human stays in control.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h98w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h98w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png 424w, https://substackcdn.com/image/fetch/$s_!h98w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png 848w, https://substackcdn.com/image/fetch/$s_!h98w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png 1272w, https://substackcdn.com/image/fetch/$s_!h98w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h98w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png" width="1456" height="164" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:164,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52963,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.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_!h98w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png 424w, https://substackcdn.com/image/fetch/$s_!h98w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png 848w, https://substackcdn.com/image/fetch/$s_!h98w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png 1272w, https://substackcdn.com/image/fetch/$s_!h98w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb759fc46-94cd-4a93-a8d0-f446ddb48741_1654x186.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>AI handles the grunt work - finding relevant history, drafting a starting point - so experts can focus on judgment and nuance, informed by the right, targeted supporting information.</p><p>Their jobs get more interesting. Customers still get that personal connection. And the learnings compound instead of vanishing.</p><h3><strong>The Learning Loop</strong></h3><p>Every response is expert-verified before it goes out. </p><p>When experts do make corrections, the system captures <strong>what changed and why </strong>to highlight it when future agents search for similar situations - drawing on the accumulated wisdom of every past interaction.</p><p>Expert knowledge compounds. Repetitive questions get easier. Experts spend their time on genuinely hard problems.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nyHa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nyHa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png 424w, https://substackcdn.com/image/fetch/$s_!nyHa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png 848w, https://substackcdn.com/image/fetch/$s_!nyHa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png 1272w, https://substackcdn.com/image/fetch/$s_!nyHa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nyHa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png" width="1456" height="284" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:284,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72659,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.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_!nyHa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png 424w, https://substackcdn.com/image/fetch/$s_!nyHa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png 848w, https://substackcdn.com/image/fetch/$s_!nyHa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png 1272w, https://substackcdn.com/image/fetch/$s_!nyHa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21cfcc76-85ab-4cb2-ad9b-c7c736292c5a_1642x320.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Even if the end goal is full automation, this is a useful first step, with observability on where the system is most fragile.  When you&#8217;re ready to pull humans out of simple cases, the knowledge is already there.</p><div><hr></div><h2><strong>2. Context Engineering</strong></h2><p><em>Not RAG, not brute force send-every-token - the middle path</em></p><p>The system draws on two data sources: a knowledge base of expert-verified Q&amp;As that grows with every interaction, and a full product catalog with specs, price ranges, and compatibility notes.</p><p>There&#8217;s a spectrum of approaches for making this searchable.</p><p><strong>One extreme: full vector infrastructure</strong> - embeddings, retrieval, reranking. For a few hundred Q&amp;As and products, it&#8217;s overkill and not quite the right optimization. Semantic similarity can&#8217;t combine &#8220;budget + experience level + use case&#8221; into a coherent filter. You end up with complex infrastructure that still can&#8217;t express the queries you actually need.</p><p><strong>The other extreme: dump everything into a giant context window.</strong> Modern context windows make this tempting, but bigger isn&#8217;t better - it&#8217;s just hoping. <a href="https://research.trychroma.com/context-rot">Performance degrades in surprising ways</a>: irrelevant information competes with relevant, and the degradation isn&#8217;t smooth or predictable.</p><p><strong>The middle path is <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">context engineering</a></strong>: curating the smallest set of high-signal tokens that maximize the likelihood of good outcomes.  The carefully structured data of a database, combined with the reasoning of an LLM.</p><p>But first, the data needs structure.</p><p>You wouldn&#8217;t hand a colleague a 200-page Word doc of copy-pasted emails and say &#8220;figure it out&#8221; - you&#8217;d organize it, highlight what matters, give them context. <a href="https://wrenchatwork.substack.com/p/rigorous-work-with-fallible-ai">LLMs deserve the same setup</a>.</p><h3><strong>Structuring the Chaos</strong></h3><p>The first task: turn 500+ email Q&amp;As and product marketing and informational docs into structured data.</p><p>I used Claude Code with subagents - specially trained parallel Claude instances that can divide and conquer large tasks - to parse the document in chunks, extracting each Q&amp;A into a consistent schema.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1QIk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1QIk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.png 424w, https://substackcdn.com/image/fetch/$s_!1QIk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.png 848w, https://substackcdn.com/image/fetch/$s_!1QIk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.png 1272w, https://substackcdn.com/image/fetch/$s_!1QIk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1QIk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.png" width="1456" height="437" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:437,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115760,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.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_!1QIk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.png 424w, https://substackcdn.com/image/fetch/$s_!1QIk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.png 848w, https://substackcdn.com/image/fetch/$s_!1QIk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.png 1272w, https://substackcdn.com/image/fetch/$s_!1QIk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F471c7a23-8c28-43db-b7e9-7bc5c38bb00b_1654x496.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="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2FE-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2FE-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.png 424w, https://substackcdn.com/image/fetch/$s_!2FE-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.png 848w, https://substackcdn.com/image/fetch/$s_!2FE-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.png 1272w, https://substackcdn.com/image/fetch/$s_!2FE-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2FE-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.png" width="1456" height="472" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:472,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:113246,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.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_!2FE-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.png 424w, https://substackcdn.com/image/fetch/$s_!2FE-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.png 848w, https://substackcdn.com/image/fetch/$s_!2FE-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.png 1272w, https://substackcdn.com/image/fetch/$s_!2FE-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba2553a-82ef-459d-b009-e8c2597e3118_1660x538.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>Each subagent processed 20-30 emails per chunk. The prompts instructed them to flag malformed data, ambiguity, or potential errors - making human review targeted rather than exhaustive.  Each time we resolved an agent&#8217;s question, it fed back into the agent&#8217;s training to improve the next round, reducing human intervention over time.</p><h3><strong>LLM Filtering</strong></h3><p>Once the data was structured, the next challenge: giving the model efficient access to it.  My early first (early 2025, pre-agent-SDK) pass at this was simple - feed an LLM all the Q&amp;A summaries and carefully chosen structured data (significantly smaller than full text!), and have it return a list of the most &#8220;relevant&#8221; Q&amp;As, with instructions on how &#8220;relevant&#8221; was defined.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YmZG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YmZG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.png 424w, https://substackcdn.com/image/fetch/$s_!YmZG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.png 848w, https://substackcdn.com/image/fetch/$s_!YmZG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.png 1272w, https://substackcdn.com/image/fetch/$s_!YmZG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YmZG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.png" width="1456" height="543" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:543,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:117492,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.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_!YmZG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.png 424w, https://substackcdn.com/image/fetch/$s_!YmZG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.png 848w, https://substackcdn.com/image/fetch/$s_!YmZG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.png 1272w, https://substackcdn.com/image/fetch/$s_!YmZG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dd81ea0-a5ed-4af0-80a7-c7576b77a578_1656x618.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>The full text of these Q&amp;As was then combined with a summarized product catalog, and bundled to a second LLM call with additional instructions to return the first &#8220;draft answer&#8221; to the customer question.</p><div><hr></div><h2><strong>3. Workflow &#8594; Agent</strong></h2><p><em>Iterative, adaptive search instead of a fixed pipeline</em></p><h3><strong>V1: The Workflow</strong></h3><p>Three sequential LLM calls, deterministic path.</p><p>That first version was a workflow: a fixed sequence of LLM calls that ran the same way every time. Filter relevant Q&amp;As, generate a response, potential re-generate data based on expert feedback, and extract metadata and organize the information when the expert indicated that the answer was ready.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G-rV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G-rV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png 424w, https://substackcdn.com/image/fetch/$s_!G-rV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png 848w, https://substackcdn.com/image/fetch/$s_!G-rV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png 1272w, https://substackcdn.com/image/fetch/$s_!G-rV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!G-rV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png" width="1456" height="282" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:282,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82116,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.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_!G-rV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png 424w, https://substackcdn.com/image/fetch/$s_!G-rV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png 848w, https://substackcdn.com/image/fetch/$s_!G-rV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png 1272w, https://substackcdn.com/image/fetch/$s_!G-rV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ce8c73-e7b1-44ac-92ad-4fa95eea73b9_1644x318.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Workflows are a classic in software processes, and it worked for straightforward questions. But complex queries, multi-part requests, and edge cases all struggled. The workflow couldn&#8217;t zoom in, couldn&#8217;t refocus, couldn&#8217;t try a different approach if the first one missed.</p><h3><strong>V2: The Agent</strong></h3><p>When Anthropic released the Agent SDK, I rewrote the whole system. Same data sources, same underlying operations - but now the LLM reasons about what it needs instead of following a fixed path.</p><p>The difference was immediate: fewer failed searches, better handling of ambiguous questions, and the ability to cross-reference between Q&amp;As dynamically.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Klzl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Klzl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.png 424w, https://substackcdn.com/image/fetch/$s_!Klzl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.png 848w, https://substackcdn.com/image/fetch/$s_!Klzl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.png 1272w, https://substackcdn.com/image/fetch/$s_!Klzl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Klzl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.png" width="1456" height="566" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:566,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105751,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.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_!Klzl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.png 424w, https://substackcdn.com/image/fetch/$s_!Klzl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.png 848w, https://substackcdn.com/image/fetch/$s_!Klzl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.png 1272w, https://substackcdn.com/image/fetch/$s_!Klzl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6041b94a-9b0e-4e35-8289-e692d3944303_1646x640.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>The agent searched Q&amp;As, found a relevant one, then looked up the product specs to verify the recommendation was still current. If it hadn&#8217;t found enough matches, it could have tried a keyword search, or broadened the query, or checked the product catalog directly.</p><p>The agent also unlocked the product catalog. The workflow dumped a static, summarized product catalog into context - it was noisy to include full specs for every product.  The agent searches it on demand, pulling detailed specs only when relevant.</p><p>This is the power of agents: the same underlying data, but the system adapts to what each question actually needs.  Instead of telling the model to read everything, it can intelligently choose what to read.</p><h3><strong>Multi-Turn Context</strong></h3><p>Experts can probe the agent&#8217;s reasoning, request alternatives, or add constraints without starting over. The agent remembers what it found and builds from there.</p><p>The challenge is surfacing this context and making expert feedback effortless, without making them wade through chat transcripts or type repetitively.</p><div><hr></div><h2><strong>4. Agent + UI</strong></h2><p><em>More than chat: structured output becomes interactive interface</em></p><p>The answer isn&#8217;t &#8220;give experts a chatbot.&#8221;  Rather, take everything it figured out - the reasoning, the sources it used, the alternatives it considered - and turn it into an interface designed for speed.</p><p><strong>Glance and click, not read and type.</strong></p><p>The expert sees a draft response they can edit directly. Sources are there if they want to verify. Alternatives are one click away. Feedback goes back to the agent in natural language.</p><p>The reasoning that would have been buried in a chat transcript becomes interactive UI elements.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CAM4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CAM4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.png 424w, https://substackcdn.com/image/fetch/$s_!CAM4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.png 848w, https://substackcdn.com/image/fetch/$s_!CAM4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.png 1272w, https://substackcdn.com/image/fetch/$s_!CAM4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CAM4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.png" width="1456" height="793" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:793,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151565,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.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_!CAM4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.png 424w, https://substackcdn.com/image/fetch/$s_!CAM4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.png 848w, https://substackcdn.com/image/fetch/$s_!CAM4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.png 1272w, https://substackcdn.com/image/fetch/$s_!CAM4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed412efd-aaf9-4dd1-967c-dd570878e1c8_1652x900.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>The key is structured output. Instead of returning plain text, the agent returns data the UI can render: confidence levels, source references, alternative products with explanations. Each field becomes a component. The agent&#8217;s reasoning becomes the interface.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YUih!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YUih!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.png 424w, https://substackcdn.com/image/fetch/$s_!YUih!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.png 848w, https://substackcdn.com/image/fetch/$s_!YUih!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.png 1272w, https://substackcdn.com/image/fetch/$s_!YUih!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YUih!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.png" width="1456" height="690" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:690,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:187625,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.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_!YUih!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.png 424w, https://substackcdn.com/image/fetch/$s_!YUih!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.png 848w, https://substackcdn.com/image/fetch/$s_!YUih!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.png 1272w, https://substackcdn.com/image/fetch/$s_!YUih!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7190b57f-b556-403c-98e0-f0f3ff61f70d_1638x776.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>You can tailor any part of this interface by asking the agent to re-structure the data - for example, for the Q&amp;As the agent found most relevant, it generates custom summaries of why the example is relevant to the current customer question, including caveats on how the situation is different and similar, and how that should affect the expert&#8217;s reasoning.</p><p>Instead of typing, the &#8220;top alternatives&#8221; are surfaced as easy-click buttons; when you hover over them, the expert sees a text box explaining <em>why</em> it considered that alternative - rather than an enormous transcript, targeted information and reasoning is exposed in actionable ways.</p><p>Once you have structured output and well-designed tools, those same building blocks work for different purposes. The support agent wasn&#8217;t the end - it became the foundation.</p><div><hr></div><h2><strong>5. The Power of Tools</strong></h2><p><em>The agent is only as good as its tools</em></p><p>Tools aren&#8217;t utility functions you bolt on at the end. They&#8217;re the API between the agent&#8217;s reasoning and your data.</p><p><strong>A poorly designed tool leads to hallucination</strong> - the agent guesses because it can&#8217;t get what it needs. A well-designed tool guides the agent toward grounded, verifiable answers.</p><p>Every tool in this system was shaped by real usage. What worked, what broke, what edge cases emerged. Most have been rewritten multiple times.</p><h3><strong>Search as Zoom Controls</strong></h3><p>The tools aren&#8217;t just utilities - they&#8217;re designed as zoom controls. Broad sweeps to find candidates, targeted lookups to verify, the judgment to know which to use when.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uXGD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uXGD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png 424w, https://substackcdn.com/image/fetch/$s_!uXGD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png 848w, https://substackcdn.com/image/fetch/$s_!uXGD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png 1272w, https://substackcdn.com/image/fetch/$s_!uXGD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uXGD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png" width="1456" height="257" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:257,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:74418,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.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_!uXGD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png 424w, https://substackcdn.com/image/fetch/$s_!uXGD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png 848w, https://substackcdn.com/image/fetch/$s_!uXGD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png 1272w, https://substackcdn.com/image/fetch/$s_!uXGD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8dae122-e5c7-4406-be7f-d80a5bf91cd9_1654x292.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3><strong>submit_answer: Forcing Structure</strong></h3><p>The output tool is just as important as the search tools. Instead of letting the agent return free-form text, <code>submit_answer</code> requires a specific structure: the customer-facing response, the internal reasoning, confidence level, sources used, and alternatives considered.</p><p>This is what enables Section 4&#8217;s UI. Without structured output, you can&#8217;t build interactive elements.</p><h3><strong>Tools Recombine</strong></h3><p>Once you have good tools, you can recombine them.</p><p>The same Q&amp;A search, product lookup, and pattern analysis tools that power the support agent also power a second agent - this one focused on strategic brand intelligence rather than customer support.</p><p>And here&#8217;s where the compounding pays off. The Q&amp;A knowledge base isn&#8217;t a static dump of historical emails anymore - it&#8217;s a living knowledge base that grows with every customer interaction.</p><p>Every question answered, every expert refinement, every edge case resolved becomes searchable institutional knowledge. A research agent tapping into that knowledge base isn&#8217;t just searching old data; it&#8217;s drawing on the accumulated wisdom of months or years of customer conversations.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C-1D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C-1D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png 424w, https://substackcdn.com/image/fetch/$s_!C-1D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png 848w, https://substackcdn.com/image/fetch/$s_!C-1D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png 1272w, https://substackcdn.com/image/fetch/$s_!C-1D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C-1D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png" width="1456" height="310" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:310,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75416,&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://wrenchatwork.substack.com/i/185007317?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.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_!C-1D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png 424w, https://substackcdn.com/image/fetch/$s_!C-1D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png 848w, https://substackcdn.com/image/fetch/$s_!C-1D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png 1272w, https://substackcdn.com/image/fetch/$s_!C-1D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7339e757-0e47-464a-883c-c8db421b84b7_1642x350.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The research agent can audit ad copy against actual product specs - reading a Google Sheet of headlines, checking each claim against the product catalog, flagging inconsistencies. It can analyze a quarter of customer questions to find emerging trends, then write up findings in a shared doc. It can research how competitors position similar products, grounded in knowledge of what actually differentiates yours.</p><p>Two agents, same core tools, completely different purposes. Build tools well and they become infrastructure, not one-off solutions.</p><div><hr></div><p><em>Camera gear used as example domain. The real system is in a different industry.</em></p><p><a href="https://wrenchat.work/case-study/support-agent">Interactive version with demos &#8594;</a></p>]]></content:encoded></item><item><title><![CDATA[Compound Journaling with Claude Code]]></title><description><![CDATA[Structured Reflection for the Over-Engineered Brain]]></description><link>https://wrenchatwork.substack.com/p/compound-journaling-with-claude-code</link><guid isPermaLink="false">https://wrenchatwork.substack.com/p/compound-journaling-with-claude-code</guid><dc:creator><![CDATA[Wren Dougherty]]></dc:creator><pubDate>Tue, 06 Jan 2026 14:07:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oobV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>An open-source journaling system built on Claude Code: daily rituals, searchable history, and &#8220;lenses&#8221; for reflection, all in AI-organized files you control.  Built to compound and evolve with you over time.  <a href="https://github.com/Wrendered/journaling-with-claude">Fork it</a> and make it yours with /onboarding</em></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oobV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oobV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png 424w, https://substackcdn.com/image/fetch/$s_!oobV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png 848w, https://substackcdn.com/image/fetch/$s_!oobV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png 1272w, https://substackcdn.com/image/fetch/$s_!oobV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oobV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png" width="1456" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2478261,&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://wrenchatwork.substack.com/i/183492360?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.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_!oobV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png 424w, https://substackcdn.com/image/fetch/$s_!oobV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png 848w, https://substackcdn.com/image/fetch/$s_!oobV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.png 1272w, https://substackcdn.com/image/fetch/$s_!oobV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8902ee89-41a8-4c35-979a-5cc3f16f5e48_1750x974.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>Have you ever wanted to panic-Google your own brain? Please tell me it&#8217;s not just me.</p><p>After a year of asking AI to remind me what we&#8217;d talked about, I realized I wanted something more rigorous than chat logs.</p><p>I have tried journaling before: apps, morning pages, sporadic notebooks, random bursts of adherence across too many mediums. The problem wasn&#8217;t just consistency. It was that the good stuff didn&#8217;t resurface. Context got lost, with motivation close behind it.</p><p>I wasn&#8217;t looking for &#8220;perfect memory.&#8221; Rather, I wanted journaling to <strong><a href="https://every.to/chain-of-thought/compound-engineering-how-every-codes-with-agents">compound</a></strong>: a facilitated habit that builds an index of my own context, pulls in history when it matters, and lets me choose a useful lens in the moment - so when Future Me goes, &#8220;...what was I thinking?&#8221;, there&#8217;s something real to resurface. </p><p>I wanted a well-read thinking partner <em>and</em> a filing system with low friction and high returns - an interactive place where thoughts become structured, decisions stay traceable, old clarity connects to new dilemmas, and usefulness and insight grows over time. So I used the same toolkit I do for engineering and started building one!</p><div><hr></div><h2>Turning the toolkit inward</h2><p>Over the past year, I&#8217;ve been leveraging AI to make <a href="https://wrenchatwork.substack.com/p/rigorous-work-with-fallible-ai">data science systems more powerful and rigorous</a>. This repo was an experiment in taking the same toolkit and pointing it at my own thoughts. </p><p>What it enables:</p><ul><li><p><strong>Capture</strong> thoughts quickly (often by dictation)</p></li><li><p><strong>Ingest</strong> and organize historical snippets (old journals, notes, half-finished thoughts) into a consistent, searchable structure</p></li><li><p><strong>Structure</strong> new reflection into repeatable, low friction habits (daily + weekly)</p></li><li><p><strong>Resurface</strong> what I&#8217;ve already worked through when I&#8217;m stuck</p></li><li><p><strong>Connect</strong> old context to new decisions</p></li><li><p><strong>Learn</strong> patterns over time, constantly adapting and improving.</p></li></ul><div><hr></div><h2>How it works</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0QEv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0QEv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.png 424w, https://substackcdn.com/image/fetch/$s_!0QEv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.png 848w, https://substackcdn.com/image/fetch/$s_!0QEv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.png 1272w, https://substackcdn.com/image/fetch/$s_!0QEv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0QEv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.png" width="1456" height="798" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:798,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1114588,&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://wrenchatwork.substack.com/i/183492360?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.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_!0QEv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.png 424w, https://substackcdn.com/image/fetch/$s_!0QEv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.png 848w, https://substackcdn.com/image/fetch/$s_!0QEv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.png 1272w, https://substackcdn.com/image/fetch/$s_!0QEv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41abe9fa-182f-42ea-831a-610db9443dd2_1992x1092.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><h3>Commands as habits</h3><p>Low-friction, consistent entry points to start a reflection session without negotiating with a blank page.</p><ul><li><p><strong>Lower activation energy.</strong> A single, familiar trigger to begin (especially when I&#8217;m tired or overwhelmed).</p></li><li><p><strong>Routing into structure.</strong> Whatever happens next lands in the right weekly/day/decision place automatically, instead of becoming another stray note.</p></li><li><p><strong>Continuous personalization.</strong> As you teach the system you preferences, it adapts and remembers</p></li><li><p><strong>Mix-and-match.</strong> You can interact with the system however you want&#8212;quick guided check-ins, long freeform rambles, or focused deep dives&#8212;and it all still lands in the same structure (so summaries/indexes/search keep working).</p></li></ul><h3>Files + structure over chat logs</h3><p>Chat is great for <em>thinking in the moment</em>. But generic chats didn&#8217;t have the storage format for the targeted task that I wanted journaling to serve.</p><p>This system makes the output <strong>land as durable artifacts inside an intentional structure</strong>: predictable folders + lightweight templates (weekly journals, decision threads, dashboards, self&#8209;map). That structure is what enables everything downstream&#8212;summaries, indexes, and the search agent&#8212;because the system has a map of where things live.</p><h3>How it becomes durable <em>and</em> searchable</h3><p>&#8220;Searchable&#8221; isn&#8217;t a single feature. It&#8217;s an outcome of a few pieces working together.</p><ul><li><p><strong>Commands create predictable structure.</strong> When I run <code>/start-day</code> or <code>/end-day</code>, the output lands in a consistent place and format (weekly files, decision files, dashboards), instead of another one-off chat.</p></li><li><p><strong>Claude shapes messy input into clean artifacts.</strong> Dictation and brain-dumps go in; Claude turns them into something I can actually come back to: headings, bullets, a next step, a short summary.</p></li><li><p><strong>Weekly review generates the index layer.</strong> <code>/weekly-review</code> creates small summaries/rollups that describe what happened <em>without</em> me re-reading everything.</p></li><li><p><strong>Import builds a real archive.</strong> If I have old journals or notes, <code>/import-history</code> processes them into organized files (themes, key relationships, a quotes index) so the past isn&#8217;t just &#8220;stored,&#8221; it&#8217;s navigable.</p></li><li><p><strong>Search is index-first.</strong> When I ask &#8220;what was I thinking?&#8221;, the search agent reads index files and summaries first, then dives into raw entries when useful.</p></li></ul><h3>History that surfaces</h3><p><code>/import-history</code> is the part that turns this from &#8220;a fresh journaling habit&#8221; into an actual <em>archive</em>.</p><p>You just dump in whatever data you have (text, images, etc), it processes them into a structure that&#8217;s easier to navigate later&#8212;things like:</p><ul><li><p>a <strong>full-text archive</strong> (so nothing is lost)</p></li><li><p>a <strong>quotes index</strong> (useful lines you can actually resurface)</p></li><li><p><strong>theme files</strong> (recurring topics/patterns)</p></li><li><p><strong>relationship files</strong> (people as entities, over time)</p></li></ul><p>Import doesn&#8217;t just archive the past&#8212;it creates the <em>navigation layer</em> (index files + consistent structure) that tells the search agent what exists. When I ask a question later, search reads indexes first, scans summaries to find the right timeframes, and only then dives into raw entries&#8212;so it feels like structured recall, not grep.</p><p>That&#8217;s also why I didn&#8217;t build an &#8220;embed everything + vector database&#8221; setup. Recall is powered by simple <strong>human-readable summaries and index files</strong>&#8212;thin enough to maintain, flexible enough to evolve, strong enough to resurface what matters.</p><p>That means I can ask questions that are hard to answer from scattered notebooks, like:</p><ul><li><p>&#8220;Pull the most relevant quotes I&#8217;ve written about <em>burnout</em>&#8221;</p></li><li><p>&#8220;What themes keep showing up when I&#8217;m making big decisions?&#8221;</p></li><li><p>&#8220;How has my thinking about <em>X</em> changed across the years?&#8221;</p></li><li><p>&#8220;When did I first start circling this decision&#8212;and what else was going on around then?&#8221;</p></li></ul><h3>Frameworks: Lenses for Reflection</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eFpz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eFpz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.png 424w, https://substackcdn.com/image/fetch/$s_!eFpz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.png 848w, https://substackcdn.com/image/fetch/$s_!eFpz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.png 1272w, https://substackcdn.com/image/fetch/$s_!eFpz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eFpz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.png" width="1406" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1406,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2549971,&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://wrenchatwork.substack.com/i/183492360?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c0d7064-b5d7-4394-8d9c-f872bd819ec6_1406x1058.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_!eFpz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.png 424w, https://substackcdn.com/image/fetch/$s_!eFpz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.png 848w, https://substackcdn.com/image/fetch/$s_!eFpz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.png 1272w, https://substackcdn.com/image/fetch/$s_!eFpz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d8989a9-a785-4d2c-8ac7-8dbce0064b95_1406x970.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>The repo ships with a few starting lenses (Stoicism, Atomic Habits, Bren&#233; Brown), but the real idea is that you <strong>build a reference library over time</strong> based on what actually resonates. </p><p>When something clicks&#8212;a book, an author, a concept&#8212;you can run <code>/add-framework</code> and Claude researches, builds, and routes it into the right reference folder (<code>frameworks/</code>, <code>practices/</code>, or <code>personality/</code>). The reference files stay generic (the &#8220;lens&#8221; itself). My <em>personal</em> application lives separately in <code>private/</code>&#8212;especially <code>assessments/</code>, other archive files, and the self-map.</p><p>The point is <strong>flexibility: </strong>I&#8217;m not declaring &#8220;I&#8217;m a Stoic.&#8221; I&#8217;m asking, &#8220;What questions would a Stoic lens ask <em>right now</em>?&#8221;</p><div><hr></div><h2>Shareable System, Private Lessons</h2><p>Journaling is a very private practice!  But I also wanted the compounding of something I could share. Here&#8217;s how I split the difference:</p><p>The system is open source. You can fork it, customize it, and still pull updates. But the content of what you learn stays yours.  The public component is shared structure, training, and broad expertise - your personalization stays private (see Privacy Notes for more).</p><p>Universal scaffolding, individual learning: Benefit from an evolving architecture, while evolving with your individual patterns, learnings, and preferences. </p><div><hr></div><h2>Dictation for Maximum Ramble Power</h2><p>On macOS, I set dictation to <strong>Press Globe Key Twice</strong> (System Settings &#8594; Keyboard &#8594; Dictation). Then I just talk.  There are other great dictation options out there but I find this both sufficient and easy to use.</p><p>Typos, garbled transcription, stream-of-consciousness rambling: Claude can still shape it into something coherent. I dictate more than I type now.</p><div><hr></div><h2>What this is (and isn&#8217;t)</h2><p>This is a space for reflection, not therapy.</p><p>Writing things down, noticing patterns, and having a thinking partner can be valuable&#8212;but it isn&#8217;t treatment, and it&#8217;s not a replacement for human connection.</p><p>If you&#8217;re working through something heavy, a good therapist offers things this can&#8217;t.</p><h3>Privacy Notes</h3><p>The journal lives locally in gitignored Markdown, and the repo adds guardrails to reduce the chance you accidentally publish personal content:</p><ul><li><p><code>private/</code> is gitignored</p></li><li><p>a hook blocks any attempt to commit <code>private/</code> or <code>CLAUDE.md</code></p></li><li><p>another hook scans committed content for likely personal/sensitive text</p></li></ul><p>Using Claude Code also means the text you work with is sent to Anthropic&#8217;s servers for processing. Data retention and model-improvement use depends on your Claude account privacy settings. See the <a href="https://github.com/Wrendered/journaling-with-claude/blob/main/README.md#privacy">project README</a> for more information.</p><div><hr></div><h2>What I don&#8217;t know yet</h2><p>Will this stick? It&#8217;s week one. Ask me in six months.</p><p>Is this useful for anyone else? I open-sourced it to find out.</p><p>Am I over-engineering my feelings? Possibly. But other emotional strategies I&#8217;ve tried include suppressing, forgetting, and avoiding. Sooo, hard to do worse, tbh.</p><div><hr></div><h2>Try it</h2><p>Repo: <strong><a href="http://github.com/Wrendered/journaling-with-claude">github.com/Wrendered/journaling-with-claude</a></strong></p><p>Fork it, open Claude Code in the repo, run <code>/onboarding</code>.</p><div><hr></div>]]></content:encoded></item><item><title><![CDATA[Rigorous Work with Fallible AI]]></title><description><![CDATA[Because the real hallucination is expecting perfection]]></description><link>https://wrenchatwork.substack.com/p/rigorous-work-with-fallible-ai</link><guid isPermaLink="false">https://wrenchatwork.substack.com/p/rigorous-work-with-fallible-ai</guid><dc:creator><![CDATA[Wren Dougherty]]></dc:creator><pubDate>Mon, 15 Dec 2025 22:30:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cAyd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It&#8217;s understandable to be suspicious of &#8220;vibe coding&#8221; in corporate settings, especially in high-stakes software and data science. Each hallucinated or confidently wrong answer chips away at trust.</p><blockquote><p>But &#8220;Is the AI accurate?&#8221; is the wrong question. A more useful one is: <strong>&#8220;Have I built a system that produces trustworthy outputs from fallible components?&#8221;</strong></p></blockquote><h3><strong>Tl;dr</strong></h3><ul><li><p>Reliability isn&#8217;t a model property - it&#8217;s a <strong>system property</strong> built around fallible components.  Just like it always has been.</p></li><li><p>Treat repetition as a signal: <strong>encode it</strong> - starting with small misses, then graduating into workflows and tools.</p></li><li><p>You&#8217;ll never get 100% adherence, so <strong>where you encode matters</strong>: target the right instruction for the right time with minimal distraction.</p></li><li><p>Use a <strong>layered toolkit</strong> (CLAUDE.md, skills, agents, hooks, tools) so your training sticks.</p></li></ul><p>&#8220;Infallibly correct&#8221; has never been the bar for humans or software. Data centers assume hardware will fail; engineering teams assume people will ship bugs and occasionally nuke production. Reliability comes from designing systems around fallible parts. Treating AI the same way - something that is both powerful and failure-prone, and that deserves a real investment in tooling and training - has completely changed how I work.</p><p>Over the last year of pushing Claude Code to its limits, I&#8217;ve hit every classic failure: confident fabrications, fallbacks that hide real errors, and imaginary databases springing up when connections fail. At the same time, my analysis work has become deeper, faster, more rigorous, and easier for other people to replicate and build on. Not because the AI is magically correct, but because it&#8217;s extremely capable at the parts that bottleneck humans: writing and refactoring code, building full-stack glue, and exploring more variations than I could reasonably do by hand.</p><p>I&#8217;ve stopped hand coding analyses in one-off notebooks, and moved towards building shared AI tooling, pipelines, and reusable workflows to enable higher quality analyses at scale for myself and my team - far more than I&#8217;d previously ever dreamed of being &#8220;in scope&#8221; for a single data scientist.</p><p>This is my personal playbook for that shift: how I see the human role changing, how to continuously up-level your work with DRY for AI, and how to architect a practical ecosystem in Claude Code to make rigorous work with fallible models not just possible, but normal.</p><p><em>Note: Claude Code is used as the running example as I&#8217;ve found its configurability fits well with my data science work, but the principles can be applied more broadly.</em></p><div><hr></div><h2><strong>Your Job Has Changed</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cAyd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cAyd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png 424w, https://substackcdn.com/image/fetch/$s_!cAyd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png 848w, https://substackcdn.com/image/fetch/$s_!cAyd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png 1272w, https://substackcdn.com/image/fetch/$s_!cAyd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cAyd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png" width="1456" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cAyd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png 424w, https://substackcdn.com/image/fetch/$s_!cAyd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png 848w, https://substackcdn.com/image/fetch/$s_!cAyd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.png 1272w, https://substackcdn.com/image/fetch/$s_!cAyd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1d8e1f-3876-4981-9b9b-20b305ed72c9_1600x861.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>The ceiling of what an AI coding assistant can do is not set by the model&#8217;s raw &#8220;IQ,&#8221; but by the tools, context, and training you surround it with. Most of the frustrating &#8220;out of the box&#8221; quirks you&#8217;ve hit aren&#8217;t permanent traits of AI - they&#8217;re missing scaffolding: principles, knowledge of your stack, and access to the systems you rely on.</p><p>You wouldn&#8217;t hire the smartest engineer you&#8217;ve ever met, hand them a laptop on day one, and say: &#8220;Here&#8217;s an obscure, high-stakes problem in a codebase you&#8217;ve never seen. Figure it out.&#8221; You&#8217;d give them docs, code labs, a clear scope, and start with a small area of ownership, increasing responsibilities over time. Your AI deserves the same grace.</p><p><strong>Your goal is to train your AI until it can operate at your task-level altitude</strong> - as a peer, not a junior you&#8217;re endlessly correcting. When you open a session to start a project, the agent you&#8217;re interacting with is your coordinator and collaborator. It should know your task, your principles, and your stack well enough to think at the level you do. Its precious <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">context</a> should be spent on the <em>highest-level</em> problem you&#8217;re solving, not constantly re-deriving basic functions.</p><blockquote><p>It reaches that level of abstraction the same way you do: by leaning on an ecosystem. Tools, scripts, agents, and services become its infrastructure and &#8220;colleagues,&#8221; each with a clear job. Together they behave like a small AI org that extends what one human can realistically cover.</p></blockquote><p>As you design that ecosystem, your scope actually expands rather than shrinks. You end up responsible for more systems, but at an operational level, not an implementation level. You don&#8217;t need every API and library call in your head; you do need a solid mental model of how the pieces fit together and when something smells off. The learning here is non-optional - most bad outcomes I see come from skipping that step - and the AI&#8217;s job is to carry the mechanical recall and boilerplate so you can focus on the reasoning and design.</p><p>That might sound like a daunting amount of training and architecture. It isn&#8217;t. The system emerges from a simple discipline: fix each issue once, properly, in a way the system can remember, and let those fixes compound over time. Kieran Klaassen calls this <strong>&#8220;<a href="https://every.to/source-code/my-ai-had-already-fixed-the-code-before-i-saw-it">compounding engineering</a>&#8221;</strong> - building systems where every bug, review, and decision becomes a permanent lesson rather than a one-off fix.  In practice, the main way I do that with AI is <strong>DRY for AI</strong>: treating repetition as a signal that something should be encoded into the AI&#8217;s ecosystem so it becomes shared, reusable behavior, not a constant re-teach.</p><div><hr></div><h2><strong>DRY for AI</strong></h2><p>It can feel like a victory - even vindication - when you hand-code something faster than your AI pair programmer. </p><blockquote><p>But in a world of increasingly capable AI agents, DIY is technical debt: you&#8217;re keeping yourself in the loop on work the model could handle reliably if you gave it the right scaffolding. </p></blockquote><p>Your time is better spent building that tooling than racing it line by line.</p><p><strong>DRY - Don&#8217;t Repeat Yourself - </strong> is foundational to software engineering. Copy-paste code? Refactor into a function. Same logic twice? Abstract into a module. The same principle applies to AI work, just at a different abstraction layer: not just in code, but in how you run analyses, correct mistakes, and coordinate workflows.</p><ul><li><p><strong>Traditional DRY:</strong> Don&#8217;t copy-paste code &#8594; write a function.</p></li><li><p><strong>AI DRY:</strong> Don&#8217;t repeat corrections, access patterns, or training &#8594; encode the principle once.</p></li></ul><p>The classic DRY tradeoff - &#8220;will the time I save outweigh the time to automate?&#8221; - is radically skewed by AI. The time to build drops toward zero, while the impact multiplies as properly designed tools scale instantly across your and your teammates&#8217; projects.</p><p><strong>The diagnostic question:</strong> Where am I repeating myself, and what kind of repetition is it?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r1wS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r1wS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.png 424w, https://substackcdn.com/image/fetch/$s_!r1wS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.png 848w, https://substackcdn.com/image/fetch/$s_!r1wS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.png 1272w, https://substackcdn.com/image/fetch/$s_!r1wS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r1wS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.png" width="1456" height="733" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:733,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r1wS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.png 424w, https://substackcdn.com/image/fetch/$s_!r1wS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.png 848w, https://substackcdn.com/image/fetch/$s_!r1wS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.png 1272w, https://substackcdn.com/image/fetch/$s_!r1wS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dddb334-58d8-4f6c-9ed8-3adc7f979b9b_1600x806.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><h3><strong>1. Repeated Corrections</strong></h3><p>Any prompt I&#8217;ve given more than twice goes in this category. Doubly if curse words were involved.  This is usually the first, most obvious layer of failures and fixes.</p><p><em>&#8220;One paved path or clear failure, do NOT create fallbacks.&#8221;</em></p><p><em>&#8220;When you make a PR, use pull_request_template.md, be professional, no emojis.&#8221;</em></p><p>The most naive first step you can take is to encode these straight into a CLAUDE.md file.  At the end of this I&#8217;ll talk through how I refactor many of these into areas that enforce better AI behavior.  But the critical starting point is clearly identifying and articulating the incorrect underlying behavior, and what behavior you want to see instead.</p><h3><strong>2. Repeated Access (You as Human Clipboard)</strong></h3><p>Every time you copy/paste logs, fetch data Claude can&#8217;t reach, or shuttle information between systems, that&#8217;s infrastructure waiting to be built. Building that infrastructure might not have been &#8220;in your wheelhouse&#8221; before, but this is exactly the sort of thing AI coders excel at. Describe what you need, collaborate on the simplest implementation. In many cases it&#8217;s as simple as generating a script and adding a sentence like &#8220;use ./scripts/fetch_logs.sh to get the last hour of production logs&#8221; - first in conversation with Claude, then in your CLAUDE.md or other strategic places.</p><p>You are an extraordinarily slow bottleneck that prevents efficient iteration - investments here are well worth it.</p><h3><strong>3. Repeated Training (You as Tutor)</strong></h3><p>Sometimes the repetition isn&#8217;t a single command - it&#8217;s an entire pattern of work you keep hand-holding your AI through.</p><p>For example, I used to run 10&#8211;20 variations of API-based LLM labeling runs on my datasets to tune prompts and understand edge cases. I (embarrassingly) tracked the experiment variations manually in a Jupyter notebook comment block. It was messy, hard to reference, and duplicated across dozens of projects. At single-human speed and scale, that was tolerable. Once Claude was in the mix, it became obviously wrong: increasingly error-prone, unreliable, and constantly demanding attention from both of us.</p><p>Once I treated that whole process as DRY debt, the shape of the work changed. I started by asking Claude to build a small CLI wrapper - one command that handles validation, execution, and logging. It replaced my messy text file with a comprehensive, queryable table and baked in several other checks and steps. Over a few weeks of incremental capability development, what used to be &#8220;Wren&#8217;s janky logging notebook&#8221; became infrastructure that dozens of people now lean on. A heavy, error-prone process that demanded constant attention became code-automated, letting us both focus on higher-level experiment design.</p><p>That&#8217;s the real shift: AI didn&#8217;t just make me faster - it made it worth building the kind of software infrastructure that used to be &#8220;out of scope&#8221; for a single data scientist. It accelerated and deepened the analyses I could run and made it trivial to share that methodology with other data scientists. The process moved from &#8220;in my head and my notebook&#8221; to &#8220;in shared software + Claude Code infrastructure,&#8221; raising capabilities while reducing onboarding overhead.</p><p>Together, these three kinds of repetition - corrections, access, and training - tell you <strong>what</strong> to encode. The toolkit in the next section is about <strong>where</strong> that encoding should live.</p><div><hr></div><h2><strong>The Toolkit: Where to Encode What</strong></h2><p><strong>Imperfect Adherence</strong></p><p>A strength of AI coding is that most of your &#8220;encoding&#8221; is language-based and flexible, not rigid code. <strong>The flip side is: you will never get 100% adherence.</strong> </p><p>Rules you put in CLAUDE.md will sometimes be ignored, no matter how many **CRITICAL**s you add. Skills and agents that worked once will fail in slightly different situations.</p><p>This makes your job more nuanced than &#8220;throw everything you need to know in a file.&#8221; You have to be strategic in your context engineering. </p><blockquote><p>After a repeated miss, the first question shouldn&#8217;t be &#8220;What&#8217;s wrong with the model?&#8221; but &#8220;How did I set it up for failure?&#8221; </p></blockquote><p>Were expectations clear? Did I encode this in the right layer, or bury it in a long doc where the instruction is low-salience noise in an already crowded context window?</p><p>To get better behavior, you have to be intentional about where things live so your primary coordinator gets the right information at the right time. That&#8217;s what the toolkit is for: deciding where each kind of encoding should live so it can actually work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tLZV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tLZV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.png 424w, https://substackcdn.com/image/fetch/$s_!tLZV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.png 848w, https://substackcdn.com/image/fetch/$s_!tLZV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.png 1272w, https://substackcdn.com/image/fetch/$s_!tLZV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tLZV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.png" width="1024" height="558" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:558,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:432862,&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://wrenchatwork.substack.com/i/181726880?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.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_!tLZV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.png 424w, https://substackcdn.com/image/fetch/$s_!tLZV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.png 848w, https://substackcdn.com/image/fetch/$s_!tLZV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.png 1272w, https://substackcdn.com/image/fetch/$s_!tLZV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3dc9255-8109-43d4-b710-eb9b6e2c3033_1024x558.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><h3><strong>CLAUDE.md: Orientation Guide</strong></h3><p>CLAUDE.md is an always-loaded brief on what this repo is, how it behaves, and how you expect Claude to work with it.<strong>  </strong>In practice, it should answer three questions:</p><p><strong>What is this project?<br></strong>Plain language about what the system does and what &#8220;good&#8221; looks like.</p><p><strong>How do we work here?<br></strong>The scientific mindset you expect, communication styles, whether to fail loudly instead of inventing fallbacks, whether to bias toward a quick internal prototype or production-quality changes - your work style and &#8220;culture&#8221;</p><p><strong>Where is the deeper context?<br></strong>Pointers to resources (docs, repos, folders, or other toolkit components like agents and skills) that will help across different tasks required to work in this system:<br> &#8220;See ARCHITECTURE.md before proposing structural changes.&#8221;<br> &#8220;See analysis-examples/ for templates of our most common analysis patterns.&#8221;<br> &#8220;Use the log-debugger agent to investigate job failures.&#8221;</p><p>That keeps CLAUDE.md lean while giving Claude a durable mental model: what this thing is, how to behave inside it, and where to go for depth - without you re-explaining the basics in every prompt.</p><p>Like everything in this toolkit, CLAUDE.md is a <strong>living document</strong>. Any time you catch yourself repeating the same explanation or correction, ask: <em>&#8220;Should this be integrated into the CLAUDE.md instead?&#8221;</em>  With continuous refinement and refactoring, this becomes not only valuable for Claude, but also a helpful, durable human readable artifact.</p><h3><strong>Skills: Workflows and Scripts</strong></h3><p>Skills are your SOPs and formal bundles of behavior. They capture <em>how</em> a job is usually done. Think of them as organized folders of instructions, scripts, and resources that Claude can load into your main context window to perform a recurring job exactly the way you intend.</p><p>Because they operate as LLM-based instructions rather than rigid, hard-coded pipelines, Skills are incredibly good at handling branching and ambiguous situations. They can adapt to what they find, ask clarifying questions, recover from unexpected states, and trigger other tools or agents.</p><p><strong>Example Skill:</strong> <code>eval-runner/</code></p><ul><li><p><code>SKILL.md</code>: how we run labeling/eval experiments (inputs, validation, logging, failure rules)</p></li><li><p><code>scripts/</code>: helpers like <code>eval_runner.py</code>, <code>summarize_runs.py</code></p></li></ul><p>Inside that Skill, Claude might still decide to run: <em>&#8220;Run ./scripts/eval_runner.py to kick off a configured evaluation with logging.&#8221;</em> This makes complex tasks consistent and repeatable. The LLM decides <em>when</em> conversationally to use the skill and how to configure the components, while the code (scripts, etc.) is still executed reliably and programmatically.</p><p><strong>Skills vs. Agents.</strong> Use a <strong>skill</strong> when the workflow should:</p><ul><li><p>See your full conversation and current work-in-progress, and</p></li><li><p>Run as a structured &#8220;mode&#8221; of your main collaborators</p></li></ul><p>Use an <strong>agent</strong> when the work is a separable sub-problem that benefits from a fresh, focused context (deep log-diving, extensive docs research, large search spaces). Think of skills as <em>orchestrated workflows in your main session</em>; agents as <em>specialists you spin up for isolated deep work</em>.</p><h3><strong>Agents: Delegated Sub-Problems</strong></h3><p>Agents are specialized sub-contexts with their own system prompts. They do deep work in isolation and return condensed summaries.</p><p>Use an agent when:</p><p><strong>The task is token-heavy.</strong> Digging through 500 lines of logs, exploring a new API&#8217;s documentation, analyzing a complex stack trace - this would bloat your main context and push out the conversation history you actually need.</p><p><strong>The task is at a lower altitude.</strong> Your coordinator should stay at system-level, strategic thinking. Detailed debugging, exhaustive research, or brute-force exploration is a sub-problem you delegate.</p><p><strong>You want parallel exploration.</strong> Multiple agents can run simultaneously on independent tasks, then you synthesize their findings.</p><p>Think of agents as specialists with a job description and a clear ask. For example:</p><p><strong>log-analyzer</strong>  -  <em>&#8220;Spin up a log-analyzer agent to find out which runs failed, review the logs and tell me the most likely root cause, plus your confidence.&#8221;</em></p><p><strong>query-builder</strong>  -  <em>&#8220;Use a query-builder agent to debug this query, test how memory efficient it is, and propose improvements.&#8221;</em></p><p><strong>docs-researcher</strong>  -  <em>&#8220;Create a researcher agent to read this API&#8217;s docs and summarize the key endpoints that I will need for our current task.&#8221;</em></p><p>They bring you summarized outputs, not a play-by-play of every step.</p><p>Anthropic calls this &#8220;separation of concerns&#8221;: each agent gets its own tools, prompts, and exploration trajectory. The detailed work stays isolated; your coordinator focuses on synthesis and decision-making. You can define reusable agents in your repo, or spin up one-off specialists via prompt (<code>&#8220;have a subagent do [task]&#8221;</code>).</p><h3><strong>Hooks: Process Encoded</strong></h3><p>Hooks are event-driven automation that fire when Claude takes specific actions. You define a trigger and what should happen when it fires.</p><ul><li><p><strong>Trigger:</strong> &#8220;Whenever someone runs gh pr create&#8230;&#8221;</p></li><li><p><strong>Action:</strong> &#8220;&#8230;check if the /review command was run; if not, ask them to do it first.&#8221;</p></li></ul><p>This isn&#8217;t just guardrails - it&#8217;s how you encode your team&#8217;s process into the system itself. Hooks let you:</p><ul><li><p><strong>Hard-block</strong>  -  prevent an action entirely.</p></li><li><p><strong>Soft-guide</strong>  -  suggest the right path without blocking anything.</p></li><li><p><strong>Automate</strong>  -  format, lint, notify, or checkpoint with no extra prompt.</p></li></ul><p>The real power is in soft enforcement. Don&#8217;t block PRs that skip review - just make the right path obvious and low-friction. People (and AIs) follow the path of least resistance; hooks let you shape that path.</p><p>Use hooks when you find yourself saying:</p><ul><li><p><em>&#8220;I wish no one would run X without doing Y first.&#8221;</em></p></li><li><p><em>&#8220;Every time we do this, we forget to also log / format / notify.&#8221;</em></p></li><li><p><em>&#8220;I want this check to happen every time, even if I forget to ask.&#8221;</em></p></li></ul><h3>Tools: Executable Actions &amp; Connectors</h3><p>Tools are the registered, permission&#8209;gated, and discoverable executable actions that actually carry out the work. If Skills are the procedural instructions, Tools are the hands.</p><p>This includes:</p><ul><li><p><strong>Built&#8209;in tools:</strong> Edit, Bash, Read, Write, Glob, Grep.</p></li><li><p><strong>Custom CLI tools:</strong> Local scripts you register yourself.</p></li><li><p><strong>MCP Servers:</strong> Connectors to external systems like Slack, databases, internal services, or APIs (via the Model Context Protocol).</p></li></ul><p>MCP is the standard way to serve these tools across projects. Claude uses the natural&#8209;language description to decide when a tool is relevant and how to fill its arguments, then runs the underlying code to do the work. It&#8217;s conversational at the edges, programmatic in the middle.</p><p>In my own work, I most often consume MCPs owned by others (databases, search, Slack) and create Skills for task&#8209;level workflows I care about.</p><p>For more detail on how Claude reasons about and uses tools, Anthropic&#8217;s<a href="https://www.anthropic.com/engineering/writing-tools-for-agents?utm_source=chatgpt.com"> </a><em><a href="https://www.anthropic.com/engineering/writing-tools-for-agents?utm_source=chatgpt.com">Writing Tools for Agents</a></em> is a great deep dive.</p><div><hr></div><h2><strong>Write less code, do more good science.</strong></h2><blockquote><p><strong>This isn&#8217;t the end of engineering rigor; it&#8217;s the scaling of it.</strong>  </p></blockquote><p>You aren&#8217;t just writing code; you&#8217;re encoding reasoning, intent, and judgment. The bottleneck is no longer how many library calls you&#8217;ve memorized, but whether you can <strong>decompose and formalize your intent</strong> clearly enough for an ecosystem of agents to execute.</p><p>That&#8217;s always been the bedrock of good engineering and science. But this shift opens a critical door. Because the interface to this power is now written language, we can plug the rigorous thinking of other disciplines directly into the development loop. I&#8217;ve seen investigators probing edge cases, lawyers stress-testing risk, and Ops teams defining evaluations - not by filing tickets, but by engaging with the system itself.</p><p><strong>We need this depth of collaboration to survive the pace of modern development</strong>. We are wiring together models and systems faster than traditional development can handle. If we don&#8217;t encode our best thinking into shared, intelligible workflows, we end up with fragile, ad-hoc analysis. But when we do, we can powerfully pool, share, and amplify diverse individual rigor into scalable systems.</p><p>The old flex was how much you could outperform the AI.</p><blockquote><p><strong>The new flex is how much the AI outperforms because you taught it to operate that way.</strong></p></blockquote><div class="pullquote"><p>Wren is a Senior Staff Research Engineer at a Fortune 500 company working on AI evaluation, tooling, and risk mitigation. She also runs workshops to introduce data scientists and engineers to scaled collaboration with AI coding assistants.</p></div><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://wrenchatwork.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 Dynamic Stability! 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></p>]]></content:encoded></item></channel></rss>