<?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>Thu, 30 Jul 2026 19:20:19 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[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><item><title><![CDATA[State of AI-Assisted Coding in 2026]]></title><description><![CDATA[AI coding is converging on three domains: planning, code generation, and confidence building]]></description><link>https://generativeprogrammer.com/p/state-of-ai-assisted-coding-in-2026</link><guid isPermaLink="false">https://generativeprogrammer.com/p/state-of-ai-assisted-coding-in-2026</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 29 Mar 2026 10:41:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UiRV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Key takeaways</strong></h2><ul><li><p>AI-assisted coding moved from autocomplete to agentic code generation.</p></li><li><p>That shift made planning a first-class step. Serious teams now start with a spec or a plan before the agent touches the codebase.</p></li><li><p>Build split into two paths: full-stack app builders for prompt-to-product flows, and local developer agents for working inside real repos.</p></li><li><p>The biggest new category is local developer agents, especially CLI-native ones.</p></li><li><p>Async cloud agents are still early, but they point to a delegated model where coding work runs in the background or overnight.</p></li><li><p>AI-assisted review is becoming the only practical way to keep up with the volume of AI-generated code.</p></li></ul><p>I wrote about this landscape last year in <a href="https://generativeprogrammer.com/p/ai-coding-assistants-landscape">AI Coding Assistants Landscape (03/2025)</a>. The picture is simpler now. The big change is not only that the tools got better. The workflow changed. Not long ago, the center of the story was autocomplete and inline suggestions. In 2026, the center is agentic code generation guided by a plan, followed by stronger review before code ships.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UiRV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UiRV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png 424w, https://substackcdn.com/image/fetch/$s_!UiRV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png 848w, https://substackcdn.com/image/fetch/$s_!UiRV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png 1272w, https://substackcdn.com/image/fetch/$s_!UiRV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UiRV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png" width="1456" height="1325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7aac1e5-1e37-443b-8bcb-2710b66a7954_2000x1820.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1325,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:582606,&quot;alt&quot;:&quot;State of AI-Assisted Coding in 2026&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/192440132?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aac1e5-1e37-443b-8bcb-2710b66a7954_2000x1820.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="State of AI-Assisted Coding in 2026" title="State of AI-Assisted Coding in 2026" srcset="https://substackcdn.com/image/fetch/$s_!UiRV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png 424w, https://substackcdn.com/image/fetch/$s_!UiRV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png 848w, https://substackcdn.com/image/fetch/$s_!UiRV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.png 1272w, https://substackcdn.com/image/fetch/$s_!UiRV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4451ee7d-d18e-4df8-b53f-b8765d238c71_2000x1820.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>State of AI-Assisted Coding in 2026</strong></em></figcaption></figure></div><p>This is an opinionated map of how the market is organizing itself. The easiest way to understand the ecosystem now is through a simple sequence: plan the work, build it with agents, then review what they produced.</p><h2><strong>1. Plan</strong></h2><p>The first major shift is that planning stopped being optional. Teams learned the same lesson from multiple directions: if the plan is weak, the build drifts, the review catches more noise than signal, and the whole agent loop becomes harder to trust.</p><p>This planning layer now shows up in two forms. There are dedicated spec-driven tools that formalize planning as a standalone practice, and there are build tools that pulled planning into their core workflow.</p><h3><strong>1A. Dedicated planning and spec-driven systems</strong></h3><p>Spec-driven development is the clearest expression of this change. These tools turn vague prompts into requirements, acceptance criteria, design notes, and implementation tasks before code generation begins. If vibe coding is &#8220;start building and see what happens,&#8221; spec-driven development is the counterweight: decide what you are building first, then let the agent execute.</p><ul><li><p><a href="https://kiro.dev/?utm_source=generativeprogrammer.com">Kiro</a>, a productized example of spec-driven development that turns prompts into structured requirements, design artifacts, and task plans.</p></li><li><p><a href="https://github.com/github/spec-kit?utm_source=generativeprogrammer.com">GitHub Spec Kit</a>, GitHub&#8217;s open source toolkit for spec-first workflows and implementation planning.</p></li><li><p><a href="https://github.com/Fission-AI/OpenSpec?utm_source=generativeprogrammer.com">OpenSpec</a>, a lighter open source framework for writing reusable specs for coding agents.</p></li></ul><p>Beyond coding-specific spec tools, broader frameworks such as <a href="https://github.com/bmad-code-org/BMAD-METHOD?utm_source=generativeprogrammer.com">BMAD-METHOD</a> show that structured AI-assisted planning is also expanding into higher-level delivery and agile workflows. The pattern is the same: teams that invest more in upstream intent get more predictable downstream results.</p><h3><strong>2B. Planning modes inside build agents</strong></h3><p>Planning is not confined to dedicated planning tools anymore. The stronger signal is that serious build tools now expose ask, plan, explore, or read-only modes before they touch the codebase. That is the clearest sign that planning became part of the agent loop itself, not something attached later.</p><ul><li><p><a href="https://docs.anthropic.com/en/docs/claude-code/tutorials?utm_source=generativeprogrammer.com">Claude Code</a>, exposes Plan Mode for safe code analysis before editing.</p></li><li><p><a href="https://docs.cursor.com/chat/ask?utm_source=generativeprogrammer.com">Cursor</a>, uses Ask mode for exploration, questions, and planning before execution.</p></li><li><p><a href="https://docs.windsurf.com/windsurf/cascade/cascade?utm_source=generativeprogrammer.com">Windsurf</a>, treats planning as a built-in part of the Cascade workflow.</p></li><li><p><a href="https://docs.cline.bot/features/plan-and-act?utm_source=generativeprogrammer.com">Cline</a>, makes the split explicit with a Plan and Act workflow.</p></li><li><p><a href="https://openai.com/index/introducing-codex/?utm_source=generativeprogrammer.com">Codex</a>, separates Ask mode from Code mode.</p></li><li><p><a href="https://www.jetbrains.com/help/junie/ask-mode.html?utm_source=generativeprogrammer.com">Junie</a>, uses Ask mode to collaborate on an action plan before making changes.</p></li></ul><p>One related shift worth noting is that planning is no longer only text. Screenshots, Figma files, and mockups are increasingly becoming structured inputs into the coding workflow. I would not treat that as a separate category yet, but it matters as a bridge from planning into building. <a href="https://v0.dev/docs/screenshots?utm_source=generativeprogrammer.com">v0 screenshots and files</a> is one obvious example, and the broader full-stack app builders category is also moving in this direction by making design artifacts directly usable for PMs, designers, and non-technical builders.</p><h2><strong>2. Build</strong></h2><p>This is where the market split most visibly. It is no longer useful to talk about &#8220;AI coding tools&#8221; as one bucket. Build is now best understood through three practical categories: full-stack app builders, local developer agents, and async cloud coding agents.</p><p><strong>The most important change for developers is that local developer agents became the default serious workflow</strong>. But before getting there, it is worth separating them from the other branch: full-stack app builders.</p><h3><strong>2A. Full-stack app builders</strong></h3><p>This is the category where vibe coding became productized. These tools combine generation, iteration, preview, runtime, and deployment in one surface. They are not just code generators. They are prompt-to-product environments, closer to &#8220;build me the product&#8221; than &#8220;work with me inside my repo.&#8221;</p><p>This category matters because it serves a broader audience than professional developers: founders, PMs, designers, mixed-role teams, and non-technical builders. It is the closest thing we have to software creation for everyone, and it is expanding the definition of who can build software in a meaningful way.</p><ul><li><p><a href="https://lovable.dev/?utm_source=generativeprogrammer.com">Lovable</a>, full-stack app builder aimed at turning prompts into working products quickly.</p></li><li><p><a href="https://bolt.new/?utm_source=generativeprogrammer.com">Bolt</a>, browser-based full-stack builder with generation, preview, and deployment in one loop.</p></li><li><p><a href="https://v0.dev/docs?utm_source=generativeprogrammer.com">v0</a>, Vercel&#8217;s AI full-stack app builder with strong UI, design, and production handoff workflows.</p></li><li><p><a href="https://replit.com/ai?utm_source=generativeprogrammer.com">Replit Agent</a>, browser-native environment that can generate, run, debug, and deploy applications.</p></li><li><p><a href="https://bubble.io/ai/?utm_source=generativeprogrammer.com">Bubble AI</a>, AI-assisted visual app builder closer to no-code product creation than to local repo development.</p></li></ul><h3><strong>2B. Local developer agents</strong></h3><p><strong>This is the biggest change in the market.</strong> The story is no longer &#8220;which autocomplete tool is best?&#8221; It is &#8220;which agent loop do you want to build your workflow around?&#8221;</p><p>Claude Code helped make this category mainstream, especially on the terminal-native side. But the larger shift is broader than any single tool. The strongest open source and commercial energy now clusters around local agents that can plan, edit, run commands, inspect outputs, and iterate, all inside a real development environment, with the developer supervising the loop. This is where professional software engineering lives in 2026.</p><h4><strong>CLI-native developer agents</strong></h4><p>Terminal-based development is now a category in its own right. This is the branch where agentic coding feels most explicit and most professional. It keeps the repo, the terminal, the test loop, and the engineering workflow at the center, rather than wrapping them behind a simplified interface. Not long ago, terminal-native agents were a niche. Today, some of the fastest-growing open source projects in the AI-assisted coding space are terminal-first.</p><ul><li><p><a href="https://docs.anthropic.com/en/docs/claude-code/overview?utm_source=generativeprogrammer.com">Claude Code</a>, the terminal-native coding agent that made the category mainstream.</p></li><li><p><a href="https://openai.com/codex/?utm_source=generativeprogrammer.com">Codex</a>, OpenAI&#8217;s local coding agent that also extends into cloud delegation.</p></li><li><p><a href="https://github.com/google-gemini/gemini-cli?utm_source=generativeprogrammer.com">Gemini CLI</a>, Google&#8217;s open source terminal agent with strong community adoption.</p></li><li><p><a href="https://github.com/anomalyco/opencode?utm_source=generativeprogrammer.com">OpenCode</a>, a fast-growing open source coding agent with built-in plan and build agents.</p></li><li><p><a href="https://github.com/block/goose?utm_source=generativeprogrammer.com">Goose</a>, open source local agent for install, execute, edit, and test loops.</p></li><li><p><a href="https://aider.chat/?utm_source=generativeprogrammer.com">Aider</a>, Git-first terminal coding assistant that remains highly popular with working developers.</p></li><li><p><a href="https://sourcegraph.com/amp?utm_source=generativeprogrammer.com">Amp</a>, Sourcegraph&#8217;s terminal agent with deep code intelligence and codebase-wide context.</p></li><li><p><a href="https://github.com/plandex-ai/plandex?utm_source=generativeprogrammer.com">Plandex</a>, a terminal agent designed for larger tasks, planning, and sandboxed diffs.</p></li></ul><h4><strong>IDE-native developer agents</strong></h4><p>The IDE-native tools matter just as much, but their mental model changed too. Even in IDEs, the direction moved away from inline completion and toward planning, tool use, command execution, multi-file edits, and local review. The IDE is still the surface, but the agent loop is now the core interaction, not the autocomplete dropdown.</p><ul><li><p><a href="https://cursor.com/?utm_source=generativeprogrammer.com">Cursor</a>, the bridge product from AI-native IDE to full local agent workflow.</p></li><li><p><a href="https://docs.windsurf.com/windsurf/cascade/cascade?utm_source=generativeprogrammer.com">Windsurf</a>, an IDE-native agent centered on planning, editing, execution, and verification.</p></li><li><p><a href="https://github.com/RooCodeInc/Roo-Code?utm_source=generativeprogrammer.com">Roo Code</a>, a popular open source editor agent with architect, ask, code, and debug modes.</p></li><li><p><a href="https://docs.cline.bot/features/plan-and-act?utm_source=generativeprogrammer.com">Cline</a>, an open source IDE agent with a clear plan-then-act workflow.</p></li><li><p><a href="https://docs.augmentcode.com/introduction?utm_source=generativeprogrammer.com">Augment</a>, a context-heavy developer agent that also stretches into review.</p></li><li><p><a href="https://junie.jetbrains.com/?utm_source=generativeprogrammer.com">Junie</a>, JetBrains-native coding agent for planning and implementation inside the existing IDE workflow.</p></li></ul><h3><strong>2C. Async cloud coding agents</strong></h3><p>This is the delegated branch of the build step. If local agents are &#8220;pair with me,&#8221; cloud agents are &#8220;go do this and come back.&#8221; These tools run in remote sandboxes, often triggered from issues or pull request workflows, and return with patches, branches, or pull requests.</p><p>This category is smaller than local agents today, but the workflow matters. It is the beginning of a mode where you hand work to an agent from GitHub, or at the end of the day, and let it run while you are doing something else or simply sleeping. That is why I expect this category to grow even if it still feels early.</p><ul><li><p><a href="https://docs.devin.ai/?utm_source=generativeprogrammer.com">Devin</a>, the flagship async remote coding agent for delegated engineering work.</p></li><li><p><a href="https://platform.openai.com/docs/codex/overview?utm_source=generativeprogrammer.com">Codex cloud</a>, OpenAI&#8217;s sandboxed remote execution model for delegated coding tasks.</p></li><li><p><a href="https://docs.github.com/en/copilot/using-github-copilot/coding-agent/about-assigning-tasks-to-copilot?utm_source=generativeprogrammer.com">GitHub Copilot coding agent</a>, GitHub-native delegation from issues and pull request workflows.</p></li><li><p><a href="https://docs.all-hands.dev/?utm_source=generativeprogrammer.com">OpenHands</a>, the open source alternative for issue-to-patch and cloud-agent workflows.</p></li><li><p><a href="https://github.com/SWE-agent/SWE-agent?utm_source=generativeprogrammer.com">SWE-agent</a>, an influential open source issue-to-patch system that bridges research and practice.</p></li></ul><p>If you want to go deeper on the delegated, async side of this market, this <a href="https://background-agents.com/landscape?utm_source=https://generativeprogrammer.com">background agents landscape </a>is worth reviewing. It offers a curated map of tools and infrastructure layers behind these workflows.</p><h2><strong>3. Review</strong></h2><p>Once agents started writing much more code, review became the new bottleneck. The point of this step is simple: keep the speed of AI code generation without letting quality collapse.</p><p>Code generation accelerated faster than our ability to inspect the output manually. That gap is what pulled review into its own category. The strongest part of this layer today is code review. Testing and verification are still lighter, but they are growing quickly as browser-based agents and cloud runtimes become more capable.</p><h3><strong>3A. Review agents</strong></h3><p>The most interesting shift in review is timing. AI review is no longer only something that happens after a pull request exists. The stronger tools now review code locally, before commit or before the PR is opened, and then review again once the PR is live.</p><p>That creates a two-stage loop: local review first, shared PR review second. It is one of the clearest signs that review is becoming part of the development loop itself and not only a separate final gate.</p><ul><li><p><a href="https://docs.qodo.ai/qodo-documentation/qodo-gen/code-review/review-uncommitted-changes?utm_source=generativeprogrammer.com">Qodo</a>, is built for enterprise-scale review, using dedicated agents, codebase context, PR history, and team rules to review changes before they reach the PR and again at review time.</p></li><li><p><a href="https://docs.coderabbit.ai/overview/ide-cli-review?utm_source=generativeprogrammer.com">CodeRabbit</a>, an AI reviewer that now spans pull requests, IDE reviews, and CLI reviews before commit.</p></li><li><p><a href="https://docs.github.com/en/copilot/using-github-copilot/code-review?utm_source=generativeprogrammer.com">GitHub Copilot code review</a>, GitHub-native review in pull requests, now complemented by local review in supported tools.</p></li><li><p><a href="https://docs.augmentcode.com/codereview/overview?utm_source=generativeprogrammer.com">Augment Code Review</a>, a PR reviewer that routes findings back into the IDE or CLI for fixing.</p></li><li><p><a href="https://docs.cursor.com/en/bugbot?utm_source=generativeprogrammer.com">Cursor Bugbot</a>, a mostly PR-native automated reviewer focused on catching real bugs with low noise.</p></li><li><p><a href="https://www.greptile.com/docs/code-review/key-features?utm_source=generativeprogrammer.com">Greptile</a>, a context-aware reviewer focused on repo-wide reasoning over pull requests.</p></li><li><p><a href="https://graphite.dev/features/agent?utm_source=generativeprogrammer.com">Graphite Agent</a>, an AI reviewer integrated into Graphite&#8217;s stacked pull request workflow.</p></li></ul><h3><strong>3B. Testing and verification agents</strong></h3><p>This is a lighter category than review today, but it is easy to see why it could become much bigger. As browser-based agents, cloud Chromium environments, and agentic end-to-end testing get stronger, more of the validation work that currently lives in manual QA can move into automated review loops.</p><p>For now, testing and verification still belong inside the same review step. If review agents inspect diffs, this emerging branch inspects behavior. That distinction will matter more as the code being generated grows in scope and complexity.</p><ul><li><p><a href="https://www.testsprite.com/use-cases/en/ai-software-testing-tool?utm_source=generativeprogrammer.com">TestSprite</a>, an intent-to-tests workflow that generates, runs, and explains tests.</p></li><li><p><a href="https://momentic.ai/?utm_source=generativeprogrammer.com">Momentic</a>, a browser testing agent focused on end-to-end validation.</p></li><li><p><a href="https://www.lambdatest.com/kane-ai/?utm_source=generativeprogrammer.com">KaneAI</a>, an AI testing agent for browser and workflow automation.</p></li><li><p><a href="https://www.mabl.com/agentic-testing-for-software-development-mabl?utm_source=generativeprogrammer.com">mabl Agentic Testing</a>, agentic test creation and maintenance for UI flows.</p></li></ul><p>There are also benchmarks starting to emerge around this review layer. <a href="https://codereview.withmartian.com/?utm_source=generativeprogrammer.com">Code Review Bench</a> from Martian is worth watching because it treats code review as a useful foundation for measuring code generation quality and validation, combining an offline benchmark with real developer behavior from open source pull requests.</p><h2><strong>Appendix: enterprise incumbents and platform suites</strong></h2><p>These tools still matter, especially in enterprise buying conversations, but they are not the sharpest lens for explaining how the market changed:</p><ul><li><p><a href="https://aws.amazon.com/q/developer/?utm_source=generativeprogrammer.com">Amazon Q Developer</a>, an AWS-integrated developer assistant and terminal agent.</p></li><li><p><a href="https://cloud.google.com/products/gemini/code-assist?utm_source=generativeprogrammer.com">Gemini Code Assist</a>, Google&#8217;s enterprise coding assistant across IDEs and cloud workflows.</p></li><li><p><a href="https://about.gitlab.com/gitlab-duo/?utm_source=generativeprogrammer.com">GitLab Duo</a>, GitLab&#8217;s integrated AI layer across the software delivery lifecycle.</p></li><li><p><a href="https://www.tabnine.com/?utm_source=generativeprogrammer.com">Tabnine</a>, a long-running enterprise AI coding assistant focused on controlled deployments.</p></li><li><p><a href="https://www.ibm.com/products/watsonx-code-assistant?utm_source=generativeprogrammer.com">watsonx Code Assistant</a>, IBM&#8217;s enterprise tool for code generation and modernization.</p></li><li><p><a href="https://www.alibabacloud.com/en/product/lingma?utm_source=generativeprogrammer.com">TONGYI Lingma</a>, Alibaba&#8217;s coding assistant for enterprise and cloud workflows.</p></li><li><p><a href="https://refact.ai/?utm_source=generativeprogrammer.com">Refact.ai</a>, a self-hostable coding assistant with strong enterprise positioning.</p></li></ul><h2><strong>Implications</strong></h2><p>If this framing is right, a few implications follow for how we work and what we invest in.</p><p><strong>&#8594;</strong> <strong>Planning will increasingly become the starting point, not an afterthought</strong>. The best coding tools already start with a plan before generation, and teams that skip this step will find themselves debugging drift rather than building features.</p><p><strong>&#8594;</strong> <strong>Full-stack app builders will keep pulling in design, product, and prototyping workflows.</strong> This is expanding who can create software, and that expansion is not slowing down. For product managers, designers, and founders, these tools are becoming the default way to go from idea to working prototype.</p><p><strong>&#8594;</strong> <strong>Local developer agents will keep taking share from autocomplete-first tools</strong> because they fit better with how professional developers already work, inside a real repo, with real tests, in a real terminal or IDE. Developers who learn to work effectively with agent loops will have a meaningful advantage over those still treating AI as a smarter autocomplete.</p><p><strong>&#8594;Async cloud coding agents will grow as delegation becomes more natural.</strong> Send work from GitHub or at the end of the day, and let it run in the background. This mode is still early, but it is the beginning of a shift where engineering work does not have to be synchronous.</p><p><strong>&#8594; Review is becoming the next bottleneck and the real quality gate in software delivery.</strong> As code generation gets better, review will have to become far more sophisticated too. That is where the next major gains in software quality will come from<strong>.</strong></p><p><strong>&#8594; Testing is still earlier than review, but it is the clearest next expansion area for agentic tooling.</strong> As browser-based testing agents improve and cloud runtimes become cheaper, this is where confidence will grow fastest.<br><br>My takeaway: AI-assisted coding is no longer one tool category. It is becoming a connected workflow from planning, to building, to gaining confidence in the result. Teams that understand these layers will be better positioned to adopt the right tools at each step. I share similar analysis on X: <a href="https://x.com/bibryam">https://x.com/bibryam</a> and in this newsletter.</p><div class="embedded-publication-wrap" data-attrs="{&quot;id&quot;:3411919,&quot;embedding_publication_id&quot;:null,&quot;name&quot;:&quot;The Generative Programmer&quot;,&quot;logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!TXD9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0826fe93-5348-44e0-9ae7-bbf6feb0c62c_364x364.png&quot;,&quot;base_url&quot;:&quot;https://generativeprogrammer.com&quot;,&quot;hero_text&quot;:&quot;A developer-focused digest revealing how generative AI is transforming coding, architecture, and product development.&quot;,&quot;author_name&quot;:&quot;Bilgin Ibryam&quot;,&quot;show_subscribe&quot;:true,&quot;logo_bg_color&quot;:&quot;#ffffff&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPublicationToDOMWithSubscribe"><div class="embedded-publication show-subscribe"><a class="embedded-publication-link-part" native="true" href="https://generativeprogrammer.com?utm_source=substack&amp;utm_campaign=publication_embed&amp;utm_medium=web"><img class="embedded-publication-logo" src="https://substackcdn.com/image/fetch/$s_!TXD9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0826fe93-5348-44e0-9ae7-bbf6feb0c62c_364x364.png" width="56" height="56" style="background-color: rgb(255, 255, 255);"><span class="embedded-publication-name">The Generative Programmer</span><div class="embedded-publication-hero-text">A developer-focused digest revealing how generative AI is transforming coding, architecture, and product development.</div><div class="embedded-publication-author-name">By Bilgin Ibryam</div></a><form class="embedded-publication-subscribe" method="GET" action="https://generativeprogrammer.com/subscribe?"><input type="hidden" name="source" value="publication-embed"><input type="hidden" name="autoSubmit" value="true"><input type="email" class="email-input" name="email" placeholder="Type your email..."><input type="submit" class="button primary" value="Subscribe"></form></div></div>]]></content:encoded></item><item><title><![CDATA[Applying Kubernetes Patterns to LLM Workloads]]></title><description><![CDATA[How Kubernetes patterns you already know carry over to LLMs, with a few important twists.]]></description><link>https://generativeprogrammer.com/p/applying-kubernetes-patterns-to-llm</link><guid isPermaLink="false">https://generativeprogrammer.com/p/applying-kubernetes-patterns-to-llm</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sat, 21 Mar 2026 17:15:03 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/15ad38ce-ef0c-4d51-a006-8b729d28baa5_2149x1316.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few years ago, <a href="https://www.linkedin.com/in/ro14nd/">Roland Huss </a>and I wrote <a href="https://www.oreilly.com/library/view/kubernetes-patterns-2nd/9781098131678/">Kubernetes Patterns</a>, a catalogue of repeatable solutions for building cloud-native applications on Kubernetes. The book covers patterns across six categories: foundational, behavioral, structural, configuration, security, and advanced, everything from health probes and init containers to controllers, operators, and elastic scaling. Recently, Roland and Daniele Zonca co-authored a new book, <a href="https://learning.oreilly.com/library/view/generative-ai-on/9781098171919/">Generative AI on Kubernetes</a>, which covers the operational side of running LLMs on Kubernetes. I was a reviewer on that book, and the more I read through it, the more I recognized patterns from our original work, just applied to a very different class of workload. Deployments, StatefulSets, Init Containers, DaemonSets. They were all there. Just with bigger numbers.</p><p>Here is a high-level summary of how Kubernetes patterns apply to LLM workloads, which Roland and I will cover in more detail in our <a href="https://sched.co/2CVyl">upcoming KubeCon + CloudNativeCon Europe 2026 talk </a>in Amsterdam.</p><h2>Same Kubernetes, Different Workload</h2><p>A typical cloud-native application on Kubernetes follows a well-known stack. </p><ul><li><p>An Ingress routes HTTP traffic to stateless App Pods managed by a Deployment. </p></li><li><p>An init container runs database migrations before the app starts. </p></li><li><p>PostgreSQL runs as a StatefulSet with persistent storage. </p></li><li><p>A CronJob generates reports on a schedule. </p></li><li><p>A layer of DaemonSets, such as Prometheus Node Exporter and Fluentd, provides</p></li></ul><p>That is six Kubernetes patterns at work: Controller, Stateless Service, Init Container, Stateful Service, Batch Job, Daemon Service.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bE08!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bE08!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png 424w, https://substackcdn.com/image/fetch/$s_!bE08!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png 848w, https://substackcdn.com/image/fetch/$s_!bE08!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png 1272w, https://substackcdn.com/image/fetch/$s_!bE08!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bE08!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png" width="728" height="299" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:598,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:896606,&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/191668763?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bE08!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png 424w, https://substackcdn.com/image/fetch/$s_!bE08!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png 848w, https://substackcdn.com/image/fetch/$s_!bE08!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.png 1272w, https://substackcdn.com/image/fetch/$s_!bE08!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab796b8-755f-4472-9ccd-a0d23f591e2f_5303x2179.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">Traditional vs LLM workloads on Kubernetes</figcaption></figure></div><p>An LLM workload uses the same patterns, but is a fundamentally different kind of workload.</p><ul><li><p>A model is not an application binary. It is tens to hundreds of gigabytes of learned parameters, read-only data that must be loaded into GPU memory before a server can handle a single request. Meta&#8217;s Llama 70B weighs around 140 GB in full precision (FP16), or 35&#8211;40 GB with 4-bit quantization. Loading takes minutes, not seconds. </p></li><li><p>It requires specific hardware: a node with the right GPU, enough VRAM (Video RAM, the memory on the GPU where weights and intermediate computations live), and sometimes a specific GPU interconnect topology.</p></li><li><p>Initialization looks different too. In a traditional app, an init container fetches a config file or runs a migration, a few megabytes, done in seconds. In an LLM stack, the equivalent step stages tens to hundreds of gigabytes of model weights. Once the weights are in place, the model server (<a href="https://docs.vllm.ai/">vLLM</a>, <a href="https://huggingface.co/docs/text-generation-inference">TGI</a>) goes through a multi-phase startup: loading weights into GPU VRAM, compiling <a href="https://developer.nvidia.com/blog/cuda-graphs/">CUDA graphs</a>, and pre-allocating the KV cache (the memory region where the model stores computed attention states so it doesn&#8217;t recompute them for every new token). This takes minutes. Your startup probe needs <code>failureThreshold: 60</code> with <code>periodSeconds: 10</code>, a 10-minute budget.</p></li><li><p>The request profile differs too. In a traditional web service, requests have roughly uniform cost. Round-robin load balancing works. LLM inference breaks this assumption: a 10-token request completes in 200 ms while a 4,000-token request occupies a GPU for 30 seconds. Both arrive as identical <code>POST /v1/chat/completions</code> requests. Round-robin creates hot spots.</p></li><li><p>Scaling signals break down. Out-of-the-box HPA on CPU is not a good fit for GPU inference workloads. You need scaling on LLM-specific metrics: token queue depth (<code>vllm:num_requests_waiting</code>), time-to-first-token, KV cache utilization. </p></li><li><p>Scale-to-zero is impractical when model loading takes five minutes.</p></li><li><p>The infrastructure layer changes. Where you had Node Exporter and Fluentd, you now run <a href="https://kubernetes-sigs.github.io/node-feature-discovery/">NFD</a> (Node Feature Discovery) to label hardware, <a href="https://github.com/NVIDIA/gpu-feature-discovery">GFD</a> (GPU Feature Discovery) to add GPU model and VRAM labels, the <a href="https://github.com/NVIDIA/k8s-device-plugin">NVIDIA device plugin</a> to expose <code>nvidia.com/gpu</code> as a schedulable resource, and the <a href="https://github.com/NVIDIA/dcgm-exporter">DCGM exporter</a> (Data Center GPU Manager) to feed GPU metrics to Prometheus. That is your new stack of DaemonSets forming the GPU infrastructure layer.</p></li></ul><p>Projects like <a href="https://kserve.github.io/">KServe</a> (incubating at CNCF) address these by applying the Controller pattern to model serving. You write an InferenceService CRD, declare the model, the runtime, the scaling policy, and KServe reconciles: Deployment, Service, storage initializer, startup probes, GPU scheduling. </p><p>Despite all this, the fundamentals are the same. Controller, Stateless Service, Init Container, Stateful Service, Batch Job, Daemon Service, all present. The parameters changed, but the patterns held.</p><h2>What stays the same in GenAI on Kubernetes</h2><p>Many Kubernetes patterns apply to LLM workloads without fundamental modification. The pattern works as-is, you only point it at a different workload.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TtOq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TtOq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.png 424w, https://substackcdn.com/image/fetch/$s_!TtOq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.png 848w, https://substackcdn.com/image/fetch/$s_!TtOq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.png 1272w, https://substackcdn.com/image/fetch/$s_!TtOq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TtOq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.png" width="1456" height="1018" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1018,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:658871,&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/191668763?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.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_!TtOq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.png 424w, https://substackcdn.com/image/fetch/$s_!TtOq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.png 848w, https://substackcdn.com/image/fetch/$s_!TtOq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.png 1272w, https://substackcdn.com/image/fetch/$s_!TtOq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd601b247-96c6-488d-86d1-caf0caf4d5b2_1836x1284.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>Patterns that map directly to GenAI</strong></figcaption></figure></div><p>These are the direct mappings. The Kubernetes primitive stays the same, but the workload behind it changes from web apps and databases to model servers, vector databases, and GPU infrastructure.</p><h2><strong>What changes in GenAI on Kubernetes</strong></h2><p>These patterns still apply to GenAI, but something fundamental changes about how they work. The pattern skeleton is the same; the parameters, scale, or semantics push them beyond their original 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_!-eT1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-eT1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.png 424w, https://substackcdn.com/image/fetch/$s_!-eT1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.png 848w, https://substackcdn.com/image/fetch/$s_!-eT1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.png 1272w, https://substackcdn.com/image/fetch/$s_!-eT1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-eT1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.png" width="1456" height="1269" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1269,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:630138,&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/191668763?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.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_!-eT1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.png 424w, https://substackcdn.com/image/fetch/$s_!-eT1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.png 848w, https://substackcdn.com/image/fetch/$s_!-eT1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.png 1272w, https://substackcdn.com/image/fetch/$s_!-eT1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e359db4-f711-425b-b007-94e88e7c0629_1554x1354.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>Patterns that change for GenAI</strong></figcaption></figure></div><p>This is where LLM workloads start to stretch familiar Kubernetes patterns. The abstraction still holds, but the operational reality changes. Seconds become minutes. Megabytes become gigabytes. CPU-centric assumptions stop working.</p><h2><strong>Emerging Patterns for AI Workloads</strong></h2><p>Some patterns do not have clear ancestors in the Kubernetes pattern catalogue. They emerge from the specific characteristics of LLM workloads.</p><ul><li><p><strong>Model Data Staging</strong> addresses the challenge of delivering hundreds of gigabytes of model weights to Pods without turning every scale-up into a multi-minute outage.</p></li><li><p><strong>Token-Aware Routing</strong> replaces round-robin with metric-driven endpoint selection based on queue depth and KV cache state. This is being implemented through the Gateway API Inference Extension and projects like llm-d.</p></li><li><p><strong>RAG Composition</strong> wires together four distinct workload types into a coherent application: the orchestrator, the LLM, the vector database, and the ingestion pipeline. Each maps to its natural Kubernetes primitive.</p></li><li><p><strong>Disaggregated Serving</strong> separates the compute-intensive prefill phase from the memory-intensive decode phase, runs them on different hardware, and lets them scale independently. Projects like llm-d are enabling this model.</p></li><li><p><strong>Agentic Workflows</strong> introduce LLM agents that plan, use tools, and iterate. They are also driving new protocols such as MCP (Model Context Protocol) for agent-to-tool integration and A2A (Agent-to-Agent Protocol) for inter-agent communication. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pmEs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pmEs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.png 424w, https://substackcdn.com/image/fetch/$s_!pmEs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.png 848w, https://substackcdn.com/image/fetch/$s_!pmEs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.png 1272w, https://substackcdn.com/image/fetch/$s_!pmEs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pmEs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.png" width="1280" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:181041,&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/191668763?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.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_!pmEs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.png 424w, https://substackcdn.com/image/fetch/$s_!pmEs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.png 848w, https://substackcdn.com/image/fetch/$s_!pmEs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.png 1272w, https://substackcdn.com/image/fetch/$s_!pmEs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bb0657e-1a96-44b9-b3ca-140fe72691fc_1280x640.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">Building Production-Ready Agent Systems with MCP</figcaption></figure></div><p><strong>Something related:</strong> Our friends at Deep Engineering are hosting a workshop, Building MCP Servers in Production, with Peder Holdgaard Pedersen. If you are exploring MCP beyond demos and into real production systems, this is  worth a look, <strong><a href="https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=thegenerativeprogrammer">register here</a></strong>.</p></li></ul><p>These patterns are covered in depth in Roland and Daniele&#8217;s book <a href="https://learning.oreilly.com/library/view/generative-ai-on/9781098171919/">Generative AI on Kubernetes</a>. Roland and I will be walking through three of them: Model Data Staging, Token-Aware Routing, and RAG Composition at <a href="https://sched.co/2CVyl">KubeCon Amsterdam this week</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://generativeprogrammer.com/subscribe?"><span>Subscribe now</span></a></p><p>If you&#8217;d like more posts like this on Kubernetes, cloud-native patterns, and how they intersect with AI workloads, subscribe to my newsletter.</p>]]></content:encoded></item><item><title><![CDATA[Best Prompt Engineering Resources (2026 Edition)]]></title><description><![CDATA[A curated list of the best prompt engineering books, papers, tools, and courses]]></description><link>https://generativeprogrammer.com/p/best-prompt-engineering-resources</link><guid isPermaLink="false">https://generativeprogrammer.com/p/best-prompt-engineering-resources</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 28 Dec 2025 15:28:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!k9Q6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been <strong>researching, learning, and regularly sharing prompt engineering resources for the past 2+ years</strong> through <em>The Generative Programmer</em>.  During that time, I&#8217;ve read countless guides, papers, tools, and courses. This post is a <strong>curated top list of the best prompt engineering resources I&#8217;ve found so far</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_!k9Q6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k9Q6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png 424w, https://substackcdn.com/image/fetch/$s_!k9Q6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png 848w, https://substackcdn.com/image/fetch/$s_!k9Q6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png 1272w, https://substackcdn.com/image/fetch/$s_!k9Q6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k9Q6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png" width="1456" height="1046" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1046,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6677371,&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/182758868?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.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_!k9Q6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png 424w, https://substackcdn.com/image/fetch/$s_!k9Q6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png 848w, https://substackcdn.com/image/fetch/$s_!k9Q6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.png 1272w, https://substackcdn.com/image/fetch/$s_!k9Q6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F749a72a0-b578-4f7b-8fe2-24d47137d1bf_3783x2719.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>Top Prompt Engineering Resources 2026</strong></em></figcaption></figure></div><p>&#128073; If you&#8217;re building with LLMs, agents, or generative AI, bookmark this. It&#8217;s a living list. </p><div><hr></div><h2>&#128218; Books</h2><p><em>There are many books on AI, but these go deep and explain how prompting actually works in real systems.</em></p><ul><li><p><strong><a href="https://amzn.to/4jfXenF">Prompt Engineering for LLMs</a></strong> &#8211; O&#8217;Reilly, John Berryman, Albert Ziegler</p></li><li><p><strong><a href="https://amzn.to/4pTubsn">Prompt Engineering for Generative AI</a></strong> &#8211; O&#8217;Reilly, James Phoenix, Mike Taylor</p></li><li><p><strong><a href="https://amzn.to/4pWLKYH">Generative AI Design Patterns</a></strong> &#8211; O&#8217;Reilly, Valliappa Lakshmanan, Hannes Hapke</p></li><li><p><strong><a href="https://amzn.to/49bCTv7">Prompt Design Patterns</a></strong> &#8211; Yi Zhou</p></li><li><p><strong><a href="https://amzn.to/3MTBBxf">Unlocking Secrets of Prompt Engineering</a></strong> &#8211; Packt, Gilbert Mizrahi</p></li><li><p><strong><a href="https://amzn.to/4s7Juzc">LLM Design Patterns</a></strong> &#8211; Packt, Ken Huang</p></li><li><p><strong><a href="https://leanpub.com/patterns-of-application-development-using-ai">Patterns of Application Development Using AI</a></strong> &#8211; Leanpub, Obie Fernandez</p></li></ul><div><hr></div><h2>&#127891; Courses</h2><p><em>Most popular learning paths from beginner to advanced prompt engineering.</em></p><ul><li><p><strong><a href="https://learnprompting.thinkific.com/enrollments">Learn Prompting</a></strong> &#8211; LearnPrompting</p></li><li><p><strong><a href="https://maven.com/dair-ai/prompt-engineering-llms?utm_campaign=NDUxMzEz&amp;utm_medium=clp_share_link&amp;utm_source=maven">Advanced Prompt Engineering for LLMs</a></strong> &#8211; Elvis Saravia (DAIR.AI)</p></li><li><p><strong><a href="https://www.udemy.com/share/108nx03@WTllLbrIpjp-yVEQC0YwepcW_5lSFaVV7szZhNvdBuSB4CcpuqNBi43EaJt_6w3D/">Prompt Engineering for Everybody</a></strong> &#8211; Udemy</p></li><li><p><strong><a href="https://github.com/anthropics/prompt-eng-interactive-tutorial">Anthropic&#8217;s Prompt Engineering Interactive Tutorial</a></strong> -Anthropic</p></li></ul><div><hr></div><h2>&#127909; Videos</h2><p><em>Overview, discussions, workshops, and real-world explanations of prompt engineering.</em></p><ul><li><p><strong><a href="https://www.youtube.com/watch?v=ysPbXH0LpIE">Prompting 101 | Code w/ Claude</a></strong><a href="https://www.youtube.com/watch?v=ysPbXH0LpIE"> &#8211; Anthropic</a></p></li><li><p><strong><a href="https://www.youtube.com/watch?v=DL82mGde6wo">State-Of-The-Art Prompting for AI Agents</a></strong><a href="https://www.youtube.com/watch?v=DL82mGde6wo"> &#8211; Y Combinator</a></p></li><li><p><strong><a href="https://www.youtube.com/watch?v=hkhDdcM5V94">Building with Anthropic Claude: Prompt Workshop</a></strong><a href="https://www.youtube.com/watch?v=hkhDdcM5V94"> &#8211; AI Engineer</a></p></li><li><p><strong><a href="https://www.youtube.com/watch?v=_ZvnD73m40o">Prompt Engineering Tutorial &#8211; Master ChatGPT</a></strong><a href="https://www.youtube.com/watch?v=_ZvnD73m40o"> &#8211; freeCodeCamp</a></p></li><li><p><strong><a href="https://www.youtube.com/watch?v=p09yRj47kNM">Google&#8217;s 9 Hour AI Prompt Engineering Course in 20 Minutes</a></strong><a href="https://www.youtube.com/watch?v=p09yRj47kNM"> &#8211; Tina Huang</a></p></li><li><p><strong><a href="https://www.youtube.com/watch?v=htBTho6oEJA">Prompt Engineering Workshop</a></strong><a href="https://www.youtube.com/watch?v=htBTho6oEJA"> &#8211; Hamel Husain</a></p></li><li><p><strong><a href="https://learning.oreilly.com/videos/prompt-engineering/9781835881521/9781835881521-video1_1/">Prompt Engineering &#8211; For Optimal LLM Performance</a></strong><a href="https://learning.oreilly.com/videos/prompt-engineering/9781835881521/9781835881521-video1_1/"> &#8211; Valentina Alto</a></p></li><li><p><strong><a href="https://www.youtube.com/watch?v=5ef83Wljm-M">CMU Advanced NLP 2022 (9): Prompting - </a></strong><a href="https://www.youtube.com/watch?v=5ef83Wljm-M">Graham Neubig</a></p></li></ul><div><hr></div><h2>&#128196; Whitepapers</h2><p><em>Research that introduced modern prompting techniques like CoT, ToT, self-consistency, tool use, and reflection.</em></p><ul><li><p><strong>The Prompt Report: A Systematic Survey of Prompt Engineering Techniques</strong> &#8211; Schulhoff et al<br><a href="https://arxiv.org/abs/2406.06608">https://arxiv.org/abs/2406.06608</a></p></li><li><p><strong>A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT</strong> &#8211; Jules White et al<br><a href="https://arxiv.org/abs/2302.11382">https://arxiv.org/abs/2302.11382</a></p></li><li><p><strong>A Systematic Survey of Prompt Engineering in Large Language Models</strong> &#8211; Pranab Sahoo et al<br><a href="https://arxiv.org/abs/2402.07927">https://arxiv.org/abs/2402.07927</a></p></li><li><p><strong>Buffer of Thoughts: Thought-Augmented Reasoning with LLMs</strong> &#8211; Ling Yang et al<br><a href="https://arxiv.org/abs/2406.04271">https://arxiv.org/abs/2406.04271</a></p></li><li><p><strong>Lost in the Middle: How Language Models Use Long Contexts</strong> &#8211; Nelson F. Liu et al<br><a href="https://arxiv.org/abs/2307.03172">https://arxiv.org/abs/2307.03172</a></p></li><li><p><strong>Toolformer: Language Models Can Teach Themselves to Use Tools</strong> &#8211; Timo Schick et al<br><a href="https://arxiv.org/abs/2302.04761">https://arxiv.org/abs/2302.04761</a></p></li><li><p><strong>Prompting in the Wild</strong> &#8211; Mahan Tafreshipour et al<br><a href="https://arxiv.org/abs/2412.17298">https://arxiv.org/abs/2412.17298</a></p></li><li><p><strong>PromptSource</strong> &#8211; Stephen H. Bach et al<br><a href="https://arxiv.org/abs/2202.01279">https://arxiv.org/abs/2202.01279</a></p></li><li><p><strong>Repository-Level Prompt Generation for LLMs of Code</strong> &#8211; Disha Shrivastava et al<br><a href="https://arxiv.org/abs/2206.12839">https://arxiv.org/abs/2206.12839</a></p></li><li><p><strong>Conversing with Copilot</strong> &#8211; Paul Denny et al<br><a href="https://arxiv.org/abs/2210.15157">https://arxiv.org/abs/2210.15157</a></p></li><li><p><strong>Tree of Thoughts</strong> &#8211; Shunyu Yao et al<br><a href="https://arxiv.org/abs/2305.10601">https://arxiv.org/abs/2305.10601</a></p></li><li><p><strong>Chain-of-Thought Prompting</strong> &#8211; Jason Wei et al<br><a href="https://arxiv.org/abs/2201.11903">https://arxiv.org/abs/2201.11903</a></p></li><li><p><strong>Reflexion</strong> &#8211; Noah Shinn et al<br><a href="https://arxiv.org/abs/2303.11366">https://arxiv.org/abs/2303.11366</a></p></li><li><p><strong>Reprompting</strong> &#8211; Weijia Xu et al<br><a href="https://arxiv.org/abs/2305.09993">https://arxiv.org/abs/2305.09993</a></p></li><li><p><strong>LLMs Are Human-Level Prompt Engineers</strong> &#8211; Yongchao Zhou et al<br><a href="https://arxiv.org/abs/2211.01910">https://arxiv.org/abs/2211.01910</a></p></li><li><p><strong>Self-Consistency Improves Chain-of-Thought Reasoning</strong> &#8211; Xuezhi Wang et al<br><a href="https://arxiv.org/abs/2203.11171">https://arxiv.org/abs/2203.11171</a></p></li><li><p><strong>Language Models Are Zero-Shot Reasoners</strong> &#8211; Takeshi Kojima et al<br><a href="https://arxiv.org/abs/2205.11916">https://arxiv.org/abs/2205.11916</a></p></li><li><p><strong>Prompt Engineering (Whitepaper)</strong> &#8211; Lee Boonstra<br><a href="https://www.kaggle.com/whitepaper-prompt-engineering">https://www.kaggle.com/whitepaper-prompt-engineering</a></p></li><li><p><strong>The DALL&#183;E 2 Prompt Book (PDF)</strong> &#8211; dallery.gallery<br><a href="https://dallery.gallery/wp-content/uploads/2022/07/The-DALL%C2%B7E-2-prompt-book.pdf">https://dallery.gallery/wp-content/uploads/2022/07/The-DALL%C2%B7E-2-prompt-book.pdf</a></p></li></ul><div><hr></div><h2>&#127760; Websites &amp; Roadmaps</h2><p><em>Living documentation, continuously updated guides, and structured learning paths.</em></p><ul><li><p><strong>Prompt Engineering Guide</strong> &#8211; Sander Schulhoff<br><a href="https://learnprompting.org/docs/introduction">https://learnprompting.org/docs/introduction</a></p></li><li><p><strong>Prompting Guide AI</strong> &#8211; DAIR.AI</p><p><a href="https://www.promptingguide.ai/">https://www.promptingguide.ai/</a></p></li><li><p><strong>Prompt Engineering Overview</strong> &#8211; Anthropic<br><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/overview">https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/overview</a></p></li></ul><div><hr></div><h2>&#9997;&#65039; Articles</h2><p><em>Practical write-ups from teams actively shipping LLM-powered systems.</em></p><ul><li><p><strong>Prompt Engineering Best Practices</strong> - Sarah Chieng<br><a href="https://milksandmatcha.notion.site/Prompt-Engineering-Best-Practices-5aab1f04fce246ad9a39d3b69e80ed99">https://milksandmatcha.notion.site/Prompt-Engineering-Best-Practices-5aab1f04fce246ad9a39d3b69e80ed99</a></p></li><li><p><strong>Lilian Weng Prompt Engineering Guide</strong> &#8211; Lilian Weng<br><a href="https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/">https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/</a></p></li><li><p><strong>Anthropic Claude Code Best Practices</strong> &#8211; Anthropic<br><a href="https://www.anthropic.com/engineering/claude-code-best-practices">https://www.anthropic.com/engineering/claude-code-best-practices</a></p></li><li><p><strong>OpenAI Best Practices for Prompt Engineering</strong> &#8211; OpenAI<br><a href="https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api">https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api</a></p></li><li><p><strong>OpenAI Prompt Engineering Guide</strong> &#8211; OpenAI<br><a href="https://platform.openai.com/docs/guides/prompt-engineering">https://platform.openai.com/docs/guides/prompt-engineering</a></p></li><li><p><strong>OpenAI Cookbook Related Resources</strong> &#8211; OpenAI<br><a href="https://cookbook.openai.com/articles/related_resources">https://cookbook.openai.com/articles/related_resources</a></p></li><li><p><strong>Mistral Prompting Capabilities</strong> &#8211; Mistral AI<br><a href="https://docs.mistral.ai/capabilities/completion/prompting_capabilities">https://docs.mistral.ai/capabilities/completion/prompting_capabilities</a></p></li><li><p><strong>ParaHelp Prompt Design Blog</strong> &#8211; ParaHelp<br><a href="https://parahelp.com/blog/prompt-design">https://parahelp.com/blog/prompt-design</a></p></li><li><p><strong>OpenAI Techniques to Improve Reliability</strong> &#8211; OpenAI<br><a href="https://cookbook.openai.com/articles/techniques_to_improve_reliability">https://cookbook.openai.com/articles/techniques_to_improve_reliability</a></p></li><li><p><strong>OpenAI Guides: Optimizing LLM Accuracy</strong> &#8211; OpenAI<br><a href="https://platform.openai.com/docs/guides/optimizing-llm-accuracy">https://platform.openai.com/docs/guides/optimizing-llm-accuracy</a></p></li><li><p><strong>Wikipedia: Prompt Engineering</strong> &#8211; Wikipedia<br><a href="https://en.wikipedia.org/wiki/Prompt_engineering">https://en.wikipedia.org/wiki/Prompt_engineering</a></p></li><li><p><strong>Automated Prompt Engineering: Hands-On Guide</strong> &#8211; Towards Data Science<br><a href="https://towardsdatascience.com/automated-prompt-engineering-the-definitive-hands-on-guide-1476c8cd3c50/">https://towardsdatascience.com/automated-prompt-engineering-the-definitive-hands-on-guide-1476c8cd3c50/</a></p></li><li><p><strong>Advanced Prompt Engineering (Chain-of-Thought)</strong> &#8211; Towards Data Science<br><a href="https://towardsdatascience.com/advanced-prompt-engineering-chain-of-thought-cot-8d8b090bf699/">https://towardsdatascience.com/advanced-prompt-engineering-chain-of-thought-cot-8d8b090bf699/</a></p></li><li><p><strong>5 Prompt Engineering Tips for Developers</strong> &#8211; Slobodan Mehmedovic<br><a href="https://slobodan.me/posts/5-prompt-engineering-tips-for-developers/">https://slobodan.me/posts/5-prompt-engineering-tips-for-developers/</a></p></li><li><p><strong>Anatomy of a Prompt</strong> &#8211; Gyorgy Bakocs<br><a href="https://www.linkedin.com/pulse/anatomy-prompt-gyorgy-bakocs/">https://www.linkedin.com/pulse/anatomy-prompt-gyorgy-bakocs/</a></p></li><li><p><strong>Gemini 3 Prompt Practices</strong> &#8211; Phil Schmid<br><a href="https://www.philschmid.de/gemini-3-prompt-practices">https://www.philschmid.de/gemini-3-prompt-practices</a></p></li><li><p><strong>Prompt Engineering vs Blind Prompting</strong> &#8211; Mitchell Hashimoto<br><a href="https://mitchellh.com/writing/prompt-engineering-vs-blind-prompting">https://mitchellh.com/writing/prompt-engineering-vs-blind-prompting</a></p></li><li><p><strong>Deterministic Quoting</strong> &#8211; Matty Yeung<br><a href="https://mattyyeung.github.io/deterministic-quoting">https://mattyyeung.github.io/deterministic-quoting</a></p></li><li><p><strong>Rewrite Your Prompts</strong> &#8211; Max Leiter<br><a href="https://maxleiter.com/blog/rewrite-your-prompts">https://maxleiter.com/blog/rewrite-your-prompts</a></p></li><li><p><strong>Prompt Engineering 101</strong> &#8211; Amatria<br><a href="https://amatria.in/blog/PromptEngineering">https://amatria.in/blog/PromptEngineering</a></p></li><li><p><strong>Prompt Engineering 201</strong> &#8211; Amatria<br><a href="https://amatria.in/blog/prompt201">https://amatria.in/blog/prompt201</a></p></li><li><p><strong>AI Tools Up: Prompt Engineering Resources</strong> &#8211; aiToolsUp<br><a href="https://aitoolsup.com/best-resources-to-become-prompt-engineer/">https://aitoolsup.com/best-resources-to-become-prompt-engineer/</a></p></li><li><p><strong>Prompt Examples</strong> &#8211; OpenAI<br><a href="https://platform.openai.com/docs/examples">https://platform.openai.com/docs/examples</a></p></li><li><p><strong>Prompt Engineering Roadmap</strong> &#8211; Roadmap.sh<br><a href="https://roadmap.sh/prompt-engineering">https://roadmap.sh/prompt-engineering</a></p></li></ul><div><hr></div><h2>&#129520; GitHub Repositories</h2><p><em>Hands-on prompt examples, tooling, collections, and experiments.</em></p><ul><li><p><a href="https://github.com/PromptLabs/Prompt-Hacking-Resources">https://github.com/PromptLabs/Prompt-Hacking-Resources</a></p></li><li><p><a href="https://github.com/brexhq/prompt-engineering">https://github.com/brexhq/prompt-engineering</a></p></li><li><p><a href="https://github.com/anthropics/prompt-eng-interactive-tutorial">https://github.com/anthropics/prompt-eng-interactive-tutorial</a></p></li><li><p><a href="https://github.com/openai/openai-cookbook">https://github.com/openai/openai-cookbook</a></p></li><li><p><a href="https://github.com/dair-ai/Prompt-Engineering-Guide">https://github.com/dair-ai/Prompt-Engineering-Guide</a></p></li><li><p><a href="https://github.com/promptslab/Awesome-Prompt-Engineering">https://github.com/promptslab/Awesome-Prompt-Engineering</a></p></li><li><p><a href="https://github.com/thunlp/PromptPapers">https://github.com/thunlp/PromptPapers</a></p></li><li><p><a href="https://github.com/thunlp/OpenPrompt">https://github.com/thunlp/OpenPrompt</a></p></li><li><p><a href="https://github.com/guidance-ai/guidance">https://github.com/guidance-ai/guidance</a></p></li><li><p><a href="https://github.com/microsoft/PromptWizard">https://github.com/microsoft/PromptWizard</a></p></li><li><p><a href="https://github.com/swyxio/ai-notes">https://github.com/swyxio/ai-notes</a></p></li></ul><div><hr></div><h2>&#9881;&#65039; Tools &amp; Services</h2><p><em>Playgrounds, prompt testing tools, optimizers, and prompt management platforms.</em></p><ul><li><p><strong>OpenAI Chat Playground </strong><a href="https://platform.openai.com/chat/edit">https://platform.openai.com/chat/edit</a></p></li><li><p><strong>OpenAI Tokenizer </strong><a href="https://platform.openai.com/tokenizer">https://platform.openai.com/tokenizer</a></p></li><li><p><strong>PromptPerfect </strong><a href="https://promptperfect.xyz/">https://promptperfect.xyz/</a></p></li><li><p><strong>FlowGPT Guide </strong><a href="https://guide.flowgpt.com/">https://guide.flowgpt.com/</a></p></li><li><p><strong>PromptPort </strong><a href="https://promptport.ai/">https://promptport.ai/</a></p></li><li><p><strong>Prompt Optimizer </strong><a href="https://promptoptimizer.tools/">https://promptoptimizer.tools/</a></p></li><li><p><strong>TextSynth Completion Playground </strong><a href="https://textsynth.com/completion.html">https://textsynth.com/completion.html</a></p></li><li><p><strong>PromptLayer </strong><a href="https://www.promptlayer.com/platform/prompt-management">https://www.promptlayer.com/platform/prompt-management</a></p></li><li><p><strong>Reverse Prompt Engineer</strong> <a href="https://www.agenticworkers.com/reverse-prompt-engineer">https://www.agenticworkers.com/reverse-prompt-engineer</a></p></li></ul><div><hr></div><h2>&#128172; Communities</h2><p><em>Where prompt engineers share techniques, failures, and experiments.</em></p><ul><li><p><a href="https://www.reddit.com/r/PromptEngineering/">https://www.reddit.com/r/PromptEngineering/</a></p></li><li><p><a href="https://www.reddit.com/r/PromptDesign/">https://www.reddit.com/r/PromptDesign/</a></p></li><li><p><a href="https://www.reddit.com/r/GenAI4all/">https://www.reddit.com/r/GenAI4all/</a></p></li><li><p><a href="https://www.reddit.com/r/PromptSharing/">https://www.reddit.com/r/PromptSharing/</a></p></li><li><p><a href="https://www.reddit.com/r/ChatGPTPromptGenius/">https://www.reddit.com/r/ChatGPTPromptGenius/</a></p></li><li><p><a href="https://www.reddit.com/r/OpenAI/">https://www.reddit.com/r/OpenAI/</a></p></li><li><p></p></li></ul><div><hr></div><p><strong>Thanks for reading </strong><em><strong>The Generative Programmer</strong></em><strong> &#129302;</strong><br>Subscribe for more curated AI resources, agent patterns, and practical lessons from building with LLMs.</p>]]></content:encoded></item><item><title><![CDATA[🤖 Generative Programmer | Issue #17]]></title><description><![CDATA[Curated insights, tools, and techniques for AI-assisted development and building agentic systems]]></description><link>https://generativeprogrammer.com/p/generative-programmer-issue-17</link><guid isPermaLink="false">https://generativeprogrammer.com/p/generative-programmer-issue-17</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 07 Dec 2025 23:05:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!15Zr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#128227; Welcome back! Here&#8217;s everything I came across in <strong>November</strong> on agentic systems and AI-assisted coding, all in one post. Support me by sharing on your networks, and let&#8217;s dive in.</p><h2>&#128293; Top Picks from Issue #17</h2><p>&#128272; <a href="https://securetrajectories.substack.com/p/claude-skill-hijack-invisible-sentence">How We Hijacked a Claude Skill with an Invisible Sentence</a> - Josh Devon<br>&#129504; <a href="https://engineeringagents.substack.com/p/domain-driven-agent-design">Why your AI agents need domain awareness</a> - Russ Miles<br>&#128295; <a href="https://blog.sshh.io/p/how-i-use-every-claude-code-feature">How I Use Every Claude Code Feature</a> - Shrivu Shankar<br>&#128202; <a href="https://medium.com/google-cloud/genai-in-production-mlops-or-genaiops-25691c9becd0">GenAI in Production: MLOps or GenAIOps?</a> - Dr. Kartakis<br>&#128076; <a href="https://weaviate.io/ebooks/the-context-engineering-guide">The Context Engineering Guide</a> - Weaviate<br>&#128269; <a href="https://www.newsletter.swirlai.com/p/building-deep-research-agent-from">Building a Deep Research Agent from scratch</a> - Aurimas Grici&#363;nas<br>&#128737;&#65039; <a href="https://arxiv.org/abs/2506.08837">Design Patterns for Securing LLM Agents against Prompt Injections</a> - Luca Beurer<br>&#128200; <a href="https://leadershiplighthouse.substack.com/p/i-went-all-in-on-ai-the-mit-study">I Went All-In on AI. The MIT Study Is Right.</a> - Josh Anderson</p><h2>&#127919; Featured Article</h2><p><a href="https://www.newsletter.swirlai.com/p/building-deep-research-agent-from">This in-depth tutorial</a> by <strong>Aurimas Grici&#363;nas</strong> walks you through building a <strong>Deep Research Agent</strong> from scratch using the open-source <strong>DeepSeek R1</strong> 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_!Uwxe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Uwxe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.png 424w, https://substackcdn.com/image/fetch/$s_!Uwxe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.png 848w, https://substackcdn.com/image/fetch/$s_!Uwxe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.png 1272w, https://substackcdn.com/image/fetch/$s_!Uwxe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Uwxe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.png" width="1456" height="895" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:895,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Uwxe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.png 424w, https://substackcdn.com/image/fetch/$s_!Uwxe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.png 848w, https://substackcdn.com/image/fetch/$s_!Uwxe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.png 1272w, https://substackcdn.com/image/fetch/$s_!Uwxe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2194f5-e847-4f07-9bf4-cf5f5c3baa0f_1673x1028.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>It covers every step, from planning and web search to summarization and reflection, without relying on any orchestration frameworks. Highly recommended to check it out!</p><h2><strong>&#129302; Building Agentic Systems</strong></h2><p><a href="https://securetrajectories.substack.com/p/claude-skill-hijack-invisible-sentence">How We Hijacked a Claude Skill with an Invisible Sentence</a> - Josh Devon reveals a critical security vulnerability in Claude Skills that allows attackers to override instructions with invisible text! </p><p><a href="https://www.linkedin.com/feed/update/urn:li:activity:7363981883606478849/">Agent IAM in Cloud Native World with SPIFFE and Istio</a> - Mr Posta&#8217;s slides on cloud-native identity management with SPIFFE. &#128293;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dcph!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dcph!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.png 424w, https://substackcdn.com/image/fetch/$s_!Dcph!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.png 848w, https://substackcdn.com/image/fetch/$s_!Dcph!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.png 1272w, https://substackcdn.com/image/fetch/$s_!Dcph!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dcph!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.png" width="1456" height="769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:769,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2317152,&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/180967691?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.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_!Dcph!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.png 424w, https://substackcdn.com/image/fetch/$s_!Dcph!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.png 848w, https://substackcdn.com/image/fetch/$s_!Dcph!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.png 1272w, https://substackcdn.com/image/fetch/$s_!Dcph!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93dff080-e057-45b4-a80e-5918c85ba437_2932x1548.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">Securing Agents and MCP servers</figcaption></figure></div><p><a href="https://engineeringagents.substack.com/p/domain-driven-agent-design">Domain Driven Agent Design - by Russ Miles</a> - Miles explains why AI agents fail when deployed without domain context, creating impressive demos that collapse in production environments.</p><p><a href="https://simonw.substack.com/p/new-prompt-injection-papers-agents">New prompt injection papers: Agents Rule of Two and The Attacker Moves Second</a> - <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Simon Willison&quot;,&quot;id&quot;:5753967,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5a30d45c-fcba-407a-bebf-96f51a8944a4_48x48.jpeg&quot;,&quot;uuid&quot;:&quot;f02b66e6-5f3a-4ef8-be2a-fc8e2c9e35e4&quot;}" data-component-name="MentionToDOM"></span> highlights new research on prompt injection vulnerabilities along with WiFi-enabled conference badge hacking and other tech links.</p><p><a href="https://arxiv.org/abs/2506.08837">Design Patterns for Securing LLM Agents against Prompt Injections</a> - Luca Beurer&#8217;s paper on security framework for LLM agent protection.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ViR_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ViR_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ViR_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ViR_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ViR_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ViR_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.jpeg" width="1456" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&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_!ViR_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ViR_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ViR_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ViR_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc6313e6-c1e0-4c39-af08-4b65251eab78_4096x2814.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">Security Patterns Collection</figcaption></figure></div><p><a href="https://achan2013.medium.com/how-many-tools-functions-can-an-ai-agent-has-21e0a82b7847">How Many Tools Functions Can An AI Agent Have</a> - to do</p><p>&#128171; <a href="https://weaviate.io/ebooks/the-context-engineering-guide">The Context Engineering Guide</a> - Learn to optimize LLM performance through context engineering patterns that overcome hallucinations and build reliable AI applications with real-world context.</p><p><a href="https://medium.com/@mhockelberg/why-model-context-protocol-and-agentic-workflows-are-shaking-up-how-we-build-apps-0dbe760b9fb2">Why Model Context Protocol and Agentic Workflows Are Shaking Up How We Build Apps</a> - Monica Hockelberg explains how MCP and agentic workflows transform rigid development into more fluid, adaptable systems for the AI era.</p><p><a href="https://techcommunity.microsoft.com/blog/appsonazureblog/bulletproof-agents-with-the-durable-task-extension-for-microsoft-agent-framework/4467122">Bulletproof agents with the durable task extension for Microsoft Agent Framework</a> - New extension enables resilient agent workflows that can survive interruptions and automatically resume processing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9SBg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9SBg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.png 424w, https://substackcdn.com/image/fetch/$s_!9SBg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.png 848w, https://substackcdn.com/image/fetch/$s_!9SBg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.png 1272w, https://substackcdn.com/image/fetch/$s_!9SBg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9SBg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.png" width="1456" height="534" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:534,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:278001,&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/180967691?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.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_!9SBg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.png 424w, https://substackcdn.com/image/fetch/$s_!9SBg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.png 848w, https://substackcdn.com/image/fetch/$s_!9SBg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.png 1272w, https://substackcdn.com/image/fetch/$s_!9SBg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78652e6e-200e-4663-8303-fc27a1d7d4e9_2662x976.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>Built-in agent observability in MAF</strong></figcaption></figure></div><p><a href="https://buildermethods.com/agent-os/workflow">Agent OS Workflow for Spec-Driven Development</a> - Brian Casel proposes a six-phase AI agent workflow for spec-driven development.</p><p><a href="https://portkey.ai/blog/the-complete-guide-to-llm-observability/">The complete guide to LLM observability for 2026</a> - Ghost explains how to implement comprehensive LLM monitoring systems with frameworks for tracing, guardrails, cost management, and governance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xazU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xazU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.png 424w, https://substackcdn.com/image/fetch/$s_!xazU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.png 848w, https://substackcdn.com/image/fetch/$s_!xazU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.png 1272w, https://substackcdn.com/image/fetch/$s_!xazU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xazU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.png" width="1536" height="670" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:670,&quot;width&quot;:1536,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1315471,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xazU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.png 424w, https://substackcdn.com/image/fetch/$s_!xazU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.png 848w, https://substackcdn.com/image/fetch/$s_!xazU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.png 1272w, https://substackcdn.com/image/fetch/$s_!xazU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70c98da-5032-45e8-a849-9ca74b1b7cc2_1536x670.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">End-to-End LLM Observability Overview</figcaption></figure></div><p><a href="https://rlancemartin.github.io/2025/10/15/manus/">Context Engineering in Manus</a> - Erik explores how Manus handles context management for AI agents, addressing challenges of context windows filling up during extended tool-calling sessions.</p><p><a href="https://medium.com/@joshua.v.sanger/implementing-toolformer-with-openai-and-remix-22997dd46499">Building a Toolformer model with OpenAI and Remix</a> - Josh Sanger shows how to build a weather assistant using Toolformer, enabling AI to use external tools via API calls.</p><p><a href="https://www.diagrid.io/blog/making-agent-to-agent-a2a-communication-secure-and-reliable-with-dapr">Making Agent-to-Agent (A2A) Secure and Reliable with Dapr</a> - I tried A2A with Dapr and saw how easily it adds mTLS, policy enforcement, tracing, and self-healing behavior to any agent workflow. <a href="https://www.diagrid.io/blog/durable-agentic-workflows-with-dapr">Then showed step-by-step</a> how to turn a deterministic workflow into an agentic one.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!15Zr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!15Zr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png 424w, https://substackcdn.com/image/fetch/$s_!15Zr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png 848w, https://substackcdn.com/image/fetch/$s_!15Zr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png 1272w, https://substackcdn.com/image/fetch/$s_!15Zr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!15Zr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png" width="923" height="481" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:481,&quot;width&quot;:923,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!15Zr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png 424w, https://substackcdn.com/image/fetch/$s_!15Zr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png 848w, https://substackcdn.com/image/fetch/$s_!15Zr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.png 1272w, https://substackcdn.com/image/fetch/$s_!15Zr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F598c1be3-9dd5-4fe7-b00a-37f5849bee47_923x481.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">From deterministic to agentic workflows</figcaption></figure></div><p>&#128640; <a href="https://cloud.google.com/architecture/choose-design-pattern-agentic-ai-system">Choose a design pattern for your agentic AI system</a> - Google&#8217;s guidance for selecting appropriate agent design patterns to build AI systems that can handle autonomous decision-making and complex workflows.</p><p><a href="https://blog.modelcontextprotocol.io/posts/2025-11-21-mcp-apps/">MCP Apps: Extending servers with interactive user interfaces</a> - Ido Salomon introduces a new extension enabling MCP servers to deliver interactive UIs to hosts, addressing a top community request.</p><h2><strong>&#128187; Coding with AI</strong></h2><p><a href="https://blog.sshh.io/p/how-i-use-every-claude-code-feature">How I Use Every Claude Code Feature</a> - Shrivu Shankar shares detailed insights on leveraging Claude Code for both hobbyist projects and professional development with high-volume token usage.</p><p><a href="https://words.filippo.io/claude-debugging/">Claude Code Can Debug Low-level Cryptography</a> - Filippo Valsorda describes how Claude Code successfully identified a complex bug in his post-quantum signature algorithm implementation when he was stuck.</p><p><a href="https://packagemain.tech/p/evolution-of-code-review-practices-code-rabbit">The evolution of code review practices in the world of AI</a> - Alex Pliutau examines how AI tools are transforming code reviews, improving efficiency while maintaining human oversight.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lbgo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lbgo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.png 424w, https://substackcdn.com/image/fetch/$s_!Lbgo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.png 848w, https://substackcdn.com/image/fetch/$s_!Lbgo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.png 1272w, https://substackcdn.com/image/fetch/$s_!Lbgo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lbgo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.png" width="1456" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lbgo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.png 424w, https://substackcdn.com/image/fetch/$s_!Lbgo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.png 848w, https://substackcdn.com/image/fetch/$s_!Lbgo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.png 1272w, https://substackcdn.com/image/fetch/$s_!Lbgo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd4fdf5-30fb-49a1-913d-49ebe253b670_2073x1150.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>AI-powered and human code reviews</strong></figcaption></figure></div><p>&#128293; <a href="https://github.com/github/awesome-copilot">GitHub - github/awesome-copilot</a> - github - Curated toolkit to supercharge Copilot.</p><p>&#128293; <a href="https://github.com/hesreallyhim/awesome-claude-code">GitHub - hesreallyhim/awesome-claude-code</a> - Community-curated collection of commands, files, and workflows to enhance productivity with Anthropic&#8217;s CLI-based coding assistant.</p><p><a href="https://ben.stolovitz.com/posts/how_use_ai_oct_2025/">How I use AI (Oct 2025)</a> - Stolovitz reflects on his AI usage as a software engineer, highlighting Copilot&#8217;s impact on coding productivity since its early days.</p><p><a href="https://ainativedev.io/news/rulebook-ai-wants-to-elevate-vibe-coding-to-vibe-engineering-by-generating-assistant-specific-configs">Rulebook-AI wants to &#8220;elevate vibe coding to vibe engineering&#8221;</a> - Tool transforms AI coding assistant configurations into structured guidance, eliminating fragmentation and inconsistency in development workflows.</p><h2><strong>&#128240; Long-Form Reads</strong></h2><p><a href="https://arxiv.org/abs/2507.13334">A Survey of Context Engineering for Large Language Models</a> - Lingrui Mei&#8217;s comprehensive overview of techniques to optimize LLM context usage, from retrieval methods to context compression.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-iEA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-iEA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.png 424w, https://substackcdn.com/image/fetch/$s_!-iEA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.png 848w, https://substackcdn.com/image/fetch/$s_!-iEA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.png 1272w, https://substackcdn.com/image/fetch/$s_!-iEA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-iEA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.png" width="1456" height="1444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1444,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:774953,&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/180967691?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.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_!-iEA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.png 424w, https://substackcdn.com/image/fetch/$s_!-iEA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.png 848w, https://substackcdn.com/image/fetch/$s_!-iEA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.png 1272w, https://substackcdn.com/image/fetch/$s_!-iEA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67941acc-3415-434e-8fcb-31260b0a07b5_1458x1446.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">The taxonomy of Context Engineering in Large Language Models</figcaption></figure></div><p><a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai">The State of AI</a> - McKinsey&#8217;s report on current AI adoption trends, business impact, and implementation challenges across industries.</p><p>&#128300; <a href="https://leadershiplighthouse.substack.com/p/i-went-all-in-on-ai-the-mit-study">I Went All-In on AI. The MIT Study Is Right.</a> - Josh Anderson shares firsthand experience using Claude Code exclusively for three months to understand why 95% of corporate AI initiatives fail.</p><p><a href="https://medium.com/google-cloud/genai-in-production-mlops-or-genaiops-25691c9becd0">GenAI in Production: MLOps or GenAIOps?</a> - Dr. Kartakis analyzes various operational frameworks for deploying GenAI solutions, clarifying differences between MLOps, LLMOps, and other emerging approaches.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gjj6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gjj6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.png 424w, https://substackcdn.com/image/fetch/$s_!Gjj6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.png 848w, https://substackcdn.com/image/fetch/$s_!Gjj6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.png 1272w, https://substackcdn.com/image/fetch/$s_!Gjj6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gjj6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.png" width="1400" height="686" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:686,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Gjj6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.png 424w, https://substackcdn.com/image/fetch/$s_!Gjj6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.png 848w, https://substackcdn.com/image/fetch/$s_!Gjj6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.png 1272w, https://substackcdn.com/image/fetch/$s_!Gjj6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F915bd0b6-a0d0-4b13-9286-a1e9b5c55caa_1400x686.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>Primary domains in GenAI development: model and application</strong></figcaption></figure></div><p><a href="https://gist.github.com/igorcosta/bb40cdab6b1468c373d647164afae7ef">What would you do if you had a chance to sneak peak in the year 2030 and you were a Hubber?</a> - A developer&#8217;s 2025 forecast of AI&#8217;s rapid takeover of coding jobs, driven by economics and efficiency gains across most software domains.</p><p><a href="https://www.jasonscheirer.com/weblog/vignettes/">The Death of Software Engineering as a Profession</a> - Jason Scheirer reflects on incorrect predictions about programming careers and how specialized knowledge remains valuable despite technological advances.</p><p>&#127912; <a href="https://minimaxir.com/2025/11/nano-banana-prompts/">Nano Banana can be prompt engineered for extremely nuanced AI image generation</a> - Max Woolf explores how Nano Banana offers sophisticated image generation amid competition from FLUX.1-dev, Seedream, and ChatGPT&#8217;s viral features.</p><h2><strong>&#127897;&#65039; YouTube &amp; Podcasts</strong></h2><p><a href="https://www.youtube.com/watch?v=IDSAMqip6ms">The Secrets of Claude Code From the Engineers Who Built It</a> - Explains how Claude Code enables developers to ship features in unfamiliar codebases more efficiently, with each new feature making subsequent development easier.</p><p><a href="https://practicalai.fm/">Practical AI</a> - Podcast making AI accessible through real-world applications.</p><h2><strong>&#128478;&#65039; News and Updates</strong></h2><p><a href="https://x.com/akshay_pachaar/status/1964978158782095778">Akshay on X</a> - Who is a Full-stack AI Engineer?</p><p><a href="https://x.com/PawelHuryn/status/1943611413320093880">Pawe&#322; Huryn on X</a> - 10 Principles of Building AI Agents:</p><p><a href="https://x.com/PawelHuryn/status/1949925078562721863">Pawe&#322; Huryn on X</a> - Context engineering is the new prompt engineering.</p><p><a href="https://x.com/Aurimas_Gr/status/1957790537118851262">Aurimas on X</a> - AI Engineering Learning Roadmap </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hNkj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hNkj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hNkj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hNkj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hNkj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hNkj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.jpeg" width="1456" height="1334" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1334,&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_!hNkj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hNkj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hNkj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hNkj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4afd4152-e5c4-4855-bc92-b2b6a59ddf2d_3792x3475.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>&#120276;&#120284; &#120280;&#120315;&#120308;&#120310;&#120315;&#120306;&#120306;&#120319;&#120310;&#120315;&#120308; &#120287;&#120306;&#120302;&#120319;&#120315;&#120310;&#120315;&#120308; &#120293;&#120316;&#120302;&#120305;&#120314;&#120302;&#120317;.</em> </figcaption></figure></div><p><a href="https://www.linkedin.com/feed/update/urn:li:activity:7394694132197298176/">TOON (Token-Oriented Object Notation)</a> - Aurimas Grici&#363;nas briefly explains how TOON increases model accuracy while reducing token count, critical for optimizing agentic systems.</p><h2><strong>&#128736;&#65039; Tech &amp; Tools</strong></h2><p><a href="https://llmtext.com/">llmtext</a> - Turn any llms.txt into a dedicated MCP server</p><p><a href="https://github.com/agentregistry-dev/agentregistry">GitHub - agentregistry-dev/agentregistry</a> - Centralized registry for AI artifact governance.</p><p><a href="https://www.remote-mcp.com/">AI Connectors Directory</a> - Directory of Remote MCP servers for AI custom connectors.</p><p><a href="https://github.com/HKUDS/DeepCode">DeepCode: Open Agentic Coding</a> - Open-source tool offering terminal-based and web interfaces for AI-powered code generation from papers and text.</p><p><a href="https://github.com/PromptLabs/Prompt-Hacking-Resources">Prompt-Hacking-Resources</a> - PromptLabs&#8217; curated collection of resources for AI red teaming, jailbreaking, and prompt injection, designed for those interested in AI/ML security and safety.</p><p><a href="https://opencode.ai/">OpenCode | The open source AI coding agent</a> - A privacy-focused AI coding assistant offering free models with no account required and integrations across multiple platforms.</p><p><a href="https://github.com/toon-format/toon">GitHub - toon-format/toon: &#127890; Token-Oriented Object Notation (TOON)</a> - A compact JSON alternative optimized for LLMs that combines YAML&#8217;s indentation structure with CSV-like layouts for efficient token usage while maintaining readability.</p><p><a href="https://github.com/Portkey-AI/gateway">GitHub - Portkey-AI/gateway</a> - Open-source AI gateway providing fast routing to 1600+ language, vision, audio, and image models with integrated guardrails and enterprise-ready security.</p><p><a href="https://github.com/metatool-ai/metamcp">GitHub - metatool-ai/metamcp</a> - MCP proxy that aggregates multiple MCP servers into a unified endpoint with middleware support, enabling developers to build agents on this infrastructure.</p><p><a href="https://medium.com/@writertripathi/youre-burning-0-02-per-1k-json-tokens-you-don-t-need-to-136c2bc7101b">You&#8217;re Burning 0.02 Per 1K JSON Tokens You Don&#8217;t Need To</a> - Ankita Tripathi explains how to optimize JSON structures in API calls to reduce token usage and lower costs when working with AI models.</p><p>&#128176; <a href="https://frugal.co/">Frugal AI - Intelligent Application Cost Engineering</a> - AI-powered tool that optimizes application code across major cloud platforms by automatically identifying and fixing inefficiencies in code rather than just resizing infrastructure.</p><p><a href="https://www.thoughtworks.com/radar">Technology Radar</a> - Thoughtworks&#8217; biannual guide tracking emerging tools, techniques, and frameworks is AI-dominated.</p><p><a href="https://medium.com/demohub-tutorials/17-top-mcp-registries-and-directories-explore-the-best-sources-for-server-discovery-integration-0f748c72c34a">17 Top MCP Registries and Directories</a> - Comprehensive guide to the best MCP registries for server discovery.</p><p><a href="https://cto.new/pricing">cto.new</a> - Free AI code agent offering access to frontier models from Anthropic and OpenAI without requiring credit cards or API keys.</p><p><a href="https://skillsmp.com/">Claude Skills Marketplace</a> - Directory for browsing, searching and installing Claude skills from GitHub, including official Anthropic skills, code skills, and AI automation workflows.</p><p><a href="https://github.com/anthropics/skills">GitHub - anthropics/skills</a> - Anthropics&#8217; repository of reusable Claude skills that enable specialized tasks across creative, technical, and enterprise workflows with clear documentation.</p><p><a href="https://github.com/langwatch/better-agents">GitHub - langwatch/better-agents</a> - CLI tool and standards that enhance coding assistants to build production-ready agents with industry best practices.</p><p><a href="https://github.com/ruvnet/claude-flow">GitHub - ruvnet/claude-flow</a> - Enterprise-grade AI orchestration platform using swarm intelligence with persistent memory and MCP tools for enhanced development workflows.</p><p><a href="https://kagenti.github.io/.github/">Kagenti</a> - Kubernetes-based control plane for AI agents that works with any framework, providing modular components to streamline production deployments.</p><p><a href="https://github.com/kubernetes-sigs/agent-sandbox">GitHub - kubernetes-sigs/agent-sandbox</a> - Kubernetes CRD for managing isolated, stateful singleton workloads with stable identity, designed for AI agent runtimes and similar use cases.</p><p>&#9889;<a href="https://codewiki.google/">Code Wiki</a> - Google&#8217;s new Gemini-generated documentation.</p><h2><strong>&#128218; Learning Picks</strong></h2><p>&#127891; <a href="https://www.kaggle.com/learn-guide/5-day-agents">5-Day AI Agents Intensive Course</a> - A 5-day Google course on Kaggle to build, evaluate, and deploy real-world AI agents.</p><p>&#128077; <a href="https://www.linkedin.com/feed/update/urn:li:activity:7386296644419510274/">Google, OpenAI, Anthropic Offer Free AI Guides</a> -  Here are ten free AI guides worth bookmarking.</p><h2><strong>&#127917; AI Humor</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_!UFVD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UFVD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UFVD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UFVD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UFVD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UFVD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.jpeg" width="957" height="1213" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1213,&quot;width&quot;:957,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:173730,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/180967691?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d02162-e4b9-4d23-82f1-049502371437_1080x1299.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UFVD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UFVD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UFVD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UFVD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d65d6b0-0c7d-48b5-903f-cce089c4def5_957x1213.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">Source: https://www.reddit.com/r/OpenAI/comments/1pere3t/lol/</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Generative Programmer&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://generativeprogrammer.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Generative Programmer</span></a></p><h2>&#128075; See You Next Time</h2><p>That wraps this issue. If it helped you, pass it along or subscribe. &#128591; </p>]]></content:encoded></item><item><title><![CDATA[7 Steps to Make Your OSS Project AI-Ready]]></title><description><![CDATA[A maintainer&#8217;s guide to enabling seamless onboarding, contribution, and collaboration for humans and AI.]]></description><link>https://generativeprogrammer.com/p/7-steps-to-make-your-oss-project</link><guid isPermaLink="false">https://generativeprogrammer.com/p/7-steps-to-make-your-oss-project</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 09 Nov 2025 23:24:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9b460559-9058-4188-925f-c1e2b75dd66a_773x712.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Generative AI is changing how developers discover and consume open source software. It&#8217;s no longer enough to have a good readme and contributor guide for humans, you also need to make your project welcoming for AI. Large Language Models (LLMs) are now the new distributors and consumers of software. They can read your code, parse your docs, write examples, and even explain your project to developers worldwide. As a maintainer, your project&#8217;s visibility and adoption will depend on how well it&#8217;s represented in these AI systems.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mM5b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mM5b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.png 424w, https://substackcdn.com/image/fetch/$s_!mM5b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.png 848w, https://substackcdn.com/image/fetch/$s_!mM5b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.png 1272w, https://substackcdn.com/image/fetch/$s_!mM5b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mM5b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.png" width="771" height="959" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:959,&quot;width&quot;:771,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:148148,&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/178306550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.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_!mM5b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.png 424w, https://substackcdn.com/image/fetch/$s_!mM5b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.png 848w, https://substackcdn.com/image/fetch/$s_!mM5b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.png 1272w, https://substackcdn.com/image/fetch/$s_!mM5b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1545fe7c-60f4-47ac-910a-75d29e50aa65_771x959.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>OSS Maintainers checklist</strong></em></figcaption></figure></div><p>In this post, I&#8217;ll share a practical guide on how to make your open source project easier for LLMs to understand, and for humans to use through AI tools.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/p/7-steps-to-make-your-oss-project?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"><em>Thanks for reading The Generative Programmer! This post is public so feel free to share it.</em></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/p/7-steps-to-make-your-oss-project?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/7-steps-to-make-your-oss-project?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><h2>1. Make Your Project Discoverable by AI</h2><p>When developers face a problem, or research a topic, they don&#8217;t go any longer to Stack Overflow or Google first &#8212; they ask an LLM through ChatGPT, Claude, or a similar service. Questions such as <em>&#8220;How to tune Kafka for low-latency?&#8221; or &#8220;What&#8217;s the best open-source MCP implementation for Kubernetes?&#8221;</em> are now answered directly by LLMs.</p><p>When a developer is in the zone within their IDE and faces a common issue, like a <em>Python dependency error: &#8220;cannot import module x&#8221;</em>, they ask their AI assistant inside the IDE how to fix it.</p><p>Modern AI systems combine their training data with live web search, scanning documentation, repos, and blogs to generate the best up-to-date responses. But most project sites are designed for people, not machines, they are full of menus, ads, and nested pages. Critical details like installation flags, version notes, or API parameters are often buried deep and hard for AI crawlers to find. As a result, your project may be misunderstood or overlooked even if it&#8217;s well-known.</p><p><strong>Using llms.txt to Help AI Find the Right Docs</strong></p><p><a href="https://llmstxt.org/">llms.txt</a> is a simple Markdown file placed at the root of your project&#8217;s site that gives AI models a clean, structured map of your most relevant documentation. Think of it as a robots.txt for language models, but instead of blocking crawlers, it guides them to the right content. It lists a short summary, key links (docs, APIs, SDKs, examples), and optional secondary sections.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dR3S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dR3S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.png 424w, https://substackcdn.com/image/fetch/$s_!dR3S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.png 848w, https://substackcdn.com/image/fetch/$s_!dR3S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.png 1272w, https://substackcdn.com/image/fetch/$s_!dR3S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dR3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.png" width="1456" height="1217" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1217,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:544216,&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/178306550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.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_!dR3S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.png 424w, https://substackcdn.com/image/fetch/$s_!dR3S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.png 848w, https://substackcdn.com/image/fetch/$s_!dR3S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.png 1272w, https://substackcdn.com/image/fetch/$s_!dR3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd828c7b-35ad-40ab-9594-780b9195815e_2048x1712.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>Extract from https://docs.claude.com/llms.txt</em></figcaption></figure></div><p>Add /llms.txt to the root of the project website, keep it updated alongside your docs, and every AI-powered search or assistant will instantly understand what your project is and where to look next.<strong> </strong>The file makes your project easier to find, quote, and recommend in AI-driven tools like ChatGPT, Copilot, and Sourcegraph. There are hundreds of websites already using with it: <a href="https://supabase.com/llms.txt">Supabase</a>, <a href="https://duckdb.org/llms.txt">DuckDB</a>, <a href="https://docs.turso.tech/llms.txt">Turso</a>, <a href="https://huggingface-projects-docs-llms-txt.hf.space/hub/llms.txt">Hugging Face</a>, <a href="https://langfuse.com/llms.txt">Langfuse</a>, and many more in <a href="https://llmstxt.site/">various</a> <a href="https://directory.llmstxt.cloud/">directories</a>.</p><p>llms.txt is an easy addition that can give visibility to your project in a world where LLMs are becoming the primary way of discovering and consuming information. As shown by the tracking site<a href="https://llmstxt.ryanhoward.dev/"> llmstxt.ryanhoward.dev</a>, it&#8217;s not yet widely adopted, but the fact that Anthropic <a href="https://docs.claude.com/llms-full.txt">themselves</a> use llms.txt and recommend it as part of agentic documentation is a strong signal that it&#8217;s the right direction to follow.</p><p>There are plenty of tools and plugins that can help you create and validate these files easily, such as<a href="https://github.com/answerdotai/llms_txt"> llms_txt2ctx</a>,<a href="https://github.com/answerdotai/vitepress-plugin-llms"> vitepress-plugin-llms</a>, and<a href="https://github.com/answerdotai/docusaurus-plugin-llms"> docusaurus-plugin-llms</a>. To learn, check out<a href="https://llmstxt.org/"> llmstxt.org</a>.</p><h2>2. Onboard AI Agents to Your Project</h2><p>Open source projects today communicate their community policies and expectations through a variety of simple text files, for example, README.md, INSTALL.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md, DEVELOPMENT.md, and ISSUE_TEMPLATE.md. These files explain how to set up the project, contribute, follow coding guidelines, or report issues. This structure has worked well for years when humans were the primary readers.</p><p>In the meantime, the number of developers using <strong>AI&#8209;enabled IDEs and CLI tools</strong> is growing rapidly. Millions of developers rely on <strong><a href="https://cursor.com/">Cursor</a></strong> (now surpassing a million users), <strong><a href="https://www.claude.com/product/claude-code">Claude Code</a> CLI</strong>, and <strong><a href="https://openai.com/codex/">OpenAI Codex</a></strong><a href="https://openai.com/codex/"> </a>daily. Yet these users are underserved, their IDEs can&#8217;t easily interpret the project&#8217;s policies, build steps, contribution rules and community best practices. As a result, contributing through AI&#8209;assisted tools often leads to manual onboarding, lower&#8209;quality pull requests, and contributor-maintainer tension.</p><p><strong>Teaching Coding Assistants Your Project&#8217;s Way of Working</strong></p><p>This is where <strong>agent context files</strong> come in. The idea started with different IDEs introducing more advanced ways of sharing project context &#8212; for example, <a href="https://cursor.com/docs/context/rules">.cursor/rules</a> files in Cursor, which began as simple rules and later evolved into structured folder hierarchies, or <a href="https://www.anthropic.com/engineering/claude-code-best-practices">CLAUDE.md</a>, used by Claude CLI to encode build and contribution instructions. These formats help AI-enabled tools understand how to build, test, and navigate a codebase.</p><p>As the space grew fragmented with various formats,<a href="https://github.com/openai/agents.md"> AGENTS.md</a> led by OpenAI began to emerge as the <strong>most widely adopted standard</strong> for defining project context. Today, it&#8217;s becoming the common denominator across AI-assisted environments, with over<a href="https://github.com/search?q=AGENTS.md+in%3Afile%2Cpr%2Cissue&amp;type=pullrequests&amp;s=comments&amp;o=desc"> 30,000 pull requests</a> on GitHub contributing AGENTS.md files in open-source 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_!aQZW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aQZW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.png 424w, https://substackcdn.com/image/fetch/$s_!aQZW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.png 848w, https://substackcdn.com/image/fetch/$s_!aQZW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.png 1272w, https://substackcdn.com/image/fetch/$s_!aQZW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aQZW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.png" width="1456" height="926" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:926,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:400338,&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/178306550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.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_!aQZW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.png 424w, https://substackcdn.com/image/fetch/$s_!aQZW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.png 848w, https://substackcdn.com/image/fetch/$s_!aQZW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.png 1272w, https://substackcdn.com/image/fetch/$s_!aQZW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07af6001-3902-4571-8cf5-2dfcf45a50a6_2048x1302.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>AGENTS.md is an open format for guiding coding agents</em></figcaption></figure></div><p>AGENTS.md files act as a README for AI agents. They summarize how to build, test, and contribute to your project, covering environment setup, dependency installation, code style, test execution, and commit message rules &#8212; but in a way that AI tools can parse and follow. Supported by major IDEs and CLI tools such as Cursor, VS Code, GitHub Copilot, Aider, RooCode, Gemini CLI, Jules, Factory, and Devin, these files help AI agents understand your project&#8217;s structure and workflow.</p><p>With these files, AI assistants can follow project conventions, and produce contributions that align with human developers&#8217; expectations, reducing friction in collaborative development.</p><p>These files are often paired with AI-assisted development guides that show contributors how to configure their IDEs and CLIs for the best experience &#8212; such as<a href="https://angular.dev/ai/develop-with-ai"> Angular&#8217;s AI development guide</a> and<a href="https://docs.convex.dev/ai/using-cursor"> Convex&#8217;s guide for Cursor</a>.</p><p>In short, AGENTS.md and accompanying IDE setup guides provide the missing layer of context between your code and the growing ecosystem of AI-powered development tools. It&#8217;s a lightweight addition that helps AI understand your project&#8217;s workflow &#8212; and makes your repository ready for the era of AI-assisted coding.</p><p>In short, AGENTS.md and accompanying IDE setup guides provide the missing layer of context between your code and the growing ecosystem of AI-powered development tools. It&#8217;s not just about onboarding developers anymore &#8212; it&#8217;s also about onboarding AI agents. This file acts as an <strong><a href="https://www.fuzzycomputer.com/posts/onboarding">onboarding guide for agents</a></strong>, helping them understand your project&#8217;s structure, style, and expectations, so they can contribute effectively and make every developer more productive from day one.</p><h2>3. Define Your AI Contribution Policy</h2><p>AI coding tools are now part of everyday development, but most open&#8209;source projects still lack clear policies on how and when they can be used. Without guidance, contributors interpret &#8220;acceptable AI use&#8221; differently, leading to inconsistent pull requests, hidden AI&#8209;generated code, and extra work for maintainers who must assess both quality and authenticity.</p><p><strong>Setting Ground Rules for AI&#8209;Assisted Contributions</strong></p><p>Projects like<a href="https://github.com/mitchellh/ghostty"> Ghostty</a>,<a href="https://gramps.discourse.group/t/update-to-our-code-contribution-policy/8225"> Gramps</a>,<a href="https://github.com/servo/servo/discussions/36379"> Servo</a>, and<a href="https://discuss.scientific-python.org/t/a-policy-on-generative-ai-assisted-contributions/1702"> Scientific Python</a> illustrate different approaches, from allowing AI with disclosure, to banning it outright. These examples show that there&#8217;s no universal answer, but various efforts to help avoid tension and maintain trust. A great reference comes from the <em><a href="https://openinfra.org/legal/ai-policy">Open Infrastructure Foundation&#8217;s</a></em><a href="https://openinfra.org/legal/ai-policy"> policy</a> on AI&#8209;generated content:</p><blockquote><h5><em>&#8220;As a contributor, you are responsible for the code you submit, whether you use AI tools or write it yourself. Some AI tools offer settings, features, or modes that can help, but these are no substitute for your own review of code quality, correctness, style, security, and licensing.&#8221;</em></h5></blockquote><p>It&#8217;s worth emphasizing that every pull request is still reviewed and maintained by humans, not machines. Contributors must ensure that AI&#8209;assisted code meets the same quality, readability, and consistency expectations as any manually written code.</p><p>There&#8217;s also a broader movement around structured, transparent AI collaboration, such as the<a href="https://vibe-coding-manifesto.com/"> Vibe Coding Manifesto</a>. It advocates for integrating AI into open source responsibly, not rejecting it, but managing it through clear PR rules, contributor transparency, and supporting documents like PROMPTING.md. The manifesto also outlines practical steps such as creating small, focused PRs, running self&#8209;reviews and tests before submission, adding clear AI attributions, and limiting concurrent PRs to avoid &#8220;PR spam.&#8221; These concrete recommendations help maintain quality while keeping the review workload manageable.</p><p>Explicit AI contribution guidelines help maintain a healthy balance between speed and quality. Whether your project allows, restricts, or just tracks AI use, defining the rules early prevents confusion and keeps your contributor community aligned.</p><h2>4. Scale Code Reviews with AI</h2><p>Once your project becomes more discoverable and contributor&#8209;friendly with clear guidelines, agents onboarded, you&#8217;ll start seeing more AI-assisted activity and more pull requests. Reviewing those PRs becomes one of the primary jobs of maintainers. Some PRs might come from bots or low&#8209;quality AI output and can be easily rejected, but many will vary significantly in quality and completeness. The only scalable way to keep up with this volume of <strong>AI&#8209;assisted contributions</strong> and maintain quality is to <strong>use AI for reviewing, too</strong>!</p><h3><strong>Bringing AI into the Review Process</strong></h3><p>AI can perform first&#8209;pass reviews, freeing human maintainers to focus on architecture, design, and logic rather than repetitive or stylistic feedback. Such tools act as automated reviewers that integrate directly with GitHub. They can:</p><ul><li><p><strong>Issue Triage &amp; Labeling</strong> &#8211; Categorize issues automatically</p></li><li><p><strong>Documentation Sync</strong> &#8211; Ensure code and docs remain aligned</p></li><li><p><strong>External Contributor Reviews</strong> &#8211; Apply stricter checks for new contributors</p></li><li><p><strong>Custom Review Checklists</strong> &#8211; Enforce team standards and consistency</p></li><li><p><strong>Path&#8209;Specific Reviews</strong> &#8211; Trigger deeper analysis on critical file changes</p></li><li><p><strong>Scheduled Maintenance</strong> &#8211; Automate repository health checks</p></li><li><p><strong>Security&#8209;Focused Reviews</strong> &#8211; Detect vulnerabilities with OWASP&#8209;aligned checks</p></li></ul><p>Among the most popular AI tools for code reviews are:</p><ul><li><p><strong><a href="https://coderabbit.ai/">CodeRabbit</a></strong> &#8211; the most widely adopted open&#8209;source&#8209;friendly AI code review tool.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VPJo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VPJo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp 424w, https://substackcdn.com/image/fetch/$s_!VPJo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp 848w, https://substackcdn.com/image/fetch/$s_!VPJo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp 1272w, https://substackcdn.com/image/fetch/$s_!VPJo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VPJo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp" width="696" height="306.8901098901099" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:642,&quot;width&quot;:1456,&quot;resizeWidth&quot;:696,&quot;bytes&quot;:70644,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://generativeprogrammer.com/i/178306550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!VPJo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp 424w, https://substackcdn.com/image/fetch/$s_!VPJo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp 848w, https://substackcdn.com/image/fetch/$s_!VPJo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp 1272w, https://substackcdn.com/image/fetch/$s_!VPJo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a78a72-7a7a-4411-bd6b-9f03d7733b76_3840x1694.webp 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>CodeRabbit code review options</em></figcaption></figure></div><p>CodeRabbit integrates directly with GitHub and offers <a href="https://www.coderabbit.ai/pricing">free plans for open&#8209;source projects.</a> It supports both IDE&#8209;based inline reviews and PR&#8209;based multi&#8209;file reviews, giving teams flexibility for internal and external contributions. Its context&#8209;aware reviews understand file dependencies and coding patterns, and it can review uncommitted changes directly in the IDE before a PR is even created, reducing friction and catching issues early.</p></li><li><p><strong><a href="https://github.com/anthropics/claude-code-action">Claude Code Action</a></strong> &#8211; integrates Anthropic&#8217;s Claude for PR review and comment generation, providing natural&#8209;language insights and feedback.</p></li><li><p><strong><a href="https://developers.openai.com/codex/cloud/code-review/">OpenAI Codex Cloud Review</a></strong> &#8211; runs as a GitHub Action to automate AI&#8209;based feedback on pull requests and highlight potential issues.</p></li></ul><p>As AI assistants generate more code, the number of incoming PRs will rise. Having AI review these PRs first ensures consistent quality without overloading maintainers. The workflow becomes: AI writes &#8594; AI reviews &#8594; humans approve. That loop keeps velocity high while maintaining the standards as expected.</p><h2>5. Make Your APIs Agent-Ready</h2><p>If your project already exposes an API, CLI, or has a client SDK, it&#8217;s time to think about how AI agents can interact with it directly. Developers are no longer the only consumers of APIs, <strong>AI assistants are becoming first&#8209;class users, too</strong>. Yet most APIs today are not agent&#8209;ready: assistants can read about them but not interact in a structured, safe way.</p><p><strong>Opening Your APIs to AI Agents with MCP</strong></p><p>The<a href="https://modelcontextprotocol.io/docs/getting-started/intro"> </a><strong><a href="https://modelcontextprotocol.io/docs/getting-started/intro">Model Context Protocol (MCP)</a></strong> is an emerging open standard that lets AI agents connect to tools, APIs, and data sources. Exposing your API or CLI via MCP makes your project agent&#8209;ready, enabling AI systems to query, test, and trigger actions contextually instead of copy&#8209;pasting examples. It improves discoverability, automation, and supports AI&#8209;native workflows where agents use your project the same way as developers do. It also connects your project to the growing MCP ecosystem of compatible tools, browsers, and registries.</p><p>Projects like<a href="https://github.com/tursodatabase/turso"> </a><a href="https://github.com/kanapuli/mcp-kafka">Apache Kafka</a>, <a href="https://github.com/tursodatabase/turso">Turso</a>,<a href="https://github.com/duckdb/duckdb"> DuckDB</a>, and<a href="https://github.com/redis/mcp-redis"> Redis</a> are early examples of being agent&#8209;ready. Some already expose MCP endpoints that let assistants query data or perform operations directly. Cloud services such as <a href="https://github.com/confluentinc/mcp-confluent">Confluent Cloud</a>,<a href="https://supabase.com/blog/remote-mcp-server"> Supabase</a> have gone further, hosting full MCP servers that make their APIs seamlessly accessible to AI tools.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tv8z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tv8z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.png 424w, https://substackcdn.com/image/fetch/$s_!tv8z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.png 848w, https://substackcdn.com/image/fetch/$s_!tv8z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.png 1272w, https://substackcdn.com/image/fetch/$s_!tv8z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tv8z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.png" width="1244" height="1004" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1004,&quot;width&quot;:1244,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:168546,&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/178306550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.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_!tv8z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.png 424w, https://substackcdn.com/image/fetch/$s_!tv8z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.png 848w, https://substackcdn.com/image/fetch/$s_!tv8z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.png 1272w, https://substackcdn.com/image/fetch/$s_!tv8z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ab29ece-94fe-4145-93cc-2d2f741cff31_1244x1004.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">Redis MCP Server https://github.com/redis/mcp-redis</figcaption></figure></div><p>To get started, tools like<a href="https://gofastmcp.com/integrations/openapi"> FastMCP</a> can automatically generate MCP servers from any OpenAPI specification,  instantly turning your existing API into one that AI models can use through MCP. Over time, you can evolve toward a purpose&#8209;built MCP server. Platforms such as<a href="https://www.speakeasy.com"> Speakeasy</a> also provide MCP server generators with free plans for open&#8209;source projects, making it easy to experiment.</p><p>In short, if your project has an API, offering MCP&#8209;based access is becoming table stakes. Adding MCP support transforms your project from something AI agents can only read about into something they can use directly, unlocking the next phase of open&#8209;source and AI integration.</p><h2>6. Turn Docs into Conversational Interfaces</h2><p>Developers don&#8217;t have the time to dig through endless documentation pages or wait for answers in Discord. They expect instant help, the same experience they are used to from AI tools. Yet, most open&#8209;source documentation is static and unresponsive to real&#8209;time questions, and even outdated as the code changes faster.</p><p><strong>How Conversational Docs Improve Developer Onboarding</strong></p><p>Adding an <strong>AI&#8209;powered chat interface</strong> to your docs lets users ask questions directly, based on your project&#8217;s documentation, issues, and source code. Tools like<a href="https://www.kapa.ai"> Kapa.ai</a>, <a href="https://docs.inkeep.com/overview">Inkeep</a>, <a href="https://crawlchat.app/">CrawlChat</a> can index your site, GitHub repo, or forums and deliver answers instantly inside your website, Slack, or Discord. Such services improve onboarding, reduce repeated support requests, and help users learn faster through natural conversation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GfGi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GfGi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.png 424w, https://substackcdn.com/image/fetch/$s_!GfGi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.png 848w, https://substackcdn.com/image/fetch/$s_!GfGi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.png 1272w, https://substackcdn.com/image/fetch/$s_!GfGi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GfGi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.png" width="1456" height="845" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:845,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:106175,&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/178306550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.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_!GfGi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.png 424w, https://substackcdn.com/image/fetch/$s_!GfGi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.png 848w, https://substackcdn.com/image/fetch/$s_!GfGi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.png 1272w, https://substackcdn.com/image/fetch/$s_!GfGi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa746e6b1-70b5-4b59-b3c6-2f178b96d0fe_1840x1068.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">CrewAI Chat with the Docs (custom GPT)</figcaption></figure></div><p>If these tools are not affordable for your project, you can also build a simple in&#8209;house alternative like<a href="https://chatg.pt/DWjSBZn"> CrewAI&#8217;s &#8220;Chat with the Docs&#8221;</a>, or index your documentation with<a href="https://context7.com/"> Context7</a> and expose it as an MCP server, allowing users to query your docs directly from their IDE.</p><p>This is an evolving space, but it&#8217;s likely that in the future, <strong>all open&#8209;source projects will have built&#8209;in AI chat interfaces</strong>, offered for free, either sponsored by their open&#8209;source foundations or integrated directly into platforms like GitHub. For now, you have to find ways to cover this cost.</p><h2>7. Automate Community Tasks with AI</h2><p>As open-source communities grow and AI-assisted development accelerates, maintainers face a constant flow of new issues, PRs, and support questions. Repetitive tasks, triaging, labeling, answering common questions, or closing stale tickets, can consume hours that could be spent improving the project itself.</p><p><strong>Let AI Handle the Repetitive Work</strong></p><p>AI maintainers like<a href="https://app.dosu.dev/9affd04a-e6a9-452c-b927-c639e979994c/documents/cd620933-5c00-4bee-a9d5-9c0698310eba"> Dosu</a> automate many of these repetitive tasks. They can triage issues, answer contributor questions, close inactive discussions, remind authors about missing documentation, and enforce contribution guidelines &#8212; all while keeping conversations active and polite. Dosu already works with major projects like LangChain, Prisma, Strapi, Apache Airflow, and several CNCF initiatives, and <a href="https://dosu.dev/pricing">is free for open-source</a> use (with CNCF and ASF partnerships in place).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oyQy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oyQy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.png 424w, https://substackcdn.com/image/fetch/$s_!oyQy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.png 848w, https://substackcdn.com/image/fetch/$s_!oyQy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.png 1272w, https://substackcdn.com/image/fetch/$s_!oyQy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oyQy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.png" width="1456" height="921" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:921,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247411,&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/178306550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.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_!oyQy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.png 424w, https://substackcdn.com/image/fetch/$s_!oyQy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.png 848w, https://substackcdn.com/image/fetch/$s_!oyQy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.png 1272w, https://substackcdn.com/image/fetch/$s_!oyQy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3aa275e6-ac5e-4ad7-bdaa-17454c8fcfbe_3038x1922.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">Dosu Auto-Labeling issues</figcaption></figure></div><p>In short, AI maintainers act as 24x7 project maintainers, handling the administrative overhead so human maintainers can focus on technical leadership, community growth, and long-term vision.</p><h2>AI-Ready Project Checklist for Maintainers</h2><p>Every open-source project has its own culture, workflows, and pace of change. Yet as AI rapidly reshapes how developers build and collaborate, standing still is the worst option. The right move is to adapt early and use AI as an advantage, not a disruption. This checklist helps maintainers identify where to start.</p><h3>For Users</h3><ol><li><p><strong>Make your project discoverable:</strong> Create <code>llms.txt</code> listing key docs, APIs, and examples so LLMs can index your project. This is a top-of-funnel lever, but with still-unproven impact; treat it as a follow-on step after the other core items.</p></li><li><p><strong>Turn docs into conversations:</strong> Deploy a tool like Kapa.ai trained on your documentation and community resources to answer user questions instantly. This is no longer a luxury: users now expect conversational help, and it significantly improves new user experience.</p></li><li><p><strong>Open your project APIs to agent use:</strong> If you have a CLI, SDK, or API, create an MCP server so AI agents can call and use it directly. Comprehensive MCP support makes your project easier to integrate with AI tools and stand out among alternatives.</p></li></ol><h3>For Contributors</h3><ol start="4"><li><p><strong>Onboard AI-assisted tools to your project:</strong> Add <code>AGENTS.md</code> with build, test, and style instructions so AI tools can quickly figure out how to work with your code. Thousands of projects already use it, making it one of the easiest and highest-impact improvements.</p></li><li><p><strong>Define a clear AI contribution policy:</strong> Update <code>CONTRIBUTING.md</code> and PR templates with a reminder that contributors are responsible for submission quality and correctness, regardless of which tools they use. This reinforces human accountability while promoting transparency as AI-assisted contributions grow.</p></li></ol><h3>For Maintainers</h3><ol start="6"><li><p><strong>Scale code reviews with AI:</strong> Connect CodeRabbit or a similar asynchronous AI bot to automatically review pull requests and provide feedback for free on open-source projects. A small setup effort here pays back quickly by reducing reviewer fatigue and catching early issues.</p></li><li><p><strong>Automate repetitive community tasks:</strong> Install Dosu or a similar GitHub bot to triage issues, answer questions, and keep discussions organized. Automation beyond code reviews helps sustain healthy collaboration and saves maintainers valuable time.</p></li></ol><p>Together, these practices ensure your project is set up to benefit from AI at every level: users can discover it, get answers instantly, and use it with their AI tools; contributors have clear onboarding and AI usage guidelines; and maintainers gain automation for reviews and community operations. The space is evolving fast, keep an eye on relevant tools and practices, subscribe, and share how you&#8217;re using AI in open source.</p>]]></content:encoded></item><item><title><![CDATA[🤖 Generative Programmer | Issue #16]]></title><description><![CDATA[Autumn 2025: Patterns, Frameworks, and Productivity in AI Development]]></description><link>https://generativeprogrammer.com/p/generative-programmer-issue-16</link><guid isPermaLink="false">https://generativeprogrammer.com/p/generative-programmer-issue-16</guid><dc:creator><![CDATA[Bilgin Ibryam]]></dc:creator><pubDate>Sun, 02 Nov 2025 09:41:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!D5jK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#128227; Welcome back! Here&#8217;s everything that happened in the last two months in agentic systems and AI-assisted coding, all in one post.  Support by sharing: <a href="https://twitter.com/intent/tweet?text=Checkout%20this%20newsletter%20with%20the%20latest%20AI%20news%20for%20developers%3A%20https%3A%2F%2Fgenerativeprogrammer.com%2F">X</a> &#183; <a href="https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgenerativeprogrammer.com%2F&amp;summary=Checkout%20this%20newsletter%20with%20the%20latest%20AI%20news%20for%20developers">LinkedIn</a> &#183; <a href="https://bsky.app/intent/compose?text=Checkout%20this%20newsletter%20with%20the%20latest%20AI%20news%20for%20developers%3A%20https%3A%2F%2Fgenerativeprogrammer.com%2F">BlueSky</a> &#183; <a href="mailto:?subject=Check%20out%20this%20newsletter&amp;body=Checkout%20this%20newsletter%20with%20the%20latest%20AI%20news%20for%20developers%3A%20https%3A%2F%2Fgenerativeprogrammer.com%2F">Email</a> and let&#8217;s dive in.</p><h2><strong>&#128293; Top Picks from This Issue</strong></h2><p>&#129504; <a href="https://www.anthropic.com/engineering/writing-tools-for-agents">Writing Effective Tools for AI Agents</a> &#8211; Anthropic  &#128293;<br>&#129513; <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">Effective Context Engineering for AI Agents</a> &#8211; Anthropic again<br>&#127959;&#65039; <a href="https://shopify.engineering/building-production-ready-agentic-systems">Building Production-Ready Agentic Systems</a> &#8211; Shopify&#8217;s lessons <br>&#129516; <a href="https://nlp.elvissaravia.com/p/deep-agents">Deep Agents: From Shallow to Deep...</a> &#8211; Elvis Saravia<br>&#128187; <a href="https://blog.alexmaccaw.com/how-to-vibe-code-as-a-senior-engineer/">How to Vibe Code as a Senior Engineer</a> &#8211; Alex Maccaw <br>&#128640; <a href="https://addyo.substack.com/p/the-ai-native-software-engineer?utm_source=ai-native-dev-newsletter">The AI-Native Software Engineer</a> &#8211; Addy Osmani <br>&#129504; <a href="https://blog.fsck.com/2025/10/05/how-im-using-coding-agents-in-september-2025/">How I&#8217;m Using Coding Agents in September 2025</a> &#8211; Jesse Vincent<br>&#129517; <a href="https://medium.com/@springrod/context-engineering-needs-domain-understanding-b4387e8e4bf8">Context Engineering Needs Domain Understanding</a> &#8211; Rod Johnson <br>&#9889; <a href="https://magazine.sebastianraschka.com/p/from-gpt-2-to-gpt-oss-analyzing-the">From GPT-2 to gpt-oss: Architectural Advances</a> &#8211; Sebastian Raschka  &#128293;<br>&#128161; <a href="https://maxleiter.com/blog/rewrite-your-prompts">You Should Be Rewriting Your Prompts</a> &#8211; Max Leiter<br>&#129521; <a href="https://x.com/DataChaz/status/1969281035562303676">Google&#8217;s MCP Toolbox for Databases Is Now Open Source</a> <br>&#128293;&#128293;&#128293; <a href="https://www.youtube.com/watch?v=ysPbXH0LpIE">Prompting 101</a> - Hannah &amp; Christian from Anthropic</p><p>&#8230;and if you dare, <em>100+ updates</em> to explore &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/p/generative-programmer-issue-16?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/generative-programmer-issue-16?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2>&#127919; Featured Article</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D5jK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D5jK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp 424w, https://substackcdn.com/image/fetch/$s_!D5jK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp 848w, https://substackcdn.com/image/fetch/$s_!D5jK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp 1272w, https://substackcdn.com/image/fetch/$s_!D5jK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D5jK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp&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;:null,&quot;alt&quot;:&quot;This is an image depicting how an engineer might use Claude Code to evaluate the efficacy of agentic tools.&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="This is an image depicting how an engineer might use Claude Code to evaluate the efficacy of agentic tools." title="This is an image depicting how an engineer might use Claude Code to evaluate the efficacy of agentic tools." srcset="https://substackcdn.com/image/fetch/$s_!D5jK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp 424w, https://substackcdn.com/image/fetch/$s_!D5jK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp 848w, https://substackcdn.com/image/fetch/$s_!D5jK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp 1272w, https://substackcdn.com/image/fetch/$s_!D5jK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb913efc5-1e30-4318-8b53-31588a8891d3_1920x1080.webp 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><a href="https://www.anthropic.com/engineering/writing-tools-for-agents">Writing effective tools for AI agents</a> - Anthropic outlines techniques for creating effective tools for LLM agents using the Model Context Protocol, sharing key principles for writing high-quality tools that bridge deterministic and non-deterministic systems.</p><h2><strong>&#128240; Building Agentic Systems</strong></h2><p>&#128293;&#128293;&#128293; <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">Effective context engineering for AI agents</a> - Anthropic explains how context engineering is replacing prompt engineering, focusing on optimizing the entire token context to achieve consistent LLM performance rather than just finding the right prompt phrases.</p><p><a href="https://www.infoq.com/articles/agentic-ai-architecture-framework/">Agentic AI Architecture Framework for Enterprises - InfoQ</a> - A framework for building autonomous AI systems with architectural components and implementation patterns.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LfXq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LfXq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LfXq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LfXq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LfXq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LfXq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.jpeg" width="1200" height="751" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:751,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Diagram titled AI Agent Orchestration Patterns displays five patterns: sequential with chained agents, concurrent with parallel agents, group chat with multiple agents in discussion, maker-checker loops with validation steps, handoff with agent transfer, and magentic with central coordinator, each illustrated by flowcharts showing agent interactions and data flows.&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="Diagram titled AI Agent Orchestration Patterns displays five patterns: sequential with chained agents, concurrent with parallel agents, group chat with multiple agents in discussion, maker-checker loops with validation steps, handoff with agent transfer, and magentic with central coordinator, each illustrated by flowcharts showing agent interactions and data flows." title="Diagram titled AI Agent Orchestration Patterns displays five patterns: sequential with chained agents, concurrent with parallel agents, group chat with multiple agents in discussion, maker-checker loops with validation steps, handoff with agent transfer, and magentic with central coordinator, each illustrated by flowcharts showing agent interactions and data flows." srcset="https://substackcdn.com/image/fetch/$s_!LfXq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LfXq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LfXq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LfXq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F257a4e16-154e-4bfc-b3f6-0534ecce58f1_1200x751.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"><a href="https://x.com/bibryam/status/1981639800802414976">https://x.com/bibryam/status/1981639800802414976</a></figcaption></figure></div><p>&#128293; <a href="https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/ai-agent-design-patterns">AI Agent Orchestration Patterns</a> - Guide to designing multi-agent systems that handle complex tasks collaboratively by Microsoft.</p><p>&#128293; <a href="https://shopify.engineering/building-production-ready-agentic-systems">Building production-ready agentic systems</a> - Shopify&#8217;s journey building a production-ready AI assistant with practical lessons learned.</p><p><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> - Anthropic: AgentSkills packages domain expertise for more capable AI assistants.</p><p><a href="https://www.microsoft.com/en-us/research/articles/magentic-one-a-generalist-multi-agent-system-for-solving-complex-tasks/">Magentic-One: A Generalist Multi-Agent System for Solving Complex Tasks </a>- Microsoft&#8217;s multi-agent system that solves complex tasks through collaborative AI agents.</p><p><a href="https://muratbuffalo.blogspot.com/2025/09/supporting-our-ai-overlords-redesigning.html">Supporting our AI overlords: Redesigning data systems to be Agent-first</a> - Berkeley researchers propose redesigning databases for LLM agents&#8217; unique query patterns.</p><p><a href="https://www.anthropic.com/news/context-management?utm_source=substack&amp;utm_medium=email">Managing context on the Claude Developer Platform</a> - Anthropic introduces new context management capabilities that help developers build AI agents capable of handling complex, long-running tasks without hitting context limits or losing critical information.</p><p><a href="https://arxiv.org/abs/2405.10467">Agent Design Pattern Catalogue: A Collection of Architectural Patterns</a> - Yue Liu - A collection of design patterns for building foundation model agents.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ayYd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ayYd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.png 424w, https://substackcdn.com/image/fetch/$s_!ayYd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.png 848w, https://substackcdn.com/image/fetch/$s_!ayYd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!ayYd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ayYd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.png" width="1456" height="1146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1146,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ayYd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.png 424w, https://substackcdn.com/image/fetch/$s_!ayYd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.png 848w, https://substackcdn.com/image/fetch/$s_!ayYd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!ayYd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa27e15-0779-46c4-9d34-7b02de139e42_1492x1174.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">The 5 levels of autonomy: Self-driving cars vs. AI dev agents</figcaption></figure></div><p><a href="https://ainativedev.io/news/the-5-levels-of-ai-agent-autonomy-learning-from-self-driving-cars">The 5 levels of AI agent autonomy: learning from self-driving cars</a> - Maps coding agents to self-driving car autonomy levels, from manual to fully autonomous.</p><p>&#128293; <a href="https://nlp.elvissaravia.com/p/deep-agents">Deep Agents </a>- AI systems evolving from shallow to deep agents with strategic planning capabilities.</p><h2><strong>&#128240; Coding with AI</strong></h2><p>&#128293;&#128293;&#128293; <a href="https://blog.alexmaccaw.com/how-to-vibe-code-as-a-senior-engineer/">How to Vibe Code as a Senior Engineer</a> - Alex Maccaw explains how &#8220;vibe coding&#8221; leverages AI models to dramatically accelerate software development, turning traditionally expensive and time-consuming coding processes into rapid, efficient workflows for senior engineers.</p><p><a href="https://etsd.tech/posts/rtfc">Read That F*cking Code!</a> - Developers need to actually read the code that AI generates for them.</p><p>&#128293; <a href="https://addyo.substack.com/p/the-ai-native-software-engineer?utm_source=ai-native-dev-newsletter">The AI-Native Software Engineer</a> - <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Addy Osmani&quot;,&quot;id&quot;:11623675,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cee7ba66-e656-4450-a0ed-c951c27ee228_1080x1080.jpeg&quot;,&quot;uuid&quot;:&quot;5221083f-afa2-44b7-9f58-6b7a7f32c96f&quot;}" data-component-name="MentionToDOM"></span> : Engineers who embrace AI as partners can multiply their productivity.</p><p><a href="https://www.fuzzycomputer.com/posts/onboarding">Onboarding for coding agents</a> - Simplified context delivery for AI coding assistants.</p><p><a href="https://simonw.substack.com/p/claudes-new-code-interpreter">Claude&#8217;s new Code Interpreter</a> - <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Simon Willison&quot;,&quot;id&quot;:5753967,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5a30d45c-fcba-407a-bebf-96f51a8944a4_48x48.jpeg&quot;,&quot;uuid&quot;:&quot;a3c5dc74-971f-4e64-b9c4-3150118773dc&quot;}" data-component-name="MentionToDOM"></span> reviews Claude&#8217;s Code Interpreter and showcases various AI development tools.</p><p><a href="https://www.augmentcode.com/guides/ai-coding-assistants-for-large-codebases-a-complete-guide">AI Coding Assistants for Large Codebases: A Complete Guide</a> - Molisha Shah explains how effective AI coding assistants for large codebases need to understand entire repositories and architectural patterns, not just provide simple autocomplete functionality.</p><p><a href="https://simonwillison.net/2025/Sep/30/designing-agentic-loops/">Designing agentic loops</a> - <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Simon Willison&quot;,&quot;id&quot;:5753967,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5a30d45c-fcba-407a-bebf-96f51a8944a4_48x48.jpeg&quot;,&quot;uuid&quot;:&quot;777bae8d-d36b-4c20-88c2-80c7ddf75b0d&quot;}" data-component-name="MentionToDOM"></span> explains how to maximize the potential of coding agents like Claude Code and Codex CLI by designing effective agentic loops that enable these AI tools to iterate toward solutions.</p><p><a href="https://simonw.substack.com/p/embracing-the-parallel-coding-agent">Embracing the parallel coding agent lifestyle</a> - Simon Willison: Developer&#8217;s shift toward using multiple AI coding assistants at once.</p><p>&#128293; <a href="https://blog.fsck.com/2025/10/05/how-im-using-coding-agents-in-september-2025/">How I&#8217;m using coding agents in September, 2025</a> - Developer&#8217;s workflow using Claude Code with git worktrees for parallel project management.</p><p><a href="https://addyo.substack.com/p/vibe-coding-is-not-the-same-as-ai">Vibe coding is not the same as AI-Assisted engineering.</a> - <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Addy Osmani&quot;,&quot;id&quot;:11623675,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cee7ba66-e656-4450-a0ed-c951c27ee228_1080x1080.jpeg&quot;,&quot;uuid&quot;:&quot;43241d4f-b9b8-411e-8e5a-7a3fef11f77d&quot;}" data-component-name="MentionToDOM"></span>  clarifies the critical distinction between casual &#8220;vibe coding&#8221; and professional &#8220;AI-assisted engineering,&#8221; emphasizing that conflating these approaches risks devaluing engineering discipline and misleading newcomers about production software requirements.</p><p><a href="https://tidyfirst.substack.com/p/beyond-the-ide">Beyond the IDE</a> - <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Kent Beck&quot;,&quot;id&quot;:24333739,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F000da410-0ed6-4a25-80b1-6a46e964ae0b_242x242.jpeg&quot;,&quot;uuid&quot;:&quot;b210ce59-5a8a-4da4-bbe0-fe88a5d56a92&quot;}" data-component-name="MentionToDOM"></span> explores programming&#8217;s evolution from hardware to AI-assisted environments.</p><p><a href="https://medium.com/nick-tune-tech-strategy-blog/reverse-engineering-your-software-architecture-with-claude-code-to-help-claude-code-1746a7b941bc">Reverse Engineering your Software Architecture with Claude Code to Help Claude Code</a> - Nick Tune: Claude Code works best when it understands your system&#8217;s full functionality.</p><p><a href="https://thoughtworks.medium.com/beyond-vibe-coding-how-ai-can-transform-pull-requests-afef51eae137">Beyond vibe coding: How AI can transform pull requests</a> - Thoughtworks: Enterprise coding needs more than AI prompts due to regulatory and legacy constraints.</p><p><a href="https://ainativedev.io/news/exploring-cursor-windsurf-and-copilot-with-gpt-5">Exploring Cursor, Windsurf and Copilot with GPT-5 </a>  - Comparative analysis of GPT-5 coding tools across different development scenarios.</p><p><a href="https://ainativedev.io/news/the-rule-maker-pattern">The Rule Maker Pattern: Creating Deterministic Execution with AI Probabilistic Generation</a> - Guy Podjarny explains how developers can establish clear rules and guidelines to transform AI&#8217;s unpredictable outputs into reliable, deterministic execution for more consistent results.</p><p><a href="https://newsletter.pragmaticengineer.com/p/how-tech-companies-measure-the-impact-of-ai">How tech companies measure the impact of AI on software development</a> - Orosz: Companies tracking whether AI coding tools justify their increasing costs.</p><p><a href="https://www.latent.space/p/gpt5-codex">How GPT5 + Codex took over Agentic Coding &#8212; ft. Greg Brockman, OpenAI</a> - OpenAI&#8217;s GPT-5-Codex disrupts Anthropic&#8217;s coding dominance.</p><h2><strong>&#128240; Long-Form Reads</strong></h2><p>&#128293;&#128293;&#128293; <a href="https://medium.com/@springrod/context-engineering-needs-domain-understanding-b4387e8e4bf8">Context Engineering Needs Domain Understanding</a> - Rod Johnson: Context engineering replaces prompt engineering with more precision.</p><p>&#128293; <a href="https://maxleiter.com/blog/rewrite-your-prompts">You should be rewriting your prompts</a> - Max Leiter: Different LLMs require different prompting approaches for best results.</p><p><a href="https://icepanel.io/blog/2025-08-18-comparison-llms-for-creating-software-architecture-diagrams/">Comparison - LLMs for Creating Software Architecture Diagrams</a> -  Testing if AI can create architecture diagrams but not replace architects.</p><p><a href="https://www.oneusefulthing.org/p/against-brain-damage">Against &#8220;Brain Damage&#8221;</a> - <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Ethan Mollick&quot;,&quot;id&quot;:846835,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c05cdbc-40fd-459b-915d-f8bc8ac8bf01_3509x5263.jpeg&quot;,&quot;uuid&quot;:&quot;78863640-5af4-4685-a8da-a6b76c8e217d&quot;}" data-component-name="MentionToDOM"></span>  debunks fears that AI harms cognition, suggesting productive AI use instead.</p><p><a href="https://simonw.substack.com/p/gpt-5-key-characteristics-pricing">GPT-5: Key characteristics, pricing and model card</a> - <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Simon Willison&quot;,&quot;id&quot;:5753967,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5a30d45c-fcba-407a-bebf-96f51a8944a4_48x48.jpeg&quot;,&quot;uuid&quot;:&quot;ac08d6b1-8e1e-4ac2-ae24-5cdd2c225625&quot;}" data-component-name="MentionToDOM"></span>: Brief notes on OpenAI&#8217;s new models and ChatGPT features.</p><p><a href="https://www.coderabbit.ai/blog/the-art-and-science-of-context-engineering">The art and science of context engineering</a> - CodeRabbit examines how effective AI code review tools require sophisticated context engineering to understand specific codebases deeply rather than simply pattern-matching against general rules.</p><p>&#128293;&#128293;&#128293; <a href="https://magazine.sebastianraschka.com/p/from-gpt-2-to-gpt-oss-analyzing-the">From GPT-2 to gpt-oss: Analyzing the Architectural Advances</a> - Technical breakdown of OpenAI&#8217;s new open-weight models and their architectural improvements.</p><p><a href="https://www.meta.com/superintelligence/?utm_source=substack&amp;utm_medium=email">Superintelligence</a> - Meta&#8217;s roadmap for developing safe, advanced AI systems beyond human intelligence.</p><p><a href="https://www.promptmonitor.io/blog/how-to-get-brand-mentioned-in-ai">10 Proven Ways to Get Your Brand Mentioned in AI Answers</a> - Strategies for brand visibility in AI responses through quality content placement.</p><p><a href="https://martinfowler.com/articles/pushing-ai-autonomy.html">How far can we push AI autonomy in code generation?</a> - B&#246;ckeler: AI can build simple apps but still requires human supervision.</p><p><a href="https://jaxlondon.com/blog/data-machine-learning/mastering-mcp-server-with-spring-boot-and-ai/">Mastering MCP Server with Spring Boot &amp; AI</a> -  Standardized protocol for AI model-application communication.</p><p><a href="https://simonw.substack.com/p/prompt-injections-as-far-as-the-eye">Prompt injections as far as the eye can see</a> - Researcher documents daily AI prompt injection vulnerabilities across multiple tools.</p><p><a href="https://www.reillywood.com/blog/apis-dont-make-good-mcp-tools/">APIs don&#8217;t make good MCP tools</a> - Reilly Wood explains why automatically converting existing APIs into Model Context Protocol tools often works poorly due to context window limitations and the fact that web APIs weren&#8217;t designed with these constraints in mind.</p><p><a href="https://medium.com/@elliotgraebert/agentic-ai-has-changed-my-career-2c6e3dd29708">Agentic AI has changed my career. I don&#8217;t write code&#8230;</a> - Elliot Graebert: Manager who stopped coding after early career promotion.</p><p><a href="https://arxiv.org/abs/2411.15399">Less is More: Optimizing Function Calling for LLM Execution on Edge Devices</a> -  Streamlining LLM function calls for better edge device performance.</p><p><a href="https://giansegato.com/essays/probabilistic-era">Building AI Products In The Probabilistic Era</a> - AI systems work in ways we can&#8217;t fully predict or understand.</p><p><a href="https://www.growthunhinged.com/p/your-next-job-will-require-ai-skills">Your next job will require AI skills</a> - <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Kyle Poyar&quot;,&quot;id&quot;:3477063,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!ySdz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6176aa-0699-4dfc-af3b-561d987c6632_3600x2401.jpeg&quot;,&quot;uuid&quot;:&quot;b3c3d993-7cc9-4de2-ab06-87aeb2b62265&quot;}" data-component-name="MentionToDOM"></span> : AI fluency becoming essential across all job functions.</p><p><a href="https://reeganalward.com/master-the-blueprint-llm-prompts-for-perfect-product-requirements-documents-prd-192b23835462">Master the Blueprint: LLM Prompts for Perfect  PRD</a>s - Alward shares template for creating LLM-generated PRDs optimized for coding agents.</p><p><a href="https://medium.com/@sean.shoffstall/revolutionizing-product-development-how-ai-is-transforming-the-prd-process-4dbb66cba77d">How AI is Transforming the PRD Process</a> - Sean Shoffstall reflects on how AI tools are revolutionizing product requirements documents, addressing the longstanding problems of traditional PRDs that tend to be either too vague or overly detailed.</p><p><a href="https://mustafakapadia.substack.com/p/writing-product-requirements-with">Writing product requirements with AI</a> - Kapadia examines why PMs struggle with requirements documentation and AI limitations.</p><p><a href="https://arxiv.org/html/2404.17842v1">Using LLMs in Software Requirements Specifications: An Empirical Evaluation</a> - Study comparing LLMs to humans in creating software requirement documents.</p><p><a href="https://lukebechtel.com/blog/vibe-speccing">Vibe Specs: Vibe Coding That Actually Works</a> - Luke Bechtel advocates for making AI write requirements before code, arguing this 5-minute investment saves hours of confusion and improves productivity.</p><p><a href="https://booking.ai/llm-evaluation-practical-tips-at-booking-com-1b038a0d6662">LLM Evaluation: Practical Tips at Booking.com</a> - George Chouliaras shares Booking.com&#8217;s methods for evaluating generative AI applications.</p><p><a href="https://martinfowler.com/articles/exploring-gen-ai/to-vibe-or-not-vibe.html">To vibe or not to vibe</a> - Birgitta B&#246;ckeler examines the nuanced debate around AI-generated code review, challenging binary perspectives and suggesting that the appropriate level of review depends on various contextual factors.</p><p><a href="https://brooker.co.za/blog/2025/08/12/llms-as-components.html">LLMs as Parts of Systems - Marc&#8217;s Blog</a> - Systems built with LLMs matter more than LLMs&#8217; theoretical capabilities alone.</p><p><a href="https://alexchesser.medium.com/attention-is-the-new-big-o-9c68e1ae9b27">Attention Is the New Big-O</a> - Alex Chesser explains how LLMs process text differently than humans, emphasizing that structural choices in prompts can impact results more significantly than word choice.</p><p><a href="https://www.dbreunig.com/2025/06/10/let-the-model-write-the-prompt.html">Let the Model Write the Prompt</a> - Drew Breunig demonstrates how DSPy can be used to define and optimize LLM tasks, using a geospatial conflation problem as an example to show how the framework simplifies, improves, and future-proofs AI implementations.</p><p><a href="https://www.koi.ai/blog/postmark-mcp-npm-malicious-backdoor-email-theft">First Malicious MCP in the Wild: The Postmark Backdoor That&#8217;s Stealing Your Emails </a>- Koi reveals details about the first discovered malicious Model Composition Protocol (MCP) backdoor in the Postmark npm package that steals users&#8217; email data.</p><p><a href="https://mbleigh.dev/posts/context-engineering-with-links/">Context engineering is sleeping on the humble hyperlink </a>- the overlooked solution for efficient LLM context management.</p><p>Agentic Lessons learn after 300 agents - <a href="https://www.saiyashwanth.com/ai_agent_lessons">Sai Yashwanth</a> - I have built around 300 agents, worked at 5 startups. Here&#8217;s what I learnt about AI Agent</p><p><a href="https://theengineeringmanager.substack.com/p/leadership-co-processing-with-llms">Leadership co-processing with LLMs</a> - James Stanier examines how large language models are transforming management practices through techniques for prioritization, communication, and cognitive offloading.</p><h2><strong>&#127897;&#65039; YouTube &amp; Podcasts</strong></h2><p>&#128293;<a href="https://www.ycombinator.com/library/MN-how-to-get-the-most-out-of-vibe-coding">How To Get The Most Out Of Vibe Coding</a> - Guide to using AI as a coding partner to build faster by Y Combinator.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!43ob!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!43ob!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.png 424w, https://substackcdn.com/image/fetch/$s_!43ob!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.png 848w, https://substackcdn.com/image/fetch/$s_!43ob!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.png 1272w, https://substackcdn.com/image/fetch/$s_!43ob!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!43ob!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.png" width="742" height="866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:866,&quot;width&quot;:742,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:477936,&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/177761840?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.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_!43ob!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.png 424w, https://substackcdn.com/image/fetch/$s_!43ob!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.png 848w, https://substackcdn.com/image/fetch/$s_!43ob!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.png 1272w, https://substackcdn.com/image/fetch/$s_!43ob!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b686bb4-cecf-43a6-b03a-d027ef048aef_742x866.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"><a href="https://www.youtube.com/watch?v=ysPbXH0LpIE">Prompting 101</a></figcaption></figure></div><p>&#128293;&#128293;&#128293; <a href="https://www.youtube.com/watch?v=ysPbXH0LpIE">Prompting 101 | Code w/ Claude</a> - Hannah Moran and Christian Ryan from Anthropic present fundamental prompting techniques for effectively working with Claude, covering essential strategies developers can use to improve AI interactions.</p><p><a href="https://www.youtube.com/watch?v=qdmxApz3EJI">On Engineering AI Systems that Endure The Bitter Lesson </a>- Building AI systems that last through principled engineering approaches.</p><h2><strong>&#128478;&#65039; News and Social</strong></h2><p><a href="https://openai.com/index/introducing-gpt-oss/">Introducing gpt-oss </a>- OpenAI releases Apache-licensed reasoning models optimized for consumer hardware.</p><p><a href="https://www.anthropic.com/engineering/building-agents-with-the-claude-agent-sdk">Building agents with the Claude Agent SDK</a> - Anthropic rebrands Claude Code SDK to reflect its broader agent capabilities beyond coding.</p><p><a href="https://x.com/GoogleLabs/status/1948430715432976802">Google Labs introduces Opal</a> -  a new way to help you build and share AI mini-apps by linking together prompts, models, and tools&#8212; all while using simple, natural language</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fzWa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fzWa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fzWa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fzWa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fzWa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fzWa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.jpeg" width="1125" height="1500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1500,&quot;width&quot;:1125,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Principles of Building AI Agents&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="Principles of Building AI Agents" title="Principles of Building AI Agents" srcset="https://substackcdn.com/image/fetch/$s_!fzWa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fzWa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fzWa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fzWa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacef76-0d06-4f9e-b98e-0482cdc0d47f_1125x1500.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">https://x.com/PawelHuryn/status/1943611413320093880</figcaption></figure></div><p><a href="https://x.com/PawelHuryn/status/1943611413320093880">10 Principles of Building AI Agents:</a> -  by Pawel Huryn.</p><p><a href="https://www.testingcatalog.com/openai-experiments-with-new-study-together-tool-on-chatgpt/">OpenAI experiments with new &#8220;Study together&#8221; tool on ChatGPT</a> - ChatGPT&#8217;s new feature creates interactive learning experiences with guided study sessions.</p><p><a href="https://x.com/AnthropicAI/status/1925926102725202163">THE WAY OF CODE</a> - a project by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Rick Rubin&quot;,&quot;id&quot;:322455116,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/808958e5-0d43-498a-8c95-12b9e6dad6de_1874x1874.jpeg&quot;,&quot;uuid&quot;:&quot;59358e3b-c622-4752-916a-5518519f8c3f&quot;}" data-component-name="MentionToDOM"></span> n in collaboration with Anthropic:</p><p><a href="https://ainativedev.io/news/tessl-launches-spec-driven-framework-and-registry">Tessl launches spec-driven development tools for reliable AI coding agents </a> </p><p><a href="https://x.com/akshay_pachaar/status/1969379375582945474">8 RAG architectures for AI engineers</a></p><p><a href="https://x.com/DataChaz/status/1969281035562303676">Google&#8217;s MCP Toolbox for Databases is now open source! &#128293;</a> </p><p><a href="https://github.com/ghostty-org/ghostty/pull/8289">AI tooling must be disclosed for contributions </a> - AI disclosure requirement for contributions to ghostty-org.</p><h2><strong>&#128736;&#65039; Tech &amp; Tools</strong></h2><p><a href="https://ainativedev.io/news/the-rise-of-agents-md-an-open-standard-and-single-source-of-truth-for-ai-coding-agents">Agents.md: an open standard for AI coding agents</a> - A file standard for consistent AI assistant instructions across projects.</p><p><a href="https://github.com/openai/gpt-oss?utm_source=ai-native-dev-newsletter">GitHub - openai/gpt-oss: gpt-oss-120b and gpt-oss-20b</a> - Open-weight models for reasoning and agentic tasks.</p><p><a href="https://opencode.ai/">OpenCode | The AI coding agent built for the terminal</a> - Open-source AI coding assistant for terminal that respects privacy.</p><p><a href="https://huggingface.co/spaces/galileo-ai/agent-leaderboard">Agent Leaderboard - a Hugging Face Space by galileo-ai</a> - Comparative tool for AI agent performance with filterable metrics.</p><p><a href="https://github.com/traceloop/openllmetry">GitHub - traceloop/openllmetry</a> - traceloop - OpenTelemetry-based observability for LLM applications.</p><p><a href="https://github.com/terryso/claude-auto-resume">GitHub - terryso/claude-auto-resume</a> - Script that auto-resumes Claude CLI tasks after usage limits expire.</p><p><a href="https://github.com/f/awesome-chatgpt-prompts">GitHub - f/awesome-chatgpt-prompts</a> - A curated collection of prompts designed for ChatGPT and other LLM tools to help users get better responses from AI language models.</p><p><a href="https://kilocode.ai/">Kilo Code - coding agent for VS Code and JetBrains</a> - AI coding assistant with project management capabilities serving 500k+ users.</p><p><a href="https://github.com/marcelsud/spec-driven-agentic-development">GitHub - marcelsud/spec-driven-agentic-development</a> - Specification-driven development framework for AI-assisted software building.</p><p><a href="https://github.com/charmbracelet/crush">GitHub - charmbracelet/crush: &#128152;</a>  - Terminal-based AI coding assistant for your workflow.</p><p><a href="https://github.com/pimzino/claude-code-spec-workflow?tab=readme-ov-file">GitHub - Pimzino/claude-code-spec-workflow</a> - Structured AI-powered development workflows for features and bug fixes.</p><p><a href="https://github.com/docker/cagent">GitHub - docker/cagent: Agent Builder and Runtime by Docker</a> - AI agent orchestration tool for building collaborative virtual expert teams.</p><p><a href="https://github.com/kirodotdev/Kiro">GitHub - kirodotdev/Kiro: Kiro is an agentic IDE that works alongside you</a> - AI-powered IDE that understands your codebase and automates development tasks.</p><p><a href="https://gist.github.com/Dowwie/151d8efea738ea486ddec9208ddb3a19">Product requirement document generation using LLM task oriented dialogue &#183; GitHub</a> - LLM-powered PRD generation through guided dialogue.</p><p><a href="https://github.com/davidkimai/Context-Engineering">GitHub - davidkimai/Context-Engineering</a>  - First-principles handbook for AI context design and optimization.</p><p><a href="https://github.com/ashishpatel26/500-AI-Agents-Projects">GitHub - ashishpatel26/500-AI-Agents-Projects</a> - Curated collection of AI agent applications with implementation resources.</p><p><a href="https://github.com/GoogleCloudPlatform/kubectl-ai">GitHub - GoogleCloudPlatform/kubectl-ai: AI powered Kubernetes Assistant</a> - AI-powered tool that simplifies Kubernetes management.</p><p><a href="https://github.com/hesreallyhim/awesome-claude-code">GitHub - hesreallyhim/awesome-claude-code</a> - A curated resource list for maximizing Claude Code&#8217;s capabilities.</p><p><a href="https://bloomberry.com/coding-tools.html">AI Coding Tools: Install Trends (based on Visual Studio Code)</a> - Visual tracking of AI coding extension popularity in VS Code.</p><p><a href="https://github.com/invariantlabs-ai/mcp-scan/">GitHub - invariantlabs-ai/mcp-scan: Constrain, log and scan your MCP connections </a>- Security scanner for MCP servers detecting vulnerabilities across various configurations.</p><h2><strong>&#128218; Learning Picks</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_!u5Ad!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u5Ad!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!u5Ad!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!u5Ad!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!u5Ad!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u5Ad!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.jpeg" width="728" height="955.3805774278215" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1000,&quot;width&quot;:762,&quot;resizeWidth&quot;:728,&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;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!u5Ad!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!u5Ad!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!u5Ad!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!u5Ad!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F921119d1-a4f9-4769-a906-e7c8feabd99a_762x1000.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">https://allendowney.github.io/ThinkPython/</figcaption></figure></div><p><a href="https://allendowney.github.io/ThinkPython/">Think Python</a> - Free, beginner-friendly Python programming book with interactive Jupyter notebooks.</p><p><a href="https://github.com/Asabeneh/30-Days-Of-Python">GitHub - Asabeneh/30-Days-Of-Python: 30 days of Python programming challenge</a> - Self-paced Python learning challenge with daily exercises.</p><p><a href="https://learn.microsoft.com/en-us/shows/generative-ai-for-beginners/">Generative AI for Beginner</a>s - Microsoft&#8217;s 18-lesson course on building Generative AI applications.</p><p><a href="https://github.com/microsoft/ai-agents-for-beginners">GitHub - microsoft/ai-agents-for-beginners: 12 Lessons to Get Started Building AI Agents</a> - Beginner-friendly AI agent development course .</p><h2><strong>&#127917; AI Humor</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_!ApyU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F687f9d65-337b-47be-bc32-21c58221d344_439x512.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ApyU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F687f9d65-337b-47be-bc32-21c58221d344_439x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ApyU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F687f9d65-337b-47be-bc32-21c58221d344_439x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ApyU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F687f9d65-337b-47be-bc32-21c58221d344_439x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ApyU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F687f9d65-337b-47be-bc32-21c58221d344_439x512.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ApyU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F687f9d65-337b-47be-bc32-21c58221d344_439x512.jpeg" width="439" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/687f9d65-337b-47be-bc32-21c58221d344_439x512.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:439,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;text&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="text" title="text" srcset="https://substackcdn.com/image/fetch/$s_!ApyU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F687f9d65-337b-47be-bc32-21c58221d344_439x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ApyU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F687f9d65-337b-47be-bc32-21c58221d344_439x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ApyU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F687f9d65-337b-47be-bc32-21c58221d344_439x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ApyU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F687f9d65-337b-47be-bc32-21c58221d344_439x512.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">Source: https://www.linkedin.com/feed/update/urn:li:activity:7373951080134746113/</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/p/generative-programmer-issue-16?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/generative-programmer-issue-16?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2>&#128075; See You Next Time</h2><p>Thanks for reading <em>Generative Programmer</em>! &#128591;  If you like the content please support my newsletter by subscribing and sharing with your network: <a href="https://twitter.com/intent/tweet?text=Checkout%20this%20newsletter%20with%20the%20latest%20AI%20news%20for%20developers%3A%20https%3A%2F%2Fgenerativeprogrammer.com%2F">X</a> &#183; <a href="https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgenerativeprogrammer.com%2F&amp;summary=Checkout%20this%20newsletter%20with%20the%20latest%20AI%20news%20for%20developers">LinkedIn</a> &#183; <a href="https://bsky.app/intent/compose?text=Checkout%20this%20newsletter%20with%20the%20latest%20AI%20news%20for%20developers%3A%20https%3A%2F%2Fgenerativeprogrammer.com%2F">BlueSky</a> &#183; <a href="mailto:?subject=Check%20out%20this%20newsletter&amp;body=Checkout%20this%20newsletter%20with%20the%20latest%20AI%20news%20for%20developers%3A%20https%3A%2F%2Fgenerativeprogrammer.com%2F">Email</a>. Have a great rest of the week! </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://generativeprogrammer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://generativeprogrammer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>