<?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[The Generative Programmer]]></title><description><![CDATA[For software builders: the emerging patterns in coding, architecture, and product development in the age of generative AI.]]></description><link>https://generativeprogrammer.com</link><image><url>https://substackcdn.com/image/fetch/$s_!HT3r!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0115c7-9e59-47d2-8872-d18b6705c74c_256x256.png</url><title>The Generative Programmer</title><link>https://generativeprogrammer.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 14 Sep 2026 02:55:59 GMT</lastBuildDate><atom:link href="https://generativeprogrammer.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Bilgin Ibryam]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[generativeprogrammer@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[generativeprogrammer@substack.com]]></itunes:email><itunes:name><![CDATA[Bilgin Ibryam]]></itunes:name></itunes:owner><itunes:author><![CDATA[Bilgin Ibryam]]></itunes:author><googleplay:owner><![CDATA[generativeprogrammer@substack.com]]></googleplay:owner><googleplay:email><![CDATA[generativeprogrammer@substack.com]]></googleplay:email><googleplay:author><![CDATA[Bilgin Ibryam]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[I Ran One Draft Through Four Anti-Slop Skills]]></title><description><![CDATA[Same draft, four editing policies. The difference was where each skill looked: the whole piece, the paragraph, or the sentence and individual words.]]></description><link>https://generativeprogrammer.com/p/i-ran-one-draft-through-four-anti</link><guid isPermaLink="false">https://generativeprogrammer.com/p/i-ran-one-draft-through-four-anti</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 13 Sep 2026 15:43:04 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f736322b-411a-44e0-8580-c40ac08a756f_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I ran <a href="https://x.com/bibryam/status/2099118140017856988">the same technical draft through four anti-slop and humanizer skills</a>, four separate runs from one file, and I never fed one output into another.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5pLq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5pLq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5pLq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5pLq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5pLq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5pLq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg" width="1456" height="913" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:913,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:623363,&quot;alt&quot;:&quot;Collage showing the Humanizer, No AI Slop, Stop Slop, and Clarity projects compared in the experiment&quot;,&quot;title&quot;:&quot;Collage showing the Humanizer, No AI Slop, Stop Slop, and Clarity projects compared in the experiment&quot;,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/215434770?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Collage showing the Humanizer, No AI Slop, Stop Slop, and Clarity projects compared in the experiment" title="Collage showing the Humanizer, No AI Slop, Stop Slop, and Clarity projects compared in the experiment" srcset="https://substackcdn.com/image/fetch/$s_!5pLq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5pLq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5pLq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5pLq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a0f1f-75b1-4468-9b45-5e2d614cbf7a_4000x2508.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The input was already clean. It had sources, version numbers, caveats, and a clear structure. I had removed most of the easy AI tells beforehand. That made the test useful: the skills could not simply delete stock phrases and declare victory.</p><p>I did not get four versions of the same cleanup. I got four editors working at different altitudes.</p><p>The four are not equally popular. A 12 September snapshot put Humanizer at about 47,000 GitHub stars and Clarity at about 200, while Stop Slop led the skills registry with roughly 14,000 installs against Humanizer&#8217;s 6,500. Neither count says anything about what a skill does to a sentence, which is what the runs were for.</p><h2>1. Humanizer: the lightest hand</h2><p><a href="https://github.com/blader/humanizer/blob/9862685f575c65a8247f90369951df1b3416e3d6/SKILL.md">Humanizer</a> changed 14 passages by my diff and reduced the draft by one word. Its own summary described five prose edits plus heading changes. One passage can contain more than one edit, so those counts measure different things.</p><p>It documents 25 patterns, yet produced the most conservative result. It caught title-case headings, one shallow <code>-ing</code> rider, a repeated list, and a word echo.</p><blockquote><p>Before: &#8220;A2UI 0.9.1 is current, and 1.0 remains a candidate.&#8221;</p><p>After: &#8220;A2UI 0.9.1 is current, and 1.0 is still a candidate.&#8221;</p></blockquote><p>That restraint is the value: on a solid draft, it fixes recognizable tells without rebuilding the argument.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Em7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Em7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3Em7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3Em7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3Em7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Em7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:222133,&quot;alt&quot;:&quot;Humanizer run summary showing five prose edits plus heading changes on draft seven&quot;,&quot;title&quot;:&quot;Humanizer run summary showing five prose edits plus heading changes on draft seven&quot;,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/215434770?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Humanizer run summary showing five prose edits plus heading changes on draft seven" title="Humanizer run summary showing five prose edits plus heading changes on draft seven" srcset="https://substackcdn.com/image/fetch/$s_!3Em7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3Em7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3Em7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3Em7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d75237-e3d6-4d9b-aedc-36391927172c_1798x1172.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Humanizer found a short list of local problems and stopped.</em></p><p>Its report explains why the list was short. It found no em dashes, no decorative bold, no curly quotes, and no stock AI vocabulary to remove, so most of its 25 patterns had nothing to match. The next skill&#8217;s word checks came back just as empty.</p><h2>2. No AI Slop: structural paragraph edits</h2><p><a href="https://github.com/petergyang/no-ai-slop/blob/000650b156983f5159695b441477f4e63b25dc85/skills/no-ai-slop/SKILL.md">No AI Slop</a> touched 16 passages and removed 15 words. None of its listed banned words or phrases appeared in this run, so it named actors, shortened tangled sentences, removed duplicated material, and killed the recap.</p><blockquote><p>Before: &#8220;cross-client portability remains to be proved&#8221;</p><p>After: &#8220;no one has proved cross-client portability yet&#8221;</p></blockquote><p>This result was sharper, but one edit showed the risk. &#8220;A common adoption path starts with&#8221; became &#8220;Most teams start with.&#8221; The rewrite is more direct, yet it makes a broader factual claim than the source supports.</p><p>It gave the draft structural momentum without flattening the voice, at the cost of one sentence&#8217;s precision.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IPRs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IPRs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png 424w, https://substackcdn.com/image/fetch/$s_!IPRs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png 848w, https://substackcdn.com/image/fetch/$s_!IPRs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png 1272w, https://substackcdn.com/image/fetch/$s_!IPRs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IPRs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png" width="1456" height="1184" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1184,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:265364,&quot;alt&quot;:&quot;No AI Slop before and after table showing structural sentence rewrites&quot;,&quot;title&quot;:&quot;No AI Slop before and after table showing structural sentence rewrites&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/215434770?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="No AI Slop before and after table showing structural sentence rewrites" title="No AI Slop before and after table showing structural sentence rewrites" srcset="https://substackcdn.com/image/fetch/$s_!IPRs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png 424w, https://substackcdn.com/image/fetch/$s_!IPRs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png 848w, https://substackcdn.com/image/fetch/$s_!IPRs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png 1272w, https://substackcdn.com/image/fetch/$s_!IPRs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ac8402-a6c6-47c2-9d52-5b3e6d09a7ab_1798x1462.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>No AI Slop&#8217;s word checks stayed quiet, so it worked on structure instead.</em></p><p>Its own summary counted seventeen structural edits against my diff&#8217;s sixteen, the same gap between self-report and diff that Humanizer produced. The work itself was plain mechanics: inanimate subjects and passive constructions replaced, one <code>-ing</code> explainer split, repeated detail condensed. Stop Slop went after the same passive constructions and did not stop there.</p><h2>3. Stop Slop: the strongest intervention</h2><p><a href="https://github.com/hardikpandya/stop-slop/blob/8da1f030185bdfe8471220585162991eaeb970e9/SKILL.md">Stop Slop</a> changed 37 passages, more than twice any other run, and made the draft five words longer.</p><p>The extra length comes from the rule: naming the actor behind a passive verb usually costs words.</p><blockquote><p>Before: &#8220;it is not a W3C Standard&#8221;</p><p>After: &#8220;the W3C has not made it a Standard&#8221;</p></blockquote><p>It also replaced &#8220;an agent&#8217;s&#8221; with &#8220;your agent&#8217;s&#8221; throughout. This was the most prescriptive result: named actors, direct reader address, fewer hedges, and fewer abstract subjects.</p><p>Explicit rules make it consistent, and the same force can flatten technical prose you wrote flat on purpose.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kD66!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kD66!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png 424w, https://substackcdn.com/image/fetch/$s_!kD66!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png 848w, https://substackcdn.com/image/fetch/$s_!kD66!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!kD66!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kD66!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png" width="1456" height="912" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:912,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89403,&quot;alt&quot;:&quot;Stop Slop table showing named actors, false agency, direct reader address, and hedge removal&quot;,&quot;title&quot;:&quot;Stop Slop table showing named actors, false agency, direct reader address, and hedge removal&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/215434770?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Stop Slop table showing named actors, false agency, direct reader address, and hedge removal" title="Stop Slop table showing named actors, false agency, direct reader address, and hedge removal" srcset="https://substackcdn.com/image/fetch/$s_!kD66!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png 424w, https://substackcdn.com/image/fetch/$s_!kD66!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png 848w, https://substackcdn.com/image/fetch/$s_!kD66!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!kD66!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb046f9e4-0540-408d-9753-8be58c33db4c_1798x1126.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Stop Slop changed the most passages because it enforced the most rules.</em></p><p>The rule sheet behind that consistency is close to absolute: no adverbs, no passive voice, no Wh-word openings, two list items instead of three, no em dashes. It also reaches past grammar into abstraction, turning &#8220;The industry is converging on a different contract at each boundary&#8221; into &#8220;Vendors and working groups are converging on a different contract at each boundary.&#8221;</p><p>The run then scored itself 34/50 to 41/50 on its own five dimensions, which is a workflow score rather than independent evidence. All three skills so far began by checking the draft against a list. The fourth began somewhere else.</p><h2>4. Clarity: the only one that zoomed out</h2><p><a href="https://github.com/addyosmani/clarity/blob/aa00c962996823d31712f3df54647e32506a4511/SKILL.md">Clarity</a> changed 15 passages and removed 10 words. It was the only run whose summary explicitly diagnosed the whole piece before editing it.</p><p>From there it found a problem none of the other three summaries reported: all seven sections ended with the same verdict cadence, &#8220;X is mature, but Y remains Z.&#8221; Clarity varied those endings, reordered the lead, cut staged transitions, and removed the repeated conclusion.</p><p>It still edited sentences; that work came second.</p><blockquote><p>Before: &#8220;MCP has broad support across clients, servers, and SDKs, making it the clearest de facto standard in this map.&#8221;</p><p>After: &#8220;MCP has broad support across clients, servers, and SDKs. It is the clearest de facto standard in this map.&#8221;</p></blockquote><p>It reads the article before it reads the sentence.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zTS5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zTS5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png 424w, https://substackcdn.com/image/fetch/$s_!zTS5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png 848w, https://substackcdn.com/image/fetch/$s_!zTS5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!zTS5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zTS5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png" width="1456" height="907" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:907,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:211521,&quot;alt&quot;:&quot;Clarity issue and fix table showing whole-piece structure and cadence changes&quot;,&quot;title&quot;:&quot;Clarity issue and fix table showing whole-piece structure and cadence changes&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/215434770?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Clarity issue and fix table showing whole-piece structure and cadence changes" title="Clarity issue and fix table showing whole-piece structure and cadence changes" srcset="https://substackcdn.com/image/fetch/$s_!zTS5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png 424w, https://substackcdn.com/image/fetch/$s_!zTS5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png 848w, https://substackcdn.com/image/fetch/$s_!zTS5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!zTS5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161320a6-f378-425c-abdf-c17b19c7f763_1798x1120.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Clarity found repetition across sections, not just inside sentences.</em></p><p>The four runs were not disjoint. Three of them split the same shallow <code>-ing</code> tail and condensed the same repeated OpenTelemetry passage, and two cut the same recap ending. They converged on the local repairs and diverged on everything above them.</p><h2>The takeaway</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0zg2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0zg2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png 424w, https://substackcdn.com/image/fetch/$s_!0zg2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png 848w, https://substackcdn.com/image/fetch/$s_!0zg2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png 1272w, https://substackcdn.com/image/fetch/$s_!0zg2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0zg2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png" width="1346" height="410" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:410,&quot;width&quot;:1346,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:18260,&quot;alt&quot;:&quot;Editorial altitude map placing Clarity at piece and section level, No AI Slop at paragraph level, and Humanizer and Stop Slop at sentence and word level&quot;,&quot;title&quot;:&quot;Editorial altitude map placing Clarity at piece and section level, No AI Slop at paragraph level, and Humanizer and Stop Slop at sentence and word level&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/215434770?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Editorial altitude map placing Clarity at piece and section level, No AI Slop at paragraph level, and Humanizer and Stop Slop at sentence and word level" title="Editorial altitude map placing Clarity at piece and section level, No AI Slop at paragraph level, and Humanizer and Stop Slop at sentence and word level" srcset="https://substackcdn.com/image/fetch/$s_!0zg2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png 424w, https://substackcdn.com/image/fetch/$s_!0zg2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png 848w, https://substackcdn.com/image/fetch/$s_!0zg2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png 1272w, https://substackcdn.com/image/fetch/$s_!0zg2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd77c3527-3c54-4551-b7fc-e6d4e1472112_1346x410.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The four runs landed at different altitudes. Clarity read the piece. No AI Slop concentrated on the paragraph. Humanizer and Stop Slop spent more attention on sentences and words, from opposite ends of the same level: 14 changed passages against 37. These are observed emphases from one run, not hard capability boundaries.</p><p>The rule sheets explain those emphases better than a single score. They disagree on basic choices such as passive voice, adverbs, list length, and whether scoring belongs in the workflow.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x49L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x49L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png 424w, https://substackcdn.com/image/fetch/$s_!x49L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png 848w, https://substackcdn.com/image/fetch/$s_!x49L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png 1272w, https://substackcdn.com/image/fetch/$s_!x49L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x49L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png" width="1456" height="294" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c043e681-739a-408a-9d51-22d30817da73_2498x504.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:294,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105387,&quot;alt&quot;:&quot;Comparison table showing how Humanizer, No AI Slop, Stop Slop, and Clarity handle em dashes, adverbs, lists, passive voice, scoring, and detector-proofing&quot;,&quot;title&quot;:&quot;Comparison table showing how Humanizer, No AI Slop, Stop Slop, and Clarity handle em dashes, adverbs, lists, passive voice, scoring, and detector-proofing&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/215434770?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Comparison table showing how Humanizer, No AI Slop, Stop Slop, and Clarity handle em dashes, adverbs, lists, passive voice, scoring, and detector-proofing" title="Comparison table showing how Humanizer, No AI Slop, Stop Slop, and Clarity handle em dashes, adverbs, lists, passive voice, scoring, and detector-proofing" srcset="https://substackcdn.com/image/fetch/$s_!x49L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png 424w, https://substackcdn.com/image/fetch/$s_!x49L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png 848w, https://substackcdn.com/image/fetch/$s_!x49L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png 1272w, https://substackcdn.com/image/fetch/$s_!x49L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc043e681-739a-408a-9d51-22d30817da73_2498x504.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><em>The skills disagree on editing policy, not just editing strength.</em></p><p>That turns the comparison into a routing decision. Start with the job, not the most aggressive rule set.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gkvI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gkvI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png 424w, https://substackcdn.com/image/fetch/$s_!gkvI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png 848w, https://substackcdn.com/image/fetch/$s_!gkvI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png 1272w, https://substackcdn.com/image/fetch/$s_!gkvI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gkvI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png" width="1456" height="302" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:302,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:104642,&quot;alt&quot;:&quot;Decision table matching writing jobs to Humanizer, No AI Slop, Stop Slop, or Clarity&quot;,&quot;title&quot;:&quot;Decision table matching writing jobs to Humanizer, No AI Slop, Stop Slop, or Clarity&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/215434770?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Decision table matching writing jobs to Humanizer, No AI Slop, Stop Slop, or Clarity" title="Decision table matching writing jobs to Humanizer, No AI Slop, Stop Slop, or Clarity" srcset="https://substackcdn.com/image/fetch/$s_!gkvI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png 424w, https://substackcdn.com/image/fetch/$s_!gkvI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png 848w, https://substackcdn.com/image/fetch/$s_!gkvI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png 1272w, https://substackcdn.com/image/fetch/$s_!gkvI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc7cfe1-4b62-42fe-b6e5-2a7f29bf6704_2476x514.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><em>Pick the skill for the job instead of stacking all four.</em></p><p>Choose by the failure you want to prevent. Humanizer for conservative cleanup, No AI Slop for paragraph structure and voice, Stop Slop for explicit rule enforcement, Clarity for whole-piece diagnosis.</p><p>Stacking all four blindly is not more thorough. Their priorities can collide, and one editor can undo another&#8217;s choices. My practical rule: one skill, two at most, then I read the diff myself.</p><div><hr></div><p><em>Method note: I ran the four skills separately against the same draft.md (my next post) Passage counts come from the <a href="https://x.com/bibryam/status/2099118140017856988">published thread</a> and describe one qualitative run, not quality scores or a reproducible benchmark. Star and install counts are from a 12 September 2026 snapshot and describe repositories, not writing.</em></p>]]></content:encoded></item><item><title><![CDATA[8 Software Books AI Has Made More Relevant]]></title><description><![CDATA[Established lessons on what to build, what correct means, and what survives production, revisited for AI-assisted coding.]]></description><link>https://generativeprogrammer.com/p/8-software-books-ai-has-made-more</link><guid isPermaLink="false">https://generativeprogrammer.com/p/8-software-books-ai-has-made-more</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sat, 05 Sep 2026 22:49:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b4a99bd1-6598-4efc-af6c-8dfb198b9cbf_4540x2373.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI is changing how we write code, but many of the difficult decisions around it are familiar. We still need to understand the problem, agree on the behavior, choose the right trade-offs, and find out what happens when the software meets real users. Faster implementation can carry a mistaken assumption into more of the system before we notice 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_!kwcF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kwcF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.png 424w, https://substackcdn.com/image/fetch/$s_!kwcF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.png 848w, https://substackcdn.com/image/fetch/$s_!kwcF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.png 1272w, https://substackcdn.com/image/fetch/$s_!kwcF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kwcF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71429384-2813-4274-848c-090a19537164_4540x2373.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2890033,&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://generativeprogrammer.com/i/214339433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.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_!kwcF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.png 424w, https://substackcdn.com/image/fetch/$s_!kwcF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.png 848w, https://substackcdn.com/image/fetch/$s_!kwcF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.png 1272w, https://substackcdn.com/image/fetch/$s_!kwcF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71429384-2813-4274-848c-090a19537164_4540x2373.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>8 Software Books That Matter More When AI Writes the Code</strong></figcaption></figure></div><p>That is why these eight books deserve another look. Their ideas predate today&#8217;s coding agents, even where the editions are recent. What follows is my take on applying them to AI-assisted development, with further reading for specific gaps.</p><h2>Decide what is worth building</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.amazon.com/dp/149197379X" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Zgd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7Zgd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7Zgd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7Zgd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Zgd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg" width="120" height="180" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:180,&quot;width&quot;:120,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8702,&quot;alt&quot;:&quot;Cover of Escaping the Build Trap by Melissa Perri&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.amazon.com/dp/149197379X&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/214339433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cover of Escaping the Build Trap by Melissa Perri" title="Cover of Escaping the Build Trap by Melissa Perri" srcset="https://substackcdn.com/image/fetch/$s_!7Zgd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7Zgd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7Zgd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7Zgd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc55f58-aad9-463c-90eb-2ef7c2179834_120x180.jpeg 1456w" sizes="100vw"></picture><div></div></div></a><figcaption class="image-caption"><em><a href="https://www.amazon.com/dp/149197379X">Escaping the Build Trap</a></em></figcaption></figure></div><p>An agent can turn a feature request into a convincing prototype before anyone has established that the idea is valuable. A working demo can make the solution feel more certain while the demand for it remains an assumption. That makes it easier to fall into the build trap: shipping more features while the customer or business outcome stays the same.</p><p>The book connects product strategy to the decisions teams make every day. Its distinction between <strong>outputs and outcomes</strong> gives engineers a reason to challenge a request beyond its technical feasibility. What problem are we solving, what should change for the user, and how will we know? Engineers contribute to that evidence through experiments, instrumentation, and feedback from running systems.</p><p>For more on discovery, read <em><a href="https://www.amazon.com/dp/1736633309">Continuous Discovery Habits</a></em>, or <em><a href="https://www.amazon.com/dp/1119551447">Testing Business Ideas</a></em> for testing business assumptions before committing to a solution.</p><h2>Agree on what correct means</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.amazon.com/dp/1617290084" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S3c-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png 424w, https://substackcdn.com/image/fetch/$s_!S3c-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png 848w, https://substackcdn.com/image/fetch/$s_!S3c-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png 1272w, https://substackcdn.com/image/fetch/$s_!S3c-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S3c-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png" width="120" height="150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:150,&quot;width&quot;:120,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:12942,&quot;alt&quot;:&quot;Cover of Specification by Example by Gojko Adzic&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.amazon.com/dp/1617290084&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/214339433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cover of Specification by Example by Gojko Adzic" title="Cover of Specification by Example by Gojko Adzic" srcset="https://substackcdn.com/image/fetch/$s_!S3c-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png 424w, https://substackcdn.com/image/fetch/$s_!S3c-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png 848w, https://substackcdn.com/image/fetch/$s_!S3c-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png 1272w, https://substackcdn.com/image/fetch/$s_!S3c-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20354aa9-87e1-43f9-9584-b4add5cee98e_120x150.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><em><a href="https://www.amazon.com/dp/1617290084">Specification by Example</a></em></figcaption></figure></div><p>Once we know what is worth building, we need to agree on its behavior. Natural language leaves room for several plausible interpretations, and an agent can choose one, implement it, and generate tests that repeat the same assumption. Passing those tests tells us little about whether the assumption was right.</p><p>This book, published in 2011, offers a practical way to resolve that ambiguity. Product managers, domain experts, and engineers work through <strong>concrete examples</strong> before that interpretation becomes working code. A request to let customers cancel orders, for example, needs answers about orders that have shipped, partial shipments, and payments already collected. Those cases expose disagreements that a general requirement can hide.</p><p>The important examples can then become executable acceptance checks and living documentation. They give an agent a reference for expected behavior when a prompt changes or an implementation is rewritten. Their value comes from agreement with domain experts, independently of the assumptions in the generated code.</p><p>In his <a href="https://gojko.net/2020/03/17/sbe-10-years.html">ten-year retrospective</a>, Gojko Adzic explains why the conversations around examples often proved more valuable than the resulting tests. Use Given-When-Then where it helps; the format alone will not resolve a disagreement.</p><p>Read <em><a href="https://www.amazon.com/dp/0201702258">Writing Effective Use Cases</a></em> for a more structured treatment of user goals, success paths, and exceptions.</p><h2>Make business meaning explicit</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.amazon.com/dp/1098100131" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4lTb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604dda72-8515-4883-9755-020e285feeef_120x157.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4lTb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604dda72-8515-4883-9755-020e285feeef_120x157.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4lTb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604dda72-8515-4883-9755-020e285feeef_120x157.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4lTb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604dda72-8515-4883-9755-020e285feeef_120x157.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4lTb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604dda72-8515-4883-9755-020e285feeef_120x157.jpeg" width="120" height="157" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/604dda72-8515-4883-9755-020e285feeef_120x157.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:157,&quot;width&quot;:120,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7286,&quot;alt&quot;:&quot;Cover of Learning Domain-Driven Design by Vlad Khononov&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.amazon.com/dp/1098100131&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/214339433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604dda72-8515-4883-9755-020e285feeef_120x157.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cover of Learning Domain-Driven Design by Vlad Khononov" title="Cover of Learning Domain-Driven Design by Vlad Khononov" srcset="https://substackcdn.com/image/fetch/$s_!4lTb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604dda72-8515-4883-9755-020e285feeef_120x157.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4lTb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604dda72-8515-4883-9755-020e285feeef_120x157.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4lTb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604dda72-8515-4883-9755-020e285feeef_120x157.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4lTb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604dda72-8515-4883-9755-020e285feeef_120x157.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><em><a href="https://www.amazon.com/dp/1098100131">Learning Domain-Driven Design</a></em></figcaption></figure></div><p>Examples reveal another problem: the same word can mean different things to different teams. A model may know the language of banking or logistics without knowing what &#8220;account&#8221; or &#8220;completed&#8221; means inside your organization. If that meaning is wrong, generation can carry the mistake into schemas, APIs, events, and tests.</p><p>Domain-driven design gives us a way to discover and preserve those meanings. A <strong>ubiquitous language</strong> is developed with domain experts, so the terms in the software reflect how the business works. <strong>Bounded contexts</strong> define where a particular model applies, and context maps make the relationships between models explicit. This matters when an agent reuses code across services: billing and fulfillment may have similar schemas but different rules for what makes an order complete.</p><p>The book connects these choices to implementation through business logic and integration patterns. Types, state transitions, and tests can then constrain generated changes, while domain terminology in the code gives the agent context about which rules belong where.</p><p>The distinction between core, supporting, and generic subdomains helps decide where careful modeling is worth the effort, while simple business logic can stay simple.</p><p>Read <em><a href="https://www.amazon.com/dp/0137458916">Domain Storytelling</a></em> for discovering knowledge with domain experts, or <em><a href="https://www.amazon.com/dp/1680502549">Domain Modeling Made Functional</a></em> for expressing rules in types so invalid states are harder to represent.</p><h2>Choose architectural trade-offs that fit the system</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.amazon.com/dp/1492086894" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OwgG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OwgG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OwgG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OwgG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OwgG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg" width="120" height="157" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:157,&quot;width&quot;:120,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8285,&quot;alt&quot;:&quot;Cover of Software Architecture: The Hard Parts by Neal Ford, Mark Richards, Pramod Sadalage, and Zhamak Dehghani&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.amazon.com/dp/1492086894&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/214339433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cover of Software Architecture: The Hard Parts by Neal Ford, Mark Richards, Pramod Sadalage, and Zhamak Dehghani" title="Cover of Software Architecture: The Hard Parts by Neal Ford, Mark Richards, Pramod Sadalage, and Zhamak Dehghani" srcset="https://substackcdn.com/image/fetch/$s_!OwgG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OwgG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OwgG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OwgG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8decdd8d-0d9c-4683-a60d-99c8a811aae7_120x157.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><em><a href="https://www.amazon.com/dp/1492086894">Software Architecture: The Hard Parts</a></em></figcaption></figure></div><p>An agent can scaffold a service, its API, and its deployment files without resolving whether the service needs to be separate. Code generation reduces some of the effort of creating a boundary, but the latency, coordination, and failure modes it introduces remain. A design that is easy to generate may still be expensive to operate and change.</p><p>This book develops <strong>trade-off analysis</strong> through the problems of breaking systems apart and putting them back together. Service granularity, coupling, data ownership, orchestration, and distributed transactions are connected decisions. Moving a boundary may make deployment easier while making consistency and failure recovery harder.</p><p>That reasoning also matters across repeated agent changes. A locally simpler implementation may remove an intentional boundary or introduce a dependency the team had rejected. Explicit constraints and the reasoning behind them give both agents and reviewers context that the code alone may not reveal.</p><p>The examples lean heavily toward distributed architectures, so use them to evaluate whether the benefits justify the added complexity in your system.</p><p>Read <em><a href="https://www.amazon.com/dp/0984618104">Just Enough Software Architecture</a></em> for matching the amount of architecture work to the project&#8217;s risks.</p><h2>Understand your data guarantees</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.amazon.com/dp/1098119061" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eeWO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eeWO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eeWO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eeWO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eeWO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg" width="120" height="157" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:157,&quot;width&quot;:120,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7927,&quot;alt&quot;:&quot;Cover of Designing Data-Intensive Applications, Second Edition by Martin Kleppmann and Chris Riccomini&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.amazon.com/dp/1098119061&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/214339433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cover of Designing Data-Intensive Applications, Second Edition by Martin Kleppmann and Chris Riccomini" title="Cover of Designing Data-Intensive Applications, Second Edition by Martin Kleppmann and Chris Riccomini" srcset="https://substackcdn.com/image/fetch/$s_!eeWO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eeWO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eeWO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eeWO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59fbacf0-bbb5-4968-86e8-9ff6a832f433_120x157.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><em><a href="https://www.amazon.com/dp/1098119061">Designing Data-Intensive Applications, Second Edition</a></em></figcaption></figure></div><p>A generated database client may look correct while leaving unanswered which state is authoritative, how stale a read may be, or what should happen when an update arrives twice. These questions affect every cache, event consumer, search index, and model input that depends on the data.</p><p>The book connects data models and storage choices to the guarantees an application needs. Its coverage of replication, transactions, consistency, and partial failure helps explain what an API promises and where that promise ends. Schema evolution and batch and stream processing extend the discussion to systems that must change while continuing to serve readers and writers.</p><p>This becomes visible when an agent changes a schema and updates all the code it can see. Older consumers, stored events, and derived indexes may still depend on the previous structure. <strong>Data contracts</strong> make that compatibility requirement explicit, alongside the rules for duplicates, ordering, and freshness that a successful API call cannot establish.</p><p>Read <em><a href="https://www.amazon.com/dp/1492040347">Database Internals</a></em> for storage engines and database machinery, or <em><a href="https://www.amazon.com/dp/1491983876">Streaming Systems</a></em> when event time, watermarks, and stateful processing dominate the design.</p><h2>Identify threats and trust boundaries</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.amazon.com/dp/1118809998" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0hmC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0hmC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0hmC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0hmC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0hmC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg" width="120" height="150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:150,&quot;width&quot;:120,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8325,&quot;alt&quot;:&quot;Cover of Threat Modeling: Designing for Security by Adam Shostack&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.amazon.com/dp/1118809998&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/214339433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cover of Threat Modeling: Designing for Security by Adam Shostack" title="Cover of Threat Modeling: Designing for Security by Adam Shostack" srcset="https://substackcdn.com/image/fetch/$s_!0hmC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0hmC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0hmC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0hmC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3162ff6d-ee4b-45ed-adc7-af9f8839629d_120x150.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><em><a href="https://www.amazon.com/dp/1118809998">Threat Modeling: Designing for Security</a></em></figcaption></figure></div><p>The security questions extend beyond the code an agent produces. A coding agent may read a README or tool response while also having shell access and credentials. Through <a href="https://www.anthropic.com/engineering/how-we-contain-claude">prompt injection</a>, untrusted content can influence actions taken with those privileges. The same concern applies when the application itself gives agents access to tools and data.</p><p>Shostack&#8217;s <a href="https://shostack.org/resources/threat-modeling.html">four-question framework</a> provides a repeatable process: understand the system, identify what can go wrong, decide how to respond, and review the result. Mapping data flows and trust boundaries makes the system concrete, while a method such as <strong>STRIDE</strong> helps identify threats systematically.</p><p>The 2014 book needs to be supplemented with knowledge of these newer attacks, but its method connects them to familiar design questions: which inputs are untrusted, what authority does the agent have, and where are access controls enforced? A prompt can steer the model&#8217;s behavior, while enforced permissions limit the available actions even when it follows a malicious instruction.</p><p>Read <em><a href="https://www.amazon.com/dp/1718501927">Designing Secure Software</a></em> for secure implementation practices that complement threat modeling.</p><h2>Design for production failures</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.amazon.com/dp/1680502395" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EjL-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EjL-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EjL-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EjL-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EjL-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg" width="120" height="144" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:144,&quot;width&quot;:120,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5945,&quot;alt&quot;:&quot;Cover of Release It!, Second Edition by Michael Nygard&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.amazon.com/dp/1680502395&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/214339433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cover of Release It!, Second Edition by Michael Nygard" title="Cover of Release It!, Second Edition by Michael Nygard" srcset="https://substackcdn.com/image/fetch/$s_!EjL-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EjL-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EjL-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EjL-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff73446b1-2083-4d2a-b8a3-e128ff8f974d_120x144.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><em><a href="https://www.amazon.com/dp/1680502395">Release It!, Second Edition</a></em></figcaption></figure></div><p>A secure system can still fail under ordinary load or a slow dependency. An agent may wrap a failing API call in a retry loop without accounting for retries already built into the client library. The code can look more resilient while multiplying requests against a struggling dependency.</p><p><em>Release It!</em> connects application design to these production consequences. Its failure patterns explain how blocked threads, mismatched capacity, and cascading failures turn local trouble into system-wide problems. Its stability patterns, including <strong>timeouts, circuit breakers, bulkheads, and back pressure</strong>, provide ways to contain that trouble.</p><p>These patterns require decisions about how much work the system can accept and what happens when it reaches its limits. Runtime visibility and controls let us observe and adjust that behavior, while deployment practices and failure rehearsal test whether recovery actually works.</p><p>Pair it with <em><a href="https://www.amazon.com/dp/1098179927">Observability Engineering, Second Edition</a></em> for understanding system behavior through production telemetry.</p><h2>Improve the whole delivery flow</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.amazon.com/dp/1942788339" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3ujr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3ujr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3ujr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3ujr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3ujr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg" width="120" height="180" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:180,&quot;width&quot;:120,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9031,&quot;alt&quot;:&quot;Cover of Accelerate by Nicole Forsgren, Jez Humble, and Gene Kim&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.amazon.com/dp/1942788339&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/214339433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cover of Accelerate by Nicole Forsgren, Jez Humble, and Gene Kim" title="Cover of Accelerate by Nicole Forsgren, Jez Humble, and Gene Kim" srcset="https://substackcdn.com/image/fetch/$s_!3ujr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3ujr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3ujr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3ujr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5629b937-a5ac-4e78-9447-67d7441d12eb_120x180.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><em><a href="https://www.amazon.com/dp/1942788339">Accelerate</a></em></figcaption></figure></div><p>Several coding agents can work in parallel while the team still has one review queue. Faster generation can therefore increase work in progress and integration conflicts without getting changes to users sooner.</p><p><em>Accelerate</em> connects delivery performance to technical practices, architecture, management, and culture. Small batches, continuous integration, deployment automation, loosely coupled systems, and effective feedback help teams move changes through the whole process. Throughput and stability need to be considered together, so an improvement in one does not hide a problem in the other.</p><p>Evaluate AI adoption by whether changes reach users sooner, how often they fail, and how quickly the service recovers. Commits, generated lines, and suggestion acceptance rates may explain tool usage, but they do not establish an improvement in delivery or product outcomes.</p><p>The book predates today&#8217;s coding agents, but DORA&#8217;s <a href="https://dora.dev/capabilities/working-in-small-batches/">guidance on small batches</a> makes the connection explicit: large generated changes remain difficult to review, test, and integrate.</p><p>Read <em><a href="https://www.amazon.com/dp/0321601912">Continuous Delivery</a></em> for the delivery machinery, or <em><a href="https://www.amazon.com/dp/1966280009">Team Topologies, Second Edition</a></em> for team boundaries, cognitive load, and interactions that help or hinder the flow of work.</p><h2>Where to start</h2><p>Start with the problem your team is struggling with. The map below pairs each main book with two alternatives for going deeper, so you can choose the path that is most relevant to your 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_!GzU2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GzU2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png 424w, https://substackcdn.com/image/fetch/$s_!GzU2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png 848w, https://substackcdn.com/image/fetch/$s_!GzU2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!GzU2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GzU2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:681099,&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://generativeprogrammer.com/i/214339433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GzU2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png 424w, https://substackcdn.com/image/fetch/$s_!GzU2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png 848w, https://substackcdn.com/image/fetch/$s_!GzU2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!GzU2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffda0e08c-5f63-4e20-a06d-9539d88ab1a9_1600x1200.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>The Software Engineering Reading Map for the Age of AI</strong></figcaption></figure></div><p>AI can generate more of the implementation, but it also lets weak assumptions spread through a system much faster. These books remain relevant because they teach us how to reason about everything the generated code depends on, from what to build to how the result behaves in production. </p><p>Which software engineering book would you add to this list, and why has AI made it more relevant?</p><div><hr></div><p style="text-align: center;">&#128075; Found this useful? Like and restack it for other software engineers.</p><div><hr></div>]]></content:encoded></item><item><title><![CDATA[Latency Patterns for Faster AI Applications]]></title><description><![CDATA[19 distributed-systems patterns for reducing non-model latency using locality, work reduction, concurrency, and anticipation.]]></description><link>https://generativeprogrammer.com/p/latency-patterns-for-faster-ai-applications</link><guid isPermaLink="false">https://generativeprogrammer.com/p/latency-patterns-for-faster-ai-applications</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sat, 29 Aug 2026 15:09:29 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/baf9c12d-6b5e-4b5b-beec-12bf9384f1e8_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you type a question into ChatGPT, latency is the time until the first useful response appears. The same applies when you click on a dashboard and wait for the first useful chart. That interval may include browser work, authentication, an API gateway, application logic, database queries, an LLM call, and the final rendering. The user waits for all the required work on this critical path, not only for one isolated component.</p><p>This is why a fast database query or LLM call does not prove that the application is fast. We need to measure the full path as a distribution and identify what controls the percentile we care about. Once we know what dominates the critical path, we can bring requests and data closer, reduce work, execute independent work concurrently, or anticipate predictable work. These are general distributed-system patterns that apply equally to AI applications. The map below adapts latency optimization ideas from Pekka Enberg&#8217;s <em><a href="https://link.amazon/B0emb7Jbb">Latency</a></em> into four practical pattern categories.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cU9p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cU9p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png 424w, https://substackcdn.com/image/fetch/$s_!cU9p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png 848w, https://substackcdn.com/image/fetch/$s_!cU9p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!cU9p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cU9p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:264254,&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://generativeprogrammer.com/i/212818125?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.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_!cU9p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png 424w, https://substackcdn.com/image/fetch/$s_!cU9p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png 848w, https://substackcdn.com/image/fetch/$s_!cU9p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!cU9p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305a0a82-3c54-439b-99df-82ad34e99348_3200x1800.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Latency Patterns for Distributed Applications</figcaption></figure></div><p>An agentic request may cross RAG retrieval, databases, a model gateway, one or more LLMs, MCP or other tool servers, and an orchestration loop. A large part of the latency often comes from the LLM calls, but the model is still only one segment of the path. I covered model-serving optimizations such as quantization, decoding, and server scheduling in <a href="https://www.youtube.com/watch?v=tLK5jyhQOgA">this talk</a> and <a href="https://generativeprogrammer.com/p/applying-kubernetes-patterns-to-llm?utm_source=publication-search">this</a> post. In this post, I explicitly focus on <strong>non-model latencies</strong> across the application path.</p><p>Each category bellow explains the patterns through traditional application examples, then how they apply in an AI application. Taken together, there 19 latency patterns across four categories.</p><h1>Locality Patterns</h1><p>The first thing to check is whether the request and the data it needs are far apart. That distance may be geographical, between services, between processes on one host, or even between a CPU core and memory. There are four common patterns for shortening this part of the path.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!22iF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!22iF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png 424w, https://substackcdn.com/image/fetch/$s_!22iF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png 848w, https://substackcdn.com/image/fetch/$s_!22iF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png 1272w, https://substackcdn.com/image/fetch/$s_!22iF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!22iF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png" width="1456" height="912" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:912,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:906777,&quot;alt&quot;:&quot;Locality patterns: colocation, replication, partitioning, and caching&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/212818125?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Locality patterns: colocation, replication, partitioning, and caching" title="Locality patterns: colocation, replication, partitioning, and caching" srcset="https://substackcdn.com/image/fetch/$s_!22iF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png 424w, https://substackcdn.com/image/fetch/$s_!22iF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png 848w, https://substackcdn.com/image/fetch/$s_!22iF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png 1272w, https://substackcdn.com/image/fetch/$s_!22iF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065aa7f8-d6c0-4c8a-99dc-9e76fcfb573f_7280x4560.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>1. Colocation Pattern</h3><p>Colocation shortens or removes a boundary between the source and the target. The scale can vary significantly. A CDN can serve the dashboard shell closer to the user. Application logic can run in the same region as its database instead of crossing a wide-area network. On one host, CPU affinity and NUMA-aware placement can keep hot work and memory near the cores that use them. The mechanism is the same even when the distances are very different.</p><p>When to use. Use colocation when the distance between components that frequently interact is a measurable part of the critical path.</p><p>The main trade-off. Tighter placement can reduce scheduling flexibility and make failover or scaling across locations more difficult.</p><h3>2. Replication Pattern</h3><p>Replication places a readable copy in more than one location. A nearby replica can shorten the read path, but only when the application is allowed to read from it. For example, a dashboard can read tenant data from the nearest regional replica instead of crossing regions for every query.</p><p>When to use. Use replication for read-heavy paths that can tolerate a clearly defined level of staleness.</p><p>The main trade-off. Synchronous replication may keep the write waiting for required acknowledgements, while asynchronous replication can respond earlier but allow lag. The application must decide which reads can tolerate older data, how they are routed, and what should happen during a failure.</p><h3>3. Partitioning Pattern</h3><p>Partitioning divides data or work into units that can be placed and processed independently. It does not make anything closer by itself, but a good partition key can keep a tenant&#8217;s query and data together. For example, a dashboard can partition metrics by tenant so that most queries touch one shard rather than several.</p><p>When to use. Use partitioning when requests and data share a stable key that can keep related work within one partition or location.</p><p>The main trade-off. A poor key can create a hot partition, while a request that spans several partitions brings routing and coordination back onto the critical path.</p><h3>4. Caching Pattern</h3><p>Caching creates a shortcut for repeated reads or computation. The hit ratio tells us how often the shortcut works, while the miss penalty tells us how painful the original path remains. For example, a dashboard can cache common aggregates close to the application instead of recalculating them for every page load.</p><p>When to use. Use caching when reads or computations repeat and their results can be safely reused.</p><p>The main trade-off. A high hit ratio can still produce a bad tail when misses are expensive. Freshness, invalidation, and ownership determine whether the cached result can be trusted.</p><h3>Choosing What to Bring Closer</h3><p>In a traditional application, start with the kind of distance that creates the delay. Use colocation when two components communicate frequently, replication when reads are far from the source, partitioning when related data can be kept together, and caching when the same data or computation is requested repeatedly. The patterns can be combined, but each addresses a different reason for travelling across the system.</p><p>In an AI application, apply the same test to the orchestrator, the model provider, retrieval store, state store, and tools. Colocate dependencies that communicate frequently, replicate read-heavy knowledge where residency rules allow it, partition state by tenant or session, and cache repeated retrieval, schema discovery, session summarization, policy lookup, or model prefill work.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/p/latency-patterns-for-faster-ai-applications?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading The Generative Programmer! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/p/latency-patterns-for-faster-ai-applications?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://generativeprogrammer.com/p/latency-patterns-for-faster-ai-applications?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><h1>Work Reduction Patterns</h1><p>If the latency trace points at computation as the bottleneck, the next move is to remove work. Work that no longer exists cannot delay the request, consume capacity, or create another failure point.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4YN6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4YN6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png 424w, https://substackcdn.com/image/fetch/$s_!4YN6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png 848w, https://substackcdn.com/image/fetch/$s_!4YN6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png 1272w, https://substackcdn.com/image/fetch/$s_!4YN6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4YN6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png" width="1456" height="912" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:912,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:917743,&quot;alt&quot;:&quot;Work reduction patterns for shortening the critical path&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/212818125?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Work reduction patterns for shortening the critical path" title="Work reduction patterns for shortening the critical path" srcset="https://substackcdn.com/image/fetch/$s_!4YN6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png 424w, https://substackcdn.com/image/fetch/$s_!4YN6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png 848w, https://substackcdn.com/image/fetch/$s_!4YN6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png 1272w, https://substackcdn.com/image/fetch/$s_!4YN6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd6fddc-675c-42ec-8d31-b2f09f03a890_7280x4560.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5. Algorithmic Work Reduction Pattern</h3><p>An index over tenant and time can replace a full scan. A hash lookup can replace a linear search. Filtering before an expensive join or sort can reduce the dataset before the costly operation begins. These changes reduce the amount of work rather than making the same work slightly faster.</p><p>When to use. Use this pattern when query or computation cost dominates and a better algorithm, index, or data structure can reduce the work.</p><p>The main trade-off. A faster access path may require additional indexes, memory, preprocessing, or implementation complexity.</p><h3>6. Selective Data Processing Pattern</h3><p>A dashboard does not need the full object graph when the first chart uses five fields. Building large intermediate objects, copying them between layers, serializing them, and then discarding most of the result consumes time without changing what the user sees. A lean response should carry only what the next step needs.</p><p>When to use. Use selective data processing when the next step needs only a subset of the available data.</p><p>The main trade-off. Removing too much data can trigger another request or prevent a later step from completing.</p><h3>7. Setup Reuse Pattern</h3><p>Reusing an established connection, a parsed schema, or validated orchestration state avoids repeating the same setup on every request.</p><p>When to use. Use setup reuse when the same initialization cost is paid repeatedly and the resulting state can be retained safely.</p><p>The main trade-off. Reused state needs explicit lifecycle, freshness, isolation, and failure handling.</p><h3>8. Request Coalescing Pattern</h3><p>Combining several known reads into one request can remove repeated serialization, scheduling, and round trips. This is where request batching can help latency. For example, a dashboard backend can fetch the summary, alerts, and recent events in one call instead of making three sequential requests.</p><p>When to use. Use request coalescing when several predictable calls cross the same boundary and can be safely combined.</p><p>The main trade-off. A combined request can make one slow operation hold back all the others. It should be measured against the user-visible latency target, not assumed to be faster.</p><h3>9. Runtime Tuning Pattern</h3><p>Allocation, garbage collection, demand paging, scheduling, and context switches can all delay useful work. Profile the critical path first, then reduce only the runtime costs that measurably affect it. For example, a service may reduce short-lived allocations or tune its heap after profiles tie p99 spikes to garbage-collection pauses. These costs are measurable suspects, not default explanations for every slow service.</p><p>When to use. Use runtime tuning when profiles show that runtime overhead affects the percentile you are trying to improve.</p><p>The main trade-off. Runtime tuning can increase implementation complexity and may depend on a specific runtime, operating system, or hardware configuration.</p><h3>Choosing What Work to Remove</h3><p>In a traditional application, first identify what kind of work dominates the trace. Algorithmic work reduction changes how the result is found. Selective data processing reduces how much data moves through the path. Setup reuse avoids repeating initialization, while request coalescing removes repeated boundary crossings. </p><p>In an AI application, reduce latency by doing less work. Use regular code or indexed search for simple lookups instead of calling a model. Send only relevant information to the model, reuse existing tool connections, and combine calls that always happen together. Use a smaller model for simple tasks when it provides good enough results, stop generation when the answer is complete, and limit how much tool output enters the prompt. But do not remove so much context that the application must fetch more information and call the model again. That extra round trip may make the request slower overall.</p><p>Once the remaining work is necessary, the next question is whether it really has to run in sequence.</p><h1>Concurrent Execution Patterns</h1><p>Some work is necessary but does not need to happen in sequence. Suppose authentication must finish first, but four dashboard panels are then independent. Running them serially makes the user wait for roughly the sum of their durations. Starting them together can bring the wait closer to the slowest required panel, plus scheduling and coordination overhead.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WJ7g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WJ7g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png 424w, https://substackcdn.com/image/fetch/$s_!WJ7g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png 848w, https://substackcdn.com/image/fetch/$s_!WJ7g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png 1272w, https://substackcdn.com/image/fetch/$s_!WJ7g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WJ7g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png" width="1456" height="912" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:912,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1102375,&quot;alt&quot;:&quot;Concurrent execution patterns for overlapping independent work&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/212818125?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Concurrent execution patterns for overlapping independent work" title="Concurrent execution patterns for overlapping independent work" srcset="https://substackcdn.com/image/fetch/$s_!WJ7g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png 424w, https://substackcdn.com/image/fetch/$s_!WJ7g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png 848w, https://substackcdn.com/image/fetch/$s_!WJ7g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png 1272w, https://substackcdn.com/image/fetch/$s_!WJ7g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61d6a159-4a72-4e81-bf85-be519fe6dfdb_7280x4560.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>10. Synchronization Avoidance Pattern</h3><p>A contended lock can make otherwise short operations line up behind one owner. Immutable state may remove the shared dependency, while a single-owner design may replace lock contention with an explicit queue. The important question is whether another operation must finish or release something before this one can continue.</p><p>When to use. Use synchronization avoidance when coordination over shared state is a measurable source of waiting and the state can be made immutable, partitioned, or owned by one component.</p><p>The main trade-off. Removing a lock may move the waiting elsewhere or require a different state-management model.</p><h3>11. Independent Concurrency Pattern</h3><p>Concurrency lets several tasks make progress, while parallelism executes work at the same time. For the dashboard, separate panel reads can run concurrently. In an agentic application, a research agent can query independent document stores and market-data sources in parallel, then join the results before synthesis. If one tool needs an identifier returned by another, that dependency remains serial.</p><p>When to use. Use independent concurrency when required tasks have no data dependency and the system has enough capacity to run them together.</p><p>The main trade-off. Concurrency does not help when one task genuinely needs the result of another, and it can make latency worse when the fan-out exhausts a shared dependency.</p><h3>12. Progressive Response Pattern</h3><p>An event loop can use resources more efficiently while external I/O is pending, but it does not make the database, model, or remote service intrinsically faster. The visible latency improves when an AI application streams useful model output or an independently useful tool result instead of holding everything until the full task completes.</p><p>When to use. Use a progressive response when a partial result is independently useful and time to first useful result matters to the user.</p><p>The main trade-off. This pattern shortens time to first useful result, not full completion, and the client must handle partial or provisional state.</p><h3>13. Concurrency Budget Pattern</h3><p>A queue stores waiting; it does not remove it. If arrivals exceed capacity, the queue grows and tail latency follows. Set a concurrency budget, propagate deadlines and cancellation, apply backpressure, and stop work when the user no longer needs it. For example, a dashboard can allow only four panel queries to run at once rather than sending an unbounded fan-out to the database.</p><p>When to use. Use a concurrency budget when one request can fan out across services, databases, models, or tools and overload a shared dependency.</p><p>The main trade-off. A budget that is too low leaves capacity unused, while one that is too high moves the queue into a downstream dependency.</p><h3>14. Hedged Requests Pattern</h3><p>Request hedging reduces exposure to a straggler by sending equivalent copies and accepting the first valid response. For example, after a short delay, a service can send the same read to a second replica and use whichever valid response arrives first.</p><p>When to use. Use hedged requests when rare stragglers dominate tail latency, spare capacity exists, and the operation is idempotent or side-effect-free.</p><p>The main trade-off. Hedging spends extra capacity and can worsen overload if it is used without a strict budget.</p><h3>Choosing What Can Run Together</h3><p>In a traditional application, synchronization avoidance removes unnecessary waiting, while independent concurrency overlaps work that has no dependency. A progressive response changes when useful output becomes visible, not how fast the full operation completes. A concurrency budget protects shared capacity, while hedged requests spend additional capacity to reduce exposure to rare stragglers.</p><p>In an AI application, run independent model, tool, and retrieval calls at the same time. If one call needs the result of another, run them in order. Progressive responses, such as streaming, show useful results sooner but do not change which calls can run together. Limit how many model, agent, tool, and retrieval calls run at once to avoid overload. Use hedged requests only for operations that are safe to repeat. The goal is to reduce waiting, not to start as many calls as possible.</p><h1>Anticipation Patterns</h1><p>If a remaining delay cannot be removed or safely overlapped after the request arrives, we can anticipate likely work and move it earlier.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LdDR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LdDR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png 424w, https://substackcdn.com/image/fetch/$s_!LdDR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png 848w, https://substackcdn.com/image/fetch/$s_!LdDR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png 1272w, https://substackcdn.com/image/fetch/$s_!LdDR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LdDR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png" width="1456" height="912" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:912,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:864435,&quot;alt&quot;:&quot;Anticipation patterns for moving predictable work earlier&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/212818125?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Anticipation patterns for moving predictable work earlier" title="Anticipation patterns for moving predictable work earlier" srcset="https://substackcdn.com/image/fetch/$s_!LdDR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png 424w, https://substackcdn.com/image/fetch/$s_!LdDR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png 848w, https://substackcdn.com/image/fetch/$s_!LdDR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png 1272w, https://substackcdn.com/image/fetch/$s_!LdDR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0193007-c2d6-45f5-b9b6-8815c89da29c_7280x4560.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>15. Predictive Prefetching Pattern</h3><p>Once authentication identifies the user, the application may fetch the default dashboard before the browser asks for its first panel. This is a prediction about a future read.</p><p>When to use. Use predictive prefetching when the next read is predictable enough to justify occasionally wasted work.</p><p>The main trade-off. Prefetching helps only when the data arrives in time and is still useful when the application needs it. A wrong prediction consumes resources without shortening the request.</p><h3>16. Optimistic Update Pattern</h3><p>A filter can appear selected while persistence continues, as long as the interface shows that the change is pending and can roll it back after a failure. This improves perceived latency after the user acts. It does not make durable completion happen earlier.</p><p>When to use. Use optimistic updates when success is common, failure is visible, and the operation can be safely reversed.</p><p>The main trade-off. A failed operation requires rollback, and provisional state must never be presented as completed work.</p><h3>17. Speculative Execution Pattern</h3><p>Speculative execution runs a likely branch before the actual choice arrives. For example, a dashboard can start calculating the most common time range while the user is still opening the time-range filter.</p><p>When to use. Use speculative execution when a small number of likely branches can run safely, independently, and be cancelled.</p><p>The main trade-off. The work must be isolated and cancellable because a wrong prediction consumes resources without helping the request.</p><h3>18. Precomputation Pattern</h3><p>Maintaining a tenant aggregate as events arrive can replace repeated foreground computation with a read. Precomputation moves known work from the foreground request to the point where the source data changes.</p><p>When to use. Use precomputation when an expensive result can be refreshed as its source changes rather than calculated for every request.</p><p>The main trade-off. Precomputed results consume storage and refresh capacity, and they may be stale when the source changes faster than they can be updated.</p><h3>19. Prewarming Pattern</h3><p>A small worker pool, connection pool, or execution environment can be initialized before traffic arrives. Prewarming moves predictable setup cost off the foreground critical path.</p><p>When to use. Use prewarming when cold-start or setup cost is predictable and keeping limited capacity ready is affordable.</p><p>The main trade-off. Warm resources consume capacity even when no request uses them.</p><h3>Choosing What to Do Earlier</h3><p>In a traditional application, predictive prefetching prepares a likely read, optimistic updates show likely success before durable completion, and speculative execution starts a likely branch. Precomputation prepares reusable results when source data changes, while prewarming prepares resources before requests arrive. The difference is what is moved earlier: data, feedback, a branch, a result, or capacity.</p><p>In an AI application, start predictable work early. Once the application understands what the user wants, it can fetch likely context and start safe, read-only searches. It can also prepare reusable data such as embeddings, indexes, summaries, and policy information, or keep agent workers and model or tool connections ready to avoid setup delays. If the interface expects a tool action to succeed, show it as pending until it actually completes.</p><p>Measure whether this early work was used, finished in time, and reduced latency. Also track wasted work and actions that had to be reversed. Cancel work when it is no longer needed. If early work consumes enough resources to slow normal requests, it is not an optimization.</p><h1>Find the Bottleneck, Apply the Pattern</h1><p>Do not start by choosing a pattern. Start by tracing the full request and locating where delay enters the critical path: context retrieval, model access, tools, agent coordination, or verification and delivery.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hAgZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hAgZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png 424w, https://substackcdn.com/image/fetch/$s_!hAgZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png 848w, https://substackcdn.com/image/fetch/$s_!hAgZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png 1272w, https://substackcdn.com/image/fetch/$s_!hAgZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hAgZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png" width="1456" height="854" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:854,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:939238,&quot;alt&quot;:&quot;AI application latency matrix mapping four pattern categories across the request path&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/212818125?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AI application latency matrix mapping four pattern categories across the request path" title="AI application latency matrix mapping four pattern categories across the request path" srcset="https://substackcdn.com/image/fetch/$s_!hAgZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png 424w, https://substackcdn.com/image/fetch/$s_!hAgZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png 848w, https://substackcdn.com/image/fetch/$s_!hAgZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png 1272w, https://substackcdn.com/image/fetch/$s_!hAgZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5bce94-942a-4c43-83d3-cddfcc275d91_6480x3800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Read the matrix in two moves. First, choose the column where the delay appears. Then move down that column and select the intervention that matches its cause:</p><ul><li><p><strong>Locality Patterns:</strong> The request, data, or dependency is too far away.</p></li><li><p><strong>Work Reduction Patterns:</strong> The application performs unnecessary computation, data processing, or calls.</p></li><li><p><strong>Concurrent Execution Patterns:</strong> Independent work is waiting in sequence.</p></li><li><p><strong>Anticipation Patterns:</strong> Predictable work remains on the foreground path.</p></li></ul><p>The cells are starting points, not a checklist. Pick the smallest pattern that changes the dominant part of the path. Before applying it, check whether it will amplify the tail or trade away quality, freshness, privacy, cost, or correctness. Then measure the same latency clock at the target percentile together with task success. If the bottleneck moves, return to the matrix.</p><h1>Further reading</h1><p>The following resources cover the main ideas behind this catalogues.</p><p><strong>Measuring the AI application path</strong></p><ul><li><p>OpenTelemetry, <em><a href="https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/README.md">Generative AI semantic conventions</a></em>: shared spans, metrics, and events for models, agents, and MCP.</p></li><li><p>NVIDIA, <em><a href="https://docs.nvidia.com/nim/benchmarking/llm/latest/metrics.html">LLM inference metrics</a></em>: definitions of time to first token, end-to-end request latency, inter-token latency, and throughput.</p></li><li><p>Gil Tene, <em><a href="https://www.infoq.com/presentations/latency-pitfalls/">How NOT to Measure Latency</a></em>: coordinated omission and other measurement errors that can hide real latency.</p></li></ul><p><strong>Fan-out and tail latency</strong></p><ul><li><p>Jeffrey Dean and Luiz Andr&#233; Barroso, <em><a href="https://research.google/pubs/the-tail-at-scale/">The Tail at Scale</a></em>: why rare stragglers become common as requests fan out.</p></li><li><p>Marc Brooker, <em><a href="https://brooker.co.za/blog/2021/10/20/simulation.html">Serial, Parallel, and Quorum Latencies</a></em>: a simulator for understanding how latency composes across dependent and parallel work.</p></li></ul><p><strong>System-level diagnosis</strong></p><ul><li><p>Pekka Enberg, <em><a href="https://link.amazon/B0emb7Jbb">Latency</a></em>: Reduce Delay in Software Systems (highly recommended read and the inspiration for this post)</p></li><li><p>Brendan Gregg, <em><a href="https://link.amazon/B0dJ0Bdkd">Systems Performance: Enterprise and the Cloud, Second Edition</a></em>: a methodology for finding latency outliers across the full stack.</p></li><li><p>Alexey Ivanov, <em><a href="https://dropbox.tech/infrastructure/optimizing-web-servers-for-high-throughput-and-low-latency">Optimizing web servers for high throughput and low latency</a></em>: a production case study from hardware and NUMA to the kernel and application.</p></li></ul><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/p/latency-patterns-for-faster-ai-applications?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading The Generative Programmer! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/p/latency-patterns-for-faster-ai-applications?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://generativeprogrammer.com/p/latency-patterns-for-faster-ai-applications?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Designing Agent Context by Scope and Time]]></title><description><![CDATA[A practical guide to choosing between user prompts, system prompts, scoped instructions, Skills, Tools, Steering, and Delegation.]]></description><link>https://generativeprogrammer.com/p/designing-agent-context-by-scope</link><guid isPermaLink="false">https://generativeprogrammer.com/p/designing-agent-context-by-scope</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 16 Aug 2026 12:23:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!n13D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When an agent performs poorly, we tend to blame the model. The next fix is often to expand the system prompt. When that becomes unwieldy, the following move is to add another agent. All can help, but they skip a more useful design question: <strong>what is the agent missing, and where should that information or control enter the run?</strong></p><p>An agent system has several places to add context and control. Tool definitions advertise available capabilities upfront in the model request. A system prompt establishes the baseline. Project files and path rules add local instructions. A user prompt brings the immediate task. Skills provide procedures when they become relevant. Tool results later return data, errors, or action outcomes. Steering can change an active run, and delegation can move work into a separate context.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n13D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n13D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png 424w, https://substackcdn.com/image/fetch/$s_!n13D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png 848w, https://substackcdn.com/image/fetch/$s_!n13D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png 1272w, https://substackcdn.com/image/fetch/$s_!n13D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n13D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png" width="1456" height="826" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:826,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:555370,&quot;alt&quot;:&quot;Concrete configuration, repository, user, Skill, and runtime sources feed a stable prefix and a growing model-input history over successive calls.&quot;,&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://generativeprogrammer.com/i/211324816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Concrete configuration, repository, user, Skill, and runtime sources feed a stable prefix and a growing model-input history over successive calls." title="Concrete configuration, repository, user, Skill, and runtime sources feed a stable prefix and a growing model-input history over successive calls." srcset="https://substackcdn.com/image/fetch/$s_!n13D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png 424w, https://substackcdn.com/image/fetch/$s_!n13D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png 848w, https://substackcdn.com/image/fetch/$s_!n13D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png 1272w, https://substackcdn.com/image/fetch/$s_!n13D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae68cad9-ff7e-45fd-8377-3f806f76cb5a_7760x4400.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These mechanisms have different scope, timing, and trade-offs. They are not interchangeable ways to stuff more instructions into an agent. The design problem is to put the right information or control at the narrowest useful point, for only as long as it is needed. I will use Claude Code as the running example. Other agent systems expose comparable mechanisms, though their names and behavior vary.</p><p>This diagram separate two clocks. The left side shows when the runtime resolves a source: configuration, files, user input, a Skill, or a result. The right side shows how calls evolve. Eager tool definitions, the system prompt, and root instructions form a stable prefix that is presented on every call and often cached. Conversation, matched instructions, invoked Skills, and results append to growing history, which may later be compacted. Let&#8217;s dive into each one.</p><h2>1. User prompt: tell the agent what matters now</h2><p>The most immediate place to add task-specific context is the user prompt. It is the instruction sent with the current turn and represents what the user wants the agent to care about now.</p><pre><code><code>&gt; Review @docs/chapter.md.
&gt; Focus on the argument and examples. Do not rewrite it yet.</code></code></pre><p>In Claude Code, the message enters the conversation portion of the active context. An <code>@file</code><a href="https://code.claude.com/docs/en/common-workflows#reference-files-and-directories"> reference</a> includes the file contents with that turn, while an attachment serves a similar purpose on surfaces that support it. The prompt identifies the desired outcome, the artifact that matters, and any temporary constraints around the task.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nzsk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nzsk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png 424w, https://substackcdn.com/image/fetch/$s_!Nzsk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png 848w, https://substackcdn.com/image/fetch/$s_!Nzsk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png 1272w, https://substackcdn.com/image/fetch/$s_!Nzsk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nzsk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png" width="1456" height="643" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:643,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:324168,&quot;alt&quot;:&quot;A user message and attachment append to growing history at the first model call and remain available to later calls.&quot;,&quot;title&quot;:&quot;A user message and attachment append to growing history at the first model call and remain available to later calls.&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/211324816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A user message and attachment append to growing history at the first model call and remain available to later calls." title="A user message and attachment append to growing history at the first model call and remain available to later calls." srcset="https://substackcdn.com/image/fetch/$s_!Nzsk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png 424w, https://substackcdn.com/image/fetch/$s_!Nzsk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png 848w, https://substackcdn.com/image/fetch/$s_!Nzsk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png 1272w, https://substackcdn.com/image/fetch/$s_!Nzsk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95fec630-9c0f-4444-bf07-af9f6542383d_7160x3160.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The message can remain until the context is cleared or older history is compacted, so it may influence follow-up turns. Its intended scope is still the current task. The user prompt is therefore the right place for one-off objectives, corrections, output formats, referenced material, and temporary instructions.</p><p><strong>When to use.</strong> Immediate tasks, temporary constraints, conversational corrections, and attached or referenced material.</p><p><strong>The main trade-off.</strong> User prompts are flexible and precise, but repeated guidance depends on the user remembering to supply it consistently.</p><p>If guidance keeps recurring, place it according to scope: in the system baseline if it is universal, in scoped instructions if it is project-local, or in a Skill if it describes a procedure.</p><h2>2. System prompt: establish the standing baseline</h2><p>The system prompt sits at the other end of the persistence spectrum. It is supplied by the host before the user conversation and defines the agent&#8217;s baseline identity, operating rules, tool-use guidance, and constraints that should influence the whole run.</p><p>Claude Code already provides a default system prompt. You can extend it for one invocation without replacing its built-in coding and tool guidance:</p><pre><code><code>claude --append-system-prompt \
  "Separate verified facts from inference. Cite the evidence used."</code></code></pre><p>The <code>--append-system-prompt</code><a href="https://code.claude.com/docs/en/cli-usage#system-prompt-flags"> flag</a> adds that instruction to the system layer for the session. A custom agent application usually configures the same kind of baseline when creating the agent. Some APIs call this a system instruction, but the architectural role is similar.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tHdd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tHdd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png 424w, https://substackcdn.com/image/fetch/$s_!tHdd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png 848w, https://substackcdn.com/image/fetch/$s_!tHdd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png 1272w, https://substackcdn.com/image/fetch/$s_!tHdd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tHdd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png" width="1456" height="689" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:689,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:306540,&quot;alt&quot;:&quot;Agent configuration establishes a stable system prompt that is presented on every model call.&quot;,&quot;title&quot;:&quot;Agent configuration establishes a stable system prompt that is presented on every model call.&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/211324816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Agent configuration establishes a stable system prompt that is presented on every model call." title="Agent configuration establishes a stable system prompt that is presented on every model call." srcset="https://substackcdn.com/image/fetch/$s_!tHdd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png 424w, https://substackcdn.com/image/fetch/$s_!tHdd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png 848w, https://substackcdn.com/image/fetch/$s_!tHdd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png 1272w, https://substackcdn.com/image/fetch/$s_!tHdd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42edf45c-bc11-4f9e-b932-fa4a20713aba_6680x3160.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The temptation is to treat the system prompt as the universal home for anything important. That becomes expensive because every model call carries the instructions whether the task needs them or not. Each addition also competes for limited context and model attention.</p><p>For that reason, this layer should contain things that genuinely apply across the run: identity, broad safety constraints, universal response requirements, and important behavioral defaults. A 60-line production release checklist does not belong here. That checklist may be critical during a release, but every unrelated task would otherwise carry it as well.</p><p><strong>When to use.</strong> Identity, universal priorities, broad safety posture, and rules that should influence nearly every model call.</p><p><strong>The main trade-off.</strong> System instructions are consistently available, but they consume context on every task. As the baseline grows, conflicts become more likely and adherence problems become harder to diagnose.</p><p>Most durable guidance is not actually universal. Repository architecture, build commands, package conventions, and local coding rules matter only when working in a particular project or area. That is where scoped instructions become useful.</p><h2>3. Scoped instructions: load project guidance where it applies</h2><p>Rather than putting all persistent guidance into the system prompt, agent systems can scope instructions to a repository, directory, or file pattern. The guidance stays close to the code it describes and enters context only when that part of the workspace becomes relevant.</p><p><code>CLAUDE.md</code> is Claude Code&#8217;s native project instruction file. <code>AGENTS.md</code> is a portable project instruction format used by compatible coding agents. Claude Code does not read it directly, but a project can import a shared file rather than maintaining duplicate instructions:</p><pre><code><code>@AGENTS.md
## Claude Code additions
Use pnpm, not npm. Run `pnpm test` before finishing.</code></code></pre><p>For more precise targeting, <code>.claude/rules/api.md</code> can add a path selector:</p><pre><code><code>---
paths:
  - "src/api/**/*.ts"
---
Validate every public API input.</code></code></pre><p>See the <a href="https://agents.md/">AGENTS.md specification</a> for the portable file format.</p><p>Claude Code loads <code>CLAUDE.md</code> files from the working directory and its ancestors when the session starts. Nested files below that directory can load when Claude reads files in their subtree. Rules without a <code>paths</code> selector load at launch, while <a href="https://code.claude.com/docs/en/memory#organize-rules-with-clauderules">path-scoped rules</a> become relevant when Claude reads a matching file.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kb7w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kb7w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png 424w, https://substackcdn.com/image/fetch/$s_!kb7w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png 848w, https://substackcdn.com/image/fetch/$s_!kb7w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png 1272w, https://substackcdn.com/image/fetch/$s_!kb7w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kb7w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png" width="1456" height="689" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:689,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:396073,&quot;alt&quot;:&quot;Root project instructions form part of the stable prefix, while nested and path-scoped instructions join history when their scope matches.&quot;,&quot;title&quot;:&quot;Root project instructions form part of the stable prefix, while nested and path-scoped instructions join history when their scope matches.&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/211324816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Root project instructions form part of the stable prefix, while nested and path-scoped instructions join history when their scope matches." title="Root project instructions form part of the stable prefix, while nested and path-scoped instructions join history when their scope matches." srcset="https://substackcdn.com/image/fetch/$s_!kb7w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png 424w, https://substackcdn.com/image/fetch/$s_!kb7w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png 848w, https://substackcdn.com/image/fetch/$s_!kb7w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png 1272w, https://substackcdn.com/image/fetch/$s_!kb7w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f32474-83c5-4e35-940f-c6a9942fd994_6680x3160.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here, the workspace location or matching path determines which guidance applies. We can keep API conventions with API code, migration guidance with migrations, and generated-code rules with the files they govern instead of making every task carry all of them.</p><p>There is also a difference between loading a rule and enforcing one. <code>CLAUDE.md</code>, <code>AGENTS.md</code>, and similar natural-language files provide advisory context to the model. Their loading may be deterministic, but the model can still fail to follow what they say. Permissions and blocking hooks, which we will get to later, provide a stronger runtime boundary.</p><p><strong>When to use.</strong> Project architecture, build commands, team conventions, and guidance that applies only to particular packages, directories, or file types.</p><p><strong>The main trade-off.</strong> Scoping removes irrelevant context, but it also makes the full active instruction set less obvious. Nested files can overlap or conflict, and the model can still fail to follow the guidance.</p><p>Scoped instructions are useful for describing what is true or expected. They are less suitable for a procedure that should run only when a particular kind of work is requested. A release review is a good example: the repository may contain release-related conventions, but there is no reason to load the full release procedure while fixing an unrelated test.</p><p>That is the gap Skills address.</p><h2>4. Skills: load a reusable procedure when needed</h2><p>A Skill packages reusable instructions for performing a recurring task. Instead of copying a procedure into the system prompt, project rules, or every user request, we can keep it separately and make it available when the task requires it. In Claude Code, a project Skill lives in <code>.claude/skills/&lt;name&gt;/SKILL.md</code>.</p><pre><code><code>---
name: release-check
description: Verify release readiness before approving a production release.
---
1. Run the required test suites.
2. Check migrations, monitoring, and rollback readiness.
3. Return a go or no-go recommendation with evidence.</code></code></pre><p>The <a href="https://agentskills.io/specification">Agent Skills specification</a> uses progressive disclosure. Initially, the agent sees only enough metadata, such as the Skill name and description, to understand when the procedure might be useful. When the Skill is selected, the full <code>SKILL.md</code> body enters the active context. Supporting references, templates, assets, and scripts can remain outside the working context until the procedure actually needs them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YK58!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YK58!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png 424w, https://substackcdn.com/image/fetch/$s_!YK58!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png 848w, https://substackcdn.com/image/fetch/$s_!YK58!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png 1272w, https://substackcdn.com/image/fetch/$s_!YK58!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YK58!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png" width="1456" height="689" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:689,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:372623,&quot;alt&quot;:&quot;Skill metadata supports discovery, while the full SKILL.md joins growing history only when selected.&quot;,&quot;title&quot;:&quot;Skill metadata supports discovery, while the full SKILL.md joins growing history only when selected.&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/211324816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Skill metadata supports discovery, while the full SKILL.md joins growing history only when selected." title="Skill metadata supports discovery, while the full SKILL.md joins growing history only when selected." srcset="https://substackcdn.com/image/fetch/$s_!YK58!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png 424w, https://substackcdn.com/image/fetch/$s_!YK58!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png 848w, https://substackcdn.com/image/fetch/$s_!YK58!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png 1272w, https://substackcdn.com/image/fetch/$s_!YK58!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336045a5-c0b9-4b1d-b02e-852f74af2806_6680x3160.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>An agent can therefore access many procedures without loading all their instructions into every request. In <a href="https://code.claude.com/docs/en/skills">Claude Code</a>, Claude may select the Skill from its description, the user can invoke <code>/release-check</code> directly, or a custom subagent can preload it.</p><p>The distinction from scoped instructions is the trigger. A path rule becomes relevant in a matching part of the repository. A Skill becomes relevant because a procedure has been selected for the task. One describes how work should be done in a scope; the other packages a reusable method.</p><p>A Skill is still instructions, not a new capability. In Claude Code, <code>allowed-tools</code> can pre-approve listed tools while the Skill is active, but it does not restrict the other tools the agent can see. Host permissions still apply, and writing &#8220;check the current deployment&#8221; into <code>SKILL.md</code> does not magically give the agent access to the deployment system.</p><p><strong>When to use.</strong> Repeatable, conditional procedures such as releases, incident investigation, migrations, research, or specialized review methods.</p><p><strong>The main trade-off.</strong> Progressive loading keeps the initial context smaller, but it introduces a routing decision. A vague description may prevent the correct Skill from being selected or activate it for the wrong task. Once selected, its instructions also occupy working context.</p><p>This brings us to the next boundary. A procedure can tell an agent that it should verify the production release status, but retrieving that live status requires something more than instructions. It requires a capability.</p><h2>5. Tools: expose a capability and bring back results</h2><p>Tools connect the model to computation, files, APIs, and external systems. A tool definition tells the model what an action is called, what it does, and which arguments it accepts. A simplified Anthropic client-tool definition might look like this:</p><pre><code><code>{
  "name": "release_status",
  "description": "Read the current deployment state for a service.",
  "input_schema": {
    "type": "object",
    "properties": { "service": { "type": "string" } },
    "required": ["service"]
  }
}</code></code></pre><p>Tools contribute to the agent&#8217;s context at two different points. Before the model runs, each tool&#8217;s name, description, and input schema tell it which capabilities exist and how to call them. After a tool is invoked, its result brings new information into the conversation. The definition affects what the model knows it <em>can do</em>, while the result changes what it <em>knows about the world</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zZld!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zZld!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png 424w, https://substackcdn.com/image/fetch/$s_!zZld!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png 848w, https://substackcdn.com/image/fetch/$s_!zZld!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png 1272w, https://substackcdn.com/image/fetch/$s_!zZld!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zZld!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png" width="1456" height="693" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:693,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:371680,&quot;alt&quot;:&quot;Eager tool definitions remain in the stable prefix, while a later invocation returns a result into growing history.&quot;,&quot;title&quot;:&quot;Eager tool definitions remain in the stable prefix, while a later invocation returns a result into growing history.&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/211324816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Eager tool definitions remain in the stable prefix, while a later invocation returns a result into growing history." title="Eager tool definitions remain in the stable prefix, while a later invocation returns a result into growing history." srcset="https://substackcdn.com/image/fetch/$s_!zZld!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png 424w, https://substackcdn.com/image/fetch/$s_!zZld!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png 848w, https://substackcdn.com/image/fetch/$s_!zZld!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png 1272w, https://substackcdn.com/image/fetch/$s_!zZld!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b77aba-898f-427e-8b4f-186174cb1446_6680x3180.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is earlier than the previous diagram implied. For Claude, Anthropic documents the stable request prefix in the order <code>tools</code><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching">, </a><code>system</code><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching">, then </a><code>messages</code>. Other APIs may expose these as sibling request fields, but a tool definition is still part of the input prepared before inference, not something appended after the conversation.</p><p>This matters as the tool catalog grows. A handful of definitions is cheap, but hundreds of schemas can consume a significant part of the starting context before the task begins. The tool list should therefore contain capabilities the agent can realistically need, with concise descriptions and schemas.</p><p><a href="https://modelcontextprotocol.io/docs/getting-started/intro">MCP</a> fits into this layer as the connection mechanism that can expose tools, resources, and prompts. It should not be confused with the procedure for using those capabilities well. A Skill might explain when and how to check release readiness, while an MCP server exposes the deployment system that allows the agent to retrieve the actual release state.</p><p><strong>When to use.</strong> Live data, deterministic computation, external services, and actions with explicit inputs and outputs.</p><p><strong>The main trade-off.</strong> Tools consume upfront context and introduce permissions, latency, schema drift, partial failures, and potentially side effects.</p><p>At this point, the agent has instructions telling it what to do and tools allowing it to act. But giving a model access to an action is different from deciding whether that action should actually be allowed. A release Skill may conclude that a deployment should proceed, for example, but that does not mean an autonomous <code>git push</code> or production deployment should happen without another control point.</p><p>That is where steering enters the loop.</p><h2>6. Steering: intervene while the loop is running</h2><p>The mechanisms so far shape what the model knows, the guidance it receives, and the capabilities it can invoke. Steering acts on live execution. A human can interrupt, a permission rule can require approval, or a hook can inspect a proposed action before it executes.</p><pre><code><code>{
  "permissions": {
    "ask": ["Bash(git push *)"],
    "deny": ["Read(./secrets/**)"]
  }
}</code></code></pre><p>In Claude Code, <a href="https://code.claude.com/docs/en/permissions">permission rules</a> provide allow, ask, and deny gates around tool calls. <code>PreToolUse</code><a href="https://code.claude.com/docs/en/hooks#pretooluse"> hooks</a> can inspect the tool and its arguments, rewrite them, inject context, require approval, or block the call. The hook runs outside the conversation unless it returns guidance to 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_!prYg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!prYg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png 424w, https://substackcdn.com/image/fetch/$s_!prYg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png 848w, https://substackcdn.com/image/fetch/$s_!prYg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png 1272w, https://substackcdn.com/image/fetch/$s_!prYg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!prYg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png" width="1456" height="659" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:659,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:396488,&quot;alt&quot;:&quot;A human, hook, or policy can inject guidance into the next model call or gate an action outside model input.&quot;,&quot;title&quot;:&quot;A human, hook, or policy can inject guidance into the next model call or gate an action outside model input.&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/211324816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A human, hook, or policy can inject guidance into the next model call or gate an action outside model input." title="A human, hook, or policy can inject guidance into the next model call or gate an action outside model input." srcset="https://substackcdn.com/image/fetch/$s_!prYg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png 424w, https://substackcdn.com/image/fetch/$s_!prYg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png 848w, https://substackcdn.com/image/fetch/$s_!prYg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png 1272w, https://substackcdn.com/image/fetch/$s_!prYg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adece55-739f-40f6-8b06-787fb0401f16_7400x3348.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This highlights an important difference between two kinds of &#8220;rules&#8221; that are easy to mix together in agent systems. A natural-language rule in <code>CLAUDE.md</code> tells the model what it <em>should</em> do. A permission rule or blocking hook determines what the runtime <em>will allow</em> it to do. One relies on model behavior, while the other places control around that behavior.</p><p>Not every hook is steering either. A passive hook that records tool calls for audit purposes is instrumentation because it observes the run without changing it. It becomes steering when it can alter the next step, inject corrective information, require approval, or stop an action.</p><p><strong>When to use.</strong> Human approval, action validation, output checks, recovery guidance, and policies that need to react to the current execution state.</p><p><strong>The main trade-off.</strong> Runtime intervention introduces more branches, retries, latency, and state that must be tested. Some hook failures leave the action to normal permissions rather than block it, so security-critical restrictions still need permissions, sandboxing, and least privilege.</p><p>Steering is useful when the current loop is still the right place to perform the work but some of its decisions require control. Sometimes, however, the problem is the loop itself. A security review may require reading dozens of files, running searches, and producing a focused result, while none of that intermediate work needs to occupy the parent&#8217;s context.</p><p>For that kind of work, rather than continuing to enlarge the current context, we can open another one.</p><h2>7. Delegation: open a separate context for the work</h2><p>Delegation gives a bounded task to another agent loop. The worker receives its own instructions and selected context, performs the work separately, and returns a result to the parent. In Claude Code, a custom worker can be defined in <code>.claude/agents/security-reviewer.md</code>:</p><pre><code><code>---
name: security-reviewer
description: Review security-sensitive changes and report evidence.
tools: Read, Grep, Glob
---
Inspect only the area named in the delegated task.
Return concise findings with file references.</code></code></pre><p>The parent can then delegate directly from the conversation:</p><pre><code><code>&gt; Run the security-reviewer and test-runner in parallel.
&gt; Give each the changed files, then combine their findings.
</code></code></pre><p>A non-fork <a href="https://code.claude.com/docs/en/sub-agents">Claude Code subagent</a> starts with a fresh context window. It does not automatically see the parent conversation, previously invoked Skills, or files that the parent has already read. The parent supplies a task message, while the worker adds its own system prompt, applicable project instructions, configured tools, and any preloaded Skills.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2BLE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2BLE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png 424w, https://substackcdn.com/image/fetch/$s_!2BLE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png 848w, https://substackcdn.com/image/fetch/$s_!2BLE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png 1272w, https://substackcdn.com/image/fetch/$s_!2BLE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2BLE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png" width="1456" height="824" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:824,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:483150,&quot;alt&quot;:&quot;A parent sends selected context into separate worker timelines and appends their bounded result to its own history.&quot;,&quot;title&quot;:&quot;A parent sends selected context into separate worker timelines and appends their bounded result to its own history.&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/211324816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A parent sends selected context into separate worker timelines and appends their bounded result to its own history." title="A parent sends selected context into separate worker timelines and appends their bounded result to its own history." srcset="https://substackcdn.com/image/fetch/$s_!2BLE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png 424w, https://substackcdn.com/image/fetch/$s_!2BLE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png 848w, https://substackcdn.com/image/fetch/$s_!2BLE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png 1272w, https://substackcdn.com/image/fetch/$s_!2BLE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0ca419-dc5c-48d6-bc53-050841ef8453_7440x4208.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A security reviewer can search dozens of files, inspect dependencies, and collect evidence without filling the main conversation. The parent receives a bounded result rather than the complete working history. A context-inheriting fork is the exception.</p><p>Several workers can run concurrently for independent work such as security review, test execution, or documentation analysis. Parallelism helps, but context isolation is often more important: specialist work does not consume the context needed for the main task.</p><p>Context isolation should not be confused with filesystem isolation, though. Two workers with separate context windows may still edit the same checkout and overwrite each other&#8217;s changes. <a href="https://code.claude.com/docs/en/worktrees">Separate worktrees</a>, sandboxes, or explicit file ownership are still needed when parallel changes must not collide.</p><p><strong>When to use.</strong> Specialist, high-volume, expensive, or independent work that benefits from a clean context and can return a bounded result.</p><p><strong>The main trade-off.</strong> Delegation adds cost, latency, routing risk, and potentially lossy handoffs. Parallel modification also introduces coordination problems unless the underlying files are isolated.</p><p>Delegation is therefore not simply a way to &#8220;make the agent smarter.&#8221; It is another context-management mechanism. Instead of putting even more information into the current loop, we decide that a piece of work deserves a context of its own and bring back only the result that matters.</p><h2>The takeaway</h2><p>When an agent struggles, first ask when the missing context or control should enter, how far it should reach, and whether the work needs its own context.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oDqa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oDqa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png 424w, https://substackcdn.com/image/fetch/$s_!oDqa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png 848w, https://substackcdn.com/image/fetch/$s_!oDqa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png 1272w, https://substackcdn.com/image/fetch/$s_!oDqa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oDqa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png" width="1456" height="742" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:742,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:101629,&quot;alt&quot;:&quot;A comparison of seven agent mechanisms showing their entry points, scope and lifetime, and main trade-offs.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/211324816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A comparison of seven agent mechanisms showing their entry points, scope and lifetime, and main trade-offs." title="A comparison of seven agent mechanisms showing their entry points, scope and lifetime, and main trade-offs." srcset="https://substackcdn.com/image/fetch/$s_!oDqa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png 424w, https://substackcdn.com/image/fetch/$s_!oDqa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png 848w, https://substackcdn.com/image/fetch/$s_!oDqa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png 1272w, https://substackcdn.com/image/fetch/$s_!oDqa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94c65a6f-8d9e-425f-8dbb-be7014e2e29c_1700x866.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use the narrowest mechanism that introduces what is missing where it becomes relevant. The goal is not more context, but correctly placed context.</p>]]></content:encoded></item><item><title><![CDATA[10 Open-Source Projects for Securing AI Agent Skills]]></title><description><![CDATA[A practical map of scanners, supply-chain controls, sandboxes, and runtime governance.]]></description><link>https://generativeprogrammer.com/p/10-open-source-projects-for-securing</link><guid isPermaLink="false">https://generativeprogrammer.com/p/10-open-source-projects-for-securing</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sat, 08 Aug 2026 08:21:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b9901281-4e48-4099-8795-4ee930ef2164_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In July, <a href="https://huggingface.co/blog/security-incident-july-2026">Hugging Face disclosed an intrusion driven end to end by an autonomous AI agent</a>, starting with a malicious dataset and reaching credential harvesting and lateral movement across internal clusters. <a href="https://arxiv.org/abs/2601.10338">SkillScan researchers</a> analyzed 31,132 public skills and flagged potentially dangerous patterns in 26.1%, while 5.2% showed high-severity patterns strongly suggesting malicious intent. Days later, <a href="https://blogs.nvidia.com/blog/open-secure-ai-alliance/">NVIDIA and founding members launched the Open Secure AI Alliance</a> to build and share open technologies for safeguarding software and agents; here are ten open-source projects already working across that emerging stack.</p><h2>The emerging skill-security stack</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t94T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t94T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png 424w, https://substackcdn.com/image/fetch/$s_!t94T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png 848w, https://substackcdn.com/image/fetch/$s_!t94T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png 1272w, https://substackcdn.com/image/fetch/$s_!t94T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t94T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png" width="728" height="207" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:414,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:360425,&quot;alt&quot;:&quot;Five-phase map showing where ten open-source agent security projects fit before deployment and during execution.&quot;,&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://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="Five-phase map showing where ten open-source agent security projects fit before deployment and during execution." title="Five-phase map showing where ten open-source agent security projects fit before deployment and during execution." srcset="https://substackcdn.com/image/fetch/$s_!t94T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png 424w, https://substackcdn.com/image/fetch/$s_!t94T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png 848w, https://substackcdn.com/image/fetch/$s_!t94T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png 1272w, https://substackcdn.com/image/fetch/$s_!t94T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62b6579-1633-4b0c-bfb0-969b84f02a3a_7600x2160.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>If you only want the shortlist rather than the full walkthrough, here are the ten projects:</p><ol><li><p><a href="https://github.com/NVIDIA/SkillSpector">NVIDIA SkillSpector</a>: Scans skills before installation with deterministic checks, dependency analysis, and optional semantic review.</p></li><li><p><a href="https://github.com/cisco-ai-defense/skill-scanner">Cisco AI Defense Skill Scanner</a>: Performs multi-engine static analysis with rules, YARA, AST, taint tracking, and policy gates.</p></li><li><p><a href="https://github.com/Fangcun-AI/SkillWard">SkillWard</a>: Escalates suspicious skills from static scanning to semantic review and sandboxed execution.</p></li><li><p><a href="https://github.com/HeadyZhang/agent-audit">Agent Audit</a>: Scans full agent repositories for risky data flows, secrets, MCP configuration, and excessive privileges.</p></li><li><p><a href="https://github.com/affaan-m/agentshield">AgentShield</a>: Audits active agent configuration, hooks, permissions, secrets, and runtime policy.</p></li><li><p><a href="https://github.com/microsoft/apm">Microsoft Agent Package Manager</a>: Controls installation of agent assets through manifests, policy, lockfiles, integrity checks, and SBOMs.</p></li><li><p><a href="https://github.com/NVIDIA/skills">NVIDIA Verified Agent Skills</a>: Offers evaluated and signed skills with provenance, verification evidence, and tamper detection.</p></li><li><p><a href="https://github.com/NVIDIA/OpenShell">NVIDIA OpenShell</a>: Runs agents in policy-controlled sandboxes that restrict files, processes, network access, and inference.</p></li><li><p><a href="https://github.com/kubernetes-sigs/agent-sandbox">Kubernetes Agent Sandbox</a>: Provides Kubernetes APIs and controllers for isolated, stateful agent workspaces.</p></li><li><p><a href="https://github.com/microsoft/agent-governance-toolkit">Microsoft Agent Governance Toolkit</a>: Adds deterministic policy, approvals, and audit logging around consequential agent actions.</p></li></ol><p>The map shows each project&#8217;s primary control point. Each project section below explains what it does, how it works, who it is for, and where its boundary ends.</p><h2>1. <a href="https://github.com/NVIDIA/SkillSpector">NVIDIA SkillSpector</a>: a pre-install scanner for skills</h2><p>SkillSpector answers the first question most users have when they find a new skill: <strong>is this safe enough to install?</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AkYq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AkYq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!AkYq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!AkYq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!AkYq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AkYq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:733955,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!AkYq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!AkYq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!AkYq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!AkYq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b267d77-193a-41ef-b84d-fbdc1db49cf8_7360x3848.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What it does.</strong> It scans a local file or directory, Git repository, URL, or ZIP and returns a risk score from 0 to 100, severity, recommendation, and findings. Its MCP wrapper also returns a <code>safe_to_install</code> signal. Reports can be written for humans or automation, including JSON, Markdown, and SARIF.</p><p><strong>How it works.</strong> A source loader inventories the artifact, then deterministic checks inspect 68 patterns across 17 categories. Dependency findings use live OSV data when reachable and fall back to bundled data when it is not. An optional LLM pass adds semantic review before the findings are merged into an install recommendation. <code>skillspector scan ./my-skill --no-llm</code> needs no model key, although dependency coordinates may still be sent to OSV.</p><p><strong>Best for.</strong> Individual developers, catalog maintainers, and CI pipelines that want a quick admission check with a clear decision at the end.</p><p><strong>Boundary.</strong> SkillSpector does not execute the skill. Static and semantic inspection can identify suspicious intent and known patterns, but it cannot prove what a skill will do in a live environment.</p><h2>2. <a href="https://github.com/cisco-ai-defense/skill-scanner">Cisco AI Defense Skill Scanner</a>: deeper multi-engine static analysis</h2><p>Cisco AI Defense Skill Scanner is also a pre-install scanner, but it emphasizes a collection of specialized analysis engines and configurable security policy.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-RqD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-RqD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!-RqD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!-RqD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!-RqD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-RqD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:778669,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!-RqD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!-RqD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!-RqD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!-RqD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80598a80-4406-4829-97e7-e330612f6e83_7360x3848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What it does.</strong> It scans a skill directory for malicious instructions, suspicious code, vulnerable execution paths, and behavioral risks, then produces console, JSON, Markdown, HTML, table, or SARIF output. A strict, balanced, or permissive scan policy tunes detection, while a separate severity threshold turns the result into a CI decision.</p><p><strong>How it works.</strong> The default core combines YAML signatures and YARA rules, Python bytecode integrity checks, and shell-pipeline taint analysis. Optional local analyzers add Python AST and dataflow, trigger checks, and OSV lookups. Optional model and service analyzers add LLM review, meta-analysis, VirusTotal, or Cisco AI Defense. A strict high-severity CI gate is <code>skill-scanner scan ./skill --policy strict --fail-on-severity high</code>.</p><p><strong>Best for.</strong> AppSec and platform teams that want explainable, CI-oriented checks and more language-aware analysis than a simple pattern scan.</p><p><strong>Boundary.</strong> The core path is static: it inspects what could happen but does not run the skill. Some optional enrichments use external services and therefore do not belong in a strictly offline setup.</p><h2>3. <a href="https://github.com/Fangcun-AI/SkillWard">SkillWard</a>: escalate suspicious skills into a sandbox</h2><p>SkillWard treats skill analysis as an escalation pipeline. Cheap checks run first; uncertain cases can progress all the way to controlled execution.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Swmo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Swmo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png 424w, https://substackcdn.com/image/fetch/$s_!Swmo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png 848w, https://substackcdn.com/image/fetch/$s_!Swmo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!Swmo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Swmo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png" width="1456" height="753" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:753,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:903391,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Swmo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png 424w, https://substackcdn.com/image/fetch/$s_!Swmo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png 848w, https://substackcdn.com/image/fetch/$s_!Swmo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!Swmo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67897a3e-7078-4663-9bf4-d3de7a20e986_7440x3848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What it does.</strong> It produces a behavioral verdict and evidence for a skill, including actions that are only visible when the skill is actually invoked.</p><p><strong>How it works.</strong> Stage A uses YARA, regular expressions, and static inspection. Stage B asks a model to classify intent and escalates uncertain cases. Stage C launches the skill with an in-container agent inside Docker. A guard inspects tool calls and file content for evidence such as network access, sensitive writes, credential access, and exfiltration, while decoys make malicious behavior easier to expose. The semantic stage can use a locally hosted model.</p><p><strong>Best for.</strong> Security researchers, reviewers, and higher-assurance catalogs investigating a suspicious or ambiguous skill after static scanning.</p><p><strong>Boundary.</strong> Dynamic evidence is stronger, but it is also slower and depends on the test scenario reaching the malicious branch. &#8220;Nothing happened in this run&#8221; is not proof of safety.</p><h2>4. <a href="https://github.com/HeadyZhang/agent-audit">Agent Audit</a>: scan the whole agent repository</h2><p>Agent Audit broadens the target beyond a packaged skill. It looks for security problems across the surrounding agent application.]</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!egy0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!egy0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!egy0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!egy0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!egy0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!egy0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:737416,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!egy0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!egy0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!egy0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!egy0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b1737e-d16a-4748-82e0-5e71c2dd1d85_7360x3848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What it does.</strong> It finds dangerous operations, untrusted-data flows into sensitive tools, exposed secrets, risky MCP configuration, skill and package risks, and excessive privileges. Its deepest AST and taint analysis is for Python, while the current scanner also covers TypeScript and JavaScript, Go, Solidity, <code>SKILL.md</code>, and configuration files. Results can fail a build and can be exported as SARIF.</p><p><strong>How it works.</strong> Repository discovery feeds several analyzers: a Python AST scanner, intra-procedural source-to-sink taint tracker, tool-boundary analyzer, three-stage secret scanner, MCP configuration scanner, privilege scanner, and a shared rule engine. The current project documents 72 rules. A typical static gate is <code>agent-audit scan . --fail-on high</code>; an optional dynamic mode can connect to MCP servers for read-only inspection.</p><p><strong>Best for.</strong> Developers and AppSec teams reviewing an agent as an application, especially Python-based projects with tools and MCP servers.</p><p><strong>Boundary.</strong> The default scan is static and does not run the agent application. Optional MCP inspection expands discovery, but the project is not a runtime monitor or execution sandbox.</p><h2>5. <a href="https://github.com/affaan-m/agentshield">AgentShield</a>: audit what is active on a developer machine</h2><p>AgentShield shifts the target again, from a single downloaded artifact to the agent configuration already present in a project or user environment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8i1f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8i1f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!8i1f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!8i1f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!8i1f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8i1f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:791885,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!8i1f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!8i1f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!8i1f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!8i1f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3072fed7-e977-4892-b5c8-6e58b9dc99ee_7360x3848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What it does.</strong> Its default mode discovers agent-related files and checks secrets, permissions, hooks, MCP configuration, and agent settings against 102 static rules in five categories. It can also execute hooks in a controlled temporary directory, run active injection tests, watch configuration changes, and install a <code>PreToolUse</code> policy hook.</p><p><strong>How it works.</strong> The default invocation selects one root: a local <code>.claude</code> directory, otherwise the home <code>.claude</code> directory, otherwise the current directory. Discovery classifies findings by <code>runtimeConfidence</code>, separating active runtime and project-local material from examples, documentation, plugins, and hooks. <code>npx ecc-agentshield scan</code> runs the static checks; optional modes add model review, hook execution, continuous watch, or runtime allow and block decisions.</p><p><strong>Best for.</strong> Developers, endpoint-security teams, and CI jobs that need to understand the effective agent attack surface of an environment.</p><p><strong>Boundary.</strong> The default scan is a posture snapshot. Its optional watch and <code>PreToolUse</code> modes expand the boundary, but the hook sandbox is a host child process with a temporary working directory, not a hard operating-system or network boundary.</p><h2>6. <a href="https://github.com/microsoft/apm">Microsoft Agent Package Manager</a>: govern what gets installed</h2><p>Microsoft Agent Package Manager, or APM, treats prompts, skills, MCP servers, and other agent assets as a dependency graph rather than files copied by hand.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xl7L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xl7L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!xl7L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!xl7L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!xl7L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xl7L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:762977,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!xl7L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!xl7L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!xl7L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!xl7L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe422fc-81c1-4a32-8549-4d7d07cdea47_7360x3848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What it does.</strong> It resolves declared agent dependencies, applies installation policy, deploys approved assets to a target harness, records exact versions and integrity data, and can export a CycloneDX or SPDX SBOM from the lockfile.</p><p><strong>How it works.</strong> <code>apm.yml</code> declares the package graph and <code>apm-policy.yml</code> defines admission rules. During <code>apm install</code>, the resolver fetches dependencies into a cache, scans for hidden Unicode, requires explicit trust for transitive MCP server declarations, checks policy and integrity, deploys approved assets, and writes <code>apm.lock.yaml</code>. Later, <code>apm audit</code> verifies the declared, locked, and deployed state and replays a scratch install to detect drift. <code>apm lock export</code> produces the SBOM separately.</p><p><strong>Best for.</strong> Platform teams that want repeatable, reviewable distribution of agent assets across developers and CI environments.</p><p><strong>Boundary.</strong> APM governs <strong>what gets installed</strong>. It does not execute downloaded package code by default, but explicit lifecycle scripts and experimental canvas extensions are execution exceptions. The agent harness still governs <strong>what runs</strong>, so installation control must be paired with runtime policy or isolation.</p><h2>7. <a href="https://github.com/NVIDIA/skills">NVIDIA Verified Agent Skills</a>: signed provenance plus evaluation evidence</h2><p>NVIDIA&#8217;s verified agent-skills catalog is less a scanner than a trust and distribution pattern for published skills.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3ePz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3ePz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!3ePz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!3ePz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!3ePz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3ePz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/caa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:789080,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!3ePz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!3ePz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!3ePz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!3ePz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa8aa37-cb9a-4613-8252-01a70d371b71_7360x3848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What it does.</strong> It gives consumers a curated catalog in which each accepted skill carries a skill specification, skill card, evaluation evidence, security review, and a detached signature that can be verified before installation.</p><p><strong>How it works.</strong> An upstream release pipeline evaluates the skill, runs SkillSpector review, resolves findings, and signs the approved artifact. The catalog&#8217;s hourly mirror checks required artifacts, signature state, and source or signature drift; it does not rerun the evaluation, and <code>BENCHMARK.md</code> is commonly published rather than required by the catalog gate. Consumers separately verify the directory against NVIDIA&#8217;s root certificate, then install it.</p><p><strong>Best for.</strong> Skill publishers, catalog operators, and organizations that need provenance and tamper detection, not just a point-in-time vulnerability scan.</p><p><strong>Boundary.</strong> A valid signature proves origin and integrity, not harmlessness. The catalog&#8217;s review raises confidence, but runtime controls are still needed after a verified skill starts acting.</p><h2>8. <a href="https://github.com/NVIDIA/OpenShell">NVIDIA OpenShell</a>: contain the running agent</h2><p>NVIDIA OpenShell moves the control point from artifact inspection to execution. It assumes agent code and skills may be untrusted and gives them a constrained place to run.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IfpJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IfpJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!IfpJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!IfpJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!IfpJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IfpJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:832638,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!IfpJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!IfpJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!IfpJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!IfpJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe661ff0e-d132-4a71-b596-8adf93448c9a_7360x3848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What it does.</strong> It isolates an agent in a sandbox and enforces policy over filesystem access, processes, network connections, and model inference. Denied operations are stopped at the boundary rather than merely reported afterward.</p><p><strong>How it works.</strong> The OpenShell Gateway stores desired state and asks a compute driver to provision the sandbox. Inside that sandbox, a Supervisor launches the restricted process. Filesystem and process controls are enforced locally, ordinary egress passes through a local policy proxy and OPA, and model traffic passes through an inference router. Docker and Podman are local options, the VM path is experimental, and Kubernetes is the cluster driver. On Kubernetes, that driver creates a Sandbox resource for the separate Agent Sandbox controller to reconcile into a Pod. The commands <code>openshell sandbox create -- claude</code> and <code>openshell policy set demo --policy policy.yaml --wait</code> are valid, but only network and inference policy are hot reloadable.</p><p><strong>Best for.</strong> Platform and infrastructure teams running coding agents or other tool-using agents that need OS-level containment.</p><p><strong>Boundary.</strong> OpenShell limits the blast radius of execution; it does not certify that the skill source is safe or decide whether the business intent of an allowed action is appropriate.</p><h2>9. <a href="https://github.com/kubernetes-sigs/agent-sandbox">Kubernetes Agent Sandbox</a>: provision isolated agent workspaces on Kubernetes</h2><p>Kubernetes Agent Sandbox is the project that is easy to confuse with OpenShell. It is developed under Kubernetes SIG Apps rather than being a separate CNCF-hosted project. Kubernetes itself is a CNCF graduated project.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2mAl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2mAl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!2mAl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!2mAl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!2mAl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2mAl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:770501,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!2mAl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png 424w, https://substackcdn.com/image/fetch/$s_!2mAl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png 848w, https://substackcdn.com/image/fetch/$s_!2mAl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!2mAl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F261be0fa-ccfc-4cf7-9624-c323bb9a6541_7360x3848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What it does.</strong> It provides a standardized Kubernetes API for isolated, stateful, singleton workloads, the shape needed by long-running coding agents and other autonomous runtimes. A sandbox can keep a stable identity and persistent storage, then be suspended, resumed, or replaced without treating it like a replicated web service.</p><p><strong>How it works.</strong> The core <code>Sandbox</code> CRD and controller reconcile a Pod and its lifecycle, with a conditional headless Service and optional PVCs. Extension CRDs add reusable <code>SandboxTemplate</code> definitions, <code>SandboxWarmPool</code> capacity, and <code>SandboxClaim</code> allocation. A claim can request a warm pool, the pool references a template, and the controllers allocate or adopt a Sandbox. A template can add a managed NetworkPolicy and select a stronger <code>RuntimeClass</code>, including gVisor or Kata Containers. The <a href="https://kubernetes.io/blog/2026/03/20/running-agents-on-kubernetes-with-agent-sandbox/">Kubernetes introduction</a> explains the broader model.</p><p>Google Cloud has also introduced <a href="https://cloud.google.com/blog/products/containers-kubernetes/bringing-you-agent-sandbox-on-gke-and-agent-substrate">Agent Substrate</a>, an adjacent open-source project that pairs sandbox and snapshot capabilities with a specialized control plane for denser agent execution on Kubernetes. It maps many stateful actors onto fewer ready worker Pods, then suspends, resumes, and routes them on demand. The <a href="https://github.com/agent-substrate/substrate">repository</a> is still early and not production ready, and its threat model says security hardening is minimal, so treat it as a scalability substrate rather than an additional security control.</p><p><strong>Best for.</strong> Platform teams building a multi-tenant Kubernetes substrate for agent runtimes, especially when they need stable workspaces, warm starts, persistent state, and a common API that several agent platforms can consume.</p><p><strong>Boundary.</strong> Agent Sandbox provisions and manages the workload boundary; it is not an agent-aware security policy engine. The actual strength of isolation depends on the selected runtime, network policy, credentials, and cluster configuration. OpenShell can sit above it to add filesystem, process, egress, inference, and credential policy.</p><h2>10. <a href="https://github.com/microsoft/agent-governance-toolkit">Microsoft Agent Governance Toolkit</a>: policy-gate every action</h2><p>Microsoft Agent Governance Toolkit, or AGT, focuses on the semantic action an agent is about to take: send an email, query data, call a tool, or delegate to another agent.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bhip!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bhip!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png 424w, https://substackcdn.com/image/fetch/$s_!bhip!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png 848w, https://substackcdn.com/image/fetch/$s_!bhip!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!bhip!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bhip!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png" width="1456" height="770" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:770,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:780758,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!bhip!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png 424w, https://substackcdn.com/image/fetch/$s_!bhip!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png 848w, https://substackcdn.com/image/fetch/$s_!bhip!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png 1272w, https://substackcdn.com/image/fetch/$s_!bhip!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05442cf3-5c24-4d1e-a65a-e51af2501a6a_7280x3848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What it does.</strong> It wraps selected callables and configured framework intervention points, evaluates deterministic policy, can require human approval, and records an audit decision. A denied wrapped call never reaches the underlying tool.</p><p><strong>How it works.</strong> A developer wraps a function with <code>govern(my_tool, policy="policy.yaml")</code>, which returns a <code>GovernedCallable</code>. Each wrapped invocation builds governance context, runs the YAML <code>PolicyEngine</code> with deny-overrides behavior, optionally requests approval, and writes to a Merkle-chained audit log. The broader toolkit separately offers Agent Control Specification support, OPA and Cedar backends, identity and trust, framework adapters, sandboxing, MCP security, compliance, and SRE modules.</p><p><strong>Best for.</strong> Application, security, and compliance teams that need explainable authorization for every consequential agent action.</p><p><strong>Boundary.</strong> The basic middleware and the agent share a process boundary, and the default audit log is in memory unless an external sink is configured. Microsoft&#8217;s own guidance recommends container isolation for stronger protection; the policy gate should not be mistaken for the operating-system boundary provided by OpenShell.</p><h2>Where the projects overlap and where they do not</h2><p>The first five projects all <strong>find risk</strong>, but their inspection targets are different. SkillSpector and Cisco Skill Scanner focus most directly on a skill artifact. SkillWard adds controlled execution. Agent Audit follows dangerous flows through the wider agent codebase. AgentShield inventories the configuration that is active in an environment.</p><p>APM and NVIDIA Verified Agent Skills operate on the <strong>software-supply-chain problem</strong>. APM makes installation deterministic and policy-controlled; NVIDIA&#8217;s catalog adds publication requirements, evaluation evidence, and signed provenance. Neither replaces source analysis or runtime containment.</p><p>The final three control points <strong>intervene while an agent is operating</strong>, but at different boundaries. AGT authorizes the agent&#8217;s intended action. OpenShell constrains what the process can actually do at the operating-system and network boundary. Kubernetes Agent Sandbox provisions and manages the underlying stateful workload when that process runs on Kubernetes.</p><p>That produces a useful three-line mental model:</p><ul><li><p><strong>Intent:</strong> Is this requested action allowed for this agent? AGT answers that question.</p></li><li><p><strong>Capability:</strong> Can this process reach the resource at all? OpenShell enforces that boundary.</p></li><li><p><strong>Substrate:</strong> Where does the isolated stateful workload run? Agent Sandbox provides that lifecycle.</p></li></ul><h2>Comparison at a glance</h2><p>The table condenses the primary target, mechanism, effect, and GitHub stars for all ten projects.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FmvW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FmvW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png 424w, https://substackcdn.com/image/fetch/$s_!FmvW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png 848w, https://substackcdn.com/image/fetch/$s_!FmvW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png 1272w, https://substackcdn.com/image/fetch/$s_!FmvW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FmvW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png" width="1456" height="1355" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1355,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:281715,&quot;alt&quot;:&quot;Ten open-source agent security projects compared by target, timing, mechanism, effect, approximate GitHub stars, and license.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206817255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Ten open-source agent security projects compared by target, timing, mechanism, effect, approximate GitHub stars, and license." title="Ten open-source agent security projects compared by target, timing, mechanism, effect, approximate GitHub stars, and license." srcset="https://substackcdn.com/image/fetch/$s_!FmvW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png 424w, https://substackcdn.com/image/fetch/$s_!FmvW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png 848w, https://substackcdn.com/image/fetch/$s_!FmvW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png 1272w, https://substackcdn.com/image/fetch/$s_!FmvW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd938337-7aa6-4e1e-af4f-d0edbad1cd82_1700x1582.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For an organization adopting third-party skills, I would start with four layers:</p><ol><li><p><strong>Scan before trust.</strong> Run SkillSpector or Cisco Skill Scanner on every incoming skill; escalate ambiguous, high-risk artifacts to SkillWard.</p></li><li><p><strong>Control distribution.</strong> Use APM-style manifests, policies, lockfiles, and SBOMs; verify signatures when a curated catalog provides them.</p></li><li><p><strong>Authorize actions.</strong> Put deterministic policy and audit around consequential tool calls with AGT or an equivalent middleware gate.</p></li><li><p><strong>Contain execution.</strong> Run the agent inside an OpenShell-style sandbox, and use Agent Sandbox as the Kubernetes substrate when the workload needs cluster-native lifecycle and isolation.</p></li></ol><p>No single project spans the entire lifecycle yet. That is not a weakness in the ecosystem; it is the shape of defense in depth. The important step is to stop treating a skill as &#8220;just a Markdown file.&#8221; It is a supply-chain artifact that can steer a privileged, autonomous runtime.</p>]]></content:encoded></item><item><title><![CDATA[Emerging Markdown Formats That Shape Coding Agent Behavior]]></title><description><![CDATA[A practical map of the rules, procedures, plans, domain knowledge, and memory that guide agent-assisted software changes.]]></description><link>https://generativeprogrammer.com/p/emerging-markdown-formats-that-shape</link><guid isPermaLink="false">https://generativeprogrammer.com/p/emerging-markdown-formats-that-shape</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sat, 01 Aug 2026 11:41:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9qxG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For years, the knowledge required to change software lived in many places. Non-functional requirements (NFRs), architectural constraints, and design decisions were captured in solution architecture documents, ADRs, security reviews, and wikis. Product intent lived in design documents and mockups. Work was broken down into tickets. Operational lessons survived in incident reports, Slack threads, playbooks, and the heads of experienced developers.</p><p>The repository contained the implementation: source code, tests, configuration, and dependency manifests. Developers read across the surrounding artifacts, reconciled the desired outcome with architectural judgment, and translated both into code.</p><p>As AI-assisted coding becomes normal, the repository is becoming the meeting point between that project knowledge and the agent changing the software. A monorepo brings codebases and their dependency graph together. An agent-ready repository also brings in the knowledge required to change them correctly.</p><p>Software has always been understood through different lenses: principles and NFRs, architecture and design, concrete specifications, implementation plans, domain rules, and lessons learned during operation. A growing family of Markdown files now captures these dimensions in forms that coding agents can discover and use. This article looks at the formats and tools that are emerging. Together, they let an agent act as an intent compiler, translating human intent and judgment into source code.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9qxG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9qxG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png 424w, https://substackcdn.com/image/fetch/$s_!9qxG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png 848w, https://substackcdn.com/image/fetch/$s_!9qxG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png 1272w, https://substackcdn.com/image/fetch/$s_!9qxG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9qxG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png" width="1456" height="797" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f720c0d-3430-46e0-827e-587872f51833_1700x930.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:797,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:181705,&quot;alt&quot;:&quot;Project knowledge moves from scattered systems into an agent-ready repository guided by Markdown formats&quot;,&quot;title&quot;:&quot;Project knowledge moves from scattered systems into an agent-ready repository guided by Markdown formats&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/209143759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Project knowledge moves from scattered systems into an agent-ready repository guided by Markdown formats" title="Project knowledge moves from scattered systems into an agent-ready repository guided by Markdown formats" srcset="https://substackcdn.com/image/fetch/$s_!9qxG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png 424w, https://substackcdn.com/image/fetch/$s_!9qxG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png 848w, https://substackcdn.com/image/fetch/$s_!9qxG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png 1272w, https://substackcdn.com/image/fetch/$s_!9qxG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f720c0d-3430-46e0-827e-587872f51833_1700x930.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Agent onboarding starts with a README for agents</h2><p>A human onboards to a project once. An agent effectively onboards every time it starts a task. It needs to orient itself in the repository, discover the relevant commands and conventions, and understand the rules that apply before it changes anything.</p><p><a href="https://agents.md/">AGENTS.md</a> is the closest thing to a neutral standard for this purpose. The project describes it as a README for agents. A root file can explain the repository structure, build commands, tests, coding conventions, and pull request expectations. Nested files can add instructions for a package or subsystem. The format deliberately has no required fields.</p><p>The ecosystem also has vendor-native alternatives that serve the same purpose:</p><ul><li><p><a href="https://agents.md/">AGENTS.md</a> provides cross-tool project guidance for Codex, Cursor, Cline, Copilot, OpenCode, and other compatible agents.</p></li><li><p><a href="https://code.claude.com/docs/en/memory">CLAUDE.md and .claude/rules/</a> provide standing and path-scoped guidance for Claude Code.</p></li><li><p><a href="https://geminicli.com/docs/cli/gemini-md/">GEMINI.md</a> provides hierarchical context for Gemini CLI.</p></li><li><p><a href="https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions">.github/copilot-instructions.md and path-specific instruction files</a> guide GitHub Copilot.</p></li><li><p><a href="https://docs.cline.bot/customization/cline-rules">.clinerules/</a> carries persistent and conditional rules for Cline.</p></li></ul><p>Use <code>pnpm</code>, not <code>npm</code>. Do not edit generated clients. Run the billing integration tests after changing an invoice flow. Read the relevant ADR before moving a service boundary. These are standing instructions that should remain true across many tasks.</p><p>Once the agent understands the repository, the next question is how to perform a particular kind of work.</p><h2>Skills package repeatable procedures</h2><p>A skill is a playbook tailored to a particular kind of work.</p><p>Consider a database migration. <code>AGENTS.md</code> might state that every schema change needs a rollback path. A migration skill can describe the complete procedure: inspect the current schema, create the migration, update generated types, run compatibility checks, verify the rollback, and prepare the review summary.</p><p>The open <a href="https://agentskills.io/specification">Agent Skills specification</a> gives that playbook a portable package. Each skill has a required <code>SKILL.md</code> containing metadata and instructions. It may also include scripts, references, templates, and other assets. Agents initially see the metadata, load the full instructions when the skill is relevant, then access supporting material as needed.</p><p>Agent Skills <a href="https://agentskills.io/home">originated at Anthropic</a> and were released as an open standard. They are separate from MCP, which Anthropic contributed to the <a href="https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation">Agentic AI Foundation</a>. The skill format is now documented by <a href="https://developers.openai.com/codex/skills/">Codex</a>, <a href="https://geminicli.com/docs/cli/creating-skills/">Gemini CLI</a>, <a href="https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/add-skills">GitHub Copilot</a>, and other compatible clients.</p><p>The boundary is concrete:</p><ul><li><p><code>AGENTS.md</code> and native rule files describe standing context and constraints.</p></li><li><p><code>SKILL.md</code> describes a repeatable procedure invoked for a specific task.</p></li></ul><p>A procedure explains how to work. It still needs a reviewed description of what should be built.</p><h2>Planning files make software design reviewable</h2><p>Software design, planning, and task breakdown are also moving into versioned Markdown. When they exist only in chat, they disappear into session history. When they become repository artifacts, architects and developers can review them before an agent turns them into implementation.</p><p><a href="https://github.github.com/spec-kit/index.html">GitHub Spec Kit</a> is the clearest mainstream example. Its documentation reports more than 121,000 GitHub stars and 35 coding-agent integrations. Its default workflow uses a chain of files:</p><ol><li><p><code>spec.md</code> records the requirements and desired outcome.</p></li><li><p><code>plan.md</code> explains the technical design and implementation approach.</p></li><li><p><code>tasks.md</code> breaks the plan into executable units.</p></li><li><p>The agent implements and validates the change.</p></li></ol><p>A project constitution can carry principles that should apply across many changes.</p><p>Spec Kit is not the only approach. <a href="https://github.com/Fission-AI/OpenSpec">OpenSpec</a>, <a href="https://kiro.dev/docs/specs/quick-spec/">Kiro Specs</a>, and project-specific <a href="https://developers.openai.com/cookbook/articles/codex_exec_plans">PLANS.md</a> use different files and workflows. They are nevertheless converging on a recognizable sequence: requirements, design, plan, tasks, implementation, and validation become separate artifacts that humans can review and agents can follow.</p><p>These files describe a generic software development lifecycle. Applications also need instructions for their particular domain.</p><h2>Domain files give agents specialized context</h2><p>A frontend, an identity platform, and a data pipeline do not need the same context. Domain files give agents specialized instructions for the parts of a system that generic onboarding, skills, and plans cannot fully describe.</p><ul><li><p><code>ARCHITECTURE.md</code> can describe system boundaries, components, dependencies, NFRs, and long-lived architectural decisions. It is an established human documentation convention that becomes operational for agents when project instructions tell them when to read it.</p></li><li><p>Google Labs&#8217; <a href="https://github.com/google-labs-code/design.md">DESIGN.md</a> describes visual identity, design tokens, components, and design rationale. The project currently labels the format alpha.</p></li><li><p>WorkOS&#8217; <a href="https://github.com/workos/auth.md">AUTH.md</a> is an experimental, service-hosted recipe that teaches agents how to register and authenticate on behalf of users.</p></li><li><p>Kilo&#8217;s <a href="https://kilo.ai/docs/automate/code-reviews/overview">REVIEW.md</a> lets a repository define review priorities, severity, skipped files, verification expectations, and how a review agent should divide work.</p></li></ul><p>These formats have different maturity levels and scopes. <code>ARCHITECTURE.md</code> is a long-standing documentation convention. <code>DESIGN.md</code>, <code>AUTH.md</code>, and <code>REVIEW.md</code> are emerging, domain-specific experiments. Their common direction is clear: more specialized engineering knowledge is becoming directly legible to agents.</p><p>Some of that knowledge is designed in advance. Other knowledge emerges only while the software is being built and operated.</p><h2>Memory makes learned context durable</h2><p>An unexpected build prerequisite, a debugging pattern, or the reason a deployment failed might previously have ended up in a ticket comment, commit message, Slack thread, incident report, or SRE playbook. Those records range from ephemeral to durable, but a coding agent may not find the relevant lesson when it begins the next task.</p><p>Agent memory keeps learned context associated with a repository and available across sessions. Claude Code makes the authorship distinction unusually clear:</p><ul><li><p>Humans write <code>CLAUDE.md</code> to provide shared instructions, conventions, and project context.</p></li><li><p>Claude writes auto memory into a <code>MEMORY.md</code> index and optional topic files such as <code>debugging.md</code> and <code>api-conventions.md</code>.</p></li></ul><p>The auto memory is repository-specific but machine-local. Claude normally stores it outside the Git repository, and it is not automatically shared with the team. <a href="https://code.claude.com/docs/en/memory">Anthropic documents the two mechanisms separately</a>.</p><p>Memory therefore does not replace tickets, commit history, or operational documentation. It reduces repeated rediscovery. When a learned fact becomes important to the whole team, it needs a promotion path:</p><ol><li><p>The agent records a tentative observation in local memory.</p></li><li><p>A human reviews it when the observation recurs or affects shared work.</p></li><li><p>Durable knowledge moves beside the source code into a project rule, skill, ADR, or domain document.</p></li></ol><p>Tentative knowledge stays local. Reviewed knowledge becomes shared. Kilo is experimenting with a similar loop for review: it can <a href="https://blog.kilo.ai/p/code-reviews-md">analyze how a team responds to review comments and propose changes</a> to the repository&#8217;s review guidance.</p><h2>Putting the Markdown files together</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bvTU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bvTU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png 424w, https://substackcdn.com/image/fetch/$s_!bvTU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png 848w, https://substackcdn.com/image/fetch/$s_!bvTU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png 1272w, https://substackcdn.com/image/fetch/$s_!bvTU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bvTU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png" width="1456" height="771" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:771,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:139159,&quot;alt&quot;:&quot;The metacode layer maps an agent-ready project structure to the project knowledge each format carries&quot;,&quot;title&quot;:&quot;The metacode layer maps an agent-ready project structure to the project knowledge each format carries&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/209143759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The metacode layer maps an agent-ready project structure to the project knowledge each format carries" title="The metacode layer maps an agent-ready project structure to the project knowledge each format carries" srcset="https://substackcdn.com/image/fetch/$s_!bvTU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png 424w, https://substackcdn.com/image/fetch/$s_!bvTU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png 848w, https://substackcdn.com/image/fetch/$s_!bvTU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png 1272w, https://substackcdn.com/image/fetch/$s_!bvTU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d08c07-5f5c-4258-a408-a2d13466082e_1700x900.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Shared project files carry reviewed knowledge beside the source code. Agent-written memory remains machine-local until a durable lesson is promoted into the repository.</em></p><p>The practical distinction is the role each file plays, who writes it, and how broadly it is supported.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bog3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bog3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png 424w, https://substackcdn.com/image/fetch/$s_!Bog3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png 848w, https://substackcdn.com/image/fetch/$s_!Bog3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png 1272w, https://substackcdn.com/image/fetch/$s_!Bog3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bog3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png" width="1456" height="1197" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1197,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:205444,&quot;alt&quot;:&quot;A comparison of agent-facing Markdown files by their role, typical author, and support status&quot;,&quot;title&quot;:&quot;A comparison of agent-facing Markdown files by their role, typical author, and support status&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/209143759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A comparison of agent-facing Markdown files by their role, typical author, and support status" title="A comparison of agent-facing Markdown files by their role, typical author, and support status" srcset="https://substackcdn.com/image/fetch/$s_!Bog3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png 424w, https://substackcdn.com/image/fetch/$s_!Bog3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png 848w, https://substackcdn.com/image/fetch/$s_!Bog3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png 1272w, https://substackcdn.com/image/fetch/$s_!Bog3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b62e4cb-f419-479e-a3ed-f3a387c7f9e2_1700x1398.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The formats range from cross-tool standards and established vendor conventions to emerging domain-specific experiments.</em></p><p>A project does not need every file. Use the smallest set that agents can reliably discover, keep reviewed knowledge beside the source code, and treat vendor-specific files as thin compatibility bridges when another file is canonical. <code>AUTH.md</code> remains service-hosted, while Claude&#8217;s auto memory stays machine-local until a human promotes a durable lesson into the repository.</p><h2>The takeaway</h2><p>The repository is becoming the meeting point between source code and <strong>metacode</strong>: the Markdown that carries requirements, NFRs, architecture, design, rules, procedures, plans, and durable learning.</p><p>When agents can read both, they act as intent compilers. Source code becomes a byproduct: the executable result of human intent and judgment made legible to the agent.</p><p>The engineering task is to keep that metacode scoped, reviewed, and current. It does not replace testing or review. It gives the next code change a better source.</p><h2>Other emerging standards</h2><ul><li><p><a href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing">Open Knowledge Format (OKF)</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[How AI Adoption Progresses Inside Organizations]]></title><description><![CDATA[Each phase adds capabilities that let teams do more with AI until the next bottleneck appears.]]></description><link>https://generativeprogrammer.com/p/the-ai-adoption-bottleneck-keeps</link><guid isPermaLink="false">https://generativeprogrammer.com/p/the-ai-adoption-bottleneck-keeps</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Mon, 27 Jul 2026 23:13:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!e2NR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8dfa1d-f4f0-4306-958e-3872a20c015d_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In <a href="https://x.com/bcherny/status/2077929379661844559">a recent X post</a>, Claude Code creator Boris Cherny describes a pattern he keeps seeing: one engineer gets dramatically faster with Claude, while the rest of the organization may not move at the same pace.</p><p>His framework maps how that wider adoption tends to unfold. A new tool or practice lets a person or team run more AI work, often in parallel. That works until another constraint becomes binding. The bottleneck moves from access, to the engineer&#8217;s attention, to review, to trust, and finally to deciding what should be automated at scale.</p><p>These are not company-wide levels. Different people, teams, and workflows can move through them at different speeds. Boris&#8217;s evidence and examples are Claude-specific. I use the progression as a vendor-neutral heuristic that can also help teams reason about other coding agents. The agent counts in the image are scale cues, not targets.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!I-cI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I-cI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png 424w, https://substackcdn.com/image/fetch/$s_!I-cI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png 848w, https://substackcdn.com/image/fetch/$s_!I-cI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!I-cI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I-cI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:358911,&quot;alt&quot;:&quot;The full AI adoption progression with concrete Claude tools, technical controls, and the bottleneck exposed at each phase&quot;,&quot;title&quot;:&quot;The full AI adoption progression with concrete Claude tools, technical controls, and the bottleneck exposed at each phase&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/208746605?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The full AI adoption progression with concrete Claude tools, technical controls, and the bottleneck exposed at each phase" title="The full AI adoption progression with concrete Claude tools, technical controls, and the bottleneck exposed at each phase" srcset="https://substackcdn.com/image/fetch/$s_!I-cI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png 424w, https://substackcdn.com/image/fetch/$s_!I-cI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png 848w, https://substackcdn.com/image/fetch/$s_!I-cI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!I-cI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F391c435d-74cb-44ef-8d9b-1423d7860ef3_2400x1500.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With that in mind, let&#8217;s look briefly at what each phase means and what moves the work forward.</p><h2>Gated: open an approved path</h2><p>The first phase is about whether people can use AI on real company work at all.</p><p>Some organizations do not approve the latest models for company code. Others route access through an internal service that adds authentication, policy checks, and latency. A developer may be allowed to experiment locally but have no approved way to deploy what the agent produces. The work waits for security, data, procurement, and IT approval.</p><p>At this point, the AI adoption stack contains only a few things:</p><ul><li><p><strong>Claude.ai chat</strong> as the approved entry point.</p></li><li><p><strong>SSO, SCIM, and role-based access</strong> so use is tied to company identities.</p></li><li><p><strong>Organization budget caps, data-governance rules, and existing IAM and deployment controls</strong> around the work.</p></li></ul><p>When the organization has an approved workflow that can use Claude and ship its output without requesting a policy exception each time, the gated phase has been passed. The next bottleneck is the engineer&#8217;s attention.</p><h2>Assisted: one engineer and one agent</h2><p>With access open, adoption moves into the developer&#8217;s daily workflow. One engineer works with one agent but still reviews nearly every response and code edit. AI makes the task faster, yet the work remains synchronous: while Claude works, the engineer watches.</p><p>The practical stack now expands from access to one bounded, self-checking task loop:</p><ul><li><p><strong>Claude Code in Desktop, CLI, or IDE</strong>, with <a href="https://code.claude.com/docs/en/permission-modes#analyze-before-you-edit-with-plan-mode">Plan mode</a> to review the approach before edits begin.</p></li><li><p><strong>Tests, build, lint, type checks, and end-to-end tests</strong> in a real development environment so the agent can check its own work.</p></li><li><p><strong><a href="https://code.claude.com/docs/en/auto-mode-config">Auto mode</a></strong> to remove routine permission interruptions inside an approved policy.</p></li></ul><p>For the organization, <a href="https://code.claude.com/docs/en/analytics">Claude Code Analytics</a>, OpenTelemetry export, spend caps, and centrally managed settings keep this new path visible and bounded.</p><p>When the agent can close one bounded task and the engineer can begin another, attention stops being the immediate constraint. The work becomes parallel.</p><h2>Parallel: one engineer and several agents</h2><p>One engineer can now coordinate several agents. Each works in an isolated checkout, runs its checks, and returns a final diff. Output grows quickly. The review capacity of one person does not, so the bottleneck moves to review.</p><p>The new tools are built for concurrency:</p><ul><li><p><strong><a href="https://code.claude.com/docs/en/agent-view">Agent view</a></strong> keeps multiple sessions visible, while <a href="https://code.claude.com/docs/en/worktrees">worktrees</a> keep their edits from colliding.</p></li><li><p><strong><a href="https://code.claude.com/docs/en/code-review">Claude Code Review</a></strong> and <a href="https://claude.com/product/claude-security">Claude Security</a> investigate code and security findings before human approval.</p></li><li><p><strong>Claude Code on Mobile, cloud execution in Desktop, and <a href="https://code.claude.com/docs/en/remote-control">Remote control</a></strong> let the engineer monitor work away from the terminal.</p></li></ul><p>These sessions inherit the previous phase&#8217;s verification loop. The new guardrails are for concurrency: pre-approve common safe Bash and MCP commands in <code>settings.json</code>, isolate each task, and retain human merge and security approval. The Chrome extension or an iOS or Android simulator MCP can extend verification to end-to-end behavior.</p><p>The point is not to remove review. It is to stop reviewers spending attention on failures the agent could have found itself. This phase works when parallel sessions return evidence, not another pile of unchecked output.</p><h2>Supervised autonomy: manage loops, not sessions</h2><p>Once repeated parallel tasks become reliable, teams can turn them into loops. A person no longer needs to start and steer every session. Claude can gather context, delegate work, and begin scheduled or event-driven tasks.</p><p>Trust is now the bottleneck. A deep agent tree cannot be watched step by step, and scaling it before the loop has earned trust only multiplies failures, decisions, and token use.</p><p>This phase adds:</p><ul><li><p><strong>Subagents</strong> to delegate work into separate workers.</p></li><li><p><strong><a href="https://code.claude.com/docs/en/routines">Routines</a>, </strong><code>/loop</code><strong>, </strong><code>/batch</code><strong>, </strong><code>/goal</code><strong>, and <a href="https://code.claude.com/docs/en/workflows">Dynamic workflows</a></strong> for scheduled, repetitive, or multi-agent work.</p></li><li><p><strong><a href="https://claude.com/product/tag">Claude Tag</a></strong> to watch a channel, use the shared context, and start work proactively.</p></li><li><p><code>CLAUDE.md</code><strong> and <a href="https://code.claude.com/docs/en/slash-commands">Skills</a></strong> to encode standards, plus <a href="https://code.claude.com/docs/en/sandboxing">agent sandboxing</a> to limit filesystem and network access.</p></li></ul><p>At this scale, operating cost becomes part of trust: a loop that is correct but wasteful will not scale. Boris calls out advisors, language servers, model selection, and moving large <code>CLAUDE.md</code> instructions into lazily loaded Skills to reduce token use.</p><p>The phase has been passed when a background loop can gather its context, check its result, and stop or return to a person predictably. The question then changes from &#8220;Can this run?&#8221; to &#8220;Which work should we automate at scale?&#8221;</p><h2>AI-native: steer by intent</h2><p>In the final phase, trusted loops become domain-specific automations: code migrations, fuzzing, feature building, or feedback remediation. Many agents may run, some started by other agents. People set the intent and monitor exceptions instead of assigning and inspecting every task.</p><p>The bottleneck is identifying valuable work to automate and choosing the right guardrails for each kind of work.</p><p>The product list is short:</p><ul><li><p><strong><a href="https://code.claude.com/docs/en/agent-sdk/overview">Claude Agent SDK</a></strong> to build and schedule agents programmatically.</p></li><li><p><strong>Cost controls and model selection</strong> for each automation.</p></li></ul><p>One global autonomy policy will not fit every workflow. Each needs its own scope, checks, and cost ceiling. Human judgment becomes the bottleneck: deciding which work should run, what evidence is sufficient, and where a person must remain in the loop.</p><h2>The takeaway</h2><p>These phases describe a progression, but they are not a single company-wide maturity score or a mandatory linear path. They map what enables more AI work to happen in parallel and where each workflow waits next.</p><p>As technical constraints fall away, the bottleneck often moves into human attention, review, trust, or judgment. Find where the workflow waits. Add the smallest tool and guardrail that can remove that constraint. Then watch where the queue moves.</p><p>More tokens do not move a team through these phases. Better operating loops do.</p><div><hr></div><p><em>Based on Boris Cherny&#8217;s <a href="https://x.com/bcherny/status/2077929379661844559">X post</a> and <a href="https://docs.google.com/document/d/1R91ayvj7uvlxgNi--__2-Bf3w8x5r1nF-xIBN7ds8Ns/edit?tab=t.0">Steps of AI Adoption</a>.</em></p>]]></content:encoded></item><item><title><![CDATA[5 Software Disciplines That Keep AI Skills From Rotting]]></title><description><![CDATA[Skills are reusable units of agent context, so they can decay like code. Here are five engineering practices that keep them alive.]]></description><link>https://generativeprogrammer.com/p/5-software-disciplines-that-keep</link><guid isPermaLink="false">https://generativeprogrammer.com/p/5-software-disciplines-that-keep</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 12 Jul 2026 22:52:26 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/dff6c719-d7f2-432b-acf0-ec96bde2770d_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>I have spent a lot of words lately on how to write a good skill</span>: <span>the</span> <a href="https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics">authoring patterns</a><span>,</span> <span>the</span> <a href="https://generativeprogrammer.com/p/9-principles-that-separate-useful">principles that separate a useful skill from a markdown essay</a><span>,</span> <span>and the </span><a href="https://generativeprogrammer.com/p/20-agent-skills-repos-and-marketplaces"><span>collections worth installing</span></a><span>.</span> <span>They all answer how to make a skill that works today,</span> <span>but that is the easy half.</span></p><p><span>As skills move from personal snippets into shared repositories,</span> <span>maintenance becomes the harder problem.</span> <span>A skill quietly decays as models change,</span> <span>APIs move,</span> <span>and infrastructure drifts.</span> <span>Left untouched,</span> <span>it can stop helping and start steering the agent in the wrong direction.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jyr8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jyr8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png 424w, https://substackcdn.com/image/fetch/$s_!jyr8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png 848w, https://substackcdn.com/image/fetch/$s_!jyr8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png 1272w, https://substackcdn.com/image/fetch/$s_!jyr8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jyr8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png" width="1456" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:515397,&quot;alt&quot;:&quot;&quot;,&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://generativeprogrammer.com/i/206754136?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!jyr8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png 424w, https://substackcdn.com/image/fetch/$s_!jyr8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png 848w, https://substackcdn.com/image/fetch/$s_!jyr8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png 1272w, https://substackcdn.com/image/fetch/$s_!jyr8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0ae561-db50-4b38-bb4c-a6f537b36d98_6280x2072.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Shared collections already accumulate duplicates,</span> <span>stale instructions,</span> <span>uncertain provenance,</span> <span>and overlapping capabilities.</span> <span>Teams need to know what is installed,</span> <span>where it came from,</span> <span>who maintains it,</span> <span>and what is affected if it is compromised.</span> <span>We learned to </span><strong><span>fight code rot</span></strong><span> with linters,</span> <span>tests,</span> <span>scanners,</span> <span>package managers,</span> <span>and monitoring.</span> <span>Skills need the same treatment,</span> <span>from the cheapest offline check to the richest production signal.</span></p><h2><strong>1. Skill Linting: Catch Problems Before a Skill Runs</strong></h2><p><span>A skill can be broken before anyone runs it</span>: <span>an underspecified description may fail to trigger it,</span> <span>oversized instructions can crowd the context window,</span> <span>required fields may be missing for the target format,</span> <span>and unsafe instructions may omit guardrails.</span> <span>Without an offline check,</span> <span>you discover these problems the expensive way,</span> <span>when the agent misfires in front of a user.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MMVY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MMVY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png 424w, https://substackcdn.com/image/fetch/$s_!MMVY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png 848w, https://substackcdn.com/image/fetch/$s_!MMVY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png 1272w, https://substackcdn.com/image/fetch/$s_!MMVY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MMVY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png" width="1456" height="1039" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1039,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:299056,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206754136?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!MMVY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png 424w, https://substackcdn.com/image/fetch/$s_!MMVY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png 848w, https://substackcdn.com/image/fetch/$s_!MMVY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png 1272w, https://substackcdn.com/image/fetch/$s_!MMVY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F975eea5b-a0c3-49be-88ca-47d7e0aab4e8_2880x2056.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Static analysis inspects a skill without executing it,</span> <span>and it scales from shallow to deep as it does for code.</span> <span>The shallow end is deterministic linting</span>: <span>does the skill have the required fields,</span> <span>valid references,</span> <span>and a description specific enough to be selected?</span> <span>A layer up sits best-practice review,</span> <span>matching it against</span> <a href="https://agentskills.io/skill-creation/best-practices">published authoring guidance</a> <span>for concision,</span> <span>progressive disclosure,</span> <span>and clear trigger cues.</span> <span>The deep end is substance review,</span> <span>with a model reading the skill the way a senior engineer reads a pull request and asking whether it does a sensible thing at all.</span> <span>The rules already exist in guidance and in the</span> <a href="https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics">skill authoring patterns</a><span>;</span> <span>the discipline is turning them into repeatable checks.</span></p><p><strong>Related tools.</strong></p><ul><li><p>Field and schema linters that validate skill structure</p></li><li><p>Best-practice reviewers that score against authoring guidance</p></li><li><p>Generic LLM reviewers for substance, in the spirit of an automated code review</p></li></ul><p><strong>When to use.</strong> <span>Run deterministic schema,</span> <span>reference,</span> <span>and style checks on every change.</span> <span>Schedule model-based substance review according to cost and risk.</span></p><p><strong>The main trade-off.</strong> <span>Static analysis can inspect structure,</span> <span>semantics,</span> <span>dependencies,</span> <span>and likely risks,</span> <span>but it cannot observe runtime behavior.</span> <span>A skill can pass those checks and still fail in a real agent,</span> <span>model,</span> <span>tool,</span> <span>and repository environment.</span></p><h2><strong>2. Skill Evals: Test How a Skill Behaves</strong></h2><p><span>Linting tells you a skill is well formed.</span> <span>It cannot show how the skill behaves on a task.</span> <span>Running representative tasks provides behavioral evidence,</span> <span>though it cannot prove that a skill works universally.</span> <span>Without that evidence,</span> <span>every change is guesswork,</span> <span>the same trap as code with no tests.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QrGq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QrGq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png 424w, https://substackcdn.com/image/fetch/$s_!QrGq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png 848w, https://substackcdn.com/image/fetch/$s_!QrGq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png 1272w, https://substackcdn.com/image/fetch/$s_!QrGq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QrGq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png" width="1456" height="686" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:686,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:274552,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/206754136?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!QrGq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png 424w, https://substackcdn.com/image/fetch/$s_!QrGq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png 848w, https://substackcdn.com/image/fetch/$s_!QrGq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png 1272w, https://substackcdn.com/image/fetch/$s_!QrGq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3370a1a-f0d4-4838-a0c6-0910110f274f_3752x1768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>A useful,</span> <span>intentionally imperfect analogy is the test pyramid.</span> <span>Skill evals isolate one skill.</span> <span>Project evals combine a repository</span>&#8216;<span>s context and can replay a past pull request.</span> <span>Broader system evals exercise a production-like setup end to end.</span> <span>Any of those scenario tiers can be run across target models when the question is model choice.</span> <span>A smaller model can make an isolated run cheaper,</span> <span>but passing it means only that no regression was observed in those scenarios.</span> <span>Scenario quality,</span> <span>repeated runs,</span> <span>and target-model coverage matter more than a comforting coverage number.</span></p><p><strong>Related tools.</strong></p><ul><li><p><a href="https://developers.openai.com/blog/eval-skills">OpenAI&#8217;s Codex eval pattern</a> captures a run&#8217;s trace and artifacts, scores deterministic checks, and adds schema-constrained model grading for qualitative criteria</p></li><li><p>Eval harnesses that run an agent through a defined task environment</p></li><li><p>Scenario extractors that turn a past pull request into a repeatable test</p></li></ul><p><strong>When to use.</strong> <span>As soon as a skill is doing something you would be afraid to change.</span> <span>That is the moment you need a test.</span></p><p><strong>The main trade-off.</strong> <span>Evals provide behavioral evidence,</span> <span>but environments and judges cost time to build and maintain,</span> <span>and an unvalidated judge can create false confidence.</span></p><h2><strong>3. Skill Scanning: Scan Skills Before You Trust Them</strong></h2><p><span>Skills are not inert documents.</span> <span>Depending on the client,</span> <span>an agent may follow their instructions,</span> <span>execute bundled scripts,</span> <span>or invoke tools under the harness</span>&#8216;<span>s permissions.</span> <span>That makes third-party skills a supply-chain surface.</span> <span>The risks fall into three broad groups</span>: <span>malicious skills designed to cause harm,</span> <span>negligent skills that omit safety boundaries,</span> <span>and vulnerable skills that expose secrets or unsafe flows.</span> <span>Skills are already part of the attack surface,</span> <span>not merely the next one.</span></p><p><span>Open-source scanners already cover several layers.</span> <a href="https://github.com/NVIDIA/SkillSpector">NVIDIA SkillSpector</a> <span>and</span> <a href="https://github.com/cisco-ai-defense/skill-scanner">Cisco Skill Scanner</a> <span>combine static detection with optional semantic analysis;</span> <a href="https://github.com/Fangcun-AI/SkillWard">SkillWard</a> <span>adds sandbox execution for suspicious skills;</span> <a href="https://github.com/snyk/agent-scan">Snyk Agent Scan</a> <span>can discover installed agent components as well as inspect an individual skill.</span> <span>These projects use different combinations of signatures,</span> <span>data-flow analysis,</span> <span>dependency checks,</span> <span>model-assisted review,</span> <span>inventory,</span> <span>and sandbox execution.</span> <span>That variety matters because no one technique covers the whole attack surface.</span> <span>Underneath them all is supply-chain security</span>: <span>knowing what you run and where it came from,</span> <span>so a compromised skill is traceable rather than invisible.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oaku!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oaku!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png 424w, https://substackcdn.com/image/fetch/$s_!oaku!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png 848w, https://substackcdn.com/image/fetch/$s_!oaku!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png 1272w, https://substackcdn.com/image/fetch/$s_!oaku!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oaku!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png" width="1456" height="758" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:758,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:284029,&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://generativeprogrammer.com/i/206754136?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.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_!oaku!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png 424w, https://substackcdn.com/image/fetch/$s_!oaku!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png 848w, https://substackcdn.com/image/fetch/$s_!oaku!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png 1272w, https://substackcdn.com/image/fetch/$s_!oaku!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc66e9c3-c085-4e9e-8ca6-18b3efea2ab3_3520x1832.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><strong>Related tools.</strong></p><ul><li><p>Static and semantic scanners integrated into publishing or installation</p></li><li><p>Sandboxed execution and red-teaming harnesses that probe runtime behavior</p></li><li><p>Provenance and supply-chain tracking for installed skills</p></li></ul><p><strong>When to use.</strong> <span>Before any third-party skill enters your workspace,</span> <span>and continuously on whatever is already installed.</span></p><p><strong>The main trade-off.</strong> <span>Scanning can flag known risk classes,</span> <span>but false positives,</span> <span>false negatives,</span> <span>and runtime-only behavior remain.</span> <span>It reduces risk without proving a skill safe.</span></p><h2><strong>4. Skill Dependencies: Make Hidden Relationships Explicit</strong></h2><p><span>Skills can depend on tools,</span> <span>scripts,</span> <span>packages and,</span> <span>in clients that support programmatic skill invocation,</span> <span>other skills.</span> <span>An incident-response workflow might use one capability to gather logs,</span> <span>another to run root-cause analysis,</span> <span>and a third to file the ticket.</span> <span>The</span> <a href="https://agentskills.io/specification">open Agent Skills format</a> <span>defines the skill folder,</span> <span>but it does not standardize dependency declarations or skill-to-skill calls,</span> <span>so many of these relationships remain implicit.</span></p><p><span>Package managers now exist,</span> <span>so this practice is no longer hypothetical.</span> <a href="https://microsoft.github.io/apm/">Microsoft&#8217;s Agent Package Manager</a> <span>is one concrete implementation</span>: <span>it uses</span> <code>apm.yml</code> <span>for declarations and</span> <code>apm.lock.yaml</code> <span>for resolved commits and content hashes,</span> <span>with transitive dependency resolution and policy gates.</span> <span>The ecosystem still lacks one universally adopted manager,</span> <span>but the shape is becoming clear</span>: <span>discovery,</span> <span>versioned releases,</span> <span>a project manifest,</span> <span>a lockfile,</span> <span>provenance,</span> <span>and install-time quality and security controls.</span> <span>That is what turns the shared-repository swamp into something a large organization can govern.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XmT5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XmT5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png 424w, https://substackcdn.com/image/fetch/$s_!XmT5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png 848w, https://substackcdn.com/image/fetch/$s_!XmT5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png 1272w, https://substackcdn.com/image/fetch/$s_!XmT5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XmT5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png" width="1456" height="897" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:897,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:295017,&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://generativeprogrammer.com/i/206754136?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.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_!XmT5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png 424w, https://substackcdn.com/image/fetch/$s_!XmT5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png 848w, https://substackcdn.com/image/fetch/$s_!XmT5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png 1272w, https://substackcdn.com/image/fetch/$s_!XmT5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174baf98-ec8e-42bb-98e6-2e516d99fbf5_3000x1848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Related tools.</strong></p><ul><li><p>Skill registries for discovery and publishing</p></li><li><p>Project manifests that declare packages and lockfiles that pin resolved versions and hashes</p></li><li><p>Plugin bundlers that package related skills together</p></li></ul><p><strong>When to use.</strong> <span>The moment more than one person shares skills,</span> <span>or one skill starts depending on another.</span></p><p><strong>The main trade-off.</strong> <span>A package manager buys governance and traceability at the cost of process friction,</span> <span>and asking a culture that currently copies a markdown file to adopt manifests and version gates is a real adoption hurdle.</span></p><h2><strong>5. Skill Observability: Learn From Skills in Production</strong></h2><p><span>Offline checks cannot reproduce every production workload.</span> <span>You can lint,</span> <span>test,</span> <span>scan,</span> <span>and version a skill carefully and still miss how it behaves against real users,</span> <span>repositories,</span> <span>and drift.</span> <span>Runtime traces,</span> <span>user feedback,</span> <span>and experiments add another kind of evidence.</span></p><p><span>As a runtime complement to pre-install scanning,</span> <a href="https://github.com/microsoft/agent-governance-toolkit">Microsoft&#8217;s Agent Governance Toolkit</a> <span>wraps agent tool calls with policy checks and records allow-or-deny decisions in an audit trail.</span> <span>That trail shows what the agent attempted and what policy decided;</span> <span>it does not prove the real-world outcome.</span></p><p><span>The discipline is to monitor agents at runtime and feed what you learn back into the other four.</span> <span>Observability closes the loop in two directions.</span> <span>It turns representative failures into candidate eval scenarios,</span> <span>so production teaches the test suite.</span> <span>And it clusters recurring behavior that may reveal a missing,</span> <span>misfiring,</span> <span>or redundant skill.</span> <span>Those are hypotheses for review,</span> <span>not automatic deletion decisions</span>: <span>a skill that never fires may have a weak description or cover a rare but important case.</span> <span>This is the move that can turn maintenance from a chore into an optimization loop.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yj14!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yj14!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.png 424w, https://substackcdn.com/image/fetch/$s_!Yj14!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.png 848w, https://substackcdn.com/image/fetch/$s_!Yj14!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.png 1272w, https://substackcdn.com/image/fetch/$s_!Yj14!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yj14!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.png" width="1456" height="739" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb87392e-121a-4362-867b-356125b49993_3768x1912.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:739,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:291889,&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://generativeprogrammer.com/i/206754136?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.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_!Yj14!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.png 424w, https://substackcdn.com/image/fetch/$s_!Yj14!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.png 848w, https://substackcdn.com/image/fetch/$s_!Yj14!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.png 1272w, https://substackcdn.com/image/fetch/$s_!Yj14!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb87392e-121a-4362-867b-356125b49993_3768x1912.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Related tools.</strong></p><ul><li><p>Agent-run logging and policy-decision audit trails across real sessions</p></li><li><p>Scenario extraction that promotes a production failure into an eval</p></li><li><p>Trace clustering that proposes skills to add, fix, or review for removal</p></li></ul><p><strong>When to use.</strong> <span>Once skills are live in front of real work,</span> <span>and especially before you trust a shared repository at scale.</span></p><p><strong>The main trade-off.</strong> <span>Production telemetry is rich but requires runtime instrumentation and access to potentially sensitive agent logs,</span> <span>creating real retention,</span> <span>access,</span> <span>and privacy responsibilities.</span></p><h2><strong>The takeaway</strong></h2><p><span>These five disciplines borrow established software-engineering practices and point them at a new artifact.</span> <span>If skills are treated as code-like context,</span> <span>they deserve comparable lifecycle controls.</span></p><p><span>The broader </span>discipline is a context development lifecycle: <span>generate context,</span> <span>evaluate and test it,</span> <span>optimize it,</span> <span>distribute it,</span> <span>consume it safely,</span> <span>observe what happens,</span> <span>and repeat.</span> <span>The five disciplines support that loop;</span> <span>they are not identical to its stages.</span> <span>Guy Podjarny</span>&#8216;<span>s</span> <a href="https://www.youtube.com/watch?v=KpfnldjO3Iw">Skills Are the New Code</a> <span>talk was the spark for this post.</span> <span>The treatment here is my synthesis of that lifecycle argument with current specifications,</span> <span>eval practice,</span> <span>security tools,</span> <span>package management,</span> <span>and runtime operations.</span></p>]]></content:encoded></item><item><title><![CDATA[10 Claude Code Steering Mechanisms That Stop Agents From Ignoring Instructions]]></title><description><![CDATA[A practical map for choosing between memory, rules, skills, hooks, permissions, subagents, output styles, and MCP.]]></description><link>https://generativeprogrammer.com/p/10-claude-code-steering-mechanisms</link><guid isPermaLink="false">https://generativeprogrammer.com/p/10-claude-code-steering-mechanisms</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 28 Jun 2026 07:09:13 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f40e2760-7c3e-4ee2-b3bf-1d48c393633c_1731x909.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Every Claude Code setup has a gravitational pull toward</span> <code>CLAUDE.md</code><span>.</span> <span>It starts as a helpful project note with build commands,</span> <span>test commands,</span> <span>repo layout,</span> <span>and a few conventions,</span> <span>then slowly becomes the place for release steps,</span> <span>migration rules,</span> <span>security warnings,</span> <span>production commands,</span> <span>response style,</span> <span>and every other instruction that did not yet find a better home.</span></p><p><span>That is the point where memory becomes a mixed control plane.</span> <span>The issue is not that</span> <code>CLAUDE.md</code> <span>is bad;</span> <span>it is that one file is asked to carry facts,</span> <span>procedures,</span> <span>boundaries,</span> <span>style,</span> <span>external capabilities,</span> <span>and workflow triggers,</span> <span>even though Claude Code has separate mechanisms for each of these jobs.</span></p><p><span>Project memory,</span> <span>path-scoped rules,</span> <span>skills,</span> <span>manual commands,</span> <span>subagents,</span> <span>hooks,</span> <span>permissions,</span> <span>MCP servers,</span> <span>output styles,</span> <span>and system-prompt overlays steer Claude in different ways.</span> <span>They have different context costs,</span> <span>different loading models,</span> <span>and different authority over the final behaviour.</span> <span>Treating them as stronger or weaker versions of the same prompt is how instructions get duplicated,</span> <span>diluted,</span> <span>and then repeated in chat again.</span></p><p><span>The practical question is simple</span>:</p><p><strong>Where should this instruction live so that it is visible when needed, cheap when not needed, and enforced when it must be?</strong></p><h2><strong>Why this matters now</strong></h2><p><span>Claude Code has grown into a small operating environment around the model</span>: <span>memory files hold project facts,</span> <span>rules scope constraints,</span> <span>skills package work,</span> <span>subagents isolate investigation,</span> <span>hooks and permissions enforce behaviour,</span> <span>output styles set response posture,</span> <span>and MCP servers connect live capabilities.</span> <span>Once a repository uses more than one or two of these,</span> <span>the useful design question becomes placement rather than wording.</span></p><p><span>The concrete artifact in this post is Claude Code itself.</span> <span>I am not trying to restate the docs,</span> <span>but to extract the operating map teams need when their setup grows beyond one shared memory file.</span></p><p><span>That placement question has two dimensions.</span> <span>The first is</span> <strong>scope</strong>: <span>how widely should this apply across every session,</span> <span>one directory,</span> <span>one file glob,</span> <span>one workflow,</span> <span>one subagent,</span> <span>one external tool,</span> <span>or one lifecycle event?</span> <span>The second is</span> <strong>enforcement</strong>: <span>is this guidance the model should follow,</span> <span>or a boundary the runtime must guarantee?</span></p><p><span>If you get these two dimensions right,</span> <span>Claude feels much more reliable because each instruction has a natural place and a matching level of authority.</span> <span>If you get them wrong,</span> <span>you end up repeating the same intent in multiple places,</span> <span>while still paying for it on turns where it does not matter.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hkvJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hkvJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png 424w, https://substackcdn.com/image/fetch/$s_!hkvJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png 848w, https://substackcdn.com/image/fetch/$s_!hkvJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png 1272w, https://substackcdn.com/image/fetch/$s_!hkvJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hkvJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png" width="1456" height="1555" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1555,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:442563,&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://generativeprogrammer.com/i/203899228?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.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_!hkvJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png 424w, https://substackcdn.com/image/fetch/$s_!hkvJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png 848w, https://substackcdn.com/image/fetch/$s_!hkvJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png 1272w, https://substackcdn.com/image/fetch/$s_!hkvJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8bcb175-6281-4598-8ae5-ca224a3ed141_2550x2724.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The map is the whole article in one picture.</span> <span>Most mechanisms guide Claude through context,</span> <span>routing,</span> <span>tool access,</span> <span>response posture,</span> <span>or isolation,</span> <span>while hooks and permissions enforce outside the model in the hard sense.</span> <span>The rest still matter,</span> <span>but they do not become hard policy just because the sentence sounds strict.</span></p><p><span>A rule such as</span> <span>&#8220;never edit production migrations&#8221;</span> <span>does not belong only in</span> <code>CLAUDE.md</code><span>.</span> <span>The memory file can explain the policy,</span> <span>but the boundary itself belongs in a permission rule or a hook,</span> <span>because the model may forget prose while the harness should not forget policy.</span></p><h2><strong>The 10 steering mechanisms</strong></h2><p><span>These are not just features.</span> <span>They are placement mechanisms,</span> <span>and each one answers a different question about where an instruction should live.</span></p><h3><strong>1. Project Memory Index: </strong><code>CLAUDE.md</code></h3><p><span>Use</span> <code>CLAUDE.md</code> <span>for stable project facts that Claude should know in most sessions</span>: <span>build commands,</span> <span>test commands,</span> <span>repo layout,</span> <span>architectural landmarks,</span> <span>and team conventions.</span></p><p><span>Think of it as an index rather than a manual.</span> <span>A new teammate should be able to read it and understand where they are,</span> <span>but it should not contain every process your team ever invented.</span> <span>Procedures belong in skills,</span> <span>local constraints belong in rules,</span> <span>and hard boundaries belong in hooks or permissions.</span></p><p><strong>Use it when:</strong> <span>the information is broad,</span> <span>stable,</span> <span>and useful across many tasks.</span></p><p><strong>Example:</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;653ce21f-cce1-475a-939f-4e7bc243aad1&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml"># Project basics
- Package manager: pnpm
- Unit tests: pnpm test
- API routes live in packages/api/src/routes
- Service ownership is documented in docs/service-ownership.md</code></pre></div><h3><strong>2. Path-Scoped Constraint: rules</strong></h3><p><span>Rules are for constraints that are narrower than project memory.</span> <span>They live under</span> <code>.claude/rules/</code><span>;</span> <span>without</span> <code>paths</code><span>,</span> <span>a rule becomes broad context,</span> <span>while with</span> <code>paths</code><span>,</span> <span>it loads only when Claude works with matching files.</span></p><p><span>This is the main mechanism for monorepos and mixed stacks,</span> <span>where API code,</span> <span>frontend code,</span> <span>infrastructure code,</span> <span>generated code,</span> <span>and migrations rarely share the same rules.</span> <span>A rule can improve behaviour significantly,</span> <span>but it is still text.</span> <span>If editing old migrations must be impossible,</span> <span>add a hook that blocks the edit rather than trusting a convention written as prose.</span></p><p><strong>Use it when:</strong> <span>a convention applies to a directory,</span> <span>file type,</span> <span>or concern.</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;96db89a5-c7cc-4c61-b86b-da3f21fef440&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">---
paths:
  - "src/api/**/*.ts"
---
All API handlers must validate input with Zod before processing.
Return errors using the shared ApiError format.</code></pre></div><h3><strong>3. Just-in-Time Procedure: skills</strong></h3><p><span>A skill is the right home for a reusable workflow,</span> <span>such as release notes,</span> <span>code review,</span> <span>incident analysis,</span> <span>dependency upgrades,</span> <span>migration planning,</span> <span>or API change review.</span></p><p><span>Only the skill description is visible up front,</span> <span>so Claude can decide when to use it,</span> <span>and the body loads only when the skill is invoked.</span> <span>That makes skills the best way to carry long procedures without paying for them on every turn.</span> <span>The description is the routing signal,</span> <span>so write it like a trigger,</span> <span>not like a vague title.</span></p><p><strong>Use it when:</strong> <span>you keep pasting the same checklist into chat.</span></p><p><strong>Example:</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;7c72aa20-ca59-4ff3-82da-32d66261e6b5&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">---
name: release-notes
description: Create release notes from the current git diff and recent commits.
---
Create release notes for $ARGUMENTS.
1. Read the current diff and recent commits.
2. Group changes into Features, Fixes, Breaking Changes, and Internal.
3. Mention migration risk only when visible in the diff.
4. Keep the final output under 400 words.</code></pre></div><h3><strong>4. Human-Triggered Workflow: manual skills and slash commands</strong></h3><p><span>Some workflows should not run just because Claude thinks the work looks ready.</span> <span>Commit,</span> <span>deploy,</span> <span>publish,</span> <span>release,</span> <span>notify,</span> <span>migrate,</span> <span>and update production are human-triggered workflows because the moment they run matters as much as the steps inside them.</span></p><p><span>Custom commands now fit into the skill model,</span> <span>but the operational distinction is still useful</span>: <span>some skills Claude may choose,</span> <span>and some skills the user must invoke explicitly.</span> <span>Convenience is good for review,</span> <span>but it is not a deployment policy.</span></p><p><strong>Use it when:</strong> <span>the workflow has side effects and should start only by explicit user action.</span></p><p><strong>Example:</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;7270e1a1-77cd-4ae0-95e6-3d878f98234c&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">---
name: deploy-staging
description: Deploy the current branch to staging.
disable-model-invocation: true
allowed-tools: Bash(pnpm test *) Bash(pnpm build *) Bash(./scripts/deploy-staging *)
---
Deploy $ARGUMENTS to staging.
1. Run tests.
2. Build the application.
3. Deploy to staging.
4. Verify the health endpoint.
5. Summarise the result.</code></pre></div><p><span>Invoke it explicitly</span>:</p><pre><code>/deploy-staging payments-service</code></pre><h3><strong>5. Isolated Investigator: subagents</strong></h3><p><span>A subagent runs work in its own context and returns a result to the main session.</span> <span>It can have its own prompt,</span> <span>tools,</span> <span>model,</span> <span>permissions,</span> <span>hooks,</span> <span>skills,</span> <span>and MCP access,</span> <span>which makes it useful when the investigation should not flood the main conversation.</span></p><p><span>Use this mechanism for noisy work such as broad code search,</span> <span>log analysis,</span> <span>security review,</span> <span>dependency audit,</span> <span>or parallel investigation.</span> <span>The main conversation does not need every intermediate grep result,</span> <span>and in many cases it is better to receive a focused conclusion than a transcript of the whole search.</span></p><p><span>Claude does not pick a subagent only because the file name sounds relevant.</span> <span>Automatic delegation depends on the task,</span> <span>current context,</span> <span>and especially the</span> <code>description</code><span>;</span> <span>natural language is a hint,</span> <span>while an</span> <code>@</code> <span>mention guarantees the subagent for one task and</span> <code>--agent</code> <span>makes it session-wide.</span></p><p><strong>Use it when:</strong> <span>the work is useful,</span> <span>but the transcript would pollute the main thread.</span></p><p><strong>Example:</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;630a49ea-39a7-4b77-b339-2b2097cb8568&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">---
name: security-reviewer
description: Use proactively after auth, crypto, permission, or data-access changes.
tools: Read, Grep, Glob
model: sonnet
---
Review the changed files for security risks.
Return only concrete findings with file references, risk level, and fix suggestions.</code></pre></div><h3><strong>6. Session Posture: output styles</strong></h3><p><span>Output styles change how Claude responds by modifying the system prompt to set role,</span> <span>tone,</span> <span>and output shape.</span> <span>They are useful for persistent posture,</span> <span>but they do not add project knowledge and they do not enforce correctness.</span></p><p><span>Use an output style when you want Claude to keep acting like an architecture reviewer,</span> <span>terse implementer,</span> <span>teacher,</span> <span>RFC reviewer,</span> <span>or pair programmer across the session.</span> <span>For strict JSON,</span> <span>exact document structure,</span> <span>or a policy that must always hold,</span> <span>use a schema,</span> <span>test,</span> <span>hook,</span> <span>or CI step instead.</span> <span>For coding styles,</span> <span>keep</span> <code>keep-coding-instructions: true</code> <span>unless you intentionally want to remove Claude Code&#8217;s default software-engineering behaviour.</span></p><p><strong>Use it when:</strong> <span>you keep asking for the same response style every turn.</span></p><p><strong>Example:</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;e10cfa38-994c-47cf-8748-5a499902fafb&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">---
name: Architecture Review
description: Respond as an architecture reviewer who explains trade-offs first.
keep-coding-instructions: true
---
Start with the trade-off being made.
Then cover coupling, operational impact, security risk, migration cost, and simpler alternatives.
Keep the answer direct. Avoid generic praise.</code></pre></div><p><span>Set it in settings</span>:</p><pre><code>{"outputStyle":"Architecture Review"}</code></pre><h3><strong>7. One-Run Overlay: </strong><code>--append-system-prompt</code></h3><p><span>Appending to the system prompt is for temporary framing that applies to the current invocation without changing project memory,</span> <span>repository rules,</span> <span>or saved output styles.</span></p><p><span>Use it in scripts,</span> <span>CI jobs,</span> <span>one-off reviews,</span> <span>and temporary domain framing where the instruction is important for this run but should not become part of the repo.</span> <span>Keep it sharp,</span> <span>because a command flag can quietly become a second</span> <code>CLAUDE.md</code> <span>if every team preference starts getting pasted into it.</span></p><p><strong>Use it when:</strong> <span>the instruction matters for this run,</span> <span>not for the repo.</span></p><p><strong>Example:</strong></p><pre><code>claude --append-system-prompt-file ./prompts/rfc-reviewer.txt</code></pre><p><span>Where</span> <code>rfc-reviewer.txt</code> <span>says</span>:</p><pre><code>For this session, review changes as an RFC reviewer.
Always include risks, alternatives, and migration impact.</code></pre><h3><strong>8. Live Capability Boundary: MCP servers</strong></h3><p><span>An MCP server is not another memory file and it should not be treated as one.</span> <span>It is a capability boundary that gives Claude a controlled way to reach live systems such as GitHub,</span> <span>Jira,</span> <span>databases,</span> <span>documentation,</span> <span>observability tools,</span> <span>browser automation,</span> <span>or internal APIs,</span> <span>where static context is either stale,</span> <span>too large,</span> <span>or unable to perform actions.</span></p><p><span>Tool search can defer MCP tools until needed,</span> <span>which reduces context cost,</span> <span>but broad MCP access is still broad capability.</span> <span>Use</span> <code>alwaysLoad</code> <span>only for the small set of tools Claude truly needs every turn,</span> <span>and connect the rest in a way that matches the task rather than exposing your whole stack by default.</span></p><p><strong>Use it when:</strong> <span>Claude needs live external data or external actions.</span></p><p><strong>Example:</strong></p><pre><code>Use the GitHub MCP server to read PR #421, check unresolved comments, and review only the changed files.</code></pre><h3><strong>9. Event Gate: hooks</strong></h3><p><span>Hooks run outside the prompt and fire on lifecycle events such as before a tool call,</span> <span>after a file edit,</span> <span>at session start,</span> <span>before compaction,</span> <span>or when a turn ends.</span></p><p><span>This is where</span> <span>&#8220;always do X when Y happens&#8221;</span> <span>belongs.</span> <code>PreToolUse</code> <span>is the place to block or validate before an action,</span> <span>while</span> <code>PostToolUse</code> <span>is better for formatting,</span> <span>logging,</span> <span>and reaction because the tool has already run by then.</span></p><p><strong>Use it when:</strong> <span>behaviour must run mechanically at a known event.</span></p><p><strong>Example:</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;ade3a066-7df2-43c1-8205-200013ae4620&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-dangerous-bash.sh"
          }
        ]
      }
    ]
  }
}</code></pre></div><p><span>The script can inspect the tool input and exit with the blocking code when it sees a dangerous command.</span></p><h3><strong>10. Hard Boundary: permissions</strong></h3><p><span>Permissions decide which tools,</span> <span>files,</span> <span>commands,</span> <span>domains,</span> <span>and skills Claude may use,</span> <span>and they are enforced outside the model context.</span></p><p><span>This is the right home for</span> <span>&#8220;never&#8221;,</span> <span>because prose helps the model understand a boundary while permissions make the boundary operational.</span> <span>A denied action cannot be negotiated back into existence by a convincing explanation in the chat.</span></p><p><strong>Use it when:</strong> <span>the action must be allowed,</span> <span>denied,</span> <span>or require approval regardless of what Claude wants to do.</span></p><p><strong>Example:</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;e19d5d6e-0c77-4a55-b4f7-300a7320842f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">{
  "permissions": {
    "allow": [
      "Bash(git diff *)",
      "Bash(pnpm test *)"
    ],
    "ask": [
      "Bash(git push *)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Bash(git push --force *)"
    ]
  }
}</code></pre></div><h2><strong>The decision tree</strong></h2><p><span>The mechanism catalog tells you what exists,</span> <span>while the tree gives you a practical starting point when you are about to place a new instruction.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iEFs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iEFs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png 424w, https://substackcdn.com/image/fetch/$s_!iEFs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png 848w, https://substackcdn.com/image/fetch/$s_!iEFs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png 1272w, https://substackcdn.com/image/fetch/$s_!iEFs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iEFs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png" width="1456" height="923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:923,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:746173,&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://generativeprogrammer.com/i/203899228?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.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_!iEFs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png 424w, https://substackcdn.com/image/fetch/$s_!iEFs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png 848w, https://substackcdn.com/image/fetch/$s_!iEFs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png 1272w, https://substackcdn.com/image/fetch/$s_!iEFs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96492c30-4e2c-4631-b969-ee70de8e1244_4806x3048.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The first question is the only one that changes the category</span>: <strong>must this be guaranteed?</strong> <span>If the answer is yes,</span> <span>stop writing a better paragraph and use permissions to allow,</span> <span>ask,</span> <span>or deny,</span> <span>or use hooks to run,</span> <span>block,</span> <span>or validate at a lifecycle event.</span></p><p><span>If the answer is no,</span> <span>decide whether you are steering work,</span> <span>context,</span> <span>voice,</span> <span>or capability.</span> <span>Work becomes a skill,</span> <span>manual command,</span> <span>or subagent;</span> <span>context becomes</span> <code>CLAUDE.md</code> <span>or a rule;</span> <span>voice becomes an output style or appended system prompt;</span> <span>live data and external actions become MCP.</span></p><p><span>That sounds like many choices,</span> <span>but in practice the map becomes fast</span>: <span>facts go to</span> <code>CLAUDE.md</code><span>,</span> <span>scoped constraints go to rules,</span> <span>procedures go to skills,</span> <span>human-triggered procedures go to slash commands,</span> <span>noisy investigations go to subagents,</span> <span>session voice goes to output styles,</span> <span>one-off framing goes to appended system prompts,</span> <span>live capability goes to MCP,</span> <span>always-do behaviour goes to hooks,</span> <span>and never-do boundaries go to permissions.</span></p><h2><strong>What changes in long sessions</strong></h2><p><span>Long sessions make placement visible because compaction does not treat every mechanism the same way.</span> <span>Root</span> <code>CLAUDE.md</code> <span>and unscoped rules come back after compaction,</span> <span>but they still compete for attention.</span> <span>Nested</span> <code>CLAUDE.md</code> <span>files and path-scoped rules return only when Claude works near matching files again,</span> <span>while skill bodies enter when used and may need to be re-invoked after compaction.</span></p><p><span>Subagents keep noisy intermediate work out of the main thread and return summaries instead of full transcripts.</span> <span>Output styles and appended system prompts live at the system-prompt level for the session.</span> <span>MCP depends on how tools are loaded</span>: <span>tool search keeps tools deferred,</span> <span>while</span> <code>alwaysLoad</code> <span>puts them into startup context.</span></p><p><span>Hooks and permissions do not need to survive compaction because they never depended on the main context in the first place.</span> <span>They are code and configuration around the model,</span> <span>which is why the cheapest guardrail is often the one outside the context window.</span></p><h2><strong>Final takeaway</strong></h2><p><span>The recent</span> <a href="https://claude.com/blog/steering-claude-code-skills-hooks-rules-subagents-and-more">Anthropic post on steering Claude Code</a> <span>is useful as a feature tour,</span> <span>but the team lesson is more operational.</span> <span>Claude Code is now a small operating environment around the model,</span> <span>and that means the steering layer deserves the same design attention as any other part of the system.</span></p><p><span>Scope controls cost,</span> <span>while enforcement controls reliability.</span> <span>Once you know how widely an instruction should apply and whether it must be guaranteed,</span> <span>the right mechanism becomes much easier to pick.</span></p><p><em><span>Subscribe to </span><a href="https://generativeprogrammer.com/">The Generative Programmer</a><span> for practical maps, pattern catalogs, and production notes on AI coding agents.</span></em></p>]]></content:encoded></item><item><title><![CDATA[20+ Agent Skills, Repos, and Marketplaces Worth Bookmarking]]></title><description><![CDATA[An opinionated shelf of agent skills, collections, marketplaces, and adjacent tools worth installing, bookmarking, or using as templates for your own.]]></description><link>https://generativeprogrammer.com/p/20-agent-skills-repos-and-marketplaces</link><guid isPermaLink="false">https://generativeprogrammer.com/p/20-agent-skills-repos-and-marketplaces</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 14 Jun 2026 10:56:13 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6747882e-bb93-48d0-8454-5a9f0d67edff_1200x627.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Oza5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Oza5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png 424w, https://substackcdn.com/image/fetch/$s_!Oza5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png 848w, https://substackcdn.com/image/fetch/$s_!Oza5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png 1272w, https://substackcdn.com/image/fetch/$s_!Oza5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Oza5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png" width="1456" height="899" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:899,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:670251,&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://generativeprogrammer.com/i/201968309?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.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_!Oza5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png 424w, https://substackcdn.com/image/fetch/$s_!Oza5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png 848w, https://substackcdn.com/image/fetch/$s_!Oza5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png 1272w, https://substackcdn.com/image/fetch/$s_!Oza5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd01def38-5bcb-466b-8e5b-bcf9625e1721_5400x3336.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>A rough popularity map, not a quality ranking.</em></figcaption></figure></div><p>A skill is the unit of reuse for a coding agent. It is a folder with a <code>SKILL.md</code> that teaches the agent a capability once so you stop re-explaining it in every session, and the agent loads it only when the task calls for it. If you want the background, Anthropic&#8217;s <a href="https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills">Equipping agents for the real world with Agent Skills</a> and the <a href="https://code.claude.com/docs/en/skills">Claude Code skills docs</a> are the two primary sources worth reading first.</p><p>This is a companion to <a href="https://generativeprogrammer.com/p/the-agentic-coding-reading-list">The Agentic Coding Reading List</a>. That list curated the people worth following. This one curates the capabilities worth installing.</p><p>The thesis: the best skill is usually the one you write for your own codebase. But you should not start from a blank folder. Install the proven ones first, learn the shape, then write your own. Every link below was checked live. Here is the shelf.</p><h2><strong>The short version</strong></h2><p>If you only want the install path, use this order:</p><ol><li><p>Start with the official repositories to learn what a good <code>SKILL.md</code> looks like.</p></li><li><p>Bookmark the marketplaces and awesome lists for discovery.</p></li><li><p>Install one workflow framework before collecting individual tricks.</p></li><li><p>Add vendor skills for the stack you actually use.</p></li><li><p>Write your own skill when you repeat the same instruction three times.</p></li></ol><blockquote><p><strong>Skills are going portable.</strong> They began in the Claude ecosystem, but the <code>SKILL.md</code> format is spreading. OpenAI now documents <a href="https://help.openai.com/en/articles/20001066-skills-in-chatgpt">skills in ChatGPT</a> and <a href="https://developers.openai.com/codex/skills">Agent Skills for Codex</a>, and several collections here already run across Claude Code, Codex, Cursor, and Gemini. Pick skills for what they do, not for one vendor.</p></blockquote><h2><strong>Where to get them</strong></h2><p>Before any single skill, know where they live. Start at the source and work outward.</p><ul><li><p><strong><a href="https://github.com/anthropics/skills">anthropics/skills</a></strong> is the official Claude repository and the right first stop. It holds the document skills that ship with Claude, the <code>mcp-builder</code>, and <code>skill-creator</code>, which appears again at the end of this post. Reading a few of these is the fastest way to learn what a good <code>SKILL.md</code> looks like.</p></li><li><p><strong><a href="https://github.com/openai/skills">openai/skills</a></strong> is the same idea from the other side: the official skills catalog for Codex, including ready-made integrations like a <a href="https://github.com/openai/skills/blob/main/skills/.curated/linear/SKILL.md">Linear skill</a>. Its existence is the clearest signal that skills are becoming a cross-agent format, not just a Claude convention.</p></li><li><p><strong><a href="https://skillsmp.com/">Claude Skills Marketplace</a></strong> is the searchable directory of community skills, where you go when you have a specific job in mind and want to see what already exists before writing anything yourself.</p></li><li><p><strong><a href="https://smithery.ai/">Smithery</a></strong> is a registry for skills and MCP servers with one-command installs, for when you want to wire something up quickly rather than clone and copy files by hand.</p></li><li><p><strong><a href="https://www.agensi.io/">Agensi</a></strong> rounds out the set as a marketplace that includes paid skills. Worth knowing the commercial layer exists, even if most of what you install will be free.</p></li></ul><h2><strong>The collections I keep bookmarked</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_!gX5b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gX5b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png 424w, https://substackcdn.com/image/fetch/$s_!gX5b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png 848w, https://substackcdn.com/image/fetch/$s_!gX5b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png 1272w, https://substackcdn.com/image/fetch/$s_!gX5b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gX5b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png" width="1456" height="934" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:934,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:735160,&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://generativeprogrammer.com/i/201968309?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.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_!gX5b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png 424w, https://substackcdn.com/image/fetch/$s_!gX5b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png 848w, https://substackcdn.com/image/fetch/$s_!gX5b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png 1272w, https://substackcdn.com/image/fetch/$s_!gX5b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd198f3d9-ecf1-401c-8f1e-361370ec27aa_5360x3440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>The useful takeaway is not &#8220;install the biggest box,&#8221; but &#8220;study what is gaining traction and why.&#8221;</em></figcaption></figure></div><p>Three curated lists do the filtering for you. When a new skill trends, it usually shows up in one of these before it reaches the official repos.</p><ul><li><p><strong><a href="https://github.com/ComposioHQ/awesome-claude-skills">ComposioHQ/awesome-claude-skills</a></strong> is the broad awesome list for Claude skills, resources, and tools. The first place I check when I want a map of the whole landscape.</p></li><li><p><strong><a href="https://github.com/VoltAgent/awesome-agent-skills">VoltAgent/awesome-agent-skills</a></strong> collects over a thousand skills from official dev teams and the community, tagged by which agents they run on. Stronger on cross-CLI coverage if you are not Claude-only.</p></li><li><p><strong><a href="https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering">Agent-Skills-for-Context-Engineering</a></strong>, by Murat Can Koylan, is the focused one: skills for context engineering, multi-agent architectures, and production agent systems. Reach for it when you are building agents, not just using them.</p></li></ul><h2><strong>Start with a framework, not a single skill</strong></h2><p>The highest-leverage move is not one skill but a coherent collection that brings a whole way of working. Here is what I run, plus two widely watched collections worth studying.</p><ul><li><p><strong><a href="https://github.com/obra/superpowers">superpowers</a></strong>, by Jesse Vincent, is an agentic skills framework and development methodology rather than a loose bag of tricks. It gives the agent disciplined habits: brainstorming before building, test-driven development, systematic debugging, writing and executing plans, and asking for review at the right moments. This is the one I run daily because it changes how the agent works, not just what it knows.</p></li><li><p><strong><a href="https://github.com/multica-ai/andrej-karpathy-skills">andrej-karpathy-skills</a></strong> distills Andrej Karpathy&#8217;s observations about where language models go wrong when they write code into a single drop-in guardrail. Also installed here, and a small one with an outsized effect: it heads off common failure modes before they reach your diff.</p></li><li><p><strong><a href="https://github.com/garrytan/gstack">gstack</a></strong>, by Garry Tan, is his exact Claude Code setup packaged for anyone to adopt: a couple of dozen opinionated tools standing in for a CEO, designer, engineering manager, release manager, and QA. Reach for it when you want a complete, pre-wired way of working rather than parts to assemble.</p></li><li><p><strong><a href="https://github.com/mattpocock/skills">mattpocock/skills</a></strong>, by Matt Pocock, is &#8220;skills for real engineers, straight from my .claude directory.&#8221; A working practitioner&#8217;s actual setup is often more useful than anything built to be shared.</p></li></ul><h2><strong>Best practices for your stack</strong></h2><p>One of the most useful categories is official skills from the tools you already build on. It points at a real shift in how vendors ship knowledge. Instead of a documentation site you are meant to read, more teams now ship a skill the agent runs: best practices made prescriptive and executable rather than left as a guide you hope someone follows.</p><p>These are the ones I install to match my own stack.</p><ul><li><p><strong><a href="https://github.com/planetscale/database-skills">database-skills</a></strong>, from PlanetScale, teaches the agent to work with databases properly, schemas, queries, and migrations, instead of inventing SQL that looks right and breaks quietly. Pair it with <strong><a href="https://github.com/neondatabase/agent-skills">neondatabase/agent-skills</a></strong> for Neon&#8217;s serverless Postgres, including a <a href="https://github.com/neondatabase/agent-skills/blob/main/skills/claimable-postgres/SKILL.md">claimable Postgres</a> skill that hands the agent a real database, and <strong><a href="https://github.com/redis/agent-skills">redis/agent-skills</a></strong> for caching done right.</p></li><li><p><strong><a href="https://github.com/vercel-labs/next-skills">next-skills</a></strong>, from Vercel&#8217;s engineering team, carries the frontend half, with a <a href="https://github.com/vercel-labs/next-skills/tree/main/skills/next-best-practices">next-best-practices</a> skill that keeps the agent inside the framework&#8217;s intended patterns. <strong><a href="https://github.com/supabase/agent-skills">supabase/agent-skills</a></strong> does the same for the Supabase platform.</p></li><li><p>The vendor roster now reads like a stack diagram: <strong><a href="https://github.com/stripe/ai">Stripe</a></strong> for payments, <strong><a href="https://github.com/cloudflare/skills">Cloudflare</a></strong> for the edge, <strong><a href="https://github.com/hashicorp/agent-skills">HashiCorp</a></strong> for Terraform, <strong><a href="https://github.com/huggingface/skills">Hugging Face</a></strong> for models, and <strong><a href="https://github.com/trailofbits/skills">Trail of Bits</a></strong> for security, alongside Netlify, Sanity, WordPress, and Expo. Check whether the tools you depend on ship one. Increasingly, they do.</p></li></ul><h2><strong>Pick a skill for your job</strong></h2><p>Past the frameworks, the rest is role-specific. Depending on what you do, grab the skill that matches your job. There are far more than these, but four map cleanly to four kinds of work. Follow this far enough and you will want one that does not exist yet, which is the next section.</p><ul><li><p><strong>Software engineers</strong> want <strong><a href="https://github.com/addyosmani/agent-skills">agent-skills</a></strong>, from Addy Osmani: a collection of production-grade engineering skills, less a single trick than a framework for the way careful, maintainable code gets written.</p></li><li><p><strong>Designers</strong> want <strong><a href="https://github.com/nexu-io/open-design">open-design</a></strong>, by Nexu, a local-first, open alternative to Claude&#8217;s design tooling that turns the agent into something that can generate interfaces, prototypes, and slides across several agent CLIs.</p></li><li><p><strong>Anyone who writes</strong> wants <strong><a href="https://github.com/blader/humanizer">humanizer</a></strong>, which strips the tells out of AI-generated prose, the giveaway phrasing and rhythm that make a draft read like a machine wrote it.</p></li><li><p><strong>Researchers and the perpetually curious</strong> want <strong><a href="https://github.com/mvanhorn/last30days-skill">last30days-skill</a></strong>, by Matt Van Horn, which researches any topic across Reddit, X, YouTube, Hacker News, Polymarket, and the open web, then synthesizes a grounded summary. Not writing code, but gathering current signal before you do.</p></li></ul><h2><strong>When none of these fit, build your own</strong></h2><p>Follow the list this far and you will hit the skill that should exist but does not. Once you have seen the shape of a good <code>SKILL.md</code>, your own repeated instructions are the next thing to capture, and two skills exist to help you do exactly that.</p><ul><li><p><strong><a href="https://github.com/anthropics/skills/tree/main/skills/skill-creator">skill-creator</a></strong> is Anthropic&#8217;s skill that builds skills. It scaffolds a new one and, in the spirit of the methodology, has you run it on a few test cases and read the transcripts before you trust it.</p></li><li><p><strong><a href="https://github.com/yusufkaraaslan/Skill_Seekers">Skill_Seekers</a></strong>, by Yusuf Karaaslan, comes at it from the other direction: it converts documentation sites, GitHub repositories, and PDFs into skills automatically, with conflict detection. This is the fast path when the knowledge you want already exists as docs and you just need it packaged.</p></li></ul><h2><strong>Where skills and MCP blur</strong></h2><p>Not everything useful is packaged as a skill yet, and the line between a skill and an MCP server is getting thinner. Two tools make the point better than another definition.</p><ul><li><p><strong><a href="https://github.com/upstash/context7">context7</a></strong>, from Upstash, pulls up-to-date, version-correct documentation and code examples for a library straight into the model&#8217;s context, so the agent stops writing against an API it half-remembers from training. It is also the cleanest example of the shift: it ships as an MCP server, a CLI, and a skill. Same capability, packaged three ways, installed however your setup prefers. I keep it on.</p></li><li><p><strong>Playwright</strong> is the same split caught live. Microsoft&#8217;s <a href="https://github.com/microsoft/playwright-mcp">playwright-mcp</a> is a widely used way to give an agent real browser control for automation and testing, and it is an MCP server. <a href="https://github.com/lackeyjb/playwright-skill">playwright-skill</a>, by Jordan Lackey, rebuilds that capability as a model-invoked skill that writes and runs its own browser automation. Try both: the MCP if you want the mature option today, the skill if you want the load-only-when-needed behavior that context7 already points toward.</p></li></ul><h2><strong>The takeaway</strong></h2><p>The marketplaces will tempt you with thousands of skills. That number is a trap. A handful you actually understand and trust will do more for your work than a directory you never open, the same way a short reading list of durable sources beats an endless feed.</p><p>Bookmark the collections, run a framework that changes how your agent works, add the vendor skills that match your stack, grab the one that fits your job, and then write the one that does not exist yet. That last one is the point of all the others.</p><p>Subscribe to <strong>Generative Programmer</strong> for practical maps, pattern catalogs, and production lessons for AI coding agents and agentic developer tools.</p><p><em>This is a living document. Last checked: 2026-06-14. If a skill here has moved or you think something essential is missing, tell me and I will update it.</em></p>]]></content:encoded></item><item><title><![CDATA[From Test-Driven to Loop-Driven Development]]></title><description><![CDATA[The evolution of AI coding from tests and prompts to agents, harnesses, and supervised loops.]]></description><link>https://generativeprogrammer.com/p/from-test-driven-to-loop-driven-development</link><guid isPermaLink="false">https://generativeprogrammer.com/p/from-test-driven-to-loop-driven-development</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Thu, 11 Jun 2026 11:17:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1737fb64-0117-4d4e-928c-dd1dc5c1dca8_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Software engineering was always a loop. You change something, run it, check the result, and repeat. <a href="https://martinfowler.com/bliki/TestDrivenDevelopment.html">Test-driven development</a> made this loop explicit: write a failing test, make it pass, then refactor. The loop is small, fast, and grounded in feedback.</p><p>Other development practices widened the same idea. Behaviour-Driven Development (BDD) moved the loop toward shared behavior and examples. Acceptance testing moved it toward user-visible definitions of done. CI moved it into the delivery pipeline. The shape stayed the same: define the next bit of intent, run the system, check the result, and tighten the design.</p><p>AI is widening the loop again. The thing inside one iteration used to be a line, a function, or a failing test. Now it can be a task, a pull request, a migration, or a recurring workflow. That is what I mean by <strong>loop-driven development</strong>: the engineer designs the trigger, goal, context, harness, verifier, and state around an agent loop.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xmo4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xmo4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png 424w, https://substackcdn.com/image/fetch/$s_!Xmo4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png 848w, https://substackcdn.com/image/fetch/$s_!Xmo4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png 1272w, https://substackcdn.com/image/fetch/$s_!Xmo4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xmo4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png" width="1456" height="676" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:676,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:782293,&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://generativeprogrammer.com/i/201576805?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.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_!Xmo4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png 424w, https://substackcdn.com/image/fetch/$s_!Xmo4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png 848w, https://substackcdn.com/image/fetch/$s_!Xmo4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png 1272w, https://substackcdn.com/image/fetch/$s_!Xmo4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31896dc1-17eb-4a6a-902d-611527fcdf6c_5146x2390.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>The Evolution of AI Coding. Autocomplete, Prompt Engineering, Context Engineering, Harness Engineering, and Loop Engineering.</em></figcaption></figure></div><p>This is not a claim that agents can safely own arbitrary software delivery. It is the opposite. The more autonomy you give the loop, the stronger the checks have to become. TDD did not remove engineering judgment. It pushed judgment into tests and refactoring. Loop-driven development does the same at a larger scale.</p><h2><strong>The progression is additive</strong></h2><p>The useful parts of each era do not disappear. Each era keeps the previous layer and adds a new control surface.</p><p>The progression looks like this:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;816a9ccf-ce62-4c97-86da-5334bf94b960&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">code completion -&gt; prompt loop -&gt; repo context -&gt; harness -&gt; supervised loop</code></pre></div><p>The unit of work keeps getting wider, and the engineer&#8217;s leverage point keeps moving up.</p><h2><strong>1. Autocomplete</strong></h2><p><strong>2021-2022</strong></p><p>Autocomplete put the model inside the editor. <a href="https://github.blog/news-insights/product-news/introducing-github-copilot-ai-pair-programmer/">GitHub Copilot</a> made this mainstream by drawing context from the code being edited and suggesting whole lines or functions. <a href="https://cursor.com/help/ai-features/tab">Cursor Tab</a> belongs in the same era. It is the completion side of Cursor, where the model predicts the next edit and the developer accepts or rejects it while writing code.</p><p>The loop still lives mostly in the developer&#8217;s hands. You type, inspect the suggestion, accept or reject it, and continue. The benefit is speed: less boilerplate, fewer mechanical edits, and faster movement through familiar code. The limit is scope. The model helps with the next edit, but it does not own the task.</p><p>What got added:</p><ul><li><p>Model</p></li><li><p>Local file context</p></li><li><p>Inline completion</p></li></ul><p>This was the <strong>Autocomplete</strong> era.</p><h2><strong>2. Prompt Engineering</strong></h2><p><strong>2022-2023</strong></p><p>The next step was to move from completion to task steering. <a href="https://arxiv.org/abs/2210.03629">ReAct</a> was not a coding assistant, but it gave agents an important primitive: reason, act, observe, repeat. The model could think about a step, call a tool, read the result, and continue.</p><p><a href="https://github.com/Significant-Gravitas/AutoGPT">AutoGPT</a> made the idea feel autonomous. Instead of asking for one answer, you gave the system a goal and let it prompt itself. That shift created the first native discipline of this era: prompt engineering. The developer was no longer only writing code. The developer was writing instructions that caused code to be written.</p><p>I still believe this skill never fully goes away. You have to know how to talk to these models well, in one form or another, which is what I have been collecting in my <a href="https://leanpub.com/prompt-patterns">Prompt Patterns</a> book.</p><p>The benefit was delegation at the task level. You could ask for a script, a test suite, an investigation, or a migration plan. The limit was convergence. A prompt loop without disciplined context and a reliable stop condition can drift, repeat itself, or optimize for the wrong thing.</p><p>What got added:</p><ul><li><p>&#10003; Model</p></li><li><p>Tools</p></li><li><p>Goal</p></li><li><p>Prompt loop</p></li></ul><p>This was the <strong>Prompt Engineering</strong> era.</p><h2><strong>3. Context Engineering</strong></h2><p><strong>2024-2025</strong></p><p>Once agents could act, the bottleneck became what they could see. A coding agent needs repo context, not only a prompt. It needs files, tests, logs, conventions, architecture notes, issue history, and the current state of the work.</p><p>This is where <a href="https://cursor.com/docs/agent/overview">Cursor Agent</a>, <a href="https://docs.devin.ai/get-started/devin-intro">Devin</a>, and <a href="https://ghuntley.com/loop/">Ralph-style loops</a> fit. Cursor Agent moves beyond tab completion into autonomous coding tasks, terminal commands, and file edits. Devin is positioned as an autonomous software engineer that can write, run, and test code. <a href="https://ghuntley.com/ralph/">Ralph</a> made a narrower but important point: durable state should live in files and git, not only in the chat transcript.</p><p>The benefit is scope. Agents can work across files, run commands, inspect failures, and make repo-aware changes. The limit is that context is not correctness. A well-contextualized agent can still finish the wrong task unless the environment can tell it what done means.</p><p>I wrote about the broader tool landscape in <a href="https://generativeprogrammer.com/p/ai-coding-assistants-landscape">AI Coding Assistants Landscape</a>. The pattern that matters here is the move from assistant-in-editor to agent-in-codebase.</p><p>What got added:</p><ul><li><p>&#10003; Model</p></li><li><p>&#10003; Tools</p></li><li><p>&#10003; Goal</p></li><li><p>Repo context</p></li><li><p>Terminal / files</p></li><li><p>Tests</p></li></ul><p>This was the <strong>Context Engineering</strong> era.</p><h2><strong>4. Harness Engineering</strong></h2><p><strong>2025-2026</strong></p><p>A harness is the environment a single agent runs inside. It includes the prompt, repo context, tools, sandbox, permissions, tests, linters, type checks, CI, evals, and review gates. The point of a harness is not to make the model magically correct. The point is to make the work observable, constrained, and checkable.</p><p><a href="https://openai.com/index/introducing-codex/">OpenAI Codex</a> is a clear example. Codex runs in isolated cloud containers, works against the provided repository, edits files, runs commands, and can propose changes for review. OpenAI&#8217;s own <a href="https://openai.com/index/harness-engineering/">harness engineering</a> write-up describes the role shift directly: engineers design environments, specify intent, and build feedback loops that let agents do reliable work. <a href="https://github.com/anthropics/claude-code">Claude Code</a> fits the same era from the terminal side: it understands a codebase, edits files, runs commands, and handles git workflows.</p><p>This is why I think the harness framing is more useful than another prompt taxonomy. In <a href="https://generativeprogrammer.com/p/12-agentic-harness-patterns-from">12 Agentic Harness Patterns from Claude Code</a>, I broke the harness into reusable patterns: persistent instructions, scoped context, memory tiers, tool permissions, lifecycle hooks, and workflow separation. In <a href="https://generativeprogrammer.com/p/the-missing-quality-layer-for-ai">The Missing Quality Layer for AI Coding Agents</a>, I argued that the next bottleneck is proving the diff is safe to review, not generating the diff.</p><p>The benefit is repeatability. The agent no longer just generates code. It runs inside a system that can reject bad work. Deterministic checks should come first: tests, builds, type checks, lint, contract tests, benchmarks, screenshots, traces, and CI. Model-based judging can help with subjective checks, but maker and checker should be separated. These checks matter most when they push back on the agent in the moment rather than after the fact, giving the loop <a href="https://generativeprogrammer.com/p/stop-babysitting-your-coding-agent">backpressure</a> so it self-corrects before a human has to step in.</p><p>What got added:</p><ul><li><p>&#10003; Model</p></li><li><p>&#10003; Tools</p></li><li><p>&#10003; Goal</p></li><li><p>&#10003; Repo context</p></li><li><p>Sandbox</p></li><li><p>Verifier</p></li><li><p>CI / eval harness</p></li></ul><p>This was the <strong>Harness Engineering</strong> era.</p><h2><strong>5. Loop Engineering</strong></h2><p><strong>Now</strong></p><p>Once the harness is reliable, the next layer is the loop that runs it. A loop is not just an automation. An automation executes fixed steps. A loop has a decision inside it. It checks whether the goal is met and decides whether to continue.</p><p>A practical agent loop has five parts:</p><ul><li><p><strong>Trigger:</strong> human kickoff, schedule, or event</p></li><li><p><strong>Goal:</strong> the desired end state</p></li><li><p><strong>Harness:</strong> the environment the agent runs in</p></li><li><p><strong>Verifier:</strong> the check that decides whether to continue</p></li><li><p><strong>State:</strong> memory outside the current model call</p></li></ul><p>This is where current tools are converging. Codex has <code>/goal</code> for long-running work with a verifiable stopping condition and <a href="https://developers.openai.com/codex/app/automations">Automations</a> for recurring tasks. Claude Code has <code>/goal</code>, <code>/loop</code>, and scheduled tasks for recurring work. <a href="https://modelcontextprotocol.io/docs/getting-started/intro">MCP</a> gives agents a standard way to connect to external tools and data sources. Addy Osmani&#8217;s <a href="https://addyosmani.com/blog/loop-engineering/">Loop Engineering</a> framing captures the same ingredient set: automations, worktrees, skills, connectors, sub-agents, and memory.</p><p>The benefit is leverage. A loop can watch CI, triage issues, update dependencies, fix flaky tests, chase review feedback, prepare PRs, and keep working until a condition holds. The risk grows with the leverage. A bad prompt wastes a turn. A bad loop can waste hours, mutate the repo, and generate a pile of plausible work that still needs human judgment.</p><p>Skills and playbooks become especially important here. A loop that has to rediscover project conventions every run is fragile. A loop that can call well-scoped skills has a better chance of doing the same work consistently. That is why I see skills as part of the loop substrate, not only better prompt files. I wrote more about that in <a href="https://generativeprogrammer.com/p/9-principles-that-separate-useful">9 Principles That Separate Useful Skills from Markdown Essays</a>.</p><p>What got added:</p><ul><li><p>&#10003; Model</p></li><li><p>&#10003; Tools</p></li><li><p>&#10003; Goal</p></li><li><p>&#10003; Repo context</p></li><li><p>&#10003; Verifier</p></li><li><p>Automations</p></li></ul><ul><li><p>Worktrees</p></li></ul><ul><li><p>Skills / playbooks</p></li></ul><ul><li><p>Connectors (MCP)</p></li></ul><ul><li><p>Durable memory</p></li></ul><ul><li><p>Orchestration</p></li></ul><p>This is the <strong>Loop Engineering</strong> era.</p><h2><strong>The Engineering Leverage Stack</strong></h2><p>What the stack below shows is not five tools but a single control point moving up. Each era lets you author less of the code directly and more of the system that produces it, trading fine-grained control for reach. The higher you stand, the more a single decision is worth, and the more it leans on the checks in the layers beneath 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_!v4zr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v4zr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png 424w, https://substackcdn.com/image/fetch/$s_!v4zr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png 848w, https://substackcdn.com/image/fetch/$s_!v4zr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png 1272w, https://substackcdn.com/image/fetch/$s_!v4zr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v4zr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png" width="1456" height="1015" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1015,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:925031,&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://generativeprogrammer.com/i/201576805?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.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_!v4zr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png 424w, https://substackcdn.com/image/fetch/$s_!v4zr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png 848w, https://substackcdn.com/image/fetch/$s_!v4zr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png 1272w, https://substackcdn.com/image/fetch/$s_!v4zr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb8b95e5-f11a-4109-b1db-379af99b7f55_3660x2551.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>The Engineering Leverage Stack. Each wider loop wraps the previous layer and moves the engineer&#8217;s control point up.</em></figcaption></figure></div><p>A harness is the environment for one agent run. A loop is the control system around that harness. A factory is a system of loops: one loop finds work, another implements it, another verifies it, another opens or updates the PR, and another escalates what needs human judgment.</p><p>That is the leverage shift:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HQ05!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HQ05!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png 424w, https://substackcdn.com/image/fetch/$s_!HQ05!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png 848w, https://substackcdn.com/image/fetch/$s_!HQ05!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!HQ05!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HQ05!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png" width="1456" height="767" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:767,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:505748,&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://generativeprogrammer.com/i/201576805?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.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_!HQ05!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png 424w, https://substackcdn.com/image/fetch/$s_!HQ05!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png 848w, https://substackcdn.com/image/fetch/$s_!HQ05!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!HQ05!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb11dca77-9fa1-48a6-8805-e22efdd05566_2228x1174.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The important word is <strong>wrap</strong>. Prompting did not replace coding. Context did not replace prompting. Harnesses did not replace context. Loops do not replace harnesses. Each layer wraps the one below and changes where engineering judgment is applied.</p><h2><strong>What loop-driven development means</strong></h2><p>Loop-driven development is TDD at a larger unit of intent. In TDD, the loop wraps a unit of behavior: write the failing test, make it pass, refactor. In loop-driven development, the loop can wrap a task, a PR, a migration, or a recurring workflow.</p><p>The verifier is the difference between a loop and a vibe. Without a verifier, you have repeated prompting. With a verifier, the loop can converge. The verifier can be deterministic, like tests and builds, or probabilistic, like a separate reviewer model, but it has to exist outside the agent&#8217;s desire to be done.</p><p>This is also where the human role becomes more important, not less. The engineer chooses the goal, designs the context, sets the permissions, defines the checks, reviews the result, and decides what risks are acceptable. The loop can run faster than you can type, but it cannot decide what should matter.</p><h2><strong>The takeaway</strong></h2><p>Software was always written in a loop. TDD made the loop explicit around behavior. BDD and acceptance testing widened it toward product intent. AI is widening it again around agents, harnesses, and recurring workflows.</p><p>That is the shift from test-driven to loop-driven development.</p><p>Not because tests stop mattering. Because tests, evals, reviewers, sandboxes, worktrees, skills, memory, and CI are becoming parts of a larger loop.</p><p>Build the loop. Stay the engineer.</p><div><hr></div><p><em>Subscribe to <a href="https://generativeprogrammer.com/">The Generative Programmer</a> for practical maps, pattern catalogs, and production notes on AI coding agents.</em></p>]]></content:encoded></item><item><title><![CDATA[Stop Babysitting Your Coding Agent. Give It Backpressure.]]></title><description><![CDATA[Backpressure is feedback that reaches the agent before the agent reaches the human.]]></description><link>https://generativeprogrammer.com/p/stop-babysitting-your-coding-agent</link><guid isPermaLink="false">https://generativeprogrammer.com/p/stop-babysitting-your-coding-agent</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sat, 06 Jun 2026 12:56:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/60128a26-f360-4dcd-bea5-4261b024dd89_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The Backpressure Loop is becoming one of the defining patterns for successful coding agents. Agents can generate code quickly, but generation without feedback is still an open loop: the agent produces a diff, yet it cannot tell whether the diff is correct, useful, safe, or ready unless the system pushes back. Backpressure can come from a type checker, a test, a linter, a build, a browser check, logs, traces, structural rules, or evals. The source matters less than the loop: the agent sees the failure, repairs the work, and tries again.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cCoC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cCoC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png 424w, https://substackcdn.com/image/fetch/$s_!cCoC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png 848w, https://substackcdn.com/image/fetch/$s_!cCoC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png 1272w, https://substackcdn.com/image/fetch/$s_!cCoC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cCoC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:877,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:340654,&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://generativeprogrammer.com/i/196319292?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.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_!cCoC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png 424w, https://substackcdn.com/image/fetch/$s_!cCoC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png 848w, https://substackcdn.com/image/fetch/$s_!cCoC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png 1272w, https://substackcdn.com/image/fetch/$s_!cCoC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1eb4b15-80cb-4d25-ac99-d051f47d4a47_6640x4000.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The failure mode is simple: the agent produces code faster than the engineering system can push back on bad output. Without that pushback, the human becomes the compiler, the test runner, the linter, the UI checker, and the reviewer. Every trivial mistake waits for a person to notice it, explain it, and send the agent back for another attempt.</p><p>That is not review. That is babysitting.</p><p>In <a href="https://banay.me/dont-waste-your-backpressure/">Don&#8217;t waste your back pressure</a>, Moss Banay describes this as wasted human backpressure: spending attention on mistakes the agent should have been able to detect itself, such as missing imports, broken builds, and visual errors.</p><p>I call this the <strong>Backpressure Loop Pattern</strong>.</p><h2><strong>The problem</strong></h2><p>A coding agent is a fast producer. The human reviewer is a slow consumer.</p><p>That mismatch creates pressure. If the only meaningful feedback comes from the human, every failure becomes review work. The agent writes code, the human spots a broken test, the human explains the failure, and the agent retries.</p><p>That loop does not scale.</p><p>Marc Brooker makes the deeper point in <a href="https://brooker.co.za/blog/2026/05/18/whats-easy-whats-hard.html">What&#8217;s Easy Now? What&#8217;s Hard Now?</a>: agents are feedback loops around a useful but flawed model. The key shift is moving feedback from the human loop into the agent loop: build, test, inspect, repair, and iterate.</p><p>So the question is not only:</p><blockquote><p>How good is the model?</p></blockquote><p>The better question is:</p><blockquote><p>What feedback can the agent use without asking me?</p></blockquote><h2><strong>The pattern</strong></h2><p><strong>Intent:</strong> Move cheap correctness checks out of human review and into the agent loop.</p><p><strong>Context:</strong> A coding agent can edit files, run commands, read failures, and retry.</p><p><strong>Problem:</strong> Agents produce code faster than humans can validate it.</p><p><strong>Solution:</strong> Expose fast, machine-readable feedback sensors to the agent: types, tests, linters, builds, browser checks, logs, traces, and structural rules.</p><p><strong>Result:</strong> The agent fixes mechanical failures before review. The human focuses on intent, design, and trade-offs.</p><h2><strong>What counts as backpressure</strong></h2><p>Backpressure is any signal that can push back on bad agent output before a human spends attention on 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_!s3hA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s3hA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png 424w, https://substackcdn.com/image/fetch/$s_!s3hA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png 848w, https://substackcdn.com/image/fetch/$s_!s3hA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png 1272w, https://substackcdn.com/image/fetch/$s_!s3hA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s3hA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png" width="1456" height="1096" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1096,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:298407,&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://generativeprogrammer.com/i/196319292?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.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_!s3hA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png 424w, https://substackcdn.com/image/fetch/$s_!s3hA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png 848w, https://substackcdn.com/image/fetch/$s_!s3hA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png 1272w, https://substackcdn.com/image/fetch/$s_!s3hA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05fc225c-55a0-46cf-bbad-dbc706ac48ad_4240x3192.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Thoughtworks calls these <a href="https://www.thoughtworks.com/radar/techniques/feedback-sensors-for-coding-agents">feedback sensors for coding agents</a>: deterministic quality gates wired into agent workflows so failures trigger self-correction.</p><p>That distinction matters:</p><ul><li><p>A CI failure after the agent is done is a gate.</p></li><li><p>A failure the agent sees while working is backpressure.</p></li></ul><h2><strong>A green build is not enough</strong></h2><p>A green build is useful, but narrow.</p><p>It tells you the code compiled, the formatter ran, and the existing tests passed. It does not prove the product rule survived. It does not prove the generated test asserts meaningful behavior. It does not prove the refactor respected the architecture.</p><p>So the goal is not just &#8220;run CI earlier.&#8221;</p><p>The goal is to make feedback fast, specific, and actionable enough for the agent to repair the work.</p><p>Bad feedback:</p><pre><code>The code is wrong.</code></pre><p>Better feedback:</p><pre><code>auth/session.test.ts failed.
Expected expired sessions to redirect to /login.
Received 200 from /dashboard.
Fix the session expiration path.
Do not change the test.</code></pre><p>The second version gives the agent something to do.</p><h2><strong>Effective feedback beats more feedback</strong></h2><p>More output is not the same as better backpressure.</p><p>A recent arXiv preprint, <a href="https://arxiv.org/abs/2605.29682">Scaling Laws for Agent Harnesses via Effective Feedback Compute</a>, makes this point in research terms. The authors argue that agent harnesses scale less with raw tokens, tool calls, wall time, or cost, and more with how efficiently they convert raw budget into useful feedback.</p><p><mark data-color="#cfe2f3" style="background-color: rgb(207, 226, 243); color: rgb(0, 0, 0);">They call this </mark><strong><mark data-color="#cfe2f3" style="background-color: rgb(207, 226, 243); color: rgb(0, 0, 0);">Effective Feedback Compute</mark></strong><mark data-color="#cfe2f3" style="background-color: rgb(207, 226, 243); color: rgb(0, 0, 0);">: feedback that is informative, valid, non-redundant, and retained for later decisions.</mark></p><p>That maps directly to coding agents.</p><p>A test failure is useful only if the agent can understand it, trust it, avoid repeating it, and use it to change the next attempt.</p><p>Useful backpressure has four properties:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sLbi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sLbi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png 424w, https://substackcdn.com/image/fetch/$s_!sLbi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png 848w, https://substackcdn.com/image/fetch/$s_!sLbi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png 1272w, https://substackcdn.com/image/fetch/$s_!sLbi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sLbi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png" width="1456" height="445" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:445,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:328514,&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://generativeprogrammer.com/i/196319292?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.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_!sLbi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png 424w, https://substackcdn.com/image/fetch/$s_!sLbi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png 848w, https://substackcdn.com/image/fetch/$s_!sLbi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png 1272w, https://substackcdn.com/image/fetch/$s_!sLbi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1956ca83-4356-4a4b-b548-8df1409f8af0_2658x812.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That is why a thousand lines of logs can be worse than a short, structured failure.</p><p>The goal is not more agent activity. The goal is more effective feedback.</p><h2><strong>How to implement it</strong></h2><p>Start with the boring checks.</p><p>Put the exact commands in <code>AGENTS.md</code>, <code>CLAUDE.md</code>, or the equivalent project instruction file:</p><pre><code>After changing TypeScript:
- run npm run typecheck
- run npm run lint
- run npm test -- --changed
- fix failures before opening a PR</code></pre><p>Then make the output efficient.</p><p>Do not dump hundreds of lines of passing test output into the agent context. Passing checks should be tiny. Failing checks should show the useful detail.</p><p>HumanLayer describes this as <a href="https://www.humanlayer.dev/blog/context-efficient-backpressure">context-efficient backpressure</a>: replace passing test, build, and lint output with a small success signal, but expose full output when a command fails.</p><p>Example:</p><pre><code>&#10003; typecheck
&#10003; lint
&#10007; auth tests
FAIL auth/session.test.ts
Expected redirect to /login for expired session.
Received 200 from /dashboard.</code></pre><p>That is enough signal for the agent to continue.</p><p>The rule:</p><blockquote><p>Success should be compressed. Failure should be actionable.</p></blockquote><h2><strong>The trade-off</strong></h2><p>Backpressure is not free.</p><p>Fast sensors improve flow, but slow sensors choke it.</p><p>Do not put every possible check inside the inner loop. Layer them.</p><pre><code>In session:
typecheck, lint, focused tests, build, screenshots
Before PR:
full tests, integration tests, structural rules, security checks
Scheduled or explicit:
mutation testing, fuzzing, semantic evals, architecture drift review</code></pre><p>Birgitta B&#246;ckeler&#8217;s <a href="https://martinfowler.com/articles/sensors-for-coding-agents.html">Maintainability sensors for coding agents</a> is useful here because it separates sensors that run during the coding session from sensors that belong in the pipeline, on a schedule, or in production.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XnrS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XnrS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png 424w, https://substackcdn.com/image/fetch/$s_!XnrS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png 848w, https://substackcdn.com/image/fetch/$s_!XnrS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png 1272w, https://substackcdn.com/image/fetch/$s_!XnrS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XnrS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png" width="1456" height="979" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:979,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:229118,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/196319292?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!XnrS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png 424w, https://substackcdn.com/image/fetch/$s_!XnrS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png 848w, https://substackcdn.com/image/fetch/$s_!XnrS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png 1272w, https://substackcdn.com/image/fetch/$s_!XnrS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0253271a-fac6-4475-ad24-0478ad1d3a3a_4400x2960.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That is the right mental model: not every check belongs in the same loop.</p><p>The inner loop should be fast enough that the agent can run it repeatedly. Slower checks belong outside the session unless the task is risky enough to justify the cost.</p><h2><strong>The rule</strong></h2><p>When you correct the same agent mistake twice, turn it into backpressure.</p><p>A test.<br>A type.<br>A linter rule.<br>A build check.<br>A browser assertion.<br>A better error message.<br>A small script the agent can run before it asks for review.</p><p>The future skill is not asking agents to try harder.</p><p>It is designing feedback loops that make bad output harder to accept.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.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">Paid subscribers get a free copy of my Prompt Patterns book ($25 value), including all future editions, and updates.</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><p></p>]]></content:encoded></item><item><title><![CDATA[The Missing Quality Layer for AI Coding Agents]]></title><description><![CDATA[As coding agents get better at writing code, the next challenge is proving the code is safe to merge.]]></description><link>https://generativeprogrammer.com/p/the-missing-quality-layer-for-ai</link><guid isPermaLink="false">https://generativeprogrammer.com/p/the-missing-quality-layer-for-ai</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Fri, 29 May 2026 13:36:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GJae!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There is a growing trend with more experienced teams adopting coding agents. They are moving past the first-order question of whether Claude Code, Cursor, Codex, or similar tools can write useful code. The answer is increasingly yes. The harder question is what has to exist around those agents before teams can trust the code they produce.</p><p>That shift matters because coding agents make the first draft cheaper, but they do not make quality automatic. A green build is still a narrow signal. It tells you the code compiled, the formatter ran, and the existing tests passed. It does not tell you whether the agent preserved the product rule, whether a generated test asserts real behavior, whether a refactor crossed an architectural boundary, or whether an installed MCP server had access to credentials it should never see.</p><p>The trend I&#8217;m seeing is the emergence of a quality layer around agentic coding. It sits between the agent and the pull request. Its job is to give the agent useful feedback while it works, constrain risky changes before they grow, and leave enough evidence behind for humans to understand what happened later.</p><p>This is where <a href="https://martinfowler.com/articles/sensors-for-coding-agents.html">Birgitta B&#246;ckeler&#8217;s work on maintainability sensors for coding agents</a> is useful. She describes how agents can quietly compound inadvertent technical debt when they lack the right feedback signals. OpenAI&#8217;s <a href="https://openai.com/index/harness-engineering/">Codex engineering team describes a similar discipline as harness engineering</a>: custom checks, architectural constraints, and repository-level quality signals become part of the environment agents work inside.</p><p>I think of this as the agent quality layer. It has two jobs: catch mistakes before they become review work, and prove where the work came from after it lands.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GJae!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GJae!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png 424w, https://substackcdn.com/image/fetch/$s_!GJae!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png 848w, https://substackcdn.com/image/fetch/$s_!GJae!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png 1272w, https://substackcdn.com/image/fetch/$s_!GJae!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GJae!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:848477,&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://generativeprogrammer.com/i/199442793?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.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_!GJae!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png 424w, https://substackcdn.com/image/fetch/$s_!GJae!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png 848w, https://substackcdn.com/image/fetch/$s_!GJae!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png 1272w, https://substackcdn.com/image/fetch/$s_!GJae!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7824ecb2-2e7f-4e09-a2d7-22615c42c17c_6880x3840.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This post covers five practical controls for that layer. Each one names a failure mode, the control that reduces it, and tools or techniques teams can use today.</p><h2><strong>1. Feedback Sensors</strong></h2><p>A coding agent that produces a diff without compiler feedback turns the human reviewer into the first quality gate. Reviewers end up seeing type errors, broken builds, failing tests, formatting noise, and simple lint violations that should never leave the session.</p><p>Feedback sensors wire deterministic checks directly into the agent&#8217;s loop. Compilers, linters, type checkers, structural tests, and focused test suites run during the session. When a check fails, the agent sees the output and tries again before the human reviews the diff.</p><p>The useful detail is not only running the check, but giving the agent failure messages it can act on. B&#246;ckeler describes embedding self-correction guidance inside lint errors, for example through a custom ESLint formatter. The agent sees what failed, why it failed, and how the team expects the fix to look. OpenAI&#8217;s Codex team describes the same move: custom lint messages carry remediation guidance into the agent context at the point of failure.</p><p><strong>Related tools and techniques.</strong></p><ul><li><p>Start with the compiler, type checker, project-specific lint rules, focused test commands, and build validation for the changed module.</p></li><li><p>Add custom lint formatters for recurring agent mistakes.</p></li><li><p>Use mutation testing tools such as <a href="https://github.com/sourcefrog/cargo-mutants">cargo-mutants</a> when passing tests is not enough evidence that tests assert meaningful behavior.</p></li><li><p>Use fuzzers such as <a href="https://github.com/TNO-S3/WuppieFuzz">WuppieFuzz</a> for API and input-space testing where examples miss edge cases.</p></li><li><p>In Claude Code or Cursor, run fast checks through hooks, tasks, or a reviewer agent so they happen consistently.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ccLp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ccLp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png 424w, https://substackcdn.com/image/fetch/$s_!ccLp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png 848w, https://substackcdn.com/image/fetch/$s_!ccLp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png 1272w, https://substackcdn.com/image/fetch/$s_!ccLp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ccLp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png" width="1456" height="643" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:643,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:102539,&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://generativeprogrammer.com/i/199442793?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.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_!ccLp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png 424w, https://substackcdn.com/image/fetch/$s_!ccLp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png 848w, https://substackcdn.com/image/fetch/$s_!ccLp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png 1272w, https://substackcdn.com/image/fetch/$s_!ccLp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe47c09cf-9077-4185-b0d4-275ba5e9dcdb_3840x1696.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Any team using coding agents on production code. Start with fast checks in the session: lint, types, focused tests, and build validation for the changed module.</p><p><strong>The main trade-off.</strong> Slow sensors choke the loop. Keep fast checks in-session, and push slower checks such as mutation testing, fuzzing, and modularity reviews into CI, scheduled runs, or explicit review passes.</p><h2><strong>2. Semantic Evals</strong></h2><p>Deterministic sensors catch mechanical failures, but they do not catch code that compiles, passes tests, and still does the wrong thing. This is common with agent-generated tests, policy logic, tool-use workflows, data transformations, and customer-facing answers where correctness depends on meaning rather than syntax.</p><p>Semantic evals add probabilistic checks that score output against expected behavior. A semantic eval might verify that a generated test fails for the right reason, that an agent used the correct tool sequence, that a response stayed grounded in retrieved evidence, or that a policy decision matches known examples.</p><p>The eval suite should live near the test suite, but it evaluates agent behavior and generated output rather than only deterministic function results.</p><p><strong>Related tools and techniques.</strong></p><ul><li><p>Keep a small golden set of examples for behavior the agent must preserve.</p></li><li><p>Use <a href="https://github.com/confident-ai/deepeval">DeepEval</a> or a similar framework for tool-use, hallucination, answer-quality, and custom use-case checks.</p></li><li><p>Use LLM-as-judge only with reviewed examples, clear thresholds, and failure review.</p></li><li><p>Consider approaches such as <a href="https://www.nature.com/articles/s41586-024-07421-0">semantic entropy</a> when you need to flag fluent answers that may still be uncertain.</p></li><li><p>For code structure, use LLM-assisted analyzers such as <a href="https://github.com/vladikk/modularity">Vlad Khononov&#8217;s modularity plugin</a> to inspect coupling, abstraction boundaries, and semantic duplication.</p></li><li><p>Combine semantic review with deterministic rules. Do not make model judgment the only gate.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bhyh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bhyh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.png 424w, https://substackcdn.com/image/fetch/$s_!bhyh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.png 848w, https://substackcdn.com/image/fetch/$s_!bhyh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.png 1272w, https://substackcdn.com/image/fetch/$s_!bhyh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bhyh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.png" width="1456" height="798" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.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;:98785,&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://generativeprogrammer.com/i/199442793?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.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_!bhyh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.png 424w, https://substackcdn.com/image/fetch/$s_!bhyh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.png 848w, https://substackcdn.com/image/fetch/$s_!bhyh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.png 1272w, https://substackcdn.com/image/fetch/$s_!bhyh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516ac7cb-7378-49b9-b723-1fb90ca801b8_3680x2016.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Agent-generated logic that affects business decisions, customer workflows, policy interpretation, migrations, or domains where correctness is hard to verify by reading.</p><p><strong>The main trade-off.</strong> Semantic eval is itself probabilistic. False positives train teams to ignore alerts, while false negatives create a false sense of safety. Treat the eval suite as production code: review examples, tune thresholds, and track failures over time.</p><h2><strong>3. Refactor Boundaries</strong></h2><p>Coding agents can rewrite code faster than humans can review it. That speed is useful in clean modules and risky in old, high-churn parts of the codebase. A 2,000-line god class with twelve years of business logic is exactly the kind of structure an agent may confidently refactor, and exactly the kind of structure where a refactor can delete behavior nobody documented.</p><p>Refactor boundaries classify the codebase by complexity, churn, ownership, and architectural risk before the agent starts rewriting. The output is a practical map: green zones for routine edits, yellow zones for scoped changes with focused tests, and red zones where large rewrites need human design first.</p><p>The point is not to block agents from refactoring. The point is to make safe refactoring cheaper than unconstrained rewriting.</p><p><strong>Related tools and techniques.</strong></p><ul><li><p>Use <a href="https://codescene.com/">CodeScene</a> or a similar tool to combine static complexity metrics with version-control history and surface hotspots.</p></li><li><p>Mark high-risk files with CODEOWNERS, required reviewers, or path-based approval rules.</p></li><li><p>Use <a href="https://github.com/sverweij/dependency-cruiser">dependency-cruiser</a>, ArchUnit, or Spring Modulith to enforce module boundaries and dependency direction.</p></li><li><p>Track a lightweight quality score per domain or module, especially in areas where agents make repeated changes.</p></li><li><p>Let agents make small cleanup PRs in green zones, but require a human design step before broad rewrites in red zones.</p></li></ul><p>OpenAI&#8217;s Codex team applies this shape at scale by splitting business domains into fixed layers, tracking per-domain quality, and enforcing architectural boundaries with custom linters. That is the practical lesson: constraints make speed safer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wFdH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wFdH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png 424w, https://substackcdn.com/image/fetch/$s_!wFdH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png 848w, https://substackcdn.com/image/fetch/$s_!wFdH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png 1272w, https://substackcdn.com/image/fetch/$s_!wFdH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wFdH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png" width="1456" height="770" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:770,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:101385,&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://generativeprogrammer.com/i/199442793?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.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_!wFdH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png 424w, https://substackcdn.com/image/fetch/$s_!wFdH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png 848w, https://substackcdn.com/image/fetch/$s_!wFdH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png 1272w, https://substackcdn.com/image/fetch/$s_!wFdH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9df77b-8cda-426d-b57a-fc337d29ae6e_3360x1776.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Any codebase where not every file is equally safe for an agent to touch. This usually starts once the codebase has legacy modules, high-churn hotspots, or undocumented domain rules.</p><p><strong>The main trade-off.</strong> Hotspot maps need calibration. The line between safe and unsafe is judgment, not a constant, so teams should revisit thresholds as the codebase and agent capabilities change.</p><h2><strong>4. Provenance Trails</strong></h2><p>Traditional attribution assumes a human wrote the code. In an AI-assisted codebase, that assumption breaks down because a line may come from a human, an agent, or a mixed session where the human accepted, edited, and committed generated output. <code>git blame</code> shows who committed the line, but not which model, prompt, skill, or tool contributed to it.</p><p>Provenance trails capture attribution for AI-generated changes with enough detail to reconstruct what happened later. At minimum, this means recording whether a change was human-authored, AI-authored, mixed, or unknown. A more useful trace also records the agent, model, prompt or task description, tool calls, installed skills, and the point where a human took over.</p><p>The practical benefit is not only auditability. Humans and agents can query the original intent behind a block of code before changing it again.</p><p><strong>Related tools and techniques.</strong></p><ul><li><p>Start with low-friction provenance in PR metadata: agent used, model, prompt summary, tool summary, and generated files.</p></li><li><p>Use <a href="https://github.com/git-ai-project/git-ai">Git AI</a> when you need commit-level or line-level tracking of AI-generated code.</p></li><li><p>Track attribution with <a href="https://git-scm.com/docs/git-notes">Git Notes</a> or another side channel when you do not want provenance metadata in source files.</p></li><li><p>Watch <a href="https://github.com/cursor/agent-trace">Agent Trace</a>, Cursor&#8217;s proposed format for AI code attribution across version-control systems.</p></li><li><p>Move from PR-level metadata to line-level attribution when audits, compliance, or long-lived generated code justify the cost.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bG7J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bG7J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png 424w, https://substackcdn.com/image/fetch/$s_!bG7J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png 848w, https://substackcdn.com/image/fetch/$s_!bG7J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png 1272w, https://substackcdn.com/image/fetch/$s_!bG7J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bG7J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png" width="1456" height="977" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:977,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:202505,&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://generativeprogrammer.com/i/199442793?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.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_!bG7J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png 424w, https://substackcdn.com/image/fetch/$s_!bG7J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png 848w, https://substackcdn.com/image/fetch/$s_!bG7J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png 1272w, https://substackcdn.com/image/fetch/$s_!bG7J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11b1dc5-e689-4d63-a298-c3f18250e77b_3600x2416.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Teams that need to audit AI contributions, debug generated code, or reconstruct why a piece of code exists months after it was merged.</p><p><strong>The main trade-off.</strong> Attribution metadata grows with the codebase. Storage, query cost, and developer workflow friction are real, so the harness should record provenance automatically instead of relying on manual discipline.</p><h2><strong>5. Agent Surface Inventory</strong></h2><p>The agent&#8217;s surface area is no longer just the model. It includes skills installed in the plugin directory, MCP servers it can call, marketplaces it pulls from, and credentials it can reach. Each one is a dependency, and some of them have more access than a library imported into application code.</p><p>Agent surface inventory treats that surface like a software supply chain. The team keeps an inventory of installed skills, plugins, MCP servers, versions, owners, permissions, credential scopes, and source locations. New entries go through review before they become part of the approved harness, and existing entries are scanned for risky flows.</p><p>This is the same basic discipline teams already apply to package dependencies: know what is installed, know who owns it, pin versions where possible, and review anything that gets access to internal systems.</p><p><strong>Related tools and techniques.</strong></p><ul><li><p>Maintain an allowlist of approved skills, plugins, and MCP servers.</p></li><li><p>Version-pin what is installed.</p></li><li><p>Use least-privilege credentials for MCP servers.</p></li><li><p>Scan local agent directories in CI or on developer machines.</p></li><li><p>Use <a href="https://github.com/snyk/agent-scan">Snyk Agent Scan</a> to inspect MCP servers, skills, and plugins for risks such as prompt injection, tool poisoning, toxic flows, hardcoded secrets, and unsafe credential handling.</p></li><li><p>Use <a href="https://atlas.mitre.org/">MITRE ATLAS</a> as a shared vocabulary for threat modeling AI systems and agentic attack paths.</p></li><li><p>Treat marketplace installs the same way you treat npm, Maven, or container dependencies: reviewed, versioned, and owned.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hpe5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hpe5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png 424w, https://substackcdn.com/image/fetch/$s_!hpe5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png 848w, https://substackcdn.com/image/fetch/$s_!hpe5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png 1272w, https://substackcdn.com/image/fetch/$s_!hpe5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hpe5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png" width="1456" height="788" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:788,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157421,&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://generativeprogrammer.com/i/199442793?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.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_!hpe5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png 424w, https://substackcdn.com/image/fetch/$s_!hpe5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png 848w, https://substackcdn.com/image/fetch/$s_!hpe5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png 1272w, https://substackcdn.com/image/fetch/$s_!hpe5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a836818-83f9-446d-8465-9e9cd7798b2f_3280x1776.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Any team that allows skills, plugins, or MCP servers from sources the team did not author, or any team where agents can reach internal systems through credentials.</p><p><strong>The main trade-off.</strong> Scanners produce noise. Validate signal quality and false-positive rates in the team&#8217;s own environment before scan results become a hard gate, otherwise developers learn to ignore the output.</p><h2><strong>The takeaway</strong></h2><p>AI coding agents make first drafts cheaper, but trust still comes from engineering controls: fast feedback, semantic evals, refactor boundaries, provenance, and agent-surface inventory.</p><p>The <a href="https://www.thoughtworks.com/radar">Thoughtworks Technology Radar</a> is a useful signal that these practices are becoming normal engineering hygiene, not a separate AI ritual. The tools will change, but the quality layer will remain.</p><p>This builds on the foundation I covered in <strong><a href="https://generativeprogrammer.com/p/how-teams-scale-claude-code-across">How Teams Scale Claude Code Across Monorepos and Large Codebases</a></strong><a href="https://generativeprogrammer.com/p/how-teams-scale-claude-code-across">:</a> context, maps, skills, hooks, and shared harnesses. Once agents can find the right code, the next question is whether teams can trust what they change.</p>]]></content:encoded></item><item><title><![CDATA[How Teams Scale Claude Code Across Monorepos and Large Codebases]]></title><description><![CDATA[Thirteen patterns for making Claude Code work across monorepos, shared conventions, generated files, and organizational rollout.]]></description><link>https://generativeprogrammer.com/p/how-teams-scale-claude-code-across</link><guid isPermaLink="false">https://generativeprogrammer.com/p/how-teams-scale-claude-code-across</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 24 May 2026 13:49:54 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ddd979fa-99f3-4394-a736-d516a26ce104_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Large codebases expose different failure modes for AI coding assistants. They span teams, conventions, build systems, and naming rules. Generated files can outnumber source files, and the most useful answers often live outside the repo. An agent that reads files like a person can work in a starter project, but at scale it needs stronger signals about where to start, what to ignore, which commands apply, and which knowledge lives outside the codebase.</p><p>This post follows my <a href="https://generativeprogrammer.com/p/12-agentic-harness-patterns-from">12 Agentic Harness Patterns</a>. It looks at how engineering organizations adapt Claude Code for large codebases, based on Anthropic&#8217;s post on <a href="https://claude.com/blog/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start?utm_source=generativeprogrammer&amp;utm_medium=referral&amp;utm_campaign=claude-code-large-codebases">how Claude Code works in large codebases</a>.</p><p>The 13 patterns fall into three groups:</p><ol><li><p>How Claude finds the right code context.</p></li><li><p>How the harness keeps a session effective.</p></li><li><p>How a working setup reaches every developer and stays maintained.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RR58!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RR58!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.png 424w, https://substackcdn.com/image/fetch/$s_!RR58!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.png 848w, https://substackcdn.com/image/fetch/$s_!RR58!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.png 1272w, https://substackcdn.com/image/fetch/$s_!RR58!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RR58!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.png" width="1456" height="1019" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a925cc57-169d-4129-884b-4b25461a3459_5200x3640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1019,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1076396,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.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_!RR58!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.png 424w, https://substackcdn.com/image/fetch/$s_!RR58!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.png 848w, https://substackcdn.com/image/fetch/$s_!RR58!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.png 1272w, https://substackcdn.com/image/fetch/$s_!RR58!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa925cc57-169d-4129-884b-4b25461a3459_5200x3640.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><strong>Pattern map for scaling Claude Code in large engineering organizations</strong></em></figcaption></figure></div></li></ol><h2><strong>Navigating the Codebase</strong></h2><p>In a large codebase, Claude is only as useful as its ability to find the right context. Loading too much context slows it down and distracts it, while loading too little leaves it guessing. These four patterns make the repo legible before Claude starts reading files.</p><h3><strong>1. Context Cascade Pattern</strong></h3><p>A single root-level <code>CLAUDE.md</code> becomes either bloated or too vague. In a large repo, one file cannot carry every team&#8217;s conventions, commands, and gotchas without turning into noise.</p><p>The Context Cascade pattern puts <code>CLAUDE.md</code> files at multiple levels of the tree. The root file contains global rules, pointers, and critical gotchas. Subdirectory files hold local commands, conventions, and domain terms. Claude loads the files along the path from the working directory to the root, so guidance gets more specific near the code being edited.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q6tq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q6tq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png 424w, https://substackcdn.com/image/fetch/$s_!q6tq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png 848w, https://substackcdn.com/image/fetch/$s_!q6tq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png 1272w, https://substackcdn.com/image/fetch/$s_!q6tq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q6tq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png" width="1456" height="1131" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1131,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:393668,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.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_!q6tq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png 424w, https://substackcdn.com/image/fetch/$s_!q6tq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png 848w, https://substackcdn.com/image/fetch/$s_!q6tq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png 1272w, https://substackcdn.com/image/fetch/$s_!q6tq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7189e89e-2f60-41f2-ad2c-54adaae7bcac_3780x2936.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Start the session where the work happens.</strong> Running <code>claude</code> from <code>services/payments/</code> picks up the payments-specific tests, lint rules, and build commands. Starting from the repo root may only load the root guidance. This works well in service-oriented monorepos, while compiled-language monorepos with deep cross-directory dependencies may also need project-level build configuration.</p><p><strong>When to use.</strong> Any monorepo with multiple team conventions, or any codebase where subtrees follow different rules.</p><p><strong>The main trade-off.</strong> The cascade only works if teams keep each level focused. Session-level notes in the root file, or universal rules buried in a leaf directory, undo the benefit.</p><h3><strong>2. Repo Map Pattern</strong></h3><p>When directory names are opaque, Claude cannot infer where to start. Legacy partitions, internal codenames, domain slices, and years of reorgs all create the same problem: the right code exists, but the tree gives weak clues.</p><p>The Repo Map pattern adds a lightweight Markdown file at the repo root. It lists each top-level folder with a one-line description. Claude scans the map before opening folders, which reduces blind search.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!stWW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!stWW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png 424w, https://substackcdn.com/image/fetch/$s_!stWW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png 848w, https://substackcdn.com/image/fetch/$s_!stWW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png 1272w, https://substackcdn.com/image/fetch/$s_!stWW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!stWW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png" width="1456" height="931" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:931,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247153,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.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_!stWW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png 424w, https://substackcdn.com/image/fetch/$s_!stWW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png 848w, https://substackcdn.com/image/fetch/$s_!stWW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png 1272w, https://substackcdn.com/image/fetch/$s_!stWW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7bce2ba-f6ab-43aa-9dd2-9e1b253ffb30_3840x2456.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Keep the map boring and factual: folder name, owner if useful, purpose, and main entry points. Avoid architecture prose that will go stale.</p><p><strong>When to use.</strong> Repos with unconventional layouts, legacy partitions, internal codenames, or many top-level folders. It also helps new engineers orient themselves.</p><p><strong>The main trade-off.</strong> This adds one more file to maintain. Stale entries actively mislead Claude and send it down the wrong path with confidence.</p><h3><strong>3. Noise Filter Pattern</strong></h3><p>Generated files, build artifacts, and vendor code distract Claude in every session. A blanket exclusion rule helps most developers, but it can hurt the team that owns the generator and needs to inspect those files.</p><p>The Noise Filter pattern commits default exclusions in <code>.claude/settings.json</code>. Every developer inherits the same search and read defaults on clone. Developers who need exceptions override them locally without changing the team baseline.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e-pV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e-pV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png 424w, https://substackcdn.com/image/fetch/$s_!e-pV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png 848w, https://substackcdn.com/image/fetch/$s_!e-pV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png 1272w, https://substackcdn.com/image/fetch/$s_!e-pV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e-pV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png" width="1456" height="923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:923,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:298615,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.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_!e-pV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png 424w, https://substackcdn.com/image/fetch/$s_!e-pV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png 848w, https://substackcdn.com/image/fetch/$s_!e-pV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png 1272w, https://substackcdn.com/image/fetch/$s_!e-pV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505c1364-ecc8-4efe-ae39-795344f50894_4000x2536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Any repo where generated code, vendor folders, or build outputs would otherwise pollute Claude&#8217;s searches.</p><p><strong>The main trade-off.</strong> Over-aggressive exclusions hide files that downstream code depends on. Local overrides are the safety valve, but only for developers who know they exist.</p><h3><strong>4. Symbol Lookup Pattern</strong></h3><p>A text search for <code>handleRequest</code> in a million-line codebase can return thousands of matches. Claude then burns context opening files just to find the relevant symbol. It can also pick the wrong one, such as two <code>User</code> classes in different modules or two functions with the same name in different languages.</p><p>The Symbol Lookup pattern exposes Language Server Protocol capabilities to Claude. Text matching becomes symbol resolution, and filtering happens before Claude reads files. This is especially valuable in strongly typed, multi-language codebases where mature language servers already exist.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dvhC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dvhC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png 424w, https://substackcdn.com/image/fetch/$s_!dvhC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png 848w, https://substackcdn.com/image/fetch/$s_!dvhC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png 1272w, https://substackcdn.com/image/fetch/$s_!dvhC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dvhC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png" width="1456" height="865" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:865,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:373007,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.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_!dvhC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png 424w, https://substackcdn.com/image/fetch/$s_!dvhC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png 848w, https://substackcdn.com/image/fetch/$s_!dvhC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png 1272w, https://substackcdn.com/image/fetch/$s_!dvhC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadb11b97-d6bd-4d7e-947e-15fc2b332b0a_4000x2376.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Multi-language codebases, repos with common function names, and ecosystems with mature LSP support such as C, C++, Java, C#, and TypeScript.</p><p><strong>The main trade-off.</strong> The setup cost is real. Each language needs the right code-intelligence plugin and language server binary, and ecosystems with weak LSP support will return less value.</p><h2><strong>Scaling the Harness</strong></h2><p>The harness, not the model alone, determines how well Claude Code performs in a large repo. Here, harness means <code>CLAUDE.md</code>, hooks, skills, plugins, MCP servers, and subagents. These five patterns keep sessions useful as the codebase grows.</p><h3><strong>5. Just-in-Time Skill Pattern</strong></h3><p>A large codebase carries many task types: security review, docs, deploys, migrations, release checks, and more. Only one or two matter in a given session, so loading every workflow into <code>CLAUDE.md</code> makes every session pay for knowledge it does not need.</p><p>The Just-in-Time Skill pattern packages each specialized workflow as a skill that loads only when the task calls for it. The base context stays small, and task-specific knowledge appears when needed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x58W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x58W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png 424w, https://substackcdn.com/image/fetch/$s_!x58W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png 848w, https://substackcdn.com/image/fetch/$s_!x58W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png 1272w, https://substackcdn.com/image/fetch/$s_!x58W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x58W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png" width="1456" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:317714,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.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_!x58W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png 424w, https://substackcdn.com/image/fetch/$s_!x58W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png 848w, https://substackcdn.com/image/fetch/$s_!x58W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png 1272w, https://substackcdn.com/image/fetch/$s_!x58W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc26bbbcf-c9ca-4a58-9b31-efa79f067b10_3960x2376.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Keep each skill narrow: when it should trigger, what steps it follows, which commands it runs, and what common failures mean.</p><p><strong>When to use.</strong> Any codebase with more than a handful of distinct task types, especially when workflows would dwarf the actual coding context.</p><p><strong>The main trade-off.</strong> Activation logic needs care. Skills that trigger too eagerly bloat context; skills that trigger too narrowly stay dormant when they would have helped.</p><h3><strong>6. Scoped Skill Pattern</strong></h3><p>In a monorepo, a payments deployment skill should not load while someone edits the inventory service. Generic skill activation ignores where the work is happening, which turns useful expertise into noise.</p><p>The Scoped Skill pattern binds skills to specific subtrees. Teams can place skill files under a subtree&#8217;s <code>.claude/skills/</code> directory or use <code>paths</code> globs in the skill frontmatter. A payments deployment skill becomes visible in payments sessions and invisible elsewhere.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yT6L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yT6L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png 424w, https://substackcdn.com/image/fetch/$s_!yT6L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png 848w, https://substackcdn.com/image/fetch/$s_!yT6L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png 1272w, https://substackcdn.com/image/fetch/$s_!yT6L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yT6L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png" width="1456" height="901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:901,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:345121,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.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_!yT6L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png 424w, https://substackcdn.com/image/fetch/$s_!yT6L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png 848w, https://substackcdn.com/image/fetch/$s_!yT6L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png 1272w, https://substackcdn.com/image/fetch/$s_!yT6L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c626d3e-26f2-4977-a316-e244c6d2b653_3680x2276.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Multi-team monorepos where subtree-specific procedures differ enough that cross-loading them is harmful.</p><p><strong>The main trade-off.</strong> Skill ownership can outlive team ownership. When a path changes hands, its skill bindings need review.</p><h3><strong>7. Scout Subagent Pattern</strong></h3><p>Mapping a subsystem and editing code are different jobs. Doing both in one session burns the same context window on exploration, notes, and implementation. By the time editing starts, the context may already be polluted with irrelevant detail.</p><p>The Scout Subagent pattern uses a read-only subagent for exploration. The scout maps the subsystem in its own context, writes findings to a file, and returns the path. The main agent then reads the findings and edits with a cleaner context.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hQ_x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hQ_x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png 424w, https://substackcdn.com/image/fetch/$s_!hQ_x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png 848w, https://substackcdn.com/image/fetch/$s_!hQ_x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png 1272w, https://substackcdn.com/image/fetch/$s_!hQ_x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hQ_x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png" width="1456" height="941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:307299,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.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_!hQ_x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png 424w, https://substackcdn.com/image/fetch/$s_!hQ_x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png 848w, https://substackcdn.com/image/fetch/$s_!hQ_x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png 1272w, https://substackcdn.com/image/fetch/$s_!hQ_x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc47bcc-ca95-44fd-a3a6-940b3f000359_3800x2456.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A useful scout output is concrete: relevant files, ownership boundaries, important call paths, tests to run, and risks to avoid.</p><p><strong>When to use.</strong> Refactors, cross-cutting bug fixes, security audits, or integrations with code Claude has not seen before.</p><p><strong>The main trade-off.</strong> This adds another round-trip, and the scout&#8217;s findings are only a snapshot. If later edits invalidate an assumption, the main agent must notice and re-check.</p><h3><strong>8. Search-as-a-Tool Pattern</strong></h3><p>Claude&#8217;s default tools work inside the repo, but much of the knowledge a developer needs does not. Design docs, postmortems, runbooks, tickets, dashboards, and incident notes often contain the answer Claude needs.</p><p>The Search-as-a-Tool pattern wraps the organization&#8217;s existing search infrastructure as a tool Claude can call. That search backend might be Elasticsearch, Glean, an internal knowledge graph, or another system. MCP is only the mechanism; the pattern is making institutional knowledge accessible from the coding session.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cVQG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cVQG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png 424w, https://substackcdn.com/image/fetch/$s_!cVQG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png 848w, https://substackcdn.com/image/fetch/$s_!cVQG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png 1272w, https://substackcdn.com/image/fetch/$s_!cVQG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cVQG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png" width="1456" height="977" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:977,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:257779,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.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_!cVQG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png 424w, https://substackcdn.com/image/fetch/$s_!cVQG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png 848w, https://substackcdn.com/image/fetch/$s_!cVQG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png 1272w, https://substackcdn.com/image/fetch/$s_!cVQG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8d721-df47-40bd-a1e8-75c6b01065da_3720x2496.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Organizations where Claude routinely needs information outside the repo and where internal search already exists.</p><p><strong>The main trade-off.</strong> The search tool becomes critical infrastructure, so outages affect every session that depends on it. Access control also matters because Claude inherits the permissions behind the tool.</p><h3><strong>9. Deterministic Checks Pattern</strong></h3><p>Instructions such as &#8220;always run the linter before committing&#8221; are easy to forget. They compete with every other instruction in context and produce inconsistent behavior across sessions.</p><p>The Deterministic Checks pattern moves quality enforcement from instructions into hooks. Linting, formatting, type-checking, and targeted tests run on defined events whether Claude remembers them or not.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GuME!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GuME!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png 424w, https://substackcdn.com/image/fetch/$s_!GuME!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png 848w, https://substackcdn.com/image/fetch/$s_!GuME!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png 1272w, https://substackcdn.com/image/fetch/$s_!GuME!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GuME!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png" width="1456" height="858" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:858,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:212145,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.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_!GuME!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png 424w, https://substackcdn.com/image/fetch/$s_!GuME!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png 848w, https://substackcdn.com/image/fetch/$s_!GuME!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png 1272w, https://substackcdn.com/image/fetch/$s_!GuME!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09b50329-0170-4250-a0a1-3fee6f46fde7_3760x2216.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Any rule that can be expressed as &#8220;this check must always run on this event&#8221;: lint on save, format before commit, type-check after file write, or run a focused test after a generated change.</p><p><strong>The main trade-off.</strong> Slow hooks drag every session, and hooks that fail noisily interrupt Claude&#8217;s flow. Checks should be fast, focused, and easy to interpret.</p><h2><strong>Rolling Out the Harness</strong></h2><p>The technical patterns only matter if they reach developers and stay maintained. These four patterns cover packaging, rollout, governance, and continuous improvement. In most organizations, a single DRI owns the harness. In larger ones, this becomes an &#8220;agent manager&#8221; role: a hybrid PM and engineer responsible for settings, permissions, plugin catalogs, and <code>CLAUDE.md</code> conventions.</p><h3><strong>10. Harness Bundle Pattern</strong></h3><p>Good Claude Code setups often stay tribal. One engineer wires up a useful mix of skills, hooks, and MCP servers on their machine. Another team rebuilds the same thing months later, usually worse. New engineers start from zero.</p><p>The Harness Bundle pattern packages skills, hooks, and MCP configuration into a single installable plugin. New engineers install it on day one and inherit the team&#8217;s working setup. Updates flow through a managed channel instead of copy-pasted local config.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cEfQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cEfQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png 424w, https://substackcdn.com/image/fetch/$s_!cEfQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png 848w, https://substackcdn.com/image/fetch/$s_!cEfQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png 1272w, https://substackcdn.com/image/fetch/$s_!cEfQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cEfQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png" width="1456" height="972" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:972,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:285562,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.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_!cEfQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png 424w, https://substackcdn.com/image/fetch/$s_!cEfQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png 848w, https://substackcdn.com/image/fetch/$s_!cEfQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png 1272w, https://substackcdn.com/image/fetch/$s_!cEfQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03810b18-62b6-44f0-a854-e280566705a1_3800x2536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Whenever a useful configuration exists on one machine and the team would benefit from sharing it. Most teams reach that point within weeks of adoption.</p><p><strong>The main trade-off.</strong> Bundles ossify. A plugin that everyone installs becomes hard to change without coordinating across consumers, just like any shared library.</p><h3><strong>11. Day-One Harness Pattern</strong></h3><p>A developer&#8217;s first Claude Code session strongly shapes adoption. If they must assemble the harness before getting value, many bounce. Bottom-up enthusiasm can also fragment into incompatible local setups.</p><p>The Day-One Harness pattern builds the harness before broad access opens. A small team prepares the core plugins, MCP servers, skills, hooks, and docs so a developer&#8217;s first session works with the codebase, not against 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_!wdR1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wdR1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png 424w, https://substackcdn.com/image/fetch/$s_!wdR1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png 848w, https://substackcdn.com/image/fetch/$s_!wdR1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png 1272w, https://substackcdn.com/image/fetch/$s_!wdR1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wdR1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png" width="1456" height="952" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:952,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:323583,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.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_!wdR1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png 424w, https://substackcdn.com/image/fetch/$s_!wdR1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png 848w, https://substackcdn.com/image/fetch/$s_!wdR1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png 1272w, https://substackcdn.com/image/fetch/$s_!wdR1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c865736-bdb6-4ef5-9c6d-c3768089fca5_3880x2536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Any organization rolling out Claude Code beyond a pilot, especially when the codebase has non-obvious conventions.</p><p><strong>The main trade-off.</strong> Pre-rollout work costs time and people. Skipping it is cheaper at first, but usually creates a long tail of fragmented setups to clean up later.</p><h3><strong>12. Curated Starter Set Pattern</strong></h3><p>Open access to every skill and plugin creates security, governance, and consistency problems. A misconfigured MCP server can read too much. An unreviewed skill can push developers toward unsafe workflows. Blocking everything kills adoption.</p><p>The Curated Starter Set pattern starts narrow: approved skills and plugins, required review processes, and limited initial access. The set expands as confidence grows and edge cases become clear.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KRk4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KRk4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png 424w, https://substackcdn.com/image/fetch/$s_!KRk4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png 848w, https://substackcdn.com/image/fetch/$s_!KRk4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png 1272w, https://substackcdn.com/image/fetch/$s_!KRk4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KRk4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png" width="1456" height="903" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:903,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:331349,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.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_!KRk4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png 424w, https://substackcdn.com/image/fetch/$s_!KRk4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png 848w, https://substackcdn.com/image/fetch/$s_!KRk4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png 1272w, https://substackcdn.com/image/fetch/$s_!KRk4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a4d5bd-f78e-472d-8553-10ed9582903c_3960x2456.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Regulated industries such as finance, healthcare, and defense. It is also useful in any large organization where security review comes before broad adoption.</p><p><strong>The main trade-off.</strong> An overly conservative starter set frustrates early advocates. The expansion cadence matters as much as the starting set; slow curation makes the rollout feel blocked.</p><h3><strong>13. Self-Improving Hook Pattern</strong></h3><p>Claude&#8217;s mistakes are visible during a session and then easy to forget. The next session repeats them. <code>CLAUDE.md</code> improves only if someone updates it while the lesson is still fresh.</p><p>The Self-Improving Hook pattern runs a stop hook at session end. The hook reviews the transcript and proposes <code>CLAUDE.md</code> updates, including additions and retirements. It also surfaces drift as models and tools improve. A workaround that helped an older model may constrain the current one; a shim for a missing tool may become dead weight once native support lands.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IV-R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IV-R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png 424w, https://substackcdn.com/image/fetch/$s_!IV-R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png 848w, https://substackcdn.com/image/fetch/$s_!IV-R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png 1272w, https://substackcdn.com/image/fetch/$s_!IV-R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IV-R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png" width="1456" height="1123" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1123,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:327569,&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://generativeprogrammer.com/i/199064873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.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_!IV-R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png 424w, https://substackcdn.com/image/fetch/$s_!IV-R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png 848w, https://substackcdn.com/image/fetch/$s_!IV-R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png 1272w, https://substackcdn.com/image/fetch/$s_!IV-R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a1a49d8-8dc7-467a-903c-beea2b69e530_3600x2776.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Teams that actively maintain <code>CLAUDE.md</code> and benefit from small, frequent improvements. It pairs especially well with the Context Cascade pattern.</p><p><strong>The main trade-off.</strong> Without curation, suggestions pile up and noise overtakes signal. The hook proposes changes, but humans still decide what to merge.</p><h2><strong>The takeaway</strong></h2><p>Claude Code can work well in large codebases, but not because it magically understands the whole repo. It works when the codebase gives it the same advantages a good engineer has: a clear starting point, local conventions near the code, a map when the structure is not obvious, and tools that expose knowledge outside the repo.</p><p>The practical setup is not one giant <code>CLAUDE.md</code>. It is a fitted harness around the existing codebase: a small root file, local <code>CLAUDE.md</code> files, repository maps, path-scoped skills, fast hooks, LSP-backed symbol lookup, and search tools for internal knowledge. Together, these narrow the work before Claude spends context.</p><p>The best large-codebase setups look ordinary from the outside. They reduce search waste, load context just in time, enforce checks consistently, and make one good configuration available to every developer. The goal is not more agent infrastructure. It is a codebase that Claude Code can enter at the right place, read with the right hints, and change without dragging the whole repository into the session.</p>]]></content:encoded></item><item><title><![CDATA[9 Principles That Separate Useful Skills from Markdown Essays]]></title><description><![CDATA[A practical framework for deciding when a skill should fire, how it should run, and how it should survive over time.]]></description><link>https://generativeprogrammer.com/p/9-principles-that-separate-useful</link><guid isPermaLink="false">https://generativeprogrammer.com/p/9-principles-that-separate-useful</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 10 May 2026 15:21:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/eda9f72b-e2bc-40f3-be15-cd2710766da3_4480x2252.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Software engineering settled long ago on a small set of higher-level principles that sit above specific implementation patterns: SOLID, KISS, YAGNI, separation of concerns. They tell you what to value when designing a system, not what to type. They have outlasted dozens of pattern catalogues because they operate at a different altitude.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9R4Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9R4Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png 424w, https://substackcdn.com/image/fetch/$s_!9R4Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png 848w, https://substackcdn.com/image/fetch/$s_!9R4Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png 1272w, https://substackcdn.com/image/fetch/$s_!9R4Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9R4Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png" width="1456" height="732" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:732,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:499162,&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://generativeprogrammer.com/i/197111813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.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_!9R4Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png 424w, https://substackcdn.com/image/fetch/$s_!9R4Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png 848w, https://substackcdn.com/image/fetch/$s_!9R4Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png 1272w, https://substackcdn.com/image/fetch/$s_!9R4Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2591d2ae-6935-4493-a75d-9cea7556e4a8_4480x2252.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Skills come in many shapes: task workflows, reference guides, persona prompts, tool wrappers. The tactical advice for each is in my <a href="https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics">previous post</a> on skill authoring patterns. Underneath those tactics sits the same kind of higher-level layer: a small set of principles that cut across every skill type. They are not rules about what to put inside a <code>SKILL.md</code>. They are the questions you ask <em>before</em> reaching for any specific pattern: should this skill exist at all, can it be found when it matters, and will it still be useful six months from now?</p><p>Nine principles in three acts: getting selected, running reliably, and surviving contact with reality.</p><h2><strong>Act 1: Getting Selected</strong></h2><p>These principles apply at the moment a request arrives, before the skill body has run. They cover whether the skill is recognised at all, what it costs to bring into context, and what shape its content needs to take to actually drive work. A skill that fails here never gets the chance to be useful.</p><h3><strong>1. Metadata is the gate</strong></h3><p>At session start, Claude does not read every <code>SKILL.md</code>. It sees the skill listing: metadata such as the <code>name</code> and <code>description</code>; in Claude Code, any <code>when_to_use</code> text can also be included in that listing. A vague description (&#8221;helps with documents&#8221;) never fires when it should, fires when it shouldn&#8217;t, or competes with three other skills for the same trigger.</p><p>The principle: <strong>the description is not a summary; it is the main signal at selection time.</strong> A skill that fails the metadata-only round never runs.</p><p>Two of the <a href="https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics">skill authoring patterns</a> serve this principle from opposite sides. <em>Activation Metadata</em> is how you pull the right skill in: positive triggers, domain keywords, and the &#8220;pushy&#8221; framing Anthropic&#8217;s <code>skill-creator</code> recommends. <em>Exclusion Clause</em> is how you push the wrong ones out: &#8220;Do NOT use for blog articles, newsletters, or long-form content.&#8221; Same goal, opposite directions.</p><p>The same skill, weak and strong:</p><blockquote><p><em>Weak:</em> &#8220;Helps with dashboards and visualization.&#8221;</p><p><em>Strong:</em> &#8220;Use whenever the user mentions dashboards, internal metrics, or data visualisation, even if they do not explicitly ask for a dashboard. Do NOT use for blog charts, marketing graphics, or one-off notebook plots.&#8221;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GCQY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GCQY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.png 424w, https://substackcdn.com/image/fetch/$s_!GCQY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.png 848w, https://substackcdn.com/image/fetch/$s_!GCQY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.png 1272w, https://substackcdn.com/image/fetch/$s_!GCQY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GCQY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.png" width="1456" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b657640-6919-419a-8eac-ada6658da099_4080x1840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:167641,&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://generativeprogrammer.com/i/197111813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.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_!GCQY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.png 424w, https://substackcdn.com/image/fetch/$s_!GCQY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.png 848w, https://substackcdn.com/image/fetch/$s_!GCQY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.png 1272w, https://substackcdn.com/image/fetch/$s_!GCQY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b657640-6919-419a-8eac-ada6658da099_4080x1840.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This principle guides the trade-off between <em>discoverability</em> and <em>budget</em>. The <a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview">Agent Skills docs</a> cap <code>description</code> at 1024 characters; <a href="https://code.claude.com/docs/en/skills">Claude Code</a> truncates <code>description</code> plus <code>when_to_use</code> at 1536 characters in the skill listing. Every sentence competes with positive triggers, exclusions, and domain keywords for the same finite slot, so being precise about the skill&#8217;s intent matters more than covering every edge case. Write the description as if those characters cost real money. In practice, they do.</p><h3><strong>2. Disclose progressively</strong></h3><p>Context is a shared budget. Every token your skill spends is a token unavailable to every other skill, the conversation history, and the user&#8217;s actual request. A skill that re-explains what JSON is, what a database is, or how an API works wastes that budget on things Claude already knows. Multiply verbose metadata across many installed skills, or bloated <code>SKILL.md</code> bodies across a multi-skill task, and useful context disappears before the hard work begins.</p><p>The principle: <strong>load only what the current task needs, and load it only when it needs it.</strong> Metadata loads at session start; <code>SKILL.md</code> loads only when the skill is triggered; reference files load only when the current task points to them. Scripts in <code>scripts/</code> can be invoked via Bash, so their source never has to enter context. Only their output does.</p><p>Two of the 14 skill patterns serve this principle. <em>Context Budget</em> is the discipline of being frugal with the words you do load. <em>Progressive Disclosure</em> is the structural technique of tiering what gets loaded when. The halves are inseparable: frugality without tiering still loads everything in full; tiering without frugality just spreads the bloat across more files.</p><p>A bloated and a frugal opening for the same skill:</p><blockquote><p><em>Bloated:</em> &#8220;A database is a structured collection of data... Migrations are scripts that update the schema... PostgreSQL is a relational database...&#8221;</p><p><em>Frugal:</em> &#8220;Schema changes go in <code>supabase/migrations/</code>, named <code>YYYYMMDDHHMMSS_description.sql</code>. See <code>references/migration-format.md</code> for the four required artifacts.&#8221;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dz0b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dz0b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png 424w, https://substackcdn.com/image/fetch/$s_!Dz0b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png 848w, https://substackcdn.com/image/fetch/$s_!Dz0b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png 1272w, https://substackcdn.com/image/fetch/$s_!Dz0b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dz0b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png" width="1456" height="785" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:785,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:158118,&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://generativeprogrammer.com/i/197111813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.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_!Dz0b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png 424w, https://substackcdn.com/image/fetch/$s_!Dz0b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png 848w, https://substackcdn.com/image/fetch/$s_!Dz0b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png 1272w, https://substackcdn.com/image/fetch/$s_!Dz0b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1181e5b2-b6ac-4c4f-b874-8b1407645d69_4080x2200.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This principle guides the trade-off between <em>frugality</em> and <em>model strength</em>. What reads as crisply concise to Sonnet may be too terse for Haiku, which needs more guidance to reach the same outcome. If you target multiple models, write to the level the weakest one needs and let stronger models skim. Frugality that breaks weaker models is false economy: you saved the tokens, then paid them back in retries and corrections.</p><h3><strong>3. Process over prose</strong></h3><p>A skill that opens with two thousand words on the philosophy of testing gets read, generates a plausible summary, and still lets the agent skip the actual testing. Reference essays are not actionable. Many &#8220;AI rules&#8221; repos that ship as long markdown files do little in practice because they describe good behaviour instead of making the agent perform it.</p><p>The principle, from <a href="https://addyosmani.com/blog/agent-skills/">Addy Osmani</a>: <strong>a skill is a workflow with checkpoints, not reference documentation.</strong> If a junior engineer reading it would not know what to <em>do</em> next, it is an essay, not a skill. Steps with exit criteria beat essays without them.</p><p>Several patterns from the previous post relate to this principle from different angles. <em>Template Scaffold</em> gives the skill a fixed shape to fill in. <em>Execution Checklist</em> gives it ordered steps with checkboxes. The whole <em>Workflow control</em> family, including self-correcting loops and plan-validate-execute, only makes sense once the skill is a workflow in the first place.</p><p>The same TDD content in two shapes:</p><blockquote><p><em>Prose (rejected):</em> &#8220;Test-driven development is the practice of writing tests before implementation. It produces better-designed code by forcing the author to consider the interface before the internals...&#8221;</p><p><em>Process (kept):</em> &#8220;1. Write the failing test. 2. Run it. 3. Verify it fails for the expected reason. 4. Implement the minimum to pass. 5. Run it. 6. Refactor. 7. Commit.&#8221;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yWaD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yWaD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png 424w, https://substackcdn.com/image/fetch/$s_!yWaD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png 848w, https://substackcdn.com/image/fetch/$s_!yWaD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png 1272w, https://substackcdn.com/image/fetch/$s_!yWaD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yWaD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png" width="1456" height="741" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:741,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:173024,&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://generativeprogrammer.com/i/197111813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.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_!yWaD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png 424w, https://substackcdn.com/image/fetch/$s_!yWaD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png 848w, https://substackcdn.com/image/fetch/$s_!yWaD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png 1272w, https://substackcdn.com/image/fetch/$s_!yWaD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699150b8-3d5a-4c99-9385-e16e1d3737ff_4080x2076.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This principle guides the trade-off between <em>actionability</em> and <em>coverage</em>. Workflows are actionable but narrow: each step is a specific thing to do. References are broad but inert: the model has to decide what to apply and when. Most skills should be workflows, but reference skills (style guides, domain glossaries, persona prompts) are the legitimate exception. Forcing a workflow shape onto them produces brittle, awkward content. The right question is not &#8220;is this a workflow?&#8221; but &#8220;does the reader of this skill know what to do next?&#8221; If the answer is no, the principle is being violated regardless of shape.</p><h2><strong>Act 2: Running Reliably</strong></h2><p>Once the skill is selected and loaded, the question shifts to whether it actually drives the behaviour the author intended. These principles cover two halves of that problem: how rules should be phrased, so the model both generalises from what is written and complies under pressure to skip, and how much freedom the skill grants, so the model&#8217;s autonomy matches the task&#8217;s tolerance for variance.</p><h3><strong>4. Explain the why</strong></h3><p>A skill written as strings of <code>ALWAYS</code>, <code>NEVER</code>, and <code>MUST</code> in capital letters gives Claude rigid rules with no context. The model follows the letter and misses edge cases the author did not anticipate, or over-applies a rule where a judgement call was needed. Anthropic&#8217;s <code>skill-creator</code> flags all-caps imperatives as a yellow flag for exactly this reason.</p><p>The principle: <strong>state the rule, then state the reason.</strong> Reasoning becomes the rubric for cases the skill did not spell out.</p><p>Two patterns from the previous post connect to this principle, for different reasons. <em>Explain-the-Why</em> is the direct technique: pair every rule with its reason in the <code>SKILL.md</code> text. <em>Control Tuning</em> is about where to apply that pairing: rule-with-reason where the model needs to exercise judgement, narrow imperative where one wrong move is catastrophic and judgement is the wrong tool.</p><p>A Spring style-guide rule in two forms:</p><blockquote><p><em>Rule alone:</em> &#8220;Use constructor injection. Never field injection.&#8221;</p><p><em>Rule with reason:</em> &#8220;Use constructor injection. Field injection breaks testability; we cannot mock the field without spinning up a Spring context.&#8221;</p></blockquote><p>The first covers the canonical case and stumbles on variants. The second lets the model score options the skill never names: a builder that passes deps in <code>build()</code> passes (parameters, mockable without Spring); setter injection on a <code>@Component</code> fails (same testability problem); a service locator inside the method fails (hidden dependency). The rule covers one case. The reason covers all four.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5lnP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5lnP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png 424w, https://substackcdn.com/image/fetch/$s_!5lnP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png 848w, https://substackcdn.com/image/fetch/$s_!5lnP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png 1272w, https://substackcdn.com/image/fetch/$s_!5lnP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5lnP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png" width="1456" height="614" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:614,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:259741,&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://generativeprogrammer.com/i/197111813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.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_!5lnP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png 424w, https://substackcdn.com/image/fetch/$s_!5lnP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png 848w, https://substackcdn.com/image/fetch/$s_!5lnP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png 1272w, https://substackcdn.com/image/fetch/$s_!5lnP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c48ebc1-cafa-4ab2-a476-d66e0a4e86a9_4080x1720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This principle guides the trade-off between <em>generalisation</em> and <em>length</em>. Adding reasoning to every rule helps the model handle cases the skill never named, but explanations cost tokens. For genuinely fragile steps, such as DB migrations, cryptographic operations, or anything where one wrong move is catastrophic, a narrow imperative may still be the better tool. Reserve prose-with-reasoning for the steps where you actually want the model to think. For the rest, terseness is a feature, not a flaw.</p><p>This principle addresses a <em>knowledge gap</em>: the model that does not know enough to handle the variant. A separate gap shows up when the model knows the rule and the reason, then argues itself out of compliance anyway. That one needs a different tool.</p><h3><strong>5. Anticipate the excuse</strong></h3><p>Imagine a <code>database-migration</code> skill with a non-negotiable: <em>&#8220;Always run the migration on a staging clone first.&#8221;</em> The why is documented: staging catches what the SQL diff does not show, including default ordering, type coercion, and unintended index rebuilds. The model has the rule and the reason. Given a small migration and a user who wants to move fast, here is what it produces anyway:</p><blockquote><p><em>&#8220;This migration adds a single nullable column. Staging clones take 4 minutes to spin up. The change is additive, the user is in a hurry, and the SQL is short and reviewable. Running on production directly is acceptable here.&#8221;</em></p></blockquote><p>That paragraph is plausible. It cites real reasoning. It even acknowledges the rule before talking past it. That is rationalisation: a confident excuse for <em>this particular case</em>. Adding more rules does not fix it. Adding more reasons does not fix it. The model already accepts the why and dismisses it for this case.</p><p>The principle, from <a href="https://addyosmani.com/blog/agent-skills/">Addy Osmani</a>: <strong>anticipate the excuse. Write the rebuttal next to the rule, in the skill itself.</strong> The model is excellent at rationalising; it is poor at arguing past pre-written counters that sit in its own context.</p><p>No pattern in the previous post directly serves this principle. Its closest cousin is <em>Known Gotchas</em>, but Gotchas catches <em>external</em> surprises (the world surprising the agent), while rebuttals catch <em>internal</em> ones (the agent surprising itself). The two complement each other but address different forces.</p><p>The rebuttal table for the migration rule, written into the <code>SKILL.md</code>:</p><p><strong>ExcuseRebuttal</strong>&#8220;This migration is additive / nullable / small.&#8221;Small migrations are where staging catches low-level mistakes. Default ordering, type coercion, unintended index rebuilds. Four minutes is cheap insurance.&#8221;User is in a hurry.&#8221;User is in a hurry to ship working code, not to run a migration twice. Run staging.&#8221;I reviewed the SQL manually; it looks safe.&#8221;Manual review is not a substitute for running it. You are not the database engine.</p><p>When the model reaches for the rationalisation, it has to produce text that argues past three rebuttals it just read. That is a much higher bar than arguing past a one-line rule.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8WAN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8WAN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png 424w, https://substackcdn.com/image/fetch/$s_!8WAN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png 848w, https://substackcdn.com/image/fetch/$s_!8WAN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png 1272w, https://substackcdn.com/image/fetch/$s_!8WAN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8WAN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png" width="1456" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:277208,&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://generativeprogrammer.com/i/197111813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.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_!8WAN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png 424w, https://substackcdn.com/image/fetch/$s_!8WAN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png 848w, https://substackcdn.com/image/fetch/$s_!8WAN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png 1272w, https://substackcdn.com/image/fetch/$s_!8WAN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2524d8f0-9b9b-4a0c-ae21-678c0801b6ab_4080x2140.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Where do the rebuttals come from? Three places:</p><ol><li><p><strong>Universal rationalisation archetypes.</strong> A small set recurs everywhere: <em>&#8220;this case is too small&#8221;</em>, <em>&#8220;I&#8217;ll do it later&#8221;</em>, <em>&#8220;I checked manually&#8221;</em>, <em>&#8220;risk is minimal here&#8221;</em>, <em>&#8220;user is in a hurry&#8221;</em>. One or two often apply to any non-trivial rule.</p></li><li><p><strong>Observed runs.</strong> The first time the agent skips a step, it produces a paragraph explaining why. Copy it. The next version has a rebuttal for it.</p></li><li><p><strong>Post-incident learnings.</strong> The last time someone skipped step X and got burned, that incident becomes a rebuttal.</p></li></ol><p>This principle guides the trade-off between <em>defensive coverage</em> and <em>credibility</em>. The temptation, once you accept the principle, is to write a rebuttal table for every rule in the skill. Speculative rebuttals based on imagined failure modes read as paranoid filler and inflate the <code>SKILL.md</code> without earning their tokens. Rebuttals only land when they answer real excuses you have actually watched the model produce, or your team produce under pressure. Write them sparingly, for the two or three steps that are most tempting to skip, and grow the list from observed runs rather than from imagination.</p><h3><strong>6. Code over inference</strong></h3><p>Asking the model to generate a validation script, a PDF extractor, or a JSON normaliser from scratch on every invocation is slower, less reliable, and burns tokens on code the user never sees. Each run rediscovers the same logic with small variations.</p><p>The principle: <strong>where a step can be a deterministic program, it should be.</strong> Move work out of the inference loop into code that runs and returns only its output.</p><p>Two patterns from the previous post connect to this principle, for different reasons. <em>Utility Bundle</em> is how you ship pre-built scripts alongside the <code>SKILL.md</code>: purpose-built helpers the model invokes via Bash. <em>Autonomy Calibration</em> is how you constrain what the model can do at all, narrowing the tool surface so the script becomes the path of least resistance.</p><p>A schema-validation step in two forms:</p><blockquote><p><em>Re-derive each time:</em> model writes a 60-line validation snippet inline, runs it, parses the output, decides whether the schema passes. Source enters context. Logic varies between runs.</p><p><em>Pre-built script:</em> <code>python scripts/validate.py schema.json</code>. The script&#8217;s output (&#8221;OK&#8221; or a structured error list) enters context. Source does not. Logic is identical every run, testable independently, and the model invokes it via Bash without having to think about how it works.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Sf5L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sf5L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png 424w, https://substackcdn.com/image/fetch/$s_!Sf5L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png 848w, https://substackcdn.com/image/fetch/$s_!Sf5L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png 1272w, https://substackcdn.com/image/fetch/$s_!Sf5L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sf5L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png" width="1456" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195168,&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://generativeprogrammer.com/i/197111813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.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_!Sf5L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png 424w, https://substackcdn.com/image/fetch/$s_!Sf5L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png 848w, https://substackcdn.com/image/fetch/$s_!Sf5L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png 1272w, https://substackcdn.com/image/fetch/$s_!Sf5L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0b020ba-90b3-4596-9c7a-9fed54152bd7_4080x1840.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This principle guides the trade-off between <em>determinism</em> and <em>portability</em>. A script gives you reliable behaviour and lower context cost, but introduces a runtime dependency the inference path does not have. Python may be missing, a library version may differ, and paths may be Windows where the author wrote them for Unix. Validate preconditions in the <code>SKILL.md</code>, prefer forward slashes in paths, and have the script exit with a clear error rather than a stack trace when something is missing. For skills shipping to mixed environments, some logic is genuinely better off staying in inference, despite the cost.</p><h3><strong>7. Stay in scope</strong></h3><p>You ask the agent to fix one off-by-one in a function, and it returns a forty-line diff across three files: the fix, a <code>var</code> to <code>const</code> modernisation, a helper rename, and a <code>TODO</code> cleared up on the way past. The fix is mergeable. The PR is not. Unwinding the unrelated changes costs more than the original task.</p><p>The principle, from <a href="https://addyosmani.com/blog/agent-skills/">Addy Osmani</a>: <strong>touch only what the skill is asked to touch.</strong> Don&#8217;t refactor adjacent systems. Don&#8217;t rewrite files you brushed against. Don&#8217;t expand the diff. Addy ranks this as the single biggest determinant of whether an agent&#8217;s PR is mergeable or has to be unwound.</p><p>No pattern in the <a href="https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics">previous post</a> directly serves this principle. <em>Exclusion Clause</em> is adjacent but operates at the metadata layer, deciding whether the skill fires at all; this principle operates inside the skill, governing what the agent does once it has fired. Scope discipline is closer to a cultural rule than a markdown technique. It has to be enforced at every step the skill takes, not declared once.</p><p>The same <code>parseRange()</code> off-by-one fix in two diffs:</p><blockquote><p><em>Out of scope (47 lines, 3 files):</em> off-by-one, <code>var</code> to <code>const</code> modernisation, <code>helperFunc</code> to <code>parseHelper</code> rename, and <code>// TODO</code> cleanup.</p><p><em>In scope (3 lines, 1 file):</em> off-by-one.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bBHd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bBHd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png 424w, https://substackcdn.com/image/fetch/$s_!bBHd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png 848w, https://substackcdn.com/image/fetch/$s_!bBHd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png 1272w, https://substackcdn.com/image/fetch/$s_!bBHd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bBHd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png" width="1456" height="628" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:211360,&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://generativeprogrammer.com/i/197111813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.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_!bBHd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png 424w, https://substackcdn.com/image/fetch/$s_!bBHd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png 848w, https://substackcdn.com/image/fetch/$s_!bBHd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png 1272w, https://substackcdn.com/image/fetch/$s_!bBHd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8672dcdd-01ff-4228-b81c-923a0b4f752a_4080x1760.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This principle guides the trade-off between <em>helpfulness</em> and <em>reviewability</em>. A wider diff feels more helpful because the agent saw a related issue and addressed it on the way past. A wider diff is also harder to trust because review cost grows with diff size, and reviewers stop trusting any of the changes once one of them looks unrelated. Build in a fallback for genuine ambiguity: <em>&#8220;if the fix demonstrably requires another file, name that file before editing it and explain why&#8221;</em>. The principle should block silent expansion, not legitimate cross-file work.</p><h2><strong>Act 3: Surviving Contact with Reality</strong></h2><p>The first two acts assume the skill exists at a single moment in time. The world is not constant. The codebase changes, the libraries update, the team turns over, and the model the skill was authored against gets replaced by a stronger one that interprets its instructions slightly differently. These principles cover what happens to a skill over time, and how authoring practice itself has to anticipate that drift from the start.</p><h3><strong>8. Skills decay</strong></h3><p>Libraries update. APIs change. Conventions evolve. A skill written six months ago against last quarter&#8217;s framework now points at a renamed function, a deprecated flag, or an API surface that has moved. Unlike a stale comment an engineer skims past, the agent invokes the stale skill <em>confidently</em> and produces wrong output that looks right.</p><p>The principle: <strong>skills are living artefacts, not frozen docs.</strong> A skill you have not re-run in months is a liability you have not measured.</p><p>No single pattern in the <a href="https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics">previous post</a> serves this principle directly. Decay is a property of the system over time rather than something you fix inside a <code>SKILL.md</code>. The trade-off note attached to <em>Known Gotchas</em>, &#8220;gotchas are a moving target&#8221;, is a special case. A skill that pinned a deprecated framework flag will write code the framework refuses to compile, with the agent citing the stale skill as justification. Pattern catalogues rarely catch that failure mode because the failure happens months after the skill was correct.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zvc0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zvc0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png 424w, https://substackcdn.com/image/fetch/$s_!zvc0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png 848w, https://substackcdn.com/image/fetch/$s_!zvc0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png 1272w, https://substackcdn.com/image/fetch/$s_!zvc0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zvc0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:155483,&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://generativeprogrammer.com/i/197111813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.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_!zvc0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png 424w, https://substackcdn.com/image/fetch/$s_!zvc0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png 848w, https://substackcdn.com/image/fetch/$s_!zvc0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png 1272w, https://substackcdn.com/image/fetch/$s_!zvc0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47bcc9fb-bc49-401b-a1c2-13edf4491743_4080x2040.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This principle guides the trade-off between <em>stability</em> and <em>staleness</em>. A skill you never touch is stable, but stability is not the same as correctness. The world it describes drifts away from the skill faster than the skill drifts from itself. Treat skills the way you treat any piece of code that can drift from the system it touches: assign an owner, exercise them periodically against current tasks, and retire them honestly when they stop earning their keep. The principle does not prescribe a calendar. What matters is that someone is watching, not how often.</p><h3><strong>9. Run before you ship</strong></h3><p>A skill written from imagination at authoring time describes the world the author <em>hoped for</em>, not the world the agent encounters. It ships with the wrong rebuttals, the wrong gotchas, and helper scripts the author guessed at. The first real invocation reveals all three at once.</p><p>The principle, from Anthropic&#8217;s <code>skill-creator</code>: <strong>the skill is debugged from observed runs, not from your imagination at authoring time.</strong> Run it on two or three realistic test cases. Read the transcripts. If multiple runs wrote the same helper independently, promote that helper into <code>scripts/</code>. If the model produced the same rationalisation twice, write the rebuttal. If the same gotcha tripped two different runs, document it.</p><p>No pattern in the <a href="https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics">previous post</a> serves this principle in isolation. Running a skill is not a thing you put inside the <code>SKILL.md</code>; it is a thing you do <em>to</em> the <code>SKILL.md</code>. But this principle is upstream of several others: the rebuttals in <em>Anticipate the excuse</em>, the gotcha entries any mature skill accumulates, and the helper scripts that get promoted into <code>scripts/</code>. None of these should be guessed at the desk. They are <em>observed</em> during test runs and added back into the skill afterwards.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!idjZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!idjZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png 424w, https://substackcdn.com/image/fetch/$s_!idjZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png 848w, https://substackcdn.com/image/fetch/$s_!idjZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png 1272w, https://substackcdn.com/image/fetch/$s_!idjZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!idjZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png" width="1456" height="669" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:669,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:154297,&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://generativeprogrammer.com/i/197111813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.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_!idjZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png 424w, https://substackcdn.com/image/fetch/$s_!idjZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png 848w, https://substackcdn.com/image/fetch/$s_!idjZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png 1272w, https://substackcdn.com/image/fetch/$s_!idjZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60df272-ef9c-4980-a6e8-bff4b0156b4a_4080x1876.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>This principle guides the trade-off between <em>speed</em> and <em>correctness</em>. Imagination-authoring is fast. You can ship the first version of a skill in an afternoon, and on simple skills the difference rarely matters. Real-run authoring is slower on the first version, and only pays back from the second version onward, when the rebuttals and gotchas you observed in the test runs save the user from hitting them in production. For genuinely tiny skills, such as a one-line alias or a five-line reference, the loop is overkill. For anything with a workflow, a non-negotiable rule, or a script, the loop is what separates a skill that compounds from one that ships broken and stays broken because no one watched it run.</p><h2><strong>The takeaway</strong></h2><p>The nine principles compose, but they also prioritise. <em>Metadata is the gate</em>, <em>Process over prose</em>, and <em>Run before you ship</em> are the foundations: a skill that does not fire never runs the workflow; a skill that is an essay never enforces the workflow; a skill that ships from imagination has the wrong workflow. The other six are corrective. They fix specific failure modes inside a skill that is otherwise structurally sound, but none of them can save a skill that gets the foundations wrong.</p><p>Skills are starting to become a well-understood building block for agents. My earlier posts looked at the mechanics: <a href="https://generativeprogrammer.com/p/12-agentic-harness-patterns-from">12 Agentic Harness Patterns from Claude Code</a> covered the runtime around the agent, and <a href="https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics">14 Skill Authoring Patterns</a> covered what to put inside a skill. This post is about the next layer: the principles that make a skill worth building, worth loading, and worth maintaining.</p><p>Software engineering has SOLID, KISS, YAGNI, and separation of concerns. Skill authoring needs the same kind of shared language. These nine principles are my proposal, drawn from working skills, popular skills, and the failure modes that show up once agents start using them for real.</p>]]></content:encoded></item><item><title><![CDATA[Distribution vs Escalation: When to Use Subagents or Advisors]]></title><description><![CDATA[Two patterns for scaling a Claude agent. Both add a second model to the loop, each with different trade offs. Here&#8217;s when to reach for each, and when to use both.]]></description><link>https://generativeprogrammer.com/p/subagents-vs-advisor-distribution</link><guid isPermaLink="false">https://generativeprogrammer.com/p/subagents-vs-advisor-distribution</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sat, 02 May 2026 14:48:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/da00dd13-8357-442b-a708-8e46af3135ac_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>The one-line difference</h2><p><strong>&gt; Subagents isolate context. Advisors unblock execution.</strong></p><p>Both patterns add a second model inside a Claude agent, each with different strengths. A subagent takes a piece of the work off the main agent&#8217;s hands and runs it in its own context window. An advisor never touches the work. It reads the shared transcript and returns guidance on what to do next. One scales throughput and context. The other scales judgment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ljr2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ljr2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png 424w, https://substackcdn.com/image/fetch/$s_!Ljr2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png 848w, https://substackcdn.com/image/fetch/$s_!Ljr2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png 1272w, https://substackcdn.com/image/fetch/$s_!Ljr2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ljr2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png" width="1456" height="973" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:973,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:606427,&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://generativeprogrammer.com/i/196204987?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.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_!Ljr2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png 424w, https://substackcdn.com/image/fetch/$s_!Ljr2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png 848w, https://substackcdn.com/image/fetch/$s_!Ljr2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png 1272w, https://substackcdn.com/image/fetch/$s_!Ljr2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9381ec84-d870-4d10-8f07-bc8dec7c437b_3475x2322.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Left: a main agent delegates a scoped task to a subagent, which runs independently and returns a result. Right: an executor stays in control and consults a stronger advisor when it hits a decision it can&#8217;t reasonably solve.</em></p><h2>The subagent pattern</h2><p><strong>In one line.</strong> A main agent delegates a scoped task to a separate subagent, which runs independently in its own context window and returns a result.</p><p>Subagents are defined in Markdown files with YAML frontmatter, stored in <code>.claude/agents/</code> (project) or <code>~/.claude/agents/</code> (user). Each one <a href="https://code.claude.com/docs/en/sub-agents">runs in its own context window with a custom system prompt, specific tool access, and independent permissions</a>. When Claude encounters a task that matches a subagent&#8217;s description, it delegates, the subagent works independently, and the summary returns to the parent conversation.</p><p>The docs are direct on when to reach for one: <em>&#8220;a side task would flood your main conversation with search results, logs, or file contents you won&#8217;t reference again.&#8221;</em> Running tests, fetching documentation, processing log files. The verbose output stays in the subagent&#8217;s context; only the relevant summary comes back.</p><p>You can restrict tools with an allowlist or denylist, pick the model (<code>sonnet</code>, <code>opus</code>, <code>haiku</code>, or <code>inherit</code>), set permission modes, scope MCP servers, attach skills, enable persistent memory, run in an isolated git worktree. Claude Code ships with three <a href="https://code.claude.com/docs/en/sub-agents#built-in-subagents">built-in subagents</a>: <strong>Explore</strong> (Haiku, read-only, for codebase search), <strong>Plan</strong> (read-only, for plan mode), and <strong>general-purpose</strong> (all tools).</p><p>One structural constraint: subagents cannot spawn other subagents as nested delegation is not supported. If you need it, the docs point at <a href="https://code.claude.com/docs/en/skills">skills</a> or chaining subagents from the main conversation.</p><p><strong>There are two flavors of subagents: fresh-start vs forked.</strong> </p><ul><li><p>The default subagent starts with empty context. </p></li><li><p>A <a href="https://code.claude.com/docs/en/sub-agents#fork-the-current-conversation">forked subagent</a>, behind the experimental <code>CLAUDE_CODE_FORK_SUBAGENT=1</code> flag, inherits the parent&#8217;s full transcript, system prompt, tools, and model instead. Tool calls still stay out of the parent&#8217;s view and only the final result returns, so the context-window benefit holds. Because the system prompt and tool definitions match the parent, the first request reuses the parent&#8217;s prompt cache, which makes a fork cheaper than a fresh subagent for context-heavy side work. Reach for forked subagents when re-explaining the situation to a fresh subagent would cost more than it saves, or when you want to try several approaches in parallel from the same starting point.</p></li></ul><p><strong>The main trade-off.</strong> A default subagent starts fresh, trading conversation continuity for isolation and tool restrictions. A fork keeps the continuity but gives up the ability to swap models, restrict tools, or override the system prompt. In both cases, returns add back to the main context window, so running many subagents that each return detailed results can re-flood the context you were trying to keep clean.</p><h2>The advisor pattern</h2><p><strong>In one line.</strong> A faster and cheaper executor (Sonnet or Haiku) consults a stronger advisor (Opus) model mid-generation, inside a single <code>/v1/messages</code> request.</p><p>The advisor tool ships as <code>advisor_20260301</code> on the Claude Platform. You declare it alongside your other tools in the Messages API, and the executor decides when to invoke it. The advisor <a href="https://claude.com/blog/the-advisor-strategy">never calls tools or produces user-facing output</a>. It reads the shared transcript, returns a plan, a correction, or a stop signal, and the executor resumes.</p><p>The handoff is a server-side sub-inference inside one <code>/v1/messages</code> request. No extra round-trips. Advisor responses are short, typically 400 to 700 text tokens, and <code>max_uses</code> caps them per request. Executor and advisor tokens bill at their own rates, so the overall run costs well below running the advisor model end-to-end.</p><p>In Anthropic&#8217;s evaluations, <a href="https://claude.com/blog/the-advisor-strategy">Sonnet with an Opus advisor gained 2.7 percentage points on SWE-bench Multilingual and reduced cost per task by 11.9%</a>. The framing is deliberate: the advisor strategy <em>&#8220;inverts a common sub-agent pattern, where a larger orchestrator model decomposes work and delegates to smaller worker models.&#8221;</em> Here, the smaller model drives and escalates. Frontier reasoning applies only when the executor needs it.</p><p>The pattern has academic precedent. UC Berkeley researchers <a href="https://arxiv.org/abs/2510.02453">formalised it in late 2025</a> as &#8220;advisor models&#8221;: small policies trained to generate per-instance natural-language steering for larger black-box models. The paper found that advice generalises across model families (advisors trained on GPT transferred to Claude without retraining), which is why this is an architecture pattern, not a Claude feature. Anthropic&#8217;s contribution is making it a one-line tool declaration experience.</p><p><strong>The main trade-off.</strong> Every escalation is a synchronous pause in the executor&#8217;s stream while the advisor runs. The advice is one-shot. No iteration, no debate. If the advisor is wrong on a specific point, the executor&#8217;s only recourse is another advisor call to reconcile, which burns more of the <code>max_uses</code> budget.</p><h2>A decision framework</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g9hx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g9hx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png 424w, https://substackcdn.com/image/fetch/$s_!g9hx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png 848w, https://substackcdn.com/image/fetch/$s_!g9hx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png 1272w, https://substackcdn.com/image/fetch/$s_!g9hx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g9hx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png" width="1456" height="1170" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1170,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:606571,&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://generativeprogrammer.com/i/196204987?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.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_!g9hx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png 424w, https://substackcdn.com/image/fetch/$s_!g9hx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png 848w, https://substackcdn.com/image/fetch/$s_!g9hx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png 1272w, https://substackcdn.com/image/fetch/$s_!g9hx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c91590c-b4b9-47e6-a44e-5ee58dea41e8_1708x1372.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Comparison of subagent and advisor patterns</figcaption></figure></div><p>Questions separate them:</p><ol><li><p><strong>Does the work split into specialized, distinct tasks with well-defined inputs and outputs?</strong> Subagents. Distribution pays when each unit of work has a clear start, a clear end, and doesn&#8217;t need a back-and-forth conversation with the main agent in the middle.</p></li><li><p><strong>Does the work mostly need better judgment, not more hands?</strong> Advisor. One model can usually handle a task if someone smarter checks in at the hard moments.</p></li><li><p><strong>Is a side task about to flood the main context with output you won&#8217;t reuse?</strong> Subagent, read-only, summarize back. This is the pattern&#8217;s textbook case.</p></li></ol><p>When none of these fire cleanly, the work is probably small enough to stay in the main conversation.</p><h2>When to use both</h2><p>The two patterns compose. A Sonnet executor can consult an Opus advisor on hard decisions and spawn Haiku subagents for bounded or parallelizable subtasks in the same run. Distribution handles breadth, escalation handles depth, and the cost shape composes too: Haiku does the cheap bulk, Opus applies frontier reasoning only where it changes the outcome, and Sonnet carries the rest.</p><p>A subagent is its own Claude run, so it can carry its own advisor too. Anthropic has only benchmarked the top-level composition publicly; treat nested advisor-inside-subagent as an op</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EuOX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EuOX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.png 424w, https://substackcdn.com/image/fetch/$s_!EuOX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.png 848w, https://substackcdn.com/image/fetch/$s_!EuOX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.png 1272w, https://substackcdn.com/image/fetch/$s_!EuOX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EuOX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.png" width="1456" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.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;:160401,&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://generativeprogrammer.com/i/196204987?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.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_!EuOX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.png 424w, https://substackcdn.com/image/fetch/$s_!EuOX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.png 848w, https://substackcdn.com/image/fetch/$s_!EuOX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.png 1272w, https://substackcdn.com/image/fetch/$s_!EuOX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d1043-3346-4358-aa54-20d061b3c6aa_1884x1014.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>A Sonnet executor consults an Opus advisor on hard decisions and spawns Haiku subagents for bounded subtasks</em></p><div><hr></div><h2>One more shape: agent teams</h2><p>There is also a third shape worth naming: <a href="https://code.claude.com/docs/en/agent-teams">agent teams</a>. Use them when subagents need to talk to each other directly, not just report back to a parent. They are more experimental, more complex, and harder to reason about than either pattern here. Reach for them only when the coordination overhead is justified. For a deeper comparison between subagents and agent teams, <a href="https://medium.com/@han.heloir/sub-agent-vs-agent-team-in-claude-code-pick-the-right-pattern-in-60-seconds-e856e5b4e5cc">Han HELOIR YAN&#8217;s write-up</a> is the clearest one I&#8217;ve found.</p><h2>The takeaway</h2><p>Subagents break a complex task into smaller blocks, each with its own context, tools, and specialization. The advisor makes each block more autonomous: when the cheaper model hits a hard call, the stronger one is a tool call away. Together, they give you specialization plus depth, a real step toward long-horizon agent runs that a single model  in a single context cannot sustain.</p><p><em>Sources: <a href="https://claude.com/blog/the-advisor-strategy">The advisor strategy</a>, Anthropic, April 9, 2026. <a href="https://code.claude.com/docs/en/sub-agents">Create custom subagents</a>, Claude Code documentation.</em></p>]]></content:encoded></item><item><title><![CDATA[12 MCP Patterns Behind Production Agents]]></title><description><![CDATA[A practical breakdown of the recurring design patterns behind real-world agent and mcp integrations.]]></description><link>https://generativeprogrammer.com/p/12-mcp-patterns-behind-production</link><guid isPermaLink="false">https://generativeprogrammer.com/p/12-mcp-patterns-behind-production</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sat, 25 Apr 2026 14:11:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/24153e2b-0e73-4f79-81e8-81d0193b4b7b_8408x4402.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few weeks ago I pulled <a href="https://generativeprogrammer.com/p/12-agentic-harness-patterns-from">12 agentic harness patterns</a> from the Claude Code leak. Then I wrote about <a href="https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics">14 patterns for authoring Skills</a>, the layer that extends the agent. Anthropic keeps dropping excellent posts where they share what they are learning from building and running agents in the real world. After reading the latest one, I could not resist doing the same thing again: study the recurring ideas, reformulate them as patterns, give each one a name, and support them with visuals that make the trade-offs easier to see.</p><p>This post goes one layer further out. Once an agent has a harness and a way to load Skills, the next question is more practical: how does it reach the production systems it needs to do real 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_!ijrv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ijrv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png 424w, https://substackcdn.com/image/fetch/$s_!ijrv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png 848w, https://substackcdn.com/image/fetch/$s_!ijrv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png 1272w, https://substackcdn.com/image/fetch/$s_!ijrv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ijrv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1159074,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.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_!ijrv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png 424w, https://substackcdn.com/image/fetch/$s_!ijrv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png 848w, https://substackcdn.com/image/fetch/$s_!ijrv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png 1272w, https://substackcdn.com/image/fetch/$s_!ijrv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F236f3485-2b21-427f-91ec-5ce611343b6b_5280x3300.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">12 MCP Integration Patterns from Anthropic</figcaption></figure></div><p>Anthropic&#8217;s post, <a href="https://claude.com/blog/building-agents-that-reach-production-systems-with-mcp">Building agents that reach production systems with MCP</a>, is about exactly that. It compares direct API calls, CLIs, and MCP, then explains why production agents increasingly land on MCP: agents are moving to the cloud, the systems they need are remote, and auth, discovery, and rich interaction need a common layer. Anthropic says they are seeing this across more than 200 MCP servers, millions of daily Claude users, and fast-growing MCP SDK usage.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/p/12-mcp-patterns-behind-production?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://generativeprogrammer.com/p/12-mcp-patterns-behind-production?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p>The original post is written as practical guidance for MCP servers and clients. I am taking a slightly different angle: the pattern view. What are the reusable shapes behind the advice? What problems do they solve? When should you use them? And what are the trade-offs? I see 12 core patterns spread across five groups.</p><h2><strong>Tool surface</strong></h2><p>The shape of your tool set is the first architectural choice, and it is rarely &#8220;one tool per endpoint.&#8221; Three default moves cover the span from small services to hundreds-of-endpoints monsters.</p><h3><strong>1. Remote-First Server Pattern</strong></h3><p>The first foundational architectural choice for an MCP server is where it runs.</p><p>Local MCP servers over stdio work only when the agent can spawn a child process on the same machine: desktop Claude, local IDE agents, and some CLIs. That excludes agents running in browsers, mobile apps, or cloud execution environments, which is where most production agent traffic is heading.</p><p>Build the server as a remote HTTP endpoint from day one, not as a local-only module the team might &#8220;put on the network later&#8221;. Every other production concern in this post (auth, elicitation, discovery) assumes the server is reachable over the network. A local-only server has to rebuild each of those the moment it needs to scale beyond the local machine.</p><p>Remote-first also makes distribution portable. One server, one auth flow, many clients. No per-client bundle to ship, no machine-level install to maintain.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ETOA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ETOA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png 424w, https://substackcdn.com/image/fetch/$s_!ETOA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png 848w, https://substackcdn.com/image/fetch/$s_!ETOA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png 1272w, https://substackcdn.com/image/fetch/$s_!ETOA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ETOA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png" width="1456" height="528" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:528,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:198552,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.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_!ETOA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png 424w, https://substackcdn.com/image/fetch/$s_!ETOA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png 848w, https://substackcdn.com/image/fetch/$s_!ETOA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png 1272w, https://substackcdn.com/image/fetch/$s_!ETOA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ce50a1-6753-4eea-ad60-fa84c98f925e_4520x1640.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Any time the agent on the other side might not run on the same machine as the server. In practice, this is the default for most production integrations.</p><p><strong>The main trade-off.</strong> Network transport raises the bar on reliability, latency budgeting, and auth. You have to engineer a public surface where a local process would have been enough, and you carry the operational weight of every internet-facing service.</p><h3><strong>2. Intent-Grouped Tools Pattern</strong></h3><p>This is probably the most common MCP server design mistake: exposing one tool per API endpoint. It feels like the fastest and most faithful implementation, but it creates the wrong interface for agents.</p><p>The agent does not think in API endpoints. It thinks in tasks. A 1:1 API wrapper leaves the agent assembling long chains of primitives. More tool definitions in context, more round-trips per task, more ways to get the chain wrong.</p><p>Group tools around user intent, not around the endpoints they happen to hit. </p><p>A single <code>create_issue_from_thread</code> tool is better than </p><p><code>get_thread</code> + <code>parse_messages</code> + <code>create_issue</code> + <code>link_attachment</code>. </p><p>The agent goes from a four-call chain to a one-call intent, and each intent is something a human reviewer can reason about directly.</p><p>The implication is that your MCP server is not a proxy. It is a new surface. Expect to write wrapper tools that compose multiple endpoints, normalise half-formed IDs, retry on rate-limited calls, and return the output the agent will actually use, not the output the endpoint happened to produce. Anthropic has a <a href="https://www.anthropic.com/engineering/writing-tools-for-agents">companion post on writing effective tools</a> that covers the craft details.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7GOT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7GOT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png 424w, https://substackcdn.com/image/fetch/$s_!7GOT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png 848w, https://substackcdn.com/image/fetch/$s_!7GOT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png 1272w, https://substackcdn.com/image/fetch/$s_!7GOT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7GOT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png" width="1456" height="1007" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1007,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:176377,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.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_!7GOT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png 424w, https://substackcdn.com/image/fetch/$s_!7GOT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png 848w, https://substackcdn.com/image/fetch/$s_!7GOT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png 1272w, https://substackcdn.com/image/fetch/$s_!7GOT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f629a4f-ff2d-4050-994e-ca3526d99c93_3180x2200.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Default for any service with roughly fifty or fewer tools. When you find yourself inventing a fifth parameter to keep tool count down, you have probably outgrown this pattern.</p><p><strong>The main trade-off.</strong> Every new intent is new code on your side, not a schema export. The server stops being a thin translation layer and becomes a product surface you have to design, test, and version.</p><h3><strong>3. Thin Surface Pattern</strong></h3><p>Some services have hundreds, sometimes thousands, of operations: Cloudflare, AWS, Kubernetes. Even grouped by intent, the full toolset blows past what fits in context, and any given agent task touches only a sliver of it.</p><p>Drop the intent-grouped model and expose a deliberately thin surface that accepts code. Two tools suffice: a <code>search</code> tool that lets the agent find the right API operation, and an <code>execute</code> tool that runs a short script written by the agent against the underlying API in a server-side sandbox. Only the result returns to the model.</p><p><a href="https://github.com/cloudflare/mcp">Cloudflare&#8217;s MCP server</a> is the reference implementation: two tools cover roughly 2,500 endpoints in about 1,000 tokens of definitions. The agent gets the full expressive power of the API without paying to have every operation described upfront. The sandbox contains the blast radius. Scripts cannot reach past what the server hands them. This pattern compounds with <a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling">Programmatic Tool Calling</a> on the client side: the client processes results in its sandbox, the server executes calls in its sandbox, and raw data never needs to reach the model.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nYm-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nYm-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png 424w, https://substackcdn.com/image/fetch/$s_!nYm-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png 848w, https://substackcdn.com/image/fetch/$s_!nYm-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png 1272w, https://substackcdn.com/image/fetch/$s_!nYm-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nYm-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png" width="1456" height="735" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:735,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:158990,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.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_!nYm-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png 424w, https://substackcdn.com/image/fetch/$s_!nYm-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png 848w, https://substackcdn.com/image/fetch/$s_!nYm-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png 1272w, https://substackcdn.com/image/fetch/$s_!nYm-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84159d1f-fc6d-4388-9639-341b4cc0614d_4360x2200.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> When an intent-grouped surface would need more than roughly thirty to fifty tools to be useful, or when the underlying service is API-shaped (Cloudflare, AWS) rather than intent-shaped (Linear, Slack).</p><p><strong>The main trade-off.</strong> You inherit sandbox operations. Script isolation, resource limits, timeout policies, and API-key handling inside the sandbox are all your problem. The agent has more power, which means you have more to defend.</p><h2><strong>Interaction Semantics</strong></h2><p>A tool that only returns text pushes the UI problem to the model. That is fine for small answers, but a poor fit for dashboards, tables, forms, previews, confirmations, and anything else the user needs to inspect or act on.</p><p>MCP adds interaction primitives that let the server take back some of that responsibility. Instead of asking the model to describe everything in prose, the server can return UI, ask for structured input, or hand the user to an external flow when needed.</p><h3><strong>4. Inline UI Pattern</strong></h3><p>A tool that returns a wall of JSON leaves the user reading compressed prose about their own data. For anything dashboard-shaped, such as charts, tables, forms, and interactive confirmations, the agent is the wrong rendering layer.</p><p>Ship UI with the tool response. <a href="https://modelcontextprotocol.io/extensions/apps/overview">MCP Apps</a> let the server return an interactive interface that the client renders inline in chat: charts, forms, dashboards, and mini-views built from your product&#8217;s real components.</p><p>The bar is not &#8220;build a full web app.&#8221; The bar is simpler: if the tool&#8217;s result is something a user wants to look at rather than hear described, return a view, not a paragraph. Your product&#8217;s design system is more readable than any Markdown the model can synthesise.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YQge!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YQge!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png 424w, https://substackcdn.com/image/fetch/$s_!YQge!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png 848w, https://substackcdn.com/image/fetch/$s_!YQge!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png 1272w, https://substackcdn.com/image/fetch/$s_!YQge!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YQge!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png" width="1456" height="548" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:548,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:181570,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.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_!YQge!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png 424w, https://substackcdn.com/image/fetch/$s_!YQge!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png 848w, https://substackcdn.com/image/fetch/$s_!YQge!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png 1272w, https://substackcdn.com/image/fetch/$s_!YQge!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7ca77e-ecde-4348-b1d9-462b1616ddc0_4520x1700.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Any tool whose output is fundamentally visual or tabular: search results, dashboards, file previews, status views.</p><p><strong>The main trade-off.</strong> You now ship UI alongside your API, which means component versioning, accessibility, and design review. The MCP server is no longer backend-only.</p><h3><strong>5. Elicited Input Pattern</strong></h3><p>Agents hit real-world ambiguity constantly: missing parameters, destructive actions that need confirmation, multiple matches that need disambiguation. The usual fallback is to guess, or to ask the user to restart the conversation with more detail. Both cost trust.</p><p>Pause the tool call and ask the user directly. MCP elicitation, specifically <a href="https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation#form-mode-elicitation-requests">Form Mode</a>, lets the server return a form schema mid-call. The client renders it natively. The user fills it. Control returns to the server, and the tool completes.</p><p>This keeps the user in the flow instead of sending them back to model output with &#8220;please specify the region.&#8221; The agent&#8217;s job stays the same; the server gets to be honest about what it does not yet know.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H89C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H89C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png 424w, https://substackcdn.com/image/fetch/$s_!H89C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png 848w, https://substackcdn.com/image/fetch/$s_!H89C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png 1272w, https://substackcdn.com/image/fetch/$s_!H89C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H89C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png" width="1456" height="470" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:470,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:124565,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.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_!H89C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png 424w, https://substackcdn.com/image/fetch/$s_!H89C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png 848w, https://substackcdn.com/image/fetch/$s_!H89C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png 1272w, https://substackcdn.com/image/fetch/$s_!H89C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4e1c1dd-b685-423f-8871-df2f8864614f_4400x1420.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> When the missing information is structured, such as a region, an ID, or a confirmation, and the user is the only source of truth.</p><p><strong>The main trade-off.</strong> Every elicitation is a UX moment your server now owns. Poor form design turns a helpful pause into an annoying interrogation, and the pattern is untested in headless or batch agents where no human is available to fill it.</p><h3><strong>6. External Handoff Pattern</strong></h3><p>Some steps should never transit the MCP client at all. Downstream OAuth against a third party, taking a payment, collecting a credential that the agent&#8217;s context window must not see. If the client sees it, your threat model just widened.</p><p>This is not for authorizing the MCP client to access the MCP server. That belongs to MCP authorization. URL Mode is for sensitive downstream flows the server needs to complete on the user&#8217;s behalf.</p><p>Hand the user to a browser URL with <a href="https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation#url-mode-elicitation-requests">URL-Mode elicitation</a>. The server returns a link; the client opens it in the user&#8217;s browser; the user completes the sensitive flow out-of-band; control returns to the server once it is done. The MCP client never sees the secret. This is the right shape for downstream OAuth, payments, or any credential that should never transit the MCP client.</p><p>The distinguishing question between this and Form-Mode elicitation is <em>where the secret lives after the interaction</em>. Data the server can legitimately hold goes to Form Mode. Data a third party should hold goes to URL Mode.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PDy8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PDy8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png 424w, https://substackcdn.com/image/fetch/$s_!PDy8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png 848w, https://substackcdn.com/image/fetch/$s_!PDy8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png 1272w, https://substackcdn.com/image/fetch/$s_!PDy8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PDy8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png" width="1456" height="627" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:627,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:141356,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.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_!PDy8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png 424w, https://substackcdn.com/image/fetch/$s_!PDy8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png 848w, https://substackcdn.com/image/fetch/$s_!PDy8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png 1272w, https://substackcdn.com/image/fetch/$s_!PDy8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f427380-90e3-4c24-adff-d8c0cf90cca4_4520x1948.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Third-party OAuth flows, payments, and anything governed by compliance rules that say the credential never hits your infrastructure.</p><p><strong>The main trade-off.</strong> The user leaves the agent interface. Every handoff is a chance for them to drop off, and you have to design resume-after-redirect cleanly.</p><h2><strong>Auth and Credential Flow</strong></h2><p>Production agents run in the cloud, against systems protected by OAuth. Two patterns replace custom per-server authentication with standard plumbing.</p><h3><strong>7. Discoverable Auth Pattern</strong></h3><p>Every MCP server that invents its own auth adds friction at install time: configuration screens, token pastes, stale credentials. First-time failure rates climb, and re-auth prompts wear users down.</p><p>Publish and support standard OAuth metadata so the client can discover how authentication should work. For client registration, MCP supports <a href="https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#client-id-metadata-documents">Client ID Metadata Documents</a>: the client uses an HTTPS URL as its <code>client_id</code>, and that URL points to a JSON document describing the client, its redirect URIs, and related metadata.</p><p>The practical effect: a user adds the server, the client discovers the auth flow, OAuth starts with the right client metadata, and the user does not have to paste tokens or manually configure client IDs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hycv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hycv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png 424w, https://substackcdn.com/image/fetch/$s_!Hycv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png 848w, https://substackcdn.com/image/fetch/$s_!Hycv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png 1272w, https://substackcdn.com/image/fetch/$s_!Hycv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hycv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png" width="1456" height="788" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:788,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:238705,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.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_!Hycv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png 424w, https://substackcdn.com/image/fetch/$s_!Hycv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png 848w, https://substackcdn.com/image/fetch/$s_!Hycv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png 1272w, https://substackcdn.com/image/fetch/$s_!Hycv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8633ef-af10-49bf-b3d2-7b9fbc4e0368_5100x2760.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><strong>When to use.</strong> Every production MCP server with user-scoped data. It is not optional if the goal is cross-client adoption.</p><p><strong>The main trade-off.</strong> You are committing to standard OAuth behavior rather than a shortcut that works only for your own client. That means metadata endpoints, scope discipline, redirect URI validation, token validation, and the operational discipline to keep the flow working across clients.</p><h3><strong>8. Vault-Held Credentials Pattern</strong></h3><p>Even with discoverable auth, OAuth tokens still need a home. If every MCP server handles tokens directly, every integration ends up rebuilding the same secret store, refresh loop, rotation policy, and revocation path.</p><p>Offload token lifecycle to a platform <a href="https://platform.claude.com/docs/en/managed-agents/vaults#mcp-oauth-credential">vault</a>. In Claude Managed Agents, OAuth credentials can be registered once, referenced by vault ID at session creation, and injected into the right MCP connections by the platform.</p><p>The practical effect: the MCP server does not need to receive tokens in tool calls or implement its own token storage. Refresh, revocation, and credential handling move one layer up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zXhp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zXhp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png 424w, https://substackcdn.com/image/fetch/$s_!zXhp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png 848w, https://substackcdn.com/image/fetch/$s_!zXhp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png 1272w, https://substackcdn.com/image/fetch/$s_!zXhp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zXhp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png" width="1456" height="631" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:631,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:154499,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.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_!zXhp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png 424w, https://substackcdn.com/image/fetch/$s_!zXhp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png 848w, https://substackcdn.com/image/fetch/$s_!zXhp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png 1272w, https://substackcdn.com/image/fetch/$s_!zXhp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4f3a247-e5b8-4444-81b9-e7b130f67ebd_4520x1960.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Whenever you are shipping on a managed-agent platform that offers a vault. At a minimum, design your server so that credentials could be injected from one. Do not bake token handling into tool calls.</p><p><strong>The main trade-off.</strong> You are trusting a platform vault with production credentials. Its uptime, security posture, and export policy become part of your production story. Self-hosted servers outside a managed platform have to rebuild the pattern themselves.</p><h2><strong>Context Economy</strong></h2><p>The agent&#8217;s context window is finite. Two client-side patterns keep it lean even when the tool population and tool results are large.</p><h3><strong>9. On-Demand Tool Loading Pattern</strong></h3><p>A client connected to several MCP servers can easily have hundreds of tool definitions in play. Loading all of them upfront blows the context budget before the first tool even fires.</p><p>Load tool definitions lazily through a tool-search meta-tool. The agent searches for tools by description; only matching definitions are loaded into context; everything else stays out. Tool search can cut tool-definition tokens significantly while maintaining high selection accuracy (<a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool">docs</a>).</p><p>This is the client-side complement to Intent-Grouped Tools and Thin Surface on the server side. Good server design keeps the total tool count manageable. Good client design keeps only the needed subset in context.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6ooc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6ooc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png 424w, https://substackcdn.com/image/fetch/$s_!6ooc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png 848w, https://substackcdn.com/image/fetch/$s_!6ooc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png 1272w, https://substackcdn.com/image/fetch/$s_!6ooc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6ooc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png" width="1456" height="756" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:756,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:239297,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.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_!6ooc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png 424w, https://substackcdn.com/image/fetch/$s_!6ooc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png 848w, https://substackcdn.com/image/fetch/$s_!6ooc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png 1272w, https://substackcdn.com/image/fetch/$s_!6ooc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52391048-661c-4a46-8c79-f30d2a53f982_4200x2180.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Any agent with more than a handful of tool sources, or any cross-cutting task that might touch tools from several MCP servers.</p><p><strong>The main trade-off.</strong> The search step adds a round-trip and depends on description quality. Tools with vague descriptions will not surface when they should, and the cost of a miss is the agent picking a neighbouring tool that looks close.</p><h3><strong>10. Programmatic Tool Calling Pattern</strong></h3><p>Tool results, such as long lists, nested JSON, logs, traces, or large document payloads, often land in the model&#8217;s context window raw. The agent pays tokens to read them, even when the task is only to filter, count, aggregate, or join the data.</p><p>Process tool results in a code-execution sandbox before they reach the model. <a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling">Programmatic tool calling</a> lets the agent loop, filter, and aggregate across calls in code, with only the final useful output entering context. The same idea is described in more detail in the engineering post on <a href="https://www.anthropic.com/engineering/code-execution-with-mcp">code execution with MCP</a>.</p><p>This cuts token usage on complex multi-step workflows and compounds with On-Demand Tool Loading. Fewer tool definitions go in, less raw data comes back, and the model reasons over the result rather than the full payload.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-jXg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-jXg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png 424w, https://substackcdn.com/image/fetch/$s_!-jXg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png 848w, https://substackcdn.com/image/fetch/$s_!-jXg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png 1272w, https://substackcdn.com/image/fetch/$s_!-jXg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-jXg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png" width="1456" height="588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157566,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.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_!-jXg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png 424w, https://substackcdn.com/image/fetch/$s_!-jXg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png 848w, https://substackcdn.com/image/fetch/$s_!-jXg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png 1272w, https://substackcdn.com/image/fetch/$s_!-jXg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89adc740-4942-412a-841e-ce69e0b04d7e_4360x1760.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Multi-step workflows that chain several tool calls and transform results before the model needs to see them.</p><p><strong>The main trade-off.</strong> You need a sandbox environment, sandbox debugging, and a mental model that includes code the agent writes against your results. Simple single-call tools do not benefit.</p><h2><strong>Packaging and Distribution</strong></h2><p>A server on its own is rarely the whole integration. Two patterns ship servers with the skills, hooks, and subagents that make them useful.</p><h3><strong>11. Plugin Bundle Pattern</strong></h3><p>A real integration rarely ships as a single MCP server. It is usually an MCP server plus a Skill that teaches the agent how to use it, a subagent for specialised work, and hooks for lifecycle events. Distributing them separately creates configuration drift and version skew.</p><p>In Claude Code, ship them as one plugin. <a href="https://code.claude.com/docs/en/plugins-reference#plugin-components-reference">Plugins</a> bundle Skills, MCP servers, hooks, LSP servers, and specialised subagents into one distribution unit. One install, one version, one name.</p><p>The <a href="https://claude.ai/directory/plugins/data%40knowledge-work-plugins">data plugin for Cowork</a> is a good reference example: 10 Skills and 8 MCP servers covering Snowflake, Databricks, BigQuery, Hex, and more, installable as a unit.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VcKf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VcKf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png 424w, https://substackcdn.com/image/fetch/$s_!VcKf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png 848w, https://substackcdn.com/image/fetch/$s_!VcKf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png 1272w, https://substackcdn.com/image/fetch/$s_!VcKf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VcKf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png" width="1456" height="688" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:688,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:212253,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.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_!VcKf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png 424w, https://substackcdn.com/image/fetch/$s_!VcKf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png 848w, https://substackcdn.com/image/fetch/$s_!VcKf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png 1272w, https://substackcdn.com/image/fetch/$s_!VcKf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3262c44-a1ca-4648-b226-0b846237d282_4360x2060.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> Whenever your integration needs more than a bare MCP server to be genuinely useful, which in practice is most real-world integrations.</p><p><strong>The main trade-off.</strong> Bundling couples release cadences. An update to any component ships the whole plugin, and teams with independent release cycles per component will feel the drag.</p><h3><strong>12. Server-Distributed Skills Pattern</strong></h3><p>An MCP server gives the agent access to tools, but access is not the same as expertise. The server provider usually knows the best workflows, safe sequences, common mistakes, and domain-specific conventions. Without a way to share that knowledge, each client has to rediscover it, and each agent has to improvise.</p><p>Ship Skills from the MCP server itself. The client gets both the raw tool access and the procedural knowledge for using those tools well. In practice, the server does not only expose capabilities; it also ships the playbook for using them. Canva, Notion, and Sentry already do this in Claude today.</p><p>The MCP community is working on a portable <a href="https://github.com/modelcontextprotocol/experimental-ext-skills">extension</a> so that Skill delivery can work across compliant clients, versioned with the API the Skill depends on. Today the pattern is client-specific; the experimental extension makes it protocol-level.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FTp3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FTp3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png 424w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png 848w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png 1272w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FTp3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png" width="1456" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:193441,&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://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.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_!FTp3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png 424w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png 848w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png 1272w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765b9778-fc1d-43ac-9d0e-1a707361c4c4_4840x1980.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>When to use.</strong> When your MCP server wraps a surface rich enough that &#8220;how to use it well&#8221; is a real Skill, not a one-paragraph hint.</p><p><strong>The main trade-off.</strong> Experimental today. Early adopters of portable server-distributed Skills commit to spec changes; sitting out means losing the adoption advantage that comes with shipping expertise alongside capabilities.</p><h2><strong>The takeaway</strong></h2><p>These patterns are not only about MCP as a protocol. They show the shape production agent integrations are starting to take:</p><ul><li><p><strong>MCP servers are becoming agent-facing product surfaces.</strong> The useful ones expose intent-based tools, not endpoint mirrors. They hide API choreography, return agent-ready outputs, and sometimes return UI instead of prose.</p></li><li><p><strong>Interaction is moving beyond text.</strong> The server can ask for structured input, request confirmation, show inline UI, or hand the user to an external flow when secrets, payments, or third-party auth are involved.</p></li><li><p><strong>Auth is becoming standard plumbing.</strong> Discoverable OAuth flows and vault-held credentials move production agents away from custom token handling inside every tool call.</p></li><li><p><strong>Context is now an architectural constraint.</strong> Tool definitions need on-demand loading, and large tool results need filtering, joining, and aggregation before they hit the model. Otherwise, the context window becomes the bottleneck.</p></li><li><p><strong>Distribution is becoming richer than &#8220;ship an MCP server.&#8221;</strong> Real integrations include servers, Skills, hooks, subagents, and product-specific playbooks. The raw capability matters, but the instructions for using it well matter just as much.</p></li></ul><p>Some of these extensions are still early, and the patterns will keep evolving. But they are already visible in real MCP usage, and several are gaining traction across production servers and clients. That is why they are worth naming.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!csJd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!csJd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png 424w, https://substackcdn.com/image/fetch/$s_!csJd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png 848w, https://substackcdn.com/image/fetch/$s_!csJd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png 1272w, https://substackcdn.com/image/fetch/$s_!csJd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!csJd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png" width="1456" height="391" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:391,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:847811,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/195426893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!csJd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png 424w, https://substackcdn.com/image/fetch/$s_!csJd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png 848w, https://substackcdn.com/image/fetch/$s_!csJd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png 1272w, https://substackcdn.com/image/fetch/$s_!csJd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93818b36-e55f-41aa-b4d2-b4e4ef42d797_4896x1316.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you want to read the earlier parts of this series, start with these two posts:</p><ul><li><p><a href="https://generativeprogrammer.com/p/12-agentic-harness-patterns-from">12 Agentic Harness Patterns from Claude Code</a></p></li><li><p><a href="https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics">Skill Authoring Patterns from Anthropic&#8217;s Best Practices</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Skill Authoring Patterns from Anthropic’s Best Practices]]></title><description><![CDATA[A practical breakdown of the recurring design patterns behind effective Claude Skills, from activation metadata to executable helpers.]]></description><link>https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics</link><guid isPermaLink="false">https://generativeprogrammer.com/p/skill-authoring-patterns-from-anthropics</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 19 Apr 2026 00:15:01 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e81de257-b636-429e-989a-9f09ccccb334_4108x2292.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My <a href="https://generativeprogrammer.com/p/12-agentic-harness-patterns-from">previous post</a> pulled 12 patterns from the Claude Code harness itself, how the agent works under the hood. This one looks one layer up: when you author a Skill to extend Claude, what patterns recur?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fq1M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fq1M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png 424w, https://substackcdn.com/image/fetch/$s_!Fq1M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png 848w, https://substackcdn.com/image/fetch/$s_!Fq1M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png 1272w, https://substackcdn.com/image/fetch/$s_!Fq1M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fq1M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png" width="1456" height="1937" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1937,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1098577,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.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_!Fq1M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png 424w, https://substackcdn.com/image/fetch/$s_!Fq1M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png 848w, https://substackcdn.com/image/fetch/$s_!Fq1M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png 1272w, https://substackcdn.com/image/fetch/$s_!Fq1M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd771ce-e301-40d9-9341-40e07ceefe40_2688x3576.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Skills come in two rough types. <em>Task skills (often as disable-model-invocation: true)</em> are step-by-step workflows (deploy, commit, security-review) that a user often invokes directly via <code>/skill-name</code>. <em>Reference skills (user-invocable: false)</em> are passive knowledge (style guides, domain vocabulary) that Claude applies inline whenever a relevant request matches. Most of the patterns below apply to both, but where emphasis shifts I will call it out.</p><p>The 14 patterns fall into five categories: discovery and selection, context economy, instruction calibration, workflow control, and executable code.</p><h2><strong>Discovery and selection</strong></h2><p>Two patterns decide whether a skill fires at all. At session start Claude sees only metadata: the <code>name</code> and <code>description</code> of every installed skill. A skill that cannot survive this metadata-only round never runs.</p><h3><strong>1. Activation Metadata pattern</strong></h3><p>With dozens of installed skills, Claude picks the wrong one, or none at all, when descriptions are vague like &#8220;helps with documents&#8221;. The <code>description</code> field is not just a summary; it is the only signal Claude has at selection time.</p><p>This pattern packs the description with both what the skill does and the specific triggers or contexts that should fire it, written in third person. Anthropic&#8217;s skill-creator goes further and recommends writing descriptions that are a little &#8220;pushy&#8221;, since Claude has a measured tendency to <em>under</em>-trigger skills: &#8220;Make sure to use this skill whenever the user mentions dashboards, data visualization, or internal metrics, even if they do not explicitly ask for a dashboard.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!grB9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!grB9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png 424w, https://substackcdn.com/image/fetch/$s_!grB9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png 848w, https://substackcdn.com/image/fetch/$s_!grB9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png 1272w, https://substackcdn.com/image/fetch/$s_!grB9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!grB9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:160995,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.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_!grB9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png 424w, https://substackcdn.com/image/fetch/$s_!grB9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png 848w, https://substackcdn.com/image/fetch/$s_!grB9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png 1272w, https://substackcdn.com/image/fetch/$s_!grB9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7fe462-334d-40d7-a694-9bc363e5b1ec_2320x1512.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this pattern on every skill. Nothing else matters if the skill fails at selection. The trade-off is budget: in the open Agent Skills spec, the <code>description</code> field caps at 1024 characters; in Claude Code, the combined <code>description</code> and optional <code>when_to_use</code> text is truncated at 1536 characters in the skill listing. So every sentence competes with positive triggers, exclusion clauses, and domain keywords for space.</p><h3><strong>2. Exclusion Clause pattern</strong></h3><p>A description that only says when to fire misses half the job. The skill triggers on tangentially related requests, hijacks work that belongs to another skill, or steps in when bare Claude would have done fine.</p><p>This pattern ends the description with explicit exclusions: &#8220;Do NOT use for blog articles, newsletters, emails, tweets, or long-form content.&#8221; Ruben Hassid calls this <a href="https://ruben.substack.com/p/claude-skills">the single most important line in the description</a>, above the positive trigger. Positive triggers pull a skill in; exclusions push it out. Both are needed and they compete for the same budget.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pyVm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pyVm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png 424w, https://substackcdn.com/image/fetch/$s_!pyVm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png 848w, https://substackcdn.com/image/fetch/$s_!pyVm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png 1272w, https://substackcdn.com/image/fetch/$s_!pyVm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pyVm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png" width="1456" height="984" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:984,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:211012,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.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_!pyVm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png 424w, https://substackcdn.com/image/fetch/$s_!pyVm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png 848w, https://substackcdn.com/image/fetch/$s_!pyVm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png 1272w, https://substackcdn.com/image/fetch/$s_!pyVm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316b86fc-f729-4749-9397-c56a85c4942e_2640x1784.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this for any skill that shares vocabulary with other skills or with bare Claude (most of them). The trade-off is maintenance: as your skill library grows, exclusion clauses must be kept in sync so two skills do not both claim or both reject the same territory.</p><h2><strong>Context economy</strong></h2><p>Two patterns exist because the context window is a shared budget. Every token in your skill crowds out tokens from other skills, the conversation history, and the user&#8217;s actual request.</p><h3><strong>3. Context Budget pattern</strong></h3><p>A skill that re-explains what a PDF is, what a library is, or how JSON works spends tokens teaching Claude things Claude already knows. Multiply that waste across a library of 20 skills and the context window is half-full before the user has said anything.</p><p>This pattern demands each paragraph justify its token cost. Default assumption: Claude is smart. If removing a sentence would not confuse a competent reader, remove it. Consistent terminology matters too: pick one term (always &#8220;field&#8221;, never &#8220;field / box / element&#8221;) to reduce cognitive load. And avoid time-sensitive phrasing (&#8221;before August 2025...&#8221;) that dates the skill; put legacy information in an &#8220;old patterns&#8221; appendix instead.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zMxz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zMxz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png 424w, https://substackcdn.com/image/fetch/$s_!zMxz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png 848w, https://substackcdn.com/image/fetch/$s_!zMxz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png 1272w, https://substackcdn.com/image/fetch/$s_!zMxz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zMxz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png" width="1456" height="724" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:724,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:145621,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.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_!zMxz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png 424w, https://substackcdn.com/image/fetch/$s_!zMxz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png 848w, https://substackcdn.com/image/fetch/$s_!zMxz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png 1272w, https://substackcdn.com/image/fetch/$s_!zMxz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90dd7ab9-10c5-4c49-8527-9f0c2752e703_2880x1432.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this pattern on every skill; it is a baseline discipline. The trade-off shows up with less-capable models: what reads as crisply concise to Sonnet may be too terse for Haiku. If you target multiple models, aim for the level of detail that works for the weakest one you plan to support.</p><h3><strong>4. Progressive Disclosure pattern</strong></h3><p>Stuffing every detail into SKILL.md burns context on material most invocations never need. An 800-line SKILL.md with forms, API references, and examples costs the same whether the user asked about forms or about something else entirely.</p><p>This pattern treats SKILL.md as a table of contents. The body stays under 500 lines and links to domain files (<code>FORMS.md</code>, <code>REFERENCE.md</code>, <code>reference/finance.md</code>). Claude reads the metadata on every session; loads SKILL.md only when the skill is triggered; and pulls in detail files only when the current task references them. Scripts in <code>scripts/</code> can execute without loading, so their internal code usually stays out of the context window. Keep the reference graph shallow: every file one hop from SKILL.md. Nested chains like <code>SKILL.md -&gt; advanced.md -&gt; details.md</code> increase the odds Claude only partially reads the target and misses the rest. Long reference files, especially those over a few hundred lines, get a table of contents at the top so Claude can see the full scope even from a truncated read.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!66kK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!66kK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png 424w, https://substackcdn.com/image/fetch/$s_!66kK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png 848w, https://substackcdn.com/image/fetch/$s_!66kK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!66kK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!66kK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png" width="1456" height="976" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:976,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:155544,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.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_!66kK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png 424w, https://substackcdn.com/image/fetch/$s_!66kK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png 848w, https://substackcdn.com/image/fetch/$s_!66kK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!66kK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6cab25-1ed9-4b90-a8fd-b9df11fb094f_2720x1824.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this for any skill pushing past ~300 lines in SKILL.md. The trade-off is fragmentation: splitting content across files makes it harder for authors to hold the whole skill in their head, and Claude has to make correct routing decisions about which file to load next. Mis-routing costs turns.</p><h2><strong>Instruction calibration</strong></h2><p>Five patterns dial instruction specificity up or down. <em>Control Tuning</em> is the meta-rule for how tightly to constrain Claude. <em>Explain-the-Why</em> shapes how that specificity is phrased. <em>Template Scaffold</em>, <em>In-Skill Examples</em>, and <em>Known Gotchas</em> are concrete techniques at the low-freedom end of the dial.</p><h3><strong>5. Control Tuning pattern</strong></h3><p>A skill that rigidly scripts every action strangles Claude on tasks where context should shape the approach. A skill that gives only loose guidance fails on fragile procedures where one wrong step breaks everything.</p><p>This pattern matches instruction freedom to task fragility. <em>High freedom</em> (text instructions, &#8220;use your judgement&#8221;) fits open-field tasks like code review where many valid approaches exist. <em>Medium freedom</em> (pseudocode, parameterised scripts) fits preferred-but-flexible flows like a deploy runbook. <em>Low freedom</em> (exact scripts, no flags, &#8220;do not modify this command&#8221;) fits fragile operations like database migrations where one wrong step is catastrophic. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5ZYJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5ZYJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png 424w, https://substackcdn.com/image/fetch/$s_!5ZYJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png 848w, https://substackcdn.com/image/fetch/$s_!5ZYJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png 1272w, https://substackcdn.com/image/fetch/$s_!5ZYJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5ZYJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png" width="1456" height="1099" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1099,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:165448,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.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_!5ZYJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png 424w, https://substackcdn.com/image/fetch/$s_!5ZYJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png 848w, https://substackcdn.com/image/fetch/$s_!5ZYJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png 1272w, https://substackcdn.com/image/fetch/$s_!5ZYJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b8e3753-42a6-40a6-b8bd-5783c713f8db_2840x2144.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Tone is part of the dial too: opening with a persona (&#8221;You are a senior code reviewer focused on correctness over style&#8221;) sets the judgement rubric for the whole skill and is common in reference skills that shape voice.</p><p>Use this pattern by asking, for each step in the skill, how much variance is acceptable. The trade-off is judgement: authors consistently err toward over-constraining, because rigid instructions feel safer. They are not; they just fail differently.</p><h3><strong>6. Explain-the-Why pattern</strong></h3><p>Skills written as strings of ALWAYS, NEVER, MUST in capital letters give Claude rigid rules with no context. The model follows the letter but misses edge cases the author did not anticipate, or over-applies a rule in situations where a judgement call was needed. Anthropic&#8217;s skill-creator explicitly flags all-caps MUST/ALWAYS/NEVER as a yellow flag to reframe.</p><p>This pattern states the rule, then explains <em>why</em> so Claude can generalise to cases the skill did not spell out. &#8220;Use constructor injection. Field injection breaks testability because we cannot mock the field without Spring context&#8221; beats &#8220;MUST use constructor injection. NEVER use field injection.&#8221; The reasoning becomes the rubric for unanticipated cases.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8FvS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8FvS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png 424w, https://substackcdn.com/image/fetch/$s_!8FvS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png 848w, https://substackcdn.com/image/fetch/$s_!8FvS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png 1272w, https://substackcdn.com/image/fetch/$s_!8FvS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8FvS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png" width="1456" height="934" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:934,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:197790,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.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_!8FvS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png 424w, https://substackcdn.com/image/fetch/$s_!8FvS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png 848w, https://substackcdn.com/image/fetch/$s_!8FvS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png 1272w, https://substackcdn.com/image/fetch/$s_!8FvS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0daddfc-1c8e-4128-bb74-d4ceb9b8a0db_2720x1744.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this pattern wherever you catch yourself reaching for capitalised imperatives. The trade-off is length: explanations cost tokens, and for genuinely fragile steps (see <em>Control Tuning</em>), a bare imperative is still correct. Reserve prose-with-reasoning for the cases where Claude will need to exercise judgement.</p><h3><strong>7. Template Scaffold pattern</strong></h3><p>When output structure matters, reports, commit messages, API payloads, release notes, Claude produces inconsistent shapes across invocations. The shape is implicit in examples elsewhere, but the skill does not make it explicit, and each run rediscovers a slightly different structure.</p><p>This pattern ships a template in the skill body with placeholders Claude fills in. Templates come in two strictness levels. <em>Strict</em>: &#8220;ALWAYS use this exact template structure&#8221; for data contracts or machine-parsed output. <em>Flexible</em>: &#8220;A sensible default; adapt sections as needed&#8221; for documents where the author trusts Claude to judge.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!32Am!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!32Am!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png 424w, https://substackcdn.com/image/fetch/$s_!32Am!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png 848w, https://substackcdn.com/image/fetch/$s_!32Am!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png 1272w, https://substackcdn.com/image/fetch/$s_!32Am!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!32Am!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png" width="1456" height="1410" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1410,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:125887,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.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_!32Am!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png 424w, https://substackcdn.com/image/fetch/$s_!32Am!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png 848w, https://substackcdn.com/image/fetch/$s_!32Am!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png 1272w, https://substackcdn.com/image/fetch/$s_!32Am!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21347a72-83da-472f-b79b-09dd8a64ca7f_1760x1704.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this whenever output structure has downstream readers or parsers. The trade-off is creative flatness: strict templates suppress the structural variation that can make output more useful in edge cases, so prefer flexible templates unless a machine is reading the output.</p><h3><strong>8. In-Skill Examples pattern</strong></h3><p>Description alone rarely conveys tone, formatting conventions, or the right level of detail. Claude hits the right shape but the wrong style: commit messages that use the correct conventional-commit prefix but miss the tone the team writes in.</p><p>This pattern embeds concrete input/output pairs in the skill body, the same few-shot trick used in prompting. Two or three examples, each labelled <code>Input:</code> and <code>Output:</code>, show the desired pattern directly. Claude matches on the examples instead of inferring from prose. Templates (previous pattern) show the <em>skeleton</em>; examples show <em>populated instances</em>. The two compose well, with the template defining shape and examples calibrating style.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!opo9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!opo9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png 424w, https://substackcdn.com/image/fetch/$s_!opo9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png 848w, https://substackcdn.com/image/fetch/$s_!opo9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png 1272w, https://substackcdn.com/image/fetch/$s_!opo9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!opo9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png" width="1456" height="946" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:946,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:189002,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.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_!opo9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png 424w, https://substackcdn.com/image/fetch/$s_!opo9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png 848w, https://substackcdn.com/image/fetch/$s_!opo9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png 1272w, https://substackcdn.com/image/fetch/$s_!opo9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4af117-7d8d-49cc-89de-24e6efe38af6_2560x1664.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this for skills where output quality depends on style as much as structure: commit messages, release notes, changelog entries, review summaries. The trade-off is drift toward the examples. If the three examples share a subtle bias, Claude reproduces that bias across all invocations, so the examples need to span the variation the skill should support.</p><h3><strong>9. Known Gotchas pattern</strong></h3><p>Skills that document only the happy path teach Claude what to do, not what to watch for. The first time the skill hits a real-world edge case, a form field that does not exist, a command that works on macOS but fails on Linux, a library that silently returns empty results, Claude has no prior and invents a fix.</p><p>This pattern adds a dedicated section to SKILL.md listing concrete failure modes previously seen: &#8220;Scanned PDFs return [] silently. Check page type first.&#8221; &#8220;Rotated pages need <code>page.rotation=0</code> before column extraction.&#8221; One <a href="https://medium.com/@tort_mario/skills-for-claude-code-the-ultimate-guide-from-an-anthropic-engineer-bcd66faaa2d6">practitioner guide</a> calls the gotchas section the most valuable content of a mature skill.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-yIw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-yIw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png 424w, https://substackcdn.com/image/fetch/$s_!-yIw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png 848w, https://substackcdn.com/image/fetch/$s_!-yIw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png 1272w, https://substackcdn.com/image/fetch/$s_!-yIw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-yIw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png" width="1456" height="998" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:998,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:231050,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.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_!-yIw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png 424w, https://substackcdn.com/image/fetch/$s_!-yIw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png 848w, https://substackcdn.com/image/fetch/$s_!-yIw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png 1272w, https://substackcdn.com/image/fetch/$s_!-yIw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606b02ec-ec84-45c9-884a-ca439d16c221_2720x1864.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this pattern on mature skills, populated from observing real runs. The trade-off is that gotchas are a moving target: libraries update, APIs change, and a stale gotcha can send Claude chasing a problem that no longer exists.</p><h2><strong>Workflow control</strong></h2><p>Three patterns structure multi-step procedures. <em>Execution Checklist</em> is the linear case. <em>Self-Correcting Loop</em> introduces iteration. <em>Plan-Validate-Execute</em> adds a verifiable artifact <em>before any side effects</em>.</p><h3><strong>10. Execution Checklist pattern</strong></h3><p>In long multi-step procedures Claude skips validation steps, loses track of which step it is on, or declares done prematurely. &#8220;I think we are finished&#8221; at step four of a six-step process is a common failure mode.</p><p>This pattern provides a copyable checklist Claude pastes into its response and ticks off as it works. The checklist lives in the conversation, so skipping a step is now visible to both Claude and the user. The act of rendering unchecked items each turn raises the bar for declaring completion.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SrBJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SrBJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png 424w, https://substackcdn.com/image/fetch/$s_!SrBJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png 848w, https://substackcdn.com/image/fetch/$s_!SrBJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png 1272w, https://substackcdn.com/image/fetch/$s_!SrBJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SrBJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png" width="1456" height="969" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:969,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151095,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.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_!SrBJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png 424w, https://substackcdn.com/image/fetch/$s_!SrBJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png 848w, https://substackcdn.com/image/fetch/$s_!SrBJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png 1272w, https://substackcdn.com/image/fetch/$s_!SrBJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841b4c7f-43a0-49ea-9d7f-1c9a09e82d40_2560x1704.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this for any workflow with more than three steps, especially where a skipped validation step is costly. The trade-off is verbosity: the checklist is rendered in full on every turn, so in long sessions it multiplies tokens, and for very short flows it is overkill.</p><h3><strong>11. Self-Correcting Loop pattern</strong></h3><p>When Claude generates code, edits XML, or drafts against a style guide, a single forward pass often ships mistakes the skill could have caught. The skill describes the correct output but has no mechanism to verify what Claude actually produced.</p><p>This pattern wires in an explicit loop: produce output, run a validator, if it fails, fix and revalidate. The validator can be a script (<code>python validate.py fields.json</code>) or a document (re-read STYLE_GUIDE.md and check each rule). The loop terminates only when validation passes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LtUQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LtUQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png 424w, https://substackcdn.com/image/fetch/$s_!LtUQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png 848w, https://substackcdn.com/image/fetch/$s_!LtUQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png 1272w, https://substackcdn.com/image/fetch/$s_!LtUQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LtUQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png" width="1456" height="906" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:906,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100841,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.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_!LtUQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png 424w, https://substackcdn.com/image/fetch/$s_!LtUQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png 848w, https://substackcdn.com/image/fetch/$s_!LtUQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png 1272w, https://substackcdn.com/image/fetch/$s_!LtUQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15d6aead-bedb-4628-ae05-2471289f9107_2108x1312.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this for quality-critical tasks where mistakes are expensive and programmatic verification is feasible. The trade-off is non-termination: a weak validator (or a Claude that keeps making the same mistake) can loop indefinitely, so the pattern needs a retry cap and a fallback to the user.</p><h3><strong>12. Plan-Validate-Execute pattern</strong></h3><p>For batch or destructive operations, updating 50 form fields, migrating rows, rewriting a document, a direct &#8220;just do it&#8221; pass lets errors cascade silently. By the time you notice Claude referenced non-existent fields, the changes are already applied.</p><p>This pattern inserts a verifiable intermediate artifact, typically a JSON plan, between understanding the task and acting on it. A script validates the plan <em>before any side effects</em>. That is the distinction from <em>Self-Correcting Loop</em>, which iterates after the work has already landed. Claude iterates on the plan freely; the real target is only touched once the plan passes validation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!em41!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!em41!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png 424w, https://substackcdn.com/image/fetch/$s_!em41!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png 848w, https://substackcdn.com/image/fetch/$s_!em41!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png 1272w, https://substackcdn.com/image/fetch/$s_!em41!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!em41!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png" width="1456" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:112657,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.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_!em41!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png 424w, https://substackcdn.com/image/fetch/$s_!em41!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png 848w, https://substackcdn.com/image/fetch/$s_!em41!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png 1272w, https://substackcdn.com/image/fetch/$s_!em41!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c6e2e9-2426-49af-8a10-08d0f0a2b864_3064x1032.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this for batch, destructive, or high-stakes operations. The trade-off is ceremony: for a two-field edit the plan-validate-execute loop is more process than the task deserves, so reserve it for operations where &#8220;undo&#8221; is costly or impossible.</p><h2><strong>Executable code</strong></h2><p>Two patterns apply to skills that ship runnable helpers alongside SKILL.md. Together they shift work out of Claude&#8217;s inference loop and into deterministic scripts that run, succeed or fail, and return only their output.</p><h3><strong>13. Utility Bundle pattern</strong></h3><p>Asking Claude to generate a validation script, a PDF extractor, or a data-normaliser from scratch every invocation is slower, less reliable, and burns tokens on code the user never sees. Each run rediscovers the same logic with small variations.</p><p>This pattern ships purpose-built scripts in <code>scripts/</code> alongside SKILL.md. Claude invokes them via bash, so only their <em>output</em> consumes context. Scripts should handle common failure modes cleanly instead of dumping ambiguity back on Claude. Sometimes that means creating a missing file with a sensible default. Sometimes it means failing fast with a clear error. Constants need justifying comments (&#8221;30s timeout covers slow connections&#8221;), not magic numbers. When in doubt about which helpers to bundle, <a href="https://github.com/anthropics/skills/blob/main/skills/skill-creator/SKILL.md">run the skill on three test cases and read the transcripts</a>: if subagents all wrote the same helper independently, promote it to <code>scripts/</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6b8F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6b8F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.png 424w, https://substackcdn.com/image/fetch/$s_!6b8F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.png 848w, https://substackcdn.com/image/fetch/$s_!6b8F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.png 1272w, https://substackcdn.com/image/fetch/$s_!6b8F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6b8F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.png" width="1456" height="1068" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/790a9513-77d5-4672-808d-060024170cd5_2160x1584.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1068,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:140725,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.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_!6b8F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.png 424w, https://substackcdn.com/image/fetch/$s_!6b8F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.png 848w, https://substackcdn.com/image/fetch/$s_!6b8F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.png 1272w, https://substackcdn.com/image/fetch/$s_!6b8F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790a9513-77d5-4672-808d-060024170cd5_2160x1584.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this for any operation that is deterministic, frequently repeated, and worth testing independently. The trade-off is environment dependence: scripts need a runtime, and platform-specific helpers fail differently on user machines than on the author&#8217;s, so validate package availability in SKILL.md and prefer forward slashes in every path.</p><h3><strong>14. Autonomy Calibration pattern</strong></h3><p>A skill that runs with the full default tool set can do anything: write files, shell out, call MCP servers, even when its task only needs read access. A security-audit skill with <code>Write</code> and <code>Bash</code> permissions is still a standing risk, regardless of what SKILL.md says.</p><p>This pattern declares an <code>allowed-tools</code> list in the skill&#8217;s YAML frontmatter to pre-approve only the capabilities it actually needs. A security audit gets <code>Read, Grep, Glob</code>; a documentation generator gets <code>Read, Write</code>; a deploy skill gets <code>Bash</code> with a narrow command matcher. That reduces approval friction, but it does not by itself restrict which tools are available. In Claude Code, actual restrictions come from permission rules, not from <code>allowed-tools</code> alone.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xk0a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xk0a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png 424w, https://substackcdn.com/image/fetch/$s_!Xk0a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png 848w, https://substackcdn.com/image/fetch/$s_!Xk0a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png 1272w, https://substackcdn.com/image/fetch/$s_!Xk0a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xk0a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png" width="1456" height="745" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:745,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:158960,&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://generativeprogrammer.com/i/194494067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.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_!Xk0a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png 424w, https://substackcdn.com/image/fetch/$s_!Xk0a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png 848w, https://substackcdn.com/image/fetch/$s_!Xk0a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png 1272w, https://substackcdn.com/image/fetch/$s_!Xk0a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe30173f4-2c43-4ac3-86bd-17e43aff6de3_3096x1584.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this for any skill where a narrow pre-approved tool set is genuinely sufficient, especially security, audit, review, and analysis skills. The trade-off is confusion: an over-broad <code>allowed-tools</code> list quietly grants more hands-off autonomy than intended, and it is easy to mistake pre-approval for sandboxing. If you need real restrictions, pair this with permission rules.</p><h2><strong>The takeaway</strong></h2><p>These 14 patterns are essential. The description field decides whether the skill even runs; progressive disclosure decides how much context it costs; explain-the-why and known gotchas decide whether Claude handles the edge cases; plan-validate-execute and autonomy calibration decide how much can go wrong when something breaks. Each pattern addresses a failure mode that shows up across authors and domains.</p><p>As with the <a href="https://generativeprogrammer.com/p/12-agentic-harness-patterns-from">harness patterns</a> in the previous post, these are not product-specific tricks. They are becoming the cornerstones of how agents get extended, and they will remain relevant as the models and tools change underneath them.</p><p>The source material for this post is Anthropic&#8217;s own <a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices">Skill authoring best practices</a>, their <code>skill-creator</code><a href="https://github.com/anthropics/skills/blob/main/skills/skill-creator/SKILL.md"> SKILL.md</a> (Anthropic eating their own dog food), the <a href="https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf">33-page Complete Guide</a>, plus community writing from <a href="https://x.com/akshay_pachaar/status/2035341800739877091">Akshay Pachaar</a>, <a href="https://ruben.substack.com/p/claude-skills">Ruben Hassid</a>, <a href="https://medium.com/@tort_mario/skills-for-claude-code-the-ultimate-guide-from-an-anthropic-engineer-bcd66faaa2d6">Tort Mario</a>, <a href="https://x.com/alexxubyte/status/2039016933333610881">Alex Xu</a>, and <a href="https://x.com/sivalabs/status/2006937997028241806">Siva</a>. </p>]]></content:encoded></item><item><title><![CDATA[12 Agentic Harness Patterns from Claude Code]]></title><description><![CDATA[The leaked source revealed how a production coding agent is actually assembled. Here are the design patterns behind it.]]></description><link>https://generativeprogrammer.com/p/12-agentic-harness-patterns-from</link><guid isPermaLink="false">https://generativeprogrammer.com/p/12-agentic-harness-patterns-from</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 05 Apr 2026 21:01:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-QCT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There are many things to learn from the Claude Code leak, and I covered a few <a href="https://generativeprogrammer.com/p/practical-lessons-from-the-claude">in my previous post</a>. But formulating learnings as patterns is my passion.  I loved doing it with <a href="https://k8spatterns.com/">Kubernetes Patterns</a>, now exploring it with <a href="https://promptpatterns.dev/">Prompt Patterns</a>, and when I looked at the leaked harness, I could not help seeing patterns there too. Here I am framing them as reusable design patterns for anyone building agentic applications.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-QCT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-QCT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png 424w, https://substackcdn.com/image/fetch/$s_!-QCT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png 848w, https://substackcdn.com/image/fetch/$s_!-QCT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png 1272w, https://substackcdn.com/image/fetch/$s_!-QCT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-QCT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:435291,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.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_!-QCT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png 424w, https://substackcdn.com/image/fetch/$s_!-QCT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png 848w, https://substackcdn.com/image/fetch/$s_!-QCT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png 1272w, https://substackcdn.com/image/fetch/$s_!-QCT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dba753c-9631-416d-bfe5-d4b10472dc7f_3780x2520.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Overview diagram showing 12 agentic harness patterns organized in four categories: Memory &amp; Context, Workflow &amp; Orchestration, Tools &amp; Permissions, and Automation.</figcaption></figure></div><p>The patterns fall into four categories: memory and context, workflow and orchestration, tools and permissions, and automation.</p><h2><strong>Memory and Context</strong></h2><p>These five patterns form a progression: from giving the agent a static file of rules, to scoping those rules by directory, to organizing memory into tiers, to cleaning that memory in the background, to compressing the conversation itself when the context window fills up.</p><h3><strong>1. Persistent Instruction File Pattern</strong></h3><p>Without a persistent instruction file, every agent session starts blank. The user repeats the same conventions, commands, and boundaries each time. The agent makes the same mistakes in session five that it made in session one.</p><p>This pattern introduces a durable project-level configuration file loaded automatically at the start of every session. It defines build commands, test commands, architecture rules, naming conventions, and coding standards. It ships with the repo, not with the user&#8217;s clipboard.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-gcZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-gcZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png 424w, https://substackcdn.com/image/fetch/$s_!-gcZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png 848w, https://substackcdn.com/image/fetch/$s_!-gcZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png 1272w, https://substackcdn.com/image/fetch/$s_!-gcZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-gcZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png" width="1454" height="1158" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1158,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:142678,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.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_!-gcZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png 424w, https://substackcdn.com/image/fetch/$s_!-gcZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png 848w, https://substackcdn.com/image/fetch/$s_!-gcZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png 1272w, https://substackcdn.com/image/fetch/$s_!-gcZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a08a61-8c35-4611-ad80-2bd3e1d21987_1454x1158.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this when your agent works on a codebase across multiple sessions. The main trade-off is the maintenance burden: the file must stay current as the project evolves, and a stale instruction file can be worse than none if it teaches the agent outdated rules.</p><h3><strong>2. Scoped Context Assembly Pattern</strong></h3><p>A single instruction file works for small projects. As a codebase grows, one file either becomes a giant blob that gets ignored, or stays too generic to be useful for any specific directory.</p><p>This pattern loads instructions dynamically from multiple files at different scopes: organization, user, project root, parent directories, and child directories. The agent sees different rules depending on where in the codebase it is working. Import syntax allows splitting large instruction sets across files without duplication.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F9b0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F9b0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png 424w, https://substackcdn.com/image/fetch/$s_!F9b0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png 848w, https://substackcdn.com/image/fetch/$s_!F9b0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png 1272w, https://substackcdn.com/image/fetch/$s_!F9b0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F9b0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png" width="1454" height="918" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:918,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:146799,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.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_!F9b0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png 424w, https://substackcdn.com/image/fetch/$s_!F9b0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png 848w, https://substackcdn.com/image/fetch/$s_!F9b0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png 1272w, https://substackcdn.com/image/fetch/$s_!F9b0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7614b409-ebef-4c5b-9475-1aeb8776d6e2_1454x918.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this in monorepos, multi-language projects, or any codebase where different directories follow different conventions. The main trade-off is discoverability: when instructions live in many files, it becomes harder to understand what the agent actually sees. Conflicting rules across scopes can produce surprising behavior.</p><h3><strong>3. Tiered Memory Pattern</strong></h3><p>An agent that remembers everything the same way ends up remembering nothing well. Loading all memory into the context window every session wastes tokens, hits size limits, and buries useful information under noise.</p><p>This pattern organizes agent memory into distinct layers with different loading strategies. A compact index (capped at 200 lines in Claude Code) stays in context at all times. Topic-specific files load on demand when the current task matches them. Full session transcripts stay on disk and are only searched when needed. One of the most <a href="https://x.com/himanshustwts/status/2038924027411222533">detailed breakdowns</a> of the leaked code confirmed this three-layer design.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ltad!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ltad!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png 424w, https://substackcdn.com/image/fetch/$s_!ltad!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png 848w, https://substackcdn.com/image/fetch/$s_!ltad!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png 1272w, https://substackcdn.com/image/fetch/$s_!ltad!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ltad!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png" width="1454" height="867" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:867,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111185,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.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_!ltad!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png 424w, https://substackcdn.com/image/fetch/$s_!ltad!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png 848w, https://substackcdn.com/image/fetch/$s_!ltad!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png 1272w, https://substackcdn.com/image/fetch/$s_!ltad!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ce989d-a8e7-4602-a33b-65bfd1c3be8f_1454x867.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this when your agent runs across multiple sessions and needs to retain preferences, decisions, or workflow state. The main trade-off is the added complexity in deciding what goes where, when to promote or demote information between layers, and how to keep the index in sync with the underlying files.</p><h3><strong>4. Dream Consolidation Pattern</strong></h3><p>Even with tiered memory, agent memory degrades over time. Duplicate entries accumulate, outdated facts contradict new ones, and the index grows until it is no longer compact.</p><p>This pattern runs a background process that periodically reviews, deduplicates, prunes, and reorganizes agent memory during idle time. Think of it as garbage collection for agent state. The leaked code revealed an <a href="https://x.com/troyhua/status/2039052328070734102">&#8220;autoDream&#8221; mode</a> that merges duplicates, prunes contradictions, and keeps the index tight. A separate <a href="https://x.com/ellen_in_sf/status/2039098050837463504">analysis</a> found 8 phases of memory management and 5 types of context compaction.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jo-X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jo-X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png 424w, https://substackcdn.com/image/fetch/$s_!jo-X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png 848w, https://substackcdn.com/image/fetch/$s_!jo-X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png 1272w, https://substackcdn.com/image/fetch/$s_!jo-X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jo-X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png" width="1454" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:93997,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.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_!jo-X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png 424w, https://substackcdn.com/image/fetch/$s_!jo-X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png 848w, https://substackcdn.com/image/fetch/$s_!jo-X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png 1272w, https://substackcdn.com/image/fetch/$s_!jo-X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02855a6a-252f-42d9-be62-a9ac1c361e26_1454x521.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this when your agent accumulates memory across many sessions and you cannot rely on users to curate it manually. The main trade-off is that the consolidation process itself uses tokens and can make mistakes. An overly aggressive prune might delete something the user still needs.</p><h3><strong>5. Progressive Context Compaction Pattern</strong></h3><p>Long agent sessions eventually hit the context window limit. The agent either loses its earliest context entirely or stops working. Neither is acceptable for tasks that require sustained reasoning across many turns.</p><p>This pattern applies multiple stages of compression tuned for different ages of the conversation. Recent turns stay at full detail. Older turns get lightly summarized. Very old turns get aggressively collapsed. The leaked code used four layers: HISTORY_SNIP, Microcompact, CONTEXT_COLLAPSE, and Autocompact, each progressively more aggressive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YZn3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YZn3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png 424w, https://substackcdn.com/image/fetch/$s_!YZn3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png 848w, https://substackcdn.com/image/fetch/$s_!YZn3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png 1272w, https://substackcdn.com/image/fetch/$s_!YZn3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YZn3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png" width="1454" height="534" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:534,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42655,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.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_!YZn3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png 424w, https://substackcdn.com/image/fetch/$s_!YZn3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png 848w, https://substackcdn.com/image/fetch/$s_!YZn3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png 1272w, https://substackcdn.com/image/fetch/$s_!YZn3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fb2508c-b784-42ab-aac6-3926416eccf1_1454x534.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this when sessions regularly exceed 20-30 turns. The main trade-off is lossy compression: every summarization step discards detail, and if the agent later needs something from a collapsed segment, it may hallucinate rather than admit it forgot.</p><h2><strong>Workflow and Orchestration</strong></h2><p>The common theme here is separation: separating reading from writing, research context from editing context, and sequential work from parallel work. These patterns matter because the default behavior of most agents is to mix everything together, and that mixing degrades quality as the task grows.</p><h3><strong>6. Explore-Plan-Act Loop Pattern</strong></h3><p>When an agent jumps straight to editing files, it makes changes based on incomplete understanding. The result is edits to the wrong files, missed dependencies, and approaches that ignore existing patterns.</p><p>This pattern separates the workflow into three phases with increasing write permissions. In the explore phase, the agent can only read, search, and map the codebase. In the plan phase, it discusses the approach with the user. Only in the act phase does it get full tool access. The leaked code showed <a href="https://x.com/DharmiKumbhani/status/2038917827462308308">distinct plan and act phases</a> with system prompts that steer the agent away from editing before it understands the codebase.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n6iF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n6iF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png 424w, https://substackcdn.com/image/fetch/$s_!n6iF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png 848w, https://substackcdn.com/image/fetch/$s_!n6iF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png 1272w, https://substackcdn.com/image/fetch/$s_!n6iF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n6iF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png" width="1454" height="457" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:457,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64254,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.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_!n6iF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png 424w, https://substackcdn.com/image/fetch/$s_!n6iF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png 848w, https://substackcdn.com/image/fetch/$s_!n6iF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png 1272w, https://substackcdn.com/image/fetch/$s_!n6iF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad9fd49-cec4-4db7-b75d-98b0786ddb39_1454x457.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this for any task that touches an unfamiliar codebase or involves non-trivial changes across multiple files. The main trade-off is speed: enforcing exploration and planning adds turns before the agent produces output, which feels slow for simple tasks.</p><h3><strong>7. Context-Isolated Subagents Pattern</strong></h3><p>In a long agentic session, the context window accumulates everything: research findings, planning discussions, code edits, test output, error logs. By the time the agent is deep into editing, its context is polluted with irrelevant material from earlier phases.</p><p>This pattern runs separate agents with their own context windows, system prompts, and restricted tool access. Research agents cannot edit code. Planning agents cannot execute commands. Each subagent sees only what it needs for its specific task.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tv-_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tv-_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png 424w, https://substackcdn.com/image/fetch/$s_!tv-_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png 848w, https://substackcdn.com/image/fetch/$s_!tv-_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png 1272w, https://substackcdn.com/image/fetch/$s_!tv-_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tv-_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png" width="1454" height="545" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:545,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:102435,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.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_!tv-_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png 424w, https://substackcdn.com/image/fetch/$s_!tv-_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png 848w, https://substackcdn.com/image/fetch/$s_!tv-_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png 1272w, https://substackcdn.com/image/fetch/$s_!tv-_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf70b367-ad8b-43c0-866f-c9dce9ceabc1_1454x545.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this when sessions are long, multi-phase, or involve tasks with very different context needs. The main trade-off is coordination overhead: the main agent must decide what to pass to each subagent, and important nuance from an earlier phase can get lost in the handoff.</p><h3><strong>8. Fork-Join Parallelism Pattern</strong></h3><p>Large tasks that could be split into independent units still run sequentially if the agent can only work on one thing at a time. A migration across 20 files takes 20 sequential steps even though most of those files have no dependencies on each other.</p><p>This pattern spawns multiple subagents in parallel, each working in an isolated git worktree on an independent copy of the repo. The parent&#8217;s cached context is reused by each fork, making parallel branching essentially free in token cost. Results merge when all branches complete.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Pf2k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pf2k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png 424w, https://substackcdn.com/image/fetch/$s_!Pf2k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png 848w, https://substackcdn.com/image/fetch/$s_!Pf2k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png 1272w, https://substackcdn.com/image/fetch/$s_!Pf2k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pf2k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png" width="1454" height="790" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:790,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97124,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.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_!Pf2k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png 424w, https://substackcdn.com/image/fetch/$s_!Pf2k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png 848w, https://substackcdn.com/image/fetch/$s_!Pf2k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png 1272w, https://substackcdn.com/image/fetch/$s_!Pf2k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c6a16c7-6856-4c66-9658-a7040811edc9_1454x790.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this when a task decomposes into independent units that do not depend on each other&#8217;s output. The main trade-off is merge complexity: when parallel branches touch overlapping files, the merge can produce conflicts harder to resolve than sequential work would have been.</p><h2><strong>Tools and Permissions</strong></h2><p>If the memory patterns are about what the agent knows, and the workflow patterns are about how it works, these patterns are about what it is allowed to do. The leaked code showed a level of tool design and permission granularity that goes well beyond what most agent frameworks implement today.</p><h3><strong>9. Progressive Tool Expansion Pattern</strong></h3><p>Giving an agent access to every available tool at once creates a selection problem. With 60 tools visible, the model spends more time deciding which to use and is more likely to pick the wrong one.</p><p>This pattern starts with a small default set (fewer than 20 tools in Claude Code) and activates additional tools on demand. <a href="https://x.com/jpschroeder/status/2038960058499768427">Justin Schroeder noted</a> the deliberately small default set. The agent starts with Read, Edit, Write, Bash, Grep, Glob, and a handful of others. MCP tools, remote tools, and custom skills activate only when needed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E3HP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E3HP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png 424w, https://substackcdn.com/image/fetch/$s_!E3HP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png 848w, https://substackcdn.com/image/fetch/$s_!E3HP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png 1272w, https://substackcdn.com/image/fetch/$s_!E3HP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E3HP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png" width="1454" height="455" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:455,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:77471,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.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_!E3HP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png 424w, https://substackcdn.com/image/fetch/$s_!E3HP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png 848w, https://substackcdn.com/image/fetch/$s_!E3HP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png 1272w, https://substackcdn.com/image/fetch/$s_!E3HP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1970e01d-4e61-45b2-bc97-c1e072874b44_1454x455.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this when your agent has access to many tools but most tasks only need a few. The main trade-off is that the expansion logic adds complexity: the harness must decide when to activate tools, and activating too late means the agent wastes turns without the right capability.</p><h3><strong>10. Command Risk Classification Pattern</strong></h3><p>Letting an agent run arbitrary shell commands without inspection is dangerous. But asking the user to approve every command creates fatigue, and users end up clicking &#8220;yes&#8221; to everything.</p><p>This pattern applies deterministic pre-parsing and per-tool permission gating before execution. Each tool has individual allow, ask, and deny rules with pattern matching. Shell commands pass through a classification layer that parses the verb, flags, and target to assess risk. The <a href="https://x.com/S0nne123/status/2038979121267495277">auto-mode classifier</a> found in the code auto-approves low-risk actions while keeping a safety classifier for anything dangerous.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XutZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XutZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png 424w, https://substackcdn.com/image/fetch/$s_!XutZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png 848w, https://substackcdn.com/image/fetch/$s_!XutZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png 1272w, https://substackcdn.com/image/fetch/$s_!XutZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XutZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png" width="1454" height="622" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82039,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.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_!XutZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png 424w, https://substackcdn.com/image/fetch/$s_!XutZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png 848w, https://substackcdn.com/image/fetch/$s_!XutZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png 1272w, https://substackcdn.com/image/fetch/$s_!XutZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2733371f-3598-4020-a3f9-9d2f83c4bb3d_1454x622.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this when your agent can execute shell commands or interact with external systems. The main trade-off is rigidity: a deterministic classifier cannot anticipate every safe or dangerous command, so the rules need ongoing tuning.</p><h3><strong>11. Single-Purpose Tool Design Pattern</strong></h3><p>When an agent routes every file operation through a general shell (cat, sed, grep, find), the commands are harder to review, harder to permission, and harder for the model to use correctly. A sed command that edits a file looks identical in structure to one that corrupts it.</p><p>This pattern replaces the general shell with purpose-built tools for each common operation: FileReadTool, FileEditTool, GrepTool, GlobTool. Each tool has typed inputs, a constrained scope, and its own permission rules. Raschka calls this out explicitly: the harness provides &#8220;predefined tools with validated inputs and clear boundaries&#8221; rather than allowing improvised commands.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SV84!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SV84!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png 424w, https://substackcdn.com/image/fetch/$s_!SV84!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png 848w, https://substackcdn.com/image/fetch/$s_!SV84!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png 1272w, https://substackcdn.com/image/fetch/$s_!SV84!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SV84!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png" width="1454" height="529" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:529,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83594,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.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_!SV84!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png 424w, https://substackcdn.com/image/fetch/$s_!SV84!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png 848w, https://substackcdn.com/image/fetch/$s_!SV84!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png 1272w, https://substackcdn.com/image/fetch/$s_!SV84!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faba2d390-5198-4fad-9471-faf0fef9c549_1454x529.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this when your agent performs common file and search operations frequently. The main trade-off is flexibility: purpose-built tools cannot cover every edge case, so you still need a general shell as a fallback.</p><h2><strong>Automation</strong></h2><p>The final pattern stands alone because it cuts across all other categories. It addresses a problem that applies equally to memory, workflow, and tools: the model cannot be trusted to remember procedural steps that must happen every time.</p><h3><strong>12. Deterministic Lifecycle Hooks Pattern</strong></h3><p>Some actions must happen every time without exception: run the formatter after every edit, validate commands before execution, reload configuration when the working directory changes. Relying on the model to remember these through prompt instructions is unreliable. The model will forget, skip, or reinterpret the instruction depending on context pressure.</p><p>This pattern runs shell commands or other actions automatically at specific points in the agent lifecycle, outside the prompt entirely. The leaked code includes 25+ hook points such as PreToolUse, PostToolUse, SessionStart, and CwdChanged. Anything that must happen every time belongs in a hook, not in an instruction.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7yZs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7yZs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png 424w, https://substackcdn.com/image/fetch/$s_!7yZs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png 848w, https://substackcdn.com/image/fetch/$s_!7yZs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png 1272w, https://substackcdn.com/image/fetch/$s_!7yZs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7yZs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png" width="1454" height="680" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:680,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85228,&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://generativeprogrammer.com/i/193249897?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.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_!7yZs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png 424w, https://substackcdn.com/image/fetch/$s_!7yZs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png 848w, https://substackcdn.com/image/fetch/$s_!7yZs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png 1272w, https://substackcdn.com/image/fetch/$s_!7yZs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29d38c6-392b-44c9-8686-bf7728947ea5_1454x680.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this when you have invariant behaviors that should never be skipped. The main trade-off is debugging difficulty: when something goes wrong in a hook, it can be harder to diagnose than a prompt-level instruction because hooks run outside the conversation.</p><h2><strong>The Takeaway</strong></h2><p> I believe these patterns are not temporary tricks or product-specific features. They are cornerstones of agentic harness design. Memory tiering, context compaction, permission gating, lifecycle hooks: these are the kinds of architectural decisions that will remain relevant as the models and tools evolve underneath them.</p><p>The Claude Code leak gave us a rare opportunity to see how these patterns are implemented at the cutting edge, in a production agent used by hundreds of thousands of developers. That visibility will not last, but the patterns will.</p>]]></content:encoded></item><item><title><![CDATA[Practical Lessons From the Claude Code Leak]]></title><description><![CDATA[The most useful part of the Claude Code leak was not the drama. It was the architecture.]]></description><link>https://generativeprogrammer.com/p/practical-lessons-from-the-claude</link><guid isPermaLink="false">https://generativeprogrammer.com/p/practical-lessons-from-the-claude</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Fri, 03 Apr 2026 16:26:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c0d73220-6c8d-481e-b4af-5221d2f205cb_1972x1112.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>On March 31, 2026, security researcher <a href="https://x.com/Fried_rice/status/2038894956459290963">Chaofan Shou posted</a> (more than 34 million views) that Claude Code&#8217;s entire source had leaked through a sourcemap left in Anthropic&#8217;s public npm package. Roughly 500,000 lines of TypeScript across about 1,900 files. Not the model or weights, but the harness around them: system prompts, tool routing, memory, permissions, hooks, subagents, and a large amount of product wiring.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FEZx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FEZx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FEZx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FEZx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FEZx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FEZx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg" width="965" height="1200" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1200,&quot;width&quot;:965,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!FEZx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FEZx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FEZx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FEZx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51752f98-e6c0-4eb0-b5ee-3d0d264d849b_965x1200.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><strong>Chaofan Shou&#8217;s original tweet</strong></em></figcaption></figure></div><p>The leak handed everyone a blueprint for how a production coding agent is assembled. That blueprint is more interesting than the drama around it, and this post is about the practical lessons I took from it, things Claude Code users and agent builders can apply.</p><h2><strong>What happened</strong></h2><p>If you want a video walkthrough, <a href="https://www.youtube.com/watch?v=dYG8JxtSgmM">Matthew Berman&#8217;s coverage</a> is the fastest entry point. Anthropic confirmed this was a release packaging mistake caused by human error, not a hack. No customer data, API credentials, or model weights were exposed.</p><p>One surprising detail, <a href="https://x.com/jpschroeder/status/2038960058499768427">noted by Justin Schroeder</a>, is that much of the system prompting lives in the client-side source rather than behind a server-side API. For a company like Anthropic, shipping prompts, which are important IP, inside a distributed npm package was unexpected. The codebase is TypeScript and React with Bun bindings, and the code is full of comments written for LLMs, not humans, so that agents working on the codebase can understand each section. A <a href="https://ccunpacked.dev/">technical breakdown at ccunpacked.dev</a> mapped the full structure.</p><h2><strong>What happened next</strong></h2><p>The code escaped almost immediately. Mirrors spread across GitHub, takedowns followed, and community rewrites appeared within hours.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HxRk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HxRk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png 424w, https://substackcdn.com/image/fetch/$s_!HxRk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png 848w, https://substackcdn.com/image/fetch/$s_!HxRk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!HxRk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HxRk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png" width="1456" height="1181" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1181,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:154530,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/193081510?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.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_!HxRk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png 424w, https://substackcdn.com/image/fetch/$s_!HxRk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png 848w, https://substackcdn.com/image/fetch/$s_!HxRk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!HxRk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59a5acf0-c535-43f6-852b-20f1a3637dab_1546x1254.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The chart is real, but the repos are different: one tracks the leaked-source fork, the other tracks Anthropic&#8217;s public Claude Code plugin repo.</figcaption></figure></div><p>The most visible follow-on project was <a href="https://github.com/instructkr/claw-code">Claw Code</a>, presented as a clean-room Python rewrite of the harness. The repository now includes a Rust port and frames itself as &#8220;better harness tools&#8221; rather than an archive of leaked code. That &#8220;clean-room&#8221; phrasing matters, but it is not a magic legal shield. Whether a rewrite is actually lawful <a href="https://www.law.cornell.edu/wex/clean_room">depends on how it was produced</a>, not on what the README says.</p><p>There is also a security warning. <a href="https://www.bleepingcomputer.com/news/security/claude-code-leak-used-to-push-infostealer-malware-on-github/">BleepingComputer reported</a> fake GitHub repositories using the leak as bait for infostealer malware. Attackers also <a href="https://x.com/Butanium_/status/2039079715823128964">registered malicious npm packages</a> targeting anyone who tried to compile the leaked source. The sensible stance: study the incident, learn from it, do not run random &#8220;leaked Claude Code&#8221; repos.</p><p>The more interesting signal is how quickly open-source projects started absorbing the patterns. You can see it directly in <a href="https://github.com/anomalyco/opencode/issues/20475">OpenCode&#8217;s issue tracker</a>, where users asked whether the harness design should be incorporated. The community treated the leak as a public architecture review, not gossip.</p><h2><strong>What Claude Code users can learn from this</strong></h2><p>Below are ten lessons. They are useful whether you use Claude Code or you are building your own agentic application.</p><h3><strong>1. Treat CLAUDE.md like a config file</strong></h3><p>The leak confirmed that <code>CLAUDE.md</code> is not an optional README. It is a control file loaded at the start of every session. A <a href="https://x.com/ziwenxu_/status/2039002226018984333">community analysis</a> showed how the harness treats it as persistent project memory that shapes every interaction. Build commands, test commands, architecture boundaries, naming rules. It all belongs there.</p><p>Run <code>/init</code> once to generate a starting version, then edit it by hand. A good <code>CLAUDE.md</code> reads more like a <code>.eslintrc</code> than a README:</p><p></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;ca360d12-32ef-45d4-acca-165e7951869b&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># CLAUDE.md

## Build &amp; test
- Run tests: `npm test`
- Lint: `npm run lint`
- Build: `npm run build`

## Architecture rules
- All API handlers go in `src/api/`
- Never import from `src/internal/` outside that directory
- Use Zod for all request validation, no manual parsing

## Conventions
- Use `snake_case` for database columns, `camelCase` for TypeScript
- Every new endpoint needs a test in `tests/api/`</code></pre></div><p>If you are building your own agent, the same principle applies. Give it a structured instruction file that loads every session, not a prompt you paste each time.</p><h3><strong>2. Keep memory selective, not exhaustive</strong></h3><p>One of the most <a href="https://x.com/himanshustwts/status/2038924027411222533">detailed breakdowns of the memory system</a> showed a three-layer design: <code>MEMORY.md</code> as a compact index always loaded into context, topic-specific memory files loaded on demand, and session transcripts only searched when needed. Auto memory is capped at the first 200 lines. The code also revealed an &#8220;autoDream&#8221; mode, a background process that <a href="https://x.com/troyhua/status/2039052328070734102">consolidates memories during idle periods</a>, merging duplicates, pruning contradictions, and keeping the index tight. A separate <a href="https://x.com/ellen_in_sf/status/2039098050837463504">mem0 analysis</a> found 8 phases of memory management and 5 types of context compaction.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!adfX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!adfX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg 424w, https://substackcdn.com/image/fetch/$s_!adfX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg 848w, https://substackcdn.com/image/fetch/$s_!adfX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!adfX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!adfX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg" width="1456" height="1571" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1571,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!adfX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg 424w, https://substackcdn.com/image/fetch/$s_!adfX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg 848w, https://substackcdn.com/image/fetch/$s_!adfX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!adfX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0be3d689-4693-40ea-ae0d-ffc912bf2dc0_3469x3742.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Cloude Code Memory Architecture</figcaption></figure></div><p>The takeaway: memory should be curated. Store stable preferences, recurring workflow hints, and things that are not obvious from the code. Do not store stack traces, logs, or facts Claude can derive by reading the repo. If a memory note would not help in a future session, it should not exist.</p><h3><strong>3. Split instructions by scope</strong></h3><p>The leaked code showed context <a href="https://x.com/k1rallik/status/2038978638381531486">assembled from multiple files dynamically</a>, not crammed into one prompt. Claude Code supports multiple instruction scopes: org-level, user-level, project root, local overrides, parent and child directories. </p><p>Keep one short root <code>CLAUDE.md</code> with broad project rules. Put language-specific or module-specific instructions closer to the code they govern. </p><h3><strong>4. Explore first, then plan, then code</strong></h3><p>The leak revealed how seriously Anthropic treats the <a href="https://x.com/DharmiKumbhani/status/2038917827462308308">separation between planning and execution</a>. The harness has distinct plan and act phases, and the system prompts steer the agent away from editing before it understands the codebase.</p><p>In practice: first ask Claude to map the codebase. Then ask for a plan. Only then let it edit or run commands. This one habit eliminates most &#8220;random edits to the wrong files&#8221; problems. The impulse to jump straight to coding is strong, but exploration first is always faster.</p><h3><strong>5. Use subagents to isolate context</strong></h3><p>The leaked source showed a <a href="https://x.com/rasbt/status/2038980345316413862">modular multi-agent architecture</a> with separate system prompts and cache boundaries for each subagent type. The Explore agent is read-only. It can search and analyze but cannot mutate anything. Each subagent runs in its own context window with restricted tool access.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D-PQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D-PQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!D-PQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!D-PQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!D-PQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D-PQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg" width="1200" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!D-PQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!D-PQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!D-PQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!D-PQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d4b1f3-5eb1-4aed-8d95-b56bff8e0636_1200x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><strong>Claude Code Strengths</strong></em></figcaption></figure></div><p>Context contamination is one of the main failure modes in long agentic sessions. Research, planning, and editing have different context needs. Mixing them degrades all three. Use separate agents or modes for each phase. If you are building your own agents, treat context isolation as a design decision, not a side effect.</p><h3><strong>6. Use worktrees for parallel work</strong></h3><p>More analysis of the subagent system showed that subagents leverage cached context for fork-join operations, making parallel execution essentially free in terms of repeated context loading. Claude Code spawns background agents in isolated git worktrees, one per unit of work.</p><p>When you have multiple independent tasks, use separate worktrees. Do not let several agents edit the same branch. If a task is large, split it into chunks with clear outputs. And stop starting fresh sessions for everything. Continue sessions when working on related code.</p><h3><strong>7. Configure permissions at the tool level</strong></h3><p>One of the <a href="https://x.com/jpschroeder/status/2038960058499768427">most concrete findings</a> was the tool count: Claude Code runs fewer than 20 default tools. AgentTool, BashTool, FileReadTool, FileEditTool, FileWriteTool, WebFetchTool, WebSearchTool, and a handful of others. A <a href="https://x.com/mal_shaik/status/2038918662489510273">deeper inventory</a> showed the system can expand to 60+, but the default set is deliberately small. Fewer tools, better results.</p><h3><strong>8. Reduce approval fatigue</strong></h3><p>The leaked source confirmed that Claude Code users approve 93% of permission prompts. The <a href="https://x.com/S0nne123/status/2038979121267495277">auto-mode classifier</a> found in the code is Anthropic&#8217;s answer: a layered system that auto-approves low-risk actions while keeping a safety classifier for anything dangerous.</p><p>When you approve almost everything, the permission system becomes a speed bump, not a safety mechanism. You stop reading what you approve. Move repetitive safe actions into allow rules. Use Plan mode or Accept Edits mode where appropriate. Use Auto mode when the task is bounded and the direction is clear. The goal is not fewer safety checks. It is better-placed checks you actually pay attention to.</p><h3><strong>9. Use hooks for repeatable automation</strong></h3><p>The community found <a href="https://x.com/grok/status/2039236199559184536">25+ event-driven hook points</a> in the leaked code, including <code>PreToolUse</code>, <code>PostToolUse</code>, <code>SessionStart</code>, <code>CwdChanged</code>, and more. Hooks are one of the most powerful features in Claude Code and probably the most underused.</p><p>A hook that runs tests after every file edit:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;a8d05653-d0b0-4c86-875a-11a8cc118d29&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "FileEditTool",
        "command": "npm test --silent 2&gt;&amp;1 | tail -5"
      }
    ]
  }
}</code></pre></div><p>The general principle: if you repeat the same instruction in every prompt, it should be a hook.</p><h3><strong>10. The harness matters more than the prompt</strong></h3><p>This is the lesson: Sebastian Raschka put it well: <a href="https://x.com/rasbt/status/2038980345316413862">Claude Code&#8217;s secret sauce is probably not the model</a>.  If you are building your own agent, spend less time polishing one giant system prompt. Spend more time on tool boundaries, context loading, review loops, and memory discipline. The best coding agent is not the one with the cleverest instructions. It is the one with the best workflow design.</p><h3><strong>Bonus: the small details</strong></h3><p>The leak also surfaced things that are not actionable but say a lot about how the product is built. Wes Bos found <a href="https://x.com/wesbos/status/2038958747200962952">187 hardcoded spinner verbs</a>, the loading messages you see while Claude thinks. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3UpL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3UpL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3UpL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3UpL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3UpL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3UpL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg" width="1200" height="706" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:706,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!3UpL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3UpL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3UpL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3UpL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d6ba22-7870-401b-b8d3-fd4fa1770820_1200x706.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Claude Code spinner words :)</figcaption></figure></div><p>Someone found <a href="https://x.com/Rahatcodes/status/2038995503141065145">Boris&#8217;s WTF counter</a>, an internal metric tracking unexpected states. Good agent products are not only inference. They are interface, orchestration, trust, and taste.</p><h2><strong>The bottom line</strong></h2><p>The takeaway is straightforward: use the product more deliberately: write a better <code>CLAUDE.md</code>, keep memory tight, split exploration from editing, move repeated behavior into hooks, configure permissions properly, and use worktrees when parallelism matters. Most of these features were already documented. It took seeing the internals to realize how seriously the team behind Claude Code takes them.</p><p>For anyone building agentic applications, the lesson is the same. The moat is not the model, it is the harness.</p>]]></content:encoded></item></channel></rss>