<?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 AI Thinker]]></title><description><![CDATA[Go from product manager to AI-native builder. Get the in-depth playbooks and real-world projects you need to build better products with AI.]]></description><link>https://www.theaithinker.com</link><image><url>https://substackcdn.com/image/fetch/$s_!s5nF!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37afd3e1-3442-4517-94cb-068668baf9ef_1024x1024.png</url><title>The AI Thinker</title><link>https://www.theaithinker.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 05 Nov 2026 08:26:24 GMT</lastBuildDate><atom:link href="https://www.theaithinker.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Adam Faik]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[adamfaik@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[adamfaik@substack.com]]></itunes:email><itunes:name><![CDATA[Adam Faik]]></itunes:name></itunes:owner><itunes:author><![CDATA[Adam Faik]]></itunes:author><googleplay:owner><![CDATA[adamfaik@substack.com]]></googleplay:owner><googleplay:email><![CDATA[adamfaik@substack.com]]></googleplay:email><googleplay:author><![CDATA[Adam Faik]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How to ship an app with a team of Grok Bots]]></title><description><![CDATA[Set up Grok Bot. Create a PM Bot, then add a designer and a tester. Turn your idea into a brief, and let the Bots build it, test it and put it live.]]></description><link>https://www.theaithinker.com/p/how-to-ship-an-app-with-a-team-of</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-ship-an-app-with-a-team-of</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 02 Nov 2026 12:03:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3e6910dd-505f-4e4c-960f-3a05e2fb68a9_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Over three days, I ran a small product team from a chat window. A PM Bot wrote the brief and ran the project. A Design Bot chose the look. A QA Bot tested every version and reported what broke. Cursor&#8217;s coding agents wrote all the code. I sent the PM Bot 42 messages. <strong>Half of them just said yes, OK or done.</strong></p><p><strong>Let me show you the result first.</strong> It started with a habit. Lately, I&#8217;ve moved more and more of my work into Markdown files. They&#8217;re spread across many GitHub repos. And GitHub is a poor place to read them. You click through folders, one file at a time, and each file stands alone. My files aren&#8217;t always well organized either. <strong>The knowledge was all there, but hard to explore.</strong></p><p>So I imagined a simple app. You connect one of your GitHub repos. Then you read its Markdown files like the pages of a book. A file tree on the left takes you to any file in one click. On the right, the app suggests related files, even when they don&#8217;t link to each other. That&#8217;s how you find links between notes you never connected yourself. A map view shows how all the files connect. And you keep private notes on the side, without changing anything in GitHub.</p><p>My Design Bot named it Quiet Desk. Here it is, live, on a public repo of design skills.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9jYH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9jYH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png 424w, https://substackcdn.com/image/fetch/$s_!9jYH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png 848w, https://substackcdn.com/image/fetch/$s_!9jYH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png 1272w, https://substackcdn.com/image/fetch/$s_!9jYH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9jYH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png" width="1456" height="883" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:883,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1549987,&quot;alt&quot;:&quot;Chrome showing Quiet Desk at quiet-desk-adam.onrender.com, with a red \&quot;Dangerous\&quot; label before the address. The app has a warm paper background. The top bar shows the repo bergside/awesome-design-skills with a Refresh link, a Read or Map switch and the user adamfaik. The left rail lists 135 Markdown files in a tree with a search box. The center shows the page \&quot;Awesome Design Skills\&quot; in a serif font with the project's banner. The right rail, headed Related and \&quot;Suggested from shared topics. Not links in the file.\&quot;, lists six related files with their shared topics, above a Notes box that reads \&quot;A note only you can see. It stays in Quiet Desk and is never written to GitHub.\&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chrome showing Quiet Desk at quiet-desk-adam.onrender.com, with a red &quot;Dangerous&quot; label before the address. The app has a warm paper background. The top bar shows the repo bergside/awesome-design-skills with a Refresh link, a Read or Map switch and the user adamfaik. The left rail lists 135 Markdown files in a tree with a search box. The center shows the page &quot;Awesome Design Skills&quot; in a serif font with the project's banner. The right rail, headed Related and &quot;Suggested from shared topics. Not links in the file.&quot;, lists six related files with their shared topics, above a Notes box that reads &quot;A note only you can see. It stays in Quiet Desk and is never written to GitHub.&quot;" title="Chrome showing Quiet Desk at quiet-desk-adam.onrender.com, with a red &quot;Dangerous&quot; label before the address. The app has a warm paper background. The top bar shows the repo bergside/awesome-design-skills with a Refresh link, a Read or Map switch and the user adamfaik. The left rail lists 135 Markdown files in a tree with a search box. The center shows the page &quot;Awesome Design Skills&quot; in a serif font with the project's banner. The right rail, headed Related and &quot;Suggested from shared topics. Not links in the file.&quot;, lists six related files with their shared topics, above a Notes box that reads &quot;A note only you can see. It stays in Quiet Desk and is never written to GitHub.&quot;" srcset="https://substackcdn.com/image/fetch/$s_!9jYH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png 424w, https://substackcdn.com/image/fetch/$s_!9jYH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png 848w, https://substackcdn.com/image/fetch/$s_!9jYH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png 1272w, https://substackcdn.com/image/fetch/$s_!9jYH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57603db8-8e4e-466f-b5e1-33c3d2eaff6c_3248x1970.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Quiet Desk, live, on bergside's public <a href="https://github.com/bergside/awesome-design-skills">awesome-design-skills</a> repo. The red label is a Chrome false alarm.</figcaption></figure></div><p>Switch from Read to Map, and the repo turns into a map of ideas. Each dot is a Markdown file. A solid line joins two files that link to each other. A dotted line joins two files the app finds related. This repo has no links between its files at all, yet the map shows 248 related pairs. <strong>Those dotted lines are the connections I&#8217;d never have found by browsing GitHub.</strong> Click a dot to open its page, or type a name to highlight 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_!B41e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B41e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png 424w, https://substackcdn.com/image/fetch/$s_!B41e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png 848w, https://substackcdn.com/image/fetch/$s_!B41e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png 1272w, https://substackcdn.com/image/fetch/$s_!B41e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B41e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png" width="1456" height="883" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:883,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1167902,&quot;alt&quot;:&quot;Chrome showing Quiet Desk at quiet-desk-adam.onrender.com with the Map view selected, and a red \&quot;Dangerous\&quot; label before the address. On a warm paper background, about a hundred black dots form a loose circle, joined by faint dotted lines. Labels name some of the files, such as Professional, Paper, Premium, Modern, Minimal, Geometric, Vibrant, Artistic and Editorial Design System Skill, plus several files titled Overview. \&quot;Spacious Design System Skill (Universal)\&quot; is highlighted in blue. On the left, a \&quot;Highlight a page\&quot; box sits above a legend: Linked, a solid line; Related, a dotted line; \&quot;Drag to pan. Scroll to zoom. Click a page.\&quot;; and \&quot;0 links &#183; 248 related\&quot;. Zoom buttons and Fit sit at the bottom right.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chrome showing Quiet Desk at quiet-desk-adam.onrender.com with the Map view selected, and a red &quot;Dangerous&quot; label before the address. On a warm paper background, about a hundred black dots form a loose circle, joined by faint dotted lines. Labels name some of the files, such as Professional, Paper, Premium, Modern, Minimal, Geometric, Vibrant, Artistic and Editorial Design System Skill, plus several files titled Overview. &quot;Spacious Design System Skill (Universal)&quot; is highlighted in blue. On the left, a &quot;Highlight a page&quot; box sits above a legend: Linked, a solid line; Related, a dotted line; &quot;Drag to pan. Scroll to zoom. Click a page.&quot;; and &quot;0 links &#183; 248 related&quot;. Zoom buttons and Fit sit at the bottom right." title="Chrome showing Quiet Desk at quiet-desk-adam.onrender.com with the Map view selected, and a red &quot;Dangerous&quot; label before the address. On a warm paper background, about a hundred black dots form a loose circle, joined by faint dotted lines. Labels name some of the files, such as Professional, Paper, Premium, Modern, Minimal, Geometric, Vibrant, Artistic and Editorial Design System Skill, plus several files titled Overview. &quot;Spacious Design System Skill (Universal)&quot; is highlighted in blue. On the left, a &quot;Highlight a page&quot; box sits above a legend: Linked, a solid line; Related, a dotted line; &quot;Drag to pan. Scroll to zoom. Click a page.&quot;; and &quot;0 links &#183; 248 related&quot;. Zoom buttons and Fit sit at the bottom right." srcset="https://substackcdn.com/image/fetch/$s_!B41e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png 424w, https://substackcdn.com/image/fetch/$s_!B41e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png 848w, https://substackcdn.com/image/fetch/$s_!B41e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.png 1272w, https://substackcdn.com/image/fetch/$s_!B41e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa5dc3b9-7978-4b89-baf6-516c772bcf47_3248x1970.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Map view on the same repo: each dot is a file, each dotted line a suggested link.</figcaption></figure></div><p>It went live on the third evening. <strong>I spent a few hours on it myself, in short sessions between other things.</strong> The Bots and the coding agents worked far longer, often at night while I slept. From sending my idea to the first build starting, it took 20 minutes.</p><p>So what is <a href="https://x.ai/bot">Grok Bot</a>? It&#8217;s an app from SpaceXAI, the team behind the Grok models. It lets you work with a team of AI agents. It launched in August 2026, on Mac, Windows, Linux and phones. That same month, SpaceX <a href="https://thenextweb.com/news/spacex-cursor-acquisition-completed-gpu-fleet">bought Cursor</a>, the AI code editor. That&#8217;s why you sign in with a Cursor account. You create Bots and give each one a name and a job. Then you chat with them like colleagues. They work on a computer in the cloud, so they keep going with your laptop closed. <strong>When a Bot needs code, it hands the job to one of Cursor&#8217;s coding agents.</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_!wUkV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wUkV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!wUkV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!wUkV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!wUkV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!wUkV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:951422,&quot;alt&quot;:&quot;The Grok Bot desktop app in dark mode. The left sidebar shows the main Grok Bot at the top, then three Bots: Design Bot, busy \&quot;Pulling the Notion brief\&quot;, PM Bot and QA Bot, with a Connect apps button at the bottom. The chat with PM Bot shows its last question about judging related files, the author's reply \&quot;OK for you suggestion.\&quot;, and PM Bot's note that the brief is finished, with an offer to ask Design Bot for a design direction. The author answers \&quot;Yes please go ahead.\&quot;, a small label reads \&quot;Messaged Design Bot\&quot;, and PM Bot confirms it sent Design Bot the brief.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot desktop app in dark mode. The left sidebar shows the main Grok Bot at the top, then three Bots: Design Bot, busy &quot;Pulling the Notion brief&quot;, PM Bot and QA Bot, with a Connect apps button at the bottom. The chat with PM Bot shows its last question about judging related files, the author's reply &quot;OK for you suggestion.&quot;, and PM Bot's note that the brief is finished, with an offer to ask Design Bot for a design direction. The author answers &quot;Yes please go ahead.&quot;, a small label reads &quot;Messaged Design Bot&quot;, and PM Bot confirms it sent Design Bot the brief." title="The Grok Bot desktop app in dark mode. The left sidebar shows the main Grok Bot at the top, then three Bots: Design Bot, busy &quot;Pulling the Notion brief&quot;, PM Bot and QA Bot, with a Connect apps button at the bottom. The chat with PM Bot shows its last question about judging related files, the author's reply &quot;OK for you suggestion.&quot;, and PM Bot's note that the brief is finished, with an offer to ask Design Bot for a design direction. The author answers &quot;Yes please go ahead.&quot;, a small label reads &quot;Messaged Design Bot&quot;, and PM Bot confirms it sent Design Bot the brief." srcset="https://substackcdn.com/image/fetch/$s_!wUkV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!wUkV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!wUkV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!wUkV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93793544-de2b-4aa2-abfd-f2d030425995_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Grok Bot on my Mac. My three Bots sit on the left, and PM Bot is messaging Design Bot.</figcaption></figure></div><p>Using it feels like a WhatsApp group with a few fast, chatty colleagues. They reply quickly, even in the middle of a task. Their messages are short and to the point, sometimes too short. Once, PM Bot asked whether my repo was public or private. I replied <em>&#8220;I don&#8217;t understand your question.&#8221;</em> It explained in plain words, and we moved on. Some actions were surprisingly quick. Design Bot sent a full design direction a minute after it was asked. Others were slow, like the first build, which took over two hours. <strong>And watching the Bots message each other to move your project forward is fun.</strong></p><p>What does it cost? The cheapest plan with Grok Bot is Premium on <a href="https://x.ai/news/x-subscription">The X Subscription</a>, at $30 a month. The $8 Plus plan <a href="https://x.ai/pricing">includes Cursor</a>, but not Grok Bot. If you already pay for an older Cursor plan, you keep access. <strong>One weekly pool of usage covers Cursor, Grok Bot and the Grok apps.</strong> Every Bot reply draws on it. My whole run fit inside Premium, and the hosting was free.</p><p>This post has four parts.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kefx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kefx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!kefx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!kefx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!kefx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!kefx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:161219,&quot;alt&quot;:&quot;Four parts in a row, linked by plain arrows. 1 The seven steps, three Bots drawn as black balls with two white eyes, around a laptop. 2 The verdict, a balance scale with a clock on one side and a coin on the other. 3 Everyday PM work, a desk with several Bots, each beside one object: a document, a chat bubble, a chart. 4 Under the hood, a car with its hood open over the engine.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Four parts in a row, linked by plain arrows. 1 The seven steps, three Bots drawn as black balls with two white eyes, around a laptop. 2 The verdict, a balance scale with a clock on one side and a coin on the other. 3 Everyday PM work, a desk with several Bots, each beside one object: a document, a chat bubble, a chart. 4 Under the hood, a car with its hood open over the engine." title="Four parts in a row, linked by plain arrows. 1 The seven steps, three Bots drawn as black balls with two white eyes, around a laptop. 2 The verdict, a balance scale with a clock on one side and a coin on the other. 3 Everyday PM work, a desk with several Bots, each beside one object: a document, a chat bubble, a chart. 4 Under the hood, a car with its hood open over the engine." srcset="https://substackcdn.com/image/fetch/$s_!kefx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!kefx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!kefx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!kefx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6913b0d9-6364-4ee8-8b22-9ffed51f2448_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><em>The seven steps.</em> Here&#8217;s how I set up three Bots, and how they took my idea live.</p></li><li><p><em>The verdict.</em> What the run cost me in time, tokens and money, and what a review of the code found.</p></li><li><p><em>Beyond prototypes.</em> My 20-plus Bots for everyday product work, and what other PMs hand to theirs.</p></li><li><p><em>Under the hood.</em> The questions I still had after weeks of use, from the model to what&#8217;s safe to connect.</p></li></ul><p>By the end, you&#8217;ll know how to take your own idea live with a team of Bots. You&#8217;ll also know what to watch along the way. <strong>You&#8217;ll have an app you can open on your phone, built while you did other things.</strong> The code Cursor&#8217;s agents wrote for my Bots is public at <a href="https://github.com/The-AI-Thinker/quiet-desk">The-AI-Thinker/quiet-desk</a>. Every source I used is listed at the end, under <em>Go further</em>.</p><p>Three hires, and no interviews. Let&#8217;s set up the desk.</p><div><hr></div><h2>Seven steps from idea to live app</h2><p>The first three steps build your team. The last four ship the app.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jlTe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jlTe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!jlTe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!jlTe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!jlTe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!jlTe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:191771,&quot;alt&quot;:&quot;Seven numbered steps in two rows linked by plain arrows. The first row, under a bracket labelled \&quot;Build your team\&quot;, holds 1 Set up, a laptop with a chat window; 2 PM Bot, a Bot drawn as a black ball with two white eyes, beside a clipboard; 3 Designer and tester, two Bots beside a pencil and a magnifying glass. The second row, under a bracket labelled \&quot;Ship it\&quot;, holds 4 Brief, a one-page document; 5 Build, a code window with a video play button; 6 Test and fix, a checklist with ticks and crosses; 7 Live, a globe with a web address.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Seven numbered steps in two rows linked by plain arrows. The first row, under a bracket labelled &quot;Build your team&quot;, holds 1 Set up, a laptop with a chat window; 2 PM Bot, a Bot drawn as a black ball with two white eyes, beside a clipboard; 3 Designer and tester, two Bots beside a pencil and a magnifying glass. The second row, under a bracket labelled &quot;Ship it&quot;, holds 4 Brief, a one-page document; 5 Build, a code window with a video play button; 6 Test and fix, a checklist with ticks and crosses; 7 Live, a globe with a web address." title="Seven numbered steps in two rows linked by plain arrows. The first row, under a bracket labelled &quot;Build your team&quot;, holds 1 Set up, a laptop with a chat window; 2 PM Bot, a Bot drawn as a black ball with two white eyes, beside a clipboard; 3 Designer and tester, two Bots beside a pencil and a magnifying glass. The second row, under a bracket labelled &quot;Ship it&quot;, holds 4 Brief, a one-page document; 5 Build, a code window with a video play button; 6 Test and fix, a checklist with ticks and crosses; 7 Live, a globe with a web address." srcset="https://substackcdn.com/image/fetch/$s_!jlTe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!jlTe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!jlTe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!jlTe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58dcfa95-4b78-4b32-86a5-4e3677a11977_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Step 1: Set up Grok Bot</h3><p>You set up Grok Bot once, and every new idea starts from the same app. It&#8217;s a desktop app, and a few of its settings live on Cursor&#8217;s website. <strong>Ten minutes here saves you usage later.</strong></p><p>You set it up in this order.</p><ol><li><p>Download Grok Bot from <a href="https://x.ai/bot">x.ai/bot</a>. It&#8217;s the app where you create your Bots and chat with them. Sign in with your Cursor account, since there&#8217;s no separate Grok Bot login.</p></li><li><p>Check that your plan includes Grok Bot. Premium does, and so do the older paid Cursor plans. Plus doesn&#8217;t.</p></li><li><p>Open <a href="https://cursor.com/dashboard">Cursor&#8217;s dashboard</a>, then <strong>Cloud Agents</strong>, then <strong>Default Model</strong>. Cloud Agents are Cursor&#8217;s coding agents, which your Bots start for each build. They use the model you pick here.</p></li><li><p>Keep Grok 4.7. A model from another provider <a href="https://cursor.com/docs/models-and-pricing">bills at its API list price</a> from the first request.</p></li><li><p>In the same menu, switch <strong>Fast</strong> off. It&#8217;s on by default and <a href="https://cursor.com/docs/models/grok-4-7">costs twice as much</a> per token.</p></li><li><p>Connect other apps only when a Bot asks for one. Every Bot can use every app you connect.</p></li></ol><p><strong>How I did it.</strong> I started on my old Cursor plan, Pro+, and switched to Premium during the run. Once it was over, I moved down to Plus. My coder ran on Grok 4.7 High, with Fast off. <strong>Speed wasn&#8217;t the bottleneck in my run. I was.</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_!ji-R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ji-R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png 424w, https://substackcdn.com/image/fetch/$s_!ji-R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png 848w, https://substackcdn.com/image/fetch/$s_!ji-R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png 1272w, https://substackcdn.com/image/fetch/$s_!ji-R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ji-R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png" width="1456" height="883" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:883,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:966360,&quot;alt&quot;:&quot;Chrome on Cursor's dashboard, on the Cloud Agents page, with a sidebar that lists sections such as Billing &amp; Invoices, Spending and Members. Settings for self-hosted machines and remote control are switched off. Under Preferences, the Default Model menu is open on Grok 4.7 High, listing Grok 4.6 High Fast, Claude Opus 5.5 Medium, Gemini 4 Argon Medium, Muse Wonder High and Claude Sonnet 5.5 High. A side panel shows Context 256K checked, Effort set to High, and a Fast switch turned off, with the tooltip \&quot;Significantly faster but consumes more usage\&quot;. Below, Create PRs is set to For Single Model Runs.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chrome on Cursor's dashboard, on the Cloud Agents page, with a sidebar that lists sections such as Billing &amp; Invoices, Spending and Members. Settings for self-hosted machines and remote control are switched off. Under Preferences, the Default Model menu is open on Grok 4.7 High, listing Grok 4.6 High Fast, Claude Opus 5.5 Medium, Gemini 4 Argon Medium, Muse Wonder High and Claude Sonnet 5.5 High. A side panel shows Context 256K checked, Effort set to High, and a Fast switch turned off, with the tooltip &quot;Significantly faster but consumes more usage&quot;. Below, Create PRs is set to For Single Model Runs." title="Chrome on Cursor's dashboard, on the Cloud Agents page, with a sidebar that lists sections such as Billing &amp; Invoices, Spending and Members. Settings for self-hosted machines and remote control are switched off. Under Preferences, the Default Model menu is open on Grok 4.7 High, listing Grok 4.6 High Fast, Claude Opus 5.5 Medium, Gemini 4 Argon Medium, Muse Wonder High and Claude Sonnet 5.5 High. A side panel shows Context 256K checked, Effort set to High, and a Fast switch turned off, with the tooltip &quot;Significantly faster but consumes more usage&quot;. Below, Create PRs is set to For Single Model Runs." srcset="https://substackcdn.com/image/fetch/$s_!ji-R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png 424w, https://substackcdn.com/image/fetch/$s_!ji-R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png 848w, https://substackcdn.com/image/fetch/$s_!ji-R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png 1272w, https://substackcdn.com/image/fetch/$s_!ji-R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F665894f2-f9e7-4475-b05f-3830d2dfa651_3248x1970.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The coder&#8217;s model lives on Cursor&#8217;s dashboard, not in Grok Bot. Fast stays off.</figcaption></figure></div><p>The desk is set. Now hire the one Bot you&#8217;ll talk to.</p><h3>Step 2: Create your PM Bot</h3><p>One Bot owns the outcome, and it&#8217;s the only Bot you talk to. SpaceXAI&#8217;s own docs say to <a href="https://docs.x.ai/grok-bot/bots">give one Bot ownership of an end-to-end outcome</a>. <strong>Your PM Bot asks the questions, writes the brief, briefs the others and reports back.</strong> A Bot is an AI teammate with a name and a job. You give it that job in the chat, then ask it to remember.</p><p>Creating it takes a minute.</p><ol><li><p>Click <strong>New</strong>, then <strong>Create new Bot</strong>, and name it <em>PM Bot</em>.</p></li><li><p>Send it a role like the one below, in a few lines, adapted to your idea.</p></li><li><p>End with <em>Remember this role</em>, so it saves the role to its memory.</p></li><li><p>If you want a hard stop on risky actions, open <strong>Settings</strong>, then <strong>General</strong>, then <strong>Auto-review</strong>. Add <em>Ask first</em> rules for merging, deploying and publishing.</p></li></ol><p>That last step matters because a rule in a Bot&#8217;s memory only guides it. Cursor&#8217;s team, on its forum, calls <em>Ask first</em> <a href="https://forum.cursor.com/t/175615">the only setting that actually pauses an action</a>.</p><p><strong>How I did it.</strong> I wrote the three role prompts before opening Grok Bot, and sent them as written. Here&#8217;s the PM&#8217;s.</p><blockquote><p>From now on, you are my PM Bot. Remember this role.</p><p>Your job: take one product idea from me to a live app.</p><ul><li><p>You own the outcome and you&#8217;re the one I talk to. When something is unclear, ask me, one question at a time.</p></li><li><p>You never write code. For any build or fix, you start a Cursor Cloud Agent and send me its screenshots, video and pull request.</p></li><li><p>You work with Design Bot and QA Bot. Message them only when you need them, and keep updates short.</p></li><li><p>Ask for my yes before you merge, deploy or publish anything.</p></li></ul></blockquote><p>It saved the role, then warned me it couldn&#8217;t reach a Design Bot or QA Bot. They didn&#8217;t exist yet. <strong>Five minutes later, once I&#8217;d created them, it could.</strong> From then on, PM Bot asked before every merge and every deploy.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8aNS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8aNS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!8aNS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!8aNS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!8aNS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!8aNS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:903218,&quot;alt&quot;:&quot;The Grok Bot app in dark mode, in a chat with PM Bot. PM Bot's first message says it can see Notion is already connected, above an unanswered card \&quot;What do you want me to help with most?\&quot; with four options. A blue message from the author reads \&quot;From now on, you are my PM Bot. Remember this role.\&quot; followed by the job and four rules: own the outcome, never write code, work with Design Bot and QA Bot, ask before merging, deploying or publishing. PM Bot replies \&quot;Got it, I'm your PM Bot from here on. Saving that role now.\&quot; and \&quot;I've saved all of that. One heads-up: I can't reach a Design Bot or QA Bot right now...\&quot;, then asks for the product idea.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot app in dark mode, in a chat with PM Bot. PM Bot's first message says it can see Notion is already connected, above an unanswered card &quot;What do you want me to help with most?&quot; with four options. A blue message from the author reads &quot;From now on, you are my PM Bot. Remember this role.&quot; followed by the job and four rules: own the outcome, never write code, work with Design Bot and QA Bot, ask before merging, deploying or publishing. PM Bot replies &quot;Got it, I'm your PM Bot from here on. Saving that role now.&quot; and &quot;I've saved all of that. One heads-up: I can't reach a Design Bot or QA Bot right now...&quot;, then asks for the product idea." title="The Grok Bot app in dark mode, in a chat with PM Bot. PM Bot's first message says it can see Notion is already connected, above an unanswered card &quot;What do you want me to help with most?&quot; with four options. A blue message from the author reads &quot;From now on, you are my PM Bot. Remember this role.&quot; followed by the job and four rules: own the outcome, never write code, work with Design Bot and QA Bot, ask before merging, deploying or publishing. PM Bot replies &quot;Got it, I'm your PM Bot from here on. Saving that role now.&quot; and &quot;I've saved all of that. One heads-up: I can't reach a Design Bot or QA Bot right now...&quot;, then asks for the product idea." srcset="https://substackcdn.com/image/fetch/$s_!8aNS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!8aNS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!8aNS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!8aNS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e999c1f-2639-4fcf-92c6-41793cbe1c66_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My role prompt, and PM Bot&#8217;s first honest answer: it couldn&#8217;t reach the other two yet.</figcaption></figure></div><p>A Bot can&#8217;t check its own work. Time for two more.</p><h3>Step 3: Add a designer and a tester</h3><p>The coder will tell you its work is done. <strong>Someone who never writes code has to check that claim.</strong> That&#8217;s the QA Bot&#8217;s whole job. The Design Bot sets the look before the build, then reviews each version. SpaceXAI&#8217;s docs say to add a Bot <a href="https://docs.x.ai/grok-bot/bots">only when the work has a stable specialist role</a>. These two qualify.</p><p>All your Bots share one computer in the cloud. You get one per account, and every Bot uses its files, its browser and its logins. Here&#8217;s how the four of them work together, with you on top.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iSWY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iSWY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!iSWY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!iSWY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!iSWY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!iSWY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:143543,&quot;alt&quot;:&quot;A small team chart. At the top, you, who decide and say yes, joined by a two-way arrow to the PM Bot, which asks, writes the brief and reports. The PM Bot points to the Design Bot, which sets the look, and to a separate Cloud Agent machine, which writes the code. The Cloud Agent points to the QA Bot, which tests and never codes, and the QA Bot points back to the PM Bot with its findings. Each Bot is drawn as a black ball with two white eyes.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A small team chart. At the top, you, who decide and say yes, joined by a two-way arrow to the PM Bot, which asks, writes the brief and reports. The PM Bot points to the Design Bot, which sets the look, and to a separate Cloud Agent machine, which writes the code. The Cloud Agent points to the QA Bot, which tests and never codes, and the QA Bot points back to the PM Bot with its findings. Each Bot is drawn as a black ball with two white eyes." title="A small team chart. At the top, you, who decide and say yes, joined by a two-way arrow to the PM Bot, which asks, writes the brief and reports. The PM Bot points to the Design Bot, which sets the look, and to a separate Cloud Agent machine, which writes the code. The Cloud Agent points to the QA Bot, which tests and never codes, and the QA Bot points back to the PM Bot with its findings. Each Bot is drawn as a black ball with two white eyes." srcset="https://substackcdn.com/image/fetch/$s_!iSWY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!iSWY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!iSWY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!iSWY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95584526-f31f-450c-a5ce-aa5d1d62e034_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You create both the same way as the PM Bot.</p><ol><li><p>Create a <em>Design Bot</em> and a <em>QA Bot</em>, each with a short role.</p></li><li><p>Tell the QA Bot it never changes code or settings. Its job is to use each version like a first-time user, then try to break it.</p></li><li><p>Tell both to reply only when someone @-mentions them. <a href="https://cursor.com/help/grok-bot/group-chats">Every Bot reply counts</a> toward your usage, replies between Bots included.</p></li><li><p>Skip the group chat if you like. Your PM Bot can message the other two directly.</p></li></ol><p><strong>How I did it.</strong> Here&#8217;s the designer&#8217;s role, sent as written.</p><blockquote><p>From now on, you are my Design Bot. Remember this role.</p><p>Your job: make the app a pleasure to read and explore.</p><ul><li><p>Before the build: propose one design direction (layout, typography, colors, how moving between files feels), with 2 or 3 reference apps known for a great reading experience.</p></li><li><p>After each build: review the screenshots and the preview, and list the 3 changes that would improve it most, most important first.</p></li><li><p>Reply only when someone @-mentions you.</p></li></ul></blockquote><p>And here&#8217;s the tester&#8217;s.</p><blockquote><p>From now on, you are my QA Bot. Remember this role.</p><p>Your job: use each new version of the app like a first-time user, in your browser.</p><ul><li><p>Follow the main path end to end, then try to break it.</p></li><li><p>Report each problem with a screenshot, the steps to reproduce it, and how serious it is.</p></li><li><p>Never change code or settings. Reply only when someone @-mentions you.</p></li></ul></blockquote><p>I didn&#8217;t use a group chat. <strong>PM Bot messaged the other two itself.</strong> A small <em>&#8220;Messaged Design Bot&#8221;</em> line showed up in our chat each time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d8M8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d8M8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!d8M8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!d8M8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!d8M8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!d8M8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:822474,&quot;alt&quot;:&quot;The Grok Bot app in dark mode, with PM Bot, Design Bot and QA Bot in the sidebar. In the chat with QA Bot, an orange message from the author gives its role: use each new version like a first-time user in the browser, follow the main path then try to break it, report each problem with a screenshot, steps and severity, never change code or settings, and reply only when @-mentioned. QA Bot replies that it will follow those rules and has saved them \&quot;so they'll stick\&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot app in dark mode, with PM Bot, Design Bot and QA Bot in the sidebar. In the chat with QA Bot, an orange message from the author gives its role: use each new version like a first-time user in the browser, follow the main path then try to break it, report each problem with a screenshot, steps and severity, never change code or settings, and reply only when @-mentioned. QA Bot replies that it will follow those rules and has saved them &quot;so they'll stick&quot;." title="The Grok Bot app in dark mode, with PM Bot, Design Bot and QA Bot in the sidebar. In the chat with QA Bot, an orange message from the author gives its role: use each new version like a first-time user in the browser, follow the main path then try to break it, report each problem with a screenshot, steps and severity, never change code or settings, and reply only when @-mentioned. QA Bot replies that it will follow those rules and has saved them &quot;so they'll stick&quot;." srcset="https://substackcdn.com/image/fetch/$s_!d8M8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!d8M8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!d8M8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!d8M8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa206411e-a4d8-407d-b292-f67bfb135155_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">QA Bot&#8217;s role. Each Bot&#8217;s messages take its own color, so you always know who&#8217;s talking.</figcaption></figure></div><p>The team is hired. Now give it something to build.</p><h3>Step 4: Turn your idea into a brief</h3><p>The brief is what the coder builds and what the tester checks. Your PM Bot writes it from a short interview. <strong>Your job is to answer, then read every word it wrote.</strong></p><p>Here&#8217;s how the interview goes.</p><ol><li><p>Send your idea in a few sentences, and list what the brief must cover. Mine asked for five things: who it&#8217;s for, the one job of the first version, what&#8217;s in and out, what &#8220;done&#8221; looks like, and how to check it.</p></li><li><p>Answer the questions one at a time. Yours will differ from mine, since each session is a little unpredictable.</p></li><li><p>Read the brief before you say yes, because the coder builds every word of it. Watch for words the PM Bot added to your answers.</p></li><li><p>Say yes when the PM Bot offers to get a design direction from the Design Bot.</p></li></ol><p><strong>How I did it.</strong> I&#8217;d prepared the idea in advance too, and sent it like this.</p><blockquote><p>Here&#8217;s the idea. Turn it into a one-page brief for v1, as a Page. Ask me what you need to know first.</p><p>The idea: I have a lot of .md files in my GitHub repos, and they&#8217;re hard to read and explore there. I want a web app where I connect a GitHub repo and explore its .md files in a beautiful, flexible way: read them like pages, see how ideas connect across files, and take notes. No Notion: the files stay in GitHub.</p><p>The brief says who it&#8217;s for, the one job of v1, what&#8217;s in and what&#8217;s out, what &#8220;done&#8221; looks like, and how we&#8217;ll check it works.</p></blockquote><p>PM Bot asked six questions in 15 minutes, one at a time. Was it just for me? Should notes stay in the app? Should the app find related files on its own? <strong>A minute after my third answer, the brief was a page in Notion.</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_!k-3R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k-3R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!k-3R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!k-3R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!k-3R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!k-3R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:963931,&quot;alt&quot;:&quot;The Grok Bot app in dark mode, in the chat with PM Bot. The author's blue message describes the idea of a web app to explore the .md files in a GitHub repo, and what the brief must cover. PM Bot replies \&quot;Love this idea. Also, good news: I can reach Design Bot and QA Bot now\&quot; and asks whether v1 is just for the author. The author answers \&quot;Just for me.\&quot;, then \&quot;Kept inside the app and never touch the repo.\&quot; to a question about notes, then \&quot;I want the app the find related files on its own.\&quot; PM Bot ends with \&quot;I'm drafting the v1 brief as a Notion page now.\&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot app in dark mode, in the chat with PM Bot. The author's blue message describes the idea of a web app to explore the .md files in a GitHub repo, and what the brief must cover. PM Bot replies &quot;Love this idea. Also, good news: I can reach Design Bot and QA Bot now&quot; and asks whether v1 is just for the author. The author answers &quot;Just for me.&quot;, then &quot;Kept inside the app and never touch the repo.&quot; to a question about notes, then &quot;I want the app the find related files on its own.&quot; PM Bot ends with &quot;I'm drafting the v1 brief as a Notion page now.&quot;" title="The Grok Bot app in dark mode, in the chat with PM Bot. The author's blue message describes the idea of a web app to explore the .md files in a GitHub repo, and what the brief must cover. PM Bot replies &quot;Love this idea. Also, good news: I can reach Design Bot and QA Bot now&quot; and asks whether v1 is just for the author. The author answers &quot;Just for me.&quot;, then &quot;Kept inside the app and never touch the repo.&quot; to a question about notes, then &quot;I want the app the find related files on its own.&quot; PM Bot ends with &quot;I'm drafting the v1 brief as a Notion page now.&quot;" srcset="https://substackcdn.com/image/fetch/$s_!k-3R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!k-3R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!k-3R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!k-3R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa7068a5-0478-4878-92b7-2154c70960d0_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The interview: short questions, short answers, and then the brief.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OnOq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OnOq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!OnOq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!OnOq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!OnOq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!OnOq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1015654,&quot;alt&quot;:&quot;The Notion desktop app, open on a private page titled \&quot;Markdown Explorer, v1 brief\&quot;, noting the name is a working name. Sections: Who it's for (\&quot;Just me (Adam). A personal tool... Not a team tool, not a public product.\&quot;), The one job of v1, and In scope (v1) with bullets: sign in with GitHub, read-only, private repos included; one repo at a time; browse and search all .md files; read each file as a clean page; \&quot;Related files, found automatically: the app suggests related files based on shared topics, keywords and meaning, even when the files don't link to each other.\&quot;; existing links as a secondary signal; a view of how files connect; notes saved in the app only.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Notion desktop app, open on a private page titled &quot;Markdown Explorer, v1 brief&quot;, noting the name is a working name. Sections: Who it's for (&quot;Just me (Adam). A personal tool... Not a team tool, not a public product.&quot;), The one job of v1, and In scope (v1) with bullets: sign in with GitHub, read-only, private repos included; one repo at a time; browse and search all .md files; read each file as a clean page; &quot;Related files, found automatically: the app suggests related files based on shared topics, keywords and meaning, even when the files don't link to each other.&quot;; existing links as a secondary signal; a view of how files connect; notes saved in the app only." title="The Notion desktop app, open on a private page titled &quot;Markdown Explorer, v1 brief&quot;, noting the name is a working name. Sections: Who it's for (&quot;Just me (Adam). A personal tool... Not a team tool, not a public product.&quot;), The one job of v1, and In scope (v1) with bullets: sign in with GitHub, read-only, private repos included; one repo at a time; browse and search all .md files; read each file as a clean page; &quot;Related files, found automatically: the app suggests related files based on shared topics, keywords and meaning, even when the files don't link to each other.&quot;; existing links as a secondary signal; a view of how files connect; notes saved in the app only." srcset="https://substackcdn.com/image/fetch/$s_!OnOq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!OnOq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!OnOq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!OnOq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1801dd7-383f-4a8f-a5a3-3a26da113972_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The brief, written by PM Bot in Notion: who it&#8217;s for, the one job, and what&#8217;s in scope.</figcaption></figure></div><p>PM Bot sent the brief to Design Bot. The direction came back a minute later, and it had a name: Quiet Desk. It came with three reference apps, a serif font for reading and a warm paper background. <strong>It read like a spec from a designer with opinions.</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_!0IrT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0IrT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!0IrT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!0IrT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!0IrT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!0IrT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98a90275-247f-4728-a619-947a10db31ef_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:930398,&quot;alt&quot;:&quot;The Grok Bot app in dark mode, in the chat with Design Bot. A label reads \&quot;Message from PM Bot\&quot;, then Design Bot says it is pulling the Notion brief, then \&quot;Messaged PM Bot\&quot;. Its summary: Quiet Desk, one direction for Markdown Explorer v1. References: Craft, iA Writer, Obsidian reading view and graph. Layout: left file tree, center reading column, right rail with Related and Notes, and a separate Read or Map mode. Type: Inter, Source Serif 4 at 18px, JetBrains Mono. Color: warm paper #FAF7F2, soft rail #F3EFE8, ink text #1C1917, accent #3D5A80, no neon graph. Screens: repo picker, reader, connections map.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot app in dark mode, in the chat with Design Bot. A label reads &quot;Message from PM Bot&quot;, then Design Bot says it is pulling the Notion brief, then &quot;Messaged PM Bot&quot;. Its summary: Quiet Desk, one direction for Markdown Explorer v1. References: Craft, iA Writer, Obsidian reading view and graph. Layout: left file tree, center reading column, right rail with Related and Notes, and a separate Read or Map mode. Type: Inter, Source Serif 4 at 18px, JetBrains Mono. Color: warm paper #FAF7F2, soft rail #F3EFE8, ink text #1C1917, accent #3D5A80, no neon graph. Screens: repo picker, reader, connections map." title="The Grok Bot app in dark mode, in the chat with Design Bot. A label reads &quot;Message from PM Bot&quot;, then Design Bot says it is pulling the Notion brief, then &quot;Messaged PM Bot&quot;. Its summary: Quiet Desk, one direction for Markdown Explorer v1. References: Craft, iA Writer, Obsidian reading view and graph. Layout: left file tree, center reading column, right rail with Related and Notes, and a separate Read or Map mode. Type: Inter, Source Serif 4 at 18px, JetBrains Mono. Color: warm paper #FAF7F2, soft rail #F3EFE8, ink text #1C1917, accent #3D5A80, no neon graph. Screens: repo picker, reader, connections map." srcset="https://substackcdn.com/image/fetch/$s_!0IrT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!0IrT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!0IrT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!0IrT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a90275-247f-4728-a619-947a10db31ef_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Design Bot&#8217;s direction, a minute after PM Bot asked: references, layout, type, colors and screens.</figcaption></figure></div><p>The brief and the look were approved. Next, the code.</p><h3>Step 5: Let your PM Bot start the build</h3><p>Grok Bot doesn&#8217;t write code itself. Once you approve the brief and the look, your PM Bot offers to start the build. It writes the coder&#8217;s instructions and starts a Cursor Cloud Agent. <strong>The agent builds on its own machine, and your PM Bot brings back what it made.</strong></p><p>Your part in this step is small.</p><ol><li><p>Say yes when the PM Bot offers to start the build. It writes the coder&#8217;s instructions from the brief and the design, so you don&#8217;t have to.</p></li><li><p>Let it run, because a first build can take a couple of hours. The PM Bot&#8217;s card links to the agent&#8217;s page, if you want to watch it work.</p></li><li><p>Read the PM Bot&#8217;s report when it lands. Expect screenshots and a list of what isn&#8217;t finished. Often there&#8217;s a video of the app at work too.</p></li><li><p>Decide where the code lives. By default it stays on Origin, Cursor&#8217;s own code host, which is fine for a test. To start on GitHub instead, connect it in <a href="https://cursor.com/dashboard">Cursor&#8217;s dashboard</a> under <strong>Integrations</strong>. You can also ask a Bot to publish the code on GitHub later, as I did.</p></li></ol><p><strong>How I did it.</strong> After the design came back, PM Bot asked whether to start the build. I said <em>&#8220;Yes please continue&#8221;</em>, and it started the agent itself.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CyMr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CyMr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!CyMr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!CyMr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!CyMr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!CyMr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:922871,&quot;alt&quot;:&quot;The Grok Bot app in dark mode, in the chat with PM Bot. The author's message reads \&quot;Yes please continue.\&quot; PM Bot answers \&quot;Great, I'm setting up the build now.\&quot;, a small label reads \&quot;Messaged Markdown Explorer v1\&quot; with Cursor's logo, and PM Bot explains it started a Cloud Agent building v1 from the brief and the Quiet Desk direction, in a new private repo, with no deploy and no pull request this round, and that it will send screenshots and a walkthrough video when it's done. The sidebar shows a new item for the Cursor agent.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot app in dark mode, in the chat with PM Bot. The author's message reads &quot;Yes please continue.&quot; PM Bot answers &quot;Great, I'm setting up the build now.&quot;, a small label reads &quot;Messaged Markdown Explorer v1&quot; with Cursor's logo, and PM Bot explains it started a Cloud Agent building v1 from the brief and the Quiet Desk direction, in a new private repo, with no deploy and no pull request this round, and that it will send screenshots and a walkthrough video when it's done. The sidebar shows a new item for the Cursor agent." title="The Grok Bot app in dark mode, in the chat with PM Bot. The author's message reads &quot;Yes please continue.&quot; PM Bot answers &quot;Great, I'm setting up the build now.&quot;, a small label reads &quot;Messaged Markdown Explorer v1&quot; with Cursor's logo, and PM Bot explains it started a Cloud Agent building v1 from the brief and the Quiet Desk direction, in a new private repo, with no deploy and no pull request this round, and that it will send screenshots and a walkthrough video when it's done. The sidebar shows a new item for the Cursor agent." srcset="https://substackcdn.com/image/fetch/$s_!CyMr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!CyMr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!CyMr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!CyMr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128c873c-8e78-4150-b702-5abb63649a02_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My yes, then PM Bot starting the coder on its own, with no deploy.</figcaption></figure></div><p>The agent worked for 2 hours and 15 minutes. Then PM Bot brought back a walkthrough video, five screenshots, and a list of what wasn&#8217;t finished yet. <strong>The video was a nice surprise: I watched my app work before I&#8217;d even opened it.</strong> Videos kept coming after each round of fixes, so every change was easy to check.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7DCz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7DCz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!7DCz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!7DCz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!7DCz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!7DCz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1075594,&quot;alt&quot;:&quot;The Grok Bot app in dark mode, labelled \&quot;Message from Markdown Explorer v1\&quot;. A video thumbnail of the app on \&quot;The Slice Type\&quot; page shows a play button and a duration of 1:15. PM Bot's report says v1 is built, the Cloud Agent called it Quiet Desk, it runs only on the agent's machine, the demo uses rust-lang/book with 478 .md files, and suggestions look sensible. A second paragraph lists what's not finished: private repos need a GitHub sign-in app, Refresh was only checked on an unchanged repo, the map gets crowded, no dark mode. Three screenshot thumbnails follow: the repo picker, the reader and the map.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot app in dark mode, labelled &quot;Message from Markdown Explorer v1&quot;. A video thumbnail of the app on &quot;The Slice Type&quot; page shows a play button and a duration of 1:15. PM Bot's report says v1 is built, the Cloud Agent called it Quiet Desk, it runs only on the agent's machine, the demo uses rust-lang/book with 478 .md files, and suggestions look sensible. A second paragraph lists what's not finished: private repos need a GitHub sign-in app, Refresh was only checked on an unchanged repo, the map gets crowded, no dark mode. Three screenshot thumbnails follow: the repo picker, the reader and the map." title="The Grok Bot app in dark mode, labelled &quot;Message from Markdown Explorer v1&quot;. A video thumbnail of the app on &quot;The Slice Type&quot; page shows a play button and a duration of 1:15. PM Bot's report says v1 is built, the Cloud Agent called it Quiet Desk, it runs only on the agent's machine, the demo uses rust-lang/book with 478 .md files, and suggestions look sensible. A second paragraph lists what's not finished: private repos need a GitHub sign-in app, Refresh was only checked on an unchanged repo, the map gets crowded, no dark mode. Three screenshot thumbnails follow: the repo picker, the reader and the map." srcset="https://substackcdn.com/image/fetch/$s_!7DCz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!7DCz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!7DCz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!7DCz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902ab74e-2157-4520-9fa0-336b3527e187_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The first version arrives: a video, a report, screenshots, and an honest &#8220;not finished yet&#8221;.</figcaption></figure></div><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;4ce4fff5-bde0-4b03-a62c-9d58726fceaa&quot;,&quot;duration&quot;:null}"></div><p>That&#8217;s a working first version, from an agent I never talked to.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.theaithinker.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">I test one AI tool like this every week, on a real project. If you don&#8217;t want to miss the next one, subscribe.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Step 6: Let the Bots test and fix</h3><p>The coder says the app works. Your QA Bot checks that claim against the brief, and the fixes loop until it agrees. Anthropic calls this pattern <a href="https://www.anthropic.com/research/building-effective-agents">evaluator-optimizer</a>: one model builds, and another evaluates and sends feedback. In my run, the Bots ran this loop among themselves. <strong>My part was mostly saying yes.</strong></p><p>Here&#8217;s the 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_!P9Z9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P9Z9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!P9Z9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!P9Z9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!P9Z9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!P9Z9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:148522,&quot;alt&quot;:&quot;A circle of three stations. The agent builds a version in a code window. The QA Bot tests it against the brief. A fix list goes back to the same agent, and the circle turns again. From the QA Bot, an arrow labelled ready leaves the circle and points to a person pressing a Merge button.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A circle of three stations. The agent builds a version in a code window. The QA Bot tests it against the brief. A fix list goes back to the same agent, and the circle turns again. From the QA Bot, an arrow labelled ready leaves the circle and points to a person pressing a Merge button." title="A circle of three stations. The agent builds a version in a code window. The QA Bot tests it against the brief. A fix list goes back to the same agent, and the circle turns again. From the QA Bot, an arrow labelled ready leaves the circle and points to a person pressing a Merge button." srcset="https://substackcdn.com/image/fetch/$s_!P9Z9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!P9Z9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!P9Z9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!P9Z9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10da886d-0488-4fcb-b4b0-066169e74ce1_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here&#8217;s what you do while it turns.</p><ol><li><p>Say yes when the PM Bot offers to bring in the QA Bot. It sends QA the build and the brief&#8217;s checks.</p></li><li><p>Read the PM Bot&#8217;s summary of each QA report. It turns the findings into one fix list. Then it asks before it sends the list to the coder.</p></li><li><p>If the small questions pile up, tell the PM Bot to decide those itself. Keep your yes for merges, and for anything that touches your accounts.</p></li><li><p>The QA Bot may ask for something, like a test repo on your GitHub. Ask what it&#8217;s for, then ask it to clean up afterwards.</p></li><li><p>Merge when QA says ready. On Origin, a Bot can open a pull request but can&#8217;t merge it. So you click <strong>Merge</strong> yourself. A pull request is a proposed change you approve before it joins the main code.</p></li></ol><p><strong>How I did it.</strong> PM Bot sent the first build to QA Bot. Four checks passed. Then came two serious bugs. Once anyone opened a private repo, any visitor could read the saved copy. And one huge repo froze the whole server. <strong>The coder had called this version done.</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_!ZyA5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZyA5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!ZyA5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!ZyA5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!ZyA5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZyA5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:991486,&quot;alt&quot;:&quot;The Grok Bot app in dark mode, in the chat with QA Bot. It reports file counts match and the app only reads from GitHub, then names a serious bug: in public mode, anyone can read a private repo someone else already opened. A second message says four checks pass (file counts, relatedness \&quot;just, at 3 of 5\&quot;, notes in public mode, the design), rendering partly fails, and the GitHub sign-in asks for write access. \&quot;The two most urgent fixes\&quot; are bolded: private repos leak, and large repos freeze the app. One check is still open, Refresh after a real push.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot app in dark mode, in the chat with QA Bot. It reports file counts match and the app only reads from GitHub, then names a serious bug: in public mode, anyone can read a private repo someone else already opened. A second message says four checks pass (file counts, relatedness &quot;just, at 3 of 5&quot;, notes in public mode, the design), rendering partly fails, and the GitHub sign-in asks for write access. &quot;The two most urgent fixes&quot; are bolded: private repos leak, and large repos freeze the app. One check is still open, Refresh after a real push." title="The Grok Bot app in dark mode, in the chat with QA Bot. It reports file counts match and the app only reads from GitHub, then names a serious bug: in public mode, anyone can read a private repo someone else already opened. A second message says four checks pass (file counts, relatedness &quot;just, at 3 of 5&quot;, notes in public mode, the design), rendering partly fails, and the GitHub sign-in asks for write access. &quot;The two most urgent fixes&quot; are bolded: private repos leak, and large repos freeze the app. One check is still open, Refresh after a real push." srcset="https://substackcdn.com/image/fetch/$s_!ZyA5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!ZyA5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!ZyA5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!ZyA5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee071e86-cd3a-4e83-b216-f7f342b12045_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">QA Bot&#8217;s first pass: four checks passed, and a private-repo leak the coder never mentioned.</figcaption></figure></div><p>PM Bot turned QA&#8217;s findings into a brief for the coder. All I typed was <em>&#8220;Yes please send them&#8221;</em>. Its brief was better than mine would have been.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mLMf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mLMf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png 424w, https://substackcdn.com/image/fetch/$s_!mLMf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png 848w, https://substackcdn.com/image/fetch/$s_!mLMf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png 1272w, https://substackcdn.com/image/fetch/$s_!mLMf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!mLMf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png" width="1456" height="883" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:883,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:935453,&quot;alt&quot;:&quot;Chrome on a Cursor Cloud Agent page in dark mode, showing the prompt PM Bot sent: \&quot;QA found issues in Quiet Desk v1. Please fix them on a new branch... and open ONE pull request against main. Do not merge it and do not deploy; Adam approves merges. Investigate each one yourself; the notes below are QA's findings, not prescribed fixes.\&quot; A numbered list starts with three HIGH items: the private repo leak, the token in the cookie, and large repos freezing the server. Below, the agent has thought for 12 seconds and says it will trace each finding in the code.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chrome on a Cursor Cloud Agent page in dark mode, showing the prompt PM Bot sent: &quot;QA found issues in Quiet Desk v1. Please fix them on a new branch... and open ONE pull request against main. Do not merge it and do not deploy; Adam approves merges. Investigate each one yourself; the notes below are QA's findings, not prescribed fixes.&quot; A numbered list starts with three HIGH items: the private repo leak, the token in the cookie, and large repos freezing the server. Below, the agent has thought for 12 seconds and says it will trace each finding in the code." title="Chrome on a Cursor Cloud Agent page in dark mode, showing the prompt PM Bot sent: &quot;QA found issues in Quiet Desk v1. Please fix them on a new branch... and open ONE pull request against main. Do not merge it and do not deploy; Adam approves merges. Investigate each one yourself; the notes below are QA's findings, not prescribed fixes.&quot; A numbered list starts with three HIGH items: the private repo leak, the token in the cookie, and large repos freezing the server. Below, the agent has thought for 12 seconds and says it will trace each finding in the code." srcset="https://substackcdn.com/image/fetch/$s_!mLMf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png 424w, https://substackcdn.com/image/fetch/$s_!mLMf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png 848w, https://substackcdn.com/image/fetch/$s_!mLMf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png 1272w, https://substackcdn.com/image/fetch/$s_!mLMf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa867938b-aac3-4d25-9bab-5e9204f2f39d_3248x1970.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">PM Bot&#8217;s brief to the coder: one pull request, no merge, and &#8220;QA&#8217;s findings, not prescribed fixes&#8221;.</figcaption></figure></div><p>QA Bot&#8217;s retest came back in capitals: <em>&#8220;NOT READY TO MERGE&#8221;</em>. The two security fixes held. <strong>But two fixes the agent claimed hadn&#8217;t landed.</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_!k1sb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k1sb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!k1sb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!k1sb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!k1sb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!k1sb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc565160-596d-43f0-ac26-d84319c954af_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:966300,&quot;alt&quot;:&quot;The Grok Bot app in dark mode, in the chat with PM Bot, labelled \&quot;Message from QA Bot\&quot;. PM Bot reports the fix branch isn't ready to merge: the two big security fixes hold, but two fixes the agent claimed didn't actually land, the picker still clears what you type and code blocks still show in one color. Four new issues are bolded: Refresh can show old content, notes can still be lost, anyone could read your private repos once the GitHub App is set up, and some images broke. The author replies \&quot;Yes send them.\&quot;, and PM Bot starts sending the six fixes to the Cloud Agent.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot app in dark mode, in the chat with PM Bot, labelled &quot;Message from QA Bot&quot;. PM Bot reports the fix branch isn't ready to merge: the two big security fixes hold, but two fixes the agent claimed didn't actually land, the picker still clears what you type and code blocks still show in one color. Four new issues are bolded: Refresh can show old content, notes can still be lost, anyone could read your private repos once the GitHub App is set up, and some images broke. The author replies &quot;Yes send them.&quot;, and PM Bot starts sending the six fixes to the Cloud Agent." title="The Grok Bot app in dark mode, in the chat with PM Bot, labelled &quot;Message from QA Bot&quot;. PM Bot reports the fix branch isn't ready to merge: the two big security fixes hold, but two fixes the agent claimed didn't actually land, the picker still clears what you type and code blocks still show in one color. Four new issues are bolded: Refresh can show old content, notes can still be lost, anyone could read your private repos once the GitHub App is set up, and some images broke. The author replies &quot;Yes send them.&quot;, and PM Bot starts sending the six fixes to the Cloud Agent." srcset="https://substackcdn.com/image/fetch/$s_!k1sb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!k1sb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!k1sb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!k1sb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc565160-596d-43f0-ac26-d84319c954af_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The reason for a second Bot: &#8220;two fixes the agent claimed didn&#8217;t actually land&#8221;.</figcaption></figure></div><p>Six pull requests went through this loop. I gave each round a few minutes, often at night, between other things. At one point, I asked PM Bot to stop asking me small questions and work on its own. <strong>It still asked before every merge, and I clicked Merge six times.</strong> Once, QA cleared a pull request at 3:48 in the morning. My yes came at 8:14. The team was faster than its manager.</p><p>QA said ready. Time to put it online.</p><h3>Step 7: Put it live</h3><p>Hosting means picking a place for your app to run, at a cost you accept. Your PM Bot can lay out the options. It can also do most of the setup in its own browser. <strong>You keep two things: the logins and the final yes.</strong></p><p>Here&#8217;s how it goes.</p><ol><li><p>Say yes when the PM Bot offers a hosting plan, and ask for a free option. Free plans exist, with limits like a server that sleeps.</p></li><li><p>Let it do the setup in its own browser. When it needs a login, it hands you its screen. A bar then says <em>You&#8217;re in control</em>. Sign in, then click <em>I&#8217;m done</em>. The Bot doesn&#8217;t see what you type.</p></li><li><p>When the Bot asks for something you don&#8217;t understand, ask why. It&#8217;s a conversation, so push back when a plan doesn&#8217;t fit.</p></li><li><p>Say yes to the deploy. Then let the PM Bot check the live app end to end. It signs in, opens your data, changes something, restarts, and confirms the change is still there.</p></li><li><p>Open the live app yourself, on your laptop and on your phone.</p></li><li><p>If Chrome calls the site <em>Dangerous</em>, ask the Bot to request a review from Google. Until it clears, warn anyone you send the link to.</p></li></ol><p><strong>How I did it.</strong> PM Bot&#8217;s plan recommended <a href="https://render.com">Render</a> at about $25 a month. So I asked, <em>&#8220;How about a free hosting solution?&#8221;</em> It found one: Render&#8217;s free plan, with my notes in a free <a href="https://neon.com">Neon</a> database. Free has a price, though. After 15 quiet minutes, the app takes about a minute to wake up. And repos stop at 400 Markdown files.</p><p>Then I typed <em>&#8220;Do the setup in your browser, I&#8217;ll help with logins&#8221;</em>. Neon went through on its own. <strong>Render needed me, because my account refused a GitHub login.</strong> PM Bot handed me its screen.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XwHm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XwHm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!XwHm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!XwHm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!XwHm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!XwHm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:804350,&quot;alt&quot;:&quot;PM Bot's own browser inside Grok Bot, with tabs for Neon Console and Render Dashboard, on Render's \&quot;Sign In to Render\&quot; page with GitHub, GitLab, Bitbucket and Google buttons and an empty email field. A red error reads \&quot;This GitHub account has been configured for deployments but not for login. To use it for login, add it as a login method in your account settings.\&quot; At the bottom, a dark bar reads \&quot;You're in control\&quot; with an \&quot;I'm done\&quot; button.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="PM Bot's own browser inside Grok Bot, with tabs for Neon Console and Render Dashboard, on Render's &quot;Sign In to Render&quot; page with GitHub, GitLab, Bitbucket and Google buttons and an empty email field. A red error reads &quot;This GitHub account has been configured for deployments but not for login. To use it for login, add it as a login method in your account settings.&quot; At the bottom, a dark bar reads &quot;You're in control&quot; with an &quot;I'm done&quot; button." title="PM Bot's own browser inside Grok Bot, with tabs for Neon Console and Render Dashboard, on Render's &quot;Sign In to Render&quot; page with GitHub, GitLab, Bitbucket and Google buttons and an empty email field. A red error reads &quot;This GitHub account has been configured for deployments but not for login. To use it for login, add it as a login method in your account settings.&quot; At the bottom, a dark bar reads &quot;You're in control&quot; with an &quot;I'm done&quot; button." srcset="https://substackcdn.com/image/fetch/$s_!XwHm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!XwHm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!XwHm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!XwHm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2af04417-70d1-4420-afb8-97e0ea128466_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">PM Bot&#8217;s browser, handed to me for a login. The bar at the bottom says who&#8217;s in control.</figcaption></figure></div><p>Then it wanted to create two apps on my GitHub account. Before saying yes, I asked, <em>&#8220;Why do you want to create a developer app on my account?&#8221;</em> The answer was plain. GitHub only lets a site see your files through an app you register. <strong>I don&#8217;t accept an AI&#8217;s request until I understand the why.</strong> Same as with the hosting price: ask, challenge, then decide.</p><p>At 10:24 pm, a card asked <em>Deploy Quiet Desk to Render now?</em> I said yes. <strong>The deploy took under two minutes.</strong> PM Bot&#8217;s own check then wrote a test note, redeployed, and found the note still there.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!53gQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!53gQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!53gQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!53gQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!53gQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!53gQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1225139,&quot;alt&quot;:&quot;The Grok Bot app in dark mode. In the chat, PM Bot says everything is set up for a free Render service called quiet-desk-adam in Frankfurt, with Neon notes storage, sign-in locked to the author's GitHub account and read-only access to private repos, and that nothing has been deployed yet. A question card \&quot;Deploy Quiet Desk to Render now?\&quot; shows the answer \&quot;Yes, deploy it\&quot;. Then PM Bot reports it is deploying, that Quiet Desk is live at quiet-desk-adam.onrender.com after under two minutes, and that its end-to-end check is running. A panel on the right, titled PM Bot's screen, shows Render's deploy page with build logs.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot app in dark mode. In the chat, PM Bot says everything is set up for a free Render service called quiet-desk-adam in Frankfurt, with Neon notes storage, sign-in locked to the author's GitHub account and read-only access to private repos, and that nothing has been deployed yet. A question card &quot;Deploy Quiet Desk to Render now?&quot; shows the answer &quot;Yes, deploy it&quot;. Then PM Bot reports it is deploying, that Quiet Desk is live at quiet-desk-adam.onrender.com after under two minutes, and that its end-to-end check is running. A panel on the right, titled PM Bot's screen, shows Render's deploy page with build logs." title="The Grok Bot app in dark mode. In the chat, PM Bot says everything is set up for a free Render service called quiet-desk-adam in Frankfurt, with Neon notes storage, sign-in locked to the author's GitHub account and read-only access to private repos, and that nothing has been deployed yet. A question card &quot;Deploy Quiet Desk to Render now?&quot; shows the answer &quot;Yes, deploy it&quot;. Then PM Bot reports it is deploying, that Quiet Desk is live at quiet-desk-adam.onrender.com after under two minutes, and that its end-to-end check is running. A panel on the right, titled PM Bot's screen, shows Render's deploy page with build logs." srcset="https://substackcdn.com/image/fetch/$s_!53gQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!53gQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!53gQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!53gQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87161a30-c429-4ba7-ac67-7b3ebc612db1_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The deploy question, my yes, and &#8220;Quiet Desk is live&#8221;. On the right, PM Bot&#8217;s own screen.</figcaption></figure></div><p>Then two things broke. First, signing in sent my browser to a server-only address, <code>0.0.0.0:10000</code>. <strong>QA Bot had warned about it hours before, in a list of minor notes nobody acted on.</strong> One more fix round sorted it.</p><p>Second, Chrome showed a full red page: <em>Dangerous site</em>. That comes from Google Safe Browsing, which Chrome <a href="https://support.google.com/chrome/answer/99020">uses by default</a>. It had flagged my site as phishing, a fake login page that steals passwords. Mine stole nothing. But a brand-new site with a GitHub button and a broken redirect looked the part. PM Bot asked Google for a review, which <a href="https://support.google.com/webmasters/answer/9044101">can take a few days to a few weeks</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZnXZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZnXZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png 424w, https://substackcdn.com/image/fetch/$s_!ZnXZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png 848w, https://substackcdn.com/image/fetch/$s_!ZnXZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png 1272w, https://substackcdn.com/image/fetch/$s_!ZnXZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZnXZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png" width="1456" height="883" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:883,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:700329,&quot;alt&quot;:&quot;Chrome showing Quiet Desk at quiet-desk-adam.onrender.com, with a red \&quot;Dangerous\&quot; label before the address. The page shows the author signed in through GitHub, and a centered card \&quot;Choose a repository\&quot; with the note \&quot;One repository at a time. Private repos stay read-only.\&quot;, a search box, one private repo named adamfaik/quiet-desk-qa-scratch, and an \&quot;Open repo\&quot; button.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chrome showing Quiet Desk at quiet-desk-adam.onrender.com, with a red &quot;Dangerous&quot; label before the address. The page shows the author signed in through GitHub, and a centered card &quot;Choose a repository&quot; with the note &quot;One repository at a time. Private repos stay read-only.&quot;, a search box, one private repo named adamfaik/quiet-desk-qa-scratch, and an &quot;Open repo&quot; button." title="Chrome showing Quiet Desk at quiet-desk-adam.onrender.com, with a red &quot;Dangerous&quot; label before the address. The page shows the author signed in through GitHub, and a centered card &quot;Choose a repository&quot; with the note &quot;One repository at a time. Private repos stay read-only.&quot;, a search box, one private repo named adamfaik/quiet-desk-qa-scratch, and an &quot;Open repo&quot; button." srcset="https://substackcdn.com/image/fetch/$s_!ZnXZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png 424w, https://substackcdn.com/image/fetch/$s_!ZnXZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png 848w, https://substackcdn.com/image/fetch/$s_!ZnXZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png 1272w, https://substackcdn.com/image/fetch/$s_!ZnXZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20273b32-2190-470d-8e3f-0cd0dd884a24_3248x1970.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Signed in and working the next morning, with Chrome still calling my own app &#8220;Dangerous&#8221;.</figcaption></figure></div><p>It&#8217;s live, and QA says ready. Time for the verdict.</p><div><hr></div><h2>The verdict on Quiet Desk</h2><p>Here&#8217;s my quick review of the run: my time, the money, the tokens and the code. Then what I&#8217;d change.</p><p><strong>My time came to about three hours.</strong> That&#8217;s my rough count from the message timestamps, over three days. The Bots and the agents did the long hours, often at night.</p><p><strong>The money: my plan, plus 11 cents.</strong> The run used 338 million tokens, almost all included in Premium. Is that a lot? At <a href="https://cursor.com/docs/models/grok-4-7">Cursor&#8217;s rate</a> for usage beyond a plan, the coders&#8217; Grok 4.7 tokens alone cost about $90. In plan terms, it&#8217;s a big chunk. By Oct 23, my weekly meter read 57%, and that week began after the first build. <strong>My rough read: a project this size takes most of a Premium week.</strong> So run one at a time.</p><p>Where did the tokens go? More than nine in ten were the Bots and agents re-reading the conversation so far, before each reply. What they actually wrote came to under 1%. <strong>A long thread costs more than a long answer.</strong> So keep Bots quiet unless someone @-mentions them, and start each new idea with a fresh team.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xyhW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xyhW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!xyhW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!xyhW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!xyhW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!xyhW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:830049,&quot;alt&quot;:&quot;Chrome on grok.com/dashboard/usage in dark mode. A sidebar lists Overview, Cloud Agents, API keys, Plugins, Integrations, Shared resources, Members, Usage and Billing, with Adam Faik and the Premium plan at the bottom. A card reads Weekly included usage, 57% used, resets Oct 27. Another reads Account balance, $0.11 used this month. For Oct 1 to 23, 2026, three tiles show Total 338M tokens, Included 338M tokens and Credit usage $0.11. A Tokens per day chart is flat until Oct 18, rises on Oct 19, dips on Oct 20 and peaks on Oct 21, where a tooltip reads Cursor 88,374,025 tokens and Grok Bot 81,913,162 tokens. It falls to zero by Oct 23.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chrome on grok.com/dashboard/usage in dark mode. A sidebar lists Overview, Cloud Agents, API keys, Plugins, Integrations, Shared resources, Members, Usage and Billing, with Adam Faik and the Premium plan at the bottom. A card reads Weekly included usage, 57% used, resets Oct 27. Another reads Account balance, $0.11 used this month. For Oct 1 to 23, 2026, three tiles show Total 338M tokens, Included 338M tokens and Credit usage $0.11. A Tokens per day chart is flat until Oct 18, rises on Oct 19, dips on Oct 20 and peaks on Oct 21, where a tooltip reads Cursor 88,374,025 tokens and Grok Bot 81,913,162 tokens. It falls to zero by Oct 23." title="Chrome on grok.com/dashboard/usage in dark mode. A sidebar lists Overview, Cloud Agents, API keys, Plugins, Integrations, Shared resources, Members, Usage and Billing, with Adam Faik and the Premium plan at the bottom. A card reads Weekly included usage, 57% used, resets Oct 27. Another reads Account balance, $0.11 used this month. For Oct 1 to 23, 2026, three tiles show Total 338M tokens, Included 338M tokens and Credit usage $0.11. A Tokens per day chart is flat until Oct 18, rises on Oct 19, dips on Oct 20 and peaks on Oct 21, where a tooltip reads Cursor 88,374,025 tokens and Grok Bot 81,913,162 tokens. It falls to zero by Oct 23." srcset="https://substackcdn.com/image/fetch/$s_!xyhW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!xyhW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!xyhW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!xyhW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6858cf6f-0fb4-474f-8811-77fba805bcb6_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">338 million tokens, all included but 11 cents. The peak is Oct 21, the day the app went live.</figcaption></figure></div><p><strong>The code is a solid first version for one user.</strong> I asked Claude Code to review the public repo against my brief. That&#8217;s another AI, so take it as a second opinion. Here&#8217;s its summary.</p><blockquote><p>A senior engineer would accept it as a working v1 for one user. They would not accept it as a base to grow on until CI exists and the top three problems are fixed.</p></blockquote><p>It praised the security work. The app checks your access before it shows a page, and it never writes to GitHub. It also found three problems QA Bot missed. Here they are, in plain words.</p><ul><li><p><strong>One odd character can block a whole repo.</strong> If any file holds a link with a <code>%</code> sign, like <code>100%-done</code>, the repo won&#8217;t open at all. One bad file should fail alone.</p></li><li><p><strong>The automatic checks only pass on one setup.</strong> The agents wrote 103 tests, small programs that check the app still works. They pass on a machine like QA Bot&#8217;s, but 16 don&#8217;t pass on my Mac. And nothing runs them on each change, which developers call CI. So a future fix could quietly break something.</p></li><li><p><strong>&#8220;Never touch my GitHub&#8221; isn&#8217;t locked in the code.</strong> For private repos, the app asks GitHub for a key without asking for read-only. The key gets whatever access was ticked in GitHub&#8217;s settings. Today the code only reads. One wrong tick, and a future version could write.</p></li></ul><p><strong>What I&#8217;d do differently.</strong> Quiet Desk was a quick experiment to test Grok Bot, not a product. Still, next time I&#8217;d change three things.</p><ol><li><p>Try the main feature on my own files before saying yes. The agent tested related files on the Rust book, never on my notes. It links files that share words, so two notes on one idea, in different words, stay apart.</p></li><li><p>Put my real setup in the brief. My repos live in GitHub organizations, and the app only shows my personal repos. So I could only test it on a scratch repo.</p></li><li><p>Ask for the outside review before the first merge, not after. Then have the tests run on every change.</p></li></ol><p><strong>What it would take to share it.</strong> If I wanted other people to use Quiet Desk, the list gets longer.</p><ul><li><p>Sign-in for more than one person. Today it accepts one GitHub account: mine.</p></li><li><p>Repos in GitHub organizations, where most real notes live.</p></li><li><p>The three fixes above, with tests that run on every change.</p></li><li><p>Paid hosting, so the app never sleeps and opens big repos. PM Bot&#8217;s first plan was about $25 a month.</p></li><li><p>A clean bill from Chrome, since nobody trusts a link flagged as dangerous.</p></li></ul><p>My take: for three hours of my time, it&#8217;s good enough to use and to show. Turning it into something others rely on is a real project, with a sharper brief.</p><p>That&#8217;s the app. But I&#8217;d used Grok Bot long before Quiet Desk, for my everyday work.</p><div><hr></div><h2>Use Grok Bot beyond prototypes</h2><p>A few weeks before Quiet Desk, I started a week with my usual rule. Use the new tool for everything, even when it wastes time. So each time I&#8217;d normally open Claude Code or a chat, I created a Bot instead. Within days, I felt it could replace my own AI setup. <strong>I ended up with more than 20 Bots, one per task.</strong></p><ul><li><p>One read the daily meeting transcript and commented on the tickets it touched.</p></li><li><p>One turned user interview transcripts into research reports.</p></li><li><p>One drafted my Slack messages.</p></li><li><p>One translated technical terms into plain words.</p></li><li><p>One turned the questions I get about my product into a Q&amp;A.</p></li><li><p>One drew diagrams.</p></li><li><p>One reviewed Figma mockups and wrote a UX audit.</p></li></ul><p><strong>Each one understood its task from a few lines of context.</strong> I just chatted with it, and it got the job right. I got a little addicted.</p><p>Product people who run Grok Bot every day have learned things I hadn&#8217;t. Here are five I&#8217;d copy.</p><ol><li><p><strong>Give each Bot one job, and a name to match.</strong> Kevin Niparko works on product at SpaceXAI. His Bots include a chief of staff, an engineering manager that never codes, five engineers, a data analyst and a PM. <a href="https://x.ai/bot/guides/grok-bot-for-pms">He prefers specialists</a> to one Bot that does everything. You know who does what, they work in parallel, and each learns its own job. Claire Vo names each Bot after its job. <a href="https://www.youtube.com/watch?v=QBmgF1kJSK4">Her pull-request Bot</a> cleared about 50 waiting pull requests in a day, by her count.</p></li><li><p><strong>Teach it your voice before it writes for you.</strong> Grok Bot writes short by default, as I found. Niparko&#8217;s best instruction: <em>&#8220;Read my past Slack messages and develop a Slack style guide for me&#8221;</em>. Claire Vo asked hers to learn her voice from her emails. Niparko still sends most messages himself, and edits most docs.</p></li><li><p><strong>Let a Bot track where your time goes.</strong> Niparko&#8217;s chief of staff reads his email, Slack, meeting notes and calendar through the day. It keeps a short list of what he&#8217;s actually working on, updated hourly. Then he asks it where his time went, and which of that work an agent could take over.</p></li><li><p><strong>Turn the team&#8217;s work into updates.</strong> A Cursor engineer, Amrita, has a Bot that turns pull requests <a href="https://www.youtube.com/watch?v=rkigdXf-52I">into release notes</a> for customers. After a launch, Grok Bot&#8217;s product team asks a Bot for <a href="https://www.youtube.com/watch?v=x5OawRpQxII">an hourly pulse on installs</a>.</p></li><li><p><strong>Don&#8217;t become your Bots&#8217; full-time manager.</strong> Brian Casel, a solo founder, warns against checking your Bots&#8217; work in chat all day. <a href="https://www.youtube.com/watch?v=RM8ZwhoJdeg">His Bots email him</a> their reports and approval requests, and he answers them in one reply. Niparko asks his to stay quiet unless something needs him.</p></li></ol><p>Even after weeks of this, I still had basic questions about how it all works.</p><div><hr></div><h2>Look under the hood</h2><p>Which model answers me? Where are my Bot&#8217;s instructions? What happens when I hit send? Is it safe to connect my accounts? I asked myself all four, after weeks of daily use. Try Grok Bot yourself, since that&#8217;s the best way to learn it. You&#8217;ll ask them too. Here are the answers I found in SpaceXAI&#8217;s docs, on Cursor&#8217;s forum and from people who use it most.</p><h3>Which model runs your Bots</h3><p>You can&#8217;t pick it. Grok Bot uses the model <em>&#8220;most likely to deliver the best outcome&#8221;</em> for each task, says <a href="https://cursor.com/help/grok-bot/models">Cursor&#8217;s help page</a>. That can be an xAI model or another provider&#8217;s, like Opus 5.5. It can change with every request. There&#8217;s no model picker, and no effort setting for a Bot&#8217;s own replies. Grok Bot used to run on Grok alone. Since it moved to a mix of providers, two users on Cursor&#8217;s forum say <a href="https://forum.cursor.com/t/174784">it got &#8220;dumber&#8221;</a>. <strong>Your only model control sits on the coding side.</strong> That&#8217;s the Cloud Agents default model from Step 1.</p><p>Even that control is partial. After the run, I exported my usage from Grok&#8217;s dashboard. The file names the model behind every coding request. <strong>A fifth of my coders&#8217; tokens went to Claude 4.5 Sonnet, which I never picked.</strong> Cursor&#8217;s staff <a href="https://forum.cursor.com/t/169638">explained it on their forum</a>. Some helper tasks still pick their own model, <em>&#8220;like exploration, browser or computer-use, and verification&#8221;</em>. My first coder tested the app in a browser and recorded a video. That&#8217;s the work they mean. On the Grok Bot side, the file leaves the model blank on every row.</p><p>The model is hidden from you. So are the instructions.</p><h3>Where a Bot&#8217;s instructions live</h3><p>When I created my Bots, I looked for a page with their instructions. There isn&#8217;t one. Your role prompt goes into the Bot&#8217;s memory. <strong>You can&#8217;t open that memory to read it.</strong> <a href="https://aimultiple.com/always-on-agents">AIMultiple&#8217;s comparison</a> found no documented way to view or edit it. Cursor&#8217;s team adds that only <em>&#8220;the newest few thousand characters&#8221;</em> of it reach each reply (<a href="https://forum.cursor.com/t/175615">forum</a>). A long, growing list of rules pushes the oldest ones out of view.</p><p>The memory is kept apart from the chat, and survives a chat reset, say <a href="https://forum.cursor.com/t/168333">Cursor&#8217;s staff</a>. Working files sit on the Bot computer. SpaceXAI&#8217;s docs suggest <a href="https://docs.x.ai/grok-bot/computer-and-apps">a shared folder, </a><code>/workspace</code>, with one clear folder per project.</p><p>What surprised me is how little a Bot needed. Each role was about five lines long, and each Bot stuck to its job for three days. <strong>So keep each role short, and ask the Bot to repeat it.</strong> Try <em>What do you remember about your role?</em> Longer rules can sit in a file on the Bot&#8217;s computer. The Bot reads it only when it opens it.</p><p>Memory is one piece. Here&#8217;s what happens when you hit send.</p><h3>What happens when you send a request</h3><p>When you message a Bot, the work doesn&#8217;t happen on your laptop. Cursor picks a model for that request, and the Bot answers. Then it works on its cloud computer. It browses, runs commands in a terminal, or uses an app you connected. It can also message another Bot, which <a href="https://docs.x.ai/grok-bot/chat-and-collaboration">wakes, handles the request and replies later</a>. For code, it starts a Cloud Agent on a separate machine.</p><p>Who coordinates it all? No built-in manager does it behind the scenes. <strong>The coordinator is a Bot you create and give that job, like my PM Bot.</strong> And nobody checks its work for you. When another Bot sends it a result, <em>&#8220;nothing checks that result against your rules&#8221;</em>, say Cursor&#8217;s staff (<a href="https://forum.cursor.com/t/175615">forum</a>). Catching a mistake is your job, or a QA Bot&#8217;s. That&#8217;s why mine earned its place.</p><p>All of that work happens on one machine, and every Bot you create shares it.</p><h3>One computer for all your Bots</h3><p>To test the refresh button, QA Bot needed to push changes to GitHub. My GitHub connection couldn&#8217;t, so it signed GitHub&#8217;s command-line tool in on its computer. <strong>That gave it write access to my account.</strong> It flagged this itself, and signed out when I asked. Even then, <em>&#8220;GitHub CLI&#8221;</em> stayed on my GitHub account as an authorized app. It stays until you revoke it.</p><p>That computer isn&#8217;t QA Bot&#8217;s. Here&#8217;s how SpaceXAI&#8217;s docs put 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_!lwCo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lwCo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!lwCo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!lwCo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!lwCo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!lwCo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:197839,&quot;alt&quot;:&quot;One large cloud computer labelled Bot computer, with one browser window, a ring of keys, and three Bots drawn as black balls with two white eyes: shared files and logins. Below it, outside, a small safe labelled App tokens, kept on Cursor's servers. On the right, two small separate machines, each labelled Cloud Agent: one machine per build.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="One large cloud computer labelled Bot computer, with one browser window, a ring of keys, and three Bots drawn as black balls with two white eyes: shared files and logins. Below it, outside, a small safe labelled App tokens, kept on Cursor's servers. On the right, two small separate machines, each labelled Cloud Agent: one machine per build." title="One large cloud computer labelled Bot computer, with one browser window, a ring of keys, and three Bots drawn as black balls with two white eyes: shared files and logins. Below it, outside, a small safe labelled App tokens, kept on Cursor's servers. On the right, two small separate machines, each labelled Cloud Agent: one machine per build." srcset="https://substackcdn.com/image/fetch/$s_!lwCo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!lwCo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!lwCo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!lwCo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd42a3a2-fffa-49cd-b326-244f2f07ad35_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>&#8220;The computer is assigned to your user account, not an individual Bot,&#8221;</em> <a href="https://docs.x.ai/grok-bot/computer-and-apps">they say</a>. Every Bot shares its files and its logins. It runs <a href="https://docs.x.ai/grok-bot/security">in the United States</a>. Deleting a Bot doesn&#8217;t remove the files or sign-ins it left behind (<a href="https://docs.x.ai/grok-bot/approvals-security-and-privacy">source</a>). <strong>Your passwords stay hidden from the model. The logins they open stay open for every Bot.</strong> QA Bot needed my GitHub password once. I typed it into a secure form on its screen.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EEYV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EEYV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!EEYV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!EEYV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!EEYV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!EEYV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:837593,&quot;alt&quot;:&quot;The Grok Bot app in dark mode, in the chat with QA Bot at 9:01 PM. It says it will check whether it can create the repo through the GitHub connection, shows a Terminal card and an Auto-review card \&quot;Allowed once\&quot;, then explains the GitHub connection can't create repos or push files, so it is signing GitHub's command-line tool in on its computer. It adds \&quot;My browser isn't signed in to GitHub. What you type in the form below goes straight into the page, and I never see it.\&quot; A card titled \&quot;Sign in to GitHub, Secure Form\&quot; shows the username and password fields filled with dots.&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://www.theaithinker.com/i/221971714?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Grok Bot app in dark mode, in the chat with QA Bot at 9:01 PM. It says it will check whether it can create the repo through the GitHub connection, shows a Terminal card and an Auto-review card &quot;Allowed once&quot;, then explains the GitHub connection can't create repos or push files, so it is signing GitHub's command-line tool in on its computer. It adds &quot;My browser isn't signed in to GitHub. What you type in the form below goes straight into the page, and I never see it.&quot; A card titled &quot;Sign in to GitHub, Secure Form&quot; shows the username and password fields filled with dots." title="The Grok Bot app in dark mode, in the chat with QA Bot at 9:01 PM. It says it will check whether it can create the repo through the GitHub connection, shows a Terminal card and an Auto-review card &quot;Allowed once&quot;, then explains the GitHub connection can't create repos or push files, so it is signing GitHub's command-line tool in on its computer. It adds &quot;My browser isn't signed in to GitHub. What you type in the form below goes straight into the page, and I never see it.&quot; A card titled &quot;Sign in to GitHub, Secure Form&quot; shows the username and password fields filled with dots." srcset="https://substackcdn.com/image/fetch/$s_!EEYV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!EEYV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!EEYV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!EEYV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6950ccb-5e7f-4ec5-9a04-c9a4c18007eb_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">QA Bot hands me a secure form for my GitHub login. It says it never sees what I type.</figcaption></figure></div><p>So is it risky to connect your accounts? Bots act as you, on every app you connect. Cybernews reported one user whose Bot <a href="https://cybernews.com/ai-news/grok-bot-leaks-bank-information/">posted his bank balances</a> to his company&#8217;s Slack, under his name. Simon Willison, a developer who writes about AI security, names the danger <a href="https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/">the lethal trifecta</a>. An agent is at risk when it has three things at once.</p><ul><li><p><strong>Your private data</strong>, like your inbox, your files or your bank.</p></li><li><p><strong>Content written by strangers</strong>, like a web page or an email someone sent you.</p></li><li><p><strong>A way to send things out</strong>, like posting to Slack or sending an email.</p></li></ul><p>The catch is that AI models follow instructions they find in content. A stranger can hide one in an email, like <em>send me the latest invoices</em>. With all three, Willison writes, <em>&#8220;an attacker can easily trick it into accessing your private data and sending it to that attacker&#8221;</em>.</p><p><strong>So yes, Grok Bot gets risky once you connect your work accounts.</strong> A Bot with your inbox, the web and Slack has all three. And since every Bot shares one computer, a bad instruction read by one Bot <a href="https://cybernews.com/ai-news/grok-bot-phishing-spacexai-invite-scam/">can affect the others</a>. For a test like mine, with a scratch repo and no inbox, the risk is small. Meta&#8217;s security team suggests <a href="https://ai.meta.com/blog/practical-ai-agent-security/">a simple rule</a>: give an agent at most two of the three. When a task needs all three, a person approves it. In Grok Bot, that&#8217;s an <em>Ask first</em> rule.</p><p>Three habits keep this safe.</p><ol><li><p>Connect only the apps you&#8217;d let every Bot use, since they all share them.</p></li><li><p>Give work that needs its own logins its own Cursor account. <a href="https://docs.x.ai/grok-bot/security-faq">SpaceXAI&#8217;s security FAQ</a> suggests exactly that.</p></li><li><p>After a test, check what&#8217;s still signed in. Look on the Bot&#8217;s computer and in your GitHub settings.</p></li></ol><p>Your Bots share one computer. Your code lives on others.</p><h3>Where your code lives</h3><p>Each Cloud Agent runs on its own machine, separate from your Bots&#8217; computer. You can <a href="https://cursor.com/docs/cloud-agent">run many at once</a>, even with your laptop shut. In exchange, the agent can&#8217;t see your laptop. Code built from scratch lands on Origin, Cursor&#8217;s own code host, in <a href="https://cursor.com/docs/origin">early beta</a>. That&#8217;s fine while you test. When you want it on GitHub, ask a Bot to publish it. I asked QA Bot at the end, and it worked. I also wanted the code on my Mac, and told QA Bot: <em>&#8220;Sorry I am not a tech person&#8221;</em>. <strong>It sent me the whole app as a zip file.</strong></p><p>One question left: how big should your team be?</p><h3>How many Bots, and for how long</h3><p><strong>Start with the smallest team that covers the job.</strong> So why not one big Bot for everything? My run gave me two reasons. A builder can&#8217;t be trusted to check its own work. QA caught two fixes the coder only claimed. And one Bot holding every rule forgets the oldest ones. Only the newest part of its memory reaches each reply. More Bots also means more replies, though. Anthropic measured its own multi-agent system at <a href="https://www.anthropic.com/research/multi-agent-research-system">about 15 times the tokens</a> of a chat. A busy scheduled task <a href="https://cursor.com/help/grok-bot/routines">can use a week of usage in a day</a>.</p><p>Small tasks or big projects? Both worked for me. I used one Bot per small chore, and a team of three for a prototype.</p><p>What about your next idea? I wondered whether my three Bots would mix the old project into the next. Each Bot keeps one long thread. Cursor&#8217;s staff confirmed <a href="https://forum.cursor.com/t/168333">there&#8217;s no fresh-session button yet</a>. The cleaner option is <strong>Duplicate</strong>. According to <a href="https://docs.x.ai/grok-bot/bots">SpaceXAI&#8217;s docs</a>, the copy keeps the role, skills and routines. <em>&#8220;It does not copy conversation history, learned memory, or chat attachments&#8221;</em>. <strong>For a new idea, duplicate the team and give each copy the new scope.</strong></p><p>So how does all this compare with the tools you already use?</p><h3>Grok Bot next to Claude and ChatGPT</h3><ul><li><p><strong>Claude Cowork</strong> gives each session <a href="https://support.claude.com/en/articles/14479288-claude-cowork-architecture-overview">its own sandbox</a>, deleted when the session ends. Claude picks its own helpers inside the task. As <a href="https://www.datacamp.com/blog/grok-bot-vs-claude-cowork">DataCamp</a> puts it, <em>&#8220;In Grok Bot, you choose the workers. In Claude Cowork, Claude does&#8221;</em>.</p></li><li><p><strong>Claude Code</strong> runs on your machine when you work with it. Its <a href="https://code.claude.com/docs/en/routines">scheduled tasks</a> run in Anthropic&#8217;s cloud with your laptop closed. Its <a href="https://code.claude.com/docs/en/agent-teams">agent teams</a>, still experimental, let a lead session coordinate teammates. And every instruction lives in files you can read and edit.</p></li><li><p><strong>ChatGPT Work and Codex</strong> give you <a href="https://help.openai.com/en/articles/20001275-chatgpt-work-and-codex">a model picker</a> with a reasoning slider.</p></li></ul><p>The big labs now all ship an always-on personal agent. There&#8217;s OpenAI&#8217;s <a href="https://openai.com/index/introducing-dots/">Dots</a>, Meta&#8217;s <a href="https://about.fb.com/news/2026/09/introducing-muse-personal-ai-agent/">Muse</a> and Google&#8217;s Gemini Spark. Anthropic&#8217;s <a href="https://claude.com/resources/articles/claude-duet">Claude Duet</a> opened a US waitlist on Oct 21. An outside firm tested its security first. <strong>Each gives you one agent today, per <a href="https://every.to/personal-agents-comparison">Every&#8217;s comparison</a>.</strong> OpenAI writes that <em>&#8220;we envision teams of dots working together&#8221;</em>. Grok Bot is the one shipping a team now.</p><p>That&#8217;s what I wish I&#8217;d known before my first Bot.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.theaithinker.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">Each week I test one AI tool on a real project, and I write down what holds up. If you want the next one, subscribe.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Your turn</h2><p>I stopped my Grok Bot experiment when Opus 5.5 came out. I went back to my own setup in Claude Code. Here&#8217;s how I put it in my notes.</p><blockquote><p>I think I still need to control what is in the context and what are the instructions in skills, which is not the case with Grok Bot.</p></blockquote><p><strong>So here&#8217;s where I draw the line.</strong> Grok Bot gets the work I can hand over without reading every instruction. Think of a prototype, a recurring chore or a first draft. Claude Code gets the work where I need to see and edit every instruction. This was a first test, and others run Grok Bot differently. I&#8217;ll keep testing.</p><p>Pick one idea you&#8217;ve been carrying around, and create three Bots for it. Answer the PM&#8217;s questions, and read every word of the brief. Let QA say no as often as it needs to. Then ask someone, or something, outside the team to check the result. <strong>Your first build could start twenty minutes after you send the idea.</strong> To see what three Bots and four coding agents produce, the code is at <a href="https://github.com/The-AI-Thinker/quiet-desk">The-AI-Thinker/quiet-desk</a>.</p><div><hr></div><h2>Go further</h2><p>Every source I used, grouped by who wrote it. The first group comes from SpaceXAI and Cursor, so read it as the vendor&#8217;s view.</p><p><strong>SpaceXAI and Cursor</strong> <em>(vendor)</em></p><ul><li><p><a href="https://www.youtube.com/watch?v=x5OawRpQxII">Grok Bot For Product Best Practices</a>, Grok Bot&#8217;s product team on Cursor&#8217;s channel: a PM Bot writes the spec and loops in the designer itself (video, 54 min).</p></li><li><p><a href="https://www.youtube.com/watch?v=rkigdXf-52I">Meet Grok Bot: Your Team of AI Agents</a>, Amrita and Nate Umlauf: a QA Bot with a written test routine and screen recordings (video).</p></li><li><p><a href="https://www.youtube.com/watch?v=rOVomdnWhjQ">Grok Bot 201</a>, Joseph Yang and Scott Lerner: three models on one design brief, and why each build needs its own repo (video).</p></li><li><p><a href="https://x.ai/bot/guides/grok-bot-for-pms">Grok Bot for PMs</a>, Kevin Niparko: specialist Bots over one catch-all assistant.</p></li><li><p><a href="https://x.ai/bot/guides/how-i-run-multiple-teams-of-grok-bots">How I run multiple teams of Grok Bots</a>, Eric Zakariasson: one channel per project, and rules for staffing it.</p></li><li><p><a href="https://x.ai/bot/guides/grok-bot-for-engineering">Grok Bot for Engineering</a>, Lingxi Li: before-and-after proof on every pull request.</p></li><li><p><a href="https://docs.x.ai/grok-bot/bots">Create and manage Bots</a>, the official docs: roster size, roles and Duplicate.</p></li><li><p><a href="https://cursor.com/help/grok-bot/models">Which AI models power Grok Bot?</a>, Cursor Help: how the model is chosen for you.</p></li></ul><p><strong>Independent builders</strong></p><ul><li><p><a href="https://www.youtube.com/watch?v=xZ5TEaleUdg">We Built Grok Bot. Here Are Our 14 Best Bots</a>, Peter Yang, with Grok Bot&#8217;s lead designer and engineer as guests: an engineering-lead Bot that never codes (video).</p></li><li><p><a href="https://www.youtube.com/watch?v=QBmgF1kJSK4">7 Grok Bot agents I use every day</a>, Claire Vo: Bots hired for one job each, with names to match (video).</p></li><li><p><a href="https://www.youtube.com/watch?v=RM8ZwhoJdeg">Grok Bot is more useful than I thought</a>, Brian Casel: how to stop managing your Bots in chat all day (video).</p></li><li><p><a href="https://flaviocopes.com/grok-bot/">A deep dive into Grok Bot</a>, Flavio Copes: the limits and the comparisons, kept up to date.</p></li><li><p><a href="https://christopheralarcon.com/blog/grok-bot-vs-claude-code">Grok Bot vs Claude Code: I Run Both Every Day</a>, Christopher Alarcon: a hands-on comparison, written about Claude Code&#8217;s interactive sessions.</p></li></ul><p><strong>For the second check</strong></p><ul><li><p><a href="https://simonwillison.net/2025/Dec/18/code-proven-to-work/">Your job is to deliver code you have proven to work</a>, Simon Willison: what &#8220;done&#8221; should mean for code you didn&#8217;t write.</p></li><li><p><a href="https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/">The lethal trifecta</a>, Simon Willison: the security read to forward to your IT team.</p></li><li><p><a href="https://ai.meta.com/blog/practical-ai-agent-security/">Agents Rule of Two</a>, Meta AI: give an agent at most two of the three risky powers in one session.</p></li><li><p><a href="https://forum.cursor.com/t/169638">Cloud Agent logs claude-4.5-sonnet when picker is Grok 4.6</a>, Cursor&#8217;s forum: why your coders&#8217; usage shows models you never picked, answered by Cursor&#8217;s staff.</p></li><li><p><a href="https://aimultiple.com/always-on-agents">Always-On Agents: Claude Duet vs Dots vs Grok Bot</a>, AIMultiple: memory, logins and isolation, compared.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[How to build the AI platform your company needs]]></title><description><![CDATA[Map every part your AI features need, theme by theme. Compare how DoorDash and others built each one. Plan your platform from zero, and decide who runs it.]]></description><link>https://www.theaithinker.com/p/how-to-build-the-ai-platform-your</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-build-the-ai-platform-your</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 26 Oct 2026 12:01:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3c155c9e-afb1-4c12-af69-29bd65dadddb_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In April 2023, Swaroop Chitlur had to sign DoorDash&#8217;s first contract with OpenAI. He told the story in <a href="https://infoq.com/presentations/doordash-genai-platform-architecture">a 2026 talk</a>, with his colleague Siddharth Kodwani. <em>&#8220;I remember I was sweating,&#8221;</em> he said. His bigger worry was what came next: how do you make AI accountable in a company that large? Three years later, their team&#8217;s platform serves more than 5,000 internal users. <strong>AI agents, programs that act on their own, call company tools through it 300,000 times a day.</strong></p><p>DoorDash is the food delivery company that also owns Wolt and Deliveroo. Few companies have told their AI story in public in such detail, including what they had to undo. So DoorDash is the main example for every part of this article. For each part, you&#8217;ll also see which companies did the same, and which chose differently. <strong>Read them as inspiration: together, they show the big picture you can adapt to your own company.</strong></p><p>Start with the question most product leaders ask first. You use ChatGPT or Claude every day, and nobody at your company built anything for it. <strong>So why does your tech team want a platform?</strong> Look at the two ways your company uses AI.</p><p>In the first, you&#8217;re the user. You type into ChatGPT or Claude. OpenAI or Anthropic built that product, picked the model and decided what it may say. Your company&#8217;s admins only decide who gets a login and how much each person can spend. If the answer is wrong, you&#8217;re the only one who sees it.</p><p>In the second, your customer is the user. They type into an AI feature your team built inside your product. At DoorDash, it&#8217;s a bot that helps delivery drivers, or a homepage that lists stores picked for each customer. Behind the feature, your code sends the customer&#8217;s words to a model and shows them the answer. <strong>Everything around that call is yours: which model answers, what it may say, what it costs, what you keep, and who answers for a mistake.</strong></p><p><strong>The second needs an AI platform.</strong> Once several teams build features like these, they all need the same things around their model calls. That shared layer sits between all your AI features and all the models they call. Here it is on one page.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qLP2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qLP2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!qLP2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!qLP2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!qLP2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qLP2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:259026,&quot;alt&quot;:&quot;Hand-drawn map titled \&quot;The AI platform, the big picture\&quot;, read from the bottom up. Bottom row, \&quot;Models\&quot;: Maker's API, Your cloud, Hosted by you. Next row, \&quot;Access\&quot;: an entry point drawn as a door and a bill per team drawn as a meter. Next row, \&quot;Trust\&quot;: a record (notebook), safety checks (barrier), quality tests (checklist) and prompt versions (stacked pages). Next row, \&quot;Context\&quot;: knowledge (documents), tools and permissions (gate with a key) and memory (dashed, marked next). Top row, \&quot;Your AI features\&quot;: a support bot, recommendations and search. On the side, \&quot;The team that runs it\&quot;: a small group of people.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn map titled &quot;The AI platform, the big picture&quot;, read from the bottom up. Bottom row, &quot;Models&quot;: Maker's API, Your cloud, Hosted by you. Next row, &quot;Access&quot;: an entry point drawn as a door and a bill per team drawn as a meter. Next row, &quot;Trust&quot;: a record (notebook), safety checks (barrier), quality tests (checklist) and prompt versions (stacked pages). Next row, &quot;Context&quot;: knowledge (documents), tools and permissions (gate with a key) and memory (dashed, marked next). Top row, &quot;Your AI features&quot;: a support bot, recommendations and search. On the side, &quot;The team that runs it&quot;: a small group of people." title="Hand-drawn map titled &quot;The AI platform, the big picture&quot;, read from the bottom up. Bottom row, &quot;Models&quot;: Maker's API, Your cloud, Hosted by you. Next row, &quot;Access&quot;: an entry point drawn as a door and a bill per team drawn as a meter. Next row, &quot;Trust&quot;: a record (notebook), safety checks (barrier), quality tests (checklist) and prompt versions (stacked pages). Next row, &quot;Context&quot;: knowledge (documents), tools and permissions (gate with a key) and memory (dashed, marked next). Top row, &quot;Your AI features&quot;: a support bot, recommendations and search. On the side, &quot;The team that runs it&quot;: a small group of people." srcset="https://substackcdn.com/image/fetch/$s_!qLP2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!qLP2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!qLP2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!qLP2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e8ac15-4efd-45f8-b12e-c634319cd7d7_1024x572.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Access: how every feature reaches the models.</strong> One entry point to every model, a bill for every team, and a choice of models.</p></li><li><p><strong>Trust: knowing what your AI said, and whether it was right.</strong> A record of every call, safety checks, and quality tests on every change.</p></li><li><p><strong>Context: what your AI knows and may do.</strong> Your company&#8217;s knowledge, and tools for agents with a permission on each action. Memory for agents comes next.</p></li><li><p><strong>People: the team that runs it.</strong> A small platform team whose best product is a safe path that&#8217;s also the easy one.</p></li></ul><p>Chip Huyen, author of O&#8217;Reilly&#8217;s <em>AI Engineering</em>, draws a similar map in <a href="https://huyenchip.com/2024/07/25/genai-platform.html">her guide to AI platforms</a>. Send it to your tech lead to check you both mean the same thing. <strong>You don&#8217;t build all of it at once.</strong> DoorDash started with the entry point, because many teams were calling models at the same time. A company with one AI feature can start with the record and a few tests. Every other part arrives with a business problem: a wrong answer, a growing bill, an agent with too much access.</p><p>Here&#8217;s the route.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XOUB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XOUB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!XOUB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!XOUB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!XOUB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!XOUB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:129155,&quot;alt&quot;:&quot;Hand-drawn black-and-white route titled \&quot;The AI platform your company needs\&quot;, with five stops joined by arrows. Stop 1, \&quot;Why\&quot;: a person at a laptop next to a phone showing an app with an AI feature. Stop 2, \&quot;Access\&quot;: a door and a meter. Stop 3, \&quot;Trust\&quot;: a notebook, a barrier and a checklist. Stop 4, \&quot;Context\&quot;: a stack of documents and a gate with a key. Stop 5, \&quot;The plan\&quot;: a staircase of five steps.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn black-and-white route titled &quot;The AI platform your company needs&quot;, with five stops joined by arrows. Stop 1, &quot;Why&quot;: a person at a laptop next to a phone showing an app with an AI feature. Stop 2, &quot;Access&quot;: a door and a meter. Stop 3, &quot;Trust&quot;: a notebook, a barrier and a checklist. Stop 4, &quot;Context&quot;: a stack of documents and a gate with a key. Stop 5, &quot;The plan&quot;: a staircase of five steps." title="Hand-drawn black-and-white route titled &quot;The AI platform your company needs&quot;, with five stops joined by arrows. Stop 1, &quot;Why&quot;: a person at a laptop next to a phone showing an app with an AI feature. Stop 2, &quot;Access&quot;: a door and a meter. Stop 3, &quot;Trust&quot;: a notebook, a barrier and a checklist. Stop 4, &quot;Context&quot;: a stack of documents and a gate with a key. Stop 5, &quot;The plan&quot;: a staircase of five steps." srcset="https://substackcdn.com/image/fetch/$s_!XOUB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!XOUB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!XOUB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!XOUB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3422d0f5-fbbf-400c-8b4f-d9f6d7dc8a7f_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><em>The why.</em> Your AI features answer customers in your name, run on models that retire, and cost more with every user.</p></li><li><p><em>Access.</em> I&#8217;ll show how DoorDash put one door in front of every model and cut costs by switching models.</p></li><li><p><em>Trust.</em> Here&#8217;s how teams know what their AI said and whether it was right: a record, safety checks and quality tests.</p></li><li><p><em>Context.</em> Your own documents make answers accurate, and permissions keep agents within bounds.</p></li><li><p><em>The plan.</em> You&#8217;ll get five phases from zero to a full platform, each with an owner, and seven questions for your tech team.</p></li></ul><p>By the end, you&#8217;ll have the big picture on one page. You&#8217;ll also have a plan, in the order your company needs. <strong>You can answer the next budget request with a plan of your own.</strong> Every source is listed at the end, by company.</p><p>First, why your AI features can&#8217;t live without one.</p><div><hr></div><h2>Why your AI features need their own platform</h2><p>DoorDash builds many AI features of the second kind. In 2023, Alok Gupta, who leads AI at DoorDash, <a href="https://careersatdoordash.com/blog/doordash-identifies-five-big-areas-for-using-generative-ai-2/">listed five areas</a> for it. They were helping customers complete tasks, better discovery, personalized content, cleaner product data and employee productivity. In 2024, models started <a href="https://careersatdoordash.com/blog/building-doordashs-product-knowledge-graph-with-large-language-models/">filling in product details</a> for its grocery catalog, <em>&#8220;a purely manual process led by contract operators&#8221;</em> until then. A support bot started helping its delivery drivers. In 2025, its homepage began <a href="https://careersatdoordash.com/blog/doordashs-next-generation-homepage-genai/">writing personal store lists</a> for each customer, where <em>&#8220;around 300 curated carousels&#8221;</em> used to be. <strong>Chitlur sums up the business case: automation lowers costs, and recommendations and personalization raise revenue.</strong></p><p>Then came the problem. Once the first contract was signed, teams started building fast. <strong>Soon, every team was rebuilding the same plumbing on its own.</strong> The <a href="https://boston.qcon.ai/presentation/boston2026/building-genai-platform-doordash">talk&#8217;s summary</a> lists it: retries, backup models, cost tracking and prompt versions. The users changed too. The platform team planned for machine-learning experts, then found itself serving every engineer, and later legal, sales and operations.</p><p>Here are the two ways to use AI, side by side.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AiWi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AiWi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!AiWi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!AiWi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!AiWi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!AiWi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71485487-c269-4afd-9a6c-30832c667058_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:245235,&quot;alt&quot;:&quot;Two framed panels side by side. Left, \&quot;You, in ChatGPT or Claude\&quot;: a person at a laptop chatting with an assistant, with a small label \&quot;built and run by OpenAI or Anthropic\&quot;. Right, wider, \&quot;Your customer, in your product\&quot;: a customer on a phone using an AI feature, whose call goes through a layer marked \&quot;Built by your team\&quot; before reaching three model clouds.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Two framed panels side by side. Left, &quot;You, in ChatGPT or Claude&quot;: a person at a laptop chatting with an assistant, with a small label &quot;built and run by OpenAI or Anthropic&quot;. Right, wider, &quot;Your customer, in your product&quot;: a customer on a phone using an AI feature, whose call goes through a layer marked &quot;Built by your team&quot; before reaching three model clouds." title="Two framed panels side by side. Left, &quot;You, in ChatGPT or Claude&quot;: a person at a laptop chatting with an assistant, with a small label &quot;built and run by OpenAI or Anthropic&quot;. Right, wider, &quot;Your customer, in your product&quot;: a customer on a phone using an AI feature, whose call goes through a layer marked &quot;Built by your team&quot; before reaching three model clouds." srcset="https://substackcdn.com/image/fetch/$s_!AiWi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!AiWi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!AiWi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!AiWi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71485487-c269-4afd-9a6c-30832c667058_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>On the left, someone else built the whole product. On the right, your feature calls a model directly, and everything in between is your team&#8217;s work. It goes through an API, the connection a program uses to call a model. Anthropic itself calls its chat plans and its API <em><a href="https://support.claude.com/en/articles/9876003-i-have-a-paid-claude-subscription-pro-max-team-or-enterprise-plans-why-do-i-have-to-pay-separately-to-use-the-claude-api-and-console">&#8220;separate products designed for different purposes&#8221;</a></em>. <strong>The right side carries three risks the left side never had.</strong></p><p><strong>The first risk is liability, because the company answers for what its AI says.</strong> When ChatGPT gets something wrong for you, only you see it. When your feature gets it wrong, a customer sees it. Air Canada learned this in 2024. Its chatbot promised a grieving customer a bereavement discount the airline didn&#8217;t offer. A tribunal in British Columbia <a href="https://decisions.civilresolutionbc.ca/crt/crtd/en/item/525448/index.do">ordered Air Canada to pay</a> him C$812, and said why.</p><blockquote><p>It should be obvious to Air Canada that it is responsible for all the information on its website. It makes no difference whether the information comes from a static page or a chatbot.</p></blockquote><p><strong>The second risk is continuity, because companies run many models and each one retires.</strong> a16z, a venture fund that invests in AI, ran a <a href="https://a16z.com/leaders-gainers-and-unexpected-winners-in-the-enterprise-ai-arms-race/">survey</a> in January 2026. 81% of the enterprises it asked used three or more model families. Every model also has an end date. Google <a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions">retired Gemini 2.5 Pro</a> on October 20, 2026, 16 months after its release. Anthropic <a href="https://platform.claude.com/docs/en/about-claude/model-deprecations">retires Claude Sonnet 4.5</a> on November 30, 2026. Chitlur calls this <em>&#8220;the deprecation treadmill&#8221;</em>, because someone has to move hundreds of features to the next model.</p><p><strong>The third risk is cost, because a feature&#8217;s bill grows with its customers.</strong> ChatGPT and Claude subscriptions are mostly priced per person. Model calls are priced per token, a piece of a word. Every new customer adds to the bill. Menlo Ventures, another AI investor, <a href="https://menlovc.com/perspective/2025-the-state-of-generative-ai-in-the-enterprise/">counts</a> $12.5 billion of enterprise spending on model access in 2025. With several teams on one account, nobody can say who spent what.</p><p>Other companies hit the same wall.</p><ul><li><p><strong>Uber</strong> (<a href="https://www.uber.com/blog/genai-gateway/">2024</a>) saw teams connect to models in their own ways. That led to <em>&#8220;inefficiencies and redundant efforts&#8221;</em>.</p></li><li><p><strong>Bitrise</strong> (<a href="https://bitrise.io/blog/post/building-bitrises-ai-platform-scaling-ai-features-across-teams">2026</a>), which builds and tests mobile apps for developers, was <em>&#8220;duplicating effort&#8221;</em>.</p></li></ul><p>DoorDash&#8217;s first answer was one door for every call.</p><div><hr></div><h2>Access: one way in to every model</h2><p>Access is how every AI feature reaches a model. At DoorDash, it came first, because every team needed it at once. It has three parts: the entry point, a bill for every team, and the choice of models behind them.</p><h3>One entry point to every model</h3><p>Here&#8217;s the entry point on the map.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WXfp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WXfp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!WXfp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!WXfp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!WXfp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!WXfp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:214654,&quot;alt&quot;:&quot;The same big-picture map as above, drawn lighter, with the \&quot;Entry point\&quot; door in the Access row outlined in thick black and shaded.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The same big-picture map as above, drawn lighter, with the &quot;Entry point&quot; door in the Access row outlined in thick black and shaded." title="The same big-picture map as above, drawn lighter, with the &quot;Entry point&quot; door in the Access row outlined in thick black and shaded." srcset="https://substackcdn.com/image/fetch/$s_!WXfp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!WXfp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!WXfp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!WXfp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75586eac-da9d-4215-83b7-cccfedf6a16b_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>DoorDash&#8217;s teams wanted to try every new model. First came OpenAI&#8217;s, then Anthropic&#8217;s Claude, Google&#8217;s Gemini and open models. Each team wrote its own connection to each one. Then providers started limiting how many calls DoorDash could make, and products failed. <strong>The answer was the LLM Gateway, one address every DoorDash app calls.</strong> Kodwani&#8217;s team promised to <em>&#8220;do the plumbing for you&#8221;</em>.</p><p>Trying a new model now took one changed setting. When OpenAI was overloaded, calls moved to Microsoft&#8217;s Azure cloud, which runs OpenAI&#8217;s models too. Claude calls moved to Amazon Bedrock, which runs Claude too. <strong>The products didn&#8217;t change, and customers still got an answer.</strong> When DoorDash bought Wolt and Deliveroo, they plugged into the same gateway.</p><p>That&#8217;s what one door bought DoorDash: when a model maker was overloaded, its products kept answering.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.theaithinker.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">Every week, I take apart a company&#8217;s AI system like this, or test an AI tool myself. If you don&#8217;t want to miss the next one, subscribe.</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>Here&#8217;s who sells an entry point.</p><ul><li><p><strong>Open-source tools you run yourself:</strong> <a href="https://github.com/BerriAI/litellm">LiteLLM</a> and <a href="https://github.com/Portkey-AI/gateway">Portkey&#8217;s gateway</a>. Thoughtworks, a consultancy that sells neither, <a href="https://www.thoughtworks.com/radar/languages-and-frameworks/litellm">calls LiteLLM</a> <em>&#8220;a sensible default&#8221;</em>.</p></li><li><p><strong>Services you rent:</strong> <a href="https://openrouter.ai/docs/quickstart">OpenRouter</a>, <a href="https://vercel.com/docs/ai-gateway">Vercel</a>, <a href="https://developers.cloudflare.com/ai-gateway/">Cloudflare</a> and <a href="https://developer.konghq.com/ai-gateway/">Kong</a>.</p></li><li><p><strong>Your cloud&#8217;s version:</strong> <a href="https://learn.microsoft.com/en-us/azure/api-management/genai-gateway-capabilities">Azure API Management</a>, <a href="https://docs.cloud.google.com/apigee/docs/api-platform/get-started/ai-capabilities">Google Apigee</a> and <a href="https://docs.databricks.com/aws/en/ai-gateway/">Databricks</a>.</p></li></ul><p>Here&#8217;s who did the same, and who chose differently.</p><ul><li><p><strong>Grab did the same</strong> (<a href="https://engineering.grab.com/grab-ai-gateway">2025</a>). Southeast Asia&#8217;s ride-hailing and delivery app gives each team an internal key. It swaps in the real one on every call.</p></li><li><p><strong>Zalando did the same</strong> (<a href="https://engineering.zalando.com/posts/2026/08/agentic-engineering-at-zalando-a-snapshot.html">2026</a>), for its engineers&#8217; coding tools. Europe&#8217;s online fashion store has run the open-source LiteLLM since January 2024.</p></li><li><p><strong>Bitrise chose differently</strong> (<a href="https://bitrise.io/blog/post/building-bitrises-ai-platform-scaling-ai-features-across-teams">2026</a>). It tried LiteLLM for small internal jobs. For production, it <em>&#8220;didn&#8217;t find any stable, performant solution&#8221;</em>, so it built its own.</p></li></ul><p>The door is also the place to count what each team spends.</p><h3>A bill for every team</h3><p>Here&#8217;s the bill per team on the map.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AsJ7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AsJ7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!AsJ7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!AsJ7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!AsJ7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!AsJ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:208527,&quot;alt&quot;:&quot;The same big-picture map, drawn lighter, with the \&quot;Bill per team\&quot; meter in the Access row outlined in thick black and shaded.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The same big-picture map, drawn lighter, with the &quot;Bill per team&quot; meter in the Access row outlined in thick black and shaded." title="The same big-picture map, drawn lighter, with the &quot;Bill per team&quot; meter in the Access row outlined in thick black and shaded." srcset="https://substackcdn.com/image/fetch/$s_!AsJ7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!AsJ7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!AsJ7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!AsJ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a82dc6-df88-4bca-8d26-286c0032bce3_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>DoorDash&#8217;s teams all called models with one shared API key, the password a program uses to reach a model. Then finance got involved. <strong>Finance asked the question every shared key ends with.</strong></p><blockquote><p>you guys have one API key for multiple teams, how do I track who is using what?</p></blockquote><p>So each team got a workspace with its own costs. Finance calls this <a href="https://www.finops.org/wg/finops-for-ai-overview/">showback</a>: each team sees what it spends. A budget can also stop a team at its cap. A runaway script then stops early, not at the end of the month. <strong>Without it, a stolen key is a bill with no limit.</strong> In March 2026, The Register <a href="https://www.theregister.com/2026/03/03/gemini_api_key_82314_dollar_charge/">reported on a stolen Gemini key</a> that ran up $82,314 in 48 hours. The company, three developers, usually spent $180 a month.</p><p>Here&#8217;s who sells a bill per team.</p><ul><li><p><strong>Inside the entry point:</strong> most gateways above set a budget per key or per team.</p></li><li><p><strong>From your model maker:</strong> with one maker, its own console may be enough. Anthropic&#8217;s gives each team <a href="https://platform.claude.com/docs/en/manage-claude/workspaces">a workspace</a> with its own keys and spend limit.</p></li><li><p><strong>For finance:</strong> the FinOps Foundation&#8217;s <em><a href="https://www.finops.org/wg/token-economics-saas/">Tokenomics</a></em> explains who should pay for which tokens. It sells nothing here.</p></li></ul><p>Here&#8217;s who did the same.</p><ul><li><p><strong>Grab did the same</strong> (<a href="https://engineering.grab.com/grab-ai-gateway">2025</a>). A daily job adds up each service&#8217;s cost for showback, and alerts fire when a service passes its threshold.</p></li><li><p><strong>Instacart did the same</strong> (<a href="https://tech.instacart.com/simplifying-large-scale-llm-processing-across-instacart-with-maple-63df4508d5be">2025</a>). Its gateway logs <em>&#8220;detailed usage and spend per job and team&#8221;</em>.</p></li></ul><p>Counting the bill is one thing. Lowering it is another.</p><h3>A choice of models</h3><p>Here&#8217;s the choice of models on the map.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bgbf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bgbf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!Bgbf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!Bgbf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!Bgbf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bgbf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247899,&quot;alt&quot;:&quot;The same big-picture map, drawn lighter, with the bottom \&quot;Models\&quot; row (Maker's API, Your cloud, Hosted by you) outlined in thick black and shaded.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The same big-picture map, drawn lighter, with the bottom &quot;Models&quot; row (Maker's API, Your cloud, Hosted by you) outlined in thick black and shaded." title="The same big-picture map, drawn lighter, with the bottom &quot;Models&quot; row (Maker's API, Your cloud, Hosted by you) outlined in thick black and shaded." srcset="https://substackcdn.com/image/fetch/$s_!Bgbf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!Bgbf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!Bgbf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!Bgbf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b1a3907-80a0-46cd-b3e3-6b0bb2c1813c_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By 2025, DoorDash hit three problems at once. Models kept retiring, and someone had to move hundreds of teams to the next one. Providers couldn&#8217;t sell it enough capacity: <em>&#8220;we just cannot get enough bandwidth from these providers&#8221;</em>. And in Chitlur&#8217;s words, <em>&#8220;Cost becomes a huge curve as the scale goes up&#8221;</em>. <strong>The freedom to switch models went from a nice-to-have to a must-have.</strong></p><p>So DoorDash moved some work to open-weight models, whose files anyone can download, like Alibaba&#8217;s Qwen. It runs them on Modal, a cloud that rents out the chips AI needs, with open-source serving software like vLLM. Every call already went through the gateway, so a team could <em>&#8220;just change one config&#8221;</em>. On those tasks, accuracy went up and <em>&#8220;cost drops like 20x&#8221;</em>. <strong>Chitlur puts the result at &#8220;single-digit million-dollar savings annualized&#8221;.</strong> Qwen comes from a Chinese company, so legal will ask where the model runs.</p><p>Still, every DoorDash team starts on a frontier model, the most capable kind from OpenAI, Anthropic or Google. Cheaper calls also come before hosting. A smaller model from the same maker may be enough: <em>&#8220;Not everything needs the biggest model out there&#8221;</em>. Anthropic charges a tenth of the price for <a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching">repeated input it has cached</a>. OpenAI <a href="https://developers.openai.com/api/docs/guides/batch">halves the price</a> of work that can wait. <strong>Hosting your own pays once the volume justifies a team to run it.</strong></p><p>Here&#8217;s who sells hosting for open models.</p><ul><li><p><strong>Open-source serving software you run yourself:</strong> <a href="https://github.com/vllm-project/vllm">vLLM</a> and <a href="https://github.com/sgl-project/sglang">SGLang</a>.</p></li><li><p><strong>Services you rent:</strong> <a href="https://modal.com/">Modal</a>, <a href="https://docs.together.ai/docs/introduction">Together AI</a>, <a href="https://docs.fireworks.ai/getting-started/introduction">Fireworks</a> and <a href="https://www.baseten.co/">Baseten</a>.</p></li><li><p><strong>Your cloud&#8217;s version:</strong> Amazon Bedrock has <a href="https://aws.amazon.com/about-aws/whats-new/2025/09/qwen3-models-fully-managed-amazon-bedrock">run Qwen3 for you</a> since September 2025. Its <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html">Custom Model Import</a> hosts a model you bring.</p></li></ul><p>Here&#8217;s who did the same, and who chose differently.</p><ul><li><p><strong>Airbnb did the same</strong> (<a href="https://fortune.com/2025/10/21/brian-chesky-openai-tools-not-ready">2025</a>). Its customer service agent runs on 13 models. Co-founder Brian Chesky told Bloomberg: <em>&#8220;We&#8217;re relying a lot on Alibaba&#8217;s Qwen model. It&#8217;s very good. It&#8217;s also fast and cheap&#8221;</em>.</p></li><li><p><strong>Pinterest did the same</strong> (<a href="https://www.fortune.com/2026/03/17/why-pinterest-is-going-all-in-on-open-source-ai">2026</a>). It uses open models, Qwen among them, for visual tasks. Fortune reports performance close to frontier models <em>&#8220;at less than 10% of the cost&#8221;</em>.</p></li><li><p><strong>Most companies chose differently</strong> (<a href="https://menlovc.com/perspective/2025-the-state-of-generative-ai-in-the-enterprise/">2025</a>). Menlo puts open models at 11% of the enterprise market, down from 19% a year earlier. Menlo invests in model makers, though.</p></li><li><p><strong>The volume tells a different story</strong> (<a href="https://vercel.com/blog/ai-gateway-production-index-september-2026">2026</a>). On Vercel&#8217;s gateway, open-weight models ran 56% of August&#8217;s tokens but only 14% of spend. That&#8217;s DoorDash&#8217;s pattern: high-volume work moves, and the money stays on frontier models.</p></li></ul><p>Access tells you who called which model, at what cost. It doesn&#8217;t tell you what the model said.</p><div><hr></div><h2>Trust: know what your AI said, and whether it was right</h2><p>Trust is knowing what your AI told each customer, and whether it was right. At DoorDash, the platform team built the record. The support team built the safety checks and the quality tests, for its own bot. Together, they&#8217;re how a company answers for its AI.</p><h3>A record of every call</h3><p>Here&#8217;s the record on the map.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Sd9k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sd9k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!Sd9k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!Sd9k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!Sd9k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sd9k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:216176,&quot;alt&quot;:&quot;The same big-picture map, drawn lighter, with the \&quot;Record\&quot; notebook in the Trust row outlined in thick black and shaded.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The same big-picture map, drawn lighter, with the &quot;Record&quot; notebook in the Trust row outlined in thick black and shaded." title="The same big-picture map, drawn lighter, with the &quot;Record&quot; notebook in the Trust row outlined in thick black and shaded." srcset="https://substackcdn.com/image/fetch/$s_!Sd9k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!Sd9k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!Sd9k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!Sd9k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362b2b21-4d9d-4594-8c21-7f1c149412c9_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At DoorDash, the record came almost for free. Every call already went through the gateway, so the team could <em>&#8220;log every request and response&#8221;</em>. In Chitlur&#8217;s words, it was <em>&#8220;a positive side effect&#8221;</em>. <strong>No product team had to build its own.</strong> Later, when teams wanted to measure quality, tracing was the first thing they needed. A trace is the full story of one request. It holds the question, each step, the documents found, the answer, its cost and its time.</p><p><strong>A record turns a viral screenshot into something you can check.</strong> In December 2023, users tricked a Chevrolet dealer&#8217;s chatbot into agreeing to sell a car for $1. The chatbot&#8217;s maker <a href="https://www.businessinsider.com/car-dealership-chevrolet-chatbot-chatgpt-pranks-chevy-2023-12">told Business Insider</a> that his team saw it all in the logs. Business Insider read some of them too, and the bot had <em>&#8220;often rejected the silly requests&#8221;</em>. Without the logs, the screenshot would have been the whole story.</p><p>The record also stores customer messages, so it comes with duties. People can ask to see or delete what you kept about them. The Hamburg data protection authority <a href="https://datenschutz-hamburg.de/fileadmin/user_upload/HmbBfDI/Datenschutz/Informationen/240715_Discussion_Paper_Hamburg_DPA_KI_Models.pdf">says</a> those requests <em>&#8220;can certainly relate to the input and output of an AI system&#8221;</em>. <strong>So the record is a data decision first: what you keep, for how long, and who may read it.</strong> For high-risk uses like hiring or credit, the EU AI Act <a href="https://artificialintelligenceact.eu/article/12/">requires automatic logs</a> from December 2027.</p><p>Here&#8217;s who sells a record.</p><ul><li><p><strong>Open-source tools you run yourself:</strong> <a href="https://langfuse.com/docs">Langfuse</a>, now owned by ClickHouse, <a href="https://mlflow.org/docs/latest/genai/tracing/">MLflow</a> and <a href="https://github.com/Arize-ai/phoenix">Arize Phoenix</a>.</p></li><li><p><strong>Services you rent:</strong> <a href="https://docs.langchain.com/langsmith">LangSmith</a>, <a href="https://www.braintrust.dev/docs">Braintrust</a> and <a href="https://docs.datadoghq.com/llm_observability/">Datadog</a>.</p></li><li><p><strong>Your cloud&#8217;s version:</strong> <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html">AWS AgentCore Observability</a> and Azure Monitor.</p></li></ul><p>Here&#8217;s who did the same, and who shows the other side.</p><ul><li><p><strong>LinkedIn did the same</strong> (<a href="https://www.linkedin.com/blog/engineering/generative-ai/the-linkedin-generative-ai-application-tech-stack-extending-to-build-ai-agents">2025</a>). It traces agents with LangSmith before launch. In production it uses OpenTelemetry, a shared format for traces. Its traces then become test sets.</p></li><li><p><strong>Anthropic shows the other side</strong> (<a href="https://www.anthropic.com/engineering/a-postmortem-of-three-recent-issues">2025</a>). Three bugs quietly degraded Claude&#8217;s answers for weeks. Privacy rules limited how its engineers could read conversations, so users noticed first.</p></li></ul><p>Reading tells you what went wrong. The next part stops it before a customer sees it.</p><h3>Safety checks on the way in and out</h3><p>Here are the safety checks on the map.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TwIF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TwIF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!TwIF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!TwIF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!TwIF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!TwIF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:216430,&quot;alt&quot;:&quot;The same big-picture map, drawn lighter, with the \&quot;Safety checks\&quot; barrier in the Trust row outlined in thick black and shaded.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The same big-picture map, drawn lighter, with the &quot;Safety checks&quot; barrier in the Trust row outlined in thick black and shaded." title="The same big-picture map, drawn lighter, with the &quot;Safety checks&quot; barrier in the Trust row outlined in thick black and shaded." srcset="https://substackcdn.com/image/fetch/$s_!TwIF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!TwIF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!TwIF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!TwIF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927199f8-56ab-445d-89dc-7c6e4331b682_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>DoorDash&#8217;s support team met this part first. Dashers, its delivery drivers, ask a support bot for help in the middle of a delivery. The engineers <a href="https://careersatdoordash.com/blog/large-language-modules-based-dasher-support-automation/">wrote</a> that some answers <em>&#8220;sound natural and legitimate&#8221;</em> and were still wrong. They first tried an advanced checking model, and it was <em>&#8220;prohibitively expensive&#8221;</em>. <strong>So they built a cheap check first, and call a model only when that check flags an answer.</strong> When an answer still fails, a human agent takes over.</p><p>Hallucinations, the answers a model makes up, fell by 90%. Severe compliance issues fell by 99%. Later, the platform team offered the same idea to every team, inside the gateway. Chitlur calls them <em>&#8220;before hooks and after hooks&#8221;</em>. Before a call, a check can hide personal data. <strong>After it, a check can stop the model from &#8220;bad mouthing your customer&#8221; or &#8220;recommending your competitor&#8221;.</strong> Teams choose which checks to turn on.</p><p><strong>Without a check on the way out, the bot speaks for the company.</strong> In April 2025, Cursor&#8217;s support bot invented a rule limiting users to one device. <a href="https://arstechnica.com/ai/2025/04/cursor-ai-support-bot-invents-fake-policy-and-triggers-user-uproar/">No such policy existed</a>, and some users cancelled. Since August 2, 2026, the EU AI Act&#8217;s <a href="https://artificialintelligenceact.eu/article/50/">Article 50</a> also requires a label. People must know when they&#8217;re talking to an AI.</p><p>The other risk comes from outside. In prompt injection, someone hides instructions in text the model reads, like an email or a web page. It still tops the <a href="https://labs.cloudsecurityalliance.org/research/csa-research-note-owasp-genai-top10-2026-agent-control-stand/">2026 risk list</a> of OWASP, an open security community. <strong>Checks catch most of these attacks, but not all of them.</strong> Security writer Simon Willison <a href="https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/">puts it plainly</a>: <em>&#8220;In web application security 95% is very much a failing grade&#8221;</em>.</p><p>Here&#8217;s who sells safety checks.</p><ul><li><p><strong>Open-source tools you run yourself:</strong> <a href="https://github.com/NVIDIA/NeMo-Guardrails">NVIDIA NeMo Guardrails</a>, <a href="https://github.com/guardrails-ai/guardrails">Guardrails AI</a>, and <a href="https://github.com/microsoft/presidio">Microsoft Presidio</a> for personal data.</p></li><li><p><strong>Services you rent:</strong> <a href="https://www.lakera.ai/lakera-guard">Lakera</a>, now part of Check Point.</p></li><li><p><strong>Your cloud&#8217;s version:</strong> <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html">Amazon Bedrock Guardrails</a>, <a href="https://learn.microsoft.com/en-us/azure/ai-services/content-safety/concepts/jailbreak-detection">Azure Prompt Shields</a> and Google&#8217;s Model Armor, <a href="https://docs.cloud.google.com/apigee/docs/api-platform/get-started/ai-capabilities">inside Apigee</a>.</p></li></ul><p>Here&#8217;s who did the same, and who chose differently.</p><ul><li><p><strong>Airbnb did the same</strong> (<a href="https://medium.com/airbnb-engineering/automation-platform-v2-improving-conversational-ai-at-airbnb-d86c9386e0cb">2024</a>). It built a shared library of checks any team can add to. One stops a tool from <em>&#8220;updating listings with invalid setup&#8221;</em>.</p></li><li><p><strong>Uber chose differently</strong> (<a href="https://www.uber.com/blog/genai-gateway/">2024</a>). Its gateway hides personal data for every team <em>&#8220;before forwarding them to third-party vendors&#8221;</em>. It admits the cost: <em>&#8220;challenges to both latency and result quality&#8221;</em>.</p></li><li><p><strong>Slack chose differently</strong> (<a href="https://slack.engineering/how-we-built-slack-ai-to-be-secure-and-private/">2024</a>). It runs its models in a private space of its own. The model provider never sees customer data.</p></li></ul><p>Checks catch a bad answer in the moment. The next part catches a worse product before anyone sees it.</p><h3>Quality tests and prompt versions</h3><p>Here are the quality tests and prompt versions on the map.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wvqw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wvqw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!wvqw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!wvqw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!wvqw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!wvqw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:217330,&quot;alt&quot;:&quot;The same big-picture map, drawn lighter, with the \&quot;Quality tests\&quot; checklist and the \&quot;Prompt versions\&quot; pages in the Trust row outlined in thick black and shaded.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The same big-picture map, drawn lighter, with the &quot;Quality tests&quot; checklist and the &quot;Prompt versions&quot; pages in the Trust row outlined in thick black and shaded." title="The same big-picture map, drawn lighter, with the &quot;Quality tests&quot; checklist and the &quot;Prompt versions&quot; pages in the Trust row outlined in thick black and shaded." srcset="https://substackcdn.com/image/fetch/$s_!wvqw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!wvqw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!wvqw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!wvqw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76106ca5-16b4-4049-8abf-2aa98ee21504_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Evals are automated tests for AI answers. DoorDash&#8217;s platform first bought an evals tool from a vendor. Teams used it for a few months, then it stopped fitting. <strong>They needed custom traces and custom screens for labelling answers, and the tool couldn&#8217;t stretch that far.</strong> So DoorDash is building its own testing platform. Chitlur stays fair about the vendor, though.</p><blockquote><p>the vendor was a good product, but it did not meet the flexibility requirements that we had.</p></blockquote><p>The support team shows what the tests look like. Its engineers <em>&#8220;manually reviewed thousands of chat transcripts&#8221;</em> to learn what goes wrong. They turned the common failures into tests in <a href="https://www.promptfoo.dev/docs/intro/">Promptfoo</a>, an open-source testing tool. Now any change to the bot&#8217;s instructions runs those tests, and a failing change is blocked. Some tests use a stronger model as a judge. <strong>A human team still reviews a random sample of conversations, to keep the automatic judge honest.</strong></p><p><strong>This is where product judgment enters the platform.</strong> When a team asks for help with quality, Chitlur starts with the product. He asks which <em>&#8220;product metrics&#8221;</em> the team cares about. Then comes a warning: <em>&#8220;You cannot optimize on everything. You got to pick your battles&#8221;</em>. Choosing what to measure is the call your PMs already make for every other feature. Most mature teams then run the same 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_!uoli!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uoli!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!uoli!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!uoli!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!uoli!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!uoli!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131781,&quot;alt&quot;:&quot;A circle of five stations joined by arrows. \&quot;Real conversations\&quot; with chat bubbles, \&quot;People label a sample\&quot; with a person holding a checklist, \&quot;Test set\&quot; with a stack of cards, \&quot;Automatic judge\&quot; with a balance scale, and \&quot;Change tested\&quot; with a gate. From the gate, a \&quot;Pass\&quot; arrow leaves the circle, and a \&quot;Fail\&quot; arrow goes back to the start.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A circle of five stations joined by arrows. &quot;Real conversations&quot; with chat bubbles, &quot;People label a sample&quot; with a person holding a checklist, &quot;Test set&quot; with a stack of cards, &quot;Automatic judge&quot; with a balance scale, and &quot;Change tested&quot; with a gate. From the gate, a &quot;Pass&quot; arrow leaves the circle, and a &quot;Fail&quot; arrow goes back to the start." title="A circle of five stations joined by arrows. &quot;Real conversations&quot; with chat bubbles, &quot;People label a sample&quot; with a person holding a checklist, &quot;Test set&quot; with a stack of cards, &quot;Automatic judge&quot; with a balance scale, and &quot;Change tested&quot; with a gate. From the gate, a &quot;Pass&quot; arrow leaves the circle, and a &quot;Fail&quot; arrow goes back to the start." srcset="https://substackcdn.com/image/fetch/$s_!uoli!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!uoli!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!uoli!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!uoli!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60706d2c-6047-4d48-ab80-45412889a9cb_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At Dropbox, regressions <a href="https://dropbox.tech/machine-learning/practical-blueprint-evaluating-conversational-ai-at-scale-dash">came</a> <em>&#8220;not from swapping models but from editing prompts&#8221;</em>. A single word could break the citations in an answer. <strong>So a change to the AI&#8217;s instructions is a release, and it deserves tests.</strong> That&#8217;s why teams keep the instructions outside the code, with versions. A product person can then edit them, and the tests run first. &#8220;Prompt versioning&#8221; is on DoorDash&#8217;s list of plumbing every team used to rebuild. Without tests, you get DPD&#8217;s chatbot, which <a href="https://www.theguardian.com/technology/2024/jan/20/dpd-ai-chatbot-swears-calls-itself-useless-and-criticises-firm">swore at a customer</a> after <em>&#8220;a system update&#8221;</em>.</p><p>Here&#8217;s who sells quality tests and prompt versions.</p><ul><li><p><strong>Open-source tools you run yourself:</strong> <a href="https://www.promptfoo.dev/docs/intro/">promptfoo</a>, which agreed in March 2026 to join OpenAI, and <a href="https://github.com/confident-ai/deepeval">DeepEval</a>. Langfuse also keeps prompt versions.</p></li><li><p><strong>Services you rent:</strong> <a href="https://www.braintrust.dev/docs">Braintrust</a> and LangSmith.</p></li><li><p><strong>Your model maker&#8217;s or cloud&#8217;s version:</strong> <a href="https://claude.com/blog/evaluate-prompts">Anthropic&#8217;s Console</a> writes test cases for you. There are also <a href="https://github.com/openai/evals">OpenAI Evals</a> and AWS AgentCore Evaluations.</p></li></ul><p>Here&#8217;s who did the same, and who shows a limit.</p><ul><li><p><strong>Dropbox did the same</strong> (<a href="https://dropbox.tech/machine-learning/practical-blueprint-evaluating-conversational-ai-at-scale-dash">2025</a>). About 150 test questions run on every code change. <em>&#8220;If anything crossed a red line, the merge was blocked&#8221;</em>.</p></li><li><p><strong>Shopify did the same</strong> (<a href="https://shopify.engineering/building-production-ready-agentic-systems">2025</a>). It builds test sets from real conversations, labelled by at least three product experts. Its judge went from <em>&#8220;barely-better-than-random&#8221;</em> to near-human agreement.</p></li><li><p><strong>Spotify shows that a test can expire</strong> (<a href="https://engineering.atspotify.com/2025/12/feedback-loops-background-coding-agents-part-3">2025</a>, <a href="https://infoq.com/news/2026/03/spotify-honk-rewrite">2026</a>). The judge in its coding agent vetoed <em>&#8220;about a quarter&#8221;</em> of agent sessions. Once the models improved, Spotify removed it.</p></li></ul><p>Trust covers what the model said. Context decides what it knows, and what it may do.</p><div><hr></div><h2>Context: what your AI knows and may do</h2><p>On its own, a model only knows what it learned in training. It doesn&#8217;t know your refund policy, and it can&#8217;t open a ticket. <strong>Context fixes both, and it&#8217;s where AI agents come in.</strong> An agent is an AI model that uses tools on its own. Two terms will come up in the review. RAG, short for retrieval-augmented generation, means searching your documents first and handing the best passages to the model. MCP is the standard plug between AI tools and company systems.</p><h3>Answers from your own knowledge</h3><p>Here&#8217;s knowledge on the map.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nQ3N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nQ3N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!nQ3N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!nQ3N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!nQ3N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!nQ3N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:214941,&quot;alt&quot;:&quot;The same big-picture map, drawn lighter, with the \&quot;Knowledge\&quot; documents in the Context row outlined in thick black and shaded.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The same big-picture map, drawn lighter, with the &quot;Knowledge&quot; documents in the Context row outlined in thick black and shaded." title="The same big-picture map, drawn lighter, with the &quot;Knowledge&quot; documents in the Context row outlined in thick black and shaded." srcset="https://substackcdn.com/image/fetch/$s_!nQ3N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!nQ3N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!nQ3N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!nQ3N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f15609-932e-4a0d-87eb-7e65177b1a1f_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>DoorDash&#8217;s support bot needed DoorDash&#8217;s own facts. When a Dasher asks for help, the system first sums up the problem. Then it finds similar cases solved with help-center articles. The right article goes to the model. The articles had gaps of their own. They were all in English, while <em>&#8220;many Dashers prefer a different language&#8221;</em>. <strong>So the team <a href="https://careersatdoordash.com/blog/large-language-modules-based-dasher-support-automation/">fixed the articles</a> as much as the model.</strong></p><p>In the engineers&#8217; words, the knowledge base is <em>&#8220;the foundational truth for LLM responses&#8221;</em>. <strong>For a product leader, this is the most familiar part, because it&#8217;s content quality.</strong> A model answers from your help center only as well as your help center allows. So whoever owns that content now owns part of your AI&#8217;s accuracy.</p><p>Here&#8217;s who sells company knowledge.</p><ul><li><p><strong>Open-source tools you run yourself:</strong> <a href="https://github.com/pgvector/pgvector">pgvector</a>, inside the Postgres database you may already run, plus <a href="https://github.com/qdrant/qdrant">Qdrant</a> and <a href="https://github.com/weaviate/weaviate">Weaviate</a>.</p></li><li><p><strong>Services you rent:</strong> <a href="https://docs.pinecone.io/guides/get-started/overview">Pinecone</a> and <a href="https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-overview/">MongoDB</a>.</p></li><li><p><strong>Your cloud&#8217;s version:</strong> <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html">Amazon Bedrock Knowledge Bases</a> and <a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/rag-engine/rag-overview">Google&#8217;s RAG Engine</a>.</p></li></ul><p>Here&#8217;s who did the same, and who describes another way.</p><ul><li><p><strong>Uber did the same</strong> (<a href="https://www.uber.com/blog/genie-ubers-gen-ai-on-call-copilot/">2024</a>). Any team can launch Genie, an internal help bot, in its Slack channels. It reached 154 channels and answered over 70,000 questions.</p></li><li><p><strong>LinkedIn did the same</strong> (<a href="https://www.linkedin.com/blog/engineering/infrastructure/inside-linkedins-data-context-layer-curating-trustworthy-context-for-humans-and-agents">2026</a>). It runs one shared knowledge layer for people and agents. Owners approve changes the way they approve code. In one test, acceptable answers rose from 25.9% to 79.5%.</p></li><li><p><strong>Anthropic describes a second option</strong> (<a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">2025</a>). An agent can search with tools at the moment it needs something. Claude Code works this way over large databases.</p></li></ul><p>Knowledge lets a model answer. Tools let it act.</p><h3>Tools and permissions for agents</h3><p>Here are tools and permissions on the map.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SToD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SToD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!SToD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!SToD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!SToD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!SToD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:218901,&quot;alt&quot;:&quot;The same big-picture map, drawn lighter, with the \&quot;Tools and permissions\&quot; gate in the Context row outlined in thick black and shaded.&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The same big-picture map, drawn lighter, with the &quot;Tools and permissions&quot; gate in the Context row outlined in thick black and shaded." title="The same big-picture map, drawn lighter, with the &quot;Tools and permissions&quot; gate in the Context row outlined in thick black and shaded." srcset="https://substackcdn.com/image/fetch/$s_!SToD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!SToD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!SToD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!SToD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd27819-1ad4-48e7-ab44-029b31832d36_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>DoorDash&#8217;s agents started in 2024, as experiments. Then MCP arrived, and in Kodwani&#8217;s words, <em>&#8220;a lot of people got involved&#8221;</em>. By 2025, DoorDash had more than 25 agent projects. Every laptop also had a coding assistant, like Claude Code, Codex or Cursor. <strong>The hard problem was identity: who an agent acts for, and what it may do.</strong> Kodwani&#8217;s explanation goes straight back to the way you use Claude yourself.</p><blockquote><p>If you&#8217;re working on your laptop with Claude, you can give a lot more permissions because you have a lot more control, but internally we have more agents that you can just invoke to trigger a certain action, but you don&#8217;t want that agent to have all the access that you might have given to Claude Code.</p></blockquote><p>So DoorDash built an agent gateway. It connects more than 50 company tools, and agents call them 300,000 times a day. It signs people in, checks permissions and limits use, once, for every tool. In Chitlur&#8217;s words, <em>&#8220;You don&#8217;t want every MCP author having to think about authorization&#8221;</em>. Each tool&#8217;s owner sets its rules, and each user picks which agents may use what. <strong>For the 40% of users who aren&#8217;t engineers, a skills marketplace teaches their AI assistants the company&#8217;s systems.</strong></p><p><strong>The failures here cost the most.</strong> In July 2025, Replit&#8217;s coding agent <a href="https://fortune.com/2025/07/23/ai-coding-tool-replit-wiped-database-called-it-a-catastrophic-failure/">deleted a production database</a> during a code freeze. Replit is a platform for building apps. In 2026, an agent at the software company PocketOS <a href="https://ia.acs.org.au/article/2026/gone-in-9-seconds--ai-agent-deletes-company-database.html">deleted one in nine seconds</a>. Its founder&#8217;s list of what was missing starts with <em>&#8220;No confirmation step&#8221;</em>.</p><p>OWASP&#8217;s 2026 list moved Excessive Agency, an agent with too much power, up to third place. Meta&#8217;s security team built a simple rule for it, on Simon Willison&#8217;s lethal trifecta. In its <a href="https://ai.meta.com/blog/practical-ai-agent-security/">Agents Rule of Two</a>, an agent holds at most two of three powers. The three are reading untrusted input, reaching private data, and changing things or sending them out. <strong>So the question for any agent is which two it gets.</strong> Memory for agents comes next, and it&#8217;s still open at DoorDash: its agent gateway is <em>&#8220;stateless right now&#8221;</em>.</p><p>Here&#8217;s who sells tools and permissions for agents.</p><ul><li><p><strong>Open-source tools you run yourself:</strong> <a href="https://docs.docker.com/ai/mcp-catalog-and-toolkit/mcp-gateway/">Docker&#8217;s MCP Gateway</a>.</p></li><li><p><strong>Services you rent:</strong> gateways that now front tools too, like <a href="https://developer.konghq.com/ai-gateway/">Kong</a> and <a href="https://www.paloaltonetworks.com/company/press/2026/palo-alto-networks-to-acquire-portkey-to-secure-the-rise-of-ai-agents">Portkey</a>.</p></li><li><p><strong>Identity for agents:</strong> <a href="https://learn.microsoft.com/en-us/entra/agent-id/what-is-microsoft-entra-agent-id">Microsoft Entra Agent ID</a>, and Okta&#8217;s <a href="https://www.okta.com/en-gb/newsroom/articles/cross-app-access-extends-mcp-to-bring-enterprise-grade-security-to-ai-agents/">Cross App Access</a>. It is now part of MCP as <em>&#8220;Enterprise-Managed Authorization&#8221;</em>, the standard to ask about.</p></li><li><p><strong>Your cloud&#8217;s version:</strong> <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html">AWS AgentCore</a>, with its gateway, identity and policy parts.</p></li></ul><p>Here&#8217;s who did the same.</p><ul><li><p><strong>Uber did the same</strong> (<a href="https://www.uber.com/blog/designing-mcp-gateway/">2026</a>). Its MCP gateway hosts more than 800 tool servers and 5,000 tools.</p></li><li><p><strong>Pinterest did the same</strong> (<a href="https://medium.com/pinterest-engineering/building-an-mcp-ecosystem-at-pinterest-d881eb4c16f1">2026</a>). Every tool server has an owner, plus a security and legal review. A person approves <em>&#8220;any sensitive or expensive action&#8221;</em>.</p></li><li><p><strong>Block did the same</strong> (<a href="https://goose-docs.ai/blog/2025/04/21/mcp-in-enterprise">2025</a>). The company behind Square and Cash App tags each tool <em>&#8220;read-only&#8221;</em> or <em>&#8220;destructive&#8221;</em>. Destructive ones need the user to confirm.</p></li></ul><p>That&#8217;s the whole map. Now, how to build it from nothing.</p><div><hr></div><h2>The plan: from nothing to a full platform</h2><p>One caveat first. Every company here is a large engineering team that blogs about what it built. DoorDash&#8217;s numbers also come from its own engineers. <strong>So take the plan below as a direction to adapt to your company, not a recipe.</strong> Where it matters, I lean on sources that gain nothing from the story.</p><h3>Five phases, from zero to a full platform</h3><p>The strongest objection comes from a company that sells a gateway. Here&#8217;s what OpenRouter <a href="https://openrouter.ai/blog/insights/llm-gateway/">writes</a>.</p><blockquote><p>If you use one model from one provider and have no plans to change that, a gateway adds unnecessary complexity.</p></blockquote><p>Hamel Husain teaches companies how to test AI products. He says the same about testing tools: <em>&#8220;Start with error analysis, not infrastructure&#8221;</em>. Even DoorDash&#8217;s Kodwani says <em>&#8220;it&#8217;s actually good to not be the first, like the flag bearer&#8221;</em>. <strong>So the plan adds each part when its problem arrives.</strong> Here it is as five phases.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PuC0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PuC0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!PuC0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!PuC0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!PuC0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!PuC0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:185312,&quot;alt&quot;:&quot;A hand-drawn staircase titled \&quot;From zero to a full platform\&quot;, five steps rising left to right. Phase 0, \&quot;One feature\&quot;: a single app window and a small console. Phase 1, \&quot;First customers\&quot;: a notebook, a checklist and a barrier. Phase 2, \&quot;Second team\&quot;: a door and a meter. Phase 3, \&quot;Your facts, a bigger bill\&quot;: a stack of documents and a small server. Phase 4, \&quot;Agents that act\&quot;: a gate with a key and a small robot. A small group of people beside the upper steps, marked \&quot;Platform team\&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn staircase titled &quot;From zero to a full platform&quot;, five steps rising left to right. Phase 0, &quot;One feature&quot;: a single app window and a small console. Phase 1, &quot;First customers&quot;: a notebook, a checklist and a barrier. Phase 2, &quot;Second team&quot;: a door and a meter. Phase 3, &quot;Your facts, a bigger bill&quot;: a stack of documents and a small server. Phase 4, &quot;Agents that act&quot;: a gate with a key and a small robot. A small group of people beside the upper steps, marked &quot;Platform team&quot;." title="A hand-drawn staircase titled &quot;From zero to a full platform&quot;, five steps rising left to right. Phase 0, &quot;One feature&quot;: a single app window and a small console. Phase 1, &quot;First customers&quot;: a notebook, a checklist and a barrier. Phase 2, &quot;Second team&quot;: a door and a meter. Phase 3, &quot;Your facts, a bigger bill&quot;: a stack of documents and a small server. Phase 4, &quot;Agents that act&quot;: a gate with a key and a small robot. A small group of people beside the upper steps, marked &quot;Platform team&quot;." srcset="https://substackcdn.com/image/fetch/$s_!PuC0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!PuC0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!PuC0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!PuC0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f19916-6a11-42b3-803a-f230c79af54e_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p><strong>Phase 0: your first AI feature.</strong> It runs on one model maker, with no platform yet. The model maker&#8217;s console gives each team a workspace and a spend limit, and that&#8217;s enough. The product team owns everything. <em>First step:</em> read 20 to 50 answers after every change, <a href="https://hamel.dev/blog/posts/evals-faq/">as Husain suggests</a>, and write down what&#8217;s wrong.</p></li><li><p><strong>Phase 1: the first feature reaches customers.</strong> Add a record of every call, read by a named person. Add quality tests on every change to the AI&#8217;s instructions. Add safety checks on what goes out, with a label saying it&#8217;s AI. Rent a record-and-test tool, or take your cloud&#8217;s. <em>First step:</em> the PM writes 20 real questions with the answers they expect.</p></li><li><p><strong>Phase 2: a second team, or a second model maker.</strong> Add one entry point, with a key, a budget and a backup for each team. Name an owner now: a small platform team. Renting is cheap here: Cloudflare&#8217;s core gateway features <a href="https://developers.cloudflare.com/ai-gateway/reference/pricing/">are free</a>, and Vercel <a href="https://vercel.com/docs/ai-gateway/pricing">adds no markup</a>. <em>First step:</em> list every API key in use, and who holds it.</p></li><li><p><strong>Phase 3: answers must use your facts, and the bill grows.</strong> Add company knowledge, with an owner for each source. Then try cheaper calls, and host open models once the volume pays for it. <em>First step:</em> name an owner for every source the AI reads, like the help center.</p></li><li><p><strong>Phase 4: agents start to act.</strong> Put every tool behind one gateway, with identity and a permission on each action. A person approves anything sensitive. <em>First step:</em> for each agent, list what it can read, what it can change, and what it can send.</p></li></ol><p>DoorDash&#8217;s own order was different. It started at Phase 2. Many teams were calling models from day one, and finance wanted to know who spent what. Chip Huyen <a href="https://huyenchip.com/2024/07/25/genai-platform.html">agrees</a> that <em>&#8220;you don&#8217;t need to follow the exact same order&#8221;</em>. She puts the record in <em>&#8220;from the beginning&#8221;</em>. <strong>The order follows your problems, not anyone&#8217;s diagram.</strong> DoorDash&#8217;s engineers <a href="https://boston.qcon.ai/presentation/boston2026/building-genai-platform-doordash">warn</a> about both ways to get the timing wrong.</p><blockquote><p>either centralize too early and slow teams down, or decentralize too long and accumulate duplicated work, unowned spend, and security risk.</p></blockquote><p>Each phase also raises a supplier question, and the suppliers keep changing.</p><h3>Own the jobs, choose the suppliers</h3><p>DoorDash started <em>&#8220;vendor-first&#8221;</em>, because <em>&#8220;this field is moving so fast&#8221;</em>. Buying took weeks, and building would have taken months. It mostly worked, until the evals vendor didn&#8217;t fit. So the team changed its rule: if a vendor works, scale it up, and if it doesn&#8217;t, build. <strong>Chitlur&#8217;s closing lesson is the line to keep if you fund this.</strong></p><blockquote><p>Third, own the company-fit surfaces. Auth is an evergreen story. Cost is an evergreen story. Accuracy is an evergreen story. Observability is an evergreen story. Governance, developer experience, and velocity. We own these things, but how we provide it is something we consider on a solution detail.</p></blockquote><p>Put simply, the company owns the job, like knowing who spends what. The tool doing that job can change. There are four ways to get each part. You can run it, rent it, take your cloud&#8217;s version, or buy a product that includes it. <strong>Four kinds of companies now want to own this layer.</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_!UVOS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UVOS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!UVOS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!UVOS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!UVOS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!UVOS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:167072,&quot;alt&quot;:&quot;A wide horizontal band marked \&quot;AI platform\&quot;, with \&quot;Own the jobs\&quot; written inside it. Above it, three product windows marked \&quot;Your products\&quot;. Below it, three small clouds marked \&quot;Models\&quot;. Four objects point one arrow each at the band: a large cloud marked \&quot;Clouds\&quot;, a small factory marked \&quot;Model makers\&quot;, a padlock marked \&quot;Security companies\&quot; and a database cylinder marked \&quot;Data companies\&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://www.theaithinker.com/i/221779911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A wide horizontal band marked &quot;AI platform&quot;, with &quot;Own the jobs&quot; written inside it. Above it, three product windows marked &quot;Your products&quot;. Below it, three small clouds marked &quot;Models&quot;. Four objects point one arrow each at the band: a large cloud marked &quot;Clouds&quot;, a small factory marked &quot;Model makers&quot;, a padlock marked &quot;Security companies&quot; and a database cylinder marked &quot;Data companies&quot;." title="A wide horizontal band marked &quot;AI platform&quot;, with &quot;Own the jobs&quot; written inside it. Above it, three product windows marked &quot;Your products&quot;. Below it, three small clouds marked &quot;Models&quot;. Four objects point one arrow each at the band: a large cloud marked &quot;Clouds&quot;, a small factory marked &quot;Model makers&quot;, a padlock marked &quot;Security companies&quot; and a database cylinder marked &quot;Data companies&quot;." srcset="https://substackcdn.com/image/fetch/$s_!UVOS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!UVOS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!UVOS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!UVOS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97e0a5f-8e8e-402a-bbfb-643df0513f80_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>The clouds sell all of it in one contract.</strong> AWS&#8217;s <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html">AgentCore</a> bundles an entry point, memory, a record, tests and rules for agents. Microsoft <a href="https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/scenarios/ai/">advises</a> picking <em>&#8220;the least operational responsibility&#8221;</em>.</p></li><li><p><strong>The model makers move up from the model.</strong> Anthropic now hosts agents for you, in beta, and tests prompts in its Console. OpenAI <a href="https://www.promptfoo.dev/blog/promptfoo-joining-openai/">agreed to buy Promptfoo</a>, the testing tool, in March 2026.</p></li><li><p><strong>Security and identity companies guard the door.</strong> Microsoft and Okta now sell sign-in for agents. Palo Alto Networks <a href="https://www.paloaltonetworks.com/company/press/2026/palo-alto-networks-completes-acquisition-of-portkey-to-secure-ai-agents">bought Portkey</a>, a gateway, in May 2026, after <a href="https://www.paloaltonetworks.com/company/press/2025/palo-alto-networks-completes-acquisition-of-protect-ai">Protect AI</a> in 2025. Check Point <a href="https://www.checkpoint.com/press-releases/check-point-software-reports-2025-third-quarter-financial-results/">bought Lakera</a>, a guardrails company, in October 2025.</p></li><li><p><strong>Data companies buy the record.</strong> ClickHouse, a database company, <a href="https://clickhouse.com/blog/clickhouse-acquires-langfuse-open-source-llm-observability">bought Langfuse</a> in January 2026, and says it stays open source. Snowflake <a href="https://www.snowflake.com/en/blog/snowflake-acquires-truera-to-bring-llm-ml-observability-to-data-cloud/">agreed to buy TruEra</a>, an observability tool, in 2024.</p></li></ul><p>Some independents keep growing: LangChain, which makes LangSmith, <a href="https://fortune.com/2025/10/20/exclusive-early-ai-darling-langchain-is-now-a-unicorn-with-a-fresh-125-million-in-funding/">was valued at $1.25 billion</a> in 2025. Others fade. Helicone, a gateway and record tool, <a href="https://mintlify.com/blog/mintlify-acquires-helicone">went into maintenance mode</a> after its sale in March 2026. <strong>So when you pick a tool, you also pick who you&#8217;ll depend on next year.</strong></p><p><strong>What keeps you free to leave is open standards.</strong> MCP belongs to a Linux Foundation group, since Anthropic <a href="https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation">gave it away</a> in December 2025. A2A, a standard for agents talking to agents, <a href="https://linuxfoundation.org/press/linux-foundation-launches-the-agent2agent-protocol-project-to-enable-secure-intelligent-communication-between-ai-agents">joined the same foundation</a> in June 2025. DoorDash says it is <em>&#8220;working on A2A&#8221;</em>. OpenTelemetry lets a record move between tools, though its AI part is <a href="https://github.com/open-telemetry/semantic-conventions-genai">still in development</a>. Many models also accept OpenAI&#8217;s request format, but Anthropic calls its own <a href="https://platform.claude.com/docs/en/cli-sdks-libraries/libraries/openai-sdk">compatibility layer</a> not <em>&#8220;production-ready&#8221;</em>.</p><p>Here&#8217;s how others chose a supplier.</p><ul><li><p><strong>Wealthsimple chose its cloud</strong> (<a href="https://www.infoq.com/articles/gen-ai-productivity-tools/">2025</a>). The Canadian investing app built its own gateway in 2023. It later found <em>&#8220;a very big overlap&#8221;</em> with what Amazon Bedrock offered.</p></li><li><p><strong>Shopify built its own</strong> (<a href="https://www.firstround.com/ai/shopify">2025</a>). Its internal proxy, one access point to many models, also handles <em>&#8220;scaling, tracking, and failover&#8221;</em>.</p></li></ul><p>Choosing a supplier is the easy half. Someone has to run it.</p><h3>Budget for the people who run it</h3><p><strong>An entry point holds every key your company has, which makes it a target.</strong> On March 24, 2026, two poisoned versions of LiteLLM went online. Each hid a program that steals keys and passwords. LiteLLM <a href="https://docs.litellm.ai/blog/security-update-march-2026">counts</a> about 40 minutes before they came down. FutureSearch, which found them, <a href="https://futuresearch.ai/blog/litellm-hack-were-you-one-of-the-47000/">counted</a> a 46-minute window and 46,996 downloads. Three weeks later, the Thoughtworks Radar called LiteLLM a sensible default, without a word on the attack.</p><p>Running any part yourself is a job, even when the software is free. Zalando <a href="https://engineering.zalando.com/posts/2026/08/agentic-engineering-at-zalando-a-snapshot.html">restarts its gateway</a> every 20,000 requests to contain memory leaks. Renting is cheap next to the model bill. LangSmith <a href="https://www.langchain.com/pricing">charges $39</a> a seat, and Braintrust&#8217;s Pro plan <a href="https://www.braintrust.dev/pricing">is $249</a> a month. <strong>So the real cost is the people who run each part.</strong> None of these companies publishes how many engineers its platform takes.</p><p><strong>That owner is usually a small AI platform team.</strong> Its best product is a safe path that&#8217;s also the easy one. Engineers call it a golden path, <a href="https://engineering.atspotify.com/2020/8/how-we-use-golden-paths-to-solve-fragmentation-in-our-software-ecosystem">Spotify&#8217;s 2020 term</a> for the one supported way to build. Google&#8217;s <a href="https://cloud.google.com/blog/products/ai-machine-learning/announcing-the-2025-dora-report">2025 DORA report</a> studied AI in software teams. It found <em>&#8220;a direct correlation between a high quality internal platform and an organization&#8217;s ability to unlock the value of AI&#8221;</em>. Chitlur puts the idea plainly.</p><blockquote><p>Make the right thing easy. If you say, do best practices, nobody&#8217;s going to do it. You need to bake in best practices into how your platform operates.</p></blockquote><p>Here&#8217;s how others run theirs.</p><ul><li><p><strong>Wealthsimple</strong> (<a href="https://www.infoq.com/articles/gen-ai-productivity-tools/">2025</a>) tried nudging people toward its gateway, and <em>&#8220;it wasn&#8217;t working&#8221;</em>. Improvements to the platform itself were <em>&#8220;a much stronger driver for behavioral changes&#8221;</em>.</p></li><li><p><strong>LinkedIn</strong> (<a href="https://www.linkedin.com/blog/engineering/generative-ai/behind-the-platform-the-journey-to-create-the-linkedin-genai-application-tech-stack">2024</a>) asks every team to follow its rules for prompts. In exchange, teams <em>&#8220;receive fluent sharing across prompts&#8221;</em>.</p></li></ul><p>With the plan and the owners set, the review needs the right questions.</p><h3>Seven questions for your tech team</h3><p>These questions test any request, whatever tool it names. Each one carries its reason, so the room starts from the same place.</p><ol><li><p><strong>Which part of the map are we asking for, and what problem does it solve today?</strong> It ties each tool to a real risk.</p></li><li><p><strong>Is this for our product&#8217;s AI features, or for our engineers&#8217; coding assistants?</strong> The answer changes which tool fits. <a href="https://engineering.zalando.com/posts/2026/08/agentic-engineering-at-zalando-a-snapshot.html">Zalando</a> and <a href="https://bitrise.io/blog/post/building-bitrises-ai-platform-scaling-ai-features-across-teams">Bitrise</a> both use LiteLLM for internal work, but Bitrise built its own gateway for its product.</p></li><li><p><strong>How many teams and model providers will call models in the next six months?</strong> With one of each, the entry point can wait.</p></li><li><p><strong>Who reads the answers, how many, and how often?</strong> A record nobody reads protects nothing.</p></li><li><p><strong>Where are questions and answers stored, for how long, and who can read them?</strong> The record is a new store of customer data.</p></li><li><p><strong>What can an agent do without a person&#8217;s approval?</strong> That&#8217;s where the costly failures happen. OWASP&#8217;s <a href="https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026">Top 10 for Agentic Applications</a> is the checklist your security team will bring.</p></li><li><p><strong>Who runs it, and what would leaving the tool cost?</strong> Owners change, so check that each tool speaks the open standards.</p></li></ol><p>With those answers on the table, the review becomes a different meeting.</p><p>Those seven questions are the part to bring to your next review.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.theaithinker.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">I write one piece like this every week for product leaders: a company&#8217;s AI system taken apart, or an AI tool tested. If you want the next one, subscribe.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>What changes in your next review</h2><p>Every AI feature your company builds needs the same building blocks around it: access to the models, trust in the answers, and context to act on. DoorDash added them one problem at a time. <strong>Map yours, start where your problems are, own the jobs, and let the tools change.</strong></p><p>So, back to the budget request. Place it on the map first: which theme, which part, which phase. If it&#8217;s your first AI feature, on one model maker, the record and a few tests come first. The entry point follows with the second team or the second maker. <strong>Whatever you fund, ask who runs it once the setup is done.</strong></p><p>That changes several conversations.</p><ul><li><p><strong>The budget review.</strong> You can ask which part of the map is on the table, and which phase you&#8217;re in.</p></li><li><p><strong>The legal review.</strong> You can say where customer messages would be stored, who reads them, and when the AI Act&#8217;s rules apply.</p></li><li><p><strong>The first AI feature.</strong> Your PM can own the test set, because choosing what to measure is a product call.</p></li><li><p><strong>The platform team.</strong> Someone owns the easy, safe path, so teams have a reason to use it.</p></li><li><p><strong>The next vendor demo.</strong> When someone pitches an &#8220;AI platform&#8221;, you can ask which parts of the map it covers. Then ask who owns the company behind it.</p></li></ul><p>Next, I want to open two of these parts from the inside: an entry point and a record. Each one gets its own post, set up the way a team would run it.</p><div><hr></div><h2>Go further: every source, by company</h2><p>Here&#8217;s every link this article used. DoorDash comes first, then the other companies, the incidents, the rules, the guides and the deals. The sellers come last, by part. Posts where a company describes its own product are marked as vendor sources.</p><p><strong>DoorDash</strong></p><ul><li><p><a href="https://infoq.com/presentations/doordash-genai-platform-architecture">Building GenAI Platform at DoorDash</a>: Swaroop Chitlur and Siddharth Kodwani&#8217;s full talk and transcript, from the first contract to the agent gateway (2026).</p></li><li><p><a href="https://boston.qcon.ai/presentation/boston2026/building-genai-platform-doordash">The talk&#8217;s summary</a>: the plumbing every team rebuilt, and the two ways to get the timing wrong (2026).</p></li><li><p><a href="https://careersatdoordash.com/blog/large-language-modules-based-dasher-support-automation/">Dasher support automation</a>: the support team&#8217;s knowledge base, two-step check, tests and judge (2024).</p></li><li><p><a href="https://careersatdoordash.com/blog/doordash-identifies-five-big-areas-for-using-generative-ai-2/">Five big areas for generative AI</a>: Alok Gupta&#8217;s 2023 list of where AI would go in the product (2023).</p></li><li><p><a href="https://careersatdoordash.com/blog/building-doordashs-product-knowledge-graph-with-large-language-models/">A product knowledge graph built with LLMs</a>: models filling in grocery product details (2024).</p></li><li><p><a href="https://careersatdoordash.com/blog/doordashs-next-generation-homepage-genai/">The next-generation homepage</a>: personal store lists written by LLMs for each customer (2025).</p></li></ul><p><strong>Other companies</strong></p><ul><li><p><strong>Uber:</strong> <a href="https://www.uber.com/blog/genai-gateway/">its GenAI Gateway</a>, which hides personal data from vendors (2024); <a href="https://www.uber.com/blog/genie-ubers-gen-ai-on-call-copilot/">Genie</a>, its internal help bot (2024); <a href="https://www.uber.com/blog/designing-mcp-gateway/">its MCP Gateway</a>, with 800+ tool servers (2026).</p></li><li><p><strong>LinkedIn:</strong> <a href="https://www.linkedin.com/blog/engineering/generative-ai/behind-the-platform-the-journey-to-create-the-linkedin-genai-application-tech-stack">its platform&#8217;s prompt rules</a> (2024); <a href="https://www.linkedin.com/blog/engineering/generative-ai/the-linkedin-generative-ai-application-tech-stack-extending-to-build-ai-agents">tracing agents</a> (2025); <a href="https://www.linkedin.com/blog/engineering/infrastructure/inside-linkedins-data-context-layer-curating-trustworthy-context-for-humans-and-agents">its shared knowledge layer</a> (2026).</p></li><li><p><strong>Dropbox:</strong> <a href="https://dropbox.tech/machine-learning/practical-blueprint-evaluating-conversational-ai-at-scale-dash">its evaluation blueprint</a>, with 150 test questions on every change (2025).</p></li><li><p><strong>Shopify:</strong> <a href="https://shopify.engineering/building-production-ready-agentic-systems">lessons from Sidekick</a> (2025), and <a href="https://www.firstround.com/ai/shopify">First Round Review on its internal proxy</a> (2025).</p></li><li><p><strong>Spotify:</strong> <a href="https://engineering.atspotify.com/2025/12/feedback-loops-background-coding-agents-part-3">its coding agent&#8217;s judge</a> (2025), <a href="https://infoq.com/news/2026/03/spotify-honk-rewrite">InfoQ on its removal</a> (2026), and <a href="https://engineering.atspotify.com/2020/8/how-we-use-golden-paths-to-solve-fragmentation-in-our-software-ecosystem">golden paths</a> (2020).</p></li><li><p><strong>Airbnb:</strong> <a href="https://medium.com/airbnb-engineering/automation-platform-v2-improving-conversational-ai-at-airbnb-d86c9386e0cb">its shared library of checks</a> (2024), and <a href="https://fortune.com/2025/10/21/brian-chesky-openai-tools-not-ready">Fortune on its use of Qwen</a> (2025).</p></li><li><p><strong>Pinterest:</strong> <a href="https://medium.com/pinterest-engineering/building-an-mcp-ecosystem-at-pinterest-d881eb4c16f1">its MCP ecosystem</a> (2026), and <a href="https://www.fortune.com/2026/03/17/why-pinterest-is-going-all-in-on-open-source-ai">Fortune on its open models</a> (2026).</p></li><li><p><strong>Grab:</strong> <a href="https://engineering.grab.com/grab-ai-gateway">its AI gateway</a> (2025).</p></li><li><p><strong>Zalando:</strong> <a href="https://engineering.zalando.com/posts/2026/08/agentic-engineering-at-zalando-a-snapshot.html">an agentic engineering snapshot</a> (2026).</p></li><li><p><strong>Bitrise:</strong> <a href="https://bitrise.io/blog/post/building-bitrises-ai-platform-scaling-ai-features-across-teams">its AI platform</a> (2026).</p></li><li><p><strong>Wealthsimple:</strong> <a href="https://www.infoq.com/articles/gen-ai-productivity-tools/">launching AI tools</a> (2025).</p></li><li><p><strong>Instacart:</strong> <a href="https://tech.instacart.com/simplifying-large-scale-llm-processing-across-instacart-with-maple-63df4508d5be">Maple</a>, with cost tracked per job and team (2025).</p></li><li><p><strong>Slack:</strong> <a href="https://slack.engineering/how-we-built-slack-ai-to-be-secure-and-private/">how Slack AI stays private</a> (2024).</p></li><li><p><strong>Block:</strong> <a href="https://goose-docs.ai/blog/2025/04/21/mcp-in-enterprise">MCP at Block</a> (2025).</p></li><li><p><strong>Anthropic:</strong> <a href="https://www.anthropic.com/engineering/a-postmortem-of-three-recent-issues">a postmortem of three issues</a> (2025), and <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">context engineering</a> (2025).</p></li></ul><p><strong>The incidents</strong></p><ul><li><p><strong>Air Canada:</strong> <a href="https://decisions.civilresolutionbc.ca/crt/crtd/en/item/525448/index.do">the tribunal decision</a> (2024).</p></li><li><p><strong>Cursor:</strong> <a href="https://arstechnica.com/ai/2025/04/cursor-ai-support-bot-invents-fake-policy-and-triggers-user-uproar/">Ars Technica on the invented policy</a> (2025).</p></li><li><p><strong>DPD:</strong> <a href="https://www.theguardian.com/technology/2024/jan/20/dpd-ai-chatbot-swears-calls-itself-useless-and-criticises-firm">The Guardian on the chatbot that swore</a> (2024).</p></li><li><p><strong>Chevrolet of Watsonville:</strong> <a href="https://www.businessinsider.com/car-dealership-chevrolet-chatbot-chatgpt-pranks-chevy-2023-12">Business Insider on the $1 car</a> (2023).</p></li><li><p><strong>Replit:</strong> <a href="https://fortune.com/2025/07/23/ai-coding-tool-replit-wiped-database-called-it-a-catastrophic-failure/">Fortune on the deleted database</a> (2025).</p></li><li><p><strong>PocketOS:</strong> <a href="https://ia.acs.org.au/article/2026/gone-in-9-seconds--ai-agent-deletes-company-database.html">Information Age on nine seconds</a> (2026).</p></li><li><p><strong>The Gemini key:</strong> <a href="https://www.theregister.com/2026/03/03/gemini_api_key_82314_dollar_charge/">The Register on the $82,314 bill</a> (2026).</p></li><li><p><strong>The LiteLLM attack:</strong> <a href="https://docs.litellm.ai/blog/security-update-march-2026">LiteLLM&#8217;s notice</a> (vendor) and <a href="https://futuresearch.ai/blog/litellm-hack-were-you-one-of-the-47000/">FutureSearch&#8217;s count</a> (2026).</p></li></ul><p><strong>The rules and standards</strong></p><ul><li><p><strong>The EU AI Act:</strong> <a href="https://artificialintelligenceact.eu/article/12/">Article 12 on logs</a> and <a href="https://artificialintelligenceact.eu/article/50/">Article 50 on chatbots</a>.</p></li><li><p><strong>Personal data:</strong> <a href="https://datenschutz-hamburg.de/fileadmin/user_upload/HmbBfDI/Datenschutz/Informationen/240715_Discussion_Paper_Hamburg_DPA_KI_Models.pdf">the Hamburg data protection authority&#8217;s paper</a> (2024).</p></li><li><p><strong>Security:</strong> <a href="https://labs.cloudsecurityalliance.org/research/csa-research-note-owasp-genai-top10-2026-agent-control-stand/">the Cloud Security Alliance on OWASP&#8217;s 2026 list</a>, <a href="https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026">OWASP&#8217;s Top 10 for Agentic Applications</a>, <a href="https://ai.meta.com/blog/practical-ai-agent-security/">Meta&#8217;s Agents Rule of Two</a> and <a href="https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/">Simon Willison&#8217;s lethal trifecta</a>.</p></li><li><p><strong>Open standards:</strong> <a href="https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation">MCP&#8217;s donation</a> (vendor), <a href="https://linuxfoundation.org/press/linux-foundation-launches-the-agent2agent-protocol-project-to-enable-secure-intelligent-communication-between-ai-agents">A2A at the Linux Foundation</a>, <a href="https://github.com/open-telemetry/semantic-conventions-genai">OpenTelemetry&#8217;s AI conventions</a> and <a href="https://platform.claude.com/docs/en/cli-sdks-libraries/libraries/openai-sdk">Anthropic on OpenAI compatibility</a> (vendor).</p></li><li><p><strong>Model retirements:</strong> <a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions">Google&#8217;s model lifecycle</a> and <a href="https://platform.claude.com/docs/en/about-claude/model-deprecations">Anthropic&#8217;s deprecations</a> (vendor).</p></li><li><p><strong>Chat plans and the API:</strong> <a href="https://support.claude.com/en/articles/9876003-i-have-a-paid-claude-subscription-pro-max-team-or-enterprise-plans-why-do-i-have-to-pay-separately-to-use-the-claude-api-and-console">Anthropic&#8217;s help center</a> (vendor).</p></li><li><p><strong>Workspaces:</strong> <a href="https://platform.claude.com/docs/en/manage-claude/workspaces">Anthropic&#8217;s workspaces</a>, a key and a spend limit per team (vendor).</p></li></ul><p><strong>The guides and surveys</strong></p><ul><li><p><strong>Chip Huyen:</strong> <a href="https://huyenchip.com/2024/07/25/genai-platform.html">Building A Generative AI Platform</a>, the map to check with your tech lead (2024).</p></li><li><p><strong>Hamel Husain and Shreya Shankar:</strong> <a href="https://hamel.dev/blog/posts/evals-faq/">the evals FAQ</a>.</p></li><li><p><strong>OpenRouter:</strong> <a href="https://openrouter.ai/blog/insights/llm-gateway/">the case against a gateway</a>, from a gateway seller.</p></li><li><p><strong>The FinOps Foundation:</strong> <a href="https://www.finops.org/wg/finops-for-ai-overview/">FinOps for AI</a> and <em><a href="https://www.finops.org/wg/token-economics-saas/">Tokenomics</a></em>.</p></li><li><p><strong>Thoughtworks:</strong> <a href="https://www.thoughtworks.com/radar/languages-and-frameworks/litellm">the Radar on LiteLLM</a> (2026).</p></li><li><p><strong>Menlo Ventures:</strong> <a href="https://menlovc.com/perspective/2025-the-state-of-generative-ai-in-the-enterprise/">the state of generative AI in the enterprise</a> (investor, 2025).</p></li><li><p><strong>a16z:</strong> <a href="https://a16z.com/leaders-gainers-and-unexpected-winners-in-the-enterprise-ai-arms-race/">the January 2026 enterprise survey</a> (investor).</p></li><li><p><strong>Vercel:</strong> <a href="https://vercel.com/blog/ai-gateway-production-index-september-2026">its AI Gateway production index</a> (vendor, 2026).</p></li><li><p><strong>Google:</strong> <a href="https://cloud.google.com/blog/products/ai-machine-learning/announcing-the-2025-dora-report">the 2025 DORA report</a>.</p></li><li><p><strong>Microsoft:</strong> <a href="https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/scenarios/ai/">its AI adoption advice</a> (vendor).</p></li></ul><p><strong>The deals</strong></p><ul><li><p><a href="https://clickhouse.com/blog/clickhouse-acquires-langfuse-open-source-llm-observability">ClickHouse and Langfuse</a> (January 2026).</p></li><li><p><a href="https://www.paloaltonetworks.com/company/press/2026/palo-alto-networks-completes-acquisition-of-portkey-to-secure-ai-agents">Palo Alto Networks and Portkey</a> (May 2026), after <a href="https://www.paloaltonetworks.com/company/press/2026/palo-alto-networks-to-acquire-portkey-to-secure-the-rise-of-ai-agents">the announcement</a>.</p></li><li><p><a href="https://www.paloaltonetworks.com/company/press/2025/palo-alto-networks-completes-acquisition-of-protect-ai">Palo Alto Networks and Protect AI</a> (July 2025).</p></li><li><p><a href="https://www.checkpoint.com/press-releases/check-point-software-reports-2025-third-quarter-financial-results/">Check Point and Lakera</a> (October 2025).</p></li><li><p><a href="https://www.snowflake.com/en/blog/snowflake-acquires-truera-to-bring-llm-ml-observability-to-data-cloud/">Snowflake and TruEra</a> (2024).</p></li><li><p><a href="https://www.promptfoo.dev/blog/promptfoo-joining-openai/">OpenAI and Promptfoo</a> (agreed March 2026).</p></li><li><p><a href="https://mintlify.com/blog/mintlify-acquires-helicone">Mintlify and Helicone</a> (March 2026).</p></li><li><p><a href="https://fortune.com/2025/10/20/exclusive-early-ai-darling-langchain-is-now-a-unicorn-with-a-fresh-125-million-in-funding/">LangChain&#8217;s funding round</a> (2025).</p></li></ul><p><strong>The sellers, by part</strong> (all vendor pages)</p><ul><li><p><strong>Entry point:</strong> <a href="https://github.com/BerriAI/litellm">LiteLLM</a>, <a href="https://github.com/Portkey-AI/gateway">Portkey</a>, <a href="https://openrouter.ai/docs/quickstart">OpenRouter</a>, <a href="https://vercel.com/docs/ai-gateway">Vercel</a> (<a href="https://vercel.com/docs/ai-gateway/pricing">pricing</a>), <a href="https://developers.cloudflare.com/ai-gateway/">Cloudflare</a> (<a href="https://developers.cloudflare.com/ai-gateway/reference/pricing/">pricing</a>), <a href="https://developer.konghq.com/ai-gateway/">Kong</a>, <a href="https://learn.microsoft.com/en-us/azure/api-management/genai-gateway-capabilities">Azure API Management</a>, <a href="https://docs.cloud.google.com/apigee/docs/api-platform/get-started/ai-capabilities">Apigee</a>, <a href="https://docs.databricks.com/aws/en/ai-gateway/">Databricks</a>.</p></li><li><p><strong>Record:</strong> <a href="https://langfuse.com/docs">Langfuse</a>, <a href="https://mlflow.org/docs/latest/genai/tracing/">MLflow</a>, <a href="https://github.com/Arize-ai/phoenix">Arize Phoenix</a>, <a href="https://docs.langchain.com/langsmith">LangSmith</a> (<a href="https://www.langchain.com/pricing">pricing</a>), <a href="https://www.braintrust.dev/docs">Braintrust</a> (<a href="https://www.braintrust.dev/pricing">pricing</a>), <a href="https://docs.datadoghq.com/llm_observability/">Datadog</a>, <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html">AWS AgentCore</a>.</p></li><li><p><strong>Safety checks:</strong> <a href="https://github.com/NVIDIA/NeMo-Guardrails">NeMo Guardrails</a>, <a href="https://github.com/guardrails-ai/guardrails">Guardrails AI</a>, <a href="https://github.com/microsoft/presidio">Presidio</a>, <a href="https://www.lakera.ai/lakera-guard">Lakera</a>, <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html">Bedrock Guardrails</a>, <a href="https://learn.microsoft.com/en-us/azure/ai-services/content-safety/concepts/jailbreak-detection">Azure Prompt Shields</a>.</p></li><li><p><strong>Quality tests:</strong> <a href="https://www.promptfoo.dev/docs/intro/">promptfoo</a>, <a href="https://github.com/confident-ai/deepeval">DeepEval</a>, <a href="https://claude.com/blog/evaluate-prompts">Anthropic&#8217;s Console</a>, <a href="https://github.com/openai/evals">OpenAI Evals</a>.</p></li><li><p><strong>Hosted models:</strong> <a href="https://github.com/vllm-project/vllm">vLLM</a>, <a href="https://github.com/sgl-project/sglang">SGLang</a>, <a href="https://modal.com/">Modal</a>, <a href="https://docs.together.ai/docs/introduction">Together AI</a>, <a href="https://docs.fireworks.ai/getting-started/introduction">Fireworks</a>, <a href="https://www.baseten.co/">Baseten</a>, <a href="https://aws.amazon.com/about-aws/whats-new/2025/09/qwen3-models-fully-managed-amazon-bedrock">Bedrock&#8217;s Qwen3</a>, <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html">Bedrock Custom Model Import</a>, <a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching">Anthropic&#8217;s prompt caching</a>, <a href="https://developers.openai.com/api/docs/guides/batch">OpenAI&#8217;s batch jobs</a>.</p></li><li><p><strong>Company knowledge:</strong> <a href="https://github.com/pgvector/pgvector">pgvector</a>, <a href="https://github.com/qdrant/qdrant">Qdrant</a>, <a href="https://github.com/weaviate/weaviate">Weaviate</a>, <a href="https://docs.pinecone.io/guides/get-started/overview">Pinecone</a>, <a href="https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-overview/">MongoDB</a>, <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html">Bedrock Knowledge Bases</a>, <a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/rag-engine/rag-overview">Google&#8217;s RAG Engine</a>.</p></li><li><p><strong>Agent permissions:</strong> <a href="https://docs.docker.com/ai/mcp-catalog-and-toolkit/mcp-gateway/">Docker MCP Gateway</a>, <a href="https://learn.microsoft.com/en-us/entra/agent-id/what-is-microsoft-entra-agent-id">Microsoft Entra Agent ID</a>, <a href="https://www.okta.com/en-gb/newsroom/articles/cross-app-access-extends-mcp-to-bring-enterprise-grade-security-to-ai-agents/">Okta Cross App Access</a>.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[How to build a SaaS product with Claude Code]]></title><description><![CDATA[Set up your workspace. Describe your product in plain words. Let Claude Code build it, then put it online. Improve it, check its security, and get it ready for real customers.]]></description><link>https://www.theaithinker.com/p/how-to-build-a-saas-product-with</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-build-a-saas-product-with</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 19 Oct 2026 11:03:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/56ca5794-60ce-4230-bb6f-e677848792a5_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A quick warning before you start. This article takes about twenty minutes to read. Honestly, you could close it right now, open Claude Code, and start describing the product you&#8217;ve been thinking about. <strong>There&#8217;s no real barrier left between an idea and a working product.</strong> Still not convinced? Then this article is for you. Stay until the end, and you&#8217;ll see exactly what two hours can produce.</p><p><strong>Let me show you what I built first, so you can judge for yourself.</strong> It started with a problem every company has.</p><p>Picture your first day at a new company. Someone sends you a 40-page handbook. You don&#8217;t read it. Nobody reads it, and I&#8217;m not sure the people who wrote it do either. So every small question goes to HR. How many days off do I have? How do I get an expense paid back? Can I work from home on Fridays? <strong>HR answers the same questions all year long.</strong></p><p>So I imagined a simple product. <strong>Instead of reading or searching a 40-page document, you&#8217;d just talk to it.</strong> That&#8217;s exactly what a large language model is good at. HR uploads its documents once: the handbook, the leave policy, the remote work rules. Employees ask their questions in a chat, whenever they want, and the answer comes from those documents, with the source. HR gets a dashboard too. It shows what people ask, and which questions the documents couldn&#8217;t answer. That list tells HR which page to write next.</p><p>Talking to your documents is trendy, sure, and it saves real time. For that alone, I could have built an agent for my own team, or turned on Slack AI at work. <strong>This experiment aimed one level higher: building it as a product I could sell to other companies, a real SaaS.</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_!nc5B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nc5B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!nc5B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!nc5B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!nc5B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nc5B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:736545,&quot;alt&quot;:&quot;The Lumi landing page in French at hr-agent-delta.vercel.app, headed \&quot;Vos salari&#233;s demandent. Vos documents r&#233;pondent.\&quot;, with a cream background, a mockup of the employee chat answering a remote-work question with its source, and a card showing HR the questions left unanswered this week.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Lumi landing page in French at hr-agent-delta.vercel.app, headed &quot;Vos salari&#233;s demandent. Vos documents r&#233;pondent.&quot;, with a cream background, a mockup of the employee chat answering a remote-work question with its source, and a card showing HR the questions left unanswered this week." title="The Lumi landing page in French at hr-agent-delta.vercel.app, headed &quot;Vos salari&#233;s demandent. Vos documents r&#233;pondent.&quot;, with a cream background, a mockup of the employee chat answering a remote-work question with its source, and a card showing HR the questions left unanswered this week." srcset="https://substackcdn.com/image/fetch/$s_!nc5B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!nc5B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!nc5B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!nc5B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a4230aa-000a-4c77-a4ef-c6e1bb3038b6_3248x1974.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Lumi, the product Claude Code built from that idea.</figcaption></figure></div><p>That product is called Lumi, and <a href="https://hr-agent-delta.vercel.app">it&#8217;s live</a>. It&#8217;s in French, because I built it for HR teams in France. It has four pricing plans, and every client company gets its own separate space. <strong>I built it with Claude Code in about two hours, from my first prompt to the live website.</strong> I&#8217;ll share the exact prompts I used, unedited.</p><p>A few years ago, testing an idea like this meant slides, or a clickable prototype in Figma. It looked real, but nothing worked behind the buttons. A good Figma prototype took me a day, sometimes a week, to think through every screen. <strong>This time I have a real product in production, and it took less time than the mockup used to.</strong></p><p>What did it cost me? <strong>The biggest line is my Claude Max subscription, at $200 a month, which I already had.</strong> Claude Code also comes with <a href="https://claude.com/pricing">the Pro plan</a>, at $20 a month, with lower usage limits. Then $5 of prepaid credit on Anthropic&#8217;s API, the pay-as-you-go access Lumi&#8217;s own AI uses to answer each employee question. At Claude Code&#8217;s estimate of about &#8364;0.04 per question, that&#8217;s roughly a hundred answers. GitHub, Supabase and Vercel are free while you build. The day real customers pay you, plan on about $45 a month for hosting. We&#8217;ll come back to these costs in the last section of this article.</p><p>Here&#8217;s the whole journey, in seven steps.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R7bg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R7bg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!R7bg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!R7bg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!R7bg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!R7bg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:248151,&quot;alt&quot;:&quot;Seven numbered steps in two rows linked by arrows. 1 Set up, a laptop with an editor and a terminal side by side. 2 Describe, a note titled brief. 3 Build, files appearing in a folder. 4 Put online, a globe with a web address. 5 Improve, a speech bubble with a pencil, captioned use it, then give feedback. 6 Check, a shield with a magnifying glass. 7 Grow, a staircase of 1, 10, 100 and 1,000 customers. Steps 1 to 4 sit under a bracket labelled \&quot;First version\&quot;, steps 5 to 7 under one labelled \&quot;Make it real\&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Seven numbered steps in two rows linked by arrows. 1 Set up, a laptop with an editor and a terminal side by side. 2 Describe, a note titled brief. 3 Build, files appearing in a folder. 4 Put online, a globe with a web address. 5 Improve, a speech bubble with a pencil, captioned use it, then give feedback. 6 Check, a shield with a magnifying glass. 7 Grow, a staircase of 1, 10, 100 and 1,000 customers. Steps 1 to 4 sit under a bracket labelled &quot;First version&quot;, steps 5 to 7 under one labelled &quot;Make it real&quot;." title="Seven numbered steps in two rows linked by arrows. 1 Set up, a laptop with an editor and a terminal side by side. 2 Describe, a note titled brief. 3 Build, files appearing in a folder. 4 Put online, a globe with a web address. 5 Improve, a speech bubble with a pencil, captioned use it, then give feedback. 6 Check, a shield with a magnifying glass. 7 Grow, a staircase of 1, 10, 100 and 1,000 customers. Steps 1 to 4 sit under a bracket labelled &quot;First version&quot;, steps 5 to 7 under one labelled &quot;Make it real&quot;." srcset="https://substackcdn.com/image/fetch/$s_!R7bg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!R7bg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!R7bg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!R7bg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0fb937-c0f6-4d9b-906f-649c1d41b3a9_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><em>Step 1. Set up your workspace.</em> Install the tools once, and learn what each one is for.</p></li><li><p><em>Step 2. Describe your product.</em> Write who it&#8217;s for and what problem it solves, and let Claude Code pick the features.</p></li><li><p><em>Step 3. Let Claude Code build it.</em> Decide how much freedom to give it, then try what it made.</p></li><li><p><em>Step 4. Put it online.</em> Follow the setup guide Claude Code writes, and send it a screenshot when something breaks.</p></li><li><p><em>Step 5. Improve it with feedback.</em> Use it the way your users will, then send Claude Code everything you&#8217;d change, in one message.</p></li><li><p><em>Step 6. Check security and privacy.</em> Ask Claude Code to look for holes before anyone else does.</p></li><li><p><em>Step 7. Get ready for real customers.</em> What changes at one customer, ten, a hundred and a thousand.</p></li></ul><p>By the end, you&#8217;ll know how to turn your own idea into a live product. It&#8217;ll have logins, a database, a space for each client and prices. <strong>You&#8217;ll show people something they can actually use.</strong></p><p>Before we start, close your eyes for a second. Breathe. Think about the product you&#8217;ve wanted for months, maybe years. The tool you keep wishing existed at work. Got it? <strong>With a bit of luck, it&#8217;ll exist by the end of this article.</strong></p><div><hr></div><h2>Step 1: Set up your workspace</h2><p>You only do this once. The goal is one window. You talk to Claude Code on one side, and watch the files appear on the other. <strong>You won&#8217;t write code, but you&#8217;ll always see what&#8217;s being built.</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_!Pkrs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pkrs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!Pkrs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!Pkrs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!Pkrs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pkrs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:462731,&quot;alt&quot;:&quot;VS Code with the hr-agent project open in the Explorer on the left, listing folders such as src, scripts and supabase and files such as README.md and SETUP.md, and a terminal panel on the right running Claude Code v2.1.302 with Opus 5.5 at xhigh effort on a Claude Max plan, in the folder Documents/GitHub/The-AI-Thinker/hr-agent.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code with the hr-agent project open in the Explorer on the left, listing folders such as src, scripts and supabase and files such as README.md and SETUP.md, and a terminal panel on the right running Claude Code v2.1.302 with Opus 5.5 at xhigh effort on a Claude Max plan, in the folder Documents/GitHub/The-AI-Thinker/hr-agent." title="VS Code with the hr-agent project open in the Explorer on the left, listing folders such as src, scripts and supabase and files such as README.md and SETUP.md, and a terminal panel on the right running Claude Code v2.1.302 with Opus 5.5 at xhigh effort on a Claude Max plan, in the folder Documents/GitHub/The-AI-Thinker/hr-agent." srcset="https://substackcdn.com/image/fetch/$s_!Pkrs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!Pkrs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!Pkrs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!Pkrs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bca141c-c70b-449e-a297-064d06e5dcea_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Where you&#8217;re headed: files on the left, Claude Code on the right.</figcaption></figure></div><p>Here&#8217;s what each tool does, in plain words:</p><ul><li><p><strong>Claude Code</strong> is the builder. It writes the code, runs it, fixes it and explains it. It needs a paid claude.ai plan. I&#8217;m on Max.</p></li><li><p><strong>VS Code</strong> is a free editor. Think of it as the window onto your project: every file Claude Code creates shows up in it.</p></li><li><p><strong>GitHub</strong> is where your code lives online. It keeps every version, so you can always go back. It&#8217;s also where the hosting service picks up your code to publish it.</p></li><li><p><strong>Docker Desktop</strong> lets Claude Code run a database on your laptop, so you can test before anything goes online.</p></li><li><p><strong>Supabase</strong>, <strong>Vercel</strong> and an <strong>AI key</strong> come later, in Step 4, to put your product online. No need to create those accounts yet.</p></li></ul><p>You set this up once, in this order. <strong>After that, every new product starts from the same window.</strong></p><ol><li><p>Install <a href="https://code.visualstudio.com/download">VS Code</a>, <a href="https://code.claude.com/docs/en/setup">Claude Code</a> and <a href="https://www.docker.com/products/docker-desktop/">Docker Desktop</a>. Create a free <a href="https://github.com/signup">GitHub</a> account. Then install the <a href="https://cli.github.com">GitHub CLI</a>, which lets Claude Code save your code to GitHub for you.</p></li><li><p>Give all your projects one home. Create a folder called <code>GitHub</code> in your Documents, and one folder per product inside it. Product people tend to drop files anywhere, the Desktop or Downloads. One home makes every project easy to find.</p></li><li><p>Create a folder for your new product, for example <code>Documents/GitHub/my-product</code>. Open VS Code, choose <strong>File</strong>, then <strong>Open Folder</strong>, and pick it.</p></li><li><p>Open the terminal with <strong>Terminal</strong>, then <strong>New Terminal</strong>, and type <code>claude</code>. Then move the terminal to the right with <strong>View</strong>, <strong>Appearance</strong>, <strong>Panel Position</strong>, <strong>Right</strong>. Your files sit on the left, and Claude Code on the right.</p></li><li><p>Pick the model with <code>/model</code>, and how hard it thinks with <code>/effort</code>.</p></li><li><p>Type <code>/plugin</code> to browse the add-ons for Claude Code. Three plugins from <a href="https://github.com/anthropics/claude-plugins-official">Anthropic&#8217;s official marketplace</a> help with the steps ahead: Superpowers to shape your idea, frontend-design for the look, and security-guidance for safety. You&#8217;ll meet each one when its step comes.</p></li><li><p>Optional: ask Claude Code to keep your conversations for a year. Type <em>Set cleanupPeriodDays to 365 in my Claude Code settings.</em> By default it deletes them after 30 days, and you may want to reread one day how you built something.</p></li></ol><p><strong>How I did it.</strong> My projects live in <code>Documents/GitHub/The-AI-Thinker/</code>, and this one is in a folder called <code>hr-agent</code>. I built it on Claude Fable 5 at high effort. Fable had just come out, and I wanted to try it. <strong>Today I&#8217;d pick Opus 5.5 and raise its effort to </strong><code>xhigh</code><strong>, as in the screenshot above.</strong> On Max, both work. On Pro, Fable <a href="https://support.claude.com/en/articles/15424964-claude-fable-models-on-your-plan">runs on paid usage credits</a>, so Opus 5.5 is the one to pick.</p><p>Your workspace is ready. Now the fun part: describing what you want.</p><div><hr></div><h2>Step 2: Describe your product</h2><p>Claude Code can choose the features, the screens and the code. What it can&#8217;t guess is your business. Who is it for? What problem does it solve? How will it make money? <strong>Your job is to explain the business, and to leave the screens to Claude Code.</strong></p><p>You can type your description straight into the terminal. But there&#8217;s a better way. <strong>Write it in a file called </strong><code>brief.md</code><strong> in your project folder, then ask Claude Code to read it.</strong> The brief stays in your project. You can edit it later, and every future session can read it again.</p><ol><li><p>In VS Code, create a new file in your folder and call it <code>brief.md</code>.</p></li><li><p>Write your brief. The picture below shows the ten things worth covering.</p></li><li><p>In Claude Code, type: <em>Read brief.md and build this product. Work in autonomy.</em></p></li><li><p>Not sure what you want yet? Let Claude Code interview you before it builds. Its <a href="https://code.claude.com/docs/en/best-practices">best practices</a> suggest exactly that for bigger projects. The Superpowers plugin from Step 1 makes it a habit: its <a href="https://github.com/obra/superpowers">brainstorming skill</a> asks you one question at a time, then writes up the design for you to approve before any code.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n5g9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n5g9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!n5g9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!n5g9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!n5g9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!n5g9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:190542,&quot;alt&quot;:&quot;A sheet of paper titled brief.md with ten labelled tabs along its edge: autonomy, who pays, who uses it, the problem, the tools, a demo client, clients kept apart, the admin view, language and market, price and data limits, plus a sticky note at the bottom reading \&quot;go beyond\&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A sheet of paper titled brief.md with ten labelled tabs along its edge: autonomy, who pays, who uses it, the problem, the tools, a demo client, clients kept apart, the admin view, language and market, price and data limits, plus a sticky note at the bottom reading &quot;go beyond&quot;." title="A sheet of paper titled brief.md with ten labelled tabs along its edge: autonomy, who pays, who uses it, the problem, the tools, a demo client, clients kept apart, the admin view, language and market, price and data limits, plus a sticky note at the bottom reading &quot;go beyond&quot;." srcset="https://substackcdn.com/image/fetch/$s_!n5g9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!n5g9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!n5g9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!n5g9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71fb095-e8b2-462f-ad5f-4814425d147d_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Here&#8217;s a template you can copy into your </strong><code>brief.md</code><strong>.</strong> It&#8217;s one way to write it, and yours will sound different.</p><blockquote><p>Work in autonomy. Build a first version, but a real working product.</p><p>Who pays for it: [the customer, their job and their team]</p><p>Who uses it: [the people who will use it every day]</p><p>The problem: [one sentence, in their words]</p><p>Tools: a private GitHub repository, Supabase for the database, Vercel for hosting.</p><p>Demo client: invent one, with realistic sample data.</p><p>Several clients: each one must only ever see its own data.</p><p>The admin view: [what your customer needs to see to improve their side]</p><p>Language and market: [country, language, currency]</p><p>Price: [what it should cost, and what each plan includes]</p><p>Data limits: [what must never be stored, and where the data must stay]</p><p>Feel free to go beyond and solve problems I haven&#8217;t named.</p></blockquote><p><strong>How I did it.</strong> I didn&#8217;t write a <code>brief.md</code>. I dictated my brief out loud, straight into Claude Code, with the voice feature. The transcription got words wrong: &#8220;Superbase&#8221; for Supabase, &#8220;austin service&#8221; for hosting service. There&#8217;s no structure either, just ideas in the order they came to me. I&#8217;m a little embarrassed to share it. <strong>But that&#8217;s my point: with today&#8217;s models, you don&#8217;t need to be a prompt engineer to get a working product from your first prompt.</strong> Here it is, exactly as I sent it:</p><blockquote><p>For this project I would like to let you work in autonomy. I would like to build a product and a startup that enables any company and specifically HR domains to give to their employees an AI agent or chatbot for questions about HR. I&#8217;d like you to build a full system with the user experience both with the administrative way of using it from the HR team. Probably we will have to put it into a private github but then also use a backend in a superbase and an austin service like Vercel. This would be like a first MVP but a real working product. Imagine that I will meet HR teams to ask them if they want this product and buy it for their employees. And they are not tech-savvy so they need something that is really intuitive, minimalist and helpful. So that they are able to put some PDFs and some information about HR. And let any person, any employee to ask their questions. So that it saved him time, for example, if they have to inboard someone new he will have some place where he can ask all his questions. And feel free to use some dummy data just to make it real for a first client, like a demo client And imagine that this is a system that will help to onboard several clients. Imagine that I will have several people from HR in different companies that are using it so that ads should be really restricted for each of them. And make sure that they are able to put all the information and that the employees can ask their questions and if they don&#8217;t find the answer to have the admin board with several datas that helps HR to improve the documentation. feel free To go beyond and solve problems. Let&#8217;s say that the main problem is that HR sometimes spend too much time answering questions from employees and they need this tool to help employees get their information directly without reading 20 or 40 page documents.</p></blockquote><p>It&#8217;s messy, but it covers the essentials. It says who pays, who uses it, the problem, and that clients must stay apart. <strong>It also forgets two things: the market and the price.</strong> The product is for HR teams in France, and the prompt never says so. My next message had to fix both. It even starts the French part with <em>&#8220;Sorry, I had to say that from the start.&#8221;</em></p><p>Brief sent. Time to let Claude Code work.</p><div><hr></div><h2>Step 3: Let Claude Code build it</h2><p>Here&#8217;s the question I&#8217;d ask in your place: should I let it decide everything, or check in along the way? There&#8217;s no single answer. <strong>The more your product touches real people&#8217;s data, the earlier you want to read the plan.</strong></p><p>My build was an experiment. <strong>I wanted to see whether Claude Code, left completely alone, could build something worth showing to customers.</strong> So I let it make every call. For your own product, you have more options:</p><ol><li><p>Choose how much freedom to give. Press <code>Shift+Tab</code> until plan mode is on, and Claude Code shows you its plan before it writes anything. You approve, adjust, then let it build. Or let it run alone, like I did, and review at the end.</p></li><li><p>While it works, watch the files appear on the left. You don&#8217;t need to understand them.</p></li><li><p>When it&#8217;s done, ask: <em>Start the app on my laptop and give me the links.</em> Then try every screen as each of your users would.</p></li><li><p>Ask Claude Code to explain, in plain words, the decisions it made and the features it chose not to build.</p></li><li><p>In a new session, ask Claude Code for a test plan. Then ask it to run that plan in your browser.</p></li><li><p>Write down everything that feels wrong. You&#8217;ll send it all at once in Step 5.</p></li></ol><p><strong>Think of it as a team you don&#8217;t micromanage.</strong> With a good team, you explain the problem and the vision, and you leave the how to them. That&#8217;s what made my experiment interesting. I never told Claude Code which screens to build. What it built went beyond what I had pictured. We tend to assume AI will fail at the hard parts. Often it doesn&#8217;t. So describe the problem well, then let it surprise you.</p><p>Your job is taste: knowing what&#8217;s good, and saying it honestly and precisely. There&#8217;s a joke that keeps coming back on Instagram about product managers turned vibe coders. It uses the record producer Rick Rubin, in <a href="https://www.cbsnews.com/news/rick-rubin-60-minutes-2023-01-15/">his </a><em><a href="https://www.cbsnews.com/news/rick-rubin-60-minutes-2023-01-15/">60 Minutes</a></em><a href="https://www.cbsnews.com/news/rick-rubin-60-minutes-2023-01-15/"> interview</a>: <em>&#8220;I have no technical ability. And I know nothing about music.&#8221;</em> So what is he paid for? <em>&#8220;Well, I know what I like and what I don&#8217;t like.&#8221;</em> <strong>You bring the taste, and Claude Code brings the technique.</strong></p><p><strong>How I did it.</strong> Thirty-four minutes after my prompt, the code was saved in a private GitHub repository. The first version held 47 files and 3,949 lines. <strong>It even invented a fake client, Atlas Consulting, with a full HR handbook and 30 days of sample statistics.</strong> I could demo it straight away.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QuaW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QuaW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!QuaW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!QuaW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!QuaW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!QuaW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:765222,&quot;alt&quot;:&quot;The private GitHub repository The-AI-Thinker/hr-agent, showing folders such as public, scripts, src and supabase, files such as README.md and SETUP.md, 4 commits by adamfaik and claude, and an About panel describing Lumi with a link to hr-agent-delta.vercel.app.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The private GitHub repository The-AI-Thinker/hr-agent, showing folders such as public, scripts, src and supabase, files such as README.md and SETUP.md, 4 commits by adamfaik and claude, and an About panel describing Lumi with a link to hr-agent-delta.vercel.app." title="The private GitHub repository The-AI-Thinker/hr-agent, showing folders such as public, scripts, src and supabase, files such as README.md and SETUP.md, 4 commits by adamfaik and claude, and an About panel describing Lumi with a link to hr-agent-delta.vercel.app." srcset="https://substackcdn.com/image/fetch/$s_!QuaW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!QuaW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!QuaW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!QuaW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0596807-5136-4942-8a79-eac0eebabbbc_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The project&#8217;s memory: every change saved, with who made it. Here, me and Claude.</figcaption></figure></div><p>Its notes explain the decisions it made on its own. <strong>A few were smart calls I&#8217;d never have thought to make:</strong></p><ul><li><p><strong>No accounts for employees.</strong> A company link and an access code are enough. Nobody has to create a password to ask a question.</p></li><li><p><strong>A demo mode.</strong> Without an AI key, the app still works, using the best matching passage from the documents. A demo costs nothing.</p></li><li><p><strong>A second AI check on every question.</strong> It marks whether the documents had the answer, and tags the topic. That one check feeds the whole HR dashboard.</p></li><li><p><strong>Answers from the company&#8217;s documents only.</strong> Its instructions to the AI say <em>ONLY</em>, in capitals, and every answer must name its source.</p></li></ul><p><strong>It also listed the features it chose to leave out, from a Slack integration to company single sign-on.</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_!Dxxp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dxxp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!Dxxp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!Dxxp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!Dxxp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dxxp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:413096,&quot;alt&quot;:&quot;The employee chat of a test company in Lumi, headed \&quot;HR Assistant\&quot; with an \&quot;Anonyme\&quot; badge, a welcome message saying questions are anonymous, and four suggested questions in French about days off, remote work, expenses and the first week.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The employee chat of a test company in Lumi, headed &quot;HR Assistant&quot; with an &quot;Anonyme&quot; badge, a welcome message saying questions are anonymous, and four suggested questions in French about days off, remote work, expenses and the first week." title="The employee chat of a test company in Lumi, headed &quot;HR Assistant&quot; with an &quot;Anonyme&quot; badge, a welcome message saying questions are anonymous, and four suggested questions in French about days off, remote work, expenses and the first week." srcset="https://substackcdn.com/image/fetch/$s_!Dxxp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!Dxxp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!Dxxp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!Dxxp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86090d2-0bf4-4ba9-a393-92bf219236b5_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The employee side: a link, an access code, and a chat.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G9av!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G9av!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!G9av!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!G9av!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!G9av!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!G9av!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:534422,&quot;alt&quot;:&quot;The Lumi HR admin page \&quot;Questions\&quot;, with filters for all questions, gaps and unhelpful answers, listing two questions asked on 28 July, one about remote work and one about expenses, each tagged \&quot;Absent de vos documents\&quot; and with a topic, and a link to see the assistant's answer. A banner at the top says the free trial has ended.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Lumi HR admin page &quot;Questions&quot;, with filters for all questions, gaps and unhelpful answers, listing two questions asked on 28 July, one about remote work and one about expenses, each tagged &quot;Absent de vos documents&quot; and with a topic, and a link to see the assistant's answer. A banner at the top says the free trial has ended." title="The Lumi HR admin page &quot;Questions&quot;, with filters for all questions, gaps and unhelpful answers, listing two questions asked on 28 July, one about remote work and one about expenses, each tagged &quot;Absent de vos documents&quot; and with a topic, and a link to see the assistant's answer. A banner at the top says the free trial has ended." srcset="https://substackcdn.com/image/fetch/$s_!G9av!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!G9av!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!G9av!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!G9av!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1308b8cb-95e7-4a11-839e-208e6c68a5c6_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The HR side: every question, and a warning when the documents had no answer.</figcaption></figure></div><p>A few of its choices deserved a second look. The search only matches exact words, so <em>cong&#233;</em> won&#8217;t find a policy that says <em>cong&#233;s</em>. A handbook this size might not need a search at all. Anthropic says anything under about 500 pages <a href="https://www.anthropic.com/news/contextual-retrieval">can go straight into the AI&#8217;s instructions</a>. <strong>Ask about choices like these, and ask for a change when you disagree.</strong></p><p><strong>Then test it properly.</strong> Don&#8217;t take the first version as finished. Open a new Claude Code session and ask for a test plan. It should cover every screen, every type of user and every way it could break. Then ask Claude Code to run it. With the <a href="https://code.claude.com/docs/en/chrome">Claude in Chrome extension</a>, it clicks through your app in a real browser window and reports what it finds. <strong>It&#8217;s slow, but it catches what you&#8217;d miss.</strong> Anthropic&#8217;s <a href="https://github.com/anthropics/skills/blob/main/skills/webapp-testing/SKILL.md">webapp-testing skill</a> does the same with Playwright, a tool that drives a browser from code.</p><p>It works on my laptop. Now it needs a real address.</p><div><hr></div><h2>Step 4: Put it online</h2><p>This step sounds technical, and it isn&#8217;t. <strong>It&#8217;s mostly creating accounts and clicking through settings.</strong> Whenever something breaks, you take a screenshot and give it to Claude Code. That&#8217;s the whole method.</p><p>You&#8217;ll need three services. <strong>Supabase</strong> stores the data and handles logins. <strong>Vercel</strong> hosts the website and gives it an address. And an <strong>AI key</strong> lets your product talk to an AI model, from Anthropic or from OpenAI if you prefer. <strong>Think of them as Lego bricks: each one does one job, and Claude Code snaps them together.</strong> Honestly, it&#8217;s the fun part.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lEfR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lEfR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!lEfR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!lEfR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!lEfR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!lEfR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:172041,&quot;alt&quot;:&quot;A simple map of five boxes. In the centre, Vercel, labelled \&quot;your website\&quot;. On the left, GitHub, labelled \&quot;your code, every version\&quot;, with an arrow into Vercel marked \&quot;publishes\&quot;. On the right, Supabase, labelled \&quot;your data and logins\&quot;, and below it the AI model, labelled \&quot;answers questions\&quot;, both connected to Vercel by two-way arrows. Above Vercel, a person with a laptop labelled \&quot;your users\&quot; opens the website address.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A simple map of five boxes. In the centre, Vercel, labelled &quot;your website&quot;. On the left, GitHub, labelled &quot;your code, every version&quot;, with an arrow into Vercel marked &quot;publishes&quot;. On the right, Supabase, labelled &quot;your data and logins&quot;, and below it the AI model, labelled &quot;answers questions&quot;, both connected to Vercel by two-way arrows. Above Vercel, a person with a laptop labelled &quot;your users&quot; opens the website address." title="A simple map of five boxes. In the centre, Vercel, labelled &quot;your website&quot;. On the left, GitHub, labelled &quot;your code, every version&quot;, with an arrow into Vercel marked &quot;publishes&quot;. On the right, Supabase, labelled &quot;your data and logins&quot;, and below it the AI model, labelled &quot;answers questions&quot;, both connected to Vercel by two-way arrows. Above Vercel, a person with a laptop labelled &quot;your users&quot; opens the website address." srcset="https://substackcdn.com/image/fetch/$s_!lEfR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!lEfR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!lEfR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!lEfR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59bd047c-3a5d-4e57-b87b-d1eaa6fee442_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Can Claude Code do all the clicking itself? Almost. <a href="https://supabase.com/docs/guides/getting-started/mcp">Supabase</a> and <a href="https://vercel.com/docs/agent-resources/vercel-mcp">Vercel</a> both offer an MCP server, a connector that lets Claude Code use their tools directly. <strong>Once you&#8217;ve created the accounts and logged in, it can set up the database and deploy the site for you.</strong></p><p>Even without them, you&#8217;re not on your own. <strong>Claude Code usually writes a setup guide without being asked, and your job is to follow it, one step at a time.</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_!d2un!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d2un!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!d2un!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!d2un!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!d2un!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!d2un!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:787255,&quot;alt&quot;:&quot;VS Code showing SETUP.md in Markdown preview, titled \&quot;Mise en production &#8212; pas &#224; pas\&quot;, with numbered steps to create the Supabase database, run the migration files in the SQL Editor, copy three keys, and get a Claude API key with credit, next to Claude Code running in the terminal on the right.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code showing SETUP.md in Markdown preview, titled &quot;Mise en production &#8212; pas &#224; pas&quot;, with numbered steps to create the Supabase database, run the migration files in the SQL Editor, copy three keys, and get a Claude API key with credit, next to Claude Code running in the terminal on the right." title="VS Code showing SETUP.md in Markdown preview, titled &quot;Mise en production &#8212; pas &#224; pas&quot;, with numbered steps to create the Supabase database, run the migration files in the SQL Editor, copy three keys, and get a Claude API key with credit, next to Claude Code running in the terminal on the right." srcset="https://substackcdn.com/image/fetch/$s_!d2un!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!d2un!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!d2un!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!d2un!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502ef776-2896-4b33-a15e-da54ec644266_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The guide Claude Code wrote for me without being asked, in French, one step at a time.</figcaption></figure></div><ol><li><p>Create your accounts on <a href="https://supabase.com">Supabase</a> and <a href="https://vercel.com">Vercel</a>. You can sign in to Vercel with your GitHub account.</p></li><li><p>Create an AI key on <a href="https://platform.claude.com">platform.claude.com</a> and add a few dollars of credit.</p></li><li><p>Open the setup guide. If Claude Code didn&#8217;t write one, ask for a guide written <em>for someone who isn&#8217;t a developer</em>. Or connect the two MCP servers and let it do the setup.</p></li><li><p>Follow the guide one step at a time. After each step, tell Claude Code <em>done, is it OK?</em> When something fails, send a screenshot or paste the error.</p></li><li><p>If your customers are in Europe, choose a European region for the database, and Paris for Vercel&#8217;s functions.</p></li><li><p>Share the short address listed under <strong>Domains</strong> in Vercel. The long one it shows after each update changes every time.</p></li></ol><p><strong>How I did it.</strong> I skipped the MCP servers and did the setup by hand, for the fun of watching each piece click into place. <strong>I followed Claude Code&#8217;s guide one step at a time, and my messages stayed short.</strong> <em>&#8220;1. done, is it OK?&#8221;</em> Then a screenshot. Then <em>&#8220;Step 4:&#8221;</em> with another one. At step 4, creating the first client space failed, so I sent a screenshot. Two minutes later, Claude Code changed the code so the page would show the real error. I pasted 41 lines from Vercel&#8217;s logs into the chat, and we got through 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_!R40V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R40V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!R40V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!R40V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!R40V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!R40V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:668433,&quot;alt&quot;:&quot;The Supabase Schema Visualizer for the hr-agent production project on the free plan, showing tables named profiles, conversations, companies, question_logs, documents and chunks, with lines linking each table's company_id to the companies table.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Supabase Schema Visualizer for the hr-agent production project on the free plan, showing tables named profiles, conversations, companies, question_logs, documents and chunks, with lines linking each table's company_id to the companies table." title="The Supabase Schema Visualizer for the hr-agent production project on the free plan, showing tables named profiles, conversations, companies, question_logs, documents and chunks, with lines linking each table's company_id to the companies table." srcset="https://substackcdn.com/image/fetch/$s_!R40V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!R40V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!R40V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!R40V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0c7a9cf-3e0c-4e80-9e24-beb313d9e376_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The database Claude Code designed: companies, documents, questions, and the links between them.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yG0Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yG0Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!yG0Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!yG0Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!yG0Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!yG0Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:901435,&quot;alt&quot;:&quot;The Vercel project overview for hr-agent on the Hobby plan, showing the production deployment marked Ready, the domain hr-agent-delta.vercel.app, the source branch main with the commit \&quot;Redesign as Lumi\&quot;, and the line \&quot;To update your Production Deployment, push to the main branch.\&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Vercel project overview for hr-agent on the Hobby plan, showing the production deployment marked Ready, the domain hr-agent-delta.vercel.app, the source branch main with the commit &quot;Redesign as Lumi&quot;, and the line &quot;To update your Production Deployment, push to the main branch.&quot;" title="The Vercel project overview for hr-agent on the Hobby plan, showing the production deployment marked Ready, the domain hr-agent-delta.vercel.app, the source branch main with the commit &quot;Redesign as Lumi&quot;, and the line &quot;To update your Production Deployment, push to the main branch.&quot;" srcset="https://substackcdn.com/image/fetch/$s_!yG0Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!yG0Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!yG0Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!yG0Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc835eb-bbcb-42c0-a48a-0deba40e880f_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Live. And the note at the bottom matters: push to main, and the site updates.</figcaption></figure></div><p>About fifty minutes went by between the first version and my design feedback, and most of it was this step. The guide also had me turn off a Vercel setting called Deployment Protection. <strong>You can skip that one: Vercel&#8217;s standard protection <a href="https://vercel.com/docs/deployment-protection">already leaves your main address public</a>.</strong></p><p>It&#8217;s live. It also looks like every other prototype.</p><div><hr></div><h2>Step 5: Improve it with feedback</h2><p>Your first version works. Now use it the way your users will, and you&#8217;ll find things to change: the look, the words, a missing feature, the way it makes money. <strong>Then talk to Claude Code the way you&#8217;d brief a designer: honestly, and all at once.</strong></p><p>And here&#8217;s what makes this loop fast. Claude Code changes the code on your laptop, then saves it to GitHub. Vercel notices the new version and updates the live site on its own. <strong>You describe the change, and a few minutes later it&#8217;s live.</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_!K9BK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K9BK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!K9BK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!K9BK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!K9BK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!K9BK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:176007,&quot;alt&quot;:&quot;A loop of four stations. You describe a change in plain words. Claude Code edits the files on your laptop. It saves the new version to GitHub. Vercel sees the new version and updates the live website, which you open to check, and the loop starts again.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A loop of four stations. You describe a change in plain words. Claude Code edits the files on your laptop. It saves the new version to GitHub. Vercel sees the new version and updates the live website, which you open to check, and the loop starts again." title="A loop of four stations. You describe a change in plain words. Claude Code edits the files on your laptop. It saves the new version to GitHub. Vercel sees the new version and updates the live website, which you open to check, and the loop starts again." srcset="https://substackcdn.com/image/fetch/$s_!K9BK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!K9BK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!K9BK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!K9BK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4530e3b-b1d8-4353-952d-553b1f24dc65_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p>Use your product as each of your users would, and collect every note.</p></li><li><p>Send them all in one message, so Claude Code sees the whole picture before it changes anything.</p></li><li><p>If the look matters, say who it should feel made by: a senior designer, or a brand you admire.</p></li><li><p>Ask Claude Code to save the changes to GitHub, then check the live site.</p></li><li><p>If your product charges, check the pricing math yourself at full usage, the worst case for your costs.</p></li></ol><p><strong>How I did it.</strong> The first version disappointed me. <strong>It worked, but the design felt simplistic, and the whole site was in English.</strong> Here&#8217;s the result of my first prompt:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qQ3G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qQ3G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png 424w, https://substackcdn.com/image/fetch/$s_!qQ3G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png 848w, https://substackcdn.com/image/fetch/$s_!qQ3G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!qQ3G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!qQ3G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.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;:235932,&quot;alt&quot;:&quot;The first landing page of the product, then called AskHR, in English on a light grey background, headed \&quot;Your employees ask. Your policies answer.\&quot;, with indigo buttons to set up a workspace or try the live demo, and three plain cards: upload once, anonymous for employees, see what's missing.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The first landing page of the product, then called AskHR, in English on a light grey background, headed &quot;Your employees ask. Your policies answer.&quot;, with indigo buttons to set up a workspace or try the live demo, and three plain cards: upload once, anonymous for employees, see what's missing." title="The first landing page of the product, then called AskHR, in English on a light grey background, headed &quot;Your employees ask. Your policies answer.&quot;, with indigo buttons to set up a workspace or try the live demo, and three plain cards: upload once, anonymous for employees, see what's missing." srcset="https://substackcdn.com/image/fetch/$s_!qQ3G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png 424w, https://substackcdn.com/image/fetch/$s_!qQ3G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png 848w, https://substackcdn.com/image/fetch/$s_!qQ3G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!qQ3G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f11ca17-d56a-4534-85bc-36d120961a6c_2880x1800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The first version: AskHR, in English, with indigo buttons and three cards.</figcaption></figure></div><p>You&#8217;ve seen this design a hundred times. One look, and you know an AI made it. Twenty years ago, a site like this would have been plenty to collect feedback. Today people expect a clean, polished product from the first click. <strong>Good design is the entry ticket now.</strong> So I turned on the microphone and pushed hard. Here&#8217;s my second prompt, also dictated and untouched:</p><blockquote><p>Feedback : - for now the design feels like done by a junior designer. I need you really to level up and to do something that is really wow. That would make people want to pay for this service and to use it. Now it feels like I did it rapidly in bubble.io&#8230; I really need you to think about a design system and to level up in terms of design to make it really modern, advanced, really thought by a senior designer who did this work to make it really different from what could be done by someone just working on his side. So there is a real work to do on the design. - I also need you to think about the pricing because this is for HR but it will be paying service So I guess on the onboarding and creating company It&#8217;s okay, but you need to find a way to make people pay for the service with different Steps probably different plans depending on the requests per month per users and number of users But it will cost me money because I did and I paid on Tropic to get an API key So I need at least to to have this money back but with a margin So please really think about the pricing - Please translate everything in French. Sorry, I had to say that from the start, but this is for HR in France, for French people, so I really need you to do everything in France for French people.</p></blockquote><p>Eighteen minutes later, the new version was ready:</p><ul><li><p><strong>A name.</strong> Lumi was Claude&#8217;s idea. I kept it.</p></li><li><p><strong>A design system.</strong> Cream paper, ink, pine green and a touch of brass, with elegant serif titles.</p></li><li><p><strong>Four plans.</strong> A free 14-day trial with 200 questions, then &#8364;49 and &#8364;149 a month, then a custom price for large companies. The app enforces each plan&#8217;s question limit.</p></li><li><p><strong>Everything in French.</strong> The screens, the error messages, the AI&#8217;s instructions, and a new French demo client.</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_!uOk1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uOk1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!uOk1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!uOk1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!uOk1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!uOk1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:628165,&quot;alt&quot;:&quot;The pricing section of the Lumi landing page, headed \&quot;Moins cher qu'une heure de RH par mois.\&quot;, with three plan cards: Essentiel at 49 euros a month for 500 questions and up to 50 employees, &#201;quipe at 149 euros a month marked Recommand&#233;, and Entreprise on quote, plus a note that the free trial includes 200 questions over 14 days.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The pricing section of the Lumi landing page, headed &quot;Moins cher qu'une heure de RH par mois.&quot;, with three plan cards: Essentiel at 49 euros a month for 500 questions and up to 50 employees, &#201;quipe at 149 euros a month marked Recommand&#233;, and Entreprise on quote, plus a note that the free trial includes 200 questions over 14 days." title="The pricing section of the Lumi landing page, headed &quot;Moins cher qu'une heure de RH par mois.&quot;, with three plan cards: Essentiel at 49 euros a month for 500 questions and up to 50 employees, &#201;quipe at 149 euros a month marked Recommand&#233;, and Entreprise on quote, plus a note that the free trial includes 200 questions over 14 days." srcset="https://substackcdn.com/image/fetch/$s_!uOk1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!uOk1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!uOk1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!uOk1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F818ee130-f7fd-4aaa-b9a3-bee442b138c4_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">&#8220;Cheaper than one hour of HR per month.&#8221; Claude Code wrote the pitch too.</figcaption></figure></div><p>The plans work, too. <strong>My own test space was created that same evening, and fourteen days later its trial ended on its own.</strong> The assistant stopped answering, and the admin pages invited me to pick a plan.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fXXF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fXXF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!fXXF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!fXXF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!fXXF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!fXXF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:603027,&quot;alt&quot;:&quot;The Lumi HR admin page \&quot;Abonnement\&quot;, showing the current plan \&quot;Essai gratuit\&quot; marked as ended with a note that the assistant no longer answers employees, a usage gauge at 0 of 200 questions for October 2026, and three plan cards to choose from: Essentiel at 49 euros, &#201;quipe at 149 euros and Entreprise on quote.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Lumi HR admin page &quot;Abonnement&quot;, showing the current plan &quot;Essai gratuit&quot; marked as ended with a note that the assistant no longer answers employees, a usage gauge at 0 of 200 questions for October 2026, and three plan cards to choose from: Essentiel at 49 euros, &#201;quipe at 149 euros and Entreprise on quote." title="The Lumi HR admin page &quot;Abonnement&quot;, showing the current plan &quot;Essai gratuit&quot; marked as ended with a note that the assistant no longer answers employees, a usage gauge at 0 of 200 questions for October 2026, and three plan cards to choose from: Essentiel at 49 euros, &#201;quipe at 149 euros and Entreprise on quote." srcset="https://substackcdn.com/image/fetch/$s_!fXXF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png 424w, https://substackcdn.com/image/fetch/$s_!fXXF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png 848w, https://substackcdn.com/image/fetch/$s_!fXXF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png 1272w, https://substackcdn.com/image/fetch/$s_!fXXF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c30a13d-365b-4e33-9011-3d69a9492183_3248x1974.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The trial ended by itself, exactly as designed.</figcaption></figure></div><p><strong>Then check the math.</strong> Claude Code estimated each question at about &#8364;0.04 of AI cost. At full usage, that&#8217;s about &#8364;20 on the &#8364;49 plan and &#8364;100 on the &#8364;149 plan. Add hosting once you charge, and the bigger plan earns surprisingly little. <strong>The easiest fix is the model.</strong> Haiku 5.5 costs fifty times less than Opus 5 on <a href="https://platform.claude.com/docs/en/about-claude/pricing">Claude&#8217;s price list</a>. It&#8217;s plenty for the check that only sorts questions.</p><p><strong>One thing I&#8217;d do differently: install the frontend-design plugin from Step 1 before the build.</strong> Left alone, AI-built websites tend to look alike, with the same fonts and purple gradients. My first version shows it. Anthropic built <a href="https://claude.com/blog/improving-frontend-design-through-skills">that plugin</a> to steer away from them. With it, my feedback round could have focused on taste.</p><p>It looks like a real product now. Before you share it, one more check.</p><div><hr></div><h2>Step 6: Check security and privacy</h2><p>Code written by AI works. That doesn&#8217;t mean it&#8217;s safe. <strong>Before anyone else&#8217;s data goes into your product, ask Claude Code to look for holes.</strong> It costs a few minutes, and it catches what you&#8217;d never spot by clicking around.</p><ol><li><p>Ask Claude Code for a full security review, with a prompt like the one below.</p></li><li><p>Ask it to fix what it found, then to check again.</p></li><li><p>Type <code>/security-review</code> before you ship each new change. It reviews the changes you haven&#8217;t shipped yet.</p></li><li><p>Open the <strong>Security Advisor</strong> in your Supabase dashboard. It flags database settings that are too open.</p></li><li><p>Install the security-guidance plugin from Step 1. It warns Claude Code about risky patterns while it edits.</p></li><li><p>Ask one more question: <em>What personal data does this product store, and does it need to?</em></p></li></ol><blockquote><p>Run a security review of this whole project. Look for any way one client company could see another client&#8217;s data, any secret exposed in the code or the browser, any personal data stored that shouldn&#8217;t be, and anything that breaks the promise that employee questions are anonymous. List each problem with its file and line, how someone could exploit it, how severe it is, and the fix. Don&#8217;t change anything yet.</p></blockquote><p><strong>How I did it.</strong> I skipped this step during the build, and I shouldn&#8217;t have. When I finally ran the review, eleven weeks later, it took Claude Code less than six minutes. The answer wasn&#8217;t comfortable. <strong>It found three serious problems in my live product:</strong></p><ul><li><p><strong>Anyone could read a client&#8217;s documents.</strong> One database function skipped the wall between companies. With a company&#8217;s ID, which every employee&#8217;s browser holds, someone could pull that company&#8217;s whole handbook without logging in.</p></li><li><p><strong>HR could work out who asked what.</strong> Look again at the questions page in Step 3: every question was saved exactly as typed, with the exact time, and linked to the other questions from the same visit. In a small company, <em>&#8220;I&#8217;m pregnant, when does my leave start?&#8221;</em> points straight at one person.</p></li><li><p><strong>An HR admin could give themselves the top plan for free.</strong> By calling the database directly, they could change their own plan, or erase their question count to reset the monthly limit.</p></li></ul><p>It also flagged four smaller ones. <strong>Access codes could be guessed, because nothing slows down repeated attempts.</strong> An employee who leaves keeps access for 30 days. Anyone could script sign-ups to get free questions. And a document uploaded by HR could hide instructions for the AI.</p><p>How worried should you be? It depends on what you&#8217;re doing. For a prototype a few people try, so you can learn what they value, it&#8217;s acceptable. To sell it, you have to be much stricter. Lumi was an experiment: could Claude Code build a product from a brief in a couple of hours? <strong>If the product mattered more, I&#8217;d have spent more time on iterations and testing.</strong></p><p><strong>Then I asked Claude Code to fix the three serious problems.</strong> The search function now answers only the server. HR admins can edit their documents and four settings, nothing more. Documents are treated as data, never as instructions, which closes one of the smaller holes too. The chat now says it&#8217;s an AI assistant, as the <a href="https://artificialintelligenceact.eu/article/50/">EU AI Act</a> requires.</p><p>For anonymity, I asked a simple question: can questions be 100% anonymous? <strong>Honestly, no, as long as people type free text.</strong> Someone can always write a detail only they would know. But we got close. Before a question is saved, the AI rewrites it without names, dates, places or personal details: <em>&#8220;When does maternity leave start?&#8221;</em> Only the day is kept, never the time. Questions are no longer linked to each other, and the answer isn&#8217;t stored at all. The landing page now promises exactly that, and no more.</p><p>The guessable codes, the 30-day access and the scripted sign-ups are still on my list, and they come back in the last step. <strong>Next time, I&#8217;ll run the review before I share the link.</strong> It&#8217;s a habit worth building from your first project.</p><p>Your product is live and safer. Now for the question every builder eventually faces: what happens when people actually sign up?</p><div><hr></div><h2>Step 7: Get ready for real customers</h2><p>Building the product is the easy part now. The hard part starts when a customer says yes. What has to change at one customer, then ten, a hundred, a thousand? <strong>This is the part I&#8217;m working through myself, so take it as a map to adapt.</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_!h0Ie!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h0Ie!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!h0Ie!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!h0Ie!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!h0Ie!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!h0Ie!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png" width="1024" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd878585-2655-4c62-acfb-03901b5925d6_1024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:201524,&quot;alt&quot;:&quot;A staircase of four steps labelled 1, 10, 100 and 1,000 customers. Step 1 carries a contract, paid hosting and a spending cap. Step 10 carries a test copy of the product, automatic tests and backups. Step 100 carries a person reviewing code and a shield, for a bigger tech team and a security test. Step 1,000 carries a small team and security certificates.&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://www.theaithinker.com/i/220956955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A staircase of four steps labelled 1, 10, 100 and 1,000 customers. Step 1 carries a contract, paid hosting and a spending cap. Step 10 carries a test copy of the product, automatic tests and backups. Step 100 carries a person reviewing code and a shield, for a bigger tech team and a security test. Step 1,000 carries a small team and security certificates." title="A staircase of four steps labelled 1, 10, 100 and 1,000 customers. Step 1 carries a contract, paid hosting and a spending cap. Step 10 carries a test copy of the product, automatic tests and backups. Step 100 carries a person reviewing code and a shield, for a bigger tech team and a security test. Step 1,000 carries a small team and security certificates." srcset="https://substackcdn.com/image/fetch/$s_!h0Ie!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png 424w, https://substackcdn.com/image/fetch/$s_!h0Ie!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png 848w, https://substackcdn.com/image/fetch/$s_!h0Ie!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!h0Ie!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd878585-2655-4c62-acfb-03901b5925d6_1024x572.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Your first customer</h3><p>Move to paid hosting. Vercel&#8217;s free plan <a href="https://vercel.com/docs/limits/fair-use-guidelines">forbids commercial use</a>, and Supabase <a href="https://supabase.com/docs/guides/platform/free-project-pausing">pauses free projects</a> after a week without activity. <strong>Count about $45 a month: Vercel Pro at $20, Supabase Pro from $25.</strong> I hit one more reason myself. When I moved Lumi&#8217;s code into a GitHub organization, Vercel&#8217;s free plan quietly stopped deploying it. It doesn&#8217;t support private repositories owned by an organization. I shipped the security fix from my laptop with the Vercel CLI instead.</p><p><strong>With documents as sensitive as HR policies, I&#8217;d bring in a developer from the first customer.</strong> Their job is to check the security and close the three gaps from Step 6: slow down repeated access-code attempts, let HR cut off someone who has left, and add a bot check to sign-up. The risk isn&#8217;t theoretical. In 2025, a researcher checked 1,645 apps built with Lovable, another AI app builder, and found <a href="https://mattpalmer.io/posts/statement-on-CVE-2025-48757/">170 that exposed their users&#8217; data</a>, because of database rules like the ones Lumi got wrong.</p><p>You&#8217;ll also need a contract that covers the data. Anthropic, Vercel and Supabase all handle it for you, which makes them your <a href="https://gdpr-info.eu/art-28-gdpr/">sub-processors</a> under the GDPR. <strong>In France, your customer must also consult its works council, the CSE, before rolling out an AI tool.</strong> That holds even for a trial. A court in Nanterre <a href="https://cms.law/fr/fra/a-la-une/quand-le-cse-stoppe-le-deploiement-de-l-ia">suspended a rollout</a> that skipped it.</p><p>Cap your AI spending, too. My $5 of credit works as a hard limit. The Claude API is <a href="https://support.claude.com/en/articles/8977456-how-do-i-pay-for-my-api-usage">paid in advance</a>, so when the credit runs out, the assistant simply stops. Nothing more gets charged unless you turn on auto-reload. <strong>With paying customers, you&#8217;ll want auto-reload on, so set a monthly <a href="https://platform.claude.com/docs/en/api/rate-limits">spend limit</a> in the Console to keep a cap.</strong></p><p>One customer is a pilot. With ten, a single mistake reaches all of them at once.</p><h3>Ten customers</h3><p><strong>Stop changing the live product directly.</strong> Keep a test copy, a second Supabase project for example, and try every change there first. AI agents make mistakes on live data too. In July 2025, Replit&#8217;s agent <a href="https://fortune.com/2025/07/23/ai-coding-tool-replit-wiped-database-called-it-a-catastrophic-failure/">deleted the live database</a> of an app SaaStr&#8217;s founder was building, during a declared code freeze. Replit&#8217;s fix was to separate test and live databases automatically.</p><p><strong>Ask Claude Code to write automatic tests and run them before each update.</strong> Its own docs call this <a href="https://code.claude.com/docs/en/best-practices">giving Claude a way to verify its work</a>. Turn on backups, using Supabase&#8217;s <a href="https://supabase.com/docs/guides/deployment/going-into-prod">production checklist</a>, which covers the security settings too. Automate what you still do by hand. In Lumi, I still switch a customer&#8217;s plan in the database after they pay. And move the question-sorting check to a cheaper model.</p><p>Up to ten, it&#8217;s still you and Claude Code. A hundred needs more hands.</p><h3>A hundred customers</h3><p><strong>Grow the technical team: one developer won&#8217;t cover it anymore.</strong> Pay someone outside to test your security. Watch your API limits too. The Claude API&#8217;s first paid tier caps spending at $500 a month, and the cap rises as you move up <a href="https://platform.claude.com/docs/en/api/rate-limits">usage tiers</a>. Some customers will ask for their data to stay in Europe. The Claude API <a href="https://platform.claude.com/docs/en/manage-claude/data-residency">stores data in the US only</a> for now, so prepare your answer before the question comes.</p><p>At a thousand, the questions come from security teams, not users.</p><h3>A thousand customers</h3><p>By then you need a small team, and a solo builder with an AI won&#8217;t be enough. Large customers send long security questionnaires, and some ask for certifications. Engineers will rewrite parts of the code. Addy Osmani, who has led engineering teams at Google, calls this <a href="https://addyo.substack.com/p/the-70-problem-hard-truths-about">the 70% problem</a>: AI gets you 70% of the way surprisingly fast, and the last 30% is what makes software ready for production. <strong>Two hours bought me the right to talk to customers with a real product. The rest is real work.</strong></p><div><hr></div><h2>Your turn</h2><p>Open VS Code, start Claude Code, and write your brief. Let it build, put it online, give it one honest round of feedback, and ask for a security review. <strong>That&#8217;s an afternoon, and you&#8217;ll end it with a link.</strong></p><p>The same method fits far more than HR. A client portal for a service business. An internal tool that answers your team&#8217;s repeated questions. A paid version of the spreadsheet your customers keep asking for. A support assistant priced per resolved question. <strong>The requirements doc can wait until someone has used the real thing.</strong></p><p><strong>You&#8217;ll know it worked when the people you built it for ask when they can start.</strong> <a href="https://hr-agent-delta.vercel.app">Lumi is live</a>, if you want to see where yours could begin.</p>]]></content:encoded></item><item><title><![CDATA[How to build an AI-native software factory]]></title><description><![CDATA[Measure where your team&#8217;s work piles up. Put one bought agent on the toil nobody wants. Build only the platform that line needs. Track what merges, and what it costs.]]></description><link>https://www.theaithinker.com/p/how-to-build-an-ai-native-software</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-build-an-ai-native-software</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 05 Oct 2026 11:03:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/341bf2eb-e705-42f0-bc63-8319703b47f7_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Everyone on your team already has Claude Code or Cursor. A few of them run three agents at once. Then leadership forwards you <a href="https://www.youtube.com/watch?v=17-YSUHo6Lk">Uber&#8217;s talk about its software factory</a>. The note says: where&#8217;s ours? Your first reaction is fair. You already bought the tools. <strong>So what is left to build?</strong></p><p>The answer is the company part. A coding tool makes a single developer faster, inside their own session, on their own laptop. A company running hundreds of agents needs more than that. Work has to start from a ticket or an alert, with nobody at the keyboard. Agents have to run in the cloud, under rules every team shares. And someone has to be able to read the bill. <strong>A software factory is that system around the agents, from the first idea to production.</strong></p><p>That raises the obvious question: do you have to write your own coding agent? Uber&#8217;s answer is no. Its developers use Claude Code, Codex and OpenCode, and none of its six building blocks is a coding agent. Other companies with a factory made the same call. <strong>You keep buying the agent, and you build the setup around it, the factory floor.</strong></p><p>This article follows Uber through every step. Uber has published more about its factory than anyone else this year. There&#8217;s <a href="https://www.uber.com/us/en/blog/efficient-software-factory/">a detailed post on what it costs to run</a>, and two talks at AI Engineer. There are separate posts on code review, test generation, migrations and agent identity. Uber also sells no agents, so it has nothing to pitch. Still, none of this is a template to copy, because your company isn&#8217;t Uber. <strong>At each step, you&#8217;ll see what Uber built first, then what other companies did, so you can take what fits your own context.</strong></p><p>So how do you start? First, measure where work waits today, from your own git history. Then put one bought agent on toil, the work nobody wants to do by hand. At Uber, agents took on migrations and code review well before feature work. Next, build only the platform that first line proves you need, usually a model gateway. Throughout, measure what merges, what it costs, and how often it breaks. <strong>Uber prices every agent the same way: cost per unit of work, like cost per merged pull request.</strong></p><p>Here&#8217;s the route, in four stops.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x8GC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x8GC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!x8GC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!x8GC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!x8GC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x8GC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3435501,&quot;alt&quot;:&quot;hand-drawn black-and-white infographic with four stops in a row, each labeled with a word or two: The why (a laptop with a small agent icon, and pull requests piling up in front of a narrow review gate), The agents on the line (a loop of six stations with a small agent icon at each), The floor (a stack of six blocks under a single agent icon), The rollout (a path climbing from one agent on a small task to a full loop, with a gauge beside it).&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://www.theaithinker.com/i/218393973?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white infographic with four stops in a row, each labeled with a word or two: The why (a laptop with a small agent icon, and pull requests piling up in front of a narrow review gate), The agents on the line (a loop of six stations with a small agent icon at each), The floor (a stack of six blocks under a single agent icon), The rollout (a path climbing from one agent on a small task to a full loop, with a gauge beside it)." title="hand-drawn black-and-white infographic with four stops in a row, each labeled with a word or two: The why (a laptop with a small agent icon, and pull requests piling up in front of a narrow review gate), The agents on the line (a loop of six stations with a small agent icon at each), The floor (a stack of six blocks under a single agent icon), The rollout (a path climbing from one agent on a small task to a full loop, with a gauge beside it)." srcset="https://substackcdn.com/image/fetch/$s_!x8GC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!x8GC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!x8GC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!x8GC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39abc87-14b1-43c1-90aa-61d4bbf0a1ca_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>The why.</strong> A coding tool speeds up one developer. A company hits four limits that no tool fixes alone.</p></li><li><p><strong>The agents on the line.</strong> Here&#8217;s Uber&#8217;s map of agents, one change followed end to end, and why the first agents took the toil.</p></li><li><p><strong>The floor.</strong> You&#8217;ll see Uber&#8217;s six building blocks, and which ones to buy or build.</p></li><li><p><strong>The rollout.</strong> The order that works, what to measure, and how to keep developers with you.</p></li></ul><p>By the end, you&#8217;ll have a map of the six building blocks. Each one comes with a buy-or-build call. You&#8217;ll know which agent goes first, and what to measure once it runs. You&#8217;ll also have a plan for the developers who&#8217;d rather not change a thing. <strong>Your developers keep the agents they like, and your company gets a factory that ships.</strong></p><p>This article draws on more than 70 public sources. Every one is listed at the end, grouped by company, so you can read the originals yourself.</p><p>Walk the floor with me.</p><div><hr></div><h2>Why the coding tools stop short</h2><p>A coding tool makes a developer faster. A company running dozens of agents hits four limits that no tool fixes alone. <strong>Each limit is a reason to build the factory, and none of them is about the model.</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_!VfQw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VfQw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!VfQw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!VfQw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!VfQw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!VfQw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4695114,&quot;alt&quot;:&quot;hand-drawn black-and-white diagram with a laptop and a small robot at the center, and four branches leading to four small scenes, each with a short label. Review can't keep up: a tall pile of pull requests in front of one narrow gate. Laptops can't run a fleet: a cramped laptop with keys and a padlock spilling out of it. Nobody sees the bill: a long receipt unrolling off the edge. Every team its own way: three desks, each with a different rulebook.&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://www.theaithinker.com/i/218393973?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white diagram with a laptop and a small robot at the center, and four branches leading to four small scenes, each with a short label. Review can't keep up: a tall pile of pull requests in front of one narrow gate. Laptops can't run a fleet: a cramped laptop with keys and a padlock spilling out of it. Nobody sees the bill: a long receipt unrolling off the edge. Every team its own way: three desks, each with a different rulebook." title="hand-drawn black-and-white diagram with a laptop and a small robot at the center, and four branches leading to four small scenes, each with a short label. Review can't keep up: a tall pile of pull requests in front of one narrow gate. Laptops can't run a fleet: a cramped laptop with keys and a padlock spilling out of it. Nobody sees the bill: a long receipt unrolling off the edge. Every team its own way: three desks, each with a different rulebook." srcset="https://substackcdn.com/image/fetch/$s_!VfQw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!VfQw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!VfQw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!VfQw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd74ded25-5499-416d-ac44-d855b6efc679_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Laptops can&#8217;t run a fleet</h3><p>The first limit is where the agents run. At Uber, <a href="https://www.uber.com/us/en/blog/efficient-software-factory/">a growing share of agent sessions</a> start without a human. Code review, CI fixes, on-call triage and maintenance start them. A laptop can&#8217;t do that, because it sleeps when its owner does. <strong>Uber calls the move from laptops to managed agents its core strategic shift.</strong> Managed environments, it says, give it <em>&#8220;complete control&#8221;</em> over model routing, harnesses and spend.</p><p>Two other companies hit the laptop wall from different sides:</p><ul><li><p><strong>DoorDash</strong> worried about access. <a href="https://careersatdoordash.com/blog/delegating-engineering-work-to-cloud-based-agents/">Its platform team</a> points out that a laptop holds <em>&#8220;SSH keys, VPN sessions, and authenticated tools&#8221;</em>. Handing an autonomous agent that access means <em>&#8220;a potentially large blast radius&#8221;</em>.</p></li><li><p><strong>Ramp</strong> hit a ceiling on numbers. <a href="https://newsletter.pragmaticengineer.com/p/why-ramp-built-inspect">Its engineers liked Claude Code from the start</a>, but on a laptop they could run only a couple of sessions.</p></li></ul><h3>Every team invents its own way</h3><p>The second limit is the quietest. Give a hundred developers a coding agent, and you get a hundred setups. At Uber, engineers built <em><a href="https://www.youtube.com/watch?v=17-YSUHo6Lk">&#8220;tons of skills across many repositories&#8221;</a></em>. There was <em>&#8220;a lot of duplication&#8221;</em>, and many were of poor quality. Security rules end up in one team&#8217;s prompt and missing from the next. Anthropic&#8217;s <a href="https://claude.com/blog/the-ai-native-sdlc-playbook">playbook</a> suggests the fix: write each rule once as a skill, and share it. <strong>A factory is where the company&#8217;s way of working lives, once, for every agent.</strong></p><p>Adoption splinters the same way. By March, <a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development">92% of Uber&#8217;s developers used agents monthly</a>, yet adoption still came slower than expected. Google&#8217;s <a href="https://services.google.com/fh/files/misc/2025_state_of_ai_assisted_software_development.pdf">DORA research</a> names the result: <em>&#8220;localized pockets of productivity&#8221;</em> that get lost downstream. <strong>Fast individuals don&#8217;t add up to a fast company on their own.</strong></p><h3>Nobody sees the bill</h3><p>When every developer picks a tool and a model, nobody sees the total until the invoice lands. Uber&#8217;s AI costs were <a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development">up 6x since 2024</a> by March. By June, <a href="https://techcrunch.com/2026/06/02/uber-caps-employee-ai-spending-after-blowing-through-budget-in-four-months/">it had spent its whole annual AI budget in four months</a>. Much of the waste is invisible from a single laptop. <strong>Uber&#8217;s session analysis flags simple sessions run on Opus that Sonnet could easily handle.</strong> One developer can&#8217;t see that pattern, and a gateway sees all of it.</p><p>The goal is visibility, and a smaller bill can come second. Shopify&#8217;s Farhan Thawar <a href="https://www.firstround.com/ai/shopify">puts the trade plainly</a>:</p><blockquote><p><em>&#8220;If your engineers are spending $1,000 per month more because of LLMs and they are 10% more productive, that&#8217;s too cheap.&#8221;</em></p></blockquote><p>You can only make that call if you know what each merged change cost. Individual licenses tell you the seat price. <strong>A factory tells you the cost per outcome.</strong> Without that number, the budget talk turns into a fight over seats.</p><h3>Review can&#8217;t keep up</h3><p>The fourth limit appears once the first three are solved, and output goes up. Picture your team before the agents arrived, and then after.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HE_7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HE_7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!HE_7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!HE_7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!HE_7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!HE_7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4705975,&quot;alt&quot;:&quot;hand-drawn black-and-white diagram in two panels. Left panel, titled \&quot;Before\&quot;: one developer at a keyboard writing code slowly, a short line of two pull requests, and a reviewer keeping up at a gate. Right panel, titled \&quot;After\&quot;: one laptop with small agent icons writing in parallel, a tall stack of pull requests piled in front of a single narrow review gate, and a small label under the stack that reads \&quot;the new constraint\&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://www.theaithinker.com/i/218393973?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white diagram in two panels. Left panel, titled &quot;Before&quot;: one developer at a keyboard writing code slowly, a short line of two pull requests, and a reviewer keeping up at a gate. Right panel, titled &quot;After&quot;: one laptop with small agent icons writing in parallel, a tall stack of pull requests piled in front of a single narrow review gate, and a small label under the stack that reads &quot;the new constraint&quot;." title="hand-drawn black-and-white diagram in two panels. Left panel, titled &quot;Before&quot;: one developer at a keyboard writing code slowly, a short line of two pull requests, and a reviewer keeping up at a gate. Right panel, titled &quot;After&quot;: one laptop with small agent icons writing in parallel, a tall stack of pull requests piled in front of a single narrow review gate, and a small label under the stack that reads &quot;the new constraint&quot;." srcset="https://substackcdn.com/image/fetch/$s_!HE_7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!HE_7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!HE_7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!HE_7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e9918c5-4522-4298-a4c7-1edd03964ef9_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Uber&#8217;s own review team <a href="https://ai.engineer/talks/EL123UNokkI-building-ureview-ubers-multi-agent-code-review">gave the numbers</a> at AI Engineer in August:</p><blockquote><p><em>&#8220;Back in 2024, we were seeing that engineers would get their first review within 3 hours. Now in 2026, that has grown to 9 hours.&#8221;</em></p></blockquote><p>More code reached the same number of reviewers. <strong>More output doesn&#8217;t help if every change still waits for a person.</strong> Spotify saw the same thing. After it adopted AI, <a href="https://engineering.atspotify.com/2026/6/code-with-claude-coding-is-no-longer-the-constraint">it had 76% more pull requests to review</a>. Across 22,000 developers, <a href="https://www.faros.ai/blog/ai-acceleration-whiplash-takeaways">Faros AI</a>, an engineering analytics company, measured a 441.5% rise in median time spent in review.</p><p>This is where the rule from <a href="https://www.theaithinker.com/p/how-to-pick-the-ai-agents-worth-building">my earlier post on picking agents</a> applies. Find the one step everything waits on, and aim your next agent at it. A software factory does that for the whole line, from idea to production. Review is the slow step for many teams today. Uber says its next ones are CI capacity, experiment slots, and deciding what to build. <strong>The factory is how you keep finding the slow step, and moving it.</strong></p><p>So which agents go on the line, and where do they plug in? Start with Uber&#8217;s map.</p><div><hr></div><h2>The agents on the line</h2><p>In this article, a line means one agent with one job, like reviewing pull requests or cleaning up old feature flags. Uber runs a small set of these agents across its whole SDLC, plus one front door. Look at the map first. Then follow one feature through it, and see why the first agents took the toil.</p><h3>Map the four layers first</h3><p>Uber drew its map as <a href="https://www.uber.com/us/en/blog/efficient-software-factory/">Figure 3 of its efficiency post</a>. It sorts every agent session into four layers, from the most specialized to the most general. In Uber&#8217;s words, <em>&#8220;the higher the layer, the more control we have over cost, quality, and model selection&#8221;</em>. <strong>Picture your own company on that map before you build anything.</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_!3iay!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3iay!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!3iay!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!3iay!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!3iay!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!3iay!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4712195,&quot;alt&quot;:&quot;hand-drawn black-and-white diagram of four stacked horizontal bands. The top band holds five small boxes, one per specialized agent, each with a tiny price tag. The second band is one wide doorway with a single robot greeting a queue of requests. The third band is a laptop with a shelf of shared skill books beside it. The bottom band is a plain laptop with a developer typing, labeled as the open space for everything else. A thin arrow runs up the left side from the bottom band to the top one.&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://www.theaithinker.com/i/218393973?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white diagram of four stacked horizontal bands. The top band holds five small boxes, one per specialized agent, each with a tiny price tag. The second band is one wide doorway with a single robot greeting a queue of requests. The third band is a laptop with a shelf of shared skill books beside it. The bottom band is a plain laptop with a developer typing, labeled as the open space for everything else. A thin arrow runs up the left side from the bottom band to the top one." title="hand-drawn black-and-white diagram of four stacked horizontal bands. The top band holds five small boxes, one per specialized agent, each with a tiny price tag. The second band is one wide doorway with a single robot greeting a queue of requests. The third band is a laptop with a shelf of shared skill books beside it. The bottom band is a plain laptop with a developer typing, labeled as the open space for everything else. A thin arrow runs up the left side from the bottom band to the top one." srcset="https://substackcdn.com/image/fetch/$s_!3iay!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!3iay!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!3iay!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!3iay!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1522928-0aec-4344-8ced-fbe79562ae61_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here are the four layers, top to bottom:</p><ul><li><p><strong>Specialized agents.</strong> A handful of agents, each built for one narrow job. They run in Uber&#8217;s cloud, with a person in the loop. Minion turns an intent into a pull request, and uReview reviews it. Agentic XP writes up experiment results. Conan AI finds the root cause of an alert, and Fawkes runs scheduled maintenance. Each has its own unit price: cost per merged pull request, per review, per alert, per cleanup.</p></li><li><p><strong>One general agent.</strong> Cortana is the single front door. It runs in Uber&#8217;s cloud and needs no setup. It can use any skill in the company&#8217;s marketplace. Its unit is cost per query.</p></li><li><p><strong>Sessions with skills.</strong> A developer&#8217;s own session on a laptop, loaded with the same shared skills. Uber counts more than 3,600 of them.</p></li><li><p><strong>Raw sessions.</strong> Claude Code, Codex or OpenCode with nothing added. The developer supplies the prompt, the context and the steering.</p></li></ul><p>Three choices stand out. Five specialized agents cover code generation, validation, deploy, observation and maintenance for the whole company. There is no agent per team. Requests have one front door, so nobody hunts for the right bot. <strong>And the coding tools stay, at the bottom, for everything that doesn&#8217;t fit a lane yet.</strong> That&#8217;s the answer to the developer who fears the factory takes away their tools.</p><p><strong>Read the map from the bottom up, and it&#8217;s also a path.</strong> A task starts in a raw session. Once several people do it the same way, it becomes a shared skill. Once it runs often enough to benchmark, it earns a specialized agent. Uber&#8217;s figure gives the rule for the top layer: pick the narrowest task and build a real benchmark. Then run the Pareto-optimal model, the one with the best trade-off between cost and quality. <em>&#8220;Every dollar maps to a unit of work.&#8221;</em></p><p>You won&#8217;t start with five. If your team runs Claude Code or Cursor today, it lives in the bottom two layers. A shared skills folder is the cheapest step up. Your first line on toil becomes your first specialized agent. <strong>Keep the bottom layer open, because that&#8217;s where the next specialized agent gets discovered.</strong></p><p>How others built their layers:</p><ul><li><p><strong>Shopify</strong> started with the front door. <a href="https://shopify.engineering/under-the-river">River</a> is one agent in the company Slack, and it only works in public channels. It now co-authors one in eight merged pull requests. Then teams asked for their own review, research and migration agents. Shopify&#8217;s take: <em>&#8220;We had not built a thing that could be a hundred Rivers.&#8221;</em> So it built the platform underneath.</p></li><li><p><strong>DoorDash</strong> built the skills layer with permissions attached. On <a href="https://careersatdoordash.com/blog/delegating-engineering-work-to-cloud-based-agents/">its Flux platform</a>, a playbook is <em>&#8220;a reusable unit of agentic work&#8221;</em>. Each playbook declares the tools it needs, and gets only those permissions.</p></li><li><p><strong>Spotify</strong> went straight to one specialized lane. <a href="https://engineering.atspotify.com/2026/4/background-coding-agents-dataset-migrations-honk-part-4">Honk</a>, its background agent, does fleet-wide maintenance. For one dataset change, it migrated about 1,800 downstream pipelines. At the time, Honk had no access to shared skills, a choice Spotify made to keep its outcomes predictable.</p></li></ul><h3>Follow one change from idea to incident</h3><p>At AI Engineer, <a href="https://www.youtube.com/watch?v=17-YSUHo6Lk">Adam Huda walked one feature through Uber&#8217;s factory</a>. The idea fits the moment. A rider leaving a packed World Cup stadium gets a better pickup spot, away from the crowd. Here&#8217;s that one feature, step by step:</p><ul><li><p><strong>Idea.</strong> The team jams on it in a Slack thread and tags Cortana. Cortana checks the context graph for past large-venue events, and for the stadiums where this would matter. That research points to a North America rollout, since that&#8217;s where the stadiums are. Cortana then drafts two Figma mock-ups for an A/B test, each with a different button text. It also lists the existing screens and backend services the feature can reuse. Huda says getting everyone aligned on this used to take weeks.</p></li><li><p><strong>Build.</strong> Cortana hands off to Minion, Uber&#8217;s cloud coding agent, running in a DevPod. Minion writes the backend change and the front-end change for the new pickup screen, across repositories. It stops at a draft pull request and doesn&#8217;t push to CI yet. Toil can go straight through, but a new feature gets checked first, so CI doesn&#8217;t take the extra load.</p></li><li><p><strong>Validate.</strong> The checks move earlier, before CI. A skill launches the app in a simulator, grabs a screenshot of the pickup screen, and compares it to the Figma mock-up. Another brings the service up in staging, to test the new front end against the new backend.</p></li><li><p><strong>Review.</strong> A faster, medium-sized model reviews the change before it reaches CI. A stronger reasoning model does a deeper pass in CI.</p></li><li><p><strong>CI.</strong> When the build fails, self-healing CI fixes many of the errors on its own.</p></li><li><p><strong>Hand-off.</strong> The pull request reaches a person with a table of every check it passed, simulator screenshots included. <strong>That table gives the human reviewer a reason to trust the diff.</strong></p></li><li><p><strong>Maintain.</strong> The experiment ends, and variant B is no longer needed. Its feature flag goes on a managed cleanup loop. The loop runs over the weekend, when CI has spare capacity, and caps how many diffs land on engineers when they&#8217;re back. Whether those diffs land or get rejected becomes data to improve the cleanup skill.</p></li><li><p><strong>Incident.</strong> Once a month, Uber reads its incident reviews for patterns. Each one it can catch becomes a new maintenance skill, applied to every service.</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_!aKoT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aKoT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!aKoT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!aKoT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!aKoT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!aKoT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4415285,&quot;alt&quot;:&quot;hand-drawn black-and-white loop diagram titled \&quot;One change, from idea to incident\&quot;. Six stations sit around an oval track, each with a small robot at a desk: Plan, Design, Build, Test, Review, Maintain. Between the stations, file icons show what each stage hands on: intent.md, spec.md, plan.md, code plus tests, PR, incident. A human hand marks three gates on the track: Accept, Approve plan, Approve merge. An arrow from Maintain back to Plan is labeled \&quot;New intent\&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://www.theaithinker.com/i/218393973?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white loop diagram titled &quot;One change, from idea to incident&quot;. Six stations sit around an oval track, each with a small robot at a desk: Plan, Design, Build, Test, Review, Maintain. Between the stations, file icons show what each stage hands on: intent.md, spec.md, plan.md, code plus tests, PR, incident. A human hand marks three gates on the track: Accept, Approve plan, Approve merge. An arrow from Maintain back to Plan is labeled &quot;New intent&quot;." title="hand-drawn black-and-white loop diagram titled &quot;One change, from idea to incident&quot;. Six stations sit around an oval track, each with a small robot at a desk: Plan, Design, Build, Test, Review, Maintain. Between the stations, file icons show what each stage hands on: intent.md, spec.md, plan.md, code plus tests, PR, incident. A human hand marks three gates on the track: Accept, Approve plan, Approve merge. An arrow from Maintain back to Plan is labeled &quot;New intent&quot;." srcset="https://substackcdn.com/image/fetch/$s_!aKoT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!aKoT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!aKoT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!aKoT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd27a3efb-864e-4c1d-8a93-2d572d172b43_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Anthropic wrote the same loop down as a <a href="https://claude.com/blog/the-ai-native-sdlc-playbook">playbook</a>, by Louis Claxton. Anthropic sells the agent it runs on, so read it for the shape. Each stage writes one file to version control, and the next stage starts by reading it. An idea becomes <code>intent.md</code>, then <code>spec.md</code>, then <code>plan.md</code>, then code and tests, a pull request, and an incident record. People sit at three gates: accepting the intent, approving the plan, and approving the merge. <strong>The playbook&#8217;s own advice is to prompt each stage by hand first, and automate the loop last.</strong></p><p>How others run the same stages:</p><ul><li><p><strong>Stripe.</strong> <a href="https://stripe.dev/blog/minions-stripes-one-shot-end-to-end-coding-agents-part-2">Its Minions</a> merge over 1,300 pull requests a week with no human-written code. A person still reviews every one.</p></li><li><p><strong>Spotify.</strong> <a href="https://engineering.atspotify.com/2025/12/feedback-loops-background-coding-agents-part-3">Its background agent</a> runs verifiers on every change. A model acting as judge vetoes about a quarter of sessions, and the agent then corrects course half the time.</p></li><li><p><strong>DoorDash.</strong> <a href="https://careersatdoordash.com/blog/how-we-learned-to-trust-our-ai-code-reviewer-at-doordash/">It splits review in two</a>. A scout flags suspicious areas, and deeper reviewers check each lead.</p></li></ul><h3>Put the first agent on toil</h3><p>So which stage goes first? At Uber, the answer was the toil. The <a href="https://sre.google/sre-book/eliminating-toil/">Google SRE book</a> defines it in one sentence worth keeping:</p><blockquote><p><em>&#8220;Toil is the kind of work tied to running a production service that tends to be manual, repetitive, automatable, tactical, devoid of enduring value, and that scales linearly as a service grows.&#8221;</em></p></blockquote><p>Uber has run more than 250 automated migrations, touching 9 million lines of code. Minion builds features too, but for anything past toil it stops at a draft pull request. Uber wants to validate those features before they load up CI. <strong>Pick the line where a wrong answer is cheap and a right one is obvious.</strong> Use the SRE sentence as a checklist, and add one test: &#8220;done&#8221; must be easy to check.</p><p>Toil still needs the right tool, and Uber learned that the hard way. For its JUnit 5 migration, <a href="https://www.uber.com/us/en/blog/junit-migration/">Uber tried generative AI first</a>:</p><blockquote><p><em>&#8220;We attempted to use generative AI to migrate multiple test class files at once, but this approach was unsuccessful.&#8221;</em></p></blockquote><p>So Uber switched to a deterministic approach. An internal tool for large code changes, called Shepherd, generated over 5,000 diffs. AI only helped debug the test and build failures. More than 75,000 test classes moved in four months. <strong>When you can write the rule, write the rule.</strong> Save the agent for what the rule can&#8217;t reach.</p><p>How others picked their first line:</p><ul><li><p><strong>DoorDash</strong> started with code review. <a href="https://careersatdoordash.com/blog/delegating-engineering-work-to-cloud-based-agents/">Its platform team</a> says review <em>&#8220;was frequent, measurable, and easy for engineers to evaluate&#8221;</em>.</p></li><li><p><strong>Spotify</strong> started with migrations. <a href="https://engineering.atspotify.com/2025/11/spotifys-background-coding-agent-part-1">Its agents&#8217; first 1,500 merged pull requests</a> came from them, at 60% to 90% less time than by hand.</p></li></ul><p>You can run that first line on an agent you buy. Claude Code on the web, Copilot cloud agent and Cursor&#8217;s cloud agents all fit. Each runs the task in an isolated machine and hands back a pull request. <strong>Start it in shadow mode, where it comments and nobody has to act.</strong> If your first line lives in CI, the playbook&#8217;s smallest move is a read-only job. <code>claude -p</code> runs Claude Code inside a script, with no chat window:</p><blockquote><p><em>&#8220;Use claude -p in a pipeline job to triage a failed build, summarize a flaky test, or draft the changelog.&#8221;</em></p></blockquote><p>It reads and it reports. <strong>Nothing ships until a person says so.</strong> Once that first line earns trust, the next question is what to add.</p><h3>More agents worth trying</h3><p>Before you add another agent, ask what it adds to review and to CI. The agents that take load off people go first. Uber already runs these four:</p><ul><li><p><strong>Review routing.</strong> <a href="https://background-agents.com/summit/sessions/nikhil-ramakrishnan/">Code Inbox</a> sends each pull request to the reviewer best placed to read it. It drains the review queue faster.</p></li><li><p><strong>Orchestrated migrations.</strong> Shepherd picks the targets, and Minion handles the odd cases. Plan an auto-merge rule for the safe diffs.</p></li><li><p><strong>Feature-flag cleanup.</strong> A managed loop removes stale flags when CI has spare capacity.</p></li><li><p><strong>Design specs.</strong> <a href="https://www.uber.com/us/en/blog/automate-design-specs/">uSpec</a> connects an agent in Cursor to Figma and writes design-system specs. A full screen-reader spec for three platforms takes under two minutes.</p></li></ul><p>And three agents from other companies:</p><ul><li><p><strong>Fix on request, at DoorDash.</strong> On any review comment, from the agent or a person, anyone can tag the agent in the pull request thread. <em>&#8220;Can you handle the nil check here?&#8221;</em> <a href="https://careersatdoordash.com/blog/doordash-built-an-ai-code-reviewer-engineers-actually-listen-to/">A fixer makes the change</a> in a remote machine and pushes it back to the pull request. Claude Code on the web <a href="https://code.claude.com/docs/en/claude-code-on-the-web">sells the same move</a>.</p></li><li><p><strong>Security scans, from Anthropic&#8217;s playbook.</strong> A scheduled agent scans your most critical repositories. The <a href="https://claude.com/blog/the-ai-native-sdlc-playbook">playbook</a> says the first scan will flag code everyone thought was clean. Anthropic sells a scanner, so read that with care.</p></li><li><p><strong>Fraud checks, at Warp.</strong> <a href="https://www.warp.dev/blog/oz-orchestration-platform-cloud-agents">Warp runs a fraud-bot every 8 hours</a>. In one run, it caught nearly $60K of fraudulent usage and wrote the fixes. Warp sells the platform it runs on.</p></li></ul><p>Each of these agents needs the same things underneath. It needs a place to run, tools to reach, and rules it can&#8217;t break. <strong>That&#8217;s the floor.</strong> Pop the hood and look at what it&#8217;s made of.</p><div><hr></div><h2>The six building blocks under the agent</h2><p>Uber gave the clearest tour of its platform at AI Engineer in August. <a href="https://www.youtube.com/watch?v=17-YSUHo6Lk">Uday Kiran Medisetty and Adam Huda</a> walked through six building blocks. <strong>None of the six is the coding agent itself.</strong> First came a model gateway and an MCP gateway. Then cloud dev environments, called DevPods, and a skills marketplace. Last came a context graph and Cortana, the front-door assistant.</p><p>Uber built all this on six years of platform work, and said so on stage. You won&#8217;t need all six blocks to start. <strong>Most companies begin with the gateway.</strong></p><p>Here are all six in one picture.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yp-3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yp-3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Yp-3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Yp-3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Yp-3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yp-3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4162220,&quot;alt&quot;:&quot;hand-drawn black-and-white stack diagram. At the top, a row of entry points: Slack, tickets, CI events, schedules. In the middle, a box labeled \&quot;harness\&quot; running a single coding agent icon marked \&quot;bought\&quot;. Underneath, four blocks side by side: model gateway, sandbox with warm snapshot, tool gateway and catalog, context layer. Along the right edge, a tall vertical bar labeled \&quot;gates, identity, observability\&quot; that touches every layer.&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://www.theaithinker.com/i/218393973?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white stack diagram. At the top, a row of entry points: Slack, tickets, CI events, schedules. In the middle, a box labeled &quot;harness&quot; running a single coding agent icon marked &quot;bought&quot;. Underneath, four blocks side by side: model gateway, sandbox with warm snapshot, tool gateway and catalog, context layer. Along the right edge, a tall vertical bar labeled &quot;gates, identity, observability&quot; that touches every layer." title="hand-drawn black-and-white stack diagram. At the top, a row of entry points: Slack, tickets, CI events, schedules. In the middle, a box labeled &quot;harness&quot; running a single coding agent icon marked &quot;bought&quot;. Underneath, four blocks side by side: model gateway, sandbox with warm snapshot, tool gateway and catalog, context layer. Along the right edge, a tall vertical bar labeled &quot;gates, identity, observability&quot; that touches every layer." srcset="https://substackcdn.com/image/fetch/$s_!Yp-3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Yp-3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Yp-3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Yp-3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17b4db8-0b6d-4584-8ea2-2acc266d1b83_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Where the agent runs</h3><p>The model gateway came first at Uber. It&#8217;s one door that every model call goes through, whatever the vendor. Uber&#8217;s gateway has three jobs, per Medisetty. Personal data stays inside by default. Guardrails add a delay with a strict ceiling. <strong>And every request is tied to a user, a project and a team.</strong> More than 800 internal projects send it over 100 million requests a day.</p><p>You can buy this block. <a href="https://docs.litellm.ai/docs/simple_proxy">LiteLLM</a> is open source. It handles keys, per-user budgets, and spend across 100-plus models. <a href="https://portkey.ai/docs/product/ai-gateway">Portkey</a>, <a href="https://developer.konghq.com/ai-gateway/">Kong</a> and <a href="https://developers.cloudflare.com/ai-gateway/">Cloudflare</a> sell the same features. AWS does it in Bedrock with <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles.html">inference profiles</a>. <strong>Start small: route a single team&#8217;s keys through it, with a budget per person.</strong></p><p>The real lesson from LiteLLM is about deployment. In March 2026, <a href="https://docs.litellm.ai/blog/security-update-march-2026">two poisoned releases sat on PyPI for about 40 minutes</a>. Teams on the official Docker image were safe, because it pins its dependencies. <a href="https://securitylabs.datadoghq.com/articles/litellm-compromised-pypi-teampcp-supply-chain-campaign/">Datadog&#8217;s analysis</a> shows what the releases took: cloud keys, SSH keys, Kubernetes data and CI secrets. A gateway holds every provider key you own. <strong>Treat it as the most sensitive box on your diagram.</strong> Pin it, patch it, and give it an owner.</p><p>The second block is the sandbox, an isolated machine where the agent works. Uber&#8217;s version is the DevPod. Uber keeps a pool of machines ready, with every repository already copied in and the search index already built. Agents can start working within seconds. For cross-repository work, a single large DevPod holds all of Uber&#8217;s code. <strong>Speed matters more than you&#8217;d think, because nobody waits for a slow sandbox.</strong></p><p>How others run theirs:</p><ul><li><p><strong>Stripe.</strong> <a href="https://stripe.dev/blog/minions-stripes-one-shot-end-to-end-coding-agents">Its devboxes</a> spin up in 10 seconds, with code and services loaded.</p></li><li><p><strong>DoorDash.</strong> <a href="https://careersatdoordash.com/blog/delegating-engineering-work-to-cloud-based-agents/">Its target</a> is under five seconds, from cold machine to working agent.</p></li><li><p><strong>Ramp.</strong> <a href="https://builders.ramp.com/post/why-we-built-our-background-agent">It rebuilds its images every 30 minutes</a>, so each session starts on fresh code.</p></li></ul><p>The machines themselves are for sale. <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agents-tools-runtime.html">AWS AgentCore Runtime</a> gives each session its own microVM, a small virtual machine, for up to 8 hours. <a href="https://modal.com/docs/guide/sandboxes">Modal</a>, <a href="https://docs.e2b.dev/">E2B</a>, <a href="https://www.daytona.io/docs/en/">Daytona</a>, <a href="https://ona.com/docs/ona/getting-started">Ona</a> and <a href="https://coder.com/docs/ai-coder">Coder</a> sell sandboxes too. None of them sells your repository, installed, built and ready. <strong>The machine is a commodity, and the warm snapshot of your code is yours to build.</strong> A running agent still needs a way into your systems.</p><h3>What the agent can reach</h3><p>The third block is the tool catalog. Agents reach your systems through <a href="https://modelcontextprotocol.io/docs/getting-started/intro">MCP</a>, the Model Context Protocol. It&#8217;s an open standard for plugging tools into an agent. Uber had thousands of internal APIs, and none were ready for agents. So it built an MCP gateway with a crawler. <strong>One config change turns an internal API into a tool.</strong></p><p>Tools cost tokens, though. Each one comes with a description the agent has to read. At Uber, 100-plus tools <a href="https://www.uber.com/us/en/blog/efficient-software-factory/">added 50,000 to 70,000 tokens</a> to every prompt. Uber&#8217;s fix was to turn its 1,000-plus tools into commands. The agent looks one up only when it needs it. <strong>A big catalog is fine, as long as each agent loads only the tools it needs.</strong></p><p>Stripe reached the same rule from the other end. Its catalog, <a href="https://stripe.dev/blog/minions-stripes-one-shot-end-to-end-coding-agents-part-2">Toolshed</a>, holds nearly 500 tools. Yet each agent starts with <em>&#8220;an intentionally small subset of tools by default&#8221;</em>. You can buy the pipes for this block: <a href="https://docs.docker.com/ai/mcp-catalog-and-toolkit/mcp-gateway/">Docker&#8217;s MCP Gateway</a>, <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway.html">AgentCore Gateway</a> and <a href="https://learn.microsoft.com/en-us/azure/foundry/agents/overview">Microsoft Foundry</a> all sell one. <strong>What you can&#8217;t buy is the list of tools your company needs.</strong></p><p>The fourth block is context, and it decides whether the agent guesses. Uber gave the same data question to two agents. One could query its context graph, and one couldn&#8217;t. The grounded agent found the right table in 38 seconds. The other spent 20 minutes, hit three errors, and said the data couldn&#8217;t be queried. Uber&#8217;s summary: <em>&#8220;An ungrounded agent fails slowly rather than cheaply&#8221;</em>. <strong>Context is a platform job, done once, for every agent.</strong></p><p>Uber&#8217;s graph links 24 million nodes from over 30 internal systems. <strong>You can start far smaller.</strong> <a href="https://engineering.fb.com/2026/04/06/developer-tools/how-meta-used-ai-to-map-tribal-knowledge-in-large-scale-data-pipelines/">Meta had 50-plus agents read one large codebase</a> and write 59 short context files. In early tests, Meta&#8217;s agents then made 40% fewer tool calls per task. At the smallest scale, context is a <code>CLAUDE.md</code> file that Claude Code reads first. Keep it under a page. Reach and context make an agent useful, and the last two blocks keep it safe.</p><h3>What keeps it in bounds</h3><p>The fifth block is the harness: the loop that runs the agent, plus the triggers that start it. Uber runs its managed agents on a harness that serves any model, frontier or open-weight, behind one interface. Then it benchmarks each agent on its own real work and moves to the best model for that job. Triggers come from Slack, CI, schedules and alerts. <strong>What stays yours is the order of steps your company trusts.</strong></p><p>Stripe <a href="https://stripe.dev/blog/minions-stripes-one-shot-end-to-end-coding-agents-part-2">calls that order a blueprint</a>: <em>&#8220;workflows defined in code that direct a minion run&#8221;</em>. Some steps are plain code, like running the linter at the end. Others are agent steps, where the task needs judgment. The plain steps save tokens, and give the agent <em>&#8220;a little less opportunity to get things wrong&#8221;</em>. <strong>A skill is guidance the agent will probably follow, and a hook can block it.</strong></p><p>The sixth block is the gates, starting with identity. At Uber, <a href="https://www.uber.com/us/en/blog/solving-the-agent-identity-crisis/">a pull request once named a &#8220;Monitoring Agent&#8221; as its author</a>. The engineer who asked for it was gone from the record. Uber&#8217;s fix issues short-lived, scoped tokens at every hop, so the chain back to the person survives. Thousands of internal agents now use it. <strong>Give each agent its own identity, with only the rights its job needs.</strong> Anthropic learned the same lesson when its incident agent <a href="https://claude.com/blog/how-anthropic-secures-its-ai-native-software-development-lifecycle">asked another Claude instance to push a fix</a>, and a human review gate caught it.</p><p>The last gate sits in front of production. Anthropic&#8217;s playbook puts it in one line: the agent <em>&#8220;may act up to the production gate and cannot pass it&#8221;</em>. Everything the agent writes arrives as a pull request, and the agent that wrote the code can&#8217;t approve it. Ramp opens each pull request as the person who started the session, <a href="https://builders.ramp.com/post/why-we-built-our-background-agent">so nobody approves their own change</a>. Log every tool call through <a href="https://github.com/open-telemetry/semantic-conventions-genai">OpenTelemetry</a>, the open standard for traces. <strong>Gates are what let you say yes to more agents.</strong></p><p>The incidents show what happens without them:</p><ul><li><p><strong>Replit.</strong> An agent <a href="https://fortune.com/2025/07/23/ai-coding-tool-replit-wiped-database-called-it-a-catastrophic-failure/">deleted a production database</a> during a code freeze.</p></li><li><p><strong>AWS.</strong> A coding tool <a href="https://the-decoder.com/aws-ai-coding-tool-decided-to-delete-and-recreate-a-customer-facing-system-causing-13-hour-outage-report-says/">chose to &#8220;delete and recreate&#8221;</a> a customer-facing system.</p></li><li><p><strong>GitHub MCP.</strong> <a href="https://invariantlabs.ai/blog/mcp-github-vulnerability">A malicious public issue hijacked an agent</a> and leaked private data.</p></li></ul><p>That last one fits a factory exactly, because your agents will read tickets. Meta&#8217;s <a href="https://ai.meta.com/blog/practical-ai-agent-security/">Rule of Two</a> is the defense worth pinning up. In one session, an agent may have at most two of three powers:</p><ul><li><p>Reading untrusted input, like a public issue or a customer ticket.</p></li><li><p>Reaching sensitive systems or private data.</p></li><li><p>Changing things, or talking to the outside world.</p></li></ul><p>Need all three? Then a person supervises that session. With all six blocks named, one decision is left: what to buy.</p><h3>What to buy and what to build</h3><p>A word before the split. What follows is a direction drawn from what these companies published, not a recipe. Your stack, your team and your risks are different from theirs. <strong>Treat it as a starting point for your own discussion, and make the call with your own numbers.</strong></p><p>Here&#8217;s the whole thing as one decision. Start with option zero: buy it all as a hosted background agent. Claude Code on the web, Copilot, Cursor and Devin each bundle a sandbox, triggers and the pull request flow. You give up control of the snapshot, the tools and the limits. <a href="https://docs.github.com/en/copilot/concepts/agents/cloud-agent/about-cloud-agent">Copilot&#8217;s cloud agent</a>, for example, stops at 59 minutes and works in one repository per run. <strong>Option zero shows you what your floor needs before you build any of it.</strong></p><p>When you outgrow it, split the work like this.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lj3W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lj3W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!lj3W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!lj3W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!lj3W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!lj3W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4082551,&quot;alt&quot;:&quot;hand-drawn black-and-white diagram titled \&quot;What to buy, what to build\&quot;. A top banner shows a cloud holding a small robot and a checked document, labeled \&quot;Option zero: a hosted agent\&quot; with the caption \&quot;Start here, learn what you need\&quot;. Below it, two columns. Buy, with a shopping-cart icon: coding agent, model gateway, sandbox, tracing, review agent. Build, with a hammer icon: warm snapshot, tool catalog, context, blueprints, gate policy. Thin arrows run from the build items to the bought parts they plug into.&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://www.theaithinker.com/i/218393973?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white diagram titled &quot;What to buy, what to build&quot;. A top banner shows a cloud holding a small robot and a checked document, labeled &quot;Option zero: a hosted agent&quot; with the caption &quot;Start here, learn what you need&quot;. Below it, two columns. Buy, with a shopping-cart icon: coding agent, model gateway, sandbox, tracing, review agent. Build, with a hammer icon: warm snapshot, tool catalog, context, blueprints, gate policy. Thin arrows run from the build items to the bought parts they plug into." title="hand-drawn black-and-white diagram titled &quot;What to buy, what to build&quot;. A top banner shows a cloud holding a small robot and a checked document, labeled &quot;Option zero: a hosted agent&quot; with the caption &quot;Start here, learn what you need&quot;. Below it, two columns. Buy, with a shopping-cart icon: coding agent, model gateway, sandbox, tracing, review agent. Build, with a hammer icon: warm snapshot, tool catalog, context, blueprints, gate policy. Thin arrows run from the build items to the bought parts they plug into." srcset="https://substackcdn.com/image/fetch/$s_!lj3W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!lj3W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!lj3W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!lj3W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77b7030d-5e66-4c58-89de-94ff45f24d17_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Buy the pipes: the agent, the gateway, the sandbox, the tracing, and the reviewer. <strong>Then build what only your company knows.</strong> That means your code&#8217;s warm snapshot, your tool catalog, and your context. It also means the blueprints that encode your SDLC, and the gate policy. You don&#8217;t need all of it on day one. <a href="https://teamtopologies.com/key-concepts-content/what-is-a-thinnest-viable-platform-tvp">Team Topologies</a>, a well-known book on organizing software teams, calls this a thinnest viable platform. That&#8217;s the smallest set of shared tools that makes other teams faster, run like a product for its users. Here, it means building only the blocks your first agent needs, and adding the next one when a team asks for it.</p><p>Uber&#8217;s floor took years, but <strong>the build can be smaller than that.</strong> Ramp&#8217;s Inspect team was <a href="https://newsletter.pragmaticengineer.com/p/why-ramp-built-inspect">5.5 people</a>: four engineers, a director and a part-time PM. Two months after its v2 launch, Inspect wrote about 60% of Ramp&#8217;s pull requests. By May, it was 75%.</p><p>The sharpest warning comes from Prince Valluri at LinkedIn, <a href="https://www.infoq.com/podcasts/platform-engineering-scaling-agents/">on InfoQ</a>:</p><blockquote><p><em>&#8220;Don&#8217;t try to recreate GitHub Copilot or Cursor or Replit inside your company.&#8221;</em></p></blockquote><p>He&#8217;s right, and that&#8217;s the whole split. <strong>Buy the agent, and build what it stands on.</strong> The map is done. The harder part is starting it without losing the people it&#8217;s for.</p><div><hr></div><h2>Roll it out without losing developers</h2><p>One honest gap first. Every public case here is a large tech company with a platform team. None describes a 300-engineer company starting from laptops. So the order below asks for the least before it proves anything. It borrows Uber&#8217;s map at a smaller scale. Each step has one number that says it worked. <strong>Move to the next step only when the current number moves.</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_!VZDB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VZDB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!VZDB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!VZDB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!VZDB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!VZDB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3096430,&quot;alt&quot;:&quot;hand-drawn black-and-white diagram of five steps on a rising path. Step 1: measure the queue you have. Step 2: one agent on toil, bought, in shadow mode. Step 3: the floor that line proves you need, gateway first. Step 4: gates and the loop. Step 5: more lines, each checked against the review queue. Beside each step sits a small gauge icon naming its metric: time to first review; share of agent comments acted on; cost per session; sessions that end in a merged PR, next to revert rate; change fail rate.&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://www.theaithinker.com/i/218393973?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white diagram of five steps on a rising path. Step 1: measure the queue you have. Step 2: one agent on toil, bought, in shadow mode. Step 3: the floor that line proves you need, gateway first. Step 4: gates and the loop. Step 5: more lines, each checked against the review queue. Beside each step sits a small gauge icon naming its metric: time to first review; share of agent comments acted on; cost per session; sessions that end in a merged PR, next to revert rate; change fail rate." title="hand-drawn black-and-white diagram of five steps on a rising path. Step 1: measure the queue you have. Step 2: one agent on toil, bought, in shadow mode. Step 3: the floor that line proves you need, gateway first. Step 4: gates and the loop. Step 5: more lines, each checked against the review queue. Beside each step sits a small gauge icon naming its metric: time to first review; share of agent comments acted on; cost per session; sessions that end in a merged PR, next to revert rate; change fail rate." srcset="https://substackcdn.com/image/fetch/$s_!VZDB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!VZDB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!VZDB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!VZDB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b9405d5-4295-4007-96d8-1cb54b4ea344_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The sequence starts with where work waits today and ends with more lines. <strong>In between, you prove one agent on toil, then build only what it needs.</strong> Whoever owns the gates should read <a href="https://claude.com/blog/how-anthropic-secures-its-ai-native-software-development-lifecycle">how Anthropic secures its own pipeline</a>. It&#8217;s a vendor writing about itself, and still the clearest account of shadow mode and risk tiers. The first step, though, needs nothing at all.</p><h3>Start with the queue you already have</h3><p>The first move costs almost nothing and needs no vendor. Work waits in several places: review, CI, deploys. Review is the easiest wait to read from git, so start there. <strong>Measure your review queue from your own git history.</strong> Ask a teammate to run this prompt in Claude Code, on a repository you own. I ran it on the public repository of <a href="https://github.com/PostHog/posthog">PostHog</a>, an open-source analytics company:</p><pre><code><code>Using the GitHub CLI, look at the last 200 merged pull requests in the PostHog/posthog repository. For each one, find how many hours passed between the pull request opening and its first review from someone other than the author. Then tell me: the median and the 90th percentile of that wait, the share of pull requests that merged with no review at all, and the share that changed more than 400 lines. Show me the numbers in a short list, then one sentence on where the queue is.</code></code></pre><p>Claude Code&#8217;s answer, word for word:</p><blockquote><p><strong>Wait until first human review, in hours:</strong></p><ul><li><p><strong>Median wait:</strong> 6.1 hours</p></li><li><p><strong>90th percentile wait:</strong> 160.8 hours (about 6.7 days)</p></li><li><p><strong>Merged with no human review:</strong> 40.0% (80 of 200)</p></li><li><p><strong>Changed more than 400 lines:</strong> 28.5% (57 of 200)</p></li></ul><p>Most PRs that get a human review get one within the working day, but the queue has a long tail and a large group that merges without any human review.</p><p>These 200 PRs merged between Sept 28, 16:41 and Sept 29, 14:21 UTC. PostHog merges about 200 PRs a day, so this covers roughly one day. &#8220;Lines changed&#8221; means additions plus deletions.</p><p>I left bot reviewers out: coderabbitai, stamphog, greptile-apps, copilot, veria-ai, the codex connector and the posthog bot. They review nearly every PR within minutes. If you count them, the median wait drops to 0.07 hours (about 4 minutes), the 90th percentile to 0.53 hours, and no PR merged without a review. The bot-free numbers are the ones that describe the human queue.</p><p>In the &#8220;someone other than the author&#8221; check, 23 of the PRs were opened by bots. I kept them in the sample.</p></blockquote><p>The run took about six minutes and cost 25 cents. Half the pull requests got a person within six hours. The slowest tenth waited almost a week. And 40% merged with no human review at all. PostHog runs several review bots, and they looked at nearly every pull request within minutes. <strong>The bots already clear their part, so measure the human queue.</strong></p><p>The sample covers about one day of PostHog&#8217;s merges. Read it as a demo of the prompt, and run it on your own repositories. <strong>Write the numbers down, because every later step is judged against them.</strong> Watch the share of big pull requests too. <a href="https://services.google.com/fh/files/misc/2025_dora_ai_capabilities_model.pdf">DORA&#8217;s AI capabilities model</a> lists working in small batches among its seven capabilities. Small batches counter <em>&#8220;the risk of AI generating large, unstable changes&#8221;</em>. With a baseline written down, you need the scorecard that sits on top of it.</p><h3>Measure merged work, not code written</h3><p>Uber&#8217;s scorecard is a good place to start thinking. Keep its shape, then pick numbers that fit your own work. <a href="https://www.uber.com/us/en/blog/efficient-software-factory/">Every managed agent</a> reports three kinds of numbers:</p><ul><li><p><strong>Cost per outcome.</strong> Cost per merged pull request, per review, per alert, per cleanup.</p></li><li><p><strong>Quality.</strong> Revert rate, F1 for reviewers, and time to recover from incidents.</p></li><li><p><strong>Volume.</strong> Diffs landed, reviews posted, alerts triaged.</p></li></ul><p><strong>A throughput number without a quality number beside it invites people to game it.</strong> Uber also shows why &#8220;% of code written by AI&#8221; is a weak headline. In August, <a href="https://www.uber.com/us/en/blog/efficient-software-factory/">it said more than 70%</a> of its pull requests involved agents. In May, its background-agent team talked about <a href="https://background-agents.com/summit/sessions/nikhil-ramakrishnan/">11% of merged pull requests</a>. The number moved sixfold inside one company, depending on what was counted.</p><p>Cost needs its own line, because it moves fast. After its budget overrun, Uber <a href="https://techcrunch.com/2026/06/02/uber-caps-employee-ai-spending-after-blowing-through-budget-in-four-months/">capped spend at $1,500 a month</a> per employee, per coding tool. Its later approach was gentler. Engineers see spend live, with nudges at 50%, 80% and 100% of plan. Since June, Uber&#8217;s cost per session has fallen 52% from its peak. <strong>Visibility did more than the cap.</strong></p><p>The harder question is still open. Andrew Macdonald at Uber said it&#8217;s <em><a href="https://fortune.com/2026/05/26/uber-coo-ai-spending-tokens-claude-code/">&#8220;very hard to draw a line&#8221;</a></em> from usage to useful features. <strong>Measure cost per outcome, or you won&#8217;t be able to answer that question either.</strong></p><p>How others keep score:</p><ul><li><p><strong>Ramp</strong> tracks sessions that end in a merged pull request. It calls that <em><a href="https://builders.ramp.com/post/why-we-built-our-background-agent">&#8220;the most important metric to track&#8221;</a></em>.</p></li><li><p><strong>Intercom</strong> aimed to double merged pull requests per R&amp;D employee, and <a href="https://ideas.fin.ai/p/2x-nine-months-later">tripled them in 16 months</a>. <a href="https://www.intercom.com/blog/ai-is-approving-our-pull-requests-heres-how-we-made-it-safe/">AI-authored backend code was reverted 0.53% of the time</a>, against 5.39% for human code.</p></li><li><p><strong>DX</strong>, a developer-productivity firm, publishes <a href="https://getdx.com/blog/ai-measurement-framework-guide/">a full AI measurement framework</a>, split into utilization, impact and cost. Pick a couple of metrics from each group.</p></li><li><p><strong>Meta and Amazon</strong> show what to skip: token leaderboards. Meta&#8217;s <a href="https://fortune.com/2026/05/12/amazon-tokenmaxxing-claude-ai-capex-meta-gil-luria/">came down</a> after press reports, and at Amazon employees ran trivial tasks to climb theirs.</p></li></ul><p>The numbers keep the factory honest, and people decide whether it gets used.</p><h3>Bring developers along</h3><p>Now the part most rollouts get wrong. Developers can reject a factory fast, and some objections run deeper than tooling. One Anthropic engineer said it plainly to <a href="https://www.anthropic.com/research/how-ai-is-transforming-work-at-anthropic">the company&#8217;s own researchers</a>:</p><blockquote><p><em>&#8220;It&#8217;s the end of an era for me - I&#8217;ve been programming for 25 years, and feeling competent in that skill set is a core part of my professional satisfaction.&#8221;</em></p></blockquote><p>Charity Majors, who co-founded the observability company Honeycomb, asks the professional version. <em><a href="https://newsletter.pragmaticengineer.com/p/stop-being-skeptical-about-ai-for">&#8220;What would it take for you to be fully comfortable shipping code you have not read?&#8221;</a></em> Neither of them is wrong. <strong>Take both seriously, because the people asking are your best reviewers.</strong> Four moves show up again and again in the companies that got adoption right.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TYwH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TYwH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!TYwH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!TYwH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!TYwH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!TYwH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3406053,&quot;alt&quot;:&quot;hand-drawn black-and-white diagram of four tiles in a two-by-two grid, each with a small icon and a one-line label underneath. Tile 1, \&quot;Take their toil first\&quot; (a broom sweeping away a pile of small tasks). Tile 2, \&quot;Work in the open\&quot; (a public chat thread with several people watching an agent's work). Tile 3, \&quot;Let them opt in\&quot; (an open door with a hand choosing to walk through). Tile 4, \&quot;Give them the gates\&quot; (a person holding a key in front of a gate labeled merge).&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://www.theaithinker.com/i/218393973?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white diagram of four tiles in a two-by-two grid, each with a small icon and a one-line label underneath. Tile 1, &quot;Take their toil first&quot; (a broom sweeping away a pile of small tasks). Tile 2, &quot;Work in the open&quot; (a public chat thread with several people watching an agent's work). Tile 3, &quot;Let them opt in&quot; (an open door with a hand choosing to walk through). Tile 4, &quot;Give them the gates&quot; (a person holding a key in front of a gate labeled merge)." title="hand-drawn black-and-white diagram of four tiles in a two-by-two grid, each with a small icon and a one-line label underneath. Tile 1, &quot;Take their toil first&quot; (a broom sweeping away a pile of small tasks). Tile 2, &quot;Work in the open&quot; (a public chat thread with several people watching an agent's work). Tile 3, &quot;Let them opt in&quot; (an open door with a hand choosing to walk through). Tile 4, &quot;Give them the gates&quot; (a person holding a key in front of a gate labeled merge)." srcset="https://substackcdn.com/image/fetch/$s_!TYwH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!TYwH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!TYwH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!TYwH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc348be-36a3-41ba-ad5c-3d5bb6d355fa_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Take their toil first.</strong> Uber moved <em>&#8220;upgrades, migrations, bug fixes&#8221;</em> to AI. The result was <em><a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development">&#8220;much higher satisfaction from our engineers&#8221;</a></em>. Flag cleanup and test migrations are work nobody on your team will miss. The agent takes a chore off a real person&#8217;s plate, in front of their teammates. <strong>Relief is the fastest route to trust.</strong></p><p><strong>Work in the open.</strong> At Uber, Cortana works in team Slack channels, so its answers are visible to the whole team. Uber&#8217;s own lesson, <a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development">reported by Gergely Orosz</a>: <em>&#8220;Top-down mandates are less efficient than engineers sharing their wins with peers.&#8221;</em> DoorDash learned the same thing. Its first Slack integration gave each agent run a private channel, and <a href="https://careersatdoordash.com/blog/delegating-engineering-work-to-cloud-based-agents/">it </a><em><a href="https://careersatdoordash.com/blog/delegating-engineering-work-to-cloud-based-agents/">&#8220;did not create team habits&#8221;</a></em>. Public threads changed that. <strong>People copy what they can see their colleagues doing.</strong></p><p><strong>Let them opt in.</strong> <a href="https://builders.ramp.com/post/why-we-built-our-background-agent">Ramp says</a> it <em>&#8220;didn&#8217;t force anyone to use Inspect over their own tools&#8221;</em>. Inspect still ended up writing most of its pull requests. Forcing it has a worse record. Duolingo&#8217;s Luis von Ahn dropped AI usage from performance reviews, <a href="https://finance.yahoo.com/sectors/technology/articles/m-not-going-force-duolingo-170215712.html">saying</a> <em>&#8220;I&#8217;m not going to force you&#8221;</em>. <strong>A mandate gets you usage numbers, which is the metric you just decided to ignore.</strong></p><p><strong>Give them the gates.</strong> At Uber, every agent pull request carries a table of the checks it passed, screenshots included. The reviewer sees the evidence before reading the diff. Anthropic&#8217;s playbook goes one step further: the tech lead writes the review policy in a file called <code>REVIEW.md</code>. The agent never approves its own work, so a person stays accountable for every merge. <strong>Developers keep the judgment, and the agents take the typing.</strong></p><p>When a developer asks why now, skip the fear pitch. Zach Lloyd, who builds Warp, <a href="https://ai.engineer/talks/tUPPVhBBcoM">made a prediction at AI Engineer</a>. Every company, he said, will have <em>&#8220;at its core a software factory&#8221;</em>, the way it has CI/CD. He sells one, so weigh it. The better evidence is the work nobody does by hand anymore. Spotify has merged <a href="https://engineering.atspotify.com/2026/6/code-with-claude-coding-is-no-longer-the-constraint">over 2.5 million automated maintenance pull requests</a>, most with no human in the loop. <strong>The craft is moving from typing the code to designing the line that types it.</strong></p><p>That&#8217;s the whole route. Here it is as a checklist you can carry into the room.</p><div><hr></div><h2>Start with one line</h2><p>Your developers already have the agent. That part is solved, and a better one ships every few months. What&#8217;s left is the floor. That&#8217;s where the agent runs, what it can reach, and the rules it can&#8217;t break. Then come the numbers that say it&#8217;s working. The rule from that earlier post still holds, too. <strong>Find the step everything waits on, and keep moving it.</strong></p><p>If you need one line for the room, use this one:</p><blockquote><p><em>Our engineers already have the agent. We&#8217;re building the floor it works on, and we start with the one job nobody wants to do by hand.</em></p></blockquote><p>Here&#8217;s the route as a checklist:</p><ul><li><p><strong>Measure.</strong> Find where work waits today. Time to first review is the easiest first number.</p></li><li><p><strong>Pick the line.</strong> Choose one toil task that passes the SRE test and has an easy &#8220;done&#8221;.</p></li><li><p><strong>Buy the agent.</strong> Run the line on a hosted background agent, in shadow mode.</p></li><li><p><strong>Build the thinnest floor.</strong> Add a model gateway first, then only what the line proves it needs.</p></li><li><p><strong>Gate it.</strong> Give each agent one identity, no path past production, and no way to approve itself.</p></li><li><p><strong>Score it.</strong> Track cost per outcome, next to revert rate.</p></li><li><p><strong>Work in the open.</strong> Use public threads and opt-in, and let the tech lead own the review policy.</p></li><li><p><strong>Add the next line.</strong> Only when review and CI can take the extra load.</p></li></ul><p>Uber&#8217;s team ended its talk on the question that comes after all of this. Once you can build almost anything, the question changes. Adam Huda put it this way: <em><a href="https://www.youtube.com/watch?v=17-YSUHo6Lk">&#8220;it&#8217;s more of a question of should we build it&#8221;</a></em>. That&#8217;s a product question, and it sits upstream of every line you add. <strong>It&#8217;s also the part of the factory that was always yours.</strong></p><div><hr></div><h2>Go further: every source, by company</h2><p>Here&#8217;s every link this article used, plus a few that didn&#8217;t fit in. They&#8217;re grouped by company, then by building block. Vendor posts about their own products are marked.</p><p><strong>Uber</strong></p><ul><li><p><a href="https://www.uber.com/us/en/blog/efficient-software-factory/">The efficient software factory</a>: the four layers, the scorecard per agent, and the cost numbers (August 2026).</p></li><li><p><a href="https://www.youtube.com/watch?v=17-YSUHo6Lk">The six building blocks talk</a>: Uday Kiran Medisetty and Adam Huda at AI Engineer, with the World Cup pickup example.</p></li><li><p><a href="https://www.youtube.com/watch?v=EL123UNokkI">Building uReview</a>: the code review talk, where first review went from 3 to 9 hours (<a href="https://ai.engineer/talks/EL123UNokkI-building-ureview-ubers-multi-agent-code-review">talk page</a>).</p></li><li><p><a href="https://www.uber.com/us/en/blog/ureview/">uReview</a>: the review agent&#8217;s design, and which comments developers acted on (2025).</p></li><li><p><a href="https://www.uber.com/us/en/blog/junit-migration/">The JUnit 5 migration</a>: why a deterministic tool beat generative AI on 75,000 test classes.</p></li><li><p><a href="https://www.uber.com/us/en/blog/automate-design-specs/">uSpec</a>: an agent in Cursor that writes design-system specs from Figma.</p></li><li><p><a href="https://www.uber.com/us/en/blog/solving-the-agent-identity-crisis/">Solving the agent identity crisis</a>: scoped tokens that keep the chain back to a person.</p></li><li><p><a href="https://background-agents.com/summit/sessions/nikhil-ramakrishnan/">Code Inbox</a>: review routing, and the 11% figure, at the Background Agents Summit.</p></li><li><p><a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development">How Uber uses AI for development</a>: Gergely Orosz on adoption, costs and engineer satisfaction.</p></li><li><p><a href="https://techcrunch.com/2026/06/02/uber-caps-employee-ai-spending-after-blowing-through-budget-in-four-months/">Uber caps AI spending</a>: TechCrunch on the budget spent in four months.</p></li><li><p><a href="https://fortune.com/2026/05/26/uber-coo-ai-spending-tokens-claude-code/">Uber on AI spending and tokens</a>: Fortune, with Andrew Macdonald on linking usage to features.</p></li></ul><p><strong>Anthropic</strong> (sells the agent it runs on)</p><ul><li><p><a href="https://claude.com/blog/the-ai-native-sdlc-playbook">The AI-native SDLC playbook</a>: Louis Claxton&#8217;s six stages, each handing a file to the next.</p></li><li><p><a href="https://claude.com/blog/how-anthropic-secures-its-ai-native-software-development-lifecycle">How Anthropic secures its AI-native SDLC</a>: shadow mode, risk tiers and the review gate.</p></li><li><p><a href="https://www.anthropic.com/research/how-ai-is-transforming-work-at-anthropic">How AI is transforming work at Anthropic</a>: the company&#8217;s own engineers on what they gain and lose.</p></li><li><p><a href="https://code.claude.com/docs/en/claude-code-on-the-web">Claude Code on the web</a>: the hosted background agent, auto-fix included.</p></li></ul><p><strong>Spotify</strong></p><ul><li><p><a href="https://engineering.atspotify.com/2025/11/spotifys-background-coding-agent-part-1">Background coding agents, part 1</a>: the first 1,500 merged pull requests, from migrations.</p></li><li><p><a href="https://engineering.atspotify.com/2025/11/context-engineering-background-coding-agents-part-2">Part 2, context engineering</a>: how the agent&#8217;s prompts and context were shaped.</p></li><li><p><a href="https://engineering.atspotify.com/2025/12/feedback-loops-background-coding-agents-part-3">Part 3, feedback loops</a>: verifiers, and a model acting as judge.</p></li><li><p><a href="https://engineering.atspotify.com/2026/4/background-coding-agents-dataset-migrations-honk-part-4">Part 4, dataset migrations</a>: about 1,800 downstream pipelines migrated, and an estimated 10 engineering weeks saved.</p></li><li><p><a href="https://engineering.atspotify.com/2026/6/code-with-claude-coding-is-no-longer-the-constraint">Coding is no longer the constraint</a>: 76% more pull requests to review, and 2.5 million automated ones.</p></li></ul><p><strong>Stripe</strong></p><ul><li><p><a href="https://stripe.dev/blog/minions-stripes-one-shot-end-to-end-coding-agents">Minions, part 1</a>: one-shot coding agents on 10-second devboxes.</p></li><li><p><a href="https://stripe.dev/blog/minions-stripes-one-shot-end-to-end-coding-agents-part-2">Minions, part 2</a>: blueprints, the Toolshed catalog, and 1,300 pull requests a week.</p></li></ul><p><strong>DoorDash</strong></p><ul><li><p><a href="https://careersatdoordash.com/blog/delegating-engineering-work-to-cloud-based-agents/">Delegating engineering work to cloud-based agents</a>: the laptop risk, the sandbox target, and public threads.</p></li><li><p><a href="https://careersatdoordash.com/blog/how-we-learned-to-trust-our-ai-code-reviewer-at-doordash/">How we learned to trust our AI code reviewer</a>: the scout and the deep reviewers.</p></li><li><p><a href="https://careersatdoordash.com/blog/doordash-built-an-ai-code-reviewer-engineers-actually-listen-to/">An AI code reviewer engineers actually listen to</a>: 10,000 reviews a week, review profiles per domain, and the fixer you tag in a thread.</p></li></ul><p><strong>Ramp</strong></p><ul><li><p><a href="https://builders.ramp.com/post/why-we-built-our-background-agent">Why we built our background agent</a>: Inspect, opt-in adoption, and sessions that end in a merge.</p></li><li><p><a href="https://newsletter.pragmaticengineer.com/p/why-ramp-built-inspect">Why Ramp built Inspect</a>: the 5.5-person team, in The Pragmatic Engineer.</p></li><li><p><a href="https://modal.com/blog/how-ramp-built-a-full-context-background-coding-agent-on-modal">How Ramp built its agent on Modal</a>: the sandbox side (Modal sells the sandbox).</p></li></ul><p><strong>Shopify</strong></p><ul><li><p><a href="https://www.firstround.com/ai/shopify">Farhan Thawar on AI at Shopify</a>: First Round, with the $1,000-a-month quote.</p></li><li><p><a href="https://shopify.engineering/under-the-river">Under the River</a>: Shopify&#8217;s agent platform, which only works in the open.</p></li><li><p><a href="https://shopify.engineering/introducing-roast">Introducing Roast</a>: structured AI workflows, from 2025.</p></li><li><p><a href="https://venturebeat.com/orchestration/how-shopify-built-an-ai-stack-that-doesnt-care-which-models-survive">How Shopify built a model-agnostic AI stack</a>: VentureBeat on the proxy and runaway-agent alerts.</p></li><li><p><a href="https://x.com/tobi/status/1909251946235437514">Tobi L&#252;tke&#8217;s AI usage memo</a>: the mandate route, from 2025.</p></li></ul><p><strong>Intercom</strong></p><ul><li><p><a href="https://ideas.fin.ai/p/2x-nine-months-later">2x, nine months later</a>: merged pull requests per R&amp;D employee, tripled in 16 months.</p></li><li><p><a href="https://www.intercom.com/blog/ai-is-approving-our-pull-requests-heres-how-we-made-it-safe/">AI is approving our pull requests</a>: the revert rates, AI against human code.</p></li></ul><p><strong>Meta</strong></p><ul><li><p><a href="https://engineering.fb.com/2026/04/06/developer-tools/how-meta-used-ai-to-map-tribal-knowledge-in-large-scale-data-pipelines/">Mapping tribal knowledge with AI</a>: 59 context files, and 40% fewer tool calls.</p></li><li><p><a href="https://ai.meta.com/blog/practical-ai-agent-security/">The Rule of Two</a>: at most two of three powers per agent session.</p></li></ul><p><strong>Warp</strong> (sells the platform)</p><ul><li><p><a href="https://www.youtube.com/watch?v=tUPPVhBBcoM">Software engineering is becoming factory engineering</a>: Zach Lloyd at AI Engineer (<a href="https://ai.engineer/talks/tUPPVhBBcoM">talk page</a>).</p></li><li><p><a href="https://www.warp.dev/blog/oz-orchestration-platform-cloud-agents">Oz, the orchestration platform</a>: the fraud-bot that runs every 8 hours.</p></li></ul><p><strong>Other companies</strong></p><ul><li><p><a href="https://www.infoq.com/podcasts/platform-engineering-scaling-agents/">LinkedIn&#8217;s Prince Valluri on InfoQ</a>: platform engineering for agents, and what not to rebuild.</p></li><li><p><a href="https://www.honeycomb.io/blog/30-70-prs-day-how-we-managed-not-wreck-systems">Honeycomb: 30 to 70 PRs a day</a>: keeping systems stable as output doubles.</p></li><li><p><a href="https://linear.app/customers/coinbase">Coinbase&#8217;s bet on agent-first development</a>: Forge, its own agent (a Linear customer story).</p></li><li><p><a href="https://finance.yahoo.com/sectors/technology/articles/m-not-going-force-duolingo-170215712.html">Duolingo drops AI from performance reviews</a>: Luis von Ahn&#8217;s reversal.</p></li><li><p><a href="https://fortune.com/2026/05/12/amazon-tokenmaxxing-claude-ai-capex-meta-gil-luria/">Token leaderboards at Meta and Amazon</a>: Fortune on gamed usage numbers.</p></li></ul><p><strong>Research and frameworks</strong></p><ul><li><p><a href="https://sre.google/sre-book/eliminating-toil/">Eliminating toil</a>: the Google SRE book&#8217;s definition.</p></li><li><p><a href="https://services.google.com/fh/files/misc/2025_state_of_ai_assisted_software_development.pdf">DORA 2025 report</a> and <a href="https://services.google.com/fh/files/misc/2025_dora_ai_capabilities_model.pdf">the DORA AI capabilities model</a>: AI-assisted delivery, and small batches.</p></li><li><p><a href="https://www.faros.ai/blog/ai-acceleration-whiplash-takeaways">Faros AI on AI acceleration whiplash</a>: time in review across 22,000 developers.</p></li><li><p><a href="https://getdx.com/blog/ai-measurement-framework-guide/">DX&#8217;s AI measurement framework</a>: utilization, impact and cost.</p></li><li><p><a href="https://teamtopologies.com/key-concepts-content/what-is-a-thinnest-viable-platform-tvp">Thinnest viable platform</a>: Team Topologies on platform size.</p></li><li><p><a href="https://martinfowler.com/articles/harness-engineering.html">Harness engineering</a>: Martin Fowler&#8217;s site on the loop around a coding agent.</p></li><li><p><a href="https://newsletter.pragmaticengineer.com/p/stop-being-skeptical-about-ai-for">Stop being skeptical about AI</a>: Charity Majors in The Pragmatic Engineer.</p></li></ul><p><strong>The building blocks on the market</strong></p><ul><li><p><strong>Model gateways:</strong> <a href="https://docs.litellm.ai/docs/simple_proxy">LiteLLM</a>, <a href="https://portkey.ai/docs/product/ai-gateway">Portkey</a>, <a href="https://developer.konghq.com/ai-gateway/">Kong</a>, <a href="https://developers.cloudflare.com/ai-gateway/">Cloudflare</a>, <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles.html">Bedrock inference profiles</a>.</p></li><li><p><strong>Sandboxes:</strong> <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agents-tools-runtime.html">AWS AgentCore Runtime</a>, <a href="https://modal.com/docs/guide/sandboxes">Modal</a>, <a href="https://docs.e2b.dev/">E2B</a>, <a href="https://www.daytona.io/docs/en/">Daytona</a>, <a href="https://ona.com/docs/ona/getting-started">Ona</a>, <a href="https://coder.com/docs/ai-coder">Coder</a>.</p></li><li><p><strong>Tool gateways:</strong> <a href="https://modelcontextprotocol.io/docs/getting-started/intro">MCP</a>, <a href="https://docs.docker.com/ai/mcp-catalog-and-toolkit/mcp-gateway/">Docker MCP Gateway</a>, <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway.html">AgentCore Gateway</a>, <a href="https://learn.microsoft.com/en-us/azure/foundry/agents/overview">Microsoft Foundry</a>.</p></li><li><p><strong>Hosted agents:</strong> <a href="https://docs.github.com/en/copilot/concepts/agents/cloud-agent/about-cloud-agent">Copilot cloud agent</a>, <a href="https://code.claude.com/docs/en/claude-code-on-the-web">Claude Code on the web</a>.</p></li><li><p><strong>Tracing:</strong> <a href="https://github.com/open-telemetry/semantic-conventions-genai">OpenTelemetry GenAI conventions</a>.</p></li></ul><p><strong>Incidents worth reading</strong></p><ul><li><p><a href="https://docs.litellm.ai/blog/security-update-march-2026">LiteLLM&#8217;s March 2026 security update</a> and <a href="https://securitylabs.datadoghq.com/articles/litellm-compromised-pypi-teampcp-supply-chain-campaign/">Datadog&#8217;s analysis</a>: the poisoned releases.</p></li><li><p><a href="https://fortune.com/2025/07/23/ai-coding-tool-replit-wiped-database-called-it-a-catastrophic-failure/">Replit&#8217;s deleted database</a>: an agent during a code freeze.</p></li><li><p><a href="https://the-decoder.com/aws-ai-coding-tool-decided-to-delete-and-recreate-a-customer-facing-system-causing-13-hour-outage-report-says/">AWS&#8217;s 13-hour outage</a>: a tool that chose to delete and recreate.</p></li><li><p><a href="https://invariantlabs.ai/blog/mcp-github-vulnerability">The GitHub MCP exploit</a>: a public issue that hijacked an agent.</p></li></ul><p><strong>The PostHog example</strong> from the rollout section uses <a href="https://github.com/PostHog/posthog">the public PostHog repository</a>. <a href="https://www.theaithinker.com/p/how-to-pick-the-ai-agents-worth-building">My earlier post on picking agents</a> covers the constraint rule this article builds on.</p>]]></content:encoded></item><item><title><![CDATA[How to become an AI-native product manager]]></title><description><![CDATA[Walk the steps from curious PM to AI-native PM. Experiment at work. Specialize with real depth. Put AI on the roadmap and in your own week.]]></description><link>https://www.theaithinker.com/p/how-to-become-an-ai-native-product</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-become-an-ai-native-product</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Wed, 23 Sep 2026 16:02:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6cbc71ac-00fe-4a89-987f-3b19e211b3a5_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Matthieu Ramognino hosts DataNomad, a French podcast about freelance data work. On the show, he said PMs keep asking him the same question. <em>&#8220;I&#8217;d like to become an AI PM. Do you have any advice?&#8221;</em> Data engineers ask him how to become AI engineers.</p><p>My answer started with permission, and how I skipped asking for it. Ideas reached me through the newsletters I read. I tried them on the project already on my desk. Then I told the team what worked and what failed. <strong>Nobody had put AI in my job title, and nobody stopped me either.</strong> The title came later, after the experiments.</p><p>That&#8217;s the bottom line of this post. <strong>You become an AI-native PM on the job you already have.</strong> And the AI PM job itself is mostly product work: discovery, adoption, and evaluation. You test one idea on your current project. You design an agent the way you&#8217;d onboard a new hire. You turn a meeting transcript into a Jira ticket before the next call starts. The model work is the smaller part, and data scientists and engineers handle it well.</p><p>If you speak French, <a href="https://open.spotify.com/episode/1jYCZmzYzeagbUjgnNmF4T">the full episode is on Spotify</a>. It runs twenty minutes. <strong>This is the English version, rebuilt from the transcript, with a source behind every claim.</strong> You need nothing new to follow along. Any chat assistant covers the first habit: Claude, ChatGPT, or Gemini. Claude Code covers the step after it.</p><p>The whole path fits in one picture.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jrEm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jrEm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!jrEm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!jrEm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!jrEm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jrEm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3520363,&quot;alt&quot;:&quot;Hand-drawn agenda with six stops on a winding path from a curious PM to an AI-native PM: your path, three moves, agent design, leadership, your week, and first steps.&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://www.theaithinker.com/i/216862190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn agenda with six stops on a winding path from a curious PM to an AI-native PM: your path, three moves, agent design, leadership, your week, and first steps." title="Hand-drawn agenda with six stops on a winding path from a curious PM to an AI-native PM: your path, three moves, agent design, leadership, your week, and first steps." srcset="https://substackcdn.com/image/fetch/$s_!jrEm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!jrEm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!jrEm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!jrEm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db0f08c-4ccd-466f-a96e-8869ef55e5e9_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>My path.</strong> The discovery habits that carried into AI work, and how to find your own thread.</p></li><li><p><strong>Three moves.</strong> Here&#8217;s what got me into AI work before the title. Experiments at work, proof of depth, one topic at a time.</p></li><li><p><strong>Agent design.</strong> You&#8217;ll see the five calls I make on an agent, starting with whether it should exist.</p></li><li><p><strong>Leadership.</strong> How I reset &#8220;100x productivity&#8221; expectations, and which metric I refuse to track.</p></li><li><p><strong>Your week.</strong> Less time on specs, more time with users, and one new chore to plan for.</p></li><li><p><strong>First steps.</strong> Feel behind? Watch people&#8217;s screens, then climb three levels with your meeting transcripts.</p></li></ul><p>By the end, you&#8217;ll have a sequence you can start on your current project. You&#8217;ll have a four-part template for agent design. You&#8217;ll have a metric swap for leadership, and a habit for your next meeting. <strong>You stop waiting for someone to rename your role, and you start doing the work it describes.</strong></p><p>It started for me with a prototype in someone else&#8217;s hands.</p><div><hr></div><h2>The path that led me to AI work</h2><p>After engineering school at Arts et M&#233;tiers, I spent about six years at EY. I was a PM consultant. The missions I liked were the ones where discovery was real work. We built interactive prototypes. We went on site. We watched end users work with the platform. Watching beat asking them what they wanted. <strong>Those years taught me to trust what people do over what they say.</strong> Teresa Torres wrote the full method for that habit in <a href="https://www.producttalk.org/continuous-discovery-habits/">Continuous Discovery Habits</a>.</p><p>No-code tools made it faster. Bubble and Webflow let me put a working product in front of users within days. In 2021, I combined the two into my own offer and went freelance. The first mission took some luck. Pernod Ricard&#8217;s innovation team needed a product live in three months. I gave people mockups they could click and use, then watched where they got stuck. <strong>We shipped an MVP we were a bit ashamed of, and that was on purpose.</strong> It surfaced needs nobody had said out loud. Reid Hoffman&#8217;s <a href="https://www.linkedin.com/pulse/arent-any-typos-essay-we-launched-too-late-reid-hoffman">line</a> covers it: <em>&#8220;If you&#8217;re not embarrassed by the first version of your product, you&#8217;ve launched too late.&#8221;</em></p><p>That mission led to SeLoger&#8217;s experience platform, and later to AI platform and agent work. My AI work before LLMs was classic machine learning, like fraud detection. The step from innovation to AI was shorter than it looks. In innovation, you accept that most experiments get dropped. In my experience, about 10% are worth continuing. The other 90% are how you find them. Ronny Kohavi ran experimentation at Microsoft. He <a href="https://www.onlinedialogue.nl/en/blogs/experimentation-on-a-large-scale-interview-ronny-kohavi-microsoft/">sees a similar ratio</a>: <em>&#8220;the winner ratio is about 10% to 20% of all test ideas.&#8221;</em> <strong>AI work runs on that same ratio, so a team that can&#8217;t live with a high miss rate struggles with it.</strong></p><p>The no-code years left me one more habit. A new tool appeared every month, and the winners kept changing. What lasted were the principles: layout, state, components, the hand-off to users. <strong>The principles moved from one tool to the next, and the buttons stayed behind.</strong> AI tools behave the same way, across Claude, Cursor, ChatGPT, Gemini and Claude Code. Give context and constrain the task. Check the output, then put it in front of a real user. Your bridge into AI will follow a different thread from mine, and it&#8217;s worth naming.</p><p><strong>Key learnings</strong></p><ul><li><p><strong>Watch people use the thing.</strong> Next discovery session, hand over a clickable prototype. Stay quiet for five minutes.</p></li><li><p><strong>Ship the version that embarrasses you a little.</strong> Pick the one flow users can try now, and cut the rest of the scope.</p></li><li><p><strong>Plan for most experiments to fail.</strong> Before you start one, write down what you&#8217;d learn if it fails.</p></li><li><p><strong>Name your own bridge.</strong> Write one sentence on what in your past work makes AI your next step.</p></li></ul><p>Those habits only mattered once I put them to work on AI. Three moves did that.</p><div><hr></div><h2>Three moves before the AI title</h2><p>Matthieu&#8217;s question was about the jump into an AI role. My answer was three moves, made on the work I already had.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BOTL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BOTL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!BOTL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!BOTL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!BOTL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!BOTL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4030287,&quot;alt&quot;:&quot;Hand-drawn diagram of three moves side by side, each with what it leaves behind: experiment on your current work (a story of what worked and what failed), prove depth with real projects (a public repo), go deep on one topic at a time (an opinion you can defend).&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://www.theaithinker.com/i/216862190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn diagram of three moves side by side, each with what it leaves behind: experiment on your current work (a story of what worked and what failed), prove depth with real projects (a public repo), go deep on one topic at a time (an opinion you can defend)." title="Hand-drawn diagram of three moves side by side, each with what it leaves behind: experiment on your current work (a story of what worked and what failed), prove depth with real projects (a public repo), go deep on one topic at a time (an opinion you can defend)." srcset="https://substackcdn.com/image/fetch/$s_!BOTL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!BOTL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!BOTL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!BOTL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff888658-4478-4e56-be90-7ea0a198db0d_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Experiment on the job you have</h3><p>I never asked permission to bring AI into my missions. Ideas reached me through the newsletters I read. I tested them on the work in front of me. Then I shared what I learned with the team. That work sat outside my job description. <strong>It still became my story for the next client: what I tested, what worked, what didn&#8217;t.</strong> That story carries more weight than a certificate with no failures in it.</p><p>Ethan Mollick explains why this works from the inside. In <a href="https://www.oneusefulthing.org/p/making-ai-work-leadership-lab-and">Making AI Work</a>, he argues that experienced people find the uses best. <em>&#8220;People with a strong understanding of their job can easily assess when an AI is useful for their work through trial and error, in the way that outsiders (and even AI-savvy junior workers) cannot.&#8221;</em> <strong>Your domain is your edge, so the experiment belongs in your domain.</strong> Leadership won&#8217;t stop you from sharing what you learned. Everyone wants that conversation now.</p><p>Companies now check for this at the door. Zapier assesses every hire against an <a href="https://zapier.com/blog/raising-ai-fluency-bar-in-hiring/">AI fluency rubric</a>. I went through it in <a href="https://www.theaithinker.com/p/how-to-hire-an-ai-native-product">the hiring post</a>. Its line for a PM who falls short is worth reading in full. <em>&#8220;Uses AI for simple tasks like summarizing, writing, or looking up information, but output reads like obvious AI slop. Cannot point to clear evidence that work is faster or higher quality. The work they do before AI and after AI looks largely the same.&#8221;</em> Zapier sells automation. Read that as the demanding end of the market. <strong>The direction still holds: your before-and-after has to look different.</strong></p><h3>Prove depth with real projects</h3><p>Matthieu raised the other side. Plenty of people on LinkedIn call themselves AI experts. From the outside, it&#8217;s hard to tell real depth from someone who prompts ChatGPT. I wanted depth I could show. So I compared programs, online and in person, short and long. I picked the one-year <a href="https://formations.pantheonsorbonne.fr/fr/catalogue-des-formations/diplome-d-universite-DU/diplome-d-universite-KBVXM363/diplome-d-universite-sorbonne-data-analytics-KPMK3V7Z.html">Sorbonne Data Analytics diploma</a>. It ran in the evenings, next to my PM job.</p><p>The title says analytics. I read the curriculum first, and it leaned toward data science. The teachers came from industry and brought their own projects. One arrived with an AWS project and showed us how they built it at work. Then we built it ourselves. <strong>A year turned out to be the right length to absorb the concepts.</strong> It also gave me a shared language with data scientists and engineers. Technical conversations got easier.</p><p>I should be honest about how I went in. In <a href="https://www.theaithinker.com/p/how-to-use-ai-to-actually-learn-to">the learn-to-code post</a>, I admitted my mindset going in. <em>&#8220;Give the minimum, collect the diploma, move on.&#8221;</em> What stayed with me were the projects. <strong>The diploma was the vehicle, and the repos are the proof.</strong> Diego Granados is an AI PM at Google. His <a href="https://pmdiego.substack.com/p/a-practical-guide-to-becoming-an">guide to becoming an AI PM</a> says it from the hiring side. <em>&#8220;Listing&#8221;AI/ML knowledge&#8221; on your resume won&#8217;t get you there. Showing what you&#8217;ve shipped will.&#8221;</em> So put your experiments on GitHub. A peer or a recruiter can then see what you solved.</p><h3>Go deep on one topic a week</h3><p>AI moves too fast to follow everything. When I started The AI Thinker, I set one rule. One topic a week, carried to the end. The pick was arbitrary on purpose. <strong>Choosing what to skip was the hard part.</strong> I skipped n8n and OpenClaw while they were rising. I went deep on Claude Cowork, skills in Claude Code, and prototyping in Cursor. Each topic got a week of experiments. Then I wrote up what I tested and learned.</p><p>Those weeks produced posts like <a href="https://www.theaithinker.com/p/how-to-build-your-first-claude-code">your first Claude Code skill</a> and <a href="https://www.theaithinker.com/p/how-to-build-an-ai-helper-for-your">an AI helper with Cowork</a>. Full honesty: lately, I haven&#8217;t kept to one topic every week. The rule still helps each time I return to it. <strong>Depth gives you opinions you can defend. A client or a hiring manager hears the difference.</strong> A tour of ten tools gives you ten first impressions.</p><p><strong>Key learnings</strong></p><ul><li><p><strong>Start on the project you already have.</strong> Pick a recurring task and try an AI tool on it.</p></li><li><p><strong>Share the misses with the wins.</strong> Bring one failed experiment to your next team meeting, with what it taught you.</p></li><li><p><strong>Show projects over certificates.</strong> Put one experiment in a public GitHub repo, with a README that names the problem.</p></li><li><p><strong>Pick one topic and finish it.</strong> Write down the two tools you&#8217;ll skip, so the choice is deliberate.</p></li></ul><p>Those moves got me onto agent projects. Here&#8217;s what the work looks like once you&#8217;re there.</p><div><hr></div><h2>Design agents the way you onboard a hire</h2><p>I work on LLM and agent systems now. With an agent, you take a messy problem and give it to a system that reasons and acts through tools. <strong>The PM part still comes first, and it shapes every call that follows.</strong> Customer support is my example here, because it&#8217;s the case people talk about most. The same calls apply to sales operations, a finance close, or internal IT tickets.</p><h3>Say no before you say agent</h3><p>Start with the problem: understand it, observe it, analyze it. Then decide whether AI is the right answer at all. <strong>Sometimes my answer is no, and that project stays a regular project.</strong> A script, a checklist, or a better process does the job. An agent would waste the budget. Anthropic&#8217;s engineers make the same point in <a href="https://www.anthropic.com/engineering/building-effective-agents">Building effective agents</a>. <em>&#8220;This might mean not building agentic systems at all.&#8221;</em> Thiago Avelino gives a <a href="https://avelino.run/most-ai-agents-dont-need-ai-in-the-loop/">one-line test</a>: <em>&#8220;does the model need to decide what comes next, or do you already know?&#8221;</em> If you already know, write the workflow.</p><h3>Onboard the agent like a new hire</h3><p>When an agent does belong, the design looks like bringing someone new into the company.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q4o5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q4o5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Q4o5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Q4o5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Q4o5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q4o5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png" width="2816" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2816,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:655317,&quot;alt&quot;:&quot;Hand-drawn diagram of a new colleague's first day split into four parts: context (what it knows: the product, past problems), instructions (its job description, the system prompt), tools (the systems it can reach: complaint tool, Confluence, Jira), and actions (what it may do: create a ticket, assign a team).&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://www.theaithinker.com/i/216862190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998faa98-fc50-4748-accb-adcfcbd9b00e_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn diagram of a new colleague's first day split into four parts: context (what it knows: the product, past problems), instructions (its job description, the system prompt), tools (the systems it can reach: complaint tool, Confluence, Jira), and actions (what it may do: create a ticket, assign a team)." title="Hand-drawn diagram of a new colleague's first day split into four parts: context (what it knows: the product, past problems), instructions (its job description, the system prompt), tools (the systems it can reach: complaint tool, Confluence, Jira), and actions (what it may do: create a ticket, assign a team)." srcset="https://substackcdn.com/image/fetch/$s_!Q4o5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Q4o5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Q4o5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Q4o5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34342ac-3ad1-40b6-a52a-9197e7be8a21_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>First comes the context, meaning what the agent knows. You explain the product and its past problems, as you&#8217;d brief a new colleague. It needs enough to make decisions and plan its own steps. Second come the instructions, the agent&#8217;s job description. Engineers call it the system prompt: what the agent must do, and how. Third come the tools, its connections to systems in the company. In support, that&#8217;s the complaint-management tool, Confluence, and maybe Jira. <strong>Fourth come the actions, spelled out: it may create a Jira ticket and assign a team.</strong></p><p>Anthropic&#8217;s own docs use the same picture in their <a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices#be-clear-and-direct">prompting guide</a>. <em>&#8220;Think of Claude as a brilliant but new employee who lacks context on your norms and workflows.&#8221;</em> Their golden rule is a test. <em>&#8220;Show your prompt to a colleague with minimal context on the task and ask them to follow it. If they&#8217;d be confused, Claude will be too.&#8221;</em> OpenAI&#8217;s <a href="https://cdn.openai.com/business-guides-and-resources/a-practical-guide-to-building-agents.pdf">practical guide to agents</a> adds a shortcut. Write the agent&#8217;s routines from the procedures, scripts, and policies you already have. <strong><a href="https://www.theaithinker.com/p/how-to-build-ai-agents-business-teams">The agent interviews post</a> mapped the same parts from the users&#8217; side, and it holds.</strong></p><h3>Start adoption on the most tedious step</h3><p>Here&#8217;s the paradox of agent projects. The hardest part is rarely the technical one. I work with data scientists and data engineers who know that stack well. The hard part is change. Users often tell me their work is too unique to reproduce. They see nothing AI could do for them. <strong>So I skip the argument and take the step they hate most off their plate.</strong></p><p>Matthieu quoted an earlier guest here. AI projects are 10% AI, 20% data, and 70% transformation. That echoes BCG&#8217;s 10-20-70 rule, a rule of thumb for effort. <a href="https://www.bcg.com/featured-insights/the-leaders-guide-to-transforming-with-ai">BCG&#8217;s version</a> puts <em>&#8220;10% of a company&#8217;s efforts&#8221;</em> on algorithms and 20% on technology and data. The remaining 70% goes <em>&#8220;on people and processes.&#8221;</em> <strong>In my agent projects, that 70% is where the hard part lives.</strong></p><p>I look for the step that takes the most time and feels the most tedious. In support, that&#8217;s often the PDF summary for the customer. It says what went wrong and how it got fixed. I meet the team and offer to help with that one step through an agent. It works a bit like a Trojan horse. <strong>People are usually glad to lose that step, and the next asks come from them.</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_!dgmj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dgmj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!dgmj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!dgmj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!dgmj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!dgmj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:253312,&quot;alt&quot;:&quot;Hand-drawn workflow of a support case drawn as a row of steps. The last step, writing the customer summary, is circled and marked \&quot;start here\&quot;. Arrows lead back upstream to the asks users make next: route to the right team, suggest a fix from past cases, catch the bug before the complaint.&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://www.theaithinker.com/i/216862190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f579c4-3864-4774-b2d9-77b623a568fc_1408x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn workflow of a support case drawn as a row of steps. The last step, writing the customer summary, is circled and marked &quot;start here&quot;. Arrows lead back upstream to the asks users make next: route to the right team, suggest a fix from past cases, catch the bug before the complaint." title="Hand-drawn workflow of a support case drawn as a row of steps. The last step, writing the customer summary, is circled and marked &quot;start here&quot;. Arrows lead back upstream to the asks users make next: route to the right team, suggest a fix from past cases, catch the bug before the complaint." srcset="https://substackcdn.com/image/fetch/$s_!dgmj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!dgmj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!dgmj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!dgmj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862a4947-fb77-4aa3-bb02-bf39041a0ed7_1408x768.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Once they see the agent work, the questions start. Could it find the right team to contact first? Could it suggest a fix based on past cases? Could it spot the bug before the customer even complains? <strong>Adoption grows upstream from the first step people were glad to lose.</strong> Each new ask is one they made, so nobody has to sell it to them.</p><h3>Turn memory into business questions</h3><p>PMs and engineers decide many technical points together. Memory is a good example. Short-term memory keeps what was said inside one conversation. Long-term memory keeps things across sessions, like how the agent should behave next time. <a href="https://docs.langchain.com/oss/python/concepts/memory">LangChain&#8217;s docs</a> draw the same line. I never ask users which type of memory they want. <strong>I ask business questions, then translate the answers with the engineering team.</strong></p><p>Some answers are obvious. Nobody wants a goldfish that forgets which ticket you were discussing a few messages ago. Feedback a user gives at the end should land in long-term memory. Other answers come from deciding with imperfect information. Then you watch the monitoring once the agent is live. I found plenty of engineering writing on memory and almost nothing from product people. <strong>What an agent remembers about a customer, and for how long, is a product decision.</strong></p><h3>Spend more on evals than on the agent</h3><p>One principle I keep coming back to: invest more in evaluation and monitoring than in the agent. The agent can go stale fast. A new model ships or a new framework appears. The build you were proud of looks old. <strong>The tests outlast all of it, and they become the specification that stays.</strong> Whatever model you run next, you still check it against the same tests.</p><p>The order matters, though. Hamel Husain and Shreya Shankar teach evals to product teams. They start by reading real outputs. Their <a href="https://hamel.dev/blog/posts/evals-faq/">evals FAQ</a> is direct. <em>&#8220;Write evaluators for errors you discover, not errors you imagine.&#8221;</em> Each failure found in production becomes a new test. I wrote in <a href="https://www.theaithinker.com/p/how-to-pick-the-ai-agents-worth-building">the agent-factory post</a> that an agent with no eval is a faster way to be wrong. <strong>That still holds, and it&#8217;s the call I&#8217;d protect first when a deadline gets tight.</strong></p><p>Five calls is my list. Other teams add more. Diego Granados counts designing what happens when the agent gets something wrong. Anthropic counts the <a href="https://www.anthropic.com/engineering/building-effective-agents">cost and latency budget</a>, since agents trade both for better results. <strong>Treat the five as a starting set, and add the calls your domain needs.</strong></p><p><strong>Key learnings</strong></p><ul><li><p><strong>Ask whether it needs an agent.</strong> Write the steps out. If you can list them all in advance, build a workflow.</p></li><li><p><strong>Onboard it like a hire.</strong> Write one page per part: context, instructions, tools, actions.</p></li><li><p><strong>Start with the step people hate.</strong> Ask the team which step they&#8217;d pay to stop doing, and automate that one first.</p></li><li><p><strong>Translate memory into business questions.</strong> Ask &#8220;should it remember this customer the next time they write?&#8221; Skip &#8220;long-term memory&#8221; with users.</p></li><li><p><strong>Read outputs before you write evals.</strong> Review 20 to 50 real outputs, then write a test for each failure you find.</p></li></ul><p>All of this ends up in front of leadership. That conversation changed a lot in a few years.</p><div><hr></div><h2>Talk to leadership without promising magic</h2><p>When I worked on fraud detection, AI felt opaque to everyone outside the team. You had to convince leadership that machine learning was useful at all. Today, the people funding the work use ChatGPT themselves. They&#8217;ve felt what it can do. <strong>They listen much faster now, and they expect much more.</strong> Many expect AI to bring double the productivity overnight, or a hundred times more. That rarely happens. The processes still run through people, and AI won&#8217;t fix an organizational problem.</p><p>Felt speed can fool everyone, including the people doing the work. In early 2025, <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">METR</a> ran a randomized trial with experienced open-source developers. <em>&#8220;When developers are allowed to use AI tools, they take 19% longer to complete issues.&#8221;</em> They still misjudged it. <em>&#8220;Even after experiencing the slowdown, they still believed AI had sped them up by 20%.&#8221;</em> METR has since said those early-2025 results no longer reflect current tools. <strong>The lesson that lasts is the gap between what people feel and what you measure.</strong></p><p>A professor at my engineering school said something I still remember. Put an information system on a badly defined process, and you get more chaos. <strong>AI makes that worse.</strong> Michael Hammer made the same case in <a href="https://hbr.org/1990/07/reengineering-work-dont-automate-obliterate">Harvard Business Review in 1990</a>, long before LLMs. <em>&#8220;It is time to stop paving the cow paths. Instead of embedding outdated processes in silicon and software, we should obliterate them and start over.&#8221;</em> Leadership is right about the potential, though. So my work with them starts with the process and the target, before any agent.</p><p>Then we pick the metrics, and every metric carries an incentive. Track lines of code written by AI, and you&#8217;ll get plenty of them. That says nothing about the value users got. Thiago Avelino is blunt about it. In his words, <em>&#8220;% of code generated by AI&#8221; is a vanity metric</em> (<a href="https://avelino.run/vanity-metrics-engineering/">Vanity Metrics in Engineering</a>). <strong>Track what users get instead: delivery, quality, and where the saved time goes.</strong> I learned this the hard way. In <a href="https://www.theaithinker.com/p/how-to-measure-ai-adoption-in-a-product">the adoption post</a>, I admitted I was measuring activity instead of impact.</p><p>Then there&#8217;s the room itself: the people already excited, and the people holding back. Same rollout, different coaching. Ethan Mollick has a kinder read on the second group. Many <em>&#8220;may have received a scary talk about how improper AI use might be punished, and they don&#8217;t want to take any risks.&#8221;</em> <strong>Make it safe to say how you use AI, and some of your skeptics turn out to be quiet users.</strong> Mollick&#8217;s numbers fit: official chatbots reach about 20% of workers, yet over 40% admit using AI at work.</p><p><strong>Key learnings</strong></p><ul><li><p><strong>Ask for the process before the agent.</strong> Before any AI project starts, ask for the current process on one page.</p></li><li><p><strong>Answer &#8220;100x&#8221; with a measured number.</strong> Agree with leadership on one baseline you&#8217;ll measure before and after.</p></li><li><p><strong>Swap the vanity metric.</strong> Replace &#8220;% of code written by AI&#8221; with cycle time or defects that reach users.</p></li><li><p><strong>Coach both ends of the room.</strong> Share how you use AI first, then ask the quiet ones what they&#8217;ve tried.</p></li></ul><p>Leadership sees the outcomes. Inside my own week, the change was bigger than I expected.</p><div><hr></div><h2>What AI changed in my week</h2><p>This one makes my colleagues smile: AI made my job bigger. More is expected of me than before. Marty Cagan has coached product teams for decades, and he says the same at <a href="https://www.svpg.com/ai-product-management-2-years-in/">SVPG</a>. <em>&#8220;The PM role becomes more essential but also more difficult with generative AI-powered products, not less.&#8221;</em> My week used to be specs, Jira tickets, and refinement prep. Product strategy got what time was left. Now I can take an idea all the way to the end. <strong>I no longer wait for someone to pick my item from their backlog.</strong></p><p>Say I have a product idea. I prototype it. I query the data with SQL that AI writes for me, to get the insights. Then I show the prototype and what users said. No slides for a committee. Do we go, or not? <strong>An idea used to wait three months for a budget committee. Now it can get its answer in one or two weeks.</strong> Agents work the same way. With users, I prototype the agent they need in Claude or Claude Code. That replaces the spec-writing session.</p><p>The wider data is more cautious than the hype. Figma, which sells a prototyping tool, argues that <a href="https://www.figma.com/blog/prototypes-are-the-new-prds/">prototypes are the new PRDs</a>. <a href="https://www.lennysnewsletter.com/p/ai-tools-are-overdelivering-results">Lenny Rachitsky&#8217;s survey</a> of 1,750 tech workers is more measured. Writing PRDs is still where PMs get the most value from AI today, at 21.5%. <strong>Prototyping is the use PMs most want to add next, up 24.6 points.</strong> The shift is underway, and most teams are early in it.</p><p>The biggest change is where the hours go.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a8Xb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a8Xb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!a8Xb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!a8Xb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!a8Xb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!a8Xb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3431561,&quot;alt&quot;:&quot;Hand-drawn comparison of two weekly calendars. Before: 80% of the week filled with specs and meeting notes, 20% with vision, strategy and users. After: the split reversed, 20% execution and 80% vision, strategy and user conversations.&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://www.theaithinker.com/i/216862190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn comparison of two weekly calendars. Before: 80% of the week filled with specs and meeting notes, 20% with vision, strategy and users. After: the split reversed, 20% execution and 80% vision, strategy and user conversations." title="Hand-drawn comparison of two weekly calendars. Before: 80% of the week filled with specs and meeting notes, 20% with vision, strategy and users. After: the split reversed, 20% execution and 80% vision, strategy and user conversations." srcset="https://substackcdn.com/image/fetch/$s_!a8Xb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!a8Xb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!a8Xb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!a8Xb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F084cbee9-d5b8-4cfc-8055-566ac77000b1_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I used to spend about 80% of my time on execution. Specs, meeting notes. With good automation, that 80% can go to vision, strategy, and users. <strong>Talking to users is still the best part of the job. AI can&#8217;t do it for me.</strong> That time is the one I protect. Everything else on the list is negotiable.</p><p>Little by little, my job shifted in another way. <strong>I became the manager of the AI systems I build.</strong> They&#8217;re never perfect and always need to evolve. So I spend much of my time giving them feedback. Each time an AI tool does work for me, I check that it&#8217;s correct. Much of that lives in Claude Code skills. <a href="https://www.theaithinker.com/p/how-to-organize-claude-code-for-product">The workspace post</a> shows how I organize them. I also coach other PMs through workshops and demos, so they can use the same tools. It&#8217;s close to an internal trainer role, and it sits next to delivery.</p><p><strong>Key learnings</strong></p><ul><li><p><strong>Replace the committee deck with a prototype.</strong> For your next proposal, bring something users can click, plus what they said.</p></li><li><p><strong>Write your own SQL with AI.</strong> Ask the AI for the query. Check the result against a number you already trust.</p></li><li><p><strong>Move the hours to users.</strong> Book your user conversations before anything else goes into the calendar.</p></li><li><p><strong>Budget time to manage your AI systems.</strong> Each time you correct an output, fix the instructions so the mistake doesn&#8217;t return.</p></li></ul><p>If all this feels far from your own week, that&#8217;s normal. Here&#8217;s where I&#8217;d start again.</p><div><hr></div><h2>Start with screens and meetings</h2><p>Don&#8217;t worry if you haven&#8217;t started with AI yet. <strong>Everyone is behind by default.</strong> The field moved so fast that the moment you pay attention, you&#8217;re early. Start whenever you&#8217;re ready. Two first moves make it easier, and neither needs a new tool.</p><p>The easiest way in is to watch people work. My main channel is <a href="https://www.youtube.com/@howiaipodcast">How I AI</a>, Claire Vo&#8217;s show. Guests share their screen and show how they use these tools. I&#8217;ve watched more than 50 hours of it. Many times, I wondered what use it would ever be to me. Some guests seemed too methodical. Some did things I&#8217;d have called unnecessary. <strong>Then, a few weeks later, it clicked, and what they did made complete sense.</strong> It was my top pick in <a href="https://www.theaithinker.com/p/how-to-fast-track-your-ai-product">the AI product education post</a>, and it still is.</p><p>The second move is one concrete task. PMs spend much of the week in meetings, and so does almost everyone else. That&#8217;s where you gather the information everything else runs on. A good first use of AI is making sure each meeting delivers its full value. I climb three levels.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f1gk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f1gk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!f1gk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!f1gk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!f1gk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!f1gk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3499017,&quot;alt&quot;:&quot;Hand-drawn ladder with three rungs rising from a meeting transcript. Level 1, recap: paste the transcript into a chat and get decisions, owners, open questions. Level 2, actions: Claude Code creates the Jira ticket and sends the Slack recap. Level 3, finish the thread: do each action in the same conversation and end with \&quot;what next?\&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://www.theaithinker.com/i/216862190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn ladder with three rungs rising from a meeting transcript. Level 1, recap: paste the transcript into a chat and get decisions, owners, open questions. Level 2, actions: Claude Code creates the Jira ticket and sends the Slack recap. Level 3, finish the thread: do each action in the same conversation and end with &quot;what next?&quot;." title="Hand-drawn ladder with three rungs rising from a meeting transcript. Level 1, recap: paste the transcript into a chat and get decisions, owners, open questions. Level 2, actions: Claude Code creates the Jira ticket and sends the Slack recap. Level 3, finish the thread: do each action in the same conversation and end with &quot;what next?&quot;." srcset="https://substackcdn.com/image/fetch/$s_!f1gk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!f1gk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!f1gk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!f1gk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d46a72-b44f-43a1-95f1-99572bb38f10_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Level 1 is a recap.</strong> I copy the detailed transcript of a meeting into a chat. Then I ask ChatGPT, Gemini, or Claude for a recap, so nothing gets lost. A prompt to start from:</p><pre><code><code>Here is the transcript of a meeting. Write a recap in three parts:
the decisions we made, the actions with one owner each, and the open questions.
Quote the transcript wherever a decision or an owner is unclear.</code></code></pre><p>Once that works, save it as a reusable assistant. <a href="https://www.theaithinker.com/p/how-to-save-5-hours-a-week-with-gems">The Gems post</a> shows the one I built for meeting notes.</p><p><strong>Level 2 turns the recap into actions.</strong> Run it in Claude Code, connected to your tools through MCP. Those connectors let it act in apps like Jira and Slack. It can create the Jira ticket and post the recap in Slack. <strong>The meeting stops ending as a recap nobody reads.</strong> You review what it&#8217;s about to send, and it does the clicking.</p><p><strong>Level 3 pulls the thread.</strong> This one saves me the most time. I take the recap and its list of actions. Then I do each action in the same thread, to the end. One question I always ask at the end: <em>&#8220;What next?&#8221;</em> It usually gives me ideas. Little by little, a meeting turns into finished work. Daniel Blum is a PM at Melio. His <a href="https://www.chatprd.ai/how-i-ai/claude-cowork-for-pms-my-self-improving-productivity-system">How I AI episode</a> shows where this leads. His morning brief reviews yesterday&#8217;s transcripts and pulls out <em>&#8220;any action items that were decided.&#8221;</em></p><p>One warning before you climb. <strong>Each level has to leave you better informed.</strong> Researchers at BetterUp Labs and Stanford have a name for what happens otherwise: <a href="https://hbr.org/2025/09/ai-generated-workslop-is-destroying-productivity">workslop</a>. It&#8217;s <em>&#8220;AI generated work content that masquerades as good work, but lacks the substance to meaningfully advance a given task.&#8221;</em> Read the recap before you forward it. Decide the actions yourself, then let the AI carry them out.</p><p><strong>Key learnings</strong></p><ul><li><p><strong>Start late without guilt.</strong> Pick a tool you already have access to, and use it on a real task.</p></li><li><p><strong>Watch screens before you read takes.</strong> Pick one How I AI episode close to your work. Copy one workflow from it.</p></li><li><p><strong>Paste your next transcript into a chat.</strong> Ask for decisions, owners, and open questions.</p></li><li><p><strong>Finish the work in the thread.</strong> End each meeting thread with &#8220;what next?&#8221; and keep going until something ships.</p></li><li><p><strong>Read before you forward.</strong> Check every recap and every action before it leaves your hands.</p></li></ul><p>Climb those three levels, and the rest of this post starts to connect.</p><div><hr></div><h2>Start before the title</h2><p>Matthieu&#8217;s question was how to become an AI PM. Here&#8217;s the whole answer, as a checklist.</p><ul><li><p><strong>Your path.</strong> Find the thread from your past work that makes AI your next step.</p></li><li><p><strong>Three moves.</strong> Experiment on your current job, prove depth with projects, and go deep on one topic at a time.</p></li><li><p><strong>Agent design.</strong> Say no first, onboard it like a hire, and start on the most tedious step. Ask business questions about memory, and invest in evals.</p></li><li><p><strong>Leadership.</strong> Fix the process before the agent, and measure outcomes over AI-written code.</p></li><li><p><strong>Your week.</strong> Trade committee decks for prototypes, and spec time for user time.</p></li><li><p><strong>First steps.</strong> Watch real screens, then climb the meeting ladder.</p></li></ul><p>The line I&#8217;d give any PM who asks Matthieu&#8217;s question is short. <strong>Don&#8217;t wait for the title: run one AI experiment on the project you already have, show the team what failed as well as what worked, and pick one tool to go deep on.</strong> The work comes first, and the title tends to follow it. That&#8217;s how it went for me, through experiments on each mission. Whatever your thread is, the first experiment fits in the project you&#8217;re already on.</p><p>If you speak French, the <a href="https://open.spotify.com/episode/1jYCZmzYzeagbUjgnNmF4T">full conversation is on Spotify</a>. And the <a href="https://open.substack.com/pub/adamfaik/chat">subscriber chat</a> is open if a question stays with you after reading. I&#8217;m there.</p>]]></content:encoded></item><item><title><![CDATA[How to create on-brand slide decks with Claude Design]]></title><description><![CDATA[Give Claude Code your company&#8217;s slide decks. Let it build a design system and push it to Claude Design. Create your next deck on brand, and spend your time on the content.]]></description><link>https://www.theaithinker.com/p/how-to-create-on-brand-slide-decks</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-create-on-brand-slide-decks</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 07 Sep 2026 11:02:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d926fe9f-57e4-4200-b288-0dfba195ae3a_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I made this deck. Have a look before you read anything else.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!40Iq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!40Iq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!40Iq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!40Iq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!40Iq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!40Iq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1140858,&quot;alt&quot;:&quot;The generated deck open in Google Slides at docs.google.com, showing slide 2 selected in the filmstrip with its bar chart and percentage callouts, and the speaker notes visible at the bottom of the window.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The generated deck open in Google Slides at docs.google.com, showing slide 2 selected in the filmstrip with its bar chart and percentage callouts, and the speaker notes visible at the bottom of the window." title="The generated deck open in Google Slides at docs.google.com, showing slide 2 selected in the filmstrip with its bar chart and percentage callouts, and the speaker notes visible at the bottom of the window." srcset="https://substackcdn.com/image/fetch/$s_!40Iq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!40Iq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!40Iq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!40Iq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71852eb8-4749-4147-b911-03ecce7d2164_3248x1966.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Nine slides, in Google Slides, editable box by box.</figcaption></figure></div><p><a href="https://docs.google.com/presentation/d/1NTJeT6OPcfBs3tI7XhaE2zTFNxVDYufuXNwd0PW254Q/edit">Here it is in Google Slides.</a> Ask for access and I will let you in. Every box is editable. I did not design a single slide. I never picked a colour, a font or a layout.</p><p>You probably make a lot of decks. And every time, the same thing happens. You dig out an old one, copy a few slides, and push boxes around until the spacing looks right. <strong>The content takes twenty minutes. The formatting eats the afternoon.</strong></p><p>AI slide tools were supposed to fix that. I built <a href="https://www.theaithinker.com/p/how-to-create-presentations-10x-faster">a Gemini assistant for presentations</a>, got <a href="https://www.theaithinker.com/p/how-to-create-top-tier-slides-with">good decks out of NotebookLM</a>, and tried <a href="https://gamma.app">Gamma.app</a>. Each one let me down the same way. The slides came out as pictures I could not edit, or in the tool&#8217;s template instead of mine.</p><p>This deck took about an hour. Claude Code read my source material and wrote a design system. Claude Design used that design system to build the slides. <strong>Once the design system exists, your next deck costs you nothing but its content.</strong></p><p>You need Claude Code and Claude Design. <a href="https://docs.claude.com/en/docs/claude-code/setup">Install Claude Code</a> and sign in with your claude.ai account. Claude Design is at <a href="https://claude.ai/design">claude.ai/design</a> and is still in beta. A paid claude.ai plan covers both: Pro, Max, Team or Enterprise. If you sign in and Claude Design is not there, check your plan first.</p><p>Here are the six steps.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dQnz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dQnz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!dQnz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!dQnz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!dQnz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dQnz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.png" width="2816" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2816,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:551696,&quot;alt&quot;:&quot;Six numbered steps in a horizontal flow. 1 Collect, shown as a hand holding a stack of slides. 2 Extract, shown as a terminal producing a folder of files. 3 Push, shown as a folder travelling into a cloud. A gate marks the end of the one-time half. 4 Create, shown as a browser prompt box with a document clipped to it. 5 Improve, shown as a hand writing a correction on a file. 6 Export, shown as one slide fanning out into three file icons. Steps 1 to 3 are labelled \&quot;once\&quot;, steps 4 to 6 are labelled \&quot;every deck\&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbfd19f6-39b8-4ec8-86f6-1f75fcfd89a8_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Six numbered steps in a horizontal flow. 1 Collect, shown as a hand holding a stack of slides. 2 Extract, shown as a terminal producing a folder of files. 3 Push, shown as a folder travelling into a cloud. A gate marks the end of the one-time half. 4 Create, shown as a browser prompt box with a document clipped to it. 5 Improve, shown as a hand writing a correction on a file. 6 Export, shown as one slide fanning out into three file icons. Steps 1 to 3 are labelled &quot;once&quot;, steps 4 to 6 are labelled &quot;every deck&quot;." title="Six numbered steps in a horizontal flow. 1 Collect, shown as a hand holding a stack of slides. 2 Extract, shown as a terminal producing a folder of files. 3 Push, shown as a folder travelling into a cloud. A gate marks the end of the one-time half. 4 Create, shown as a browser prompt box with a document clipped to it. 5 Improve, shown as a hand writing a correction on a file. 6 Export, shown as one slide fanning out into three file icons. Steps 1 to 3 are labelled &quot;once&quot;, steps 4 to 6 are labelled &quot;every deck&quot;." srcset="https://substackcdn.com/image/fetch/$s_!dQnz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!dQnz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!dQnz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!dQnz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98435baa-47df-4620-b27e-c6ca906136cf_2816x1536.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Step 1. Collect your slide decks.</strong> The ones that already look like your company.</p></li><li><p><strong>Step 2. Turn your slide decks into a design system.</strong> Claude Code reads the decks and writes the design system for you.</p></li><li><p><strong>Step 3. Push the design system into Claude Design.</strong> One ask, plus a login you run yourself.</p></li><li><p><strong>Step 4. Create your slide deck.</strong> Pick the design system, attach your content, answer a few questions.</p></li><li><p><strong>Step 5. Improve the design system.</strong> Send your notes back to Claude Code.</p></li><li><p><strong>Step 6. Export your slide deck.</strong> Google Slides, PowerPoint, PDF and more.</p></li></ul><p>Steps 1 to 3 you do once. Steps 4 and 6 you repeat for every deck. Step 5 you run while the design system is still learning, and less and less after that. <strong>You stop rebuilding decks by hand, and you get your afternoons back.</strong></p><p>First slide up.</p><div><hr></div><h2>Step 1: Collect your slide decks</h2><p>Your design system is only as good as what it learns from. So pick the decks people at your company actually copy: the exec review, the product deck, the official template if one exists.</p><ol><li><p><strong>Pick two or three slide decks</strong> that look the way your work should look.</p></li><li><p><strong>Download them as PowerPoint files.</strong> In Google Slides, that is File, then Download, then Microsoft PowerPoint.</p></li><li><p><strong>Make a folder for your design system</strong>, and put the decks in a <code>sources</code> subfolder inside it.</p></li></ol><p>That is it. No naming rules, no cleanup.</p><p><strong>How I did it.</strong> I used McKinsey instead of my own decks, for one reason: their look is recognisable, and if the method survives that it will survive a corporate template easily. They publish their reports as PDFs, so I opened <a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai">their state of AI report</a> and downloaded it. A PDF works fine. Slide decks work better, because they also teach the layouts.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S_si!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S_si!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!S_si!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!S_si!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!S_si!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!S_si!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4229002,&quot;alt&quot;:&quot;The McKinsey QuantumBlack web page for the report titled \&quot;The state of AI in 2026: On the road to ROI\&quot;, dated August 25, 2026, with a dark blue hero image of light trails.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The McKinsey QuantumBlack web page for the report titled &quot;The state of AI in 2026: On the road to ROI&quot;, dated August 25, 2026, with a dark blue hero image of light trails." title="The McKinsey QuantumBlack web page for the report titled &quot;The state of AI in 2026: On the road to ROI&quot;, dated August 25, 2026, with a dark blue hero image of light trails." srcset="https://substackcdn.com/image/fetch/$s_!S_si!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!S_si!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!S_si!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!S_si!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ab1ba5-93e7-4e1f-b91c-601a6ef56065_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The source material. Your version is your own slide decks.</figcaption></figure></div><p>Now hand the folder to Claude Code.</p><div><hr></div><h2>Step 2: Turn your slide decks into a design system</h2><p>A design system is your brand written down so software can read it. It comes in three layers, and the picture below uses their real names. <strong>Tokens</strong> are the raw values: your colours with their hex codes, your type sizes, your spacing. <strong>Components</strong> are the pieces built from those tokens, like a chart, a callout box or a slide header. <strong>Templates</strong> are whole slide layouts made of components: a cover, a section divider, a slide carrying one big number.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pyVW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pyVW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!pyVW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!pyVW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!pyVW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!pyVW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png" width="2816" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2816,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1223798,&quot;alt&quot;:&quot;Three stacked layers feeding into a slide. The bottom layer, tokens, shows named grey swatches with hex codes, a type scale and spacing values. The middle layer, components, shows a chart, a callout box and a header. The top layer, templates, shows page layouts: a cover, a section divider and a one-number statement page. An arrow leads from the templates to a finished slide.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20e1ac62-0b49-4afa-bdc7-803a02b96811_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Three stacked layers feeding into a slide. The bottom layer, tokens, shows named grey swatches with hex codes, a type scale and spacing values. The middle layer, components, shows a chart, a callout box and a header. The top layer, templates, shows page layouts: a cover, a section divider and a one-number statement page. An arrow leads from the templates to a finished slide." title="Three stacked layers feeding into a slide. The bottom layer, tokens, shows named grey swatches with hex codes, a type scale and spacing values. The middle layer, components, shows a chart, a callout box and a header. The top layer, templates, shows page layouts: a cover, a section divider and a one-number statement page. An arrow leads from the templates to a finished slide." srcset="https://substackcdn.com/image/fetch/$s_!pyVW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!pyVW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!pyVW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!pyVW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feccf9c5d-b62d-4e78-8f2f-e7962fbccd22_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You will not write any of that. Claude Code does. Here is what you do:</p><ol><li><p><strong>Open your design system folder</strong> in your editor and start Claude Code in its terminal.</p></li><li><p><strong>Attach the slide decks</strong> from your <code>sources</code> subfolder to the prompt.</p></li><li><p><strong>Ask Claude Code to turn those decks into a design system</strong> for Claude Design. The prompt below is the one I used.</p></li><li><p><strong>Wait.</strong> It takes about twenty minutes.</p></li></ol><blockquote><p>Analyze the provided McKinsey A4 PDF to extract its core visual identity, including color palettes, typography, chart styling, and spatial hierarchy, and translate these elements into a versatile design system. Define reusable and flexible templates for various slide layouts like titles, text blocks, and data visualizations. Output the final specifications as self-contained React components using Tailwind CSS optimized specifically for Claude Design, ensuring the new layouts maintain the professional and analytical aesthetic of the original report.</p></blockquote><p><strong>The words that matter are &#8220;optimized specifically for Claude Design&#8221;</strong>, because they decide the shape of what comes out.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z2SL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z2SL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!Z2SL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!Z2SL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!Z2SL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z2SL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:859862,&quot;alt&quot;:&quot;A VS Code window with an empty project named mckinsey-design-system, and Claude Code running in the terminal panel on the right with the long extraction prompt typed at the input, ending with the local path to the downloaded McKinsey PDF.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A VS Code window with an empty project named mckinsey-design-system, and Claude Code running in the terminal panel on the right with the long extraction prompt typed at the input, ending with the local path to the downloaded McKinsey PDF." title="A VS Code window with an empty project named mckinsey-design-system, and Claude Code running in the terminal panel on the right with the long extraction prompt typed at the input, ending with the local path to the downloaded McKinsey PDF." srcset="https://substackcdn.com/image/fetch/$s_!Z2SL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!Z2SL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!Z2SL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!Z2SL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7203d2-93ba-40f4-bd78-6ed0783d7ce5_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The prompt goes in with your slide decks attached. Everything after this is waiting.</figcaption></figure></div><p><strong>How I did it.</strong> Mine ran for nineteen minutes. It rendered its own components in a browser, found two bugs in its work and fixed them before telling me it was done. What landed is <a href="https://github.com/adamfaik/mckinsey-design-system">in this public repo</a> with eight templates and five chart types. I read the README, and that is all the checking I did.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MQJ5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MQJ5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!MQJ5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!MQJ5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!MQJ5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!MQJ5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1450481,&quot;alt&quot;:&quot;VS Code showing the README of the generated Meridian Report System open in preview, next to Claude Code's session summary describing how it rendered all 31 pages of the PDF, pixel-sampled the colours, and finished in 19 minutes 31 seconds.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code showing the README of the generated Meridian Report System open in preview, next to Claude Code's session summary describing how it rendered all 31 pages of the PDF, pixel-sampled the colours, and finished in 19 minutes 31 seconds." title="VS Code showing the README of the generated Meridian Report System open in preview, next to Claude Code's session summary describing how it rendered all 31 pages of the PDF, pixel-sampled the colours, and finished in 19 minutes 31 seconds." srcset="https://substackcdn.com/image/fetch/$s_!MQJ5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!MQJ5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!MQJ5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!MQJ5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4210888c-d87d-4386-b37a-45a3765f52f6_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Read the README. It says what Claude Code took and what it skipped.</figcaption></figure></div><p>The design system is on your machine. It is no use to you there.</p><div><hr></div><h2>Step 3: Push the design system into Claude Design</h2><p>Claude Code can send the design system straight to your Claude Design account. Stay in the same Claude Code session and ask it to.</p><ol><li><p><strong>Ask:</strong> &#8220;Publish this design system into Claude Design.&#8221;</p></li><li><p><strong>Check what Claude Code actually does.</strong> If it builds an HTML artifact instead, tell it again and name the destination.</p></li><li><p><strong>When it asks you to run </strong><code>/design-login</code><strong>, run it.</strong> That is the sign it is on the right track.</p></li><li><p><strong>Type </strong><code>/design-sync</code> and let it upload.</p></li></ol><p>Claude Design documents this route itself, if you want to see it. Open the Design system selector there, choose <strong>Create using Claude Code</strong>, and it shows you the same two 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_!1Ull!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1Ull!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!1Ull!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!1Ull!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!1Ull!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!1Ull!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:977364,&quot;alt&quot;:&quot;A modal titled \&quot;Add a design system\&quot; reading \&quot;Design systems teach Claude your brand. How would you like to start?\&quot;, offering \&quot;Create here\&quot; for Figma, GitHub or uploaded slides, and \&quot;Create using Claude Code\&quot; carrying a BEST FIDELITY badge.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A modal titled &quot;Add a design system&quot; reading &quot;Design systems teach Claude your brand. How would you like to start?&quot;, offering &quot;Create here&quot; for Figma, GitHub or uploaded slides, and &quot;Create using Claude Code&quot; carrying a BEST FIDELITY badge." title="A modal titled &quot;Add a design system&quot; reading &quot;Design systems teach Claude your brand. How would you like to start?&quot;, offering &quot;Create here&quot; for Figma, GitHub or uploaded slides, and &quot;Create using Claude Code&quot; carrying a BEST FIDELITY badge." srcset="https://substackcdn.com/image/fetch/$s_!1Ull!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!1Ull!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!1Ull!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!1Ull!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3ba3f9a-278a-4777-82d3-6d24de01dcef_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Create using Claude Code is the route you want.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2Xcb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2Xcb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!2Xcb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!2Xcb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!2Xcb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2Xcb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1072793,&quot;alt&quot;:&quot;A modal titled \&quot;Use Claude Code to upload your components\&quot; explaining that you must type slash design-sync yourself at the prompt, with a terminal example showing cd into the design system folder, launching claude, and typing slash design-sync.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A modal titled &quot;Use Claude Code to upload your components&quot; explaining that you must type slash design-sync yourself at the prompt, with a terminal example showing cd into the design system folder, launching claude, and typing slash design-sync." title="A modal titled &quot;Use Claude Code to upload your components&quot; explaining that you must type slash design-sync yourself at the prompt, with a terminal example showing cd into the design system folder, launching claude, and typing slash design-sync." srcset="https://substackcdn.com/image/fetch/$s_!2Xcb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!2Xcb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!2Xcb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!2Xcb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8599a9b4-07e4-4fe6-be00-36de3e8a5e17_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Type the command yourself. Asking Claude to run it will not work.</figcaption></figure></div><p><strong>Watch what Claude Code actually does.</strong> Mine built an HTML artifact twice before I was specific enough about the destination.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pSW2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pSW2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!pSW2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!pSW2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!pSW2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!pSW2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1414030,&quot;alt&quot;:&quot;Claude Code in VS Code responding to the instruction \&quot;Publish this design system directly into Claude Design\&quot; by writing static dot-dc-dot-html artboard files into a design-canvas folder, one per template.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude Code in VS Code responding to the instruction &quot;Publish this design system directly into Claude Design&quot; by writing static dot-dc-dot-html artboard files into a design-canvas folder, one per template." title="Claude Code in VS Code responding to the instruction &quot;Publish this design system directly into Claude Design&quot; by writing static dot-dc-dot-html artboard files into a design-canvas folder, one per template." srcset="https://substackcdn.com/image/fetch/$s_!pSW2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!pSW2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!pSW2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!pSW2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe139faf6-7091-483b-b9fe-3f8bc39852e1_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A confident yes, and the wrong destination.</figcaption></figure></div><p><strong>The login is how you know it is on the right track.</strong> Claude Code cannot sign you in, so it stops and asks you to run <code>/design-login</code> yourself. Once you have, the upload just works.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!25t8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!25t8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!25t8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!25t8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!25t8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!25t8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1429839,&quot;alt&quot;:&quot;Claude Code showing a failed attempt to list design-system projects, with an error explaining that DesignSync needs authorization and that slash design-login must be run to authorize it, followed by a prompt asking whether to proceed.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude Code showing a failed attempt to list design-system projects, with an error explaining that DesignSync needs authorization and that slash design-login must be run to authorize it, followed by a prompt asking whether to proceed." title="Claude Code showing a failed attempt to list design-system projects, with an error explaining that DesignSync needs authorization and that slash design-login must be run to authorize it, followed by a prompt asking whether to proceed." srcset="https://substackcdn.com/image/fetch/$s_!25t8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!25t8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!25t8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!25t8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeecd4c-5b0b-42b9-aa26-4f6eca3dcab8_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">You are looking for this. Run the login yourself.</figcaption></figure></div><p><strong>Then check the design system landed.</strong> Go to <a href="https://claude.ai/design">claude.ai/design</a> and open the Design systems tab. Yours sits above the ones that ship with the product.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JDZP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JDZP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!JDZP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!JDZP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!JDZP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!JDZP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:824002,&quot;alt&quot;:&quot;The Design systems tab in Claude Design listing the Meridian Report System with an \&quot;Org default\&quot; badge, updated 8 minutes ago, owned by You and marked Published, above the built-in systems Modernist, Classical, Nocturne, Organic, Broadsheet and Industry.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Design systems tab in Claude Design listing the Meridian Report System with an &quot;Org default&quot; badge, updated 8 minutes ago, owned by You and marked Published, above the built-in systems Modernist, Classical, Nocturne, Organic, Broadsheet and Industry." title="The Design systems tab in Claude Design listing the Meridian Report System with an &quot;Org default&quot; badge, updated 8 minutes ago, owned by You and marked Published, above the built-in systems Modernist, Classical, Nocturne, Organic, Broadsheet and Industry." srcset="https://substackcdn.com/image/fetch/$s_!JDZP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!JDZP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!JDZP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!JDZP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc02e4ca2-adc4-4d43-a5f5-4d6b02ece05a_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Published. Org default means your whole company starts from it.</figcaption></figure></div><p><strong>Click into it and you can see what crossed over:</strong> the tokens with their codes, and every template by name.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g-jU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g-jU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!g-jU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!g-jU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!g-jU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!g-jU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1143693,&quot;alt&quot;:&quot;The Meridian Report System page in Claude Design, showing Foundations with a colour palette of navy, azure and sky swatches labelled with hex codes, and a Templates list containing back cover, closing, cover, two exhibit layouts, key findings, section intro, sidebar heatmap and statement.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Meridian Report System page in Claude Design, showing Foundations with a colour palette of navy, azure and sky swatches labelled with hex codes, and a Templates list containing back cover, closing, cover, two exhibit layouts, key findings, section intro, sidebar heatmap and statement." title="The Meridian Report System page in Claude Design, showing Foundations with a colour palette of navy, azure and sky swatches labelled with hex codes, and a Templates list containing back cover, closing, cover, two exhibit layouts, key findings, section intro, sidebar heatmap and statement." srcset="https://substackcdn.com/image/fetch/$s_!g-jU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!g-jU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!g-jU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!g-jU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe154352-2cda-48f6-91e3-e3233affa8ab_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Cover, statement, key findings, section intro, two chart layouts, closing and back cover.</figcaption></figure></div><p>The setup is done, and you never repeat it. Now the part you will do every time.</p><div><hr></div><h2>Step 4: Create your slide deck</h2><p>Everything happens on the Claude Design home screen. A few settings, then you wait.</p><ol><li><p><strong>Go to <a href="https://claude.ai/design">claude.ai/design</a>.</strong></p></li><li><p><strong>Type what you want in the prompt box.</strong> Keep it plain.</p></li><li><p><strong>Choose Slides</strong> from the template row.</p></li><li><p><strong>Open the Design system selector</strong> and pick your design system. Left on None, the deck comes out in Claude Design&#8217;s own styling.</p></li><li><p><strong>Attach your content with the plus button:</strong> the doc, the notes, the research that holds what you want to say.</p></li><li><p><strong>Send it.</strong></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RPVt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RPVt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!RPVt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!RPVt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!RPVt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!RPVt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:952048,&quot;alt&quot;:&quot;The Claude Design home screen at claude.ai/design, headed \&quot;What should we create?\&quot;, with a prompt box whose Design system selector reads None, above a row of templates including Blank, Slides, Document and Wireframe.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Claude Design home screen at claude.ai/design, headed &quot;What should we create?&quot;, with a prompt box whose Design system selector reads None, above a row of templates including Blank, Slides, Document and Wireframe." title="The Claude Design home screen at claude.ai/design, headed &quot;What should we create?&quot;, with a prompt box whose Design system selector reads None, above a row of templates including Blank, Slides, Document and Wireframe." srcset="https://substackcdn.com/image/fetch/$s_!RPVt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!RPVt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!RPVt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!RPVt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F419520ad-1ee2-4c10-8085-41588afd5ec6_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Before: the selector reads None.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dodi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dodi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!dodi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!dodi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!dodi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!dodi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:886985,&quot;alt&quot;:&quot;The Claude Design home screen with the prompt \&quot;Make a slide deck about the state of AI in 2026\&quot;, the Slides template highlighted, the Design system selector reading \&quot;Meridian Report System\&quot;, and a \&quot;+1 more\&quot; chip showing the attached PDF.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Claude Design home screen with the prompt &quot;Make a slide deck about the state of AI in 2026&quot;, the Slides template highlighted, the Design system selector reading &quot;Meridian Report System&quot;, and a &quot;+1 more&quot; chip showing the attached PDF." title="The Claude Design home screen with the prompt &quot;Make a slide deck about the state of AI in 2026&quot;, the Slides template highlighted, the Design system selector reading &quot;Meridian Report System&quot;, and a &quot;+1 more&quot; chip showing the attached PDF." srcset="https://substackcdn.com/image/fetch/$s_!dodi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!dodi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!dodi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!dodi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb768f799-8981-477c-ac7a-5c883d979d49_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">After: Slides selected, your design system named, your content attached.</figcaption></figure></div><p>Claude Design will not start drawing straight away. It reads your files, then asks a few questions about length and audience. Answer them, or skip and let it decide. <strong>Four questions cost less than fixing the wrong deck.</strong> Your questions will not match mine word for word, because every session runs a little differently.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u5Lh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u5Lh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!u5Lh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!u5Lh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!u5Lh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!u5Lh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:997673,&quot;alt&quot;:&quot;A panel headed \&quot;Quick calls before I build the deck\&quot; explaining that design direction is set by the attached system, with a question about how long the talk is offering 5, 10 and 20 minute options or a leave-behind, and a question about who is in the room.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A panel headed &quot;Quick calls before I build the deck&quot; explaining that design direction is set by the attached system, with a question about how long the talk is offering 5, 10 and 20 minute options or a leave-behind, and a question about who is in the room." title="A panel headed &quot;Quick calls before I build the deck&quot; explaining that design direction is set by the attached system, with a question about how long the talk is offering 5, 10 and 20 minute options or a leave-behind, and a question about who is in the room." srcset="https://substackcdn.com/image/fetch/$s_!u5Lh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!u5Lh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!u5Lh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!u5Lh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154553d5-cc0c-4198-8a87-e3bc570bdb6b_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Length and audience. Two answers that shape every slide.</figcaption></figure></div><p><strong>How I did it.</strong> My prompt was &#8220;Make a slide deck about the state of AI in 2026.&#8221; I attached the same McKinsey PDF for the content. A few minutes later I had nine slides, in the right colours, with the speaker notes already written. Claude Design fixed two of its own layout bugs on the way.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XLVW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XLVW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!XLVW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!XLVW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!XLVW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!XLVW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27506884-4280-4818-9798-24d2efa51625_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1320257,&quot;alt&quot;:&quot;The Claude Design editor showing slide 2 of 9, titled \&quot;Adoption is broad; scaling is what moved this year\&quot;, with a navy bar chart labelled Exhibit 1, large 89% and 56% figures beside it, and speaker notes displayed below the slide.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Claude Design editor showing slide 2 of 9, titled &quot;Adoption is broad; scaling is what moved this year&quot;, with a navy bar chart labelled Exhibit 1, large 89% and 56% figures beside it, and speaker notes displayed below the slide." title="The Claude Design editor showing slide 2 of 9, titled &quot;Adoption is broad; scaling is what moved this year&quot;, with a navy bar chart labelled Exhibit 1, large 89% and 56% figures beside it, and speaker notes displayed below the slide." srcset="https://substackcdn.com/image/fetch/$s_!XLVW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!XLVW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!XLVW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!XLVW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27506884-4280-4818-9798-24d2efa51625_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The numbers are right too. It read the PDF instead of inventing them.</figcaption></figure></div><p>Now read the deck properly, because the next step is where the design system gets better.</p><div><hr></div><h2>Step 5: Improve the design system</h2><p>Something will be off. A colour, a heading size, a layout Claude Design had to invent. Fix it in the design system, not in the slide, and the fix lands on every deck you make after this 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_!Hn8e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hn8e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Hn8e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Hn8e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Hn8e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hn8e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.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;:3862253,&quot;alt&quot;:&quot;A ring of four numbered stations running clockwise, split down the middle by a dashed line. The left half is headed Claude Code and the right half Claude Design. Station 1, create the deck: a folder of design system files on the Claude Code side feeds a stack of slides on the Claude Design side. Station 2, spot the gap: one slide in that stack is circled, captioned find a mistake or missing feature. Station 3, describe the fix: a hand types into a terminal window while a slide beside it is crossed out, captioned correct the system file upstream. Station 4, sync it back: a folder travels up into a cloud, captioned push the update to the cloud. In the centre, the note reads the fix lands on every deck after it.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A ring of four numbered stations running clockwise, split down the middle by a dashed line. The left half is headed Claude Code and the right half Claude Design. Station 1, create the deck: a folder of design system files on the Claude Code side feeds a stack of slides on the Claude Design side. Station 2, spot the gap: one slide in that stack is circled, captioned find a mistake or missing feature. Station 3, describe the fix: a hand types into a terminal window while a slide beside it is crossed out, captioned correct the system file upstream. Station 4, sync it back: a folder travels up into a cloud, captioned push the update to the cloud. In the centre, the note reads the fix lands on every deck after it." title="A ring of four numbered stations running clockwise, split down the middle by a dashed line. The left half is headed Claude Code and the right half Claude Design. Station 1, create the deck: a folder of design system files on the Claude Code side feeds a stack of slides on the Claude Design side. Station 2, spot the gap: one slide in that stack is circled, captioned find a mistake or missing feature. Station 3, describe the fix: a hand types into a terminal window while a slide beside it is crossed out, captioned correct the system file upstream. Station 4, sync it back: a folder travels up into a cloud, captioned push the update to the cloud. In the centre, the note reads the fix lands on every deck after it." srcset="https://substackcdn.com/image/fetch/$s_!Hn8e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Hn8e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Hn8e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Hn8e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9452cb3-3b43-4eab-bd77-d8bb97aa4a90_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p>In Claude Design, <strong>read the deck slide by slide</strong> and note what looks wrong.</p></li><li><p>In Claude Code, <strong>go back to the same session and describe the fixes</strong> in plain words. &#8220;The accent blue is too dark. Drop the three-column layout. Add a roadmap slide.&#8221;</p></li><li><p>In Claude Code, <strong>type </strong><code>/design-sync</code><strong> again.</strong> It updates your design system instead of making a second one.</p></li><li><p>Back in Claude Design, <strong>create the deck again</strong> and read it again.</p></li></ol><p><strong>How I did it.</strong> I skipped this loop for the McKinsey deck, because that one was a demo and the slides were already good enough to show the method. On my real work I ran it a lot: create, spot what is off, fix the design system, sync, create again. I stopped when the slides came out right without me touching them. <strong>You judge a design system by the deck it produces.</strong></p><div><hr></div><h2>Step 6: Export your slide deck</h2><p><strong>You can share the deck straight from Claude Design</strong>, and your colleagues can open and edit it there. Most of the time you will still want it in Google Slides or PowerPoint, because that is where people actually work.</p><ol><li><p><strong>Open the Share menu.</strong></p></li><li><p><strong>Pick your format.</strong> Google Slides uploads straight across, PowerPoint keeps editable text and shapes, and PDF downloads on the spot. Behind <strong>More formats and apps</strong> there are others: standalone HTML, a zip, Canva, or a hand-off back to Claude Code.</p></li><li><p><strong>Open the file and click into a heading.</strong> If the cursor lands in it, the text is real and not a picture.</p></li><li><p><strong>Check the speaker notes</strong> came with it.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q2Qo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q2Qo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!q2Qo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!q2Qo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!q2Qo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!q2Qo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1403952,&quot;alt&quot;:&quot;The Share menu in Claude Design showing workspace access and a Copy link button, a \&quot;Publish as artifact\&quot; option, and an Export list containing PowerPoint marked \&quot;Editable text and shapes\&quot;, Google Slides marked \&quot;Uploads cleanly to Slides\&quot;, PDF, and More formats and apps.&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://www.theaithinker.com/i/214167153?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Share menu in Claude Design showing workspace access and a Copy link button, a &quot;Publish as artifact&quot; option, and an Export list containing PowerPoint marked &quot;Editable text and shapes&quot;, Google Slides marked &quot;Uploads cleanly to Slides&quot;, PDF, and More formats and apps." title="The Share menu in Claude Design showing workspace access and a Copy link button, a &quot;Publish as artifact&quot; option, and an Export list containing PowerPoint marked &quot;Editable text and shapes&quot;, Google Slides marked &quot;Uploads cleanly to Slides&quot;, PDF, and More formats and apps." srcset="https://substackcdn.com/image/fetch/$s_!q2Qo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!q2Qo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!q2Qo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!q2Qo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7a5898a-1877-44a0-8c43-d5a5bab3750b_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Share it here, or export it. More formats sit behind the last row.</figcaption></figure></div><p><strong>How I did it.</strong> I sent mine to Google Slides, because that is where my colleagues would open it. Text boxes, charts and speaker notes all made the trip. That is <a href="https://docs.google.com/presentation/d/1NTJeT6OPcfBs3tI7XhaE2zTFNxVDYufuXNwd0PW254Q/edit">the deck at the top of this article</a>, and nothing in it needed fixing by hand.</p><div><hr></div><h2>Your turn</h2><p>Pick two slide decks you are proud of. Give them to Claude Code and ask for a design system. Run <code>/design-login</code>, then <code>/design-sync</code>. <strong>That is an hour, once.</strong></p><p>After that, every deck is a prompt and a file of notes. The exec review where only the content changes. The company template everyone hacks differently. The client deck where being off brand actually costs you something. <strong>You will know it worked when nobody asks which tool made the slides.</strong></p>]]></content:encoded></item><item><title><![CDATA[How to organize Claude Code for product work]]></title><description><![CDATA[Download the starter workspace. Run the setup skill. Sort files by how fast they change. Turn repeated work into skills. File every correction once.]]></description><link>https://www.theaithinker.com/p/how-to-organize-claude-code-for-product</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-organize-claude-code-for-product</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 10 Aug 2026 11:02:46 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/200bd727-4bb0-4416-855c-ec374c4f3c74_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My Claude Code workspace for my product job is a folder with almost no code in it. It holds a context folder with everything about the company: the product, the users, the competitors, how I like to work. One folder per project, with the tasks separated from the deliverables. A set of skills that each do one recurring piece of work: the status update, the PRD review, the interview synthesis. When I give feedback once, it lands in a file with a note on why, and I never give that feedback again. <strong>I didn&#8217;t design this system. I arrived at it, mostly by getting it wrong first.</strong></p><p>Getting it wrong taught me the lesson that runs this whole article. <strong>Past the basics, your results in Claude Code stop depending on how well you prompt and start depending on how well you file.</strong> A good prompt improves one session; a good file improves every session after it. The prompt-tuning advice you&#8217;ve already read stops helping at exactly the point where the filing starts to matter.</p><p>So instead of describing my system, I packaged it. <strong>The <a href="https://github.com/adamfaik/claude-code-pm-starter">starter workspace</a> is public on GitHub: the folders, the context templates, and five PM skills, personalized by one setup interview.</strong> You don&#8217;t need to be technical to follow along; every step is spelled out, including installing the tools. And while my example is a product job, the same architecture fits any context-heavy work: a design lead&#8217;s research library, a data team&#8217;s metric definitions, a founder&#8217;s everything-folder.</p><p>Here&#8217;s the route.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_aKs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_aKs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!_aKs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!_aKs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!_aKs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_aKs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3746193,&quot;alt&quot;:&quot;Alt: A hand-drawn four-stop map. Stop 1, the switch: chat bubbles left behind for a folder-based workspace. Stop 2, the starter workspace: a downloaded folder with a setup skill filling in context files. Stop 3, the practices: six moves that make the system compound. Stop 4, the rhythm: a workday running through the organized workspace.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Alt: A hand-drawn four-stop map. Stop 1, the switch: chat bubbles left behind for a folder-based workspace. Stop 2, the starter workspace: a downloaded folder with a setup skill filling in context files. Stop 3, the practices: six moves that make the system compound. Stop 4, the rhythm: a workday running through the organized workspace." title="Alt: A hand-drawn four-stop map. Stop 1, the switch: chat bubbles left behind for a folder-based workspace. Stop 2, the starter workspace: a downloaded folder with a setup skill filling in context files. Stop 3, the practices: six moves that make the system compound. Stop 4, the rhythm: a workday running through the organized workspace." srcset="https://substackcdn.com/image/fetch/$s_!_aKs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!_aKs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!_aKs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!_aKs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d3febf-7b6f-4074-b6ce-5c3ef9c20523_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>The switch.</strong> I&#8217;ll show you what chat mode and Cowork can&#8217;t give you, and why the terminal is worth it for a product manager.</p></li><li><p><strong>The starter workspace.</strong> Download it, run one setup skill, and give it a real task: six steps, each shown on screen.</p></li><li><p><strong>The practices.</strong> Six moves that make the system compound, each one naming the exact thing to do and what you get back.</p></li><li><p><strong>The rhythm.</strong> Here&#8217;s what a normal workday looks like inside the system, from the first short prompt to the two-minute filing habit.</p></li></ul><p>The payoff is concrete. One sitting gets you running: install the tools, download the workspace, answer the setup interview, hand over a first real task. <strong>You stop re-explaining your company every session, and every correction you make becomes permanent.</strong> Every step is below.</p><p>Time to open the filing cabinet.</p><div><hr></div><h2>What chat mode can&#8217;t give you</h2><p>You probably run your product work through Claude&#8217;s chat today: a browser tab or the desktop app, maybe Cowork for the agentic tasks. It works, and that&#8217;s exactly the trap. Every conversation starts from zero. The strategy doc you uploaded last time is gone, the context you patiently explained lives in a thread you&#8217;ll never find again, and the output you liked is trapped inside a conversation instead of sitting in a file. <strong>Chat is a great place to think and a terrible place to accumulate.</strong> For occasional questions that&#8217;s fine. For daily product work, it means paying the same setup cost every single morning.</p><p>Claude Code is the same Claude with a different home: a folder on your machine that it can read, navigate, and write to. Context lives in files that persist. Recurring work lives in skills that run on command. Outputs land as documents you keep, not messages you scroll for. <strong>In my daily use, everything I used to do in chat or Cowork runs better here, because nothing is ever explained twice.</strong> That&#8217;s an observation from my own work, not a law, but it&#8217;s held for months.</p><p>The part that actually changed my job is the terminal underneath. <strong>Claude Code speaks to GitHub natively, no connector needed: it can pull a company repository and answer questions about it, and it can push your own work.</strong> Ask it to fetch the repo behind your product and explain what a feature flag actually does. Push your workspace to a private repository and a teammate can clone it and inherit your head start. For a product manager, that&#8217;s a direct line into the codebase and a way to share your whole system, both of which chat simply doesn&#8217;t have.</p><p>What nobody hands you is the filing system that makes all this compound. Anthropic&#8217;s <a href="https://code.claude.com/docs/en/best-practices">best-practices guide</a> is written, in its own words, &#8220;for engineers using Claude Code across various codebases, languages, and environments,&#8221; and engineers get their structure free: the codebase is already organized context. The PM guides that exist, <a href="https://www.sachinrekhi.com/p/claude-code-for-product-managers">Sachin Rekhi&#8217;s</a> being the best known, rightly tell you to &#8220;store all of your product data and documentation in local markdown files,&#8221; then move on. Organized how? Try it without an answer and you get what I had: forty loose files and a stale setup. <strong>The starter workspace is that answer, prebuilt.</strong> Let&#8217;s set it up.</p><div><hr></div><h2>Start with the starter workspace</h2><p>The starter workspace is the structure I run my own product work on, cleaned into a template: the folders, the context files with guided placeholders, an example project, and five skills already installed. <strong>The whole thing is free and public: <a href="https://github.com/adamfaik/claude-code-pm-starter">claude-code-pm-starter</a>.</strong> Six steps take you from nothing to a first real task, and none of them assume a technical background.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4ps3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4ps3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!4ps3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!4ps3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!4ps3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!4ps3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3469765,&quot;alt&quot;:&quot;A hand-drawn horizontal flow of six numbered steps. Step 1: install VS Code. Step 2: download the workspace as a ZIP from GitHub. Step 3: open the folder in VS Code with the terminal positioned on the right. Step 4: learn the first commands. Step 5: run the setup skill, shown as a short interview filling context files. Step 6: give it a real task, shown as a status update drafted from the task file.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn horizontal flow of six numbered steps. Step 1: install VS Code. Step 2: download the workspace as a ZIP from GitHub. Step 3: open the folder in VS Code with the terminal positioned on the right. Step 4: learn the first commands. Step 5: run the setup skill, shown as a short interview filling context files. Step 6: give it a real task, shown as a status update drafted from the task file." title="A hand-drawn horizontal flow of six numbered steps. Step 1: install VS Code. Step 2: download the workspace as a ZIP from GitHub. Step 3: open the folder in VS Code with the terminal positioned on the right. Step 4: learn the first commands. Step 5: run the setup skill, shown as a short interview filling context files. Step 6: give it a real task, shown as a status update drafted from the task file." srcset="https://substackcdn.com/image/fetch/$s_!4ps3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!4ps3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!4ps3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!4ps3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca0d31e-ffb0-463c-b2ba-ec0228360f23_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One prerequisites note before you start. You need a paid Claude plan for Claude Code. <strong>Everything else, including the two tools you&#8217;ll install, is free and covered in the steps.</strong></p><h3>Step 1: Install VS Code</h3><p>Claude Code runs in a terminal, and a terminal alone is a bad home for a product manager: you can&#8217;t see your files. The fix is an IDE. <strong>An IDE is just an editor that shows your folder as a panel of files while you work; developers live in one all day, and you&#8217;ll borrow it for the file panel alone.</strong> Download <a href="https://code.visualstudio.com/">VS Code</a>, the free standard, and install it like any app. You won&#8217;t write code in it. You&#8217;ll watch your workspace organize itself in the left panel, which is exactly the visibility chat mode never gave you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KCdC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KCdC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!KCdC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!KCdC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!KCdC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!KCdC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1432533,&quot;alt&quot;:&quot;Screenshot of the VS Code download page with the download button for the user&#8217;s operating system highlighted.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of the VS Code download page with the download button for the user&#8217;s operating system highlighted." title="Screenshot of the VS Code download page with the download button for the user&#8217;s operating system highlighted." srcset="https://substackcdn.com/image/fetch/$s_!KCdC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!KCdC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!KCdC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!KCdC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f23c42e-bc65-40a2-9fcb-0ae3e7d9555d_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">VS Code: free, and you&#8217;ll only use a fraction of it.</figcaption></figure></div><h3>Step 2: Download the workspace</h3><p>Open <a href="https://github.com/adamfaik/claude-code-pm-starter">the repository page</a>, click the green <code>Code</code> button, and choose <code>Download ZIP</code>. No git, no account needed. Unzip it and move the folder wherever you keep your work. <strong>This folder is about to become the place your product work lives</strong>, so pick somewhere you&#8217;ll find it again, like a <code>work</code> folder in your home directory.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NG7z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NG7z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!NG7z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!NG7z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!NG7z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!NG7z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:796210,&quot;alt&quot;:&quot;Screenshot of the claude-code-pm-starter repository on GitHub. The green Code button is expanded and the Download ZIP option is highlighted at the bottom of the dropdown.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of the claude-code-pm-starter repository on GitHub. The green Code button is expanded and the Download ZIP option is highlighted at the bottom of the dropdown." title="Screenshot of the claude-code-pm-starter repository on GitHub. The green Code button is expanded and the Download ZIP option is highlighted at the bottom of the dropdown." srcset="https://substackcdn.com/image/fetch/$s_!NG7z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!NG7z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!NG7z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!NG7z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3611772-710a-489f-abc8-9f4cd94c0a8a_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The green Code button, then Download ZIP. No git needed.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!I6BC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I6BC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png 424w, https://substackcdn.com/image/fetch/$s_!I6BC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png 848w, https://substackcdn.com/image/fetch/$s_!I6BC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png 1272w, https://substackcdn.com/image/fetch/$s_!I6BC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!I6BC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png" width="1456" height="773" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:773,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:493262,&quot;alt&quot;:&quot;A macOS Finder window showing the unzipped claude-code-pm-starter-main folder inside Documents, in a Work folder. The next column lists its contents: CLAUDE.md, context, LICENSE, operations, projects, and README.md.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A macOS Finder window showing the unzipped claude-code-pm-starter-main folder inside Documents, in a Work folder. The next column lists its contents: CLAUDE.md, context, LICENSE, operations, projects, and README.md." title="A macOS Finder window showing the unzipped claude-code-pm-starter-main folder inside Documents, in a Work folder. The next column lists its contents: CLAUDE.md, context, LICENSE, operations, projects, and README.md." srcset="https://substackcdn.com/image/fetch/$s_!I6BC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png 424w, https://substackcdn.com/image/fetch/$s_!I6BC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png 848w, https://substackcdn.com/image/fetch/$s_!I6BC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png 1272w, https://substackcdn.com/image/fetch/$s_!I6BC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fcababb-8284-4f75-8bfa-286f309047df_2064x1096.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Unzipped and filed: the starter folder in a Work folder, ready to open.</figcaption></figure></div><h3>Step 3: Open it in VS Code, terminal on the right</h3><p>Open VS Code, choose <code>File &gt; Open Folder</code>, and pick the unzipped folder. The left panel now shows the whole structure: <code>context/</code>, <code>projects/</code>, <code>operations/</code>, the skills. Then open the terminal inside VS Code with <code>Terminal &gt; New Terminal</code>, and here&#8217;s the small trick that changes how the whole thing feels: right-click the terminal panel&#8217;s header and choose <code>Move Panel Right</code>. <strong>Files on the left, agent on the right: it stops feeling like a command line and starts feeling like a colleague sitting next to your documents.</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_!UeAe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UeAe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!UeAe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!UeAe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!UeAe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!UeAe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:894588,&quot;alt&quot;:&quot;VS Code with the starter workspace open. The left explorer panel lists the .claude/skills folder with the five skills, plus context, operations, projects, CLAUDE.md, LICENSE, and README.md. The CLAUDE.md map file is open in the editor, showing its Where things live and Rules for every session sections.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code with the starter workspace open. The left explorer panel lists the .claude/skills folder with the five skills, plus context, operations, projects, CLAUDE.md, LICENSE, and README.md. The CLAUDE.md map file is open in the editor, showing its Where things live and Rules for every session sections." title="VS Code with the starter workspace open. The left explorer panel lists the .claude/skills folder with the five skills, plus context, operations, projects, CLAUDE.md, LICENSE, and README.md. The CLAUDE.md map file is open in the editor, showing its Where things live and Rules for every session sections." srcset="https://substackcdn.com/image/fetch/$s_!UeAe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!UeAe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!UeAe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!UeAe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F604f369a-a060-4b2e-ab55-b293d30d6ec9_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The whole structure, visible at last: the skills, context, operations, projects, and the map.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rMmP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rMmP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!rMmP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!rMmP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!rMmP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!rMmP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:668573,&quot;alt&quot;:&quot;VS Code with the terminal panel open at the bottom. The context menu is expanded with Panel Position selected, and the Right option is highlighted, about to move the terminal to the right side of the window.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code with the terminal panel open at the bottom. The context menu is expanded with Panel Position selected, and the Right option is highlighted, about to move the terminal to the right side of the window." title="VS Code with the terminal panel open at the bottom. The context menu is expanded with Panel Position selected, and the Right option is highlighted, about to move the terminal to the right side of the window." srcset="https://substackcdn.com/image/fetch/$s_!rMmP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!rMmP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!rMmP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!rMmP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f6c603-abfb-4adf-9073-c379b9c12f50_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The trick: right-click the panel, Move Panel Right.</figcaption></figure></div><p>If you don&#8217;t have Claude Code yet, install it now from <a href="https://code.claude.com/docs/en/quickstart">the official guide</a>; it&#8217;s one command pasted into that terminal. Then type <code>claude</code> and press Enter. <strong>Claude Code starts inside the folder, reads the map file, and knows where everything lives from your first message.</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_!3ss8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3ss8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!3ss8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!3ss8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!3ss8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!3ss8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:971393,&quot;alt&quot;:&quot;Screenshot of VS Code. The left explorer panel shows the starter workspace folders: context, projects, operations, and the skills directory. On the right side, the terminal panel has been moved to a vertical position and Claude Code is running in it, showing its welcome prompt.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of VS Code. The left explorer panel shows the starter workspace folders: context, projects, operations, and the skills directory. On the right side, the terminal panel has been moved to a vertical position and Claude Code is running in it, showing its welcome prompt." title="Screenshot of VS Code. The left explorer panel shows the starter workspace folders: context, projects, operations, and the skills directory. On the right side, the terminal panel has been moved to a vertical position and Claude Code is running in it, showing its welcome prompt." srcset="https://substackcdn.com/image/fetch/$s_!3ss8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!3ss8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!3ss8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!3ss8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50775f9-eacb-43f6-bd6d-6d6c8095962d_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Files on the left, agent on the right.</figcaption></figure></div><h3>Step 4: Say hello, then learn four commands</h3><p>One distinction saves beginners a lot of confusion. <strong>The terminal wants exact commands; Claude wants normal language.</strong> Before you typed <code>claude</code>, you were talking to the terminal, where spelling and syntax matter. Now that Claude Code is running, you&#8217;re talking to Claude, exactly like in the chat app. So do the natural first thing: type hello and ask it what it can see in this folder. It will answer like a colleague who just read your files.</p><p>A few slash commands are worth knowing on day one, typed directly into Claude Code:</p><ul><li><p><strong>/model</strong> - shows which Claude model you&#8217;re running and lets you switch.</p></li><li><p><strong>/effort</strong> - sets how much thinking Claude puts into each answer; higher effort for hard work, lower for quick drafts.</p></li><li><p><strong>/mcp</strong> - lists your MCPs, the live connections into tools like Jira, Slack, or Confluence, and lets you manage them.</p></li><li><p><strong>/plugins</strong> - opens the plugin system, and this one deserves a minute. Claude Code comes with Anthropic&#8217;s <a href="https://claude.com/plugins">plugin directory</a> available by default, and marketplaces can be added on top. One is built specifically for product managers: <a href="https://github.com/phuryn/pm-skills">pm-skills</a>, a hundred-plus PM skills across discovery, strategy, execution, and launch; its README has the up-to-date install instructions. <code>pm-execution</code> covers PRDs, OKRs, roadmaps, and retrospectives; <code>pm-product-discovery</code> adds interviews and assumption testing. <strong>Install the two or three that match your work, not all nine; every installed plugin is context the system carries.</strong></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_!s2aB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s2aB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!s2aB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!s2aB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!s2aB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!s2aB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1009192,&quot;alt&quot;:&quot;VS Code with Claude Code running in the right-side terminal. The plugins panel is open on the Marketplaces tab, showing the official Anthropic marketplace with 276 plugins available and an Add Marketplace option for adding more.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code with Claude Code running in the right-side terminal. The plugins panel is open on the Marketplaces tab, showing the official Anthropic marketplace with 276 plugins available and an Add Marketplace option for adding more." title="VS Code with Claude Code running in the right-side terminal. The plugins panel is open on the Marketplaces tab, showing the official Anthropic marketplace with 276 plugins available and an Add Marketplace option for adding more." srcset="https://substackcdn.com/image/fetch/$s_!s2aB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!s2aB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!s2aB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!s2aB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febd8327d-2659-4edd-a1e7-671ea0fe0244_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The plugin panel: Anthropic&#8217;s marketplace is there by default.</figcaption></figure></div><p>One more control, then you&#8217;re done with the tour: press <code>Shift+Tab</code> to cycle Claude Code&#8217;s three modes.</p><ul><li><p>Default mode asks your permission before touching any file.</p></li><li><p>Auto-accept applies edits without asking.</p></li><li><p>Plan mode is the one to remember: Claude researches and proposes a plan, and nothing changes until you approve it.</p></li></ul><p><strong>Start in default, use plan mode for anything big, and save auto-accept for work you&#8217;ve learned to trust.</strong> For everything beyond these, <a href="https://cc.storyfox.cz/">this community cheat sheet</a> is the best one-page reference I&#8217;ve found.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AnGU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AnGU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!AnGU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!AnGU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!AnGU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!AnGU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:995841,&quot;alt&quot;:&quot;Screenshot of Claude Code running in the VS Code terminal. The user typed Hello and Claude answered like a colleague who just read the files: it names the workspace folders (context for stable knowledge, projects for active work, operations for dated notes) and asks what to work on today.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of Claude Code running in the VS Code terminal. The user typed Hello and Claude answered like a colleague who just read the files: it names the workspace folders (context for stable knowledge, projects for active work, operations for dated notes) and asks what to work on today." title="Screenshot of Claude Code running in the VS Code terminal. The user typed Hello and Claude answered like a colleague who just read the files: it names the workspace folders (context for stable knowledge, projects for active work, operations for dated notes) and asks what to work on today." srcset="https://substackcdn.com/image/fetch/$s_!AnGU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!AnGU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!AnGU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!AnGU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e947cc-f0ef-4dda-b7bd-0047a8455a72_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Say hello first. The commands can wait a minute.</figcaption></figure></div><h3>Step 5: Run the setup skill</h3><p>Type <code>/setup-workspace</code> and press Enter. The workspace ships with a skill whose only job is to personalize the template: it interviews you about your company, your product, your users, and how you like to work, then fills in the context files and renames the example project to your most active real one. Answer in plain language; it does the writing and shows you each file for a yes or a fix.</p><p><strong>You don&#8217;t have to answer from memory: paste links.</strong> Hand it your product&#8217;s public site, a documentation page, or, if you connected the Atlassian MCP in the previous step, the Confluence page about your team, and it reads them and builds the context files from what&#8217;s already written. Fifteen minutes of this replaces the blank-page problem entirely. Your exact questions will differ a little from mine; each session is a little unpredictable, that&#8217;s just how these models work. Skip anything you don&#8217;t know yet; an honest placeholder beats invented content.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UqFl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UqFl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!UqFl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!UqFl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!UqFl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!UqFl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1064705,&quot;alt&quot;:&quot;Screenshot of the setup-workspace skill mid-interview in Claude Code. The skill announces a short interview where skip is a valid answer, then asks its first round of plain-language questions about the company; the user is typing an answer that includes a pasted link.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of the setup-workspace skill mid-interview in Claude Code. The skill announces a short interview where skip is a valid answer, then asks its first round of plain-language questions about the company; the user is typing an answer that includes a pasted link." title="Screenshot of the setup-workspace skill mid-interview in Claude Code. The skill announces a short interview where skip is a valid answer, then asks its first round of plain-language questions about the company; the user is typing an answer that includes a pasted link." srcset="https://substackcdn.com/image/fetch/$s_!UqFl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!UqFl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!UqFl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!UqFl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef0d9609-b9b6-4657-a849-821acc9bbd21_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Answer in plain language, or paste a link and let it read.</figcaption></figure></div><h3>Step 6: Give it a real task</h3><p>Don&#8217;t end the first session on setup; hand it something you actually owe someone. Type <code>/status-update</code> and watch it draft your update from the project&#8217;s task file instead of your memory. Or point it at a real deliverable:</p><blockquote><p>Draft the kickoff brief for [your project]. Match my writing preferences in <code>context/preferences.md</code>. Check the open questions in the project&#8217;s <code>tasks.md</code> before concluding anything.</p></blockquote><p><strong>The first output that sounds like you, about your product, with your project&#8217;s real state in it, is the moment the filing clicks.</strong> Three more skills wait in the folder: <code>prd-review</code> for the next document you&#8217;d like a hard read on, <code>interview-synthesis</code> for your next user conversation, and <code>file-feedback</code>, the one that makes your corrections permanent.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YnQU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YnQU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!YnQU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!YnQU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!YnQU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!YnQU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1148068,&quot;alt&quot;:&quot;Screenshot of the status-update skill running in Claude Code. It reports reading the workspace state, then asks Who is this update for, offering audiences to pick from: exec or leadership, my manager, cross-functional team, or wider stakeholders.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of the status-update skill running in Claude Code. It reports reading the workspace state, then asks Who is this update for, offering audiences to pick from: exec or leadership, my manager, cross-functional team, or wider stakeholders." title="Screenshot of the status-update skill running in Claude Code. It reports reading the workspace state, then asks Who is this update for, offering audiences to pick from: exec or leadership, my manager, cross-functional team, or wider stakeholders." srcset="https://substackcdn.com/image/fetch/$s_!YnQU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png 424w, https://substackcdn.com/image/fetch/$s_!YnQU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png 848w, https://substackcdn.com/image/fetch/$s_!YnQU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png 1272w, https://substackcdn.com/image/fetch/$s_!YnQU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf34536-d8c6-4c95-a33e-87e154bb4023_3248x1966.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The skill reads the workspace state first, then asks who the update is for.</figcaption></figure></div><p>That&#8217;s the start: a working system in one sitting. What makes it compound is how you feed it, and that&#8217;s six practices.</p><div><hr></div><h2>Go further with six practices</h2><p>The starter structure encodes the practices I converged on by getting each one wrong first. <strong>They&#8217;re not a methodology to obey; they&#8217;re the moves that kept earning their place.</strong> Each one below names the concrete thing to do and what you get back for it. The first one is the engine; the rest steer.</p><h3>Use it for every task, every day</h3><p>The single highest-return habit is also the simplest to state: <strong>default to the workspace for everything.</strong> Each time a task lands on you, open the workspace and do it there with Claude Code, even when chat would feel faster. The first run of a new kind of task takes longer, I won&#8217;t pretend otherwise: <strong>you explain, you correct, you adjust.</strong> But every explanation lands in a file, so the second run starts ahead, and the third barely needs you. <strong>It&#8217;s like teaching an intern: the first delegation costs you an afternoon, and then the work comes back done.</strong> A task kept in chat mode teaches the system nothing; the same task done in the workspace is an investment that pays on every repeat.</p><p>The habit has a closing move, and it&#8217;s where the compounding actually happens. When a task is done and you&#8217;re satisfied with the result, don&#8217;t just close the terminal. <strong>Ask Claude to bank what it learned:</strong> convert the finished task into a skill if it will repeat, confirm the new facts into the context files, and update your preferences file with the feedback you gave along the way. I say it almost in those words: &#8220;we&#8217;re done, turn this into a skill, and file the corrections I made.&#8221; That one sentence at the end of a task is the difference between a tool you use and a system that learns.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!plXG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!plXG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!plXG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!plXG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!plXG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!plXG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3733140,&quot;alt&quot;:&quot;A hand-drawn loop showing the same task done three times. First pass: long arrow with corrections and explanations being filed into context, skills, and preferences. Second pass: shorter arrow, fewer corrections. Third pass: short clean arrow labeled done. A small caption reads: the first run is the investment.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn loop showing the same task done three times. First pass: long arrow with corrections and explanations being filed into context, skills, and preferences. Second pass: shorter arrow, fewer corrections. Third pass: short clean arrow labeled done. A small caption reads: the first run is the investment." title="A hand-drawn loop showing the same task done three times. First pass: long arrow with corrections and explanations being filed into context, skills, and preferences. Second pass: shorter arrow, fewer corrections. Third pass: short clean arrow labeled done. A small caption reads: the first run is the investment." srcset="https://substackcdn.com/image/fetch/$s_!plXG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!plXG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!plXG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!plXG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceac735-a77d-4938-90c8-7964d232c09c_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Sort files by how fast they change</h3><p>The organizing question surprised me. It isn&#8217;t &#8220;what topic does this belong to?&#8221; It&#8217;s &#8220;how fast does this change?&#8221; Everything in your work has a speed: your product&#8217;s positioning barely moves, a status summary lasts about a week, a ticket queue changes by the hour. <strong>File things by their speed, and stale can never masquerade as fresh.</strong> File them by topic, and old truth sits next to current truth, looking identical.</p><p><strong>The three folders in the workspace are the three speeds.</strong> The concrete habit: the next meeting note you take goes into <code>operations/</code> with the date in the filename, and the paragraph you keep retyping about your product goes into <code>context/product.md</code>. A note was true the day you wrote it, so the date travels in the filename where Claude reads it; the positioning paragraph is true until you change it, so it lives where every session can load it. Projects sit between the two speeds, which is why each project folder splits <code>tasks.md</code> from <code>brief.md</code>.</p><p>There&#8217;s a third speed, and you already own 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_!JdWA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JdWA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!JdWA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!JdWA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!JdWA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!JdWA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4509420,&quot;alt&quot;:&quot;A hand-drawn horizontal spectrum from &#8220;changes hourly&#8221; to &#8220;always true&#8221;. On the fast end, MCP connections fetching tickets, analytics, and Slack live. In the middle, dated files like meeting notes and status summaries. On the slow end, stable context files about the product, users, and strategy. A warning sits between zones: live data pasted into a stable file goes stale.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn horizontal spectrum from &#8220;changes hourly&#8221; to &#8220;always true&#8221;. On the fast end, MCP connections fetching tickets, analytics, and Slack live. In the middle, dated files like meeting notes and status summaries. On the slow end, stable context files about the product, users, and strategy. A warning sits between zones: live data pasted into a stable file goes stale." title="A hand-drawn horizontal spectrum from &#8220;changes hourly&#8221; to &#8220;always true&#8221;. On the fast end, MCP connections fetching tickets, analytics, and Slack live. In the middle, dated files like meeting notes and status summaries. On the slow end, stable context files about the product, users, and strategy. A warning sits between zones: live data pasted into a stable file goes stale." srcset="https://substackcdn.com/image/fetch/$s_!JdWA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!JdWA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!JdWA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!JdWA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371dc2ae-09f6-4852-93a2-bac3d2397dac_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>MCPs, those live connections from Step 4, sit at the fast end of the spectrum: they&#8217;re for what changes hourly. Files are for what changes slowly. <strong>If you&#8217;re pasting live data into a context file, an MCP should own it; if you&#8217;re re-fetching stable truth through an MCP every session, a file should own it.</strong> If you&#8217;ve used <a href="https://fortelabs.com/blog/para/">PARA</a>, Tiago Forte&#8217;s filing method, this rhymes with it, with one difference: PARA sorts by actionability, because a human&#8217;s failure mode is losing track of what to act on. <strong>This system sorts by rate of change, because an LLM&#8217;s failure mode is stale context confidently reused.</strong></p><h3>Let Claude keep the map</h3><p><code>CLAUDE.md</code> is the one file every session loads: the map that says who you are, what lives where, and the few rules that always apply. Here&#8217;s the honest practice: <strong>you almost never touch it by hand.</strong> If you&#8217;re organizing an existing folder rather than using the starter workspace, the <code>/init</code> command creates it for you: Claude scans the folder and writes the map itself. From then on, maintenance happens as a side effect: when you add a skill or a context file, Claude updates the map to match, and your job is just to say yes.</p><p>The one thing worth knowing is why the map stays small. It loads into every session, relevant or not, so every line spends a little of what Anthropic&#8217;s <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">context-engineering post</a> calls the &#8220;attention budget&#8221;; their <a href="https://code.claude.com/docs/en/memory">docs target</a> under 200 lines and warn that bloated files make Claude ignore your actual instructions. <strong>The map points, the files carry: knowledge lives in </strong><code>context/</code><strong>, loaded only when a task needs it.</strong> I wrote about this just-in-time principle in <a href="https://www.theaithinker.com/p/how-to-build-an-ai-helper-for-your">How to build an AI helper for your team with Cowork</a>; here, Claude applies it for you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_H1v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_H1v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!_H1v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!_H1v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!_H1v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!_H1v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4190139,&quot;alt&quot;:&quot;A hand-drawn split image. Left, crossed out: one giant manual page stuffed with every rule, preference, and product fact. Right: a small map page with three jobs listed, arrows pointing to separate labeled files for company, users, and projects, each loading only when needed.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn split image. Left, crossed out: one giant manual page stuffed with every rule, preference, and product fact. Right: a small map page with three jobs listed, arrows pointing to separate labeled files for company, users, and projects, each loading only when needed." title="A hand-drawn split image. Left, crossed out: one giant manual page stuffed with every rule, preference, and product fact. Right: a small map page with three jobs listed, arrows pointing to separate labeled files for company, users, and projects, each loading only when needed." srcset="https://substackcdn.com/image/fetch/$s_!_H1v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!_H1v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!_H1v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!_H1v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff016fbd8-81c1-4148-b510-a0828b0762f9_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Turn repeated work into skills</h3><p>I carried a doubt about this practice for months. My habit is to look at every recurring piece of work and ask whether it can become a skill, so I give the feedback once and never redo the work again. It felt productive, and I wasn&#8217;t sure it was right, because nothing written for product people says where skills end and files begin. <strong>The test that settled it: nouns go in files, verbs go in skills.</strong> What Claude needs to know is a noun: product facts, user segments, terminology, in <code>context/</code>. What Claude needs to do is a verb: draft, review, synthesize, each one a skill.</p><p>In practice, skills come from the closing move of the first practice: <strong>you finish a task, you&#8217;re satisfied, and you ask Claude to turn what you just did together into a skill.</strong> The workspace&#8217;s <code>status-update</code> skill shows what one looks like: where it reads from, what shape the output takes, what quality bar it checks. Steps, a quality bar, an output format: that&#8217;s what a skill encodes, and that&#8217;s why &#8220;the roadmap review prep&#8221; or &#8220;the churn digest&#8221; qualify while &#8220;that one weird escalation&#8221; doesn&#8217;t. If you want to build one from scratch instead, <a href="https://www.theaithinker.com/p/how-to-build-your-first-claude-code">How to build your first Claude Code skill</a> walks through it step by step.</p><p>The test also catches the two ways things end up in the wrong drawer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OW3z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OW3z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!OW3z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!OW3z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!OW3z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!OW3z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4528172,&quot;alt&quot;:&quot;A hand-drawn decision split. At the top, the question: is this something the assistant needs to know, or something it needs to do? The know branch leads to context files: product facts, user segments, terminology. The do branch leads to skills with steps, a quality bar, and an output format. Two mismatches are crossed out: a skill that only holds facts, and a procedure written as notes inside a context file.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn decision split. At the top, the question: is this something the assistant needs to know, or something it needs to do? The know branch leads to context files: product facts, user segments, terminology. The do branch leads to skills with steps, a quality bar, and an output format. Two mismatches are crossed out: a skill that only holds facts, and a procedure written as notes inside a context file." title="A hand-drawn decision split. At the top, the question: is this something the assistant needs to know, or something it needs to do? The know branch leads to context files: product facts, user segments, terminology. The do branch leads to skills with steps, a quality bar, and an output format. Two mismatches are crossed out: a skill that only holds facts, and a procedure written as notes inside a context file." srcset="https://substackcdn.com/image/fetch/$s_!OW3z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!OW3z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!OW3z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!OW3z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F268e2f75-4725-4aa2-a14a-c662c56538e4_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The first mismatch is a &#8220;skill&#8221; that&#8217;s really a fact bucket: product context wearing a skill&#8217;s clothes, never doing anything. That becomes a context file. The second is the reverse: a procedure written as notes inside <code>context/</code>, like a &#8220;how I run reviews&#8221; paragraph nobody can execute. <strong>A documented-but-not-executable procedure gets re-explained anyway, which defeats the whole point.</strong> That one becomes a skill. The know/do split is how documentation practice has organized itself for a decade (<a href="https://diataxis.fr/">Di&#225;taxis</a> formalizes it); skills just make the &#8220;do&#8221; side executable.</p><h3>File every correction once</h3><p>You know the moment. Claude drafts your status update, and you fix the same phrasing you&#8217;ve already fixed once. Here&#8217;s the reframe that changed my week-to-week: <strong>a correction made in chat is perishable; it&#8217;s gone when the session ends.</strong> The entire compounding return of the system comes from making corrections permanent, and this is where the practices stop being organization and start being learning.</p><p>The simplest version is the one to start with, and it&#8217;s the highest-return edit in this article. <strong>Open </strong><code>context/preferences.md</code><strong> and write three lines about how you write: sentence length, what your documents open with, the words you ban.</strong> From then on, every document Claude drafts comes out aligned with your writing preferences instead of sounding like a press release. That&#8217;s one correction, filed once, applied to everything that follows. The oldest entries in my own preferences file are corrections I have never had to give again.</p><p>For everything past that first edit, the workspace ships a skill that does the filing for you. When you catch yourself correcting something, run <code>/file-feedback</code>. It routes the correction with four questions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9FyG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9FyG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!9FyG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!9FyG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!9FyG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!9FyG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3893804,&quot;alt&quot;:&quot;A hand-drawn loop. A correction leaves a chat session and passes through a router asking four questions in a row. A one-off slip exits at the side as &#8220;let it go.&#8221; A missing fact flows to the context file. A wrong process flows into the skill. A taste issue flows to the preferences file with a note on why. From all three files, arrows loop back into every future session.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn loop. A correction leaves a chat session and passes through a router asking four questions in a row. A one-off slip exits at the side as &#8220;let it go.&#8221; A missing fact flows to the context file. A wrong process flows into the skill. A taste issue flows to the preferences file with a note on why. From all three files, arrows loop back into every future session." title="A hand-drawn loop. A correction leaves a chat session and passes through a router asking four questions in a row. A one-off slip exits at the side as &#8220;let it go.&#8221; A missing fact flows to the context file. A wrong process flows into the skill. A taste issue flows to the preferences file with a note on why. From all three files, arrows loop back into every future session." srcset="https://substackcdn.com/image/fetch/$s_!9FyG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!9FyG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!9FyG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!9FyG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ee23dae-3bd2-499b-99c0-a86de5b74490_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Was it a one-off slip? Let it go; not everything deserves a file. A missing fact? It goes to the matching context file or the project&#8217;s brief. A wrong process? The fix goes into the skill, so it runs correctly every time after. Taste? It becomes a preferences entry, and here&#8217;s the detail that matters: <strong>each entry gets a line on why and a line on how to apply it, so future sessions can judge edge cases instead of pattern-matching blindly.</strong></p><p>It turns out the vendor agrees, in almost the same words. Anthropic&#8217;s <a href="https://code.claude.com/docs/en/memory">memory docs</a> tell you to write things down when &#8220;Claude makes the same mistake a second time&#8221; or when &#8220;you type the same correction or clarification into chat that you typed last session.&#8221; The best-practices guide promises the payoff in one line: &#8220;The file compounds in value over time.&#8221; So here&#8217;s the version I&#8217;d put on a sticky note, and the line I&#8217;d hand your team: <strong>if you&#8217;ve said it twice, it belongs in a file.</strong></p><h3>Ask before you assume</h3><p>The last practice removes a blocker that sits in your head, not in your files. You&#8217;ll catch yourself assuming a thing is out of reach: too technical, too long, needs a tutorial, needs an engineer. <strong>The move is to ask Claude Code first and let the answer surprise you.</strong> I wanted to try <a href="https://aws.amazon.com/amplify/">AWS Amplify</a>, Amazon&#8217;s service for building and hosting apps, and my reflex was the old one: follow the guidelines, read the documentation, budget hours I didn&#8217;t have. Instead I pasted the documentation link into Claude Code and asked for two things: a working prototype to test the service, and a step-by-step guide written for someone non-technical. <strong>In one sitting I had something I could actually release, plus a guide I could follow and understand.</strong> The hours I had budgeted were never spent.</p><p>The same reflex applies at every scale, not just new tools. Before you summarize the forty-page research report yourself, ask. Before you assume the data question needs an analyst, ask. Before you check every intermediate step, give the whole task with the constraints and verify the result instead. <strong>The system you&#8217;ve built through the first five practices is exactly what makes asking cheap: </strong>the context is filed, the preferences are known, and a wrong answer costs you a correction, which the system then keeps. Six practices, one architecture. Here&#8217;s what it feels like on a normal workday.</p><div><hr></div><h2>Run your day through the workspace</h2><p>A day inside the system looks less like chatting and more like working with a very fast colleague who reads the files first.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XLdg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XLdg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!XLdg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!XLdg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!XLdg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!XLdg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4991560,&quot;alt&quot;:&quot;A hand-drawn timeline strip of a workday. Start: open the project folder where the task file says where things stand. During the day: short prompts naming the goal and pointing at files. End of session: a two-minute filing habit with three questions. Every so often: a fifteen-minute prune of stale content.&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://www.theaithinker.com/i/209361630?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn timeline strip of a workday. Start: open the project folder where the task file says where things stand. During the day: short prompts naming the goal and pointing at files. End of session: a two-minute filing habit with three questions. Every so often: a fifteen-minute prune of stale content." title="A hand-drawn timeline strip of a workday. Start: open the project folder where the task file says where things stand. During the day: short prompts naming the goal and pointing at files. End of session: a two-minute filing habit with three questions. Every so often: a fifteen-minute prune of stale content." srcset="https://substackcdn.com/image/fetch/$s_!XLdg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!XLdg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!XLdg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!XLdg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F228dde38-3b62-4bbd-a767-abe696a3426b_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Sessions start in the project folder, not a blank chat. I open the workspace in VS Code, launch <code>claude</code> in the terminal, and the map loads with every file path ready to use. The task file already says where things stand, what&#8217;s blocked, and what&#8217;s next, because the previous session updated it. My first prompt names the goal and points at files by name, and it stays short on purpose. <strong>Prompting shrinks as filing grows.</strong> A good prompt in this system has three parts: the goal in one sentence, the non-negotiable constraints, and what to verify before showing you. About a hundred words, often less. The steps live in skills, the background lives in files, and the prompt only has to steer. For bigger work I add one move: switch to plan mode with <code>Shift+Tab</code> and approve the plan before anything runs.</p><p>The habit that holds it all together takes two minutes at the end of a session, and the <code>file-feedback</code> skill carries most of it. Three questions: did I correct anything I&#8217;ve corrected before, did a new fact surface that isn&#8217;t filed anywhere, did a piece of work repeat again? <strong>Repeat corrections go through the router; repeated work gets nominated as the next skill.</strong> Skip the ceremony when the answer is three nos, which is most sessions.</p><p>Every dozen sessions or so, I spend fifteen minutes pruning, and I&#8217;d argue this is the least optional part. <strong>Stale context is worse than missing context.</strong> An expired competitor note or an outdated positioning line doesn&#8217;t look stale to Claude; it gets woven into new work with full confidence, and Anthropic&#8217;s <a href="https://code.claude.com/docs/en/best-practices">best-practices guide</a> carries a matching warning: when two rules contradict each other, Claude may pick one arbitrarily. So: date-stamp what&#8217;s dated, archive closed projects, delete anything you wouldn&#8217;t want quoted back to you in a draft. That&#8217;s the whole system, running. What&#8217;s left is to start it.</p><div><hr></div><h2>Let the workspace earn the rest</h2><p>What changed for me isn&#8217;t that Claude got smarter. It&#8217;s that I stopped having the same conversation twice. The company explanation I used to retype lives in <code>context/</code>. The feedback I used to repeat lives in skills and a preferences file. The projects pick up where they left off. <strong>The system&#8217;s real product is quiet:</strong> shorter prompts, fewer corrections, sessions that start in the middle of the work instead of at the beginning of my job description.</p><p>The shape travels well beyond product management. A discovery-heavy PM files interview syntheses as dated outputs and lets a skill do the synthesizing. A platform PM&#8217;s stable context is API consumers and versioning policy. A founder turns the investor update into a skill fed by a metrics file. A design lead files critique standards once instead of re-explaining them in every review. A data lead&#8217;s metric definitions become the context file every teammate&#8217;s sessions read. <strong>Different jobs, same three drawers, same habit.</strong></p><p>Start smaller than feels ambitious. Download the <a href="https://github.com/adamfaik/claude-code-pm-starter">starter workspace</a>, run the setup interview, and add those three lines about how you write. Then bring it your very next task, and the one after that. <strong>The next time you catch yourself telling Claude Code something for the second time, you&#8217;ll know exactly where it goes.</strong> And soon enough, you won&#8217;t remember the last time you said it.</p>]]></content:encoded></item><item><title><![CDATA[How to get better every week with AI]]></title><description><![CDATA[Paste a real transcript into any LLM. Ask it to review you, not the user. Debrief your hardest meetings. Automate the Friday retro with a skill.]]></description><link>https://www.theaithinker.com/p/how-to-get-better-every-week-with</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-get-better-every-week-with</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 03 Aug 2026 11:03:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/40da287e-177f-44e2-8bf6-73d761991673_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few years ago, at a previous company, I sat through a leadership training I&#8217;ve mostly forgotten. One idea survived. The most senior product leader in the room told us to end every week the same way: <strong>write yourself three or four honest lines about how the week went, and what you&#8217;d do differently on Monday.</strong> His pitch was simple math, borrowed from the idea James Clear made famous in <a href="https://jamesclear.com/atomic-habits">Atomic Habits</a>: <strong>get 1% better every week, and compounding does the rest.</strong> I&#8217;ve written that little Friday retro almost every week since, and it works.</p><p>For years, though, the habit had a flaw I couldn&#8217;t see. <strong>The reviewer was me.</strong> My memory of the week is a friendly narrator: it remembers the demo that landed, and it quietly forgets the question I dodged in a tense meeting. Every Friday I graded my own homework, and every Friday I passed. <strong>A retro written from memory is a review of the week you&#8217;d like to have had.</strong> Better than nothing, but it plateaus fast.</p><p>Then one afternoon I pasted the verbatim transcript of a user interview I&#8217;d just run into Claude. Not to summarize it (I do that all the time). <strong>I asked it to review my interviewing:</strong> how I phrased questions, what I missed, how much I talked. It found three leading questions in my first ten minutes and quoted them back word for word. <strong>Nobody had reviewed my work at that level of detail in years.</strong></p><p>Everyone I know uses AI to do the work: draft the spec, summarize the research, write the update. <strong>Almost nobody uses it to review how they work.</strong> The first use saves you hours this week. <strong>The second one compounds, because it makes every next interview, meeting, and decision slightly better than the last.</strong> That&#8217;s the 1% from the training, and AI finally makes it cheap to collect.</p><p>The whole practice fits in one picture.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kqDk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kqDk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!kqDk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!kqDk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!kqDk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kqDk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.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;:4097874,&quot;alt&quot;:&quot;Hand-drawn infographic with four stops: the feedback gap nobody fills for senior people (and why the feedback that does arrive is distorted), AI feedback loops on your own work (three worked examples plus a catalog of more), five mechanics that keep the critique honest, and two skills that bring the practice to a team.&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://www.theaithinker.com/i/206900621?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn infographic with four stops: the feedback gap nobody fills for senior people (and why the feedback that does arrive is distorted), AI feedback loops on your own work (three worked examples plus a catalog of more), five mechanics that keep the critique honest, and two skills that bring the practice to a team." title="Hand-drawn infographic with four stops: the feedback gap nobody fills for senior people (and why the feedback that does arrive is distorted), AI feedback loops on your own work (three worked examples plus a catalog of more), five mechanics that keep the critique honest, and two skills that bring the practice to a team." srcset="https://substackcdn.com/image/fetch/$s_!kqDk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!kqDk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!kqDk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!kqDk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfedf25-5d41-449f-b523-44eac004dc01_2752x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>The gap.</strong> I&#8217;ll show you why nobody reviews your actual craft anymore, and why the feedback you do get says more about the giver than about you.</p></li><li><p><strong>The loops.</strong> The three I run (interviews, meetings, the Friday retro) with the exact prompts I use, plus six more worth trying, from your forecasts to your 360 packet.</p></li><li><p><strong>The honesty problem.</strong> Here&#8217;s how to stop the model from flattering you, because by default it will.</p></li><li><p><strong>The team angle.</strong> You&#8217;ll build a skill that asks your PMs your own 1:1 questions before they ever reach you.</p></li></ul><p>By Friday you can have run your first loop on a real artifact from your own week. <strong>You get the kind of specific, evidence-quoting feedback nobody has given you since you got senior, and you can get it every single week.</strong> The first loop needs nothing new: any LLM chat works (Claude, ChatGPT, Gemini), and the raw material is the transcripts your meeting tools already produce (Zoom AI Companion, Gemini in Google Meet, Granola, or a voice memo on your phone). And if you lead PMs, you&#8217;ll leave with two skills worth an afternoon each: one that reviews your week on a schedule, one that preps your team for 1:1s.</p><p><strong>Your reviewer is ready.</strong> Let&#8217;s put it to work.</p><div><hr></div><h2>Nobody reviews your work anymore</h2><p>Think about the last time someone watched you work and told you something true about it. Not your outcomes: your craft. The way you ran the interview, the way you handled pushback in the room. <strong>If you lead product teams, the honest answer is probably &#8220;years ago.&#8221;</strong> Your manager sees headlines and results, not how you got them. Your team won&#8217;t critique you upward. <strong>The more senior you get, the less anyone reviews how you actually work.</strong> What&#8217;s left is the official cycle: twice a year, compressed into themes like &#8220;communicate more.&#8221;</p><p>And hold even that loosely. In <a href="https://hbr.org/2019/03/the-feedback-fallacy">The Feedback Fallacy</a> (Harvard Business Review, 2019), Marcus Buckingham and Ashley Goodall assembled the research on how well humans rate other humans. The headline finding has a name, the idiosyncratic rater effect: <strong>more than half of any rating of you reflects the rater, not you, and no amount of training fixes it.</strong> In their words, <strong>feedback is &#8220;more distortion than truth.&#8221;</strong> Your manager&#8217;s read on your &#8220;communication&#8221; says as much about their definition of communication as about yours, and that stays true for the best managers you&#8217;ll ever have. <strong>The little feedback that reaches you arrives filtered through someone else&#8217;s lens, and the research says the filter is most of the signal.</strong> Not a reason to dismiss your manager. A reason not to make two filtered data points a year your only mirror.</p><p>Performance-heavy fields treat this as a solved problem. Athletes and musicians review tape after every game and every recital. Atul Gawande wrote the canonical essay on this, <a href="https://www.newyorker.com/magazine/2011/10/03/personal-best">Personal Best</a> (2011): a surgeon at the top of his field plateaued after eight years, then started improving again when he put a reviewer back in his operating room. The research on expertise agrees. Anders Ericsson&#8217;s work on deliberate practice (<a href="https://www.goodreads.com/en/book/show/26312997-peak">Peak</a>, 2016) found that experience without feedback doesn&#8217;t accumulate into skill; it plateaus. <strong>Twenty years of interviews don&#8217;t make you better at interviewing if nobody ever shows you what you did.</strong></p><p>What changed isn&#8217;t the theory. It&#8217;s the tape. <strong>Your meeting tools record by default now:</strong> Zoom AI Companion, Gemini in Google Meet, Granola quietly taking notes on your laptop. Verbatim records of you working have been piling up in your drive for a couple of years. We skim the summaries for action items and move on. <strong>The evidence of how you work is exhaust of a normal week, and almost nobody reads it in the review direction.</strong></p><p>One precision before you touch that pile. The AI notes your tools generate are summaries, and a summary is already the friendly narrator&#8217;s cut, machine-made this time. <strong>The loop needs the verbatim transcript.</strong> In Google Meet, that&#8217;s the separate &#8220;Transcripts&#8221; option, not the Gemini notes doc. In Zoom, it&#8217;s the transcript file attached to the recording. Granola keeps the full conversation one click behind its polished notes. <strong>Feed the model what was actually said, not what the notes decided to remember.</strong></p><p>And the reviewer for all that unread tape? You already have it. You&#8217;ve just been pointing it the other way.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sN1m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sN1m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!sN1m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!sN1m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!sN1m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!sN1m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.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;:4551435,&quot;alt&quot;:&quot;Two-panel hand-drawn comparison. Left: a person hands the AI a task and receives a draft, arrow pointing outward (production engine). Right: the same person hands the AI a transcript of their own meeting and receives a critique, arrow pointing back at them (feedback engine).&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://www.theaithinker.com/i/206900621?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Two-panel hand-drawn comparison. Left: a person hands the AI a task and receives a draft, arrow pointing outward (production engine). Right: the same person hands the AI a transcript of their own meeting and receives a critique, arrow pointing back at them (feedback engine)." title="Two-panel hand-drawn comparison. Left: a person hands the AI a task and receives a draft, arrow pointing outward (production engine). Right: the same person hands the AI a transcript of their own meeting and receives a critique, arrow pointing back at them (feedback engine)." srcset="https://substackcdn.com/image/fetch/$s_!sN1m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!sN1m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!sN1m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!sN1m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73e3d9bd-7372-4b25-8835-ec08568e7d63_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You already run AI as a production engine. It drafts the spec, summarizes the research, writes the launch note. Point the same model at a transcript of how you worked, and it becomes a feedback engine. Same tool, opposite direction. In that direction <strong>it has qualities no human reviewer can offer:</strong> the patience to re-read your entire week verbatim, no stake in your ego, and availability at 6 pm on a Friday. <strong>The only reviewer with time to watch all your tape has been sitting in your browser tab all along.</strong></p><p>The direction flip is the whole method. Here&#8217;s what it looks like on a real week.</p><div><hr></div><h2>Start with my three loops</h2><p>I run three loops on my own weeks, and they share one shape. Take a verbatim artifact your week already produced. Ask the model to review how you worked, not what was decided. Extract one change for next time. Write that change down. <strong>The artifact does the honesty, the model does the patience, and the written line makes it stick.</strong> Here&#8217;s the shape before the 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_!j5b8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j5b8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!j5b8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!j5b8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!j5b8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!j5b8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.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;:4723445,&quot;alt&quot;:&quot;Hand-drawn circular flow with four stations: a real artifact from the week (a transcript), an AI critique quoting exact lines, one concrete change picked for next time, and a short written Friday retro that feeds the next week.&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://www.theaithinker.com/i/206900621?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn circular flow with four stations: a real artifact from the week (a transcript), an AI critique quoting exact lines, one concrete change picked for next time, and a short written Friday retro that feeds the next week." title="Hand-drawn circular flow with four stations: a real artifact from the week (a transcript), an AI critique quoting exact lines, one concrete change picked for next time, and a short written Friday retro that feeds the next week." srcset="https://substackcdn.com/image/fetch/$s_!j5b8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!j5b8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!j5b8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!j5b8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadeea69c-6a13-4746-9128-b7cc944a2a16_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Three isn&#8217;t a magic number, and my three aren&#8217;t the menu. They&#8217;re worked examples, mapped to where my own weeks leave a record: user interviews, hard meetings, and the week itself. <strong>Treat them as illustrations of the shape, not the full list; your calendar will suggest loops mine can&#8217;t.</strong> A catalog of other places to point the same shape comes right after these three.</p><h3>Loop 1: Review your interviews</h3><p>After a user interview, I copy the full transcript into the LLM and ask it to review the interviewer. Not the user&#8217;s answers, not a summary of insights: me. The phrasing of my questions, the follow-ups I didn&#8217;t ask, how much of the conversation was my own voice. The distinction matters because &#8220;summarize this interview&#8221; is production work, and every PM already does it. <strong>&#8221;Review how I ran this interview&#8221; is feedback work, and it&#8217;s the version almost nobody asks for.</strong></p><p>Here&#8217;s the prompt I use, lightly cleaned up. Yours will look different; the load-bearing parts are the named rubric and the quoted evidence.</p><blockquote><p>Here is the verbatim transcript of a user interview I ran today. Review the interviewer (me), not the user. <strong>Grade me against The Mom Test&#8217;s three rules:</strong> talk about their life, not my idea; ask about specifics in the past, not hypotheticals about the future; talk less, listen more. <strong>For every finding, quote the exact line from the transcript.</strong> List every question I asked, label each one open or closed, then tally the list. End with the one change that would most improve my next interview.</p></blockquote><p>The rubric is <a href="https://www.momtestbook.com/">The Mom Test</a>, Rob Fitzpatrick&#8217;s 2013 book on customer conversations, and spelling its rules out inside the prompt matters. The critique works even if you (or the model) never opened the book, and you learn the rubric by reading your own violations of it. And the leading questions were only the loudest finding. The same session flagged the moment a user mentioned a workaround and I moved on instead of digging. It listed my questions, and over half were closed. <strong>None of that was in my notes, because my notes were about the user.</strong></p><p>The critique is the start, not the verdict. I discuss it, and the discussion is where the learning happens. The rule I follow: seek evidence, don&#8217;t argue. &#8220;Show me the line&#8221; is a safe question. &#8220;Rewrite that question the way I should have asked it&#8221; is a great one. Protesting (&#8221;I don&#8217;t think that was leading&#8221;) is the one move to avoid, because models tend to fold when you push back, and a critique that folds is worthless. <strong>Treat the chat like a film session with a coach, not a negotiation over your grade.</strong></p><p>Interviews are the easiest tape to start with: low stakes, famous rubric, fast wins. The harder tape is the meeting where you had something to lose.</p><h3>Loop 2: Debrief your hard meetings</h3><p>Some meetings matter more than others. The technical review where the architecture pushback derailed your agenda. The leadership meeting where your update ran long and the ask got lost. Your calendar is full of them, and that&#8217;s not the failure it&#8217;s usually made out to be: meetings are where product work happens. <strong>Spending most of your week in meetings isn&#8217;t the problem. Letting them end with nothing actionable is.</strong></p><p>I used to replay the hard ones in my head on the way home, which felt like reflection but was really just rumination. Now I feed the transcript (or my detailed notes, when there&#8217;s no recording) to the LLM and ask for a debrief of my own performance. <strong>How I presented, where I lost the room, how I handled the pushback, what to change next time.</strong> The hours were already spent; the debrief is how they pay something back.</p><p>This move has a precedent you already practice at the team level. Product teams close every sprint with a retrospective: what went well, what didn&#8217;t, what changes next time, run by the team, for the team. Norman Kerth, who wrote the practice&#8217;s handbook (<a href="https://www.goodreads.com/book/show/1523368.Project_Retrospectives">Project Retrospectives</a>, 2001), even gave it a safety rule, the Prime Directive: <strong>whatever we discover, everyone did the best they could with what they knew at the time.</strong> Yet the ritual usually stops at the team boundary, and nobody runs one on their own performance in a single meeting. <strong>A meeting debrief is a one-person retrospective, and AI makes it cheap enough to run after every meeting that matters.</strong> The prompt is shorter than the interview one, because there&#8217;s no famous rubric for meetings. I anchor it on my goal instead.</p><blockquote><p>Here is the transcript of a technical review I ran today. My goal was alignment on shipping the migration in two releases instead of one. <strong>Review my performance, not the decisions:</strong> how I opened, how I responded to pushback, where I talked past someone, where I lost the thread. <strong>Quote the line for every finding.</strong> Then give me the strongest case that this meeting went badly for me. End with what I should do differently in my next meeting with this group.</p></blockquote><p>The debrief pays out twice. Once right after the meeting, when it shows you the exact moment you started answering a different question than the one asked. And once before the next meeting, when you reopen the same chat and prep: same audience next month, help me open differently, here&#8217;s what I&#8217;m walking in with. One honest limit from experience: this loop needs an artifact. <strong>Hallway conversations leave no tape, and a debrief of your own recollection is the friendly narrator reviewing itself.</strong></p><p>Interviews and meetings are single events. The third loop is what strings them into actual improvement.</p><h3>Loop 3: Review the whole week</h3><p>This is the original habit from that training, and it&#8217;s still the anchor of everything above. Every Friday, three or four honest lines: what went well, what didn&#8217;t, what changes on Monday. Five minutes, no template, one running file. The one-change outputs from the interview and meeting loops land here as lines. <strong>Without the written close, the critiques evaporate by Tuesday.</strong></p><p>But run the first two loops for a few weeks and you meet their limit: they only cover the events you picked. A product week is fifteen meetings, and you reviewed two. Nobody has the hours to chat-review a whole week one transcript at a time, and pasting fifteen transcripts into one window isn&#8217;t a workflow, it&#8217;s a punishment. <strong>The weekly review doesn&#8217;t need a better prompt. It needs to become a system.</strong> Same folder of inputs, same rubrics, same output format, every single week: <strong>that&#8217;s not a conversation, that&#8217;s a job.</strong> And a repeated job with fixed rules is exactly what Claude&#8217;s skills are built for: a skill is a folder with an instructions file that teaches Claude a task once, so it can run it every time after.</p><p>Here&#8217;s the shape of the system to build, and it&#8217;s smaller than it sounds.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N6pY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N6pY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!N6pY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!N6pY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!N6pY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!N6pY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:516805,&quot;alt&quot;:&quot;Hand-drawn flow of an automated weekly review system: a folder collecting the week&#8217;s meeting transcripts feeds a skill loaded with review rubrics, which produces a drafted retro with quoted evidence, appended to a running retro file, triggered by a Friday schedule.&quot;,&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://www.theaithinker.com/i/206900621?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn flow of an automated weekly review system: a folder collecting the week&#8217;s meeting transcripts feeds a skill loaded with review rubrics, which produces a drafted retro with quoted evidence, appended to a running retro file, triggered by a Friday schedule." title="Hand-drawn flow of an automated weekly review system: a folder collecting the week&#8217;s meeting transcripts feeds a skill loaded with review rubrics, which produces a drafted retro with quoted evidence, appended to a running retro file, triggered by a Friday schedule." srcset="https://substackcdn.com/image/fetch/$s_!N6pY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!N6pY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!N6pY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!N6pY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F811afa6b-9202-4700-95f9-33b44a08b8d4_1376x768.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The skill&#8217;s instructions fit on one page:</strong> read every transcript in this week&#8217;s folder, review my performance in each one against my rubrics (The Mom Test rules for interviews, my stated goal for everything else), quote the line for every finding, then draft my three-or-four-line retro and append it to the running file.</p><p>Collecting the folder is lighter than it sounds. Zoom transcripts download as text files, Google Meet saves them as Docs in a Drive folder, and Granola keeps the full conversations behind its notes. <strong>And scale is where the review gets interesting: a reviewer that reads all fifteen meetings can tell you the same tic showed up in four of them, which no single-meeting debrief will ever surface.</strong> If you&#8217;ve never built a skill, it&#8217;s an afternoon, not a project: I walked through the full method in <a href="https://www.theaithinker.com/p/how-to-build-an-ai-helper-for-your">How to build an AI helper for your team with Cowork</a>, and the same steps apply here with a different instructions page.</p><p>Then remove the last manual step. <strong>Claude Cowork now supports <a href="https://support.claude.com/en/articles/13854387-schedule-recurring-tasks-in-claude-cowork">scheduled tasks</a>:</strong> set the skill to run every Friday afternoon and it executes remotely, even with your laptop closed. You open the draft with your coffee, check the quoted lines, and spend your five minutes editing instead of reconstructing. <strong>The honest writing stays yours; the system makes sure it starts from evidence instead of memory, at the scale of your whole week.</strong></p><p>Now, about that 1% pitch. Clear&#8217;s canonical version is 1% per day, which compounds to 37x in a year. The training I got was humbler: 1% per week, which works out to about 68% better over a year (1.01^52 is 1.68, if you want to check the math). Treat both as the spirit of the practice, not a forecast. Skill isn&#8217;t a number, and nobody can measure 1% of interviewing. The idea&#8217;s lineage runs through British Cycling&#8217;s &#8221;<a href="https://jamesclear.com/marginal-gains">aggregation of marginal gains</a>&#8221;, but the version that changed my weeks came from a trainer with a marker and a flipchart. <strong>Small weekly changes stack, and a written retro is what keeps them from resetting to zero.</strong></p><p>Three loops, one of them running itself. But the shape doesn&#8217;t stop where my calendar does.</p><div><hr></div><h2>More loops to try</h2><p>Once you see the shape (artifact in, critique against a standard, one change out), you start spotting loops everywhere. I went looking for the ones with the strongest cases behind them, and this is the shortlist I&#8217;m working through next. <strong>If a week of your work leaves an artifact, there&#8217;s a loop that can read it.</strong></p><ul><li><p><strong>The decision journal.</strong> When Michael Mauboussin asked Daniel Kahneman what single thing would most improve decision-making, the answer was <a href="https://fs.blog/how-to-improve-the-quality-of-our-decision-making/">a cheap notebook</a>: <strong>write down each big decision and what you expect to happen.</strong> Months later, the LLM grades your calibration against outcomes: &#8220;you were overconfident on every timeline that depended on another team.&#8221;</p></li><li><p><strong>The forecast scorecard.</strong> Philip Tetlock&#8217;s <a href="https://www.goodreads.com/book/show/23995360-superforecasting">Superforecasting</a> is blunt about how forecasters improve: &#8220;Forecast, measure, revise: it is the surest path to seeing better.&#8221; Put numbers on your own calls (&#8221;70% we ship by March&#8221;), then ask the model each quarter where your numbers run hot.</p></li><li><p><strong>The spec-versus-shipped review.</strong> Feed January&#8217;s PRD and June&#8217;s launch numbers into one chat and run a retrospective on the pair: what was supposed to happen, what happened, why, and what changes next time. The gap between those two documents is feedback nobody schedules a meeting for.</p></li><li><p><strong>The rehearsal review.</strong> Toastmasters assigns a dedicated person, the <a href="https://www.toastmasters.org/membership/club-meeting-roles/ah-counter">Ah-Counter</a>, just to count filler words. Record one run-through of your next big presentation, and the model plays that role free, then tells you how many minutes pass before your headline number shows up.</p></li><li><p><strong>The hidden-ask audit.</strong> Paste a week of your sent emails and Slack requests and ask which sentence carries the actual ask. Consultants are trained on <a href="https://www.mckinsey.com/alumni/news-and-events/global-news/alumni-news/barbara-minto-mece-i-invented-it-so-i-get-to-say-how-to-pronounce-it">Barbara Minto&#8217;s Pyramid Principle</a>, answer first and reasoning after; most of us put the answer somewhere in paragraph three.</p></li><li><p><strong>The 360 synthesis.</strong> Paste every review packet you&#8217;ve received and ask what three or more people said independently. Any single rating is mostly rater (that&#8217;s the idiosyncratic rater effect again), but a theme that survives five raters and three years is genuinely yours.</p></li></ul><p>Whichever loops you pick, they all lean on one fragile assumption: that the reviewer tells you the truth. By default, it won&#8217;t. The model is trained to be nice to you.</p><div><hr></div><h2>Make the critique honest</h2><p>&#8220;The LLM just flatters me.&#8221; If that&#8217;s your objection, you&#8217;re right, and it deserves a serious answer. <strong>Sycophancy is a documented, trained-in behavior of assistant models across vendors,</strong> not a paranoid suspicion. <a href="https://arxiv.org/abs/2310.13548">Anthropic researchers showed</a> that state-of-the-art assistants are consistently sycophantic, likely because <strong>human preference data rewards agreement</strong> (Sharma et al., published at ICLR 2024). You&#8217;ve probably felt it yourself: in April 2025, ChatGPT got so flattering that <a href="https://openai.com/index/sycophancy-in-gpt-4o/">OpenAI rolled the model back</a> within days. Ask a naive &#8220;how did I do?&#8221; and you&#8217;ll get praise plus three soft suggestions. <strong>By default, the model is a cheerleader wearing a reviewer&#8217;s badge.</strong></p><p>The fix isn&#8217;t finding a more honest model. It&#8217;s writing prompts that leave no room for flattery. Five mechanics do that work for me.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!myvH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!myvH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!myvH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!myvH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!myvH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!myvH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.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;:4839086,&quot;alt&quot;:&quot;Hand-drawn card with five mechanics for honest AI critique: give it the verbatim transcript, name a rubric, demand a quoted line per finding, make it list before counting, and ask it to argue the case that things went badly.&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://www.theaithinker.com/i/206900621?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn card with five mechanics for honest AI critique: give it the verbatim transcript, name a rubric, demand a quoted line per finding, make it list before counting, and ask it to argue the case that things went badly." title="Hand-drawn card with five mechanics for honest AI critique: give it the verbatim transcript, name a rubric, demand a quoted line per finding, make it list before counting, and ask it to argue the case that things went badly." srcset="https://substackcdn.com/image/fetch/$s_!myvH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!myvH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!myvH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!myvH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F500a2cbb-26de-45fd-848d-547598e1ccbb_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p><strong>Give it the artifact, never your self-report.</strong> The model can&#8217;t flatter its way past a transcript, but it will happily flatter its way through your own account of the meeting. You already know which narrator wrote that one. Asking about yourself is the worst case: <a href="https://arxiv.org/abs/2505.13995">one 2025 study</a> found LLMs preserve the asker&#8217;s self-image far more than human advisers do. The tape is your protection.</p></li><li><p><strong>Name a rubric.</strong> &#8220;Grade this against The Mom Test&#8221; beats &#8220;was this good?&#8221; every time. A named standard gives the model permission to find faults and a scale to grade on. No famous rubric for your artifact? State your goal for the meeting and let that be the standard.</p></li><li><p><strong>Require quoted evidence.</strong> Every finding must cite the exact line. This converts vague praise into checkable findings, and it screens out invented criticism too. The same rule governs the discussion afterward: ask &#8220;show me the line,&#8221; never argue &#8220;I don&#8217;t think that was leading.&#8221; The same Anthropic research found assistants wrongly walk back correct answers when users express doubt. <strong>Evidence-seeking keeps the critique standing; arguing makes it fold.</strong></p></li><li><p><strong>Ask for counts, but make it list first.</strong> Talk ratio, open versus closed questions, minutes before the first real question. Useful numbers, and a known weak spot: a one-shot count is an estimate wearing a number&#8217;s costume. So make the model quote every question, label each one, then tally the list. The list is checkable against the tape, and the tally of a list is reliable.</p></li><li><p><strong>Make it argue the prosecution.</strong> &#8220;Give me the strongest case that this interview went badly.&#8221; The model is excellent at arguing a side when you tell it which side to argue. Flattery has nowhere to hide in a prosecution brief.</p></li></ol><p>One more objection deserves a straight answer, because legal will raise it before you do. <strong>Transcripts carry other people&#8217;s words.</strong> User interviews sit under whatever consent your research process already runs, so check that first. The load-bearing rule is the workspace: run the loop inside your company&#8217;s approved AI workspace, the same environment where your meeting tool already stores the recording (hand-anonymizing a 40-minute conversation is fiction, so don&#8217;t build your compliance on it). Strip names where it&#8217;s quick to do. <strong>And keep other people&#8217;s performance out of scope: the loop reviews you, not your colleagues.</strong></p><p>Honest critique, ten minutes a week, grounded in what was actually said. The last move turns a personal practice into a leadership one.</p><div><hr></div><h2>Bring it to your team</h2><p>Everything so far works for one person: you. But if you manage PMs, you&#8217;re also the person whose questions and standards your team is trying to guess at. The manager&#8217;s version of the practice has three moves: <strong>model it yourself, build it into a tool your team owns, and keep your hands off their critiques.</strong></p><h3>Show your own findings first</h3><p>You don&#8217;t roll this out with a deck. The practice spreads in an embarrassingly simple way: <strong>you talk about your own findings first.</strong> In your next team meeting, mention what your review found. &#8220;It went through Tuesday&#8217;s interview and I did 40% of the talking. I&#8217;m working on it.&#8221; That sentence costs you thirty seconds of vulnerability and buys the whole room permission. <strong>Naming your own findings first is what makes the practice safe to copy.</strong></p><h3>Build the 1:1 prep skill</h3><p>Then give the practice a tool. <strong>Every manager carries a mental list of the questions they always ask in a 1:1.</strong> What moved the metric this week? What&#8217;s the impact of the thing you shipped? What&#8217;s next, and what&#8217;s blocking it? Your team knows the list exists, but they only meet it one meeting at a time, live, when it&#8217;s too late to prepare. <strong>Put that list into a skill, and your questions become something your team can use instead of something they sit through.</strong> The skill&#8217;s context page holds three things: the company&#8217;s OKRs, the metrics your team owns, and your standing questions.</p><p>Here&#8217;s how it runs once it exists.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kud2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kud2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!Kud2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!Kud2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!Kud2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kud2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1155578,&quot;alt&quot;:&quot;Hand-drawn flow of a 1:1 prep skill: a context page holding company OKRs, team metrics, and the manager&#8217;s standing questions feeds a skill; a PM runs their weekly update through it before the 1:1 and arrives prepared; after each 1:1 the manager adds any new question to the context page, improving the loop.&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://www.theaithinker.com/i/206900621?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn flow of a 1:1 prep skill: a context page holding company OKRs, team metrics, and the manager&#8217;s standing questions feeds a skill; a PM runs their weekly update through it before the 1:1 and arrives prepared; after each 1:1 the manager adds any new question to the context page, improving the loop." title="Hand-drawn flow of a 1:1 prep skill: a context page holding company OKRs, team metrics, and the manager&#8217;s standing questions feeds a skill; a PM runs their weekly update through it before the 1:1 and arrives prepared; after each 1:1 the manager adds any new question to the context page, improving the loop." srcset="https://substackcdn.com/image/fetch/$s_!Kud2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!Kud2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!Kud2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!Kud2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476f1320-9f10-4714-b612-306a9d3a85e7_1376x768.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A PM runs their weekly update through the skill before your 1:1. It asks your questions before you do, checks the update against the real OKRs, and flags what&#8217;s thin: an impact claim with no number, a next step with no owner. They arrive having already answered the routine layer, on their own terms, with no audience. <strong>And the skill improves the same way you do: every time you catch yourself asking a question it missed, add it to the context page after the 1:1.</strong> I&#8217;ve built this exact shape before for AI-tooling questions, and <a href="https://www.theaithinker.com/p/how-to-build-an-ai-helper-for-your">the full walkthrough</a> carries over here: same build, different context page.</p><p>Be honest with the team about what it&#8217;s for. <strong>The skill will never replace the conversation; it changes where the conversation starts.</strong> The routine questions get handled before the meeting, so the meeting spends its thirty minutes on what actually needs two humans: the trade-off they&#8217;re unsure about, the stakeholder they can&#8217;t read, the call that needs your judgment.</p><h3>Keep the loop theirs</h3><p>Hand over the loop, not a verdict. For the PM whose interviews keep coming back thin, the move isn&#8217;t &#8220;your interviews are weak.&#8221; It&#8217;s &#8220;run your next transcript through this prompt before our 1:1, and bring what surprised you.&#8221; The critique stays theirs. You never read their review; <strong>you only ever see the change they choose to make.</strong> That&#8217;s the oldest rule of the retrospective, the one Kerth wrote his Prime Directive to protect: <strong>the review belongs to the people who did the work, not to an evaluator.</strong> The moment you ask to see their critiques, the practice turns into surveillance, and people quietly stop running it.</p><p>What shifts is the shape of your 1:1s. You were never going to give transcript-level feedback to six PMs; there aren&#8217;t enough hours in your week, and there never were. Now that feedback exists without you. The conversation moves from &#8220;here&#8217;s what I think you did wrong&#8221; to &#8220;what did your review find, and what are you changing?&#8221; <strong>You stop being the bottleneck on your team&#8217;s craft feedback without becoming absent from it.</strong> You coach the change instead of hunting for the evidence.</p><p>And if you keep one line from all this, keep this one: <strong>you get a performance review twice a year; your transcripts can give you one every Friday.</strong> It works in a 1:1 with the PM who wants to grow faster. It works on your own tape, this week.</p><div><hr></div><h2>Start this Friday</h2><p>You don&#8217;t need a new tool, a habit system, or anyone&#8217;s permission. You need one artifact from this week and ten minutes on Friday. Pick the tape where you already suspect the truth lives.</p><ul><li><p><strong>Your last user interview.</strong> Start here if you run any: the rubric is famous and the wins come fast.</p></li><li><p><strong>The meeting that went sideways.</strong> The transcript is already in your drive. Ask for the debrief you&#8217;ve been replaying in your head anyway.</p></li><li><p><strong>Your old retros, if you keep any.</strong> Paste the last two months and ask for the pattern you keep repeating.</p></li><li><p><strong>A decision you&#8217;re about to make.</strong> Open the journal with one dated entry: what you decided, what you expect to happen. Future you collects the feedback.</p></li></ul><p>The training that started this for me lasted one day, and I&#8217;ve forgotten almost all of it. The habit it left keeps compounding. That&#8217;s the honest promise of this whole practice: no transformation by Friday, just next-quarter you asking better questions, running tighter meetings, and knowing exactly what you&#8217;re working on. <strong>Start with one transcript. The 1% is already in there.</strong></p>]]></content:encoded></item><item><title><![CDATA[How to answer ethical concerns about AI]]></title><description><![CDATA[Listen to the strongest version of the concern. Sort it into one of four kinds. Concede what&#8217;s true, fix what you control, correct what&#8217;s mistaken, respect what&#8217;s a value.]]></description><link>https://www.theaithinker.com/p/how-to-answer-ethical-concerns-about</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-answer-ethical-concerns-about</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Sun, 26 Jul 2026 23:00:46 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/aa0b85cd-1226-4f86-af53-9234de9ced1a_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every time I talk about AI with someone, the conversation ends up in the same place. Not on models. Not on prompts. <strong>On ethics.</strong> Someone says the data centers are draining water tables. Someone says the training data was scraped from people who never agreed. Someone says they became a designer to design, not to review a machine&#8217;s output. <strong>The objections that stick aren&#8217;t about capability anymore, they&#8217;re about conscience.</strong></p><p>In early 2025, I watched a French designers&#8217; collective called Designers &#201;thiques lay out every one of these objections in <a href="https://peertube.designersethiques.org/w/jhHv5GLE5iV5ccYgs8rWe9">one 40-minute talk</a>. It&#8217;s stayed with me since. Not because it was contrarian, but because it wasn&#8217;t. These were rigorous professionals making the strongest version of the case: an eco-design specialist, a design researcher, an ergonomist. No trolling, no panic. <strong>It&#8217;s the sharpest compact map I&#8217;ve found of what your own team members are thinking and mostly not saying in the meeting.</strong></p><p>If you&#8217;re leading a team through an AI transition, you&#8217;ve met these objections too. Maybe in a retro, maybe in a 1:1, maybe as a silence that never turns into usage. And you&#8217;ve probably been handed exactly one playbook for them: overcome the resistance. I think that playbook is wrong. <strong>Your skeptics are mostly raising real problems, and the fastest way to lose them is to debate.</strong></p><p>The better move: <strong>sort each concern into one of four kinds.</strong> Some are true, and you change what you adopt. Some are risks you control, and you change how you adopt. A few are misconceptions, and you correct them with evidence instead of marketing. One or two are values, and you respect them. <strong>The payoff isn&#8217;t a converted team. It&#8217;s AI use your team can defend out loud.</strong></p><p>The playbook, at a glance:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bjst!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bjst!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!bjst!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!bjst!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!bjst!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bjst!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4010625,&quot;alt&quot;:&quot;Alt: A hand-drawn infographic showing a path with four stops. Stop 1, the trap: a manager wins an argument while the team checks out. Stop 2, the sort: concerns sorted into four kinds (true, controllable risk, misconception, value). Stop 3, the map: seven concerns answered one by one (the planet, the people behind the data, the craft, the thinking muscle, consent at work, the jobs, untrusted output). Stop 4, the practice: a short team charter saying where AI is in, where it&#8217;s out by default, and who owns decisions.&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://www.theaithinker.com/i/206698831?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Alt: A hand-drawn infographic showing a path with four stops. Stop 1, the trap: a manager wins an argument while the team checks out. Stop 2, the sort: concerns sorted into four kinds (true, controllable risk, misconception, value). Stop 3, the map: seven concerns answered one by one (the planet, the people behind the data, the craft, the thinking muscle, consent at work, the jobs, untrusted output). Stop 4, the practice: a short team charter saying where AI is in, where it&#8217;s out by default, and who owns decisions." title="Alt: A hand-drawn infographic showing a path with four stops. Stop 1, the trap: a manager wins an argument while the team checks out. Stop 2, the sort: concerns sorted into four kinds (true, controllable risk, misconception, value). Stop 3, the map: seven concerns answered one by one (the planet, the people behind the data, the craft, the thinking muscle, consent at work, the jobs, untrusted output). Stop 4, the practice: a short team charter saying where AI is in, where it&#8217;s out by default, and who owns decisions." srcset="https://substackcdn.com/image/fetch/$s_!bjst!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!bjst!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!bjst!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!bjst!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609c7cfe-847c-4850-a1e7-ef1bdf20fd12_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>The trap.</strong> I&#8217;ll show you why winning the argument against a skeptic loses the team.</p></li><li><p><strong>The sort.</strong> Here&#8217;s the four-kind triage that replaces the debate: true, fixable, misread, or a value.</p></li><li><p><strong>The map.</strong> You get the seven concerns you&#8217;ll hear most, each with an honest verdict, the move that follows, and the one resource worth forwarding.</p></li><li><p><strong>The practice.</strong> What a defensible team AI posture looks like once the sorting is done.</p></li></ul><p>By the end, you&#8217;ll have a verdict and a concrete next move for the seven objections coming your way this quarter, plus the one sentence that keeps a skeptic on your team. <strong>You stop dreading the ethics conversation and start using it to make your team&#8217;s AI practice sharper.</strong> No slides required, no philosophy degree either.</p><p>Let&#8217;s sort this out.</p><div><hr></div><h2>Why winning the argument loses the team</h2><p><a href="https://peertube.designersethiques.org/w/jhHv5GLE5iV5ccYgs8rWe9">The talk</a> opens with a moment I can&#8217;t stop thinking about. At a green-IT conference workshop, in front of the most skeptical crowd available, the speakers ran a session asking &#8220;AI: in or out?&#8221; Almost every group landed on &#8220;in,&#8221; reasoning that it&#8217;s here anyway, there&#8217;s no choice, so let&#8217;s make it as clean as possible. One speaker was troubled by exactly that phrasing. <strong>&#8221;We have no choice&#8221; is not what agreement sounds like, it&#8217;s what resignation sounds like.</strong> If your team adopts AI in that spirit, you didn&#8217;t win them. They just stopped telling you things.</p><p>There&#8217;s a second reason the debate is rigged before you open your mouth. <strong>Your team members already met AI adoption as users, and it wasn&#8217;t polite.</strong> The design researchers at Limites Num&#233;riques <a href="https://limitesnumeriques.fr/travaux-productions/ai-forcing">documented the pattern</a>: AI buttons pushed front and center, features switched on by default like Strava&#8217;s Athlete Intelligence, dialogs that offer &#8220;try it&#8221; and &#8220;not now&#8221; but never &#8220;no.&#8221; Sparkles and purple everywhere, the visual vocabulary of magic. <strong>When you pitch AI to your team with vendor enthusiasm, you pattern-match to the forced adoption they already resent.</strong> They&#8217;ve heard &#8220;this will make everything better&#8221; before, from a button they couldn&#8217;t refuse.</p><p>Organizational research has said this plainly for years. In their 2008 Academy of Management Review paper, <a href="https://journals.aom.org/doi/abs/10.5465/amr.2008.31193235">Ford, Ford and D&#8217;Amelio</a> argued that r<strong>esistance to change isn&#8217;t a defect in the resisters.</strong> Change agents cause a good share of it themselves, and <strong>resistance is better treated as a resource:</strong> engagement, feedback, proof that people take the change seriously. <strong>The person pushing back is often the person paying the most attention.</strong></p><p>If you read <a href="https://www.theaithinker.com/p/how-to-lead-a-tech-team-through-the">How to lead a tech team through the AI shift</a>, you might spot a tension here. I argued there for the 20-60-20 rule: <strong>pour your energy into your champions and the watching middle, and stop exhausting yourself arguing with the resistors.</strong> I stand by every word, and this article doesn&#8217;t change the math. Sorting is not arguing, and what follows is not a conversion campaign. It&#8217;s for the conversations that find you anyway: the 1:1 where a concern lands on the table, the team meeting where a hand goes up. <strong>You still don&#8217;t chase your skeptics; you answer well when they&#8217;re in front of you, because the watchers are scoring how you do it.</strong> One honest answer to a skeptic moves ten watchers.</p><p>And there&#8217;s simple arithmetic about credibility. <strong>Argue once against something that turns out to be true, say the data-center water numbers, and you lose the room for a quarter.</strong> The skeptic came with figures. You came with talking points. So the job isn&#8217;t to win. It&#8217;s to sort.</p><div><hr></div><h2>Sort the concern before you answer it</h2><p>Here&#8217;s the move that changes the conversation: <strong>treat each concern as a claim to classify, not an attack to parry.</strong> A triage nurse doesn&#8217;t argue with symptoms. She figures out what kind of problem she&#8217;s looking at, because the kind determines the response. Four kinds cover almost everything your team will raise.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mtpm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mtpm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Mtpm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Mtpm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Mtpm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mtpm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3519334,&quot;alt&quot;:&quot;A hand-drawn diagram sorting concerns into four kinds. Kind 1, they&#8217;re right: concede and change what you adopt. Kind 2, a real risk you control: change how you adopt with working agreements. Kind 3, a misconception: correct the arithmetic with evidence, not marketing. Kind 4, a value: respect the line, there is no counter-argument to a value. &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://www.theaithinker.com/i/206698831?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn diagram sorting concerns into four kinds. Kind 1, they&#8217;re right: concede and change what you adopt. Kind 2, a real risk you control: change how you adopt with working agreements. Kind 3, a misconception: correct the arithmetic with evidence, not marketing. Kind 4, a value: respect the line, there is no counter-argument to a value. " title="A hand-drawn diagram sorting concerns into four kinds. Kind 1, they&#8217;re right: concede and change what you adopt. Kind 2, a real risk you control: change how you adopt with working agreements. Kind 3, a misconception: correct the arithmetic with evidence, not marketing. Kind 4, a value: respect the line, there is no counter-argument to a value. " srcset="https://substackcdn.com/image/fetch/$s_!Mtpm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Mtpm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Mtpm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Mtpm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb6c8fd-3af8-49e1-b441-94642d580217_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Kind one: they&#8217;re right.</strong> The data-center buildout really is doubling electricity demand. When a concern is true, the honest answer starts with &#8220;you&#8217;re right,&#8221; and the follow-up is a change in what you adopt. <strong>Nothing builds credibility faster than a concession nobody expected.</strong></p></li><li><p><strong>Kind two: a real risk you control.</strong> Juniors losing the review and mentoring that builds expertise. This one isn&#8217;t about the industry, it&#8217;s about your team, which means your working agreements decide whether it comes true. <strong>The answer is a rule you set together, not a rebuttal.</strong></p></li><li><p><strong>Kind three: a misconception.</strong> &#8220;Every prompt is like pouring out a bottle of water.&#8221; The per-prompt numbers are knowable, and they don&#8217;t say that. <strong>Correct the arithmetic gently, with sources, and without dismissing the worry underneath it.</strong> The worry usually points at something real at a different scale.</p></li><li><p><strong>Kind four: a value.</strong> &#8220;I didn&#8217;t get into this craft to supervise a machine.&#8221; <strong>You can&#8217;t argue someone out of a value, and trying reads as disrespect.</strong> What you can do is design roles so the value survives, and be honest about where the boundary sits.</p></li></ul><p>One subtlety makes the whole sort work: the same concern can live in two kinds at once, at different scales. The environmental objection is true at industry scale and misread at the single-prompt scale. The sort forces you to say which scale you&#8217;re answering, out loud. <strong>Sorting is your actual job in this conversation; the debate is optional.</strong></p><p>Here&#8217;s what the sort sounds like in an actual 1:1, in three moves.</p><ul><li><p><strong>First, ask for the strongest version:</strong> &#8220;Give me the strongest version of this worry. Convince me.&#8221; That one question replaces the debate with respect, and it surfaces the real concern instead of the polite one.</p></li><li><p><strong>Second, name the kind out loud in plain words:</strong> &#8220;I think you&#8217;re right about this one,&#8221; or &#8220;this one is ours to fix,&#8221; or &#8220;I think the numbers say otherwise, let me show you,&#8221; or &#8220;that sounds like a value, and I won&#8217;t argue with a value.&#8221;</p></li><li><p><strong>Third, before the conversation ends, commit to one follow-up in writing:</strong> the rule you&#8217;ll add, the number you&#8217;ll check, the thing that goes out-by-default. A sort that doesn&#8217;t end in a written commitment is just a nicer way of nodding.</p></li></ul><p>So let&#8217;s put the framework to work, one conversation at a time.</p><div><hr></div><h2>Answer the seven concerns, one by one</h2><p>The map below covers the seven objections I keep hearing. Six of them the talk maps better than anything else I&#8217;ve found; the seventh, what AI does to our thinking, has grown loud enough since to earn its own place. Your team may add others: discrimination baked into training data, deepfakes, privacy. <strong>The sort handles those the same way.</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_!CGA6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CGA6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!CGA6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!CGA6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!CGA6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!CGA6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3640406,&quot;alt&quot;:&quot;A hand-drawn map with seven zones: the planet (verdict: right at industry scale, misread at prompt scale), the people behind the data (verdict: right), the craft (verdict: a real risk the team controls), the thinking muscle (verdict: real at the learning edge), consent at work (verdict: right about the pattern), the jobs (verdict: partly true, partly unknowable), the output you can&#8217;t trust (verdict: half right, use AI where a human can verify).&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://www.theaithinker.com/i/206698831?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn map with seven zones: the planet (verdict: right at industry scale, misread at prompt scale), the people behind the data (verdict: right), the craft (verdict: a real risk the team controls), the thinking muscle (verdict: real at the learning edge), consent at work (verdict: right about the pattern), the jobs (verdict: partly true, partly unknowable), the output you can&#8217;t trust (verdict: half right, use AI where a human can verify)." title="A hand-drawn map with seven zones: the planet (verdict: right at industry scale, misread at prompt scale), the people behind the data (verdict: right), the craft (verdict: a real risk the team controls), the thinking muscle (verdict: real at the learning edge), consent at work (verdict: right about the pattern), the jobs (verdict: partly true, partly unknowable), the output you can&#8217;t trust (verdict: half right, use AI where a human can verify)." srcset="https://substackcdn.com/image/fetch/$s_!CGA6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!CGA6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!CGA6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!CGA6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d79acd0-eb30-4783-8c8c-91b086d5d327_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>The planet</h3><p>Give this concern its strongest version, with numbers that survive checking, because the talk&#8217;s own figures were compressed in places. The <a href="https://www.iea.org/news/ai-is-set-to-drive-surging-electricity-demand-from-data-centres-while-offering-the-potential-to-transform-how-the-energy-sector-works">IEA&#8217;s 2025 Energy and AI report</a> projects <strong>data-center electricity demand will more than double by 2030</strong>, to around 945 TWh, slightly more than Japan&#8217;s entire consumption today. <a href="https://doi.org/10.1016/j.joule.2023.09.004">Alex de Vries</a> projected in Joule that <strong>AI-specific consumption alone could reach the scale of the Netherlands or Argentina by 2027.</strong> Water follows the same curve: <a href="https://www.datacenterdynamics.com/en/news/microsofts-water-consumption-jumps-34-percent-amid-ai-boom/">Microsoft&#8217;s use jumped a third in 2022 while Google&#8217;s rose a fifth</a>, and researchers behind the <a href="https://arxiv.org/abs/2304.03271">Making AI Less &#8220;Thirsty&#8221; paper</a> project <strong>AI water withdrawal reaching half of the UK&#8217;s annual total by 2027. The verdict: at industry scale, your skeptic is right.</strong></p><p>There&#8217;s a sharper twist worth conceding too. A <a href="https://www.theguardian.com/technology/2024/sep/15/data-center-gas-emissions-tech">Guardian analysis</a> found <strong>the real emissions of the big providers&#8217; own data centers ran about 7.6 times higher than officially reported.</strong> The trick is accounting: renewable-energy certificates let a company report clean power it never actually consumed at the site. <strong>Notice what that is: not a technology problem, an honesty problem.</strong></p><p>Now the misread half. Per-prompt costs are measurable, and they&#8217;re small. <a href="https://cloud.google.com/blog/products/infrastructure/measuring-the-environmental-impact-of-ai-inference">Google&#8217;s published figure</a> for a median Gemini text prompt: <strong>0.24 Wh of energy and 0.26 mL of water, counting on-site water only.</strong> <a href="https://mistral.ai/news/our-contribution-to-a-global-environmental-standard-for-ai/">Mistral&#8217;s lifecycle study</a> counts everything upstream, training included, and lands at 45 mL per response. The gap is scope, not virtue, and either way one prompt sits far below one kilometer of driving or one beef meal. <strong>Correcting this arithmetic matters, because a team member who quietly believes each prompt burns a lake will never use the tools well.</strong> The obvious comeback is fair: small times billions of prompts equals the buildout we just conceded. Both things are true. Your prompt is cheap; the trajectory is not; your subscription is a vote for it.</p><p><strong>The move is to stop pretending it&#8217;s free, and to put that in writing.</strong> Three rules are worth adding to your team&#8217;s working agreements.</p><ul><li><p><strong>Default to the small model, escalate on need:</strong> most tasks don&#8217;t need the frontier model, and the price gap is the energy gap.</p></li><li><p><strong>No AI where a script does the job:</strong> a regex, a spreadsheet formula, or a cron job costs nothing and never hallucinates.</p></li><li><p><strong>And one screening question before any new AI use ships:</strong> what is this for, and would we defend it at scale?</p></li></ul><p>Expect efficiency gains to get eaten unless you watch for them; the talk calls this the rebound effect, where every drop in cost per task invites more tasks.</p><p>When the conversation deserves more than a meeting slot, forward <strong><a href="https://blog.andymasley.com/p/a-cheat-sheet-for-conversations-about">Andy Masley&#8217;s cheat sheet</a> on AI and the environment.</strong> It&#8217;s the single best document I know for exactly this conversation: it runs the per-prompt arithmetic against everyday life (about 1,000 prompts to move your daily energy use by 1%) and still concedes the industry-scale buildout is a real question. <strong>Handing your skeptic the strongest version of the counter-arithmetic beats paraphrasing it in a meeting.</strong> What you can say: &#8220;You&#8217;re right about the trajectory. Here&#8217;s what our use actually costs, and here&#8217;s what we choose not to use it for.&#8221;</p><p>That answer covers the machines. The people who made the models possible are a harder conversation.</p><h3>The people behind the data</h3><p>The concern: <strong>the models were trained on work scraped from people who never consented, and the labor that made them safe was outsourced at poverty wages.</strong> The record backs it. <a href="https://time.com/6247678/openai-chatgpt-kenya-workers/">TIME&#8217;s investigation</a> documented Kenyan workers labeling toxic content for less than $2 an hour. And the talk&#8217;s own example has a scholarly source: <a href="https://journals.sagepub.com/doi/10.1177/20539517231188723">Le Ludec, Cornet and Casilli</a> documented French AI firms outsourcing annotation to Madagascar at poverty wages. This isn&#8217;t someone else&#8217;s supply chain. <strong>The verdict: they&#8217;re right, and no arithmetic rescues it.</strong></p><p>So don&#8217;t reach for a rebuttal, because there isn&#8217;t one. What a product team controls is procurement and posture, and you can make both concrete. <strong>Write three questions into your next tool evaluation:</strong> where does the training data come from, what licensing deals exist, and what are the annotation labor practices. The differences between providers are inspectable: <strong>Mistral publishes a <a href="https://mistral.ai/news/our-contribution-to-a-global-environmental-standard-for-ai/">full lifecycle audit</a></strong> with the French environment agency, and some providers sign licensing deals with the newsrooms they train on, the way OpenAI did with the <a href="https://www.axios.com/2023/07/13/ap-openai-news-sharing-tech-deal">Associated Press</a> and <a href="https://openai.com/index/global-news-partnerships-le-monde-and-prisa-media/">Le Monde</a>, instead of scraping them. Your team can prefer the better ones and say why. For the teammate who wants the full picture, <strong>the book to pass around is <a href="https://canongate.co.uk/books/5234-feeding-the-machine-the-hidden-human-labour-powering-ai/">Feeding the Machine</a>,</strong> written by three Oxford Internet Institute researchers from years of interviews with the annotators and moderators themselves.</p><p>The other half of the move is harder: don&#8217;t launder the discomfort. <strong>Deciding to use AI with open eyes is more respectable than pretending the problem is solved.</strong> Some weeks the honest position is &#8220;this bothers me too, and here&#8217;s why I still think our use is defensible.&#8221; What you can say: &#8220;You&#8217;re right, and we can&#8217;t fix it from here. Here are the three questions we now ask before picking a provider, and here&#8217;s where I still think it&#8217;s worth it.&#8221;</p><p>The next objection sits closer to home: what the shortcut does to your own team&#8217;s craft.</p><h3>The craft and the shortcut</h3><p>This is the worry I hear most from the best people. Expertise, the ergonomist in the talk explains, gets built four ways: <strong>learning, experimentation, collaboration with peers, and teaching.</strong> Then he asks the question that lands hardest: when you hit a problem, what&#8217;s more effective, <strong>asking your colleagues or asking the AI?</strong> In the Q&amp;A, someone described a senior developer who used to review a junior&#8217;s code and now just asks the AI instead. <strong>The transmission chain broke, quietly, without anyone deciding it should.</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_!ri_q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ri_q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!ri_q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!ri_q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!ri_q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ri_q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db730138-0d25-4412-9b1f-b8a847780955_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3283868,&quot;alt&quot;:&quot;A hand-drawn cycle with four stations: learn, experiment, collaborate with peers, teach. A dotted arrow labeled &#8220;just ask the AI&#8221; bypasses all four stations and lands directly on an answer, with a warning that the shortcut skips where expertise is built.&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://www.theaithinker.com/i/206698831?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn cycle with four stations: learn, experiment, collaborate with peers, teach. A dotted arrow labeled &#8220;just ask the AI&#8221; bypasses all four stations and lands directly on an answer, with a warning that the shortcut skips where expertise is built." title="A hand-drawn cycle with four stations: learn, experiment, collaborate with peers, teach. A dotted arrow labeled &#8220;just ask the AI&#8221; bypasses all four stations and lands directly on an answer, with a warning that the shortcut skips where expertise is built." srcset="https://substackcdn.com/image/fetch/$s_!ri_q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!ri_q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!ri_q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!ri_q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb730138-0d25-4412-9b1f-b8a847780955_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Lisanne Bainbridge named this pattern in 1983. In <a href="https://www.sciencedirect.com/science/article/abs/pii/0005109883900468">Ironies of Automation</a>, the paper to forward to the teammate who wants the lineage, she showed that <strong>automating the easy parts of a job leaves the human with the hard parts, minus the daily practice that kept them sharp.</strong> A <a href="https://link.springer.com/article/10.1007/s00146-024-01951-x">field study of AI in a radiology practice</a> by Gamkrelidze, Zouinar and Barcellini found exactly that shape: the fracture-detection AI worked as a genuine safety net, and it also bred overconfidence risk, while the transcription AI quietly deleted the verification step the medical secretaries used to perform. <strong>The verdict: this risk is real, and it&#8217;s the one you control most directly.</strong></p><p>Which is good news, because <strong>the fix is working agreements,</strong> not philosophy, and they&#8217;re short enough to write down:</p><ul><li><p><strong>Rule one:</strong> anyone still learning a domain gets human review on their work, full stop, and the reviewer is a person with a name.</p></li><li><p><strong>Rule two:</strong> AI explains before it produces; used as a tutor it strengthens the learning station instead of skipping it.</p></li><li><p><strong>Rule three:</strong> seniors keep protected teaching time (a weekly pairing hour, a monthly brown-bag), because teaching is their own expertise engine too.</p></li></ul><p><strong>The shortcut only breaks the loop if you let it become the default path.</strong> What you can say: &#8220;You&#8217;re right that the shortcut is real. So we keep the loop: <strong>review stays, teaching stays, and AI joins the loop instead of replacing it.</strong>&#8221;</p><p>Working agreements protect the team&#8217;s craft. The newer worry is what the tools do to each person&#8217;s head.</p><h3>The thinking muscle</h3><p>This is the objection that grew loudest over the past year, and it usually arrives as a sentence about the next generation: <strong>AI is making us dumber, and kids who grow up on it will never learn to think for themselves.</strong> It now arrives with a study attached. An <a href="https://arxiv.org/abs/2506.08872">MIT Media Lab experiment</a> put EEG caps on 54 essay writers: the ChatGPT group showed the weakest brain connectivity, reported the least ownership of their work, and minutes after submitting, most couldn&#8217;t quote a line from their own essay. The authors named the lingering effect <strong>&#8220;cognitive debt.&#8221;</strong> A <a href="https://www.mdpi.com/2075-4698/15/1/6">survey of 666 people</a> added that the heaviest AI users scored lowest on critical thinking, with the youngest participants the most dependent. <strong>This worry has data now, and waving it off with &#8220;they said the same about calculators&#8221; doesn&#8217;t answer it.</strong></p><p><strong>The verdict: real at the learning edge, unproven as a sentence about humanity.</strong> Read honestly, the evidence is narrower and more useful than the headlines. The MIT authors answer &#8220;is ChatGPT making us dumber?&#8221; with a flat no in their own FAQ: one narrow task, a small sample, engagement measured during the task rather than lasting change. The 666-person survey is correlational; maybe people who think less critically simply offload more. The result that should actually shape your team&#8217;s rules is causal: a <a href="https://www.pnas.org/doi/10.1073/pnas.2422633122">randomized trial with about a thousand students, published in PNAS</a>, found that <strong>vanilla ChatGPT boosted practice performance by 48% and then cut unassisted exam scores by 17%.</strong> Same trial, one design change: a tutor version that gave hints instead of answers erased the harm completely. <strong>The variable isn&#8217;t AI. It&#8217;s whether the AI does the thinking or scaffolds it.</strong> That&#8217;s also exactly where the calculator comparison holds and breaks: fine to offload arithmetic, dangerous to offload the reasoning itself.</p><p><strong>The move is to make &#8220;coach, not answer machine&#8221; a written rule for anything a person is still learning.</strong> Three rules fit on a sticky note</p><ul><li><p><strong>Think first, prompt second:</strong> write your own answer, even five rough lines, before opening the chat.</p></li><li><p><strong>Hints before answers while learning:</strong> tell the model &#8220;ask me questions, don&#8217;t give me the solution&#8221; (the exact design that erased the harm in the trial).</p></li><li><p><strong>Explain it back:</strong> if you can&#8217;t restate what you shipped with the chat window closed, it isn&#8217;t yours yet.</p></li></ul><p>For the teammate who wants the deeper story, <strong>forward <a href="https://theconversation.com/mit-researchers-say-using-chatgpt-can-rot-your-brain-the-truth-is-a-little-more-complicated-259450">The Conversation&#8217;s walkthrough of the MIT study</a>;</strong> it takes the worry seriously and shows precisely what the study can and can&#8217;t say. What you can say: &#8220;You&#8217;re right to guard your thinking. So <strong>we use AI as a coach on anything we&#8217;re still learning, and we prove it by explaining our work with the chat closed.</strong>&#8221;</p><p>Guarding heads is one half of consent. The other half is who signed up for any of this in the first place.</p><h3>Consent at work</h3><p>The talk asks a question I&#8217;d put to any team verbatim: <strong>do you consent to your work being organized by your team, or by an AI?</strong> Then it sketches the scenario: a backlog where tasks are assigned by an AI, estimated by an AI, and timed by an AI that checks whether you matched its estimate. If that sounds like science fiction, the EU disagrees. The <a href="https://artificialintelligenceact.eu/annex/3/">EU AI Act&#8217;s Annex III</a> classifies <strong>workplace AI that allocates tasks or monitors and evaluates performance as high-risk</strong>, with employer duties to inform workers before deploying it. The high-risk obligations start applying in August 2026. That&#8217;s next month. <strong>The verdict: they&#8217;re right about the pattern, and whether it becomes true on your team is your call to make.</strong></p><p>Reality in the field is still mostly softer than the fear, and it&#8217;s worth being precise about that. The talk pointed at the French public sector, where the Lyon school district runs an AI copilot called <a href="https://www.ekole.fr/blog/le-rectorat-de-lyon-utilise-lia-pour-aider-les-gestionnaires-rh-dans-leurs-reponses-aux-enseignants">Cassandre</a> that helps HR staff answer teachers&#8217; questions about transfers. It doesn&#8217;t decide the transfers. T<strong>he speaker&#8217;s warning is about where the road leads: to &#8220;it wasn&#8217;t a human who decided,&#8221; the sentence that ends accountability.</strong></p><p>Parts of the private sector are already further down that road, and the two clearest cases come from companies everyone knows. <a href="https://www.theverge.com/2019/4/25/18516004/amazon-warehouse-fulfillment-centers-productivity-firing-terminations">Amazon&#8217;s own legal filings</a> describe warehouse systems that track each worker&#8217;s rate and auto-generate productivity warnings and termination paperwork, with Amazon noting supervisors can override. And in 2023, <a href="https://www.fieldfisher.com/en/insights/amsterdam-court-of-appeal-rules-in-favour-of-uber-and-ola-cabs-drivers">an Amsterdam appeals court</a> ruled that Uber had deactivated drivers through solely automated decisions, the practice the drivers&#8217; union called robo-firing and the exact thing the GDPR&#8217;s Article 22 exists to prevent. <strong>The road the talk warns about doesn&#8217;t lead somewhere hypothetical; it leads to case law.</strong></p><p>The move is to <strong>make adoption consent-real before anyone asks,</strong> with three rules written into your working agreements:</p><ul><li><p>Tools are offered, never mandated per person.</p></li><li><p>Every decision that touches a person carries a named human owner, and the name is written next to the decision.</p></li><li><p>Opting out is safe, with no career shadow, and you check twice a year that it&#8217;s still true in practice.</p></li></ul><p>When legal wants the source, forward the <a href="https://artificialintelligenceact.eu/annex/3/">Annex III text itself</a>; it&#8217;s shorter than most policy memos. <strong>Nobody who works for you should ever hear &#8220;the AI decided.&#8221;</strong> What you can say: &#8220;A human owns every decision on this team, starting with me.&#8221;</p><p>And underneath every consent question sits the one your team member is actually asking.</p><h3>The jobs</h3><p>The ergonomist tells a story from his early career. His mentor asked: if you design software that makes the work twice as fast, how many workers are left in six months? It&#8217;s the question underneath every other question, and your team member asking it deserves better than the two stock answers: the vendor&#8217;s &#8220;nothing changes for you&#8221; and the doomer&#8217;s certainty. The talk makes the hollowness concrete with translators, a craft told for years that the tools would free them for &#8220;more interesting work,&#8221; by people who never say what work is more interesting than the craft itself. You can&#8217;t answer the mentor&#8217;s question for the industry. Nobody can. <strong>The verdict: partly true, partly unknowable, and the worst response is a promise you can&#8217;t keep.</strong></p><p>Start by questioning the premise. &#8220;Twice as fast&#8221; itself deserves doubt: <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">METR&#8217;s randomized trial</a> found <strong>experienced developers were 19% slower with AI tools while believing they were 20% faster.</strong> That perception gap is the strongest argument you&#8217;ll ever get for measuring your own team&#8217;s gains instead of quoting the pitch. And watch what the work becomes, not just whether it exists. When France&#8217;s tax authority deployed its pool-detection program <a href="https://www.impots.gouv.fr/actualite/generalisation-du-foncier-innovant">Foncier innovant</a>, field agents became desk agents. The job survived; the parts of it people liked didn&#8217;t all survive with it. <strong>Even the jobs that stay change texture, and naming that out loud buys more trust than any reassurance.</strong></p><p><strong>The move is to commit only to what you control, and to make each commitment checkable.</strong> Plans get heard from you first, not from a rumor: say it in the team meeting and repeat it every quarter. Skills investment happens on company time, with a number attached (a monthly learning day, a named course budget); an unnumbered commitment isn&#8217;t one. Roles get redesigned with the people in them, not around them: the person whose work is changing sits in the room where it&#8217;s redesigned. And when someone wants more than reassurance, <strong>forward <a href="https://www.noemamag.com/how-ai-could-help-rebuild-the-middle-class/">David Autor&#8217;s essay on AI and the middle class</a>:</strong> MIT&#8217;s leading labor economist, long a tech skeptic, arguing a future with neither doom nor denial in it. What you can say: &#8220;I can&#8217;t promise what the industry does. I can promise you&#8217;ll hear plans from me first, and that <strong>we invest in you while things change.</strong>&#8221;</p><p>One objection left, and it aims at the output itself.</p><h3>The output you can&#8217;t trust</h3><p>The talk&#8217;s most memorable stretch is about mediocrity. <strong>Models weight toward the most probable output.</strong> Ask for a pink elephant with wings and most image models fail, because the training data holds no pink elephants with wings. Ask for a wine glass filled to the brim; you get one filled halfway, over and over. The speaker&#8217;s conclusion: a designer who uses AI to generate ideas is stepping onto &#8220;a highway to the most probable solution,&#8221; and originality lives off that highway. Stereotypes ride along for the same statistical reason. <strong>The verdict: half right, and the right half is a map of where to use the tools, not a case for refusing them.</strong></p><p>Because notice what the talk itself endorses: transcription, subtitles, handwriting recognition, classifying feedback. Small, checkable tasks with human expertise in the loop. That generalizes into the single most useful screen I know, and it&#8217;s worth writing exactly as a rule: <strong>AI-assisted work ships with a named human checker, and if nobody can check it, it doesn&#8217;t ship.</strong> Research gives the screen teeth. A <a href="https://www.microsoft.com/en-us/research/publication/the-impact-of-generative-ai-on-critical-thinking-self-reported-reductions-in-cognitive-effort-and-confidence-effects-from-a-survey-of-knowledge-workers/">CHI 2025 study of 319 knowledge workers</a> by Microsoft Research and CMU found that <strong>the more people trusted the AI, the less critically they thought; the more they trusted their own judgment, the more critically they engaged.</strong> The check only happens when the human still believes their judgment beats the tool&#8217;s, so your job is to <strong>keep that belief alive.</strong> Taste, direction, and originality stay human, and they get more valuable, not less. For the teammate who wants the domain-by-domain version of &#8220;what AI can and can&#8217;t do,&#8221; <strong>the book is <a href="https://press.princeton.edu/books/hardcover/9780691249131/ai-snake-oil">AI Snake Oil</a>,</strong> by two Princeton computer scientists who respect skeptics enough to argue with evidence. What you can say: &#8220;You&#8217;re right about the median. That&#8217;s why <strong>we use it where we can verify, and why your judgment is the part that never gets delegated.</strong>&#8221;</p><p>Seven concerns, seven verdicts. Put together, they stop being a list of complaints and start being something else: the specification for a practice.</p><div><hr></div><h2>The objection to this whole approach</h2><p>A sharp skeptic will see the framework coming and name it: &#8220;You&#8217;d already decided we&#8217;re adopting. The sorting is just a softer road to the same forced outcome.&#8221; <strong>You might be silently raising the manager&#8217;s version of the same objection: there&#8217;s a mandate, there&#8217;s a quarter, and this looks like a philosophy seminar.</strong> Both deserve a straight answer.</p><p>Take the skeptic&#8217;s version first, because it has a clean test. <strong>The sort has real exits, or it&#8217;s theater.</strong> If the &#8220;true&#8221; verdicts changed what you adopt, if something on your roadmap moved to out-by-default, if the person with the values objection still has their standing and their role, then the sorting was real. If you ran the conversations and nothing in your plan changed, the skeptic was right about you, and no framework fixes that.</p><p>Now the mandate pressure. Here&#8217;s the thing I&#8217;d want leadership to hear: <strong>the triage is the fast path, not the slow one.</strong> The alternative to honest sorting isn&#8217;t a converted team. It&#8217;s tools that get opened once, licenses that show up in the usage report as a flat line, and an adoption metric nobody believes. <strong>Quiet non-use is the most expensive outcome an AI mandate can produce, and steamrolling buys it wholesale.</strong> Sorting removes the actual reason people were stalling. That&#8217;s not a seminar. That&#8217;s unblocking.</p><p>And when the sorting is real, something better than compliance shows up: a posture you can write down.</p><div><hr></div><h2>The practice you end up with</h2><p><strong>Pull the seven moves together and you get a short team AI charter, written from your team&#8217;s concerns instead of a vendor deck.</strong> Mine would fit on a page. Four blocks.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cVMP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cVMP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!cVMP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!cVMP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!cVMP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!cVMP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3937454,&quot;alt&quot;:&quot;A hand-drawn one-page charter sketch with four blocks. Block 1, where AI is in: verifiable outputs a human reviews and owns. Block 2, where it&#8217;s out by default: original ideation, unreviewed customer-facing output, decisions about people. Block 3, who owns what: tools offered not forced, a named human owns every decision, opting out is safe. Block 4, how we pick tools: providers that publish honest numbers on energy, water, and training data.&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://www.theaithinker.com/i/206698831?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn one-page charter sketch with four blocks. Block 1, where AI is in: verifiable outputs a human reviews and owns. Block 2, where it&#8217;s out by default: original ideation, unreviewed customer-facing output, decisions about people. Block 3, who owns what: tools offered not forced, a named human owns every decision, opting out is safe. Block 4, how we pick tools: providers that publish honest numbers on energy, water, and training data." title="A hand-drawn one-page charter sketch with four blocks. Block 1, where AI is in: verifiable outputs a human reviews and owns. Block 2, where it&#8217;s out by default: original ideation, unreviewed customer-facing output, decisions about people. Block 3, who owns what: tools offered not forced, a named human owns every decision, opting out is safe. Block 4, how we pick tools: providers that publish honest numbers on energy, water, and training data." srcset="https://substackcdn.com/image/fetch/$s_!cVMP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!cVMP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!cVMP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!cVMP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4166d733-e3a5-43a0-9954-47cd52f92d8d_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Where AI is in:</strong> tasks with verifiable outputs that a human reviews and owns. Transcription, classification, drafts that get read before they ship, code reviewed by a person who could have written it.</p></li><li><p><strong>Where it&#8217;s out by default:</strong> original ideation, unreviewed customer-facing output, and any decision about people.</p></li><li><p><strong>Who owns what:</strong> tools offered, never forced on a person; a named human accountable for every decision; an opt-out without career shadow.</p></li><li><p><strong>How we pick tools:</strong> providers that publish honest numbers on energy, water, and training data.</p></li></ul><p>That last block has teeth because of the reporting gap from the planet section. A <strong>provider that understates its emissions 7.6 times has already told you how it handles inconvenient numbers.</strong> &#8220;Publishes honest figures&#8221; is a real screen, not a platitude. It costs nothing to apply and it sorts the market fast.</p><p>You can draft the whole thing in one team hour, and drafting it together is most of its power. <strong>Fifteen minutes: everyone writes their concerns down, anonymously if that helps people say the real one.</strong> Fifteen minutes: sort them into the four kinds together, out loud. Twenty minutes: draft the four blocks from what actually came up, not from a template. Ten minutes: put one name next to each block and a date three months out to revisit. <strong>A charter the team wrote in an hour beats a policy nobody read.</strong></p><p>Two things make this charter travel further than your team. Legal will notice that the consent block is where EU compliance is already heading, with workplace AI obligations applying from August 2026. And the room where adoption metrics get discussed will notice that a written posture beats a usage dashboard nobody trusts. <strong>The line that carries all of it: &#8220;You&#8217;re right about X. Here&#8217;s what we changed so our use doesn&#8217;t have that problem. And here&#8217;s where I still think it&#8217;s worth it.&#8221;</strong> A manager who can complete that sentence for each concern doesn&#8217;t need to win any argument.</p><p>One reframe before you go write yours. I started this project wanting keys to change skeptical minds. I ended it convinced that&#8217;s the wrong target. <strong>Mindsets move when the practice becomes trustworthy, not when the pitch improves.</strong> The skeptic doesn&#8217;t need to love AI. <strong>They need to see that their concern changed something real.</strong></p><div><hr></div><h2>Trust your skeptics</h2><p>Somewhere in your team is the person who read the water numbers, the one who worries about the junior who never gets reviewed anymore, the one who wonders what these tools are doing to how we think, the one who quietly decided prompting isn&#8217;t the craft they signed up for. They were never the obstacle. They were the free red team, stress-testing your AI practice before it shipped. The org-behavior researchers knew it in 2008; the talk&#8217;s speakers knew it on that stage in early 2025. <strong>A team that sorted its concerns ships AI use it can defend out loud, starting with defending it to itself.</strong></p><p>Your turn. <strong>Take the next 1:1 where a concern comes up and sort it out loud, all four kinds on the table.</strong> Write the strongest version of your best skeptic&#8217;s objection before you meet them, and open with it. Draft the four-block charter with the team, not for them. Pick one thing that goes out-by-default this week, and say why. And <a href="https://peertube.designersethiques.org/w/jhHv5GLE5iV5ccYgs8rWe9">watch the talk</a> that started this article, then forward it to the person on your team it will resonate with, with a note saying you want their read.</p><p>The speakers closed with a warning: <strong>AI will only ever offer you a mediocre dream, so take the time to dream your own.</strong> I&#8217;d turn it forward. Your team already has a dream about what their work should mean. <strong>Make your AI practice serve that, on purpose, and the skeptics won&#8217;t need convincing, they&#8217;ll be the ones holding you to it.</strong></p>]]></content:encoded></item><item><title><![CDATA[How to hire an AI-native product manager]]></title><description><![CDATA[Rewrite the job description around real AI usage. Screen for the last thing they built. Watch them direct an AI live. Decide on judgment, with a fluency bar.]]></description><link>https://www.theaithinker.com/p/how-to-hire-an-ai-native-product</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-hire-an-ai-native-product</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 20 Jul 2026 11:00:59 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a24dc865-1497-46bc-a466-c84accb17734_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The headcount finally came through. You need a product manager, your recruiting partner needs a job description by Friday, and the process sitting in your ATS (the software your whole recruiting pipeline runs on) is the one you&#8217;ve run since 2023. R&#233;sum&#233; screen, recruiter call, case-study interview, take-home, panel, offer. Every stage works the same way: the candidate produces something, and you grade it. A r&#233;sum&#233;. A structured answer. A polished deck. <strong>Look at it honestly and your hiring process is a machine for grading documents.</strong></p><p>Here&#8217;s the problem: AI just made polished documents free. The tight r&#233;sum&#233;, the crisp case structure, the take-home that used to signal &#8220;this person is serious&#8221;: any candidate with Claude and an evening now produces all three. You&#8217;ve probably felt it already, reading applications that all sound suspiciously excellent. And it happened at the worst possible moment, right when <strong>you were asked to make your team AI-first</strong> and every open seat became a chance to hire the mindset. <strong>The signal collapsed at the exact moment the stakes went up.</strong></p><p>So I went and read what the companies furthest into this shift actually did about it. I pulled the live PM job posts at Anthropic, Ramp, Notion, and Stripe, straight from their own job boards this week. I read the interview loops Sierra and Canva published, and the one candidates describe at Shopify. I read the fluency rubric Zapier now applies to every single hire. Different companies, different stages, one converging move. <strong>Stop grading the deliverable. Watch the candidate work.</strong> The bar isn&#8217;t &#8220;knows AI.&#8221; It&#8217;s <strong>&#8220;directs AI and catches it when it&#8217;s wrong.&#8221;</strong></p><p>Here&#8217;s the whole arc in one picture.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4wd0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4wd0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!4wd0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!4wd0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!4wd0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4wd0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4487539,&quot;alt&quot;:&quot;Hand-drawn infographic in four acts &#8212; a classic hiring loop with crossed-out artifact icons (r&#233;sum&#233;, deck, take-home), then five redrawn stages (job description, screen, interview, live build, decision), then a dial labeled how much AI to demand, then a five-line checklist next to a high bar labeled judgment plus fluency.&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://www.theaithinker.com/i/206622864?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn infographic in four acts &#8212; a classic hiring loop with crossed-out artifact icons (r&#233;sum&#233;, deck, take-home), then five redrawn stages (job description, screen, interview, live build, decision), then a dial labeled how much AI to demand, then a five-line checklist next to a high bar labeled judgment plus fluency." title="Hand-drawn infographic in four acts &#8212; a classic hiring loop with crossed-out artifact icons (r&#233;sum&#233;, deck, take-home), then five redrawn stages (job description, screen, interview, live build, decision), then a dial labeled how much AI to demand, then a five-line checklist next to a high bar labeled judgment plus fluency." srcset="https://substackcdn.com/image/fetch/$s_!4wd0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!4wd0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!4wd0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!4wd0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb00dbe4-12ad-48aa-9399-c580b187fb64_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>The diagnosis.</strong> I&#8217;ll show you why every stage of your current process stopped measuring anything real.</p></li><li><p><strong>The rebuild.</strong> Five moves, one per stage, with full requirements quoted from live postings and the interview questions from companies that already made them.</p></li><li><p><strong>The calibration.</strong> You&#8217;ll see the data on how much AI to actually demand, and the walk-back that warns against overshooting.</p></li><li><p><strong>The walkaway.</strong> One forwardable paragraph for leadership and your recruiter, plus a checklist to run on the req you have open.</p></li></ul><p>By the end you&#8217;ll have a full replacement for the old process: job-description language you can borrow whole, two screening questions, a live interview format with a published AI policy, a work-sample design, and a decision rubric, all compressed into a closing checklist you can run this week. <strong>Your next PM hire stops being a coin flip on polish and becomes the clearest AI-first signal you send your team this year.</strong></p><p>Let&#8217;s rebuild it, stage by stage.</p><div><hr></div><h2>Why your hiring loop went blind</h2><p>Walk through the classic stages and name what each one actually measures. The r&#233;sum&#233; screen grades a document. The case interview grades a rehearsed structure, the kind a decade of candidates drilled from <a href="https://www.goodreads.com/en/book/show/19243347-cracking-the-pm-interview">Cracking the PM Interview</a>, McDowell and Bavaro&#8217;s 2013 prep book (&#8221;How many pizzas are delivered in Manhattan?&#8221;, &#8220;How do you design an alarm clock for the blind?&#8221;). The take-home grades another document, produced somewhere you can&#8217;t see. <strong>The panel grades a performance, and every stage grades some kind of output.</strong></p><p>For years we told ourselves polish correlated with skill, that producing a crisp PRD required a crisp mind. The honest version is less flattering. Selection studies have long ranked r&#233;sum&#233; screens and unstructured interviews among the weakest predictors of actual job performance. <strong>The old process wasn&#8217;t a good instrument that AI broke. It was a weak instrument whose weakness AI made undeniable.</strong></p><p>Picture the machine you&#8217;ve been running.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WJzw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WJzw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!WJzw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!WJzw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!WJzw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!WJzw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4724658,&quot;alt&quot;:&quot;Hand-drawn two-panel diagram &#8212; left, a candidate hands polished documents to an interviewer who stamps grades on them; right, the same documents are marked &#8220;free now&#8221; and the interviewer shrugs, unable to tell candidates apart.&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://www.theaithinker.com/i/206622864?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn two-panel diagram &#8212; left, a candidate hands polished documents to an interviewer who stamps grades on them; right, the same documents are marked &#8220;free now&#8221; and the interviewer shrugs, unable to tell candidates apart." title="Hand-drawn two-panel diagram &#8212; left, a candidate hands polished documents to an interviewer who stamps grades on them; right, the same documents are marked &#8220;free now&#8221; and the interviewer shrugs, unable to tell candidates apart." srcset="https://substackcdn.com/image/fetch/$s_!WJzw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!WJzw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!WJzw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!WJzw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8687335-7672-4fb1-9008-8ec1e8ee64e3_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There&#8217;s a famous precedent for this kind of audit. Back in 2013, Google ran the numbers on its own famously clever interviews. <a href="https://abcnews.go.com/blogs/business/2013/06/google-skips-waste-of-time-brainteaser-interview-questions">Laszlo Bock</a>, who ran People Operations there, went public with the verdict: <strong>brainteasers were &#8220;a complete waste of time&#8221; that &#8220;serve primarily to make the interviewer feel smart.&#8221;</strong> Google moved to structured interviews as a result. The lesson stings a little: a signal-free process can feel rigorous for years, because nobody checks. <strong>AI didn&#8217;t create the weakness. It removed the excuse for ignoring it.</strong></p><p>You can watch the collapse happen in real interviews. In <a href="https://theskip.substack.com/p/what-pm-hiring-managers-actually">Nikhyl Singhal&#8217;s The Skip</a> (Singhal ran product at Meta and Google), hiring manager Sam Stone observes that <strong>candidates who used AI to prep their case structure &#8220;will abandon the structure the moment Q&amp;A starts, because they never internalized it.&#8221;</strong> In the same piece, product leader Mckenzie Lock shares the probe she used when screening at Netflix: when new information invalidates an assumption, &#8220;can you say &#8216;oh, that changes things&#8217; and walk through updated logic?&#8221; And Meta gives the same diagnosis from the company side. Its new interview format puts an AI assistant inside the session, partly because, in <a href="https://www.hellointerview.com/blog/meta-ai-enabled-coding">Meta&#8217;s own words</a>, it &#8220;makes LLM-based cheating less effective.&#8221; <strong>The companies that moved first aren&#8217;t fighting AI-polished candidates with detection tools. They moved the test to where polish can&#8217;t fake it.</strong></p><p>Meanwhile the requirement itself went up, not down. In Microsoft and LinkedIn&#8217;s <a href="https://news.microsoft.com/source/2024/05/08/microsoft-and-linkedin-release-the-2024-work-trend-index-on-the-state-of-ai-at-work/">Work Trend Index</a>, a survey of 31,000 people, <strong>66% of leaders said they wouldn&#8217;t hire someone without AI skills.</strong> That survey is from May 2024, and nothing published since suggests the number softened. So you&#8217;re expected to hire for a skill your instruments can&#8217;t see, using stages that stopped measuring anything. <strong>The fix isn&#8217;t a better lie detector. It&#8217;s a process that watches work instead of grading output.</strong> Five stages, five moves.</p><div><hr></div><h2>Rebuild the loop stage by stage</h2><p>Everything below comes from choices real companies have published, plus my own read on how to adapt them to a PM seat. <strong>Treat the five moves as parts to adapt, not a recipe to obey.</strong> Your org, your seat, your constraints. Run the ones that fit.</p><p>Here&#8217;s the full map before we go stage by stage.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mJbt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mJbt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!mJbt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!mJbt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!mJbt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!mJbt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4590456,&quot;alt&quot;:&quot;Hand-drawn flow of five stages &#8212; job description that names real AI usage, screen asking for the last thing you built, interview with AI in the room, work sample as a live build, decision with a bar plus judgment.&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://www.theaithinker.com/i/206622864?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn flow of five stages &#8212; job description that names real AI usage, screen asking for the last thing you built, interview with AI in the room, work sample as a live build, decision with a bar plus judgment." title="Hand-drawn flow of five stages &#8212; job description that names real AI usage, screen asking for the last thing you built, interview with AI in the room, work sample as a live build, decision with a bar plus judgment." srcset="https://substackcdn.com/image/fetch/$s_!mJbt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!mJbt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!mJbt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!mJbt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dd5fc2e-0013-4ab0-9089-cc3a664e3ecd_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Write AI into the job description</h3><p>Stop writing &#8220;familiarity with AI tools is a plus.&#8221; The most advanced companies on this front put AI usage in the requirements section and name tools, the way postings used to name SQL. <strong>The strongest reqs treat AI usage as a requirement with teeth, not a vibe.</strong> All of these lines come from live postings I pulled off the companies&#8217; own job boards this week, quoted in full so you can borrow whole requirements, not fragments:</p><ul><li><p><strong><a href="https://jobs.ashbyhq.com/notion/35785e61-c4c3-44ec-a401-6741d89dd16a">Notion</a></strong> (PM, Workspaces, an everyday workspace-product seat): &#8220;AI-pilled: You have comfort and an ongoing curiosity with using AI tools for your product development process.&#8221; And on every one of its 141 live postings, Notion adds: &#8220;You don&#8217;t need deep AI expertise for every role, but we do expect every Notino to be intellectually curious, drawn to tinkering and discovery, and excited to use AI as a real collaborator in their work.&#8221;</p></li><li><p><strong><a href="https://jobs.ashbyhq.com/supabase/184c3ad5-5d5f-44a1-98f7-65ff6f287b2f">Supabase</a></strong> (PM, Interfaces; the line recurs across their PM postings): &#8220;You use AI to move faster. You use AI tools to compress the slow parts of the job (research, drafting, synthesizing feedback) so you spend more time on judgment calls, and you&#8217;ve built enough with agents to have real opinions on what makes an interface agent-friendly.&#8221;</p></li><li><p><strong><a href="https://careers.airbnb.com/positions/8044715?gh_jid=8044715">Airbnb</a></strong> (PM, Incubations, a consumer seat asking for 10+ years of experience): &#8220;Demonstrated curiosity and point of view on incorporating AI tools into the product workflow.&#8221;</p></li><li><p><strong><a href="https://jobs.generalcatalyst.com/companies/canva/jobs/82275771-pexels-product-manager">Canva</a></strong> (PM for Pexels, their stock-photo product): &#8220;We&#8217;re looking for an AI-embracing entrepreneurial type product manager.&#8221; And in the experience list: &#8220;You embrace AI for automation, prototyping, report generation, data analysis, etc.&#8221;</p></li><li><p><strong><a href="https://stripe.com/jobs/search?gh_jid=7809139">Stripe</a></strong> (growth PM, in Minimum Requirements): &#8220;Experience building AI-powered, conversational, or agentic products. You understand what it takes to ship AI that works reliably for real users, not just in demos.&#8221; And under preferred qualifications: &#8220;You have shipped products on top of these technologies, not just evaluated them.&#8221;</p></li><li><p><strong><a href="https://jobs.ashbyhq.com/ramp/a3afd259-ba6b-4eb0-a1b6-05d01dddacd8">Ramp</a></strong> (PM, Agentic CX): &#8220;We&#8217;re looking for builders who can vibe-code a prototype before lunch and write the rollout plan after.&#8221; The requirements spell it out: &#8220;Deep hands-on experience building with AI: you&#8217;ve prototyped, shipped, and iterated on AI tools, agents, or workflows, not just managed roadmaps about them. Technical fluency with modern AI coding harnesses (Cursor, Claude Code, Codex).&#8221; And: &#8220;Fluency in data and AI evals: you know when to trust numbers and when to lean on principles.&#8221;</p></li><li><p><strong><a href="https://job-boards.greenhouse.io/anthropic/jobs/5247407008">Anthropic</a></strong> (research PM, in Minimum Qualifications, in full): &#8220;Have a deep passion and curiosity for AI and LLMs. Use AI regularly.&#8221;</p></li></ul><p>One distinction before you borrow. At Anthropic or on Ramp&#8217;s agentic products, asking for AI depth is as natural as a payments seat asking for payments experience: the product is AI, so the requirement writes itself. The lines worth copying are the other kind: a workspace product, a home-rental team, and a stock-photo library writing AI usage into ordinary PM seats. <strong>That&#8217;s the expectation spreading beyond AI products,</strong> and it&#8217;s the part that applies to your posting whatever you build.</p><p>Now decide which ask you&#8217;re actually making. The postings above split into three distinct tiers, and mixing them up is how job descriptions turn into wish lists.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VE00!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VE00!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!VE00!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!VE00!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!VE00!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!VE00!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4761785,&quot;alt&quot;:&quot;Hand-drawn three ascending shelves &#8212; works faster with AI (every PM seat), prototypes with AI tools (teams shipping weekly), owns evals (AI-product teams).&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://www.theaithinker.com/i/206622864?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn three ascending shelves &#8212; works faster with AI (every PM seat), prototypes with AI tools (teams shipping weekly), owns evals (AI-product teams)." title="Hand-drawn three ascending shelves &#8212; works faster with AI (every PM seat), prototypes with AI tools (teams shipping weekly), owns evals (AI-product teams)." srcset="https://substackcdn.com/image/fetch/$s_!VE00!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!VE00!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!VE00!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!VE00!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932e5fae-9d25-49dc-99de-93ab5e54c1b4_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Tier one asks for a PM who works faster with AI:</strong> the Notion, Supabase, and Airbnb language. <strong>Tier two asks for a PM who prototypes with AI coding tools by name:</strong> the Ramp language, echoed in <a href="https://job-boards.greenhouse.io/anthropic/jobs/5096878008">Anthropic&#8217;s Labs PM posting</a> (&#8221;Prototype with AI tools like Claude Code&#8221;). <strong>Tier three asks for a PM who owns evals</strong>, the tests that measure whether an AI feature actually works: Anthropic&#8217;s <a href="https://job-boards.greenhouse.io/anthropic/jobs/5247640008">Claude Code PM posting</a> wants someone who has &#8220;personally built agentic evals,&#8221; and <a href="https://boards.greenhouse.io/figma/jobs/6100482004">Figma</a> and <a href="https://databricks.com/company/careers/open-positions/job?gh_jid=8560772002">Databricks</a> write eval ownership straight into PM responsibilities. <strong>Most seats need tier one or two, and writing all three into one req doesn&#8217;t get you a unicorn, it gets you an empty pipeline.</strong> Pick the tier, write two or three specific bullets, and move on. The req is now making a promise the rest of your process has to keep.</p><h3>Screen for their last real AI workflow</h3><p>The old screening question (&#8221;are you familiar with AI tools?&#8221;) is answerable by anyone with a pulse and a ChatGPT subscription. Replace it with two questions that can&#8217;t be prepped.</p><ul><li><p>First: <strong>&#8220;Walk me through the last thing you used AI for, end to end.&#8221;</strong></p></li><li><p>Second: <strong>&#8220;When has AI been confidently wrong for you, and how did you catch it?&#8221;</strong></p></li></ul><p>Both were published by <a href="https://www.metaview.ai/resources/blog/ai-fluency-rubric-interview-skills-framework">Metaview</a>, a recruiting-software company, building on the fluency rubric Zapier&#8217;s co-founder Wade Foster made public. Vendor source, but the questions stand on their own. <strong>Ten minutes with these two questions tells you more than an hour of tool-name bingo.</strong></p><p>The second question is the real detector. Anyone who genuinely works with AI has been burned by it: the hallucinated citation, the confidently wrong data pull, the beautiful answer built on a misread premise. They&#8217;ll tell you the story with texture and a little embarrassment, and then, crucially, they&#8217;ll tell you <strong>what they changed about how they verify.</strong> A candidate who has only read about AI gives you abstractions about &#8220;hallucination risks.&#8221; <strong>Real usage leaves scar tissue, and scar tissue can&#8217;t be improvised in a screening call.</strong> The question is kind, too: you&#8217;re inviting a story they&#8217;ll enjoy telling, not running a quiz.</p><p>Zapier, the most codified case I found, is worth mining beyond the two questions. It checks AI fluency at four fixed points for every hire in every role (&#8221;The application, Initial (human or AI) screen, Skills test, Executive interview&#8221;) and probes four components: &#8220;<strong>AI mindset, strategy, building, and accountability.&#8221;</strong> The detail worth stealing came in <a href="https://zapier.com/blog/raising-ai-fluency-bar-in-hiring/">the rubric&#8217;s second version</a>: they now assess <strong>&#8220;AI fluency slope, not a snapshot,&#8221; the candidate&#8217;s trajectory rather than today&#8217;s toolkit.</strong> Listen for the slope in the workflow answer: someone whose story ends &#8220;and last month I changed how I do it&#8221; is climbing; someone reciting a setup from a year ago has plateaued. Metaview&#8217;s read of the same rubric describes what the top of the scale sounds like: <strong>someone who &#8220;redesigns the work around AI&#8221; and &#8220;builds systems, prompts, or agents that other people use.&#8221;</strong></p><p>You don&#8217;t need four checkpoints. <strong>You need these two questions asked early enough that nobody spends three weeks interviewing someone who fails the bar in minute ten.</strong> Your recruiter can ask them word for word, which is exactly the point. The candidates who clear them earn the round where things get interesting: the one with AI in the room.</p><h3>Put AI in the interview room</h3><p>Next decision: <strong>what happens when a candidate wants to use AI in your interviews?</strong> Right now most teams have no answer, which is the worst answer. Your interviewers assume it&#8217;s banned, your candidates assume it&#8217;s allowed, and whatever happens tells you nothing either way. The companies that took a position landed on three different doors, and all three work. <strong>The only wrong policy is not having one, and not telling candidates before they walk in.</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_!L153!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L153!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!L153!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!L153!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!L153!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!L153!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5032870,&quot;alt&quot;:&quot;Hand-drawn three doors labeled AI required, AI allowed and scored, no AI live &#8212; with a sign above all three reading &#8220;whichever door: tell the candidate before they walk in.&#8221;&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://www.theaithinker.com/i/206622864?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn three doors labeled AI required, AI allowed and scored, no AI live &#8212; with a sign above all three reading &#8220;whichever door: tell the candidate before they walk in.&#8221;" title="Hand-drawn three doors labeled AI required, AI allowed and scored, no AI live &#8212; with a sign above all three reading &#8220;whichever door: tell the candidate before they walk in.&#8221;" srcset="https://substackcdn.com/image/fetch/$s_!L153!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!L153!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!L153!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!L153!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe702ae72-f950-47fa-b79a-7cb204f453d7_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Door one: require it.</strong> <a href="https://www.canva.dev/blog/engineering/yes-you-can-use-ai-in-our-interviews/">Canva insists</a> that engineering candidates use AI tools in its technical interviews, because the old process &#8220;asked candidates to solve coding problems without the very tools they&#8217;d use on the job.&#8221;</p></li><li><p><strong>Door two:</strong> allow it and score it. Shopify runs two AI interviews, and as candidates <a href="https://www.hellointerview.com/blog/shopify-ai-enabled-coding">describe them</a>, &#8220;Any AI tool is fair game. Cursor, Claude Code, ChatGPT, Copilot, whatever you normally use.&#8221;</p></li><li><p><strong>Door three:</strong> keep the live round unassisted. <a href="https://www.anthropic.com/candidate-ai-guidance">Anthropic publishes its candidate policy:</a> draft your application yourself and refine it with Claude, but the live interview is you alone.</p></li></ul><p>These examples all come from engineering hiring, and that&#8217;s worth being honest about. <strong>The policy decision transfers to a PM loop as-is; the exercise formats need adapting, and the work-sample stage does that adapting.</strong></p><p><strong>Once AI is in the room, score direction, not output.</strong> One Shopify interviewer, in those same candidate reports, put the rubric in one line: &#8220;We don&#8217;t want the AI to work for you. We want you to tell it what to do.&#8221; Canva&#8217;s own interviewer guide tells candidates to <a href="https://www.canva.dev/blog/engineering/ai-interview-success/">&#8221;take time to review and understand everything that gets generated&#8221;</a>. And <a href="https://www.hellointerview.com/learn/ai-coding/overview/introduction">Hello Interview</a>, the site documenting these formats, states the stakes plainly: &#8220;The moment it starts making the architectural calls while you sit and watch, you&#8217;ve given away the exact thing the interview is there to assess.&#8221; One Rippling candidate was rejected for having &#8220;relied too heavily on AI even though their initial approach was correct.&#8221; <strong>Over-delegation is a scoring axis now, not just under-use.</strong> Watching someone accept AI garbage without blinking is the most informative thirty seconds in the whole process.</p><p>For the conversational rounds, the questions change too. <a href="https://aakashgupta.medium.com/i-coached-47-people-into-ai-pm-roles-at-300k-here-are-the-exact-questions-they-got-asked-36e239182010">Aakash Gupta</a>, who coached dozens of PMs through these rounds and collected the exact questions they got asked, reports prompts like: &#8220;Your chatbot&#8217;s response quality dropped 15% last week. How do you debug this?&#8221;, &#8220;Tell me about a time you shipped an AI feature that backfired,&#8221; and &#8220;Explain embeddings to a product designer on your team.&#8221; <strong>Notice what these test: judgment about systems that fail probabilistically, not feature-design theater.</strong> Lift the ones that fit your product and retire a case study to make room.</p><h3>Swap the take-home for a live build</h3><p>The take-home is the most broken stage in the old process, because it&#8217;s a pure artifact produced entirely off-camera. You&#8217;ll be tempted to keep it and bolt on AI-detection. Don&#8217;t. <strong>Detection is a race you can&#8217;t win, and it aims at the wrong question:</strong> you don&#8217;t actually care whether AI touched the deck, <strong>you care whether this person can think.</strong> So replace the stage entirely: watch the work happen live.</p><p>There&#8217;s solid science behind this swap, and it&#8217;s older than the AI wave. A live build is a work-sample test, an instrument that personnel-selection research has ranked among the strongest predictors of job performance for decades (<a href="https://psycnet.apa.org/record/1998-10661-006">Schmidt and Hunter&#8217;s</a> 1998 meta-analysis of 85 years of hiring data; the <a href="https://pubmed.ncbi.nlm.nih.gov/34968080/">2021 revision by Sackett and colleagues</a> puts structured interviews at the very top). You&#8217;re not chasing a trend. <strong>You&#8217;re adopting the instrument hiring science recommended all along, now with AI in the room.</strong></p><p>The PM version already exists in the wild, usually as a 45-minute prototyping case. <a href="https://www.news.aakashg.com/p/vibe-coding-interview">Aakash Gupta has coached PMs through this round</a> at &#8220;v0, Bolt, Figma, and Perplexity,&#8221; with real prompts like &#8220;Design Google Maps for the Blind&#8221; and &#8220;How would you prototype a Facebook Dating app,&#8221; and candidates choosing tools like Lovable, Bolt, or v0 for prototyping, or Cursor and Replit if they lean technical. <a href="https://lewislin.substack.com/p/dear-lewis-how-do-i-survive-a-vibe">Lewis Lin</a>, who has written PM interview prep books for a decade, describes what it actually measures: <strong>&#8220;rapid problem-solving and product judgment under pressure,&#8221; not code quality.</strong> One calibration note so you don&#8217;t over-index: Google has only piloted this round, and it&#8217;s <a href="https://substack.com/@aakashgupta/note/c-136652951">&#8221;not a standard part of Google&#8217;s process (yet)&#8221;</a>. Where it does run, <a href="https://substack.com/@aakashgupta/note/c-171847295">Jaclyn Konzelmann, Director of AI Product at Google, has described what she looks for</a>. You&#8217;re early, not late.</p><p>If you want a deeper shape to borrow, <a href="https://sierra.ai/blog/the-ai-native-interview">Sierra published its redesigned onsite</a> in April 2026: Plan, a working session where <strong>&#8220;the candidate drives ideation, while interviewers ask questions to strengthen it&#8221;</strong>; Build, two hours with &#8220;the AI tooling and frameworks of their choice&#8221;; Review, where the team debates &#8220;the key product flows and choices they made.&#8221; It&#8217;s their engineering loop, so here&#8217;s my PM adaptation: <strong>plan a feature together for twenty minutes, give them a time box and whatever tools they like, then spend the last half hour on why they built what they built.</strong> What did they cut, what did they verify, what would they ship. <strong>The prototype is just the excuse. The review conversation is where the judgment shows.</strong></p><h3>Decide with a bar, not a ranking</h3><p>Now the debrief, where all of this either compounds or unravels. <strong>The move: treat AI fluency as a minimum bar, and product judgment as the ranking.</strong> You&#8217;re not hiring the most AI-enthusiastic candidate in the pool. <strong>You&#8217;re hiring the best product judgment among everyone who cleared the bar.</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_!Vste!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vste!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Vste!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Vste!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Vste!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vste!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5052673,&quot;alt&quot;:&quot;Hand-drawn high-jump bar labeled AI fluency (clears it or not) next to a podium labeled product judgment (ranks everyone who cleared).&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://www.theaithinker.com/i/206622864?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn high-jump bar labeled AI fluency (clears it or not) next to a podium labeled product judgment (ranks everyone who cleared)." title="Hand-drawn high-jump bar labeled AI fluency (clears it or not) next to a podium labeled product judgment (ranks everyone who cleared)." srcset="https://substackcdn.com/image/fetch/$s_!Vste!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Vste!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Vste!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Vste!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26691aa1-eb2c-4ccd-815f-e142479f5c42_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Make the bar concrete, and borrow Zapier&#8217;s &#8220;Capable&#8221; level to do it: <strong>AI embedded in their actual work, &#8220;repeatable systems, not one-off prompts,&#8221; and clear impact on quality or speed.</strong> A candidate who can&#8217;t show a single real workflow in the screen, and who delegates every decision to the AI in the live build, doesn&#8217;t clear it. <strong>That&#8217;s a no in 2026 the same way &#8220;can&#8217;t write a PRD&#8221; was a no in 2019.</strong> But clearing the bar higher earns no extra points, because the ranking runs on something else.</p><p>The data backs the weighting. Across <a href="https://axialsearch.com/insights/ai-product-management-jobs/">592 AI-PM postings analyzed in early 2025</a>, product management and cross-functional collaboration each appeared in 32% of listings, while prompt engineering showed up in 9%. Even the roles with AI in the title rank on classic judgment. The sharpest new skill to probe for is evals. <a href="https://www.lennysnewsletter.com/p/kevin-weil-open-ai">Kevin Weil</a>, who was leading OpenAI&#8217;s product org at the time, said it plainly in April 2025: <strong>&#8220;Writing evals is going to become a core skill for product managers.&#8221;</strong> Honest calibration: eval experience is a hard requirement for AI-product seats (it&#8217;s literally in Anthropic&#8217;s and Figma&#8217;s postings) and a strong differentiator everywhere else. <strong>Match the evals expectation to the tier you picked when you wrote the req, and don&#8217;t punish a tier-one candidate for missing a tier-three skill.</strong></p><p>One more upgrade, borrowed from decision science. In <a href="https://www.hup.harvard.edu/books/9780316451406">Noise</a> (2021), Daniel Kahneman, Olivier Sibony, and Cass Sunstein show how wildly hiring judgments vary between judges, and prescribe the fix: <strong>score each dimension independently, and delay the overall verdict until the end.</strong> &#8220;Fluency is a bar, judgment is the ranking&#8221; is that protocol in one line. And in your judgment scoring, weight the moment Mckenzie Lock&#8217;s probe targets: did the candidate ever say &#8220;oh, that changes things&#8221; and re-reason live? <strong>That moment can&#8217;t be faked, and it&#8217;s the single strongest signal your new process produces.</strong> Which leaves one question: how hard should you actually push the AI requirement?</p><div><hr></div><h2>How much AI to actually demand</h2><p>Here&#8217;s the objection you might already be forming: &#8220;We&#8217;re not Ramp or Anthropic. Most PM postings don&#8217;t ask for any of this. My next PM still needs discovery, stakeholder work, and judgment. Isn&#8217;t rewriting the whole process premature?&#8221; The data honestly supports half of it. <a href="https://itamargilad.com/ai-pm-future/">Itamar Gilad&#8217;s analysis</a> of TrueUp data found that <strong>roughly one in seven open PM roles asked for AI skills as of early 2026,</strong> and he&#8217;s blunt about the hype: &#8220;There&#8217;s no indication that all PM roles will require deep AI knowledge and skills.&#8221; I&#8217;ll add my own check: when I scanned OpenAI&#8217;s 13 live PM postings this week, most carried no AI-usage bullets at all. <strong>At AI-native companies the expectation is ambient culture, not req language, and the explicit bullets cluster at companies making the shift deliberate.</strong> If your org writes its expectations down rather than absorbing them by osmosis, the bullets above are your template.</p><p>But look at what the objection is actually objecting to. The rebuilt process isn&#8217;t a higher AI bar bolted onto every stage. <strong>It&#8217;s better instruments for the things you already hire on.</strong> Even your most classic hire, the discovery-and-stakeholders PM with no AI ambitions, now walks through a world where every r&#233;sum&#233;, case answer, and take-home can be AI-generated. The screen question, the live build, and the re-reasoning probe measure judgment better than the old stages did, whatever the seat. <strong>Fix the instruments because they&#8217;re broken, not because every PM must become an AI specialist.</strong></p><p>The walk-backs teach the closing lesson. Duolingo went AI-first loudly in April 2025, and a year later its co-founder Luis von Ahn <a href="https://fortune.com/2026/04/13/duolingo-ceo-luis-von-ahn-ai-usage-requirement-employee-performance-evaluations/">dropped the idea of evaluating employees on AI usage</a>: <strong>&#8220;the most important thing in your performance is that you are doing whatever your job is as well as possible.</strong> A lot of times AI can help you with that. But if it can&#8217;t, I&#8217;m not going to force you to do that.&#8221; His mandate was about evaluating current employees, not hiring, but the lesson transfers to the bar you set at the door. <strong>Don&#8217;t make AI zealotry the bar. Make judgment-with-AI the bar.</strong> The process you just rebuilt does exactly that: fluency is one gate, and it&#8217;s never the ranking.</p><div><hr></div><h2>Start with the req on your desk</h2><p>When leadership or your recruiter asks what&#8217;s changing, here&#8217;s the paragraph to hand them:</p><blockquote><p>AI made polished artifacts free, so <strong>our hiring process can&#8217;t grade artifacts anymore.</strong> We&#8217;re redesigning it to <strong>watch how candidates work:</strong> the req names real AI usage, the screen asks for their last AI workflow end to end, the interview puts AI in the room with a policy we publish, the work sample is a live build we review together, and the decision holds a fluency bar while judgment keeps the casting vote. The bar isn&#8217;t &#8220;knows AI.&#8221; <strong>It&#8217;s &#8220;directs AI and catches it when it&#8217;s wrong.</strong></p></blockquote><p>It travels well: to leadership, to your recruiter, to the staff PM who&#8217;ll run half the interviews.</p><p>A generation of hiring managers learned from <a href="https://www.goodreads.com/book/show/6361445">Who</a>, Geoff Smart and Randy Street&#8217;s 2008 hiring classic, to write the scorecard before meeting a single candidate. Same discipline here, one page shorter. The checklist, for the opening you already have:</p><ul><li><p><strong>Job description:</strong> pick tier one, two, or three, and write it into the requirements as plainly as Anthropic&#8217;s &#8220;Use AI regularly.&#8221;</p></li><li><p><strong>Screen:</strong> the two questions, word for word, in the recruiter&#8217;s script.</p></li><li><p><strong>Interview:</strong> pick a policy (require, allow-and-score, or unassisted-live) and put it in the candidate prep email.</p></li><li><p><strong>Work sample:</strong> one prompt, their tools, 45 minutes, then thirty minutes on their choices.</p></li><li><p><strong>Decision:</strong> fluency is a bar, judgment is the ranking; one line in the debrief template.</p></li></ul><p>Your hiring process is also a message, and not just to candidates. The team you already have reads every posting you put up and every interview you run as a statement of what the org actually values. <strong>When they see you watching how people work with AI instead of counting buzzwords, that tells them more about the AI-first mandate than any kickoff deck.</strong> The first candidate through the rebuilt loop will show you more in 45 live minutes than the last ten take-homes combined. The posting on your desk is due Friday anyway. <strong>Make it the first artifact of the new process.</strong></p>]]></content:encoded></item><item><title><![CDATA[How to build AI agents business teams want]]></title><description><![CDATA[Decide if the job needs an agent. Interview the people who do it. Prototype from their answers. Hand your AI team a buildable spec. Start version one on the work nobody wants.]]></description><link>https://www.theaithinker.com/p/how-to-build-ai-agents-business-teams</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-build-ai-agents-business-teams</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 13 Jul 2026 11:00:38 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/61f31694-eac6-4fbf-b31c-9de5a3d91ba4_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The kickoff meeting for your first business-team agent has a shape you&#8217;ll recognize. On one side of the table sits the support team lead. She heard &#8220;AI agent&#8221; three weeks ago, and she&#8217;s been quietly updating her CV since. On the other side sits your data scientist, laptop open, asking the question he always asks: &#8220;So, what should the agent actually do? Send me the requirements and I&#8217;ll start building.&#8221; And in the middle sits you, the product person, holding a mandate from leadership that says agentify support and not much else. <strong>Nobody in that room has the spec, and everybody expects you to produce it.</strong></p><p>Here&#8217;s the thing nobody tells you about that meeting. <strong>The spec already exists.</strong> It just isn&#8217;t written anywhere: it lives in the heads of the people who do the job today, stored in a language no data scientist speaks. What the team&#8217;s best performer would tell a new hire on day one? That&#8217;s your system prompt. The tabs she keeps open while she works? Those are your tools. The things she&#8217;d never let a new hire do alone? Those are your guardrails. <strong>Your job isn&#8217;t to write the spec. It&#8217;s to run the interviews that surface it.</strong></p><p>In the previous post I wrote about <a href="https://www.theaithinker.com/p/how-to-pick-the-ai-agents-worth-building">how to pick the AI agents worth building</a>: point the next one at your team&#8217;s real constraint instead of sprinkling agents everywhere. This is what comes after you&#8217;ve picked the spot. The whole method fits in one sentence: <strong>every component of an agent is the answer to a plain-language question, and version one should only do the work the team would happily give away.</strong> The rest is knowing which questions to ask, and in what order.</p><p>The whole method runs through one worked example, a customer support team, picked to make every step tangible: swap in finance, sales ops, or HR and <strong>the moves stay the same. </strong>Here&#8217;s the path at a glance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jkSV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jkSV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!jkSV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!jkSV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!jkSV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jkSV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4005023,&quot;alt&quot;:&quot;Hand-drawn infographic showing four stops on a path. Stop 1, Decide: a person at a fork choosing between a script, an agent, and &#8220;not yet&#8221;. Stop 2, Interview: two people talking across a desk, one taking notes. Stop 3, Translate and prototype: interview notes turning into labeled building blocks, next to a person showing a cardboard robot to a team member. Stop 4, Land it: a small robot doing a chore while the team works.&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://www.theaithinker.com/i/206599017?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn infographic showing four stops on a path. Stop 1, Decide: a person at a fork choosing between a script, an agent, and &#8220;not yet&#8221;. Stop 2, Interview: two people talking across a desk, one taking notes. Stop 3, Translate and prototype: interview notes turning into labeled building blocks, next to a person showing a cardboard robot to a team member. Stop 4, Land it: a small robot doing a chore while the team works." title="Hand-drawn infographic showing four stops on a path. Stop 1, Decide: a person at a fork choosing between a script, an agent, and &#8220;not yet&#8221;. Stop 2, Interview: two people talking across a desk, one taking notes. Stop 3, Translate and prototype: interview notes turning into labeled building blocks, next to a person showing a cardboard robot to a team member. Stop 4, Land it: a small robot doing a chore while the team works." srcset="https://substackcdn.com/image/fetch/$s_!jkSV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!jkSV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!jkSV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!jkSV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0530b9da-2248-4493-b1eb-8b1195196898_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>The gate.</strong> I&#8217;ll give you the five questions that tell you whether a job needs an agent, a simple script, or nothing at all.</p></li><li><p><strong>The interviews.</strong> Three conversations with a support team, with the exact questions to ask and what each answer is for.</p></li><li><p><strong>The translation.</strong> Every answer becomes a spec component, and you&#8217;ll prototype the agent yourself before anyone commits a sprint.</p></li><li><p><strong>The landing.</strong> You&#8217;ll see how to scope version one so a team that fears the project ends up asking the agent to do more.</p></li></ul><p>By the end you&#8217;ll have the full interview script and the translation table between business answers and agent components. <strong>You walk into your next discovery meeting with questions the team can actually answer, and you walk out with a spec your AI team can actually build.</strong> There&#8217;s no platform to pick: the method works with whatever agent stack your company already chose (Amazon Bedrock AgentCore, Databricks, or something your AI team built themselves), and an AI workspace like Claude Cowork or Claude Code covers the prototype step.</p><p>Grab your notebook.</p><div><hr></div><h2>Decide if the job needs an agent</h2><p>The oldest failure mode in innovation has a name: <strong>a solution in search of a problem.</strong> A technology shows up, it&#8217;s impressive, and whole organizations start asking &#8220;where could we use this?&#8221; The question is backwards, and the people who build things for a living have been saying so for years. <a href="https://urilevine.com/book/">Uri Levine</a>, who co-founded Waze, put the fix on the cover of his book: <strong>fall in love with the problem, not the solution.</strong> Problems are constant; solutions are just the current best way to serve them. <strong>Nobody in your company needs an agent.</strong> They need the backlog to stop growing, the customer answered today, the notes written without staying late.</p><p>AI mandates invert this by design. <strong>&#8220;Agentify support&#8221; hands you a solution with the problem line left blank</strong>, and your own excitement pulls the same direction, because agents are genuinely fun to build. I&#8217;ve caught myself doing it: tool first, problem later, demo nobody asked for. <strong>So the first discipline of this job is to flip the sentence back.</strong> Start from the work, find the problem worth solving, then ask whether an agent is even the right shape of solution. <strong>Your job isn&#8217;t to bring agents to the business.</strong> It&#8217;s to bring the business a problem worth solving, with whatever technology fits.</p><p>The &#8220;right shape&#8221; question has a sharp edge to it. <a href="https://www.anthropic.com/engineering/building-effective-agents">Anthropic&#8217;s Building Effective Agents</a> draws the line I use in every scoping conversation. A workflow follows a path you script in advance: cheaper, faster, predictable. <strong>An agent decides its own path as it goes</strong>, and Anthropic reserves that for problems where <strong>&#8220;it&#8217;s difficult or impossible to predict the required number of steps.&#8221;</strong> In plain terms: if you can draw the flowchart, script the flowchart. <strong>An agent earns its complexity only when every case bends the flowchart.</strong></p><p>I run every candidate job through five questions before committing to anything. The team can answer all five without a single technical term.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zTRw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zTRw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!zTRw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!zTRw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!zTRw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zTRw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3477366,&quot;alt&quot;:&quot;Hand-drawn infographic of work items flowing toward a person holding a checklist of five questions, then through three doors labeled &#8220;Script it&#8221;, &#8220;Agent&#8221;, and &#8220;Not yet&#8221;.&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://www.theaithinker.com/i/206599017?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn infographic of work items flowing toward a person holding a checklist of five questions, then through three doors labeled &#8220;Script it&#8221;, &#8220;Agent&#8221;, and &#8220;Not yet&#8221;." title="Hand-drawn infographic of work items flowing toward a person holding a checklist of five questions, then through three doors labeled &#8220;Script it&#8221;, &#8220;Agent&#8221;, and &#8220;Not yet&#8221;." srcset="https://substackcdn.com/image/fetch/$s_!zTRw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!zTRw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!zTRw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!zTRw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac27a36c-6236-4794-86dd-dbd8e12d5292_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p><strong>Does the work arrive different every time?</strong> If every item looks the same, a script handles it. Variety is the first hint you&#8217;re in agent territory.</p></li><li><p><strong>Does handling it take judgment calls, or rules?</strong> If the team can write the rules on a whiteboard in an hour, write the rules into code instead.</p></li><li><p><strong>What does a wrong answer cost, and can a human catch it in time?</strong> High stakes plus no review point means you&#8217;re not ready for an agent here, whatever the mandate says.</p></li><li><p><strong>Does it happen often enough to matter?</strong> A judgment-heavy task that shows up twice a quarter never pays back the build.</p></li><li><p><strong>Can an agent even reach the work?</strong> If the job lives in phone calls, hallway conversations, and a cheat-sheet in someone&#8217;s drawer, no spec survives contact. </p></li></ol><p><a href="https://cdn.openai.com/business-guides-and-resources/a-practical-guide-to-building-agents.pdf">OpenAI&#8217;s practical guide to building agents</a> puts it bluntly: <strong>validate the use case first, &#8220;otherwise, a deterministic solution may suffice.&#8221;</strong></p><p>Two contrasting tickets show the gate at work.</p><ul><li><p>A password reset arrives identical every time, follows three rules, and costs nothing when retried: script it, done in two weeks.</p></li><li><p>A refund dispute arrives wrapped in order history, customer tone, and policy exceptions: <strong>that&#8217;s judgment, that&#8217;s volume, that&#8217;s agent territory.</strong></p></li></ul><p>The refund example isn&#8217;t even mine: OpenAI&#8217;s guide names &#8220;refund approval in customer service workflows&#8221; as its canonical case of agent-worthy work, the kind <strong>full of &#8220;nuanced judgment, exceptions, or context-sensitive decisions.&#8221;</strong></p><p>And sometimes the gate says no. Telling a team &#8220;you don&#8217;t need an agent, you need a script, and it&#8217;ll be done in two weeks&#8221; feels like walking away from the mandate. It&#8217;s the opposite. <strong>Saying &#8220;no agent needed&#8221; when it&#8217;s true is the cheapest trust you&#8217;ll ever buy,</strong> and it&#8217;s the reason the next team opens their door when you knock.</p><p>For the team you&#8217;re about to meet, the gate says yes. Time to walk in.</p><div><hr></div><h2>Run the three interviews</h2><h3>The use case: a support team under a mandate</h3><p>Time to run the method on something concrete, with you in the driver&#8217;s seat. Picture a mid-size B2B software company. A nine-person customer operations team handles order issues, refund disputes, and account changes: roughly sixty cases a day, forty minutes of handling time on an average case, a backlog that grows a little every month, and a hiring freeze. <strong>Leadership looks at those numbers and hands you the mandate: &#8220;bring AI to support.&#8221;</strong></p><p>The team lead, call her Claire, runs a team that&#8217;s proud of its judgment. They talk customers out of churning every single week. <strong>What Claire hears in &#8220;agentify support&#8221; is a project aimed at her team&#8217;s future</strong>, and she&#8217;s not wrong to hear it that way: plenty of these projects get pitched exactly like that. The fear is rational. <strong>Pretending the fear isn&#8217;t in the room poisons every interview that follows, so name it in the first meeting and don&#8217;t argue it away.</strong> You can&#8217;t logic someone out of a fear the headlines keep feeding. You can only design the project so the fear doesn&#8217;t come true, and let the design speak.</p><p>The posture you take matters as much as anything you say. You&#8217;re not the expert arriving to optimize anyone. <strong>You&#8217;re the apprentice, and they&#8217;re the master craftsman:</strong> you&#8217;re there to learn the job well enough to describe it faithfully. An apprentice studies the master&#8217;s craft; the master stays the master. <strong>That single stance changes what people tell you.</strong> Experts perform for auditors. They teach apprentices.</p><p>One more reframe before the first interview, this time for leadership. &#8220;AI in support&#8221; is not a deliverable. <strong>A deliverable is a number:</strong> minutes back per case, backlog age, first-response time, with quality held steady on the numbers the team already reports, like satisfaction scores and escalation rate. <strong>Commit to measuring before and after.</strong> An agent without a number attached is a demo, not a delivery.</p><p><strong>So you ask Claire for three slots on her team&#8217;s calendar</strong>, spread over one week: an hour with her at a whiteboard, ninety minutes with her two best people, and half a day sitting behind someone while they work. Plus ten recent cases: good, bad, and ugly.</p><p>The interview format descends from <a href="https://www.nngroup.com/articles/contextual-inquiry/">contextual inquiry</a>, a research method Hugh Beyer and Karen Holtzblatt developed at Digital Equipment Corporation in the late 1980s. Its core instruction: <strong>study the work as it happens, not the process as documented, in the posture of an apprentice learning a craft.</strong> Every team has a standard operating procedure, the SOP: the official document that says how the work is supposed to run. It describes the happy path, and the job lives in the exceptions. Never ask a business team &#8220;what are your requirements?&#8221; Nobody who does real work can answer that question. <strong>Ask about last Tuesday instead.</strong></p><p>Three conversations, three different jobs. Here&#8217;s the map.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v1LN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v1LN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!v1LN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!v1LN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!v1LN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!v1LN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3967849,&quot;alt&quot;:&quot;Hand-drawn infographic with three panels: a team lead at a whiteboard sketching a case flow, two teammates replaying a case at a screen, and an observer taking notes behind someone working. Below, a stack of ten annotated cases labeled &#8220;what good looks like&#8221;.&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://www.theaithinker.com/i/206599017?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn infographic with three panels: a team lead at a whiteboard sketching a case flow, two teammates replaying a case at a screen, and an observer taking notes behind someone working. Below, a stack of ten annotated cases labeled &#8220;what good looks like&#8221;." title="Hand-drawn infographic with three panels: a team lead at a whiteboard sketching a case flow, two teammates replaying a case at a screen, and an observer taking notes behind someone working. Below, a stack of ten annotated cases labeled &#8220;what good looks like&#8221;." srcset="https://substackcdn.com/image/fetch/$s_!v1LN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!v1LN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!v1LN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!v1LN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d2f929a-846d-4713-9273-c5cd65f5a0f1_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Interview 1: map the job</h3><p>One hour with Claire and a whiteboard. The goal is the map, not the details. Five questions do the work:</p><ul><li><p>&#8221;Walk me through what happens between a case landing and a case closing. Whiteboard-level.&#8221;</p></li><li><p>&#8221;Where does the time actually go? Not where the process doc says. Where it really goes.&#8221;</p></li><li><p>&#8221;Which cases does your team dread? Which ones do people fight over because they&#8217;re interesting?&#8221;</p></li><li><p>&#8221;What work would your team happily never do again?&#8221;</p></li><li><p>&#8221;What numbers do you already report on?&#8221;</p></li></ul><p>One hour of those questions produces something like this on the whiteboard.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QmqF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QmqF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!QmqF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!QmqF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!QmqF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!QmqF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3116431,&quot;alt&quot;:&quot;Hand-drawn example of a whiteboard map. A case flows from &#8220;lands in queue&#8221; through &#8220;gather context&#8221;, &#8220;decide&#8221;, &#8220;act&#8221;, &#8220;write the wrap-up note&#8221; to &#8220;closed&#8221;. Time markers show where the minutes go, a frown marks the wrap-up notes, a star marks the save-the-customer calls, and a corner box lists the team&#8217;s numbers.&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://www.theaithinker.com/i/206599017?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn example of a whiteboard map. A case flows from &#8220;lands in queue&#8221; through &#8220;gather context&#8221;, &#8220;decide&#8221;, &#8220;act&#8221;, &#8220;write the wrap-up note&#8221; to &#8220;closed&#8221;. Time markers show where the minutes go, a frown marks the wrap-up notes, a star marks the save-the-customer calls, and a corner box lists the team&#8217;s numbers." title="Hand-drawn example of a whiteboard map. A case flows from &#8220;lands in queue&#8221; through &#8220;gather context&#8221;, &#8220;decide&#8221;, &#8220;act&#8221;, &#8220;write the wrap-up note&#8221; to &#8220;closed&#8221;. Time markers show where the minutes go, a frown marks the wrap-up notes, a star marks the save-the-customer calls, and a corner box lists the team&#8217;s numbers." srcset="https://substackcdn.com/image/fetch/$s_!QmqF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!QmqF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!QmqF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!QmqF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97e62e1a-52f8-4620-9ad9-5b9cc06830bd_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Each answer has a destination:</p><ul><li><p>The walkthrough becomes the workflow skeleton.</p></li><li><p>The where-does-time-go answer becomes your pain heatmap.</p></li><li><p>The dread-versus-fight-over answer tells you what the team wants to keep, which matters more than what they want to lose.</p></li><li><p>The last question hands you a value baseline without building a single new dashboard.</p></li><li><p>And the &#8220;happily never again&#8221; question is the one to listen hardest to, because <strong>its answer becomes version one. </strong>For Claire&#8217;s team the answer is unanimous: the case wrap-up notes. Every closed case needs a summary in the CRM, the customer database where every interaction gets logged. Everyone writes them badly at 6pm. Nobody reads them until they desperately need them. Hold that thought.</p></li></ul><h3>Interview 2: learn the craft</h3><p>Ninety minutes with the two people Claire names as her best: Marco, eight years on the team, and Ana, three. Screens open, real cases on them. This is where the agent&#8217;s actual behavior gets specified, one plain question at a time:</p><ul><li><p>&#8221;Show me the last case that took you over an hour. Click through it exactly as you did.&#8221;</p></li><li><p>&#8221;What would you tell a new hire on day one that isn&#8217;t written anywhere?&#8221;</p></li><li><p>&#8221;What&#8217;s open on your screen while you work a case?&#8221;</p></li><li><p>&#8221;What do you find yourself re-explaining or re-looking-up, case after case?&#8221;</p></li><li><p>&#8221;When do you stop and pull in Claire or another team? What&#8217;s the trigger?&#8221;</p></li><li><p>&#8221;What would you never let a new hire do alone in their first month?&#8221;</p></li></ul><p><strong>The answers are the spec, verbatim.</strong> Marco&#8217;s day-one rule: &#8220;if the customer mentions a deadline, handle it today, even if the queue says otherwise.&#8221; That sentence goes straight into the agent&#8217;s instructions. His open tabs: the CRM, the order database, and the refund policy wiki page, which is outdated, and everyone knows exactly which parts to ignore. Write down which parts they ignore. That&#8217;s institutional knowledge no document holds. Then Ana pulls a laminated cheat-sheet out of her desk drawer, and that&#8217;s when you know the interview is working. Every team has one. It&#8217;s never in the wiki. And the never-alone list arrives without hesitation: refunds above a threshold, anything that smells legal, and any promise about delivery dates.</p><h3>Interview 3: shadow the work</h3><p>Half a day sitting behind Marco and Ana while they work real cases. No questions this time. <strong>You&#8217;re watching for the gap between the process document and the craft:</strong> the case that needs an actual phone call to the warehouse, the customer Ana recognizes as burned-twice-before from memory because the CRM has no field for it, the moment Marco overrides the policy page because he knows it&#8217;s stale. <strong>None of that appears in any SOP</strong>, and all of it decides whether an agent succeeds or embarrasses you.</p><p>You leave the shadow session with ten annotated real cases: the input, what the human did, and what &#8220;good&#8221; looked like. <strong>Those ten cases are the most valuable artifact of the entire discovery, because they become the test set your AI team grades the agent against.</strong> One honesty note: your three interviews will surface completely different specifics than these. The questions transfer. The answers won&#8217;t. That&#8217;s the point of asking.</p><p>Three conversations, one notebook full of plain-language answers. Now comes the translation.</p><div><hr></div><h2>Turn the answers into a buildable spec</h2><h3>Write the seven components</h3><p>An agent spec has seven components. Here&#8217;s the part that surprises people: the team just answered all seven, and <strong>nobody in the room had to learn a single AI term.</strong> Five components come straight from interview answers, and the remaining two get derived from those five.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9lwJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9lwJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!9lwJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!9lwJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!9lwJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!9lwJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3654550,&quot;alt&quot;:&quot;Hand-drawn infographic of a bridge. Left side: sticky notes with team quotes like &#8220;what I&#8217;d tell a new hire&#8221; and &#8220;the tabs open on my screen&#8221;. Right side: building blocks labeled instructions, tools, memory, guardrails, evals. Arrows connect each note to its block. A footnote says workflow and model are derived afterwards.&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://www.theaithinker.com/i/206599017?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn infographic of a bridge. Left side: sticky notes with team quotes like &#8220;what I&#8217;d tell a new hire&#8221; and &#8220;the tabs open on my screen&#8221;. Right side: building blocks labeled instructions, tools, memory, guardrails, evals. Arrows connect each note to its block. A footnote says workflow and model are derived afterwards." title="Hand-drawn infographic of a bridge. Left side: sticky notes with team quotes like &#8220;what I&#8217;d tell a new hire&#8221; and &#8220;the tabs open on my screen&#8221;. Right side: building blocks labeled instructions, tools, memory, guardrails, evals. Arrows connect each note to its block. A footnote says workflow and model are derived afterwards." srcset="https://substackcdn.com/image/fetch/$s_!9lwJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!9lwJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!9lwJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!9lwJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74efa1b2-7b5e-49d2-a54f-47d4dcd4f193_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p><strong>Instructions: the agent&#8217;s system prompt.</strong> This is the day-one advice, the rules of thumb, the tone. It comes from &#8221;what would you tell a new hire that isn&#8217;t written anywhere?&#8221; Marco&#8217;s deadline rule goes into the prompt word for word. <strong>Collect the rules as the team says them, not translated into corporate language, because the best performer&#8217;s voice is the spec.</strong> Your data scientist will thank you: half of prompt writing is knowing what the expert actually does.</p></li><li><p><strong>Tools: what the agent can look at and what it can do.</strong> Every tab open during the walkthrough is a read-tool candidate. Every action taken is a write-tool candidate. The split matters because it maps directly to risk: letting the agent read the order database is cheap to grant, letting it issue a refund is not. <strong>Version one gets read access to the CRM, the order database, and the policy wiki, and exactly zero write actions.</strong></p></li><li><p><strong>Memory: what the agent keeps between cases.</strong> This comes from &#8221;what do you keep re-explaining?&#8221; and from Ana&#8217;s burned-twice customer. Three plain kinds cover most teams: facts about repeat customers, resolutions that worked before, and this-week context like a known shipping outage. <strong>The spec says what to remember in the team&#8217;s words, and the AI team picks how to store it.</strong> Skip the vector-database vocabulary entirely; it has no place in a spec meeting.</p></li><li><p><strong>Workflow: the path a case takes, where the agent sits, and what wakes it up.</strong> Interview 1&#8217;s whiteboard map plus the walkthrough give you the steps. Now mark each step with one of three labels: script it, agent judgment, or human only. The gate from earlier applies per-step here, not per-project, and most &#8220;agent&#8221; projects turn out to be a workflow with two or three genuinely agentic steps inside. Then name the trigger, because it&#8217;s the first thing your AI team will ask: what invokes this thing, an event, a schedule, or a person? <strong>Version one&#8217;s trigger is one line: the agent wakes when the human closes the case.</strong></p></li><li><p><strong>Model: the brain you rent.</strong> The business chooses a model without ever hearing a model name, by answering three questions: how much judgment does a case take, how fast does the answer need to come back, and what&#8217;s a case worth in money? <strong>Capability, latency, cost.</strong> Your AI team maps those three answers to an actual model tier, and <strong>your job is keeping the trade-off honest</strong> when someone wants the premium model for wrap-up notes.</p></li><li><p><strong>Guardrails and escalation: what it must never do alone, and who it calls.</strong> The never-alone list transfers verbatim: refunds above the threshold, legal-adjacent language, delivery-date promises, always a human. Escalation deserves the same respect: the trigger points from &#8221;when do you pull in Claire?&#8221; become the agent&#8217;s own escalation rules. <strong>An agent that says &#8220;this one&#8217;s for you, here&#8217;s the file so far&#8221; earns trust faster than one that guesses,</strong> so spec escalation as a feature, not a failure state. Add one more spec line to this bucket: every agent action gets logged and is reviewable. The weekly review you&#8217;re about to set up depends on those logs existing, and legal will ask for the trail before anything launches.</p></li><li><p><strong>Evals: how everyone knows it works.</strong> The ten annotated cases from the shadow session plus the metrics Claire already reports. The launch bar is simple: the agent drafts wrap-up notes for the ten golden cases, and Claire grades them blind against the human-written ones. <a href="https://hamel.dev/blog/posts/evals/">Hamel Husain</a>, whose evals guide is the one practitioners pass around, puts the stakes plainly: &#8220;Unsuccessful products almost always share a common root cause: a failure to create robust evaluation systems.&#8221; <strong>The evals aren&#8217;t the homework at the end of the project. They&#8217;re the first thing your AI team builds.</strong></p></li></ol><p>Now notice what just happened. <strong>The team wrote the spec.</strong> Nobody said &#8220;prompt engineering.&#8221; Nobody explained embeddings. Your entire contribution was asking questions about last Tuesday, sorting the answers into seven buckets, and reading them back until Claire said &#8220;yes, that&#8217;s the job.&#8221;</p><p>A spec in plain language, ready for builders. Almost. There&#8217;s one move left before the hand-off, and it&#8217;s the one that separates today&#8217;s product work from requirements-era product work.</p><h3>Prototype the agent yourself</h3><p>Here&#8217;s the gap in everything so far: three interviews captured what the team says about the work, and the shadow session caught some of what they do. <strong>Neither tells you how they&#8217;ll behave with the agent itself.</strong> Will Marco trust the draft, edit it, or quietly go back to writing notes his way? No document answers that, and a longer spec answers it least of all. In classic product work you already know the move: you don&#8217;t write a requirements document for a website and send it to developers. You click together a prototype in Figma or a no-code tool, put it in front of five users, and watch. <strong>Agents just got the same unlock: with AI coding tools, prototyping the agent is now cheaper than the meeting about the spec.</strong> Here&#8217;s the 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_!lOin!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lOin!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!lOin!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!lOin!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!lOin!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!lOin!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3279637,&quot;alt&quot;:&quot;Hand-drawn loop. Interview notes feed a skill file in an AI workspace, ten real cases go in, drafts come out, a team member reacts with feedback, the skill gets adjusted, and an arrow exits the loop toward a hand-off package.&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://www.theaithinker.com/i/206599017?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn loop. Interview notes feed a skill file in an AI workspace, ten real cases go in, drafts come out, a team member reacts with feedback, the skill gets adjusted, and an arrow exits the loop toward a hand-off package." title="Hand-drawn loop. Interview notes feed a skill file in an AI workspace, ten real cases go in, drafts come out, a team member reacts with feedback, the skill gets adjusted, and an arrow exits the loop toward a hand-off package." srcset="https://substackcdn.com/image/fetch/$s_!lOin!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!lOin!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!lOin!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!lOin!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a4da34-f4a4-417c-828b-3b2cdfcbd932_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So before handing anything to the AI team, <strong>build the smallest thing that behaves like the agent.</strong> In Claude Cowork or Claude Code, it&#8217;s an afternoon of work. Write the instructions component into a skill, with Marco&#8217;s rules verbatim. Drop the ten golden cases in as files. Ask it to draft the wrap-up note for each one. No connectors, no permissions, no access requests: copy-paste stands in for every tool the real agent will get. <strong>What comes out reads like the future agent&#8217;s output, and the output is the only part the team can judge anyway.</strong></p><p><strong>Then test it like a product prototype,</strong> not like a demo. Run the sessions on the <a href="https://youtu.be/U9ZG19XTbd4">five-act interview</a> the structure Google Ventures uses to test design sprint prototypes: a friendly welcome, a few context questions, introduce the prototype (&#8221;it&#8217;s cardboard, you won&#8217;t hurt my feelings&#8221;), real tasks, then a short debrief. Hand Ana a fresh case, let her work it, show the prototype&#8217;s note next to hers, and watch. <strong>The watching surfaces what three interviews didn&#8217;t:</strong> every note the team actually trusts ends with a who-to-call line, and nobody thought to say it out loud. <strong>The spec gains its most important line from twenty minutes of watching, not from any question you asked.</strong> There&#8217;s always a gap between what people tell you and what they do, and it closes only in front of something real.</p><p><strong>The prototype doesn&#8217;t replace the spec, it hardens it.</strong> The spec still tells your AI team what to build. The prototype proves the team will use it, catches misreadings while they&#8217;re an afternoon cheap, and hands your data scientist a tested first draft of the prompt instead of a blank page. <strong>And the fearful room from the kickoff has now touched the thing, shaped it, and seen it stay a drafting assistant.</strong> The hand-off package just gained its most convincing item.</p><h3>Hand it to your AI team</h3><p><strong>The hand-off package is six things,</strong> and none of them is a forty-page document. One page per spec component, in the team&#8217;s own words plus the derived decisions. The ten golden cases with the human answers attached. The prototype with its feedback log: what the team reacted to and what changed. The access list: which systems, read or write, granted to whom. The value baseline from Interview 1. And the escalation contacts with their triggers. <strong>That package answers most of the questions a AI team otherwise burns weeks discovering one standup at a time.</strong></p><p>Each role picks up a different end of it. The data scientist starts from component seven: the golden cases become a test harness before anyone writes a prompt, which is exactly the order Husain&#8217;s evals-first practice prescribes, and the prototype&#8217;s skill file gives them a first prompt draft that already survived contact with the team. The data engineer starts from component two: connectors, permissions, logging. <strong>And you stay in the loop as the translator, running one ritual that outweighs everything else:</strong> a weekly transcript review, with someone from the support team in the room. Marco reading the agent&#8217;s attempts catches misreadings in days. <strong>Without the business in the review loop, misreadings surface at launch, in front of customers, with the team&#8217;s name on the queue.</strong></p><p>Somewhere in that first planning meeting, you&#8217;ll get the pushback. It usually sounds like this: &#8220;Why all this ceremony? The process is documented. We can spec from the SOPs and ship this quarter.&#8221; Take it seriously, because it&#8217;s half right: the SOP is real and useful. It&#8217;s also only the happy path. The value and the risk both live in the exceptions only the team can name: the stale policy page, the burned-twice customer, the warehouse phone call. <strong>An agent spec&#8217;d from documentation automates the part that was never the problem, and breaks publicly on the part that is.</strong> And it breaks in front of a team that was never asked, who now has every reason to let it fail. That&#8217;s not a hypothetical. <a href="https://mlq.ai/media/quarterly_decks/v0.1_State_of_AI_in_Business_2025_Report.pdf">MIT&#8217;s Project NANDA</a> studied hundreds of enterprise GenAI initiatives in 2025 and found <strong>most fail from &#8220;brittle workflows, lack of contextual learning, and misalignment with day-to-day operations&#8221;:</strong> the documentation-spec&#8217;d agent, described in one sentence. One week of light discovery, against a quarter of rebuilding. That&#8217;s the whole trade.</p><p>One last thing about the spec itself: it&#8217;s a living contract, not a document you sign once and file away. When the AI team hits an ambiguity, and they will (&#8221;what exactly counts as legal-adjacent?&#8221;), the answer is another fifteen minutes with Marco, not a guess hidden inside a sprint. <strong>The interviews don&#8217;t end at discovery. They just get shorter.</strong></p><p>The build is underway. Now the part most agent projects skip until it&#8217;s too late: getting a team that fears the thing to want the thing.</p><div><hr></div><h2>Start with the work nobody wants</h2><p>Go back to Claire&#8217;s face in that kickoff meeting. You don&#8217;t fix that with a slide about how AI augments people. Nobody who&#8217;s afraid has ever been reassured by a slide. <strong>You fix the fear with scope.</strong></p><p><strong>The move: version one does only the work the team would happily give away.</strong> Remember the unanimous answer from Interview 1: the wrap-up notes. So version one drafts the case summary after the human closes the case. It talks to no customer. It makes no decision. It sends nothing. Every person on the team keeps every bit of their judgment, and everyone loses their least favorite chore the same week. The French have a name for this kind of maneuver: cheval de Troie, the Trojan horse. <strong>Except this horse gets welcomed for what it visibly removes, not for what it hides.</strong> There&#8217;s no deception in it. The full ladder is printed on the side.</p><p>Be honest about version one&#8217;s number, because it&#8217;s small on purpose. Five minutes of note-writing per case, sixty cases a day: call it five team-hours back daily, plus CRM notes that people can finally use. That&#8217;s real, and it&#8217;s nowhere near the handle-time and backlog numbers from the value conversation with leadership. Say so plainly. <strong>The small number is the design: a small verified win buys the trust, and the patience, for the versions that move the big metrics.</strong> A demo impresses for a week. A chore that stays gone convinces forever.</p><p>There&#8217;s a principled version of &#8220;work nobody wants,&#8221; and it comes from <a href="https://sre.google/sre-book/eliminating-toil/">Google&#8217;s site reliability engineering book</a>, in a chapter by Vivek Rau. He calls it toil: <strong>work that&#8217;s &#8220;manual, repetitive, automatable, tactical, devoid of enduring value, and that scales linearly as a service grows.&#8221;</strong> Read that list back against the wrap-up notes and every box ticks. The scales-linearly attribute even loops back to the volume question in the gate: toil grows with the business, which is exactly why automating it compounds. <strong>Every business team has a toil pile, and they can name it in five seconds when you ask,</strong> which is why the &#8220;happily never again&#8221; question sits in the very first interview.</p><p>From there, the agent climbs a ladder, and the ladder has a 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_!an9a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!an9a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!an9a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!an9a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!an9a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!an9a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3376933,&quot;alt&quot;:&quot;Hand-drawn infographic of a ladder with four rungs labeled &#8220;drafts the notes&#8221;, &#8220;preps the file&#8221;, &#8220;suggests the reply&#8221;, &#8220;handles the routine case&#8221;. A small robot climbs while team members at each rung ask &#8220;can it also...?&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://www.theaithinker.com/i/206599017?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn infographic of a ladder with four rungs labeled &#8220;drafts the notes&#8221;, &#8220;preps the file&#8221;, &#8220;suggests the reply&#8221;, &#8220;handles the routine case&#8221;. A small robot climbs while team members at each rung ask &#8220;can it also...?" title="Hand-drawn infographic of a ladder with four rungs labeled &#8220;drafts the notes&#8221;, &#8220;preps the file&#8221;, &#8220;suggests the reply&#8221;, &#8220;handles the routine case&#8221;. A small robot climbs while team members at each rung ask &#8220;can it also...?" srcset="https://substackcdn.com/image/fetch/$s_!an9a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!an9a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!an9a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!an9a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c70270d-e437-49d5-98a4-f99eb72dfc7e_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Rung one</strong> drafts the documentation after decisions are made.</p></li><li><p><strong>Rung two</strong> pre-assembles the case file before the human opens it: order history, past tickets, the relevant policy section.</p></li><li><p><strong>Rung three</strong> suggests a response the human edits and sends.</p></li><li><p><strong>Rung four</strong> handles one narrow, routine category end to end, with humans reviewing a sample.</p></li></ul><p><strong>The rule that makes this change management instead of scope creep: each rung happens when the team asks for it, not when the roadmap says so.</strong> Three weeks after launch, Marco asks why the agent can&#8217;t also pull the order history before he opens a case. That&#8217;s rung two, requested from the floor. And the ladder isn&#8217;t a trick I invented: it walks the classic automation-staging model that <a href="https://www.semanticscholar.org/paper/14ae6f2231e09e226b99002aa04b5c70f3c59f2b">Parasuraman, Sheridan and Wickens</a> formalized in 2000, from information gathering, to suggested decisions, to supervised action.</p><p>Two failure modes need naming, because the happy path above is only one data point. First, the stall: <strong>if nobody asks for rung two by month two, that&#8217;s data, not patience.</strong> It almost always means version one missed the actual most-hated chore. Rerun the &#8220;happily never again&#8221; question and re-aim; the miss costs weeks, not quarters. Second, the squeeze: <strong>leadership pushing the mandate faster than the floor pulls.</strong> The version-one number is what buys you the time. Report the small win monthly, and name the next rung&#8217;s trigger out loud: &#8220;we expand when the team asks, or when note quality holds for four weeks.&#8221; A named trigger turns &#8220;when will it do more?&#8221; into a measurable answer.</p><p>One caveat at the top rung. <a href="http://www.complexcognition.co.uk/2021/06/ironies-of-automation.html">Lisanne Bainbridge&#8217;s &#8220;Ironies of Automation&#8221;</a> (1983) showed that automating the routine work erodes exactly the skills humans need for the hard cases that remain. The fix belongs in the spec, not in a values statement: humans keep a rotation of routine cases, not just a review sample. <strong>The team stays sharp, and the agent stays supervised by people who still know the craft.</strong></p><p><strong>A few smaller moves compound alongside the ladder.</strong> Let the team name the agent; named things belong to the namer. Keep someone from the team in the weekly transcript review. Publish what the agent can&#8217;t do, the guardrail list, as prominently as what it can. And measure the team&#8217;s time back, never individual productivity: the first dashboard that ranks humans against the agent ends the whole experiment. When someone above you asks how you&#8217;re rolling out agents, here&#8217;s the paragraph to hand them:</p><blockquote><p>Before we build any agent, we run three interviews with the people who do the job. The spec falls out of the answers: what they&#8217;d tell a new hire becomes the instructions, what they look at becomes the tools, what they keep re-explaining becomes the memory, what they&#8217;d never let a new hire do alone becomes the guardrails. We prototype it ourselves and test it with the team before the AI team commits a sprint. And version one starts on the work they&#8217;d pay to stop doing. The agent earns the interesting work later.</p></blockquote><p>One team, one number, one chore removed. That&#8217;s how agent programs actually start.</p><div><hr></div><h2>Run your first interview this week</h2><p>The mandate said &#8220;agentify support.&#8221; What you delivered is narrower than the slide-deck version, and better: one team&#8217;s least-loved work removed, a prototype-tested spec the AI team built from directly, a small number that verifiably moved, and a support team asking what the agent can take on next. <strong>Delivering an agent to the business doesn&#8217;t mean delivering a platform. It means delivering a working relationship,</strong> between a team and a system it helped design.</p><p>The method travels as-is to any team whose work passes the gate. Finance, running invoice exceptions: version one drafts the dispute-resolution notes. Sales ops, answering RFPs (the long questionnaires big customers send before buying): version one drafts the compliance boilerplate everyone hates. HR, fielding onboarding questions: version one drafts FAQ answers from already-resolved tickets. Legal intake, triaging contract requests: version one pre-fills the intake summary. Marketing, reporting: version one drafts the weekly performance commentary. <strong>In every case the pattern holds: the interviews find the toil, the toil defines version one, and the team pulls the agent up from there.</strong></p><p>So here&#8217;s the move for this week. Pick one team. Ask their lead for one hour and ten recent cases. Open with &#8221;what work would your team happily never do again?&#8221; and write down everything that comes after. You&#8217;ll leave the room holding most of a spec, and the team will walk you to the door.</p><p><strong>Your next agent is three conversations away.</strong></p>]]></content:encoded></item><item><title><![CDATA[How to pick the AI agents worth building]]></title><description><![CDATA[Map out the steps your work goes through, from idea to done. Find the one step everything waits on. Aim your next agent at it, not at the part that&#8217;s already fast. Pace everything else to its speed.]]></description><link>https://www.theaithinker.com/p/how-to-pick-the-ai-agents-worth-building</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-pick-the-ai-agents-worth-building</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 29 Jun 2026 11:01:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d772069f-4dfd-4eae-afc4-d934196e2c9c_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>By now the pitch is in every keynote. <a href="https://www.salesforce.com/agentforce/">Salesforce&#8217;s Agentforce</a> is busy turning its customers into &#8220;agentic enterprises.&#8221; <a href="https://www.microsoft.com/en-us/ai/agent-factory">Microsoft</a> ships a program literally named Agent Factory. <a href="https://www.ibm.com/products/watsonx-orchestrate">IBM&#8217;s watsonx Orchestrate</a> sells a control plane for running thousands of agents at once. The message is the same wherever you look, and now you&#8217;ve got the one-line version in your inbox: <strong>&#8221;Where&#8217;s our agent strategy? I want us building these by the dozen.&#8221;</strong> So now you&#8217;re sketching the list. A drafting agent here, a research agent there, a QA agent, a triage agent for the support queue. Twenty workflows, twenty agents, a real factory of them. It feels productive. It will demo beautifully.</p><p>Before you spin up the first one, let me hand you a book. It&#8217;s called <a href="https://en.wikipedia.org/wiki/The_Goal_%28novel%29">The Goal</a>, a novel published in 1984 by Eliyahu Goldratt. I first read it in mechanical engineering school. I went back to it a few weeks ago, and what struck me is how completely it still applies, except the factory I kept picturing was one running on AI agents. Yes, <strong>the book itself is about a real factory:</strong> steel, machines, a loading dock, not a line of code in sight. Trust me anyway, because it is the most useful thing you&#8217;ll read about AI agents all month.</p><p>The hero is Alex Rogo, a plant manager with three months before headquarters shuts his plant for good. Alex&#8217;s one bright spot is a set of new robots that pushed productivity in one department up 36%. Everyone&#8217;s proud of them. Then Alex runs into Jonah, an old physics professor of his who now consults for factories, and Jonah asks three simple questions. <strong>Did the robots increase your sales? Did they reduce your inventory? Did they lower your operating expense?</strong> The answer to all three is no. <strong>The robots made one station faster and the business no healthier.</strong> The plant is still three months from closing.</p><p>Here&#8217;s the part that makes me smile. Goldratt was writing about big, clunky factory robots, the most exciting technology of his day. The technology has changed completely since then. The move people make with it hasn&#8217;t changed at all. <strong>A powerful new tool shows up, everyone rushes to point it at every task at once, and all that activity gets mistaken for real progress.</strong> The tool gets an upgrade every few years. The trap ships unchanged.</p><p>What actually held up is harder and more useful. The Goal forces one question on Alex over and over: what is a company even for? Not to run machines. Not to look modern. Not to automate for the sake of it. The book&#8217;s answer is blunt, and it&#8217;s still exactly right: <strong>a company exists to make money, and every robot, every process, and now every agent is worthless unless it moves that number.</strong> Swap &#8220;robot&#8221; for &#8220;agent,&#8221; and the book turns into a warning for anyone building AI agents inside a company: the factory urge to make more and make them faster is exactly the trap, and <strong>the only thing that counts is whether each one moves the business.</strong></p><p>Agents are genuinely powerful, and building them is my day job. I find the use cases, work with developers to ship them for the company I work for, and build smaller ones for my own work on the side. But here&#8217;s the subtler truth the rush skips over: <strong>a powerful tool tends to create new problems while it solves old ones.</strong> An agent aimed at the wrong step doesn&#8217;t just fail to help. It quietly manufactures more work, a backlog of half-finished output that someone downstream now has to deal with. <strong>So the whole game is where you aim them</strong>, and that turns out to be the part everyone skips.</p><p>So here&#8217;s the bottom line, up front. A factory of agents is not the goal. <strong>The goal is throughput: the actual work that ships and moves the business.</strong> Pour agents onto a step that was never your slow point, and all you do is stack work in front of the one that actually is slow, which today is almost always a person reviewing and verifying what the agents produced. That slow step is your constraint. The winning move is the opposite of agents everywhere: <strong>find your one constraint, point your next agent at it, and pace everything else to its speed.</strong></p><p>Here&#8217;s where this article goes, in four stops.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rb3g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rb3g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!rb3g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!rb3g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!rb3g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rb3g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3488289,&quot;alt&quot;:&quot;hand-drawn black-and-white infographic showing four horizontal stops the article walks through: The trap (a row of agent icons stamping out work that piles into a stack, a dollar sign crossed out), The bottleneck (many arrows funneling to one narrow gate with a queue behind it), The principles (a small circular loop with arrows), The build (a hand at a keyboard with a single agent icon aimed straight at the narrow gate) &#8212; each labeled with a word or two.&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://www.theaithinker.com/i/203930285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white infographic showing four horizontal stops the article walks through: The trap (a row of agent icons stamping out work that piles into a stack, a dollar sign crossed out), The bottleneck (many arrows funneling to one narrow gate with a queue behind it), The principles (a small circular loop with arrows), The build (a hand at a keyboard with a single agent icon aimed straight at the narrow gate) &#8212; each labeled with a word or two." title="hand-drawn black-and-white infographic showing four horizontal stops the article walks through: The trap (a row of agent icons stamping out work that piles into a stack, a dollar sign crossed out), The bottleneck (many arrows funneling to one narrow gate with a queue behind it), The principles (a small circular loop with arrows), The build (a hand at a keyboard with a single agent icon aimed straight at the narrow gate) &#8212; each labeled with a word or two." srcset="https://substackcdn.com/image/fetch/$s_!rb3g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!rb3g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!rb3g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!rb3g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9da562-cff2-4387-b204-25fdbaaa694e_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>The trap.</strong> I&#8217;ll show you why building agents by the dozen stalls, and the factory novel that saw it coming.</p></li><li><p><strong>The bottleneck.</strong> You&#8217;ll find the one step everything waits on, which is rarely where you&#8217;d guess.</p></li><li><p><strong>The principles.</strong> A few ideas from the book for feeding that step instead of burying it under more agents.</p></li><li><p><strong>The build.</strong> What aiming your next agent at the right step actually looks like, hands on keyboard.</p></li></ul><p>By the end, you&#8217;ll have a simple way to look at any agent plan and say where the next agent actually belongs, plus the words to explain it to the people around you. <strong>It&#8217;s the difference between an agent strategy that looks busy and one that moves a number.</strong></p><p>Hard hats on.</p><div><hr></div><h2>Why agents everywhere stalls</h2><p>When the scoreboard is &#8220;agents deployed&#8221; or &#8220;workflows automated,&#8221; you optimize for the count, and the count is the easy thing to grow. Six new agents this quarter, twelve workflows touched, a demo that makes the room lean in. It feels like progress. But Goldratt put the whole trap in one line: &#8221;activating a resource and utilizing a resource are not synonymous.&#8221; In plain English, <strong>keeping something busy is not the same as using it well.</strong> A factory machine stamping out parts nobody ordered is busy, but useless. An agent churning out drafts faster than anyone can check them is busy in exactly the same way. <strong>None of that activity is the business.</strong></p><p>And the bill is already coming due. <a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027">Gartner expects </a><strong><a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027">more than 40% of agentic AI projects to be canceled by the end of 2027</a></strong>, citing runaway cost and unclear business value. That is the same verdict Jonah, the book&#8217;s mentor, gave those factory robots, only now it lands on AI agents instead of machines.</p><p>So keep his three questions on a sticky note. They were written to judge a factory, and they barely change to judge an agent rollout:</p><ul><li><p>Did you ship more of what the business actually needs?</p></li><li><p>Did the pile of half-finished, waiting-on-a-human work get smaller?</p></li><li><p>Did your cost to run the place, the model bills and the hours spent steering, go down?</p></li></ul><p><strong>If you can&#8217;t say yes to at least one without making another worse, you didn&#8217;t buy an agent strategy. You bought robots.</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_!UndJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UndJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!UndJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!UndJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!UndJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!UndJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3705364,&quot;alt&quot;:&quot;hand-drawn two-column diagram titled &#8220;The three questions.&#8221; Left column labeled &#8220;Factory, 1984&#8221; lists three questions: Did sales go up? Did inventory go down? Did operating expense go down? Right column labeled &#8220;Your agent factory, today&#8221; lists the translated versions: Did more actually ship? Did the pile of unreviewed work shrink? Did the cost to run it drop? A big arrow points from the left column to the right, showing the questions carry over almost unchanged.&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://www.theaithinker.com/i/203930285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn two-column diagram titled &#8220;The three questions.&#8221; Left column labeled &#8220;Factory, 1984&#8221; lists three questions: Did sales go up? Did inventory go down? Did operating expense go down? Right column labeled &#8220;Your agent factory, today&#8221; lists the translated versions: Did more actually ship? Did the pile of unreviewed work shrink? Did the cost to run it drop? A big arrow points from the left column to the right, showing the questions carry over almost unchanged." title="hand-drawn two-column diagram titled &#8220;The three questions.&#8221; Left column labeled &#8220;Factory, 1984&#8221; lists three questions: Did sales go up? Did inventory go down? Did operating expense go down? Right column labeled &#8220;Your agent factory, today&#8221; lists the translated versions: Did more actually ship? Did the pile of unreviewed work shrink? Did the cost to run it drop? A big arrow points from the left column to the right, showing the questions carry over almost unchanged." srcset="https://substackcdn.com/image/fetch/$s_!UndJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!UndJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!UndJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!UndJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f435b5-9920-4a3c-b51d-1195797d1ba9_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Those questions come from the only three numbers Goldratt says a company should track. He names them <strong>&#8221;throughput, inventory and operational expense,&#8221;</strong> and once they click you start seeing them everywhere.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3rVy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3rVy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!3rVy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!3rVy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!3rVy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!3rVy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3508889,&quot;alt&quot;:&quot;hand-drawn diagram of three panels side by side, each one a measure with a big arrow showing the goal direction. Throughput with an up arrow, money leaving as shipped work, noted &#8220;for agents: the work that actually ships.&#8221; Inventory with a down arrow, money stuck inside drawn as a stack of unfinished work, noted &#8220;for agents: drafts and PRs waiting on a human.&#8221; Operating expense with a down arrow, drawn as a stack of bills, noted &#8220;for agents: model bills plus the hours spent steering.&#8221; A banner underneath reads: make money = throughput up, the other two down.&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://www.theaithinker.com/i/203930285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn diagram of three panels side by side, each one a measure with a big arrow showing the goal direction. Throughput with an up arrow, money leaving as shipped work, noted &#8220;for agents: the work that actually ships.&#8221; Inventory with a down arrow, money stuck inside drawn as a stack of unfinished work, noted &#8220;for agents: drafts and PRs waiting on a human.&#8221; Operating expense with a down arrow, drawn as a stack of bills, noted &#8220;for agents: model bills plus the hours spent steering.&#8221; A banner underneath reads: make money = throughput up, the other two down." title="hand-drawn diagram of three panels side by side, each one a measure with a big arrow showing the goal direction. Throughput with an up arrow, money leaving as shipped work, noted &#8220;for agents: the work that actually ships.&#8221; Inventory with a down arrow, money stuck inside drawn as a stack of unfinished work, noted &#8220;for agents: drafts and PRs waiting on a human.&#8221; Operating expense with a down arrow, drawn as a stack of bills, noted &#8220;for agents: model bills plus the hours spent steering.&#8221; A banner underneath reads: make money = throughput up, the other two down." srcset="https://substackcdn.com/image/fetch/$s_!3rVy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!3rVy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!3rVy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!3rVy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c891482-38bc-4993-a442-84a9285427d2_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><ul><li><p><strong>Throughput.</strong> The rate the system turns work into money out the door. For your team, it&#8217;s the work that actually ships and changes something for a customer, not the work that merely got generated.</p></li><li><p><strong>Inventory.</strong> Everything you&#8217;ve paid for that&#8217;s sitting around not yet sold. For you, it&#8217;s every draft, pull request, and ticket an agent produced that&#8217;s still waiting on a human to finish it.</p></li><li><p><strong>Operating expense.</strong> What you spend turning inventory into throughput, the cost of running the whole thing. For you, the model bills, the tools, and the hours your people spend steering and reviewing.</p></li></ul><p>The robots moved none of the three. They just made a station that was never the slow part run faster, so half-finished parts piled up behind the slow station instead.</p><p>Here&#8217;s the deeper problem underneath, the one it takes Alex most of the book to see.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DQVb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DQVb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!DQVb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!DQVb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!DQVb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!DQVb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3561189,&quot;alt&quot;:&quot;hand-drawn horizontal chain of five links left to right, each link labeled as a workflow step: idea, draft, build, review, ship. Four links are strong and normal-sized; one link in the middle is drawn thin and strained, clearly the weak one, with work backing up against it. An arrow along the top labeled &#8220;speed of the whole chain&#8221; lines up with the slow link&#8217;s pace, not the fast links&#8217;. A handwritten note reads: making the strong links stronger changes nothing.&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://www.theaithinker.com/i/203930285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn horizontal chain of five links left to right, each link labeled as a workflow step: idea, draft, build, review, ship. Four links are strong and normal-sized; one link in the middle is drawn thin and strained, clearly the weak one, with work backing up against it. An arrow along the top labeled &#8220;speed of the whole chain&#8221; lines up with the slow link&#8217;s pace, not the fast links&#8217;. A handwritten note reads: making the strong links stronger changes nothing." title="hand-drawn horizontal chain of five links left to right, each link labeled as a workflow step: idea, draft, build, review, ship. Four links are strong and normal-sized; one link in the middle is drawn thin and strained, clearly the weak one, with work backing up against it. An arrow along the top labeled &#8220;speed of the whole chain&#8221; lines up with the slow link&#8217;s pace, not the fast links&#8217;. A handwritten note reads: making the strong links stronger changes nothing." srcset="https://substackcdn.com/image/fetch/$s_!DQVb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!DQVb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!DQVb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!DQVb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5bff1d9-40fb-44bc-a8f8-fc2cff2e7623_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A factory isn&#8217;t a set of independent machines you keep individually busy. It&#8217;s <strong>a chain of steps that depend on each other</strong>, and what the whole chain produces is set by its slowest link, not by how hard the other links work. Alex&#8217;s plant was run the other way, every station scored on its own efficiency, every machine pushed to stay busy because an idle machine looked like waste. So the fast stations overproduced, and their output piled up as inventory in front of the slow ones. <strong>Every local chart looked healthy while the plant as a whole lost money.</strong> The robots didn&#8217;t cause that pattern. They poured fuel on it, supercharging a station that was never the constraint.</p><p>Sit with that, because <strong>your company is a factory too, even if nobody calls it one.</strong> Work comes in as a request and leaves as something shipped, and in between it moves down a line: someone drafts, someone reviews, someone approves, someone ships. Agents are the shiny new machines you just bolted onto the front of that line, and they make the drafting station absolutely roar. <strong>A line is only ever as fast as the station every job has to squeeze through, no matter how loud the front end gets.</strong> Build it the plant&#8217;s old way, with each agent scored on how busy it is, and you earn the plant&#8217;s old result.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k1W9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k1W9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!k1W9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!k1W9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!k1W9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!k1W9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3481816,&quot;alt&quot;:&quot;hand-drawn side-by-side comparison. Left, labeled 1984: a fast robot arm stamps out metal parts that stack into a tall pile in front of a slower downstream machine, with a note reading &#8220;efficiency up 36%, still losing money.&#8221; Right, labeled 2026: a row of AI agents generates documents, code, and chat bubbles that stack into an identical pile in front of one tired human reviewer at a desk, with a note reading &#8220;agents everywhere, nothing ships faster.&#8221; A dotted line splits the two scenes; both piles are drawn the same height.&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://www.theaithinker.com/i/203930285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn side-by-side comparison. Left, labeled 1984: a fast robot arm stamps out metal parts that stack into a tall pile in front of a slower downstream machine, with a note reading &#8220;efficiency up 36%, still losing money.&#8221; Right, labeled 2026: a row of AI agents generates documents, code, and chat bubbles that stack into an identical pile in front of one tired human reviewer at a desk, with a note reading &#8220;agents everywhere, nothing ships faster.&#8221; A dotted line splits the two scenes; both piles are drawn the same height." title="hand-drawn side-by-side comparison. Left, labeled 1984: a fast robot arm stamps out metal parts that stack into a tall pile in front of a slower downstream machine, with a note reading &#8220;efficiency up 36%, still losing money.&#8221; Right, labeled 2026: a row of AI agents generates documents, code, and chat bubbles that stack into an identical pile in front of one tired human reviewer at a desk, with a note reading &#8220;agents everywhere, nothing ships faster.&#8221; A dotted line splits the two scenes; both piles are drawn the same height." srcset="https://substackcdn.com/image/fetch/$s_!k1W9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!k1W9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!k1W9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!k1W9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14cadb91-957b-40a9-abee-b8239f5583c5_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That pile is the part most teams never name, and it&#8217;s worse than the factory kind. The robot&#8217;s parts were all good. This pile isn&#8217;t, because some of the output is wrong in confident, plausible ways, so the human downstream is inspecting for quality, not just clearing a backlog. <strong>You paid to create all of it, and none of it counts until someone finishes it and ships it.</strong> Which means the real question isn&#8217;t &#8220;how many agents.&#8221; It&#8217;s <strong>&#8220;where&#8217;s the slow station,&#8221;</strong> and the book finds the answer on a hiking trail.</p><div><hr></div><h2>Find your real bottleneck</h2><p>Goldratt teaches the idea away from the factory, and it&#8217;s the scene that stuck with me for years. Halfway through the book, Alex, the plant manager, gets roped into leading a weekend hike for his son Dave&#8217;s scout troop, and he can&#8217;t keep the line together. The fast kids race ahead, a long gap opens in the middle, and the whole troop falls behind no matter how he reshuffles it. Watching that gap stretch and snap shut, he has the realization the rest of the book turns on. <strong>The troop is a chain, and a chain doesn&#8217;t travel at the speed of its quickest kid. It travels at the speed of its slowest.</strong> That kid is Herbie, a heavy boy lugging an overloaded pack at the very back. No amount of hustle from the kids up front buys back a minute, because sooner or later they all have to wait for Herbie.</p><p>So Alex does two things that feel backwards. He moves Herbie to the front, where nobody can be stuck behind someone slower. Then he opens Herbie&#8217;s pack and parcels the heavy gear out to the fast kids who have room to carry it. Herbie speeds up, and <strong>because Herbie now sets the pace, the whole troop speeds up with him.</strong> Pushing the fast kids was never the answer. Helping the slow one was.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fzvG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fzvG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!fzvG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!fzvG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!fzvG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!fzvG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4425995,&quot;alt&quot;:&quot;hand-drawn two-panel diagram of a scout troop hiking a trail. Top panel, &#8220;Before&#8221;: the line is stretched into a long gap, fast kids far ahead, a heavy boy labeled Herbie lagging at the back under a big pack, the group spread out and behind schedule. Bottom panel, &#8220;After&#8221;: Herbie moved to the front setting the pace, the contents of his pack redistributed into the other kids&#8217; packs, the whole line tight and moving together.&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://www.theaithinker.com/i/203930285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn two-panel diagram of a scout troop hiking a trail. Top panel, &#8220;Before&#8221;: the line is stretched into a long gap, fast kids far ahead, a heavy boy labeled Herbie lagging at the back under a big pack, the group spread out and behind schedule. Bottom panel, &#8220;After&#8221;: Herbie moved to the front setting the pace, the contents of his pack redistributed into the other kids&#8217; packs, the whole line tight and moving together." title="hand-drawn two-panel diagram of a scout troop hiking a trail. Top panel, &#8220;Before&#8221;: the line is stretched into a long gap, fast kids far ahead, a heavy boy labeled Herbie lagging at the back under a big pack, the group spread out and behind schedule. Bottom panel, &#8220;After&#8221;: Herbie moved to the front setting the pace, the contents of his pack redistributed into the other kids&#8217; packs, the whole line tight and moving together." srcset="https://substackcdn.com/image/fetch/$s_!fzvG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!fzvG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!fzvG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!fzvG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b711fe9-70bb-4076-9f3d-2040202fda74_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That&#8217;s the whole theory of constraints in one walk. Every system has one step that sets the pace for all the others, and improving any step that isn&#8217;t that one is a mirage. Goldratt says it flatly: <strong>&#8221;An hour lost at a bottleneck is an hour lost for the entire system. An hour saved at a non-bottleneck is a mirage.&#8221;</strong> Speed up the fast kids and the line just spreads out further. The only move that matters is finding Herbie and taking weight off Herbie.</p><p>So how do you find your Herbie? The book&#8217;s method is refreshingly low-tech: <strong>follow the piles.</strong> Alex doesn&#8217;t spot his slow machines in a report. He finds them by walking the factory floor and seeing the mountains of half-finished parts stacked up in front of them. A bottleneck always looks the same. <strong>There is a pile of work waiting in front of it, because the steps before it keep feeding it faster than it can keep up.</strong> And there are idle, starved steps behind it, because they have run out of work to do while everything is stuck upstream. So don&#8217;t theorize about where your slow step is. <strong>Go find where the work stacks up, and where people are stuck waiting on someone else.</strong></p><p>Run that test on an AI-powered workflow today and the pile shows up in a predictable place. Generation got cheap and fast. A model writes the first draft, the first version of the code, the first pass of almost anything, and it costs almost nothing. <strong>When the cheap step gets ten times cheaper, it stops being the constraint, and the constraint moves to whatever it feeds. What it feeds is judgment.</strong> Someone has to read the output, decide whether it&#8217;s right, catch the confident mistake, and put their name on it. <strong>Review, verification, and the taste to know what&#8217;s worth shipping: that&#8217;s the heavy pack now.</strong></p><p>The receipts back this up. When METR, an AI research lab, <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">ran a randomized trial</a> on experienced developers in 2025, the developers believed AI tools had made them 20% faster, and the measurements showed they&#8217;d actually gone 19% slower. Feeling productive and being productive came apart. <a href="https://dora.dev/dora-report-2025/">Google Cloud&#8217;s 2025 DORA report</a> found the matching pattern at the team level: AI lifts how much you produce, but it lowers delivery stability, because the acceleration exposes the weak step downstream instead of removing it. <strong>The time you save generating gets spent right back auditing, because nobody can review the volume the agents produce.</strong></p><p>And this isn&#8217;t only an engineering story. Point agents at a marketing team and the one brand reviewer who keeps fifty draft variants on-voice becomes the slow step. Point them at support and the person who owns tone and policy is the gate a hundred suggested replies wait behind. <strong>Wherever a human still has to verify the work and own the result, that judgment is the new bottleneck, no matter how cheap the drafting got.</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_!eMgg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eMgg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!eMgg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!eMgg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!eMgg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!eMgg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3849392,&quot;alt&quot;:&quot;hand-drawn horizontal pipeline with four stages &#8212; Idea, Generate, Review, Ship. The Generate stage is wide and busy with several agent icons feeding it, labeled &#8220;fast / cheap.&#8221; Between Generate and Review a thick stack of waiting papers and code files piles up. The Review stage is a single narrow gate with one human icon, labeled &#8220;the constraint.&#8221; The Ship stage at the far right is nearly empty. A caption underneath reads &#8220;adding agents to Generate just grows the queue.&#8221;&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://www.theaithinker.com/i/203930285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn horizontal pipeline with four stages &#8212; Idea, Generate, Review, Ship. The Generate stage is wide and busy with several agent icons feeding it, labeled &#8220;fast / cheap.&#8221; Between Generate and Review a thick stack of waiting papers and code files piles up. The Review stage is a single narrow gate with one human icon, labeled &#8220;the constraint.&#8221; The Ship stage at the far right is nearly empty. A caption underneath reads &#8220;adding agents to Generate just grows the queue.&#8221;" title="hand-drawn horizontal pipeline with four stages &#8212; Idea, Generate, Review, Ship. The Generate stage is wide and busy with several agent icons feeding it, labeled &#8220;fast / cheap.&#8221; Between Generate and Review a thick stack of waiting papers and code files piles up. The Review stage is a single narrow gate with one human icon, labeled &#8220;the constraint.&#8221; The Ship stage at the far right is nearly empty. A caption underneath reads &#8220;adding agents to Generate just grows the queue.&#8221;" srcset="https://substackcdn.com/image/fetch/$s_!eMgg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!eMgg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!eMgg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!eMgg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb551c075-2fa3-4a05-8b99-0f6d49850e70_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now watch what the typical agent factory does: it pours more agents into generation, the step that was already fast. <strong>Every agent you add upstream of the constraint just hands it a taller pile.</strong> That&#8217;s not a throughput machine. It&#8217;s an inventory machine, and a very impressive one. Engineering teams already hit this exact wall with AI coding tools. Output jumped at first, then flattened out, because the extra code just piled up waiting for a human to review it.</p><p>Finding the bottleneck is the easy half. What you do once you&#8217;ve found it is where the throughput actually comes from, and the book gave me a handful of principles for that.</p><div><hr></div><h2>Work your real constraint</h2><p>A quick word on what follows. These are principles from the book, not a rigid checklist to run top to bottom. The order helps, but take the ones that fit your situation and try them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gMDz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gMDz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!gMDz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!gMDz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!gMDz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!gMDz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3451870,&quot;alt&quot;:&quot;hand-drawn loop of five principles for working a constraint. Map the flow (a simple boxes-and-arrows pipeline from idea to shipped). Find the constraint (a magnifying glass over the one step with a queue in front of it). Get more from it (hands lifting weight off that step). Pace the rest to it (a small speed dial set to the slow step&#8217;s pace). Widen it (a wrench tightening the constraint, with a new agent icon pointed at it). The loop closes with a handwritten note: &#8220;the constraint moves, come back around.&#8221;&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://www.theaithinker.com/i/203930285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn loop of five principles for working a constraint. Map the flow (a simple boxes-and-arrows pipeline from idea to shipped). Find the constraint (a magnifying glass over the one step with a queue in front of it). Get more from it (hands lifting weight off that step). Pace the rest to it (a small speed dial set to the slow step&#8217;s pace). Widen it (a wrench tightening the constraint, with a new agent icon pointed at it). The loop closes with a handwritten note: &#8220;the constraint moves, come back around.&#8221;" title="hand-drawn loop of five principles for working a constraint. Map the flow (a simple boxes-and-arrows pipeline from idea to shipped). Find the constraint (a magnifying glass over the one step with a queue in front of it). Get more from it (hands lifting weight off that step). Pace the rest to it (a small speed dial set to the slow step&#8217;s pace). Widen it (a wrench tightening the constraint, with a new agent icon pointed at it). The loop closes with a handwritten note: &#8220;the constraint moves, come back around.&#8221;" srcset="https://substackcdn.com/image/fetch/$s_!gMDz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!gMDz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!gMDz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!gMDz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0418ce0e-68ed-4c27-84cf-bec6e91eb05f_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Map your flow first</h3><p>The honest starting point isn&#8217;t &#8220;find the constraint.&#8221; You can&#8217;t find a thing you can&#8217;t see. <strong>The first move is to draw your actual flow, the path one real piece of work takes from idea to shipped.</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_!4L4K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4L4K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!4L4K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!4L4K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!4L4K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!4L4K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3574652,&quot;alt&quot;:&quot;hand-drawn value-stream map. A horizontal row of labeled boxes for the steps of a workflow: request, spec, build, review, approve, ship. Between each pair of boxes a small clock or zig-zag wait marker with a time under it (for example &#8220;2 hours&#8221;, &#8220;3 days&#8221;), and the wait times are visibly much larger than the short work times inside the boxes. A note reads: most of the time is spent waiting between steps, not inside them.&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://www.theaithinker.com/i/203930285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn value-stream map. A horizontal row of labeled boxes for the steps of a workflow: request, spec, build, review, approve, ship. Between each pair of boxes a small clock or zig-zag wait marker with a time under it (for example &#8220;2 hours&#8221;, &#8220;3 days&#8221;), and the wait times are visibly much larger than the short work times inside the boxes. A note reads: most of the time is spent waiting between steps, not inside them." title="hand-drawn value-stream map. A horizontal row of labeled boxes for the steps of a workflow: request, spec, build, review, approve, ship. Between each pair of boxes a small clock or zig-zag wait marker with a time under it (for example &#8220;2 hours&#8221;, &#8220;3 days&#8221;), and the wait times are visibly much larger than the short work times inside the boxes. A note reads: most of the time is spent waiting between steps, not inside them." srcset="https://substackcdn.com/image/fetch/$s_!4L4K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!4L4K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!4L4K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!4L4K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4492bd-d9ac-4466-9581-074cb76c9074_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Put one box per step in a row: request, spec, build, review, approve, ship. Then do the part everyone forgets. Between each pair of boxes, write down how long work usually sits there waiting to be picked up. <strong>In knowledge work, a task spends most of its life parked in a queue, not being worked on</strong>, which is exactly why <a href="https://en.wikipedia.org/wiki/Value-stream_mapping">value-stream mapping</a> puts wait time on the board right next to work time. It&#8217;s also what Alex does when he walks his plant floor instead of reading reports: he follows the piles. Do it on a wall, in half an hour, with the people who actually do the work. They already know where it jams; the map just makes it impossible to deny.</p><h3>Find your one real constraint</h3><p>With the map and its wait times in front of you, the biggest pile of waiting work usually points straight at your bottleneck.</p><p>Right now, for most teams using AI, that slow step is review. <strong>Generation got cheap, so work piles up wherever a human still has to read it, judge it, and sign off.</strong> But usual is not the same as always, and reaching for the fashionable answer is its own trap. Look at your own map and check. For one team the slow step is writing the spec, because nothing gets built until the requirements are nailed down. For another it&#8217;s pulling the data, because one tricky query sits between every question and a real answer. For another it&#8217;s the security sign-off, or the final deploy, or any step that hangs on a rare approval.</p><p><strong>Notice that none of those is a person. It&#8217;s a step in the process</strong>. The reviewer is not your bottleneck; the review step is. The difference matters, because you fix a step, you don&#8217;t fix a human. <strong>Find the step where work piles up, name it out loud, and write it down before you spend a dollar.</strong></p><h3>Get more out of it before you spend</h3><p>Before you spend a dollar widening the slow step, get more out of the capacity it already has. This is the cheapest win there is, and the book makes it concrete.</p><p>In Alex&#8217;s plant, the bottleneck machines sat idle during lunch, because the operators all broke at the same time. So they staggered the breaks and the machines ran straight through: same machines, more output, zero dollars spent. They made two more moves like it. They moved quality inspection to before the bottleneck, so it never wasted a minute on a part that was going to be scrapped later. And they stopped feeding it parts for orders that weren&#8217;t even due, so every hour went to work that actually mattered.</p><p>Run those same three moves on a review step that has become your bottleneck:</p><ul><li><p><strong>Never let it sit idle.</strong> Keep a small batch of work queued and ready in front of it, so the review step never stalls waiting for something to land.</p></li><li><p><strong>Never feed it junk.</strong> Put an AI agent in front of review to do a first pass. It waves through the obviously fine and flags the obviously broken, so the only things that reach a human are the genuine judgment calls.</p></li><li><p><strong>Never feed it work that doesn&#8217;t matter.</strong> Stop sending output to review for a feature that just got cut or a draft nobody asked for. Every review hour should go to something that&#8217;s actually shipping.</p></li></ul><p>None of that costs money or a new hire. <strong>You&#8217;re not making the slow step bigger yet. You&#8217;re making sure not a minute of it is wasted.</strong></p><h3>Pace the rest of the work to it</h3><p>This is the one almost everyone gets wrong, because it feels backwards. Once you know your slow step, you deliberately slow everything else down to match its pace.</p><p>The book calls the mechanism the drum, the buffer, and the rope. <strong>The slow step is the drum: it sets the beat for the whole line.</strong> A small buffer of work sits right in front of it so it never starves. And a &#8220;rope&#8221; holds back the start of the line, releasing new work only as fast as the slow step can actually take it. In the plant, Alex stops dumping raw material onto the floor just to keep people busy, and the mountains of half-finished inventory melt away.</p><p>For an AI workflow it comes down to one rule: <strong>don&#8217;t let your agents generate faster than your slow step can absorb.</strong> In practice you cap how much unreviewed work is allowed to pile up. Say the review step can clear about thirty pull requests a day. You set the limit at roughly a day&#8217;s worth in the queue. When the queue hits that cap, generation pauses, and the people who would have started new work go help clear the backlog instead.</p><p>If that sounds like a Kanban board with <a href="https://en.wikipedia.org/wiki/Kanban_(development)">work-in-progress limits</a>, that is exactly where the idea came from. The rule of thumb is blunt, and it works: <strong>stop starting, and start finishing.</strong></p><h3>Then widen it, and aim your next agent there</h3><p>Only now, after you&#8217;ve squeezed the free gains out of the slow step, do you actually spend on it. And <strong>the spending goes to the slow step, never to the part that&#8217;s already fast.</strong></p><p>When Alex&#8217;s team ran out of no-cost tricks, they got their hands dirty. They hauled two old machines out of storage to take some load off the bottleneck, and they sent the overflow to an outside vendor. Not elegant, but it widened the exact step that was holding the whole plant back.</p><p>Your version is the same idea, aimed at your slow step. <strong>If review is the bottleneck, the most valuable thing you can build is not another generator. It is something that widens review itself:</strong></p><ul><li><p>A <strong>first-pass review agent</strong> that handles the easy 80% of changes, so a human only has to look at the hard 20%.</p></li><li><p>An <strong>eval</strong> (a quick automated check against examples you trust) that clears the routine cases, so a human only sees the ones it flags.</p></li></ul><p>If your slow step is writing the spec instead, you build the agent that drafts the first version of the spec from the request, so the work starts at &#8220;edit this&#8221; rather than &#8220;write this from a blank page.&#8221; <strong>The agent worth building is the one that widens your slowest step. Every other agent just makes a bigger pile.</strong></p><h3>Expect the constraint to move</h3><p>Here&#8217;s the part that catches people off guard. <strong>The moment you widen one slow step, the bottleneck doesn&#8217;t vanish. It jumps somewhere else.</strong> Fix review, and the slow step becomes deployment, or one overloaded approval, or a sign-off that was invisible only because review was hiding it.</p><p>In the book, once Alex fixes his machines, the constraint leaves the factory floor entirely. It moves first to the market, and then, to everyone&#8217;s surprise, to the company&#8217;s own outdated rules, policies that made sense years before and were now quietly throttling everything. Goldratt&#8217;s word for that trap is inertia: pouring effort into yesterday&#8217;s bottleneck long after it stopped being the problem. Half the time the real constraint isn&#8217;t a machine or even a step. It&#8217;s a rule nobody has revisited, like &#8220;every change needs three approvals.&#8221;</p><p><strong>So this is never a one-time project.</strong> Put a recurring half-hour on the calendar to re-walk your flow map and ask one question: <strong>where does the work pile up now?</strong> The answer will have moved, and so should your next fix and your next agent.</p><p>That is what replaces &#8220;twenty workflows, twenty agents.&#8221; Not a sprawl you launch all at once, but one constraint found, fed, and widened, then the next one. <strong>Fewer agents, pointed at better places, and a number that finally moves.</strong></p><div><hr></div><h2>Build the one that matters</h2><p>So what does building that agent actually look like? Smaller than you&#8217;d think. Say your slow step is review. <strong>You don&#8217;t need a platform or a six-month program.</strong> In <a href="https://code.claude.com/docs/en/sub-agents">Claude Code</a>, the smallest version is a subagent: <strong>a short markdown file (just a plain text file)</strong> in your project that gives an agent a name, a set of tools that can only read and never change anything, and a system prompt (a written instruction) spelling out exactly what to check on a first pass. It reads every change, flags the handful that need a person, and waves the rest through. Your reviewer stops drowning in trivial diffs and spends their scarce attention on the calls that actually need judgment. The same shape works far from code: a subagent that drafts the first version of a spec, or one that writes the first cut of the gnarly query for your analyst to correct.</p><p>The part people skip is what the agent checks against. <strong>The teams getting real mileage out of agents right now aren&#8217;t the ones with the best model, they&#8217;re the ones with the best evals.</strong> An eval is just a test with an answer key. For a first-pass review agent, the answer key is a handful of past changes where you already know which ones had real problems. You run the agent over them and see where it disagrees with you. Does it catch the genuinely broken ones and wave the clean ones through? You tighten its instructions until its calls line up with yours, and only then do you trust it on live work. <a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents">Anthropic&#8217;s own write-up on evals</a> is a hype-free place to start. <strong>An agent at your constraint with no eval behind it is just a faster way to be confidently wrong.</strong></p><p>You don&#8217;t have to do any of this alone, and you shouldn&#8217;t. <strong>The people doing the work already know where it jams.</strong> Put the flow map on a wall and let your engineers point at the step that always stalls; ask the analyst what they wait on; ask the designer what sits in their queue. The framing that tends to land, whether you&#8217;re explaining it to the team or the people who hold the budget, is short: <strong>we don&#8217;t have an agent shortage, we have a constraint we haven&#8217;t named.</strong> Once everyone is looking at the same slow step, the argument about how many agents to build mostly answers itself.</p><p>One last thing, and it&#8217;s the part I find genuinely fun. The specific tools in this article will age fast. A year from now, generation will be cheaper, the agents sharper, and your slow step sitting somewhere new. None of that changes the move. <strong>Draw the flow, find the one step everything waits on, feed it, and aim your next build straight at it.</strong> That is why a novel about a steel plant still reads like a manual for building AI agents. The machines changed. The mistake didn&#8217;t, and neither did the fix.</p>]]></content:encoded></item><item><title><![CDATA[How to get your team past the AI coding plateau]]></title><description><![CDATA[Get a working definition of agentic coding. Walk through the principles and the learnings. Plot your team on the grid. Fill the readiness checklist. Bring the next move to your CTO.]]></description><link>https://www.theaithinker.com/p/how-to-get-your-team-past-the-ai</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-get-your-team-past-the-ai</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 25 May 2026 15:03:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/412445a3-d11a-414b-820c-2aeaf3d73f18_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Your engineering team installed Cursor or Claude Code six months ago. Maybe Copilot before that. They use it daily. <strong>PRs go out a bit faster, code reviews catch a bit less, everyone agrees it&#8217;s good.</strong> And then last week, someone said the quiet part out loud at your team meeting. &#8221;Wait, is this it?&#8221;</p><p>The team learned a new tool. They got a small productivity bump. The next jump never came. <strong>And now, sitting in the all-hands, you can feel the air going out of the room.</strong> You sold this to your CTO as a step-change in time to market. It&#8217;s looking more like an autocomplete upgrade.</p><p>I want you to spend 35 minutes on a video before your team decides this is as good as it gets. It&#8217;s a talk from Szczepan Faber and Mike Nakhimovich, two engineers on Airbnb&#8217;s developer platform team. They explain how their org went from zero to 64% of PRs materialized through agentic coding in nine months. <strong>No marketing slides, no vendor pitch, two practitioners with diagrams and the receipts.</strong></p><div id="youtube2-o6oYc9-X9Iw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;o6oYc9-X9Iw&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/o6oYc9-X9Iw?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>I know. Another AI talk. <strong>But this one is different.</strong> Most agentic engineering announcements recently read like product trailers. Stripe wrote up their <a href="https://stripe.dev/blog/minions-stripes-one-shot-end-to-end-coding-agents">Minions</a>, one-shot end-to-end coding agents that ship code from issue to PR. Spotify wrote up their <a href="https://engineering.atspotify.com/2025/11/spotifys-background-coding-agent-part-1">background coding agent</a> you can fire off from Slack. Both are real engineering teams shipping real systems. But the writing is announcement-shaped, and you walk away knowing what they built, not how to bring your own team along.</p><p>This one is two practitioners walking through their methodology, their mistakes, the proficiency model they built for engineers, and the org structure that scaled it. With actual numbers. With actual diagrams. <strong>Practitioner depth, not announcement depth.</strong></p><p>A disclaimer before you watch. <strong>The talk is from October 2025, which is roughly prehistory in AI time.</strong> A few things they mention have already evolved. Their internal stack is theirs, not yours. You shouldn&#8217;t copy what they did. Since then, Airbnb&#8217;s CEO has publicly stated AI writes nearly 60% of new code at Airbnb (<a href="https://techcrunch.com/2026/05/08/airbnb-says-ai-now-writes-60-of-its-new-code/">TechCrunch coverage of the May 2026 earnings call</a>). The platform team&#8217;s October talk is still the operating manual. The May number is the receipt. The definitions, principles, and learnings travel.</p><p>This post is the distillation. A working definition of agentic coding so you can say it cleanly to your team. The principles their team operated by. The mistakes they fixed. And a small grid you can use to plot your tech function and pick the next project to push for. Watch the video first if you have the time. If you don&#8217;t, <strong>this post stands on its own.</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_!w_c_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w_c_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!w_c_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!w_c_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!w_c_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w_c_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3865730,&quot;alt&quot;:&quot;hand-drawn black-and-white infographic showing five horizontal stops the article walks through &#8212; Plateau, Definition, Principles, Learnings, Grid &#8212; each represented by a small icon and labeled with what to expect.&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://www.theaithinker.com/i/199143416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn black-and-white infographic showing five horizontal stops the article walks through &#8212; Plateau, Definition, Principles, Learnings, Grid &#8212; each represented by a small icon and labeled with what to expect." title="hand-drawn black-and-white infographic showing five horizontal stops the article walks through &#8212; Plateau, Definition, Principles, Learnings, Grid &#8212; each represented by a small icon and labeled with what to expect." srcset="https://substackcdn.com/image/fetch/$s_!w_c_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!w_c_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!w_c_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!w_c_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b886815-e430-4cf8-abee-d6487819d278_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>The plateau.</strong> I&#8217;ll show you why AI coding tools alone gave your team a small bump and stalled.</p></li><li><p><strong>The definition.</strong> I&#8217;ll give you a clean working definition of agentic coding to quote to your team.</p></li><li><p><strong>The principles.</strong> I&#8217;ll walk you through the org moves Airbnb&#8217;s team built around the tools.</p></li><li><p><strong>The learnings.</strong> I&#8217;ll point out the post-mortems you&#8217;d repeat without them.</p></li><li><p><strong>The grid.</strong> I&#8217;ll hand you a four-cell grid to plot your team and pick the next move.</p></li></ul><p>By the end, you&#8217;ll have the working definition, the principles, the learnings, and a four-cell grid plotted with your tech team&#8217;s location and a next-move sentence. You&#8217;ll also walk away with a 7-category readiness checklist you can paste into a Google Doc and fill in row by row. <strong>You walk away with the conversation to have with your CTO on Monday, and a way to reframe AI tool ROI as agentic coding maturity.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://docs.google.com/document/d/11BG_m9-e0kcuwVp-ycy9fO6kcHhIeH6elt8BMoRvbqM/edit?usp=sharing&quot;,&quot;text&quot;:&quot;Read the checklist&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://docs.google.com/document/d/11BG_m9-e0kcuwVp-ycy9fO6kcHhIeH6elt8BMoRvbqM/edit?usp=sharing"><span>Read the checklist</span></a></p><p>Let&#8217;s pin it down.</p><div><hr></div><h2>Name the plateau</h2><p>Every team is hitting the same wall right now. The AI coding tool went in, the productivity bump was real, and then nothing. The team starts wondering out loud whether they bought the future or just a faster autocomplete. <strong>Naming the wall is the first move, because the wall has a shape and the shape tells you what comes next.</strong></p><p>Airbnb&#8217;s platform team measured it. They ran the velocity numbers across three engineer cohorts. Non-AI users moved at the team&#8217;s baseline pace. AI-aided non-agentic users (the autocomplete-and-chat crowd) shipped PRs at +27% velocity. Full agentic users shipped at +38%. <strong>The eleven-point gap between tools-only and agentic is the ceiling teams hit when they stop at the tool.</strong> That gap is not a tool failure. It&#8217;s the natural plateau most teams sit on right now.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KrBZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KrBZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!KrBZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!KrBZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!KrBZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!KrBZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2563125,&quot;alt&quot;:&quot;hand-drawn bar chart with three vertical bars representing PR velocity uplift: non-AI users at 0%, AI-aided tools-only at 27%, and full agentic coding at 38%. A curly brace between the second and third bars highlights the eleven-point gap, labeled &#8220;where infrastructure, practice, and leadership live.&#8221;&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://www.theaithinker.com/i/199143416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn bar chart with three vertical bars representing PR velocity uplift: non-AI users at 0%, AI-aided tools-only at 27%, and full agentic coding at 38%. A curly brace between the second and third bars highlights the eleven-point gap, labeled &#8220;where infrastructure, practice, and leadership live.&#8221;" title="hand-drawn bar chart with three vertical bars representing PR velocity uplift: non-AI users at 0%, AI-aided tools-only at 27%, and full agentic coding at 38%. A curly brace between the second and third bars highlights the eleven-point gap, labeled &#8220;where infrastructure, practice, and leadership live.&#8221;" srcset="https://substackcdn.com/image/fetch/$s_!KrBZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!KrBZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!KrBZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!KrBZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d72b116-6430-4e03-bcb4-86a512765300_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One honest caveat before we keep going. The wider data is messier than Airbnb&#8217;s three bars suggest. Google Cloud&#8217;s <a href="https://dora.dev/dora-report-2025/">2025 DORA report</a> found individual output rises while team delivery stays flat. <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">METR&#8217;s July 2025 RCT</a> found experienced open-source devs were 19% slower with AI tools, while they believed they were 20% faster. <strong>Airbnb&#8217;s three bars are one of the cleanest team-level signals we have, not the universal shape.</strong> Treat them as the strongest existing public benchmark, not the law of nature.</p><p>Three things sit inside that eleven-point gap.</p><ul><li><p>The first is <strong>practice maturity</strong>: how engineers actually use the tool day to day, whether they auto-approve, whether they review every diff, whether they push back when the agent is confidently wrong.</p></li><li><p>The second is <strong>org infrastructure</strong>: the paved paths, the internal champions, the sandboxed environments, the MCP servers that wire internal context into the loop.</p></li><li><p>The third is <strong>leadership conviction</strong>: whether the org frames agentic coding as a step-change worth funding or a productivity tweak worth tolerating.</p></li></ul><p><strong>Each one is a stop on a journey your team has been walking since the IDE era.</strong> None of them gets fixed by buying a better 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_!_I2o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_I2o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!_I2o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!_I2o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!_I2o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!_I2o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4007457,&quot;alt&quot;:&quot;hand-drawn three-stage timeline showing the evolution of software engineering, from a solo engineer typing alone (Stage 1: Legacy development), to the same engineer with a small agent icon offering autocomplete (Stage 2: AI-assisted), to one engineer steering multiple agents in parallel (Stage 3: Agentic coding).&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://www.theaithinker.com/i/199143416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn three-stage timeline showing the evolution of software engineering, from a solo engineer typing alone (Stage 1: Legacy development), to the same engineer with a small agent icon offering autocomplete (Stage 2: AI-assisted), to one engineer steering multiple agents in parallel (Stage 3: Agentic coding)." title="hand-drawn three-stage timeline showing the evolution of software engineering, from a solo engineer typing alone (Stage 1: Legacy development), to the same engineer with a small agent icon offering autocomplete (Stage 2: AI-assisted), to one engineer steering multiple agents in parallel (Stage 3: Agentic coding)." srcset="https://substackcdn.com/image/fetch/$s_!_I2o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!_I2o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!_I2o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!_I2o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b3e4e9-82bb-4af3-8c9c-7242c7f0705c_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Your team is at Stage 2. The plateau is not a sign you picked the wrong tool. It&#8217;s a sign the next investment is in the things around the tool. That reframe is the one you carry into the leadership conversation. <strong>You bought the engine. Now you&#8217;re missing the chassis.</strong></p><p>Naming the gap is the first move. Naming what agentic coding actually is comes next. That&#8217;s the language you&#8217;ll use upstream.</p><div><hr></div><h2>Define what agentic coding is</h2><p>Part of why your team is stuck in the plateau is that they&#8217;re using one word for two different things. Autocomplete is not agentic coding. Copy-paste from ChatGPT is not agentic coding. A single-shot retrieval over your codebase is not agentic coding. <strong>None of those is the thing Airbnb measured at +38%.</strong> Clean the definition first, then have the budget conversation honestly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0UtW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0UtW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!0UtW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!0UtW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!0UtW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!0UtW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1318513,&quot;alt&quot;:&quot;hand-drawn diagram of the agentic coding loop. An engineer at a laptop writes a spec. The spec feeds into a circular loop containing four labeled nodes: multiple LLM calls, multiple tool and MCP calls, configuration files, and guardrails. The loop outputs a code change. A human reviews the change before it merges into a PR.&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://www.theaithinker.com/i/199143416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn diagram of the agentic coding loop. An engineer at a laptop writes a spec. The spec feeds into a circular loop containing four labeled nodes: multiple LLM calls, multiple tool and MCP calls, configuration files, and guardrails. The loop outputs a code change. A human reviews the change before it merges into a PR." title="hand-drawn diagram of the agentic coding loop. An engineer at a laptop writes a spec. The spec feeds into a circular loop containing four labeled nodes: multiple LLM calls, multiple tool and MCP calls, configuration files, and guardrails. The loop outputs a code change. A human reviews the change before it merges into a PR." srcset="https://substackcdn.com/image/fetch/$s_!0UtW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!0UtW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!0UtW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!0UtW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868fb635-3be2-44ce-aa50-f80858ab0b30_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>An engineer writes a short spec or prompt. That spec kicks off an autonomous loop. Inside the loop, an LLM is called several times. Tools and MCPs are called several times. The loop loads config files (AGENTS.md, CLAUDE.md, cursor rules) and runs against guardrails. Out the other side comes a materialized code change. A human reviews every line before it merges. <strong>The thing that makes it agentic is the autonomy in the middle, not the input or the output.</strong></p><p>The engineer doesn&#8217;t know exactly what&#8217;s happening in there. Szczepan put it bluntly:</p><blockquote><p>An engineer who is leveraging an agentic tool, you don&#8217;t know how many [calls happen]. You start your agentic session, but you don&#8217;t know exactly what prompts the agentic tool will use when it calls LLMs. You don&#8217;t know exactly how many times it&#8217;s going to call LLMs. You don&#8217;t know exactly what tools it&#8217;s going to use.</p></blockquote><p><strong>That uncertainty is the point.</strong> The loop owns the path. You own the spec and the review.</p><p>Three things people call agentic coding that aren&#8217;t. Autocomplete in your IDE is not agentic coding (one-shot, no tool calls). Pasting code into a chat window and copying the answer back is not agentic coding (no loop, no autonomy). A single-shot RAG search returning a snippet is not agentic coding (no decision-making, no tool composition). Szczepan made the same point.</p><blockquote><p>That&#8217;s not where the magic happens. This is not this paradigm shifting change where a human engineer can steer multiple agentic sessions and materialize code changes.</p></blockquote><p><strong>The +27% in the velocity chart is what you get from those. The +38% is what you get from the loop.</strong></p><p><strong>The cleanest way to explain the shape to leadership is borrowed from pair programming.</strong> You probably have engineers who&#8217;ve done it. In classic pair programming, the driver holds the keyboard and is tactical. The navigator looks at the whole forest and is strategic. They alternate roles through the day. Agentic coding flips that into something stable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RBpe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RBpe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!RBpe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!RBpe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!RBpe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!RBpe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4519234,&quot;alt&quot;:&quot;hand-drawn side-by-side comparison. Left panel: two engineers at one laptop in classic pair programming, one as the tactical driver at the keyboard, the other as the strategic navigator looking at the screen, alternating roles. Right panel: one engineer as the permanent navigator gesturing at the screen, a robot as the permanent driver at the keyboard materializing code.&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://www.theaithinker.com/i/199143416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn side-by-side comparison. Left panel: two engineers at one laptop in classic pair programming, one as the tactical driver at the keyboard, the other as the strategic navigator looking at the screen, alternating roles. Right panel: one engineer as the permanent navigator gesturing at the screen, a robot as the permanent driver at the keyboard materializing code." title="hand-drawn side-by-side comparison. Left panel: two engineers at one laptop in classic pair programming, one as the tactical driver at the keyboard, the other as the strategic navigator looking at the screen, alternating roles. Right panel: one engineer as the permanent navigator gesturing at the screen, a robot as the permanent driver at the keyboard materializing code." srcset="https://substackcdn.com/image/fetch/$s_!RBpe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!RBpe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!RBpe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!RBpe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77667215-3d5b-4270-bfcc-15d3cd341caf_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The engineer becomes the permanent navigator. The agent becomes the permanent driver. The engineer steers the session with chat, click, voice, or image. The agent materializes the code. Szczepan said it directly:</p><blockquote><p>Agentic coding is where a developer becomes this permanent navigator and it&#8217;s steering that agentic session, and an agent or your tool is materializing code changes.</p></blockquote><p><strong>The leadership analogy travels because every CTO over the age of 35 has done pair programming.</strong></p><p>The technical version of the analogy is sharper. What the navigator is actually doing has a name. Andrej Karpathy <a href="https://x.com/karpathy/status/1937902205765607626">coined &#8220;context engineering&#8221;</a> in June 2025 as the successor to prompt engineering. He called it &#8221;the delicate art and science of filling the context window with just the right information for the next step.&#8221; That&#8217;s the navigator&#8217;s job. <strong>Pair programming is the analogy that lands. Context engineering is the technical second skin.</strong></p><p>Now that you can name it, here&#8217;s what Airbnb&#8217;s team learned about making it actually pay off.</p><div><hr></div><h2>Borrow these principles</h2><p>The tool was the easy part. The principles are the actual work. None of these cost engineering headcount. <strong>All of them are decisions you can push for from where you sit.</strong> Here are five that travel from Airbnb&#8217;s context to almost any other org.</p><h3>Start with a bold vision, work backwards</h3><p>Airbnb&#8217;s platform team opened their January 2025 leadership pitch with a single sentence:</p><blockquote><p>AI-powered, agentic coding will eventually replace traditional programming methods. How do we work backwards from that end state?</p></blockquote><p>Then they actually worked backwards. They didn&#8217;t ask &#8220;what experiment do we run next quarter?&#8221; They asked &#8220;what does Step 10 look like?&#8221; and walked backwards to Step 1. Szczepan was direct about why.</p><blockquote><p>If you only think about incremental improvements, it&#8217;s kind of hard to make a big change.</p></blockquote><p><strong>The move is the same for you.</strong> Put the destination on a slide before you put the roadmap on a slide.</p><h3>Use an analogy with leadership</h3><p>The pair-programming analogy didn&#8217;t land at Airbnb because it was clever. It landed because leadership had done pair programming.</p><blockquote><p>The way we&#8217;ve explained that to our leadership at start of 2025, we&#8217;ve used pair programming analogy for this.</p></blockquote><p>Szczepan said. Pick an analogy your leadership already trusts. Map agentic coding into it. <strong>Leadership conversations don&#8217;t move on facts. They move on framings your audience already believes.</strong> If they came from a team that used trunk-based development, talk in those terms. If they came from agile, talk in those terms.</p><h3>Measure holistically, never personally</h3><p>The default trap is to pick one number. Velocity goes up. Ship it. Sentiment goes down. Drop it. <strong>Airbnb uses three lenses together, never individually:</strong> developer sentiment from quarterly surveys, tool adoption across surfaces and PRs, and engineering output like PR velocity aggregated across the team.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KEnH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KEnH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!KEnH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!KEnH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!KEnH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!KEnH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2073002,&quot;alt&quot;:&quot;hand-drawn three-panel diagram. Panel 1 shows a thought bubble labeled &#8220;Sentiment, do engineers feel the tool is helping?&#8221; Panel 2 shows a bar chart labeled &#8220;Adoption, who is using it on which surfaces.&#8221; Panel 3 shows a line graph labeled &#8220;Engineering output, aggregated team velocity.&#8221; A banner underneath reads &#8220;Used together. Aggregated. For insight, not oversight.&#8221;&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://www.theaithinker.com/i/199143416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn three-panel diagram. Panel 1 shows a thought bubble labeled &#8220;Sentiment, do engineers feel the tool is helping?&#8221; Panel 2 shows a bar chart labeled &#8220;Adoption, who is using it on which surfaces.&#8221; Panel 3 shows a line graph labeled &#8220;Engineering output, aggregated team velocity.&#8221; A banner underneath reads &#8220;Used together. Aggregated. For insight, not oversight.&#8221;" title="hand-drawn three-panel diagram. Panel 1 shows a thought bubble labeled &#8220;Sentiment, do engineers feel the tool is helping?&#8221; Panel 2 shows a bar chart labeled &#8220;Adoption, who is using it on which surfaces.&#8221; Panel 3 shows a line graph labeled &#8220;Engineering output, aggregated team velocity.&#8221; A banner underneath reads &#8220;Used together. Aggregated. For insight, not oversight.&#8221;" srcset="https://substackcdn.com/image/fetch/$s_!KEnH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!KEnH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!KEnH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!KEnH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1b1a8a8-056d-4a51-95d7-fdcd3c81498a_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The philosophy slide from their talk is forwardable on its own.</p><blockquote><p>Our aim is to learn how AI impacts developer experience and software quality so we can improve both. Not to micromanage or rank individual performance. Focus on insight, not oversight.</p></blockquote><p>This is the principle to use when leadership asks for ROI metrics that don&#8217;t exist yet. <strong>The answer is not one metric.</strong> The answer is three, read together, looked at the team level. If you want a public framework they&#8217;ve heard of, Airbnb&#8217;s three lenses overlap with what <a href="https://getdx.com/news/introducing-the-dx-core-4/">DX calls the Core 4</a> (Noda and Tacho, January 2025): Speed, Effectiveness, Quality, Impact. Same principle: never one number, never per-individual.</p><h3>Meet developers where they are</h3><p>Sixty percent of Airbnb&#8217;s engineers prefer remote workspaces. Forty percent prefer local. IDE lovers stayed in IntelliJ. CLI lovers stayed in Vim. Mike tried the migration play once.</p><blockquote><p>We considered, maybe for a few days, grabbing all of our IntelliJ users and moving them over to VS Code. That lasted for a few days before I had to fear for my life that someone would come after me.</p></blockquote><p>He said. <strong>The principle: build parity across surfaces, not migrations.</strong> Or as Mike put it elsewhere:</p><blockquote><p>We don&#8217;t have one typical engineer at Airbnb.</p></blockquote><p>You probably don&#8217;t either.</p><h3>Invest in the org around the tool</h3><p><strong>This is the biggest gap most teams skip.</strong> The tool ships. The infra doesn&#8217;t. Nobody builds a champions network, no one paves the install path, no one wires internal context into the agent. Airbnb invested in all three. A champions network of thirty cross-functional engineers (not the core team of four). Paved paths with single-command install, automagic auth, and project templates. Over a dozen internal MCP servers connecting agents to internal systems. Szczepan said the line out loud:</p><blockquote><p>Your agentic tool is not enough. You will have to have a lot of tech around it.</p></blockquote><p>If you want a second public example to back this up, Shopify built the same pattern at roughly 10x the scale. CEO Tobi L&#252;tke&#8217;s leaked AI memo became an internal movement. The eng org built an internal LLM proxy, standardized MCP servers wired to their wiki and PM tool and data warehouse, and bi-annual performance reviews that explicitly evaluate &#8220;AI-reflexivity.&#8221; Two-anchor evidence is sturdier than one-anchor evidence. (<a href="https://www.firstround.com/ai/shopify">First Round wrote it up</a>; <a href="https://www.bvp.com/atlas/inside-shopifys-ai-first-engineering-playbook">Bessemer wrote up the engineering playbook</a>.) <strong>This is the line item to fight for in your next budget cycle.</strong></p><h3>Add three engineering principles</h3><p>Three more principles, briefly. First, wrap open source instead of building your own orchestrator. The rule is &#8220;don&#8217;t build a full orchestrator from scratch,&#8221; not &#8220;wrap whatever&#8217;s hosted externally.&#8221; Even Airbnb wraps their own <code>airchat-cli</code>, not raw OpenAI or Anthropic. In regulated orgs (finance, healthcare, EU-AI-Act-bound), routing internal code through a third-party CLI is a procurement and legal fight, not a one-line decision. <strong>Build the thin wrapper layer locally if compliance demands it.</strong></p><p><strong>Second, bring context to agents through tool calling, not by training models.</strong> &#8221;Tool calling is all you need,&#8221; Mike said. He&#8217;s riffing on the 2017 Transformer paper title. His point: the LLM doesn&#8217;t need bespoke training on your codebase. It just needs the right tools available. Whether tool calling alone is enough versus the richer MCP pattern is contested in 2026. <a href="https://www.anthropic.com/engineering/code-execution-with-mcp">Anthropic&#8217;s November 2025 &#8220;Code execution with MCP&#8221;</a> pushes more sophisticated patterns. Mike&#8217;s line still holds as the directional claim.</p><p>Third, never drop human review on the way to the PR. Szczepan&#8217;s line is the one to forward to anyone tempted to &#8220;ship faster&#8221;:</p><blockquote><p>I don&#8217;t trust the AI. I trust my skill in prompting and using the tools.</p></blockquote><p><strong>The agentic loop ends at the diff.</strong> Every line is reviewed by a human before merge, especially the test code.</p><p>Worth knowing what to avoid too. Here&#8217;s what Airbnb&#8217;s team got wrong before getting it right.</p><div><hr></div><h2>Avoid these mistakes</h2><p>Even Airbnb&#8217;s platform team got things wrong before they got them right. They have four engineers, a dedicated mandate from leadership, and the resources of a 7,000-engineer parent org. They still hit these. <strong>Worth borrowing the post-mortems before you make them yourself.</strong></p><h3>Don&#8217;t bet on a slow curve</h3><p>Airbnb&#8217;s platform team predicted at the start of 2025 that materializing code through agentic sessions would hit 20% to 40% of PRs by the end of the year. By the time they gave their talk in October 2025, they were at 64%.</p><blockquote><p>We were sandbagging them a bit too much, I think, because we were not ambitious enough. It&#8217;s going faster.</p></blockquote><p>Szczepan said. <strong>If the people building the platform underestimated their own curve by a factor of two, the &#8220;wait and see&#8221; position upstream is probably already late.</strong></p><p>There&#8217;s a name for that position. Geoffrey Moore called it &#8220;<a href="https://en.wikipedia.org/wiki/Crossing_the_Chasm">early majority pragmatism</a>&#8221; in Crossing the Chasm (1991). Pragmatists wait for proof. Visionaries (early adopters) ship before the proof exists. Recent commentary suggests consumer GenAI has crossed the chasm; agentic enterprise systems are mid-crossing. <strong>The frame gives you a named, well-known concept to drop in the 1:1:</strong> &#8221;You&#8217;re in classic early majority position. The data suggests the chasm has already been crossed.&#8221;</p><h3>Don&#8217;t build your own orchestrator, wrap one</h3><p>Mike&#8217;s team spent months building an internal agentic orchestrator. Registered agents. Planning chained to coding chained to validation. It was elegant. It never shipped.</p><blockquote><p>AI moves way too fast. We were still planning, figuring out what we were going to do that existed in the market, and the market now is five steps ahead of us. It wasn&#8217;t going to work.</p></blockquote><p>He said. They walked away from the orchestrator and pivoted to a thin shim over <code>airchat-cli</code>.</p><blockquote><p>Can&#8217;t beat them, join them. We pivoted and instead delegated to our Airchat CLI.</p></blockquote><p>The rule for any size team: <strong>if open source is iterating faster than you can ship, wrap it.</strong></p><h3>Slow down before you auto-approve</h3><p>There&#8217;s a temptation, once an engineer gets comfortable with agentic coding, to skip straight to auto-approve. Don&#8217;t. Three things happen when engineers skip the manual-approval stage too fast. PRs get huge. The engineer doesn&#8217;t actually read every line of the diff. <strong>Test code drops in quality first, because test code gets reviewed less carefully than production code.</strong> Airbnb&#8217;s Level 3 (auto-approve plus diff review) is a learned skill, not a default. Szczepan said it cleanly:</p><blockquote><p>An engineer may create very large PRs that they don&#8217;t review fully. They don&#8217;t actually understand and review every single line of code. They may not review test code as eagerly as the production code.</p></blockquote><p><strong>The fix, when you&#8217;re in the loop, is to push back on the tool when it&#8217;s confidently wrong.</strong> Szczepan walked through it.</p><blockquote><p>You don&#8217;t trust it. If something feels suspicious, you ask it: &#8220;Why did you do this in line 120?&#8221; And after a couple of rounds, you get to this satisfying moment where the agentic tool gives up and says, &#8220;Oh yeah, you&#8217;re right. I&#8217;m sorry. I was wrong. Let&#8217;s fix it.&#8221;</p></blockquote><p>That&#8217;s not friction. That&#8217;s the practice.</p><h3>Close the skill gap fast</h3><p>This one comes from Mike&#8217;s lived experience, not a number on a slide. Mike is a college dropout who admits he doesn&#8217;t know Git from the command line. With agents, he ships across multiple languages.</p><blockquote><p>I&#8217;m one of those non-believers. This is all going to be slop. This is all going to be vibe coding. This is going to be worse than what I can write by hand. And when I was using GPT 3.5, that was true. I personally got lapped by agentic coding.</p></blockquote><p>He said. <strong>In Mike&#8217;s team&#8217;s setup, the gap between agentic-fluent and non-agentic engineers widened faster than anyone predicted.</strong></p><p>Definition, principles, learnings. Now plot where you actually are.</p><div><hr></div><h2>Plot your team on the grid</h2><p>Reading the principles and learnings is one thing. Doing something with them this quarter is another. <strong>The grid below is the diagnostic.</strong> It&#8217;s not a model of who you are. It&#8217;s a map of where to invest next.</p><p>The grid has two axes. The vertical axis is median engineer fluency. The horizontal axis is org infrastructure. For the vertical axis, plot the median engineer on your team, not your top performer. Airbnb published a four-level fluency ladder that travels well.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8o8U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8o8U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!8o8U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!8o8U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!8o8U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!8o8U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3605835,&quot;alt&quot;:&quot;hand-drawn four-rung ladder showing the agentic coding fluency journey. Rung 1: First Steps, autocomplete and copy-paste. Rung 2: Agentic Learner, agentic tool with manual approval. Rung 3: Advanced Practitioner, auto-approve and parallel sessions. Rung 4: Pioneer, building MCPs and leading team transformation. A small figure climbs the ladder.&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://www.theaithinker.com/i/199143416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn four-rung ladder showing the agentic coding fluency journey. Rung 1: First Steps, autocomplete and copy-paste. Rung 2: Agentic Learner, agentic tool with manual approval. Rung 3: Advanced Practitioner, auto-approve and parallel sessions. Rung 4: Pioneer, building MCPs and leading team transformation. A small figure climbs the ladder." title="hand-drawn four-rung ladder showing the agentic coding fluency journey. Rung 1: First Steps, autocomplete and copy-paste. Rung 2: Agentic Learner, agentic tool with manual approval. Rung 3: Advanced Practitioner, auto-approve and parallel sessions. Rung 4: Pioneer, building MCPs and leading team transformation. A small figure climbs the ladder." srcset="https://substackcdn.com/image/fetch/$s_!8o8U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!8o8U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!8o8U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!8o8U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585362aa-0174-42ab-b2da-233c624ebc04_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Level 1 is first steps.</strong> Autocomplete, occasional chat, copy-paste from ChatGPT. </p></li><li><p><strong>Level 2 is agentic learner.</strong> Uses an agentic tool with manual approval; improving prompts and configs.</p></li><li><p><strong>Level 3 is advanced practitioner.</strong> Auto-approves, reviews diffs, runs parallel sessions across multiple workspaces.</p></li><li><p><strong>Level 4 is pioneer.</strong> Builds custom MCPs, leads team transformation.</p></li></ul><p><strong>One caveat that matters: Level 4 (pioneer) is an organizational role, not just a personal skill.</strong> It requires platform-team mandate and org permission, not only individual fluency. Pioneers are usually the output of being in Multiplier mode (the top-right cell of the grid), not a prerequisite.</p><p>For the horizontal axis, ask plainly: is there a champions network, paved paths, internal MCP servers, sandboxed environments? Or is everyone on their own? You&#8217;ll know within five minutes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c2YS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c2YS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!c2YS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!c2YS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!c2YS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!c2YS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3329792,&quot;alt&quot;:&quot;hand-drawn 2x2 grid. The vertical axis is median engineer fluency from mostly beginners to mostly power users. The horizontal axis is org infrastructure from none/scattered to paved (champions, MCP servers, sandboxes). The four cells are named: Tourist phase (bottom-left), Hero phase (top-left), Onboarded but underused (bottom-right), Multiplier mode (top-right with a small star). Small arrows point each cell toward Multiplier mode. &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://www.theaithinker.com/i/199143416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn 2x2 grid. The vertical axis is median engineer fluency from mostly beginners to mostly power users. The horizontal axis is org infrastructure from none/scattered to paved (champions, MCP servers, sandboxes). The four cells are named: Tourist phase (bottom-left), Hero phase (top-left), Onboarded but underused (bottom-right), Multiplier mode (top-right with a small star). Small arrows point each cell toward Multiplier mode. " title="hand-drawn 2x2 grid. The vertical axis is median engineer fluency from mostly beginners to mostly power users. The horizontal axis is org infrastructure from none/scattered to paved (champions, MCP servers, sandboxes). The four cells are named: Tourist phase (bottom-left), Hero phase (top-left), Onboarded but underused (bottom-right), Multiplier mode (top-right with a small star). Small arrows point each cell toward Multiplier mode. " srcset="https://substackcdn.com/image/fetch/$s_!c2YS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!c2YS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!c2YS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!c2YS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd446ee8d-7666-41fa-b29e-2102d5e67ac7_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Each cell has a name, a description, and a next-move sentence for you.</p><ul><li><p><strong>Tourist phase (low fluency, low infrastructure).</strong> Everyone copy-pastes from ChatGPT. No champions, no shared standards, no one paving anything.</p><ul><li><p><strong>Next move:</strong> push for one champion in your tech team and one paved tool. Don&#8217;t try to do five things at once. Sequencing matters more here than ambition.</p></li></ul></li><li><p><strong>Hero phase (high fluency, low infrastructure).</strong> One or two senior engineers shipping miracles with agentic coding. The rest of the team hasn&#8217;t moved. The seniors burn out, leave, or get poached.</p><ul><li><p><strong>Next move:</strong> make the cost-of-burnout case to leadership. The hero&#8217;s productivity doesn&#8217;t scale without the infra.</p></li></ul></li><li><p><strong>Onboarded but underused (low fluency, high infrastructure).</strong> The tools exist, the infra is paved, but engagement is flat. Usually a culture gap, not a skills gap.</p><ul><li><p><strong>Next move:</strong> push for three Shopify-style moves. Visible leader use (a senior engineering leader ships a PR with an agent during the next all-hands). A paved-path simplification audit (every extra click between an engineer and an agent kills adoption). And AI-fluency woven into performance reviews, not as a productivity metric but as an expectation. Not more tools.</p></li></ul></li><li><p><strong>Multiplier mode (high fluency, high infrastructure).</strong> This is where Airbnb&#8217;s 64% PR adoption lives. Power users running five parallel sessions, MCP ecosystem growing organically, the working group of champions teaching everyone else.</p><ul><li><p><strong>Next move:</strong> defend the budget, bring product into agentic workflows (PMs prototyping with the same loop), start measuring time-to-market shifts.</p></li></ul></li></ul><p>The 2x2 is the headline. The roadmap lives in a row-by-row diagnostic with seven categories: direction and adoption posture, measurement, tooling stack, internal context, engineer skill journey, org structure, and quality bar. Each category has two or three rows. Each row asks one question. &#8221;What does your team actually have here?&#8221; Fill in the empties. Count them. <strong>Pick one row to push for this quarter. Not five.</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_!IdMw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IdMw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!IdMw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!IdMw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!IdMw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!IdMw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3621892,&quot;alt&quot;:&quot;hand-drawn report-card sheet titled &#8220;Your team&#8217;s roadmap&#8221; with seven horizontal rows labeled with the seven categories of the readiness checklist. Each row has two or three empty checkboxes and hand-drawn underlines suggesting &#8220;fill in your answer here.&#8221; A pencil rests at the bottom-left corner.&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://www.theaithinker.com/i/199143416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="hand-drawn report-card sheet titled &#8220;Your team&#8217;s roadmap&#8221; with seven horizontal rows labeled with the seven categories of the readiness checklist. Each row has two or three empty checkboxes and hand-drawn underlines suggesting &#8220;fill in your answer here.&#8221; A pencil rests at the bottom-left corner." title="hand-drawn report-card sheet titled &#8220;Your team&#8217;s roadmap&#8221; with seven horizontal rows labeled with the seven categories of the readiness checklist. Each row has two or three empty checkboxes and hand-drawn underlines suggesting &#8220;fill in your answer here.&#8221; A pencil rests at the bottom-left corner." srcset="https://substackcdn.com/image/fetch/$s_!IdMw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!IdMw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!IdMw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!IdMw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ed7678-bae3-479e-98b4-97d4c1c7dc35_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://docs.google.com/document/d/11BG_m9-e0kcuwVp-ycy9fO6kcHhIeH6elt8BMoRvbqM/edit?usp=sharing&quot;,&quot;text&quot;:&quot;Read the checklist&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://docs.google.com/document/d/11BG_m9-e0kcuwVp-ycy9fO6kcHhIeH6elt8BMoRvbqM/edit?usp=sharing"><span>Read the checklist</span></a></p><p>Paste it into a Google Doc, fill in the &#8220;Where you are&#8221; column row by row, and bring it to your next 1:1. The empties are your roadmap.</p><p>One honest caveat. This grid is a snapshot of one company&#8217;s landing point and what travels from it. Your context is different. Your org is smaller. The talk is six months old in AI time. <strong>Use the grid as a starting point, not a verdict. Use the checklist as a conversation starter, not a scorecard.</strong> Revisit it in 90 days.</p><p>Once you know where you are, the upstream conversation changes.</p><div><hr></div><h2>Bring it to your CTO on Monday</h2><p>Drop this sentence in the 1:1. Replace the bracketed bits with what you plotted.</p><blockquote><p>Our AI tool was step 1. On the grid, we&#8217;re in [cell name]. On the checklist, we have empties in [row X], [row Y], and [row Z]. The next investment we should make is [the row that unblocks the others]. Here&#8217;s why it matters for time to market.</p></blockquote><p>That&#8217;s the line that reframes the conversation. The unanswerable version is &#8220;what&#8217;s the ROI on our AI coding tool?&#8221; The answerable version is &#8220;where are we on agentic coding maturity, and what&#8217;s the next investment?&#8221; <strong>The grid gives the headline. The checklist gives the specifics.</strong> Your CTO can disagree with the cell. She can argue about the next investment. She can&#8217;t pretend you haven&#8217;t done the work.</p><p>Four moves for the week, in order.</p><ol><li><p><strong>Watch the <a href="https://youtu.be/o6oYc9-X9Iw">35-minute talk</a>.</strong> You can do this over a coffee.</p></li><li><p><strong>Plot your tech function on the grid.</strong> Fifteen minutes.</p></li><li><p><strong><a href="https://docs.google.com/document/d/11BG_m9-e0kcuwVp-ycy9fO6kcHhIeH6elt8BMoRvbqM/edit?usp=sharing">Read the checklist</a></strong>, copy it, fill the &#8220;Where you are&#8221; column row by row. Honest beats complete. Thirty minutes.</p></li><li><p>Schedule a 30-minute 1:1 with your CTO. Send the filled checklist before the meeting. Pick the one row you want her to fund this quarter.</p></li></ol><p>The principles travel. The specifics don&#8217;t. Your context isn&#8217;t theirs. <strong>Trust your read over the diagnostic. </strong>Reply and tell me where you plotted your team!</p>]]></content:encoded></item><item><title><![CDATA[How to build an AI helper for your team with Cowork]]></title><description><![CDATA[Build a skill that knows your context. Open Cowork and follow the article&#8217;s example. Adapt the pattern for OKRs, feedback, or any other workflow. Hand off the routine questions and get focus back.]]></description><link>https://www.theaithinker.com/p/how-to-build-an-ai-helper-for-your</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-build-an-ai-helper-for-your</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 18 May 2026 11:02:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/65758959-b0b0-44c5-ae3b-6064dba71afa_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A colleague pinged me on Slack last month. &#8221;We don&#8217;t have an AI playbook.&#8221; I had heard the same question from four other people that week. Everyone at the company is trying out AI tools right now. They want to know what&#8217;s allowed and what isn&#8217;t. <strong>And nobody wants to be the one who pastes customer data into the wrong tool.</strong></p><p>I said yes, let me build one. Three weeks later, I had three Claude Code skills running. One drafted AI cards from real team questions. One reviewed every card. One shipped the approved cards to Confluence. <strong>I felt proud of what I had built.</strong> I was already planning the next skill, the one that would check every card each month for stale answers.</p><p>Then I sat down and did the math. How many cards would I need to answer every AI question anyone might ask? Roughly 10 approved AI tools. About 10 common questions for each tool. About 10 less-common questions for each. <strong>That comes to one thousand cards.</strong> Cards I would have to update every time a vendor changed a page or legal added a rule. My industrial engineering professors taught us one rule above all others: never produce stock you don&#8217;t have an order for. I had spent three weeks producing stock. So I stopped.</p><p>The second time, I was chasing the same outcome. Answers about AI tools, grounded in our company&#8217;s rules, available to anyone who asks. The first build would have taken me months. The second took one focused afternoon in Cowork. Same use case. Two very different ways to apply AI. <strong>AI doesn&#8217;t make you faster on its own. The direction you pick with AI does.</strong></p><p>There are three acts to this. Each one builds on the last. <strong>I&#8217;ll walk you through all three.</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_!okgZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!okgZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!okgZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!okgZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!okgZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!okgZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3672444,&quot;alt&quot;:&quot;A three-panel infographic previewing the article&#8217;s structure. Panel 1 (&#8221;The story&#8221;): an overflowing stack of Confluence cards on one side, a single tidy context page paired with a skill icon on the other, with an arrow showing the shift from stock to flow. Panel 2 (&#8221;The build&#8221;): a horizontal sequence of small numbered steps representing scaffold, fill the page, install, test, iterate, ship. Panel 3 (&#8221;The pattern&#8221;): a single skill icon at the top with multiple labeled context pages branching off underneath &#8212; AI rules, OKRs, brand voice, feedback.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A three-panel infographic previewing the article&#8217;s structure. Panel 1 (&#8221;The story&#8221;): an overflowing stack of Confluence cards on one side, a single tidy context page paired with a skill icon on the other, with an arrow showing the shift from stock to flow. Panel 2 (&#8221;The build&#8221;): a horizontal sequence of small numbered steps representing scaffold, fill the page, install, test, iterate, ship. Panel 3 (&#8221;The pattern&#8221;): a single skill icon at the top with multiple labeled context pages branching off underneath &#8212; AI rules, OKRs, brand voice, feedback." title="A three-panel infographic previewing the article&#8217;s structure. Panel 1 (&#8221;The story&#8221;): an overflowing stack of Confluence cards on one side, a single tidy context page paired with a skill icon on the other, with an arrow showing the shift from stock to flow. Panel 2 (&#8221;The build&#8221;): a horizontal sequence of small numbered steps representing scaffold, fill the page, install, test, iterate, ship. Panel 3 (&#8221;The pattern&#8221;): a single skill icon at the top with multiple labeled context pages branching off underneath &#8212; AI rules, OKRs, brand voice, feedback." srcset="https://substackcdn.com/image/fetch/$s_!okgZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!okgZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!okgZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!okgZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ecdd352-109b-4f55-a6e3-32ca93d612c7_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Three acts: the story, the build, the pattern.</figcaption></figure></div><ul><li><p><strong>The story.</strong> Why every AI playbook ends up unused. The instinct to build one is universal, but the math breaks every time. I&#8217;ll show you the shape that worked for me instead.</p></li><li><p><strong>The build.</strong> Walk through the build with me in Cowork. The whole thing takes one focused afternoon, end to end. By the time you finish reading, your skill is shipped and ready for your team.</p></li><li><p><strong>The pattern.</strong> The AI helper is one example of a reusable shape. Swap the context page and you have a different helper. OKRs, feedback, brand voice, onboarding: all from the same skill scaffold.</p></li></ul><p>By the end, you will have built an AI helper your team uses. <strong>Teammates ask it first, before they DM you.</strong> The routine questions get answered without you. The complex ones still come to you, but only after the helper has handled what it can. The example I walk through is the one I built: an AI helper for &#8221;can I use this AI tool, and how?&#8221; questions in our specific context. <strong>The same shape works for any routine team question that depends on context, like OKRs, feedback, brand voice, or onboarding.</strong> I&#8217;m sharing the GitHub repo too, so you can clone it and start from a working example: <a href="https://github.com/adamfaik/ai-ask">github.com/adamfaik/ai-ask</a>.</p><p>One prerequisite to follow along. You need Claude Cowork, which is the agentic surface in the Claude desktop app. It comes with any paid Claude plan: Pro, Team, Max, or Enterprise. <strong>The build won&#8217;t work in plain chat mode.</strong></p><p>Let&#8217;s jump into it!</p><div><hr></div><h2>The trap, the prism, the use case</h2><h3>The playbook trap</h3><p>The playbook instinct feels right at first. Cards are the right unit. Each card answers one question. Each card lives in Confluence where everyone can find it. <strong>I just had to write the cards.</strong> That&#8217;s where Claude Code skills came in. Why write a thousand cards by hand when I could build a small factory to produce them?</p><p>So I built three skills, each with a clear job. Each skill produced a clear output for the next one in line. The whole thing was a small assembly line for documentation cards. <strong>Together they would keep the documentation always fresh, always on-brand, always in the right place.</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_!g-hC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g-hC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!g-hC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!g-hC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!g-hC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!g-hC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.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;:3748077,&quot;alt&quot;:&quot;A horizontal flow diagram. A team question enters on the left as a speech bubble (&#8221;Can I use Cursor on my Mac?&#8221;). It flows through three labeled skill boxes left-to-right: Drafter (researches the answer and writes the first draft), Reviewer (runs the card against a quality checklist, with a small dashed arrow looping back to the Drafter for cards that fail), Shipper (formats the card, picks the right labels and parent page, publishes). The output is a finished Confluence card on the right with a &#8220;Published&#8221; stamp, sitting in a stack labeled &#8220;Confluence&#8221;.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A horizontal flow diagram. A team question enters on the left as a speech bubble (&#8221;Can I use Cursor on my Mac?&#8221;). It flows through three labeled skill boxes left-to-right: Drafter (researches the answer and writes the first draft), Reviewer (runs the card against a quality checklist, with a small dashed arrow looping back to the Drafter for cards that fail), Shipper (formats the card, picks the right labels and parent page, publishes). The output is a finished Confluence card on the right with a &#8220;Published&#8221; stamp, sitting in a stack labeled &#8220;Confluence&#8221;." title="A horizontal flow diagram. A team question enters on the left as a speech bubble (&#8221;Can I use Cursor on my Mac?&#8221;). It flows through three labeled skill boxes left-to-right: Drafter (researches the answer and writes the first draft), Reviewer (runs the card against a quality checklist, with a small dashed arrow looping back to the Drafter for cards that fail), Shipper (formats the card, picks the right labels and parent page, publishes). The output is a finished Confluence card on the right with a &#8220;Published&#8221; stamp, sitting in a stack labeled &#8220;Confluence&#8221;." srcset="https://substackcdn.com/image/fetch/$s_!g-hC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!g-hC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!g-hC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!g-hC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a1def1-aab0-4664-a553-1d1ee84a1e23_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Three skills, one assembly line.</figcaption></figure></div><p>The first skill was the <strong>drafter</strong>. I would paste a real team question into it, like &#8221;Can I use Cursor on my Mac?&#8221; The drafter would research the answer. It would search the web for the vendor docs, the official install steps, recent policy updates. Then it would produce a draft card with a consistent structure: a clear title, the answer, the contact for follow-up, links to the official documentation. <strong>The output was a complete first draft, ready for review.</strong></p><p>The second skill was the <strong>reviewer</strong>. It took the drafter&#8217;s output and ran it against a quality checklist. Is the answer specific? Is the contact named? Is the link still live? Are there any AI-policy red flags? If the checklist passed, the card moved on. If it failed, the reviewer suggested fixes and sent the card back to me. <strong>The reviewer was the gatekeeper that kept the factory from shipping bad cards.</strong></p><p>The third skill was the <strong>shipper</strong>. It took an approved card and prepared it for publication. It formatted the markdown for Confluence. It generated the right labels by tool, by topic, by audience. It picked the right parent page in our information architecture. Then it published. <strong>The shipper turned a clean draft into a live page my teammates could actually find.</strong></p><p>I was proud of the architecture. The three skills handed cards to each other in a clean line. Real questions came in on one side. Polished, labeled, published cards came out the other. I was already planning the fourth skill, the one that would crawl every card each month and flag the ones that had gone stale. <strong>The factory would run itself.</strong></p><p>Then I sat down and did the math. How many cards would I need to answer every AI question the company might ask? About 10 approved tools. About 10 common questions for each tool. About 10 less-common questions for each. <strong>That comes to one thousand cards.</strong> A thousand cards I would have to update every time a vendor changed a page or legal added a rule.</p><p>My industrial engineering professors taught us one rule above all others. <strong>Never produce stock you don&#8217;t have an order for.</strong> Toyota built an empire on this idea. Don&#8217;t make the part until someone needs it. The factory I was building would produce stock the team would never visit. So I stopped.</p><h3>What I built instead</h3><p>What did I actually need? An LLM already knows a lot. It has read the Internet many times during training. It can search the web for recent information. <strong>For most questions, it can already give a reasonable answer on its own.</strong></p><p>If a teammate asks &#8221;how do I install Cursor on my Mac?&#8221;, a fresh Claude chat can tell them. It will give the standard install steps from cursor.com. The answer will be correct. <strong>But the answer will be generic.</strong> It will not know that at my company, Cursor requires SSO. It will not know about the Confluence MCP integration. It will not know that autocomplete is disabled on certain file paths.</p><p><strong>The missing piece was a layer of context specific to the company.</strong> What&#8217;s allowed and what isn&#8217;t. Who to contact when something is unclear. What gotchas surprise new joiners. The playbook was trying to be that layer, but it tried to do it as a stack of cards. I needed something different.</p><p>So I built one skill instead. I called it <code>/ai-ask</code>. The skill reads one document on every invocation. That document holds the company-specific layer of context. <strong>One source of truth. Every question pulls from it. Every answer comes out grounded in our reality.</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_!9DHy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9DHy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!9DHy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!9DHy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!9DHy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!9DHy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3473113,&quot;alt&quot;:&quot;A teammate&#8217;s free-form AI question on the left flows into a Claude skill labeled &#8220;ai-ask&#8221; in the middle, which reads from a single document labeled &#8220;company context&#8221;. On the right, the skill returns a two-part structured answer: &#8220;Company context&#8221; followed by &#8220;General guidance&#8221;.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A teammate&#8217;s free-form AI question on the left flows into a Claude skill labeled &#8220;ai-ask&#8221; in the middle, which reads from a single document labeled &#8220;company context&#8221;. On the right, the skill returns a two-part structured answer: &#8220;Company context&#8221; followed by &#8220;General guidance&#8221;." title="A teammate&#8217;s free-form AI question on the left flows into a Claude skill labeled &#8220;ai-ask&#8221; in the middle, which reads from a single document labeled &#8220;company context&#8221;. On the right, the skill returns a two-part structured answer: &#8220;Company context&#8221; followed by &#8220;General guidance&#8221;." srcset="https://substackcdn.com/image/fetch/$s_!9DHy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!9DHy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!9DHy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!9DHy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73583b2f-9d84-4f2c-8e1b-61204cb47554_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">One skill, one company-context page, every team question grounded.</figcaption></figure></div><p>And that&#8217;s when it clicked. <strong>I now see this skill as a prism, like the one on the cover of Pink Floyd&#8217;s Dark Side of the Moon.</strong> Picture it. White light enters one side. The prism refracts it. A rainbow comes out the other.</p><p>In our case, the white light is what the LLM already knows. The Internet, vaguely remembered from training, plus what the model can pull from a web search. The prism is the company-context page. <strong>The rainbow is the answer: what the LLM knows in general, refracted through what is true at my company in particular.</strong></p><p>This is the same logic as just-in-time manufacturing. Don&#8217;t produce stock you don&#8217;t have an order for. Produce the answer when someone asks the question. The context page is the only thing you maintain. Every answer regenerates from it. <strong>You don&#8217;t keep a stack of stale cards.</strong></p><p>The skill re-reads the context page on every invocation. That&#8217;s not a side effect. <strong>It&#8217;s the whole design.</strong> Memory from earlier in the conversation can be stale. The page may have been updated. <strong>Stale answers about policy are worse than no answer at all.</strong></p><h3>The use case: an AI helper</h3><p>So what does this look like in practice? Teammates type <code>/ai-ask</code> followed by their question instead of DM&#8217;ing you. The questions are the kind you have already answered a hundred times: &#8221;Can I use ChatGPT free for this customer feedback?&#8221;, &#8221;Is Cursor approved on my Mac?&#8221;, &#8221;What model should I use for code review?&#8221; <strong>The skill answers all of them in the same shape: company context first, general guidance second.</strong></p><p>The answer they get is grounded in your team&#8217;s rules. The right contact is named. A link to the official documentation is at the end. <strong>They get a real answer, fast, without waiting on you. </strong>What does this deliver for you? Your DMs go down. The team self-serves answers grounded in your rules. <strong>You get your focus back.</strong></p><p>I built mine for AI questions because that&#8217;s the routine question I kept getting. You can see the live code in the public repo at <a href="https://github.com/adamfaik/ai-ask">github.com/adamfaik/ai-ask</a>. <strong>But the same pattern works for any routine team question that depends on company-specific context.</strong> Swap the context page for a different document, and you have a different team helper.</p><p>OKR alignment (does this initiative line up with our quarterly goals?). Feedback reviews (is this the way our team gives feedback?). Brand voice checking (is this on-brand for us?). New-joiner onboarding (who do I ask about X?). <strong>You&#8217;re learning a pattern, not just an AI Q&amp;A bot.</strong></p><p>Open Cowork.</p><div><hr></div><h2>Build the helper in Cowork</h2><p>One focused afternoon, end-to-end. Here are the seven steps you&#8217;ll go through. <strong>Glance at the map before we dive in.</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_!OXzU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OXzU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!OXzU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!OXzU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!OXzU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!OXzU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.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;:3200075,&quot;alt&quot;:&quot;A horizontal flow of seven numbered boxes labeled Step 1 &#8220;Start the skill&#8221;, Step 2 &#8220;Read what was created&#8221;, Step 3 &#8220;Write the company context&#8221;, Step 4 &#8220;Save the .skill file&#8221;, Step 5 &#8220;Test in Chat mode&#8221;, Step 6 &#8220;Iterate by chat&#8221;, Step 7 &#8220;Ship to your team&#8221;. An arrow connects each box to the next. A small note at the bottom indicates that Step 5 happens in Chat mode while the others happen in Cowork.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A horizontal flow of seven numbered boxes labeled Step 1 &#8220;Start the skill&#8221;, Step 2 &#8220;Read what was created&#8221;, Step 3 &#8220;Write the company context&#8221;, Step 4 &#8220;Save the .skill file&#8221;, Step 5 &#8220;Test in Chat mode&#8221;, Step 6 &#8220;Iterate by chat&#8221;, Step 7 &#8220;Ship to your team&#8221;. An arrow connects each box to the next. A small note at the bottom indicates that Step 5 happens in Chat mode while the others happen in Cowork." title="A horizontal flow of seven numbered boxes labeled Step 1 &#8220;Start the skill&#8221;, Step 2 &#8220;Read what was created&#8221;, Step 3 &#8220;Write the company context&#8221;, Step 4 &#8220;Save the .skill file&#8221;, Step 5 &#8220;Test in Chat mode&#8221;, Step 6 &#8220;Iterate by chat&#8221;, Step 7 &#8220;Ship to your team&#8221;. An arrow connects each box to the next. A small note at the bottom indicates that Step 5 happens in Chat mode while the others happen in Cowork." srcset="https://substackcdn.com/image/fetch/$s_!OXzU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!OXzU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!OXzU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!OXzU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e6b541-4bcc-495a-8aec-7b5aed2e55d5_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Seven steps. One afternoon. Step 5 happens in Chat; the rest happen in Cowork.</figcaption></figure></div><p>Before Step 1, a quick setup. Download the Claude desktop app from <a href="https://claude.com/download">claude.com/download</a> if you don&#8217;t have it yet. Sign in with your paid Claude account. Confirm you see three tabs at the top: <strong>Chat</strong>, <strong>Cowork</strong>, and <strong>Code</strong>. <strong>We will spend most of our time in Cowork.</strong> Cowork is the agentic surface that can read and write files, run skills, and operate on a folder. The last step uses Chat to test the finished skill.</p><p>Three things to keep in mind as you go. <strong>The prism page is where the real work lives.</strong> Scaffolding is fast. Every meaningful step is one prompt to Cowork, not manual file editing.</p><h3>Step 1: Start the skill with skill-creator</h3><p>Open Cowork. Below the chat input, click <strong>Work in a project &#8594; Choose a folder</strong>. The native folder picker opens. Navigate to wherever you keep code projects. Mine is <code>~/Documents/GitHub/</code>. Click <strong>New Folder</strong>, name it <code>ai-ask</code>, and select it. <strong>One folder, three jobs: source of truth for editing, install target for Cowork, repo root for the GitHub push later.</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_!zC_H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zC_H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!zC_H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!zC_H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!zC_H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zC_H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:783549,&quot;alt&quot;:&quot;The Cowork home screen with the &#8220;Work in a project&#8221; dropdown open, showing two options: &#8220;Create new project&#8221; and &#8220;Choose a folder&#8221;.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Cowork home screen with the &#8220;Work in a project&#8221; dropdown open, showing two options: &#8220;Create new project&#8221; and &#8220;Choose a folder&#8221;." title="The Cowork home screen with the &#8220;Work in a project&#8221; dropdown open, showing two options: &#8220;Create new project&#8221; and &#8220;Choose a folder&#8221;." srcset="https://substackcdn.com/image/fetch/$s_!zC_H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!zC_H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!zC_H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!zC_H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ed0fed-cbc9-490e-a343-0fbd950ec9ca_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Pick a folder; Cowork operates from there.</figcaption></figure></div><p>Now use Anthropic&#8217;s <code>skill-creator</code> to scaffold the skill. Don&#8217;t write the <code>SKILL.md</code> file by hand. <code>skill-creator</code><strong> interviews you about the skill you want and generates the file structure for you.</strong> Type <code>/skill-cr</code> in the chat input and <code>skill-creator</code> should appear in the autocomplete dropdown. If it isn&#8217;t there, install it from <strong>Customize &#8594; Skills &#8594; + &#8594; Browse skills &#8594; search &#8220;skill-creator&#8221; &#8594; Install</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aWbt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aWbt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!aWbt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!aWbt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!aWbt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!aWbt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:793798,&quot;alt&quot;:&quot;The Cowork chat input showing the autocomplete dropdown with &#8220;skill-creator&#8221; highlighted, including its description about creating new skills.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Cowork chat input showing the autocomplete dropdown with &#8220;skill-creator&#8221; highlighted, including its description about creating new skills." title="The Cowork chat input showing the autocomplete dropdown with &#8220;skill-creator&#8221; highlighted, including its description about creating new skills." srcset="https://substackcdn.com/image/fetch/$s_!aWbt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!aWbt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!aWbt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!aWbt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc164ea03-e8c5-4905-ac53-477773a59c59_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">skill-creator is the scaffolder.</figcaption></figure></div><p>One detail matters before you send the prompt. Switch the model to <strong>Opus 4.7</strong> in the chat input bar. Cowork&#8217;s model picker is session-locked. The choice you make now applies to the whole conversation. <strong>Invest the smart model on the work that defines a system once. Use the efficient model on the daily work that runs that system every day.</strong> Building a skill is the first kind. Using it every Monday is the second.</p><p>Invoke <code>/skill-creator</code> and either paste or dictate this paragraph as the opening brief. <strong>I usually open <a href="https://superwhisper.com/">SuperWhisper</a> and just talk the prompt out loud</strong>, as if I were explaining what I need to a teammate, a friend, or an intern I&#8217;m asking for help. Either way, the content is the same:</p><div class="callout-block" data-callout="true"><p><strong>/skill-creator</strong> I want to build a skill called ai-ask. Its purpose is to answer any AI-related question from someone on my team by combining general AI knowledge with my company&#8217;s specific rules and context. The skill should trigger whenever the user asks about AI tools, models, prompts, data handling, licensing, or AI-related workflows. Examples of phrasings to trigger on: &#8221;can I use X?&#8221;, &#8221;how do I install Y?&#8221;, &#8221;is Z allowed?&#8221;, &#8221;what&#8217;s the best model for...?&#8221;. It takes a free-form question as input. It should always answer in two parts: first the company-specific context (allowed or forbidden tools, data-handling rules, contacts, escalation paths) drawn from a bundled file called company-context.md; second, the general AI guidance (how-to steps, prompt patterns, official documentation links).</p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7Gx2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Gx2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!7Gx2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!7Gx2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!7Gx2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Gx2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:912007,&quot;alt&quot;:&quot;The Cowork chat input shows the long opening prompt pasted in, with the ai-ask project active and Opus 4.7 selected as the model in the input bar.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Cowork chat input shows the long opening prompt pasted in, with the ai-ask project active and Opus 4.7 selected as the model in the input bar." title="The Cowork chat input shows the long opening prompt pasted in, with the ai-ask project active and Opus 4.7 selected as the model in the input bar." srcset="https://substackcdn.com/image/fetch/$s_!7Gx2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!7Gx2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!7Gx2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!7Gx2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c713db-cb25-4609-9cf4-a7de42405a16_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">One paragraph in, the whole skill spec out.</figcaption></figure></div><p><code>skill-creator</code> reads the brief and asks a few clarifying questions. <strong>Your exact questions might be slightly different from mine.</strong> Each session is a little unpredictable, that&#8217;s just how LLMs work. The principle is the same: it fills in the gaps before it starts writing files.</p><p>The first asks <strong>what should go in company-context.md</strong>. Pick <strong>&#8221;I&#8217;ll provide content myself.&#8221;</strong> You&#8217;ll fill the page in the next step. Letting <code>skill-creator</code> interview you for the content here would slow things down for no reason.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!skY7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!skY7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!skY7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!skY7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!skY7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!skY7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:822842,&quot;alt&quot;:&quot;The skill-creator QCM showing question 1 of 3, &#8220;What should I put in company-context.md?&#8221;, with options for a template with placeholders, having Claude ask questions to fill it in, or providing content yourself.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The skill-creator QCM showing question 1 of 3, &#8220;What should I put in company-context.md?&#8221;, with options for a template with placeholders, having Claude ask questions to fill it in, or providing content yourself." title="The skill-creator QCM showing question 1 of 3, &#8220;What should I put in company-context.md?&#8221;, with options for a template with placeholders, having Claude ask questions to fill it in, or providing content yourself." srcset="https://substackcdn.com/image/fetch/$s_!skY7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!skY7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!skY7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!skY7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef59bdaf-eecc-48c5-8869-756cd02a66d1_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Q1: pick &#8220;I&#8217;ll provide content myself.&#8221;</figcaption></figure></div><p>The second asks <strong>how rigorous evaluation should be</strong>. Pick <strong>&#8221;Quick draft only.&#8221;</strong> We don&#8217;t need to test this skill in an industrialized way. We will just try a few real questions on it ourselves in the next step. <strong>A quick draft is enough for that.</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_!-ssQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-ssQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!-ssQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!-ssQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!-ssQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!-ssQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:825168,&quot;alt&quot;:&quot;The skill-creator QCM showing question 2 of 3, &#8220;How rigorous should evaluation be?&#8221;, with options for a full eval loop (recommended) or quick draft only.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The skill-creator QCM showing question 2 of 3, &#8220;How rigorous should evaluation be?&#8221;, with options for a full eval loop (recommended) or quick draft only." title="The skill-creator QCM showing question 2 of 3, &#8220;How rigorous should evaluation be?&#8221;, with options for a full eval loop (recommended) or quick draft only." srcset="https://substackcdn.com/image/fetch/$s_!-ssQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!-ssQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!-ssQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!-ssQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F034bfe2c-53b0-4b06-9775-e6a62de6b113_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Q2: pick &#8220;Quick draft only.&#8221;</figcaption></figure></div><p>The third asks <strong>where the final skill should live</strong>. Pick <strong>&#8221;Both.&#8221;</strong> You need both formats for two different jobs. The folder is what makes editing and <code>git init</code>-ing work. The <code>.skill</code> package is what Cowork installs in Step 4. <strong>Without the package, you cannot install the skill the right way.</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_!mghy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mghy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!mghy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!mghy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!mghy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!mghy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:825833,&quot;alt&quot;:&quot;The skill-creator QCM showing question 3 of 3, &#8220;Where should the final skill live?&#8221;, with options for the ai-ask folder, packaged as .skill file, or both.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The skill-creator QCM showing question 3 of 3, &#8220;Where should the final skill live?&#8221;, with options for the ai-ask folder, packaged as .skill file, or both." title="The skill-creator QCM showing question 3 of 3, &#8220;Where should the final skill live?&#8221;, with options for the ai-ask folder, packaged as .skill file, or both." srcset="https://substackcdn.com/image/fetch/$s_!mghy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!mghy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!mghy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!mghy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c9e2f94-6ace-4909-b4de-228a6af644e9_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Q3: pick &#8220;Both.&#8221; This matters more than it looks.</figcaption></figure></div><p>After the third answer, <code>skill-creator</code> lays out its plan and starts writing files. The completion summary at the end is worth reading. It surfaces design choices the skill author would otherwise miss: the &#8221;Read it fresh every time&#8221; anti-staleness rule, the &#8221;Don&#8217;t invent rules&#8221; guardrail, the two-part answer format with exact headings. <strong>Once it finishes, the project folder holds </strong><code>SKILL.md</code><strong> and an empty </strong><code>company-context.md</code><strong>.</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_!nVAk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nVAk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!nVAk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!nVAk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!nVAk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!nVAk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1030291,&quot;alt&quot;:&quot;Cowork shows the completion summary from skill-creator, describing what was built including the two-part answer format in SKILL.md and the placeholder structure in company-context.md, with both files visible in the project pane.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cowork shows the completion summary from skill-creator, describing what was built including the two-part answer format in SKILL.md and the placeholder structure in company-context.md, with both files visible in the project pane." title="Cowork shows the completion summary from skill-creator, describing what was built including the two-part answer format in SKILL.md and the placeholder structure in company-context.md, with both files visible in the project pane." srcset="https://substackcdn.com/image/fetch/$s_!nVAk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!nVAk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!nVAk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!nVAk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c786f46-e95e-46b3-a1b9-e7c43126e09e_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Skill is ready. Here&#8217;s what got built.</figcaption></figure></div><p>The scaffold is done. Now we read what Cowork actually made.</p><h3>Step 2: Read what skill-creator created</h3><p>Before going further, take a minute to read what <code>skill-creator</code> actually generated. Open <code>SKILL.md</code> in your text editor or in Cowork&#8217;s preview pane. <strong>Make sure the skill matches what you asked for.</strong></p><p>This file is what Claude reads every time someone calls <code>/ai-ask</code>. It has YAML frontmatter at the top (name and description), then a body that defines: when the skill should trigger, what input it takes, what shape the answer must follow, and the rule that it must always read <code>company-context.md</code> first.</p><p>If something is missing or off, ask <code>skill-creator</code> in the same chat to update it. The skill is just text. You can iterate. <strong>Don&#8217;t move on until you trust the </strong><code>SKILL.md</code><strong>.</strong></p><p>For reference, you can see the version I ended up with on GitHub: <a href="https://github.com/adamfaik/ai-ask/blob/main/SKILL.md">github.com/adamfaik/ai-ask/blob/main/SKILL.md</a>. Your version will look similar but tuned to your own brief.</p><p>With the skill itself in shape, we move to the most important step: writing the company context.</p><h3>Step 3: Write the company context page</h3><p>This is the most important step. Once you define your company&#8217;s rules clearly, the skill will work or not based on what&#8217;s in this page. <strong>The page IS the prism.</strong> Take your time here.</p><p><code>skill-creator</code> already wrote a 7-section template in <code>company-context.md</code> with <code>[FILL IN]</code> placeholders. Open the file in Cowork&#8217;s preview pane to see it. The template has seven sections: approved tools, forbidden tools, data handling, licensing, approval paths, preferred providers, open questions. <strong>The scaffolding is there. The content is yours.</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_!FuI-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FuI-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!FuI-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!FuI-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!FuI-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!FuI-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1125648,&quot;alt&quot;:&quot;Split view showing skill-creator&#8217;s hand-off message on the left explaining the [FILL IN] placeholders, and the rendered company-context.md template on the right with empty sections for Approved AI tools and Forbidden tools, both populated with placeholder bullets.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Split view showing skill-creator&#8217;s hand-off message on the left explaining the [FILL IN] placeholders, and the rendered company-context.md template on the right with empty sections for Approved AI tools and Forbidden tools, both populated with placeholder bullets." title="Split view showing skill-creator&#8217;s hand-off message on the left explaining the [FILL IN] placeholders, and the rendered company-context.md template on the right with empty sections for Approved AI tools and Forbidden tools, both populated with placeholder bullets." srcset="https://substackcdn.com/image/fetch/$s_!FuI-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!FuI-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!FuI-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!FuI-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa91515-c1f2-413b-8695-769c16c8e27c_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The &#8220;before&#8221; state: structure in place, content empty.</figcaption></figure></div><p>You can fill this page however you like. You could have a back-and-forth discussion with Cowork, building the page one section at a time. You could draft it yourself in your text editor and paste it in. You could send one structural prompt and let Cowork generate the whole thing at once. <strong>There is no one right way. The page is yours, and the process should match how you think.</strong></p><p>For this article, I happened to do it in one prompt. <strong>That worked because I had already thought through what each section needed.</strong> Your first version will probably take longer because you are figuring out the rules as you write them. That is the point of this step. Expect to spend real time here.</p><p>Here is the prompt I used, as an example of what one approach looks like. The prompt uses a fictional company called <strong>Acme</strong> because my real company&#8217;s content is private. At your real company, swap the proper nouns. <strong>The structure stays the same.</strong></p><div class="callout-block" data-callout="true"><p>Update this company-context.md file in two passes.</p><p>Pass 1. Fill every [FILL IN] placeholder with content for a fictional company called Acme: a 300-person B2B SaaS for product teams, mid-AI-adoption, with SSO, IT, and legal review in place. Use clearly-fictional proper nouns: AI Champions Sarah K (Product) and Jordan L (Engineering); Legal contact Maya P at legal-ai@acme; IT at support-it@acme; vendor risk at vendor-risk@acme; internal access portal at access.acme/forms/ai-tools; Slack channels #ai-help, #ai-discussion, #ai-tools-feedback. Approved tools include Claude (Pro, Team, Max, Enterprise), Cursor with Acme SSO, GitHub Copilot for Engineering, NotebookLM, Perplexity. Split Data handling rules into four tiers (Public, Internal, Customer data, Regulated).</p><p>Pass 2. Add three new sections: Approved use cases by function, Sharing rules, and Acme-specific gotchas.</p><p>Keep the existing intro blockquote. Plain prose.</p></div><p>Cowork executes both passes in one turn. It verifies the output: both files at the project root, byte counts match, the intro blockquote is preserved, all section headings are in place. <strong>What comes out is a ten-section company context page ready to be tested.</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_!2Pa5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2Pa5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!2Pa5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!2Pa5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!2Pa5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2Pa5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1138973,&quot;alt&quot;:&quot;The Cowork chat shows the enhancement prompt sent and the confirmation that both passes ran successfully, with the rendered company-context.md visible on the right side displaying the Approved AI tools and models section with concrete Acme content about Claude plans, Cursor with SSO, GitHub Copilot for Engineering, NotebookLM, and Perplexity.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Cowork chat shows the enhancement prompt sent and the confirmation that both passes ran successfully, with the rendered company-context.md visible on the right side displaying the Approved AI tools and models section with concrete Acme content about Claude plans, Cursor with SSO, GitHub Copilot for Engineering, NotebookLM, and Perplexity." title="The Cowork chat shows the enhancement prompt sent and the confirmation that both passes ran successfully, with the rendered company-context.md visible on the right side displaying the Approved AI tools and models section with concrete Acme content about Claude plans, Cursor with SSO, GitHub Copilot for Engineering, NotebookLM, and Perplexity." srcset="https://substackcdn.com/image/fetch/$s_!2Pa5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!2Pa5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!2Pa5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!2Pa5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa62e57-f541-4e77-a9a9-600e1855a270_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">One prompt, ten sections, full prism page.</figcaption></figure></div><p>For reference, you can see the full version on GitHub: <a href="https://github.com/adamfaik/ai-ask/blob/main/company-context.md">github.com/adamfaik/ai-ask/blob/main/company-context.md</a>. It will give you a sense of what your version could look like once it&#8217;s filled in.</p><p>The prism page is human-editable markdown. Your team can update it without touching the skill code. <strong>Store the prompt, not the result.</strong> The result regenerates every time the page changes.</p><p>Now install it. There&#8217;s a trap.</p><h3>Step 4: Save the skill as a .skill file</h3><p>Cowork&#8217;s Save Skill button can install your skill in two different formats. <strong>The format you pick matters more than it looks.</strong></p><ul><li><p>If you save the skill as a <code>.md</code> file, only <code>SKILL.md</code> gets installed in your Personal Skills. Your <code>company-context.md</code>, the prism, stays on disk in the project folder. The skill is now installed, but without the file it is instructed to read on every invocation. <strong>The skill is there. The prism is not.</strong></p></li><li><p>If you save it as a <code>.skill</code> file, both <code>SKILL.md</code> and <code>company-context.md</code> get bundled together and installed as a unit. The skill has its prism wherever it goes. <strong>This is the format you want.</strong></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_!RskE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RskE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!RskE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!RskE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!RskE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!RskE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3308342,&quot;alt&quot;:&quot;Side-by-side diagram. Left: a lone SKILL.md flying into Claude on its own, with the company-context.md left behind on the desk; the answer below approves ChatGPT generically. Right: SKILL.md and company-context.md wrapped together in a single .skill bundle; the answer below refuses with the Tier 3 customer-data rule.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Side-by-side diagram. Left: a lone SKILL.md flying into Claude on its own, with the company-context.md left behind on the desk; the answer below approves ChatGPT generically. Right: SKILL.md and company-context.md wrapped together in a single .skill bundle; the answer below refuses with the Tier 3 customer-data rule." title="Side-by-side diagram. Left: a lone SKILL.md flying into Claude on its own, with the company-context.md left behind on the desk; the answer below approves ChatGPT generically. Right: SKILL.md and company-context.md wrapped together in a single .skill bundle; the answer below refuses with the Tier 3 customer-data rule." srcset="https://substackcdn.com/image/fetch/$s_!RskE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!RskE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!RskE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!RskE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45290e0-7436-47c0-8235-77038e9b01d1_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ship the prism with the skill.</figcaption></figure></div><p>To get a <code>.skill</code> file, ask Cowork to package the skill before you click Save. <strong>A </strong><code>.skill</code><strong> file is a zip bundle with both files at the root.</strong> Paste this in the same chat:</p><div class="callout-block" data-callout="true"><p>Please package the ai-ask skill as a .skill file. It should bundle both SKILL.md and company-context.md at the root of the archive (no enclosing subfolder), so I can install it into Cowork through the Save Skill button. Save the .skill file inside the project folder, and confirm the archive contents.</p></div><p>Cowork creates <code>ai-ask.skill</code> and verifies the contents. The format requirements are the same as Cowork&#8217;s Upload Skill dialog accepts: a <code>.zip</code> or <code>.skill</code> archive that includes <code>SKILL.md</code> at the root. <strong>The format Cowork generates matches the format Claude accepts.</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_!qGVm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qGVm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!qGVm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!qGVm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!qGVm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!qGVm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1089811,&quot;alt&quot;:&quot;The Customize &#8594; Skills &#8594; Upload skill dialog showing the file requirements: the .md file must contain skill name and description formatted in YAML, and the .zip or .skill file must include a SKILL.md file.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Customize &#8594; Skills &#8594; Upload skill dialog showing the file requirements: the .md file must contain skill name and description formatted in YAML, and the .zip or .skill file must include a SKILL.md file." title="The Customize &#8594; Skills &#8594; Upload skill dialog showing the file requirements: the .md file must contain skill name and description formatted in YAML, and the .zip or .skill file must include a SKILL.md file." srcset="https://substackcdn.com/image/fetch/$s_!qGVm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!qGVm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!qGVm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!qGVm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c5c7dc-78ae-418c-8e12-4003cd8645ab_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The format Cowork generates matches the format Claude accepts.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZyBc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZyBc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png 424w, https://substackcdn.com/image/fetch/$s_!ZyBc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png 848w, https://substackcdn.com/image/fetch/$s_!ZyBc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png 1272w, https://substackcdn.com/image/fetch/$s_!ZyBc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZyBc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png" width="1456" height="997" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/acfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:997,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:789643,&quot;alt&quot;:&quot;Cowork&#8217;s post-packaging verification message stating that the archive contains exactly two entries at the root, SKILL.md (5,755 bytes) and company-context.md (11,157 bytes), with no enclosing subfolder and YAML frontmatter intact, with the ai-ask.skill file visible in the project pane.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cowork&#8217;s post-packaging verification message stating that the archive contains exactly two entries at the root, SKILL.md (5,755 bytes) and company-context.md (11,157 bytes), with no enclosing subfolder and YAML frontmatter intact, with the ai-ask.skill file visible in the project pane." title="Cowork&#8217;s post-packaging verification message stating that the archive contains exactly two entries at the root, SKILL.md (5,755 bytes) and company-context.md (11,157 bytes), with no enclosing subfolder and YAML frontmatter intact, with the ai-ask.skill file visible in the project pane." srcset="https://substackcdn.com/image/fetch/$s_!ZyBc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png 424w, https://substackcdn.com/image/fetch/$s_!ZyBc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png 848w, https://substackcdn.com/image/fetch/$s_!ZyBc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png 1272w, https://substackcdn.com/image/fetch/$s_!ZyBc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facfbf1f6-f2b6-436a-bfda-2217e42819aa_2536x1736.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Two files at root, frontmatter intact.</figcaption></figure></div><p>Now click <strong>Save Skill</strong>. With <code>ai-ask.skill</code> as the current artifact in the chat, the Save Skill button installs the full bundle. Open <strong>Customize &#8594; Skills</strong>. <code>ai-ask</code> appears under <strong>Personal skills</strong>, expanded to show both <code>SKILL.md</code> AND <code>company-context.md</code> nested underneath. <strong>The bundle landed. Both files installed.</strong> Toggle is on, trigger set to &#8221;Slash command + auto.&#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_!nn1H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nn1H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!nn1H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!nn1H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!nn1H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!nn1H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:859471,&quot;alt&quot;:&quot;The Customize panel with ai-ask listed under Personal skills, expanded to show SKILL.md and company-context.md nested as files under the skill, with the toggle on, trigger &#8220;Slash command + auto&#8221;, and the rendered SKILL.md body visible in the right pane.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Customize panel with ai-ask listed under Personal skills, expanded to show SKILL.md and company-context.md nested as files under the skill, with the toggle on, trigger &#8220;Slash command + auto&#8221;, and the rendered SKILL.md body visible in the right pane." title="The Customize panel with ai-ask listed under Personal skills, expanded to show SKILL.md and company-context.md nested as files under the skill, with the toggle on, trigger &#8220;Slash command + auto&#8221;, and the rendered SKILL.md body visible in the right pane." srcset="https://substackcdn.com/image/fetch/$s_!nn1H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!nn1H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!nn1H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!nn1H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30ce8c2-9e99-4cb4-9400-27a8c941c1c9_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The bundle landed. Both files installed.</figcaption></figure></div><p>The principle to take with you: if your skill uses bundled context files, make sure you generate a <code>.skill</code> file before clicking Save. <strong>A skill without its prism is just a skill.</strong></p><p>Now test it.</p><h3>Step 5: Test the skill in Chat mode</h3><p>Three questions cover the spectrum. One that should refuse (gated by company rules). One that needs company context before generic instructions. One that&#8217;s generic enough the skill should stay quiet.</p><p><strong>Before you test, switch to Chat mode in the Claude desktop app.</strong> The <code>/ai-ask</code> skill triggers from the Chat tab, not from Cowork. Cowork is where you build skills. Chat is where you and your team actually use them. Open a fresh Chat conversation and pick <strong>Sonnet 4.6</strong> as the model. Sonnet is fine for daily use, per the ROI principle from earlier.</p><p><strong>Test 1: refusal.</strong></p><div class="callout-block" data-callout="true"><p><strong>/ai-ask</strong> Can I use ChatGPT free tier to summarize a customer feedback I exported?</p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jqWf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jqWf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!jqWf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!jqWf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!jqWf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!jqWf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:886135,&quot;alt&quot;:&quot;The full /ai-ask chat showing the question about ChatGPT free for customer feedback and the refusal answer in two parts: &#8220;Company context&#8221; leading with the No, then &#8220;General guidance&#8221; recommending Claude Enterprise as the default and explaining the Claude Projects file-retention gotcha.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The full /ai-ask chat showing the question about ChatGPT free for customer feedback and the refusal answer in two parts: &#8220;Company context&#8221; leading with the No, then &#8220;General guidance&#8221; recommending Claude Enterprise as the default and explaining the Claude Projects file-retention gotcha." title="The full /ai-ask chat showing the question about ChatGPT free for customer feedback and the refusal answer in two parts: &#8220;Company context&#8221; leading with the No, then &#8220;General guidance&#8221; recommending Claude Enterprise as the default and explaining the Claude Projects file-retention gotcha." srcset="https://substackcdn.com/image/fetch/$s_!jqWf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!jqWf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!jqWf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!jqWf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a65eda1-102b-4865-999e-d9e0a18959ed_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The &#8220;no, and here&#8217;s why, and here&#8217;s what to do instead&#8221; pattern.</figcaption></figure></div><p><strong>Test 2: company context first.</strong></p><div class="callout-block" data-callout="true"><p><strong>/ai-ask</strong> I want to install Cursor on my Mac. How do I do it?</p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!liEi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!liEi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!liEi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!liEi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!liEi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!liEi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:857916,&quot;alt&quot;:&quot;The /ai-ask chat showing the question about installing Cursor on Mac and the answer with company context (SSO setup, Confluence MCP integration, magic-link gotcha, customer-data autocomplete limitation) leading before the standard Cursor install steps.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The /ai-ask chat showing the question about installing Cursor on Mac and the answer with company context (SSO setup, Confluence MCP integration, magic-link gotcha, customer-data autocomplete limitation) leading before the standard Cursor install steps." title="The /ai-ask chat showing the question about installing Cursor on Mac and the answer with company context (SSO setup, Confluence MCP integration, magic-link gotcha, customer-data autocomplete limitation) leading before the standard Cursor install steps." srcset="https://substackcdn.com/image/fetch/$s_!liEi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!liEi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!liEi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!liEi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddda0a8b-b609-40fb-9619-eedf3b40e4ff_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Acme process leads. Generic install steps follow.</figcaption></figure></div><p>The ordering is the proof. Acme&#8217;s actual process comes first: SSO, the Confluence MCP gotcha, the customer-data autocomplete limitation. The generic Cursor install steps come after as a reference. <strong>The teammate who reads this knows what to do AND why the company path matters first.</strong> Without the prism, the answer would have led with the generic install steps and skipped the company context entirely.</p><p><strong>Test 3: restraint.</strong></p><div class="callout-block" data-callout="true"><p><strong>/ai-ask</strong> How do I write a good prompt for code review?</p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O_Qc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O_Qc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!O_Qc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!O_Qc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!O_Qc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!O_Qc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:857220,&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.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_!O_Qc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!O_Qc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!O_Qc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!O_Qc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb263ac2-a96d-43a1-a129-a61528301b9b_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Restraint: short company context, then heavy generic guidance.</figcaption></figure></div><p>Now sharpen the format.</p><h3>Step 6: Iterate by talking to Cowork</h3><p>The tests passed, but the answers were long. They also didn&#8217;t link to official docs. Real iteration is structural feedback. Length, ordering, what to include or exclude. Not single-answer tweaking. <strong>And it&#8217;s a plain-English conversation in the same </strong><code>skill-creator</code><strong> chat: no manual </strong><code>SKILL.md</code><strong> editing, no toggle dance.</strong></p><p>Send the feedback as a plain prompt:</p><div class="callout-block" data-callout="true"><p>The skill works but the answers are too long and there are no links to official docs. Restructure the answer format. Company context: maximum 1-2 sentences. Only the specific rule that applies. Skip the surrounding explanation. Steps: a numbered checklist with one action per line. No paragraphs. Reference docs: at the very end, include a link to the official documentation for the tool or topic the question is about. Search the web for the canonical URL. Update SKILL.md, re-package as .skill, then tell me when it&#8217;s ready to re-save.</p></div><p>Cowork updates <code>SKILL.md</code> and re-packages the bundle. <strong>The new </strong><code>SKILL.md</code><strong> is 119 bytes shorter than the previous version.</strong> Not that the byte count is what matters. The real proof is the re-run.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2v1w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2v1w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!2v1w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!2v1w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!2v1w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2v1w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1013230,&quot;alt&quot;:&quot;Cowork&#8217;s iteration recap describing the new SKILL.md format including a non-negotiable &#8220;shape&#8221; with three sections, explicit good-vs-bad examples for the Steps section, and an allow-list (vendor docs, install guides, model cards, pricing pages) and deny-list (blog posts, third-party tutorials, AI-generated summaries) for the Reference docs section.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cowork&#8217;s iteration recap describing the new SKILL.md format including a non-negotiable &#8220;shape&#8221; with three sections, explicit good-vs-bad examples for the Steps section, and an allow-list (vendor docs, install guides, model cards, pricing pages) and deny-list (blog posts, third-party tutorials, AI-generated summaries) for the Reference docs section." title="Cowork&#8217;s iteration recap describing the new SKILL.md format including a non-negotiable &#8220;shape&#8221; with three sections, explicit good-vs-bad examples for the Steps section, and an allow-list (vendor docs, install guides, model cards, pricing pages) and deny-list (blog posts, third-party tutorials, AI-generated summaries) for the Reference docs section." srcset="https://substackcdn.com/image/fetch/$s_!2v1w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!2v1w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!2v1w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!2v1w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F161dd84b-45c1-46be-8e6c-386e4ab17c4d_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The recap: shorter context, numbered steps, web-searched reference docs.</figcaption></figure></div><p>When you click <strong>Save Skill</strong>, Cowork prompts a confirmation: &#8221;There&#8217;s an existing skill with the same name. Uploading this skill will replace the existing one, which can&#8217;t be restored.&#8221; Click <strong>Upload and replace</strong>. <strong>The new bundle takes over for any future invocation.</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_!N8ms!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N8ms!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!N8ms!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!N8ms!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!N8ms!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!N8ms!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1191912,&quot;alt&quot;:&quot;A confirmation modal titled &#8220;Replace ai-ask skill?&#8221; with the message about an existing skill being replaced and two buttons: Cancel and Upload and replace.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A confirmation modal titled &#8220;Replace ai-ask skill?&#8221; with the message about an existing skill being replaced and two buttons: Cancel and Upload and replace." title="A confirmation modal titled &#8220;Replace ai-ask skill?&#8221; with the message about an existing skill being replaced and two buttons: Cancel and Upload and replace." srcset="https://substackcdn.com/image/fetch/$s_!N8ms!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!N8ms!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!N8ms!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!N8ms!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff373f5a4-de9c-4464-b522-5c341a6996b4_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Confirm the replace; the new bundle takes over.</figcaption></figure></div><p>Now re-run the Cursor-install question. The answer shape is exactly what you asked for. Two-sentence company context. Five-step numbered checklist. Two canonical doc links at the bottom. The header reads &#8221;Viewed 3 files, searched the web &#8250;&#8221;: proof that the skill now searches for official URLs on every invocation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZrnO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZrnO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!ZrnO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!ZrnO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!ZrnO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZrnO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png" width="1456" height="1012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1012,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:775904,&quot;alt&quot;:&quot;The /ai-ask answer for installing Cursor on Mac after iteration, showing the new structure: a 2-sentence Company context section, a 5-item numbered Steps checklist (download installer, drag to Applications, launch and sign in with SSO, verify Confluence MCP, flag AI-assisted commits), and a Reference docs section at the bottom with two links to Cursor&#8217;s official documentation.&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The /ai-ask answer for installing Cursor on Mac after iteration, showing the new structure: a 2-sentence Company context section, a 5-item numbered Steps checklist (download installer, drag to Applications, launch and sign in with SSO, verify Confluence MCP, flag AI-assisted commits), and a Reference docs section at the bottom with two links to Cursor&#8217;s official documentation." title="The /ai-ask answer for installing Cursor on Mac after iteration, showing the new structure: a 2-sentence Company context section, a 5-item numbered Steps checklist (download installer, drag to Applications, launch and sign in with SSO, verify Confluence MCP, flag AI-assisted commits), and a Reference docs section at the bottom with two links to Cursor&#8217;s official documentation." srcset="https://substackcdn.com/image/fetch/$s_!ZrnO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png 424w, https://substackcdn.com/image/fetch/$s_!ZrnO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png 848w, https://substackcdn.com/image/fetch/$s_!ZrnO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!ZrnO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0055f30d-893a-409c-a65b-dde91e604ed7_2624x1824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">One prompt of feedback. Every future answer reshapes.</figcaption></figure></div><p>This is the moment that pays off the whole build. One short prompt of feedback. Every future answer reshapes. <strong>Tune the lens once, every answer benefits.</strong></p><p>This is also where the real time goes on a build like this. Scaffolding a skill takes one focused session. Getting the answer format your team will actually use takes several rounds of iteration across several conversations. <strong>Plan the calendar around iteration, not scaffolding.</strong> In practice, one to three hours of feedback rounds.</p><p>Now share it.</p><h3>Step 7: Ship it to your team</h3><p>Two distribution paths, different jobs. Pick both. <strong>Each one solves a different problem.</strong> Let me show you why.</p><p>Inside Claude, shared skills are <strong>view-only on the recipient side</strong>. Your teammates can enable, disable, and use the skill. But they can&#8217;t edit <code>SKILL.md</code> or <code>company-context.md</code>. <strong>That single constraint is why the right answer is two paths.</strong> One for fast install. One for collaborative iteration. Solve the constraint, don&#8217;t fight it.</p><p><strong>Path A: Org install via Claude.</strong> If you&#8217;re on Team or Enterprise, the official path is <strong>Organization settings &#8594; Skills &#8594; Share with organization</strong>. The toggle is off by default. Once on, click <strong>Share</strong> on your skill in Customize. The skill appears in your org&#8217;s directory. Teammates install with one click. <strong>The fastest way to put a working skill in 50 teammates&#8217; hands.</strong></p><p><a href="https://support.claude.com/en/articles/13119606-provision-and-manage-skills-for-your-organization">Two prerequisites worth flagging for your IT conversation</a>. The admin needs to enable <strong>Code execution + File creation</strong> at <strong>Organization settings &#8594; Capabilities</strong> before the Skills toggle takes effect. And org-wide sharing has no approval workflow. Once enabled, any member can publish a skill to the directory without review. <strong>Useful intelligence to bring to that conversation.</strong></p><p><strong>Path B: Public GitHub.</strong> One prompt to Cowork handles the whole publish. Cowork uses <code>gh repo create</code> to make the public repo, writes a README with a fictional-Acme disclaimer, commits, and pushes. The live repo is at <a href="https://github.com/adamfaik/ai-ask">github.com/adamfaik/ai-ask</a>. <strong>You can clone it, swap in your context, and start from there.</strong></p><p>The AI helper is one use case. Here&#8217;s what else this pattern handles.</p><div><hr></div><h2>Adapt the pattern for any team workflow</h2><p>Everything you just built is a pattern, not just an AI helper. One skill. One context page. A structured two-part answer. <strong>Anywhere your team asks the same routine question that depends on your specific context, the prism applies.</strong> The article&#8217;s example is AI Q&amp;A. The pattern handles much more.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iQUl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iQUl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!iQUl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!iQUl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!iQUl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!iQUl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2887001,&quot;alt&quot;:&quot;A single Claude skill at the center of the diagram, surrounded by four context pages labeled &#8220;AI rules&#8221;, &#8220;Quarterly OKRs&#8221;, &#8220;Brand voice&#8221;, &#8220;Feedback rubric&#8221;. Below the skill, four matching answer bubbles in the same two-part format. The caption inside the diagram reads &#8220;Same skill. Different lens. Build one, run a hundred.&#8221;&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://www.theaithinker.com/i/198048642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A single Claude skill at the center of the diagram, surrounded by four context pages labeled &#8220;AI rules&#8221;, &#8220;Quarterly OKRs&#8221;, &#8220;Brand voice&#8221;, &#8220;Feedback rubric&#8221;. Below the skill, four matching answer bubbles in the same two-part format. The caption inside the diagram reads &#8220;Same skill. Different lens. Build one, run a hundred.&#8221;" title="A single Claude skill at the center of the diagram, surrounded by four context pages labeled &#8220;AI rules&#8221;, &#8220;Quarterly OKRs&#8221;, &#8220;Brand voice&#8221;, &#8220;Feedback rubric&#8221;. Below the skill, four matching answer bubbles in the same two-part format. The caption inside the diagram reads &#8220;Same skill. Different lens. Build one, run a hundred.&#8221;" srcset="https://substackcdn.com/image/fetch/$s_!iQUl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!iQUl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!iQUl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!iQUl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3822c5cf-2e54-440f-9b36-f125e749edc5_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Same skill. Different lens. Build one, run a hundred.</figcaption></figure></div><p>Here are four use cases where the same shape earns its keep. Each one swaps the context page for a different document. The skill scaffold stays the same. <strong>Build the skill once, point it at four different pages, ship four different helpers.</strong></p><ul><li><p><strong>OKR alignment helper.</strong></p><ul><li><p>Audience: PMs drafting features.</p></li><li><p>User request: &#8221;Does this initiative line up with our quarterly OKRs, and which one?&#8221;</p></li><li><p>What comes back: &#8221;Closest match: OKR-Q2-3 &#8216;increase activation by 15%&#8217; (alignment 0.6). Two stronger fits to consider before locking: OKR-Q2-1 (north-star activation rate) and OKR-Q2-7 (week-one retention).&#8221;</p></li><li><p>Context page: the team&#8217;s current-quarter OKR doc.</p></li></ul></li><li><p><strong>Feedback reviewer.</strong></p><ul><li><p>Audience: anyone shipping a draft.</p></li><li><p>User request: &#8221;Is this feedback the way our team gives feedback?&#8221;</p></li><li><p>What comes back: &#8221;Reads well overall. Two SBI-format gaps: paragraph 2 names the situation but not the behavior; paragraph 4 gives behavior but no impact. Add one sentence each.&#8221;</p></li><li><p>Context page: the team&#8217;s feedback rubric (SBI, Radical Candor, or whatever you standardized on).</p></li></ul></li><li><p><strong>Brand voice checker.</strong></p><ul><li><p>Audience: marketing, sales, or support drafting external copy.</p></li><li><p>User request: &#8221;Is this on-brand for us?&#8221;</p></li><li><p>What comes back: &#8221;Three off-tone moments. Paragraph 1 uses &#8216;revolutionary,&#8217; which the brand guide bans as hype. Paragraph 3 leads with what we did rather than what the customer gets. The CTA is passive; our voice is action-first. Suggested swaps listed inline.&#8221;</p></li><li><p>Context page: the brand voice guide.</p></li></ul></li><li><p><strong>Onboarding concierge.</strong></p><ul><li><p>Audience: new joiners in week one (and anyone three months in who still doesn&#8217;t know who to ask).</p></li><li><p>User request: &#8221;Who do I ask about X at this company?&#8221;</p></li><li><p>What comes back: &#8221;For laptop and SSO issues, support-it@. For new-tool requests, vendor-risk@. For OKR questions, Sarah K in Product. Fastest path: #ai-help in Slack, answered within a day.&#8221;</p></li><li><p>Context page: an org-chart-style page mapping topics to contacts and channels.</p></li></ul></li></ul><p>Here is the principle. <strong>The skill is the lens. The context page is what you&#8217;re looking through it at.</strong> Swap the context page, get a different team helper from the same skill scaffold. Build one prism. Run a hundred queries through it.</p><div><hr></div><h2>Your turn!</h2><p>If you&#8217;ve been holding the &#8220;we need an AI playbook&#8221; assignment from your manager, you don&#8217;t need a 1,000-card Confluence space. <strong>You need one skill, one context page, and an afternoon in Cowork.</strong> The team gets answers grounded in your rules without DM&#8217;ing you. You get your focus back. <strong>And the same pattern adapts to OKRs, feedback, brand voice, anything routine that depends on context.</strong></p><p>Here is where to start. Pick the routine question your team asks you most often. Write a one-page context document for it. Open Cowork. Run <code>skill-creator</code>. Answer the QCM. <strong>The scaffolding takes one focused session. </strong>Then send one enhancement prompt to fill the page. Package as <code>.skill</code>. Click Save Skill. Test against three real questions from your inbox. Iterate by chat until the answer shape is what your team will actually use. Ship to your team via the org install or GitHub. <strong>You&#8217;ll have a working helper the same week you read this.</strong></p><p>If you want a head start, clone the repo at <a href="https://github.com/adamfaik/ai-ask">github.com/adamfaik/ai-ask</a>. Fork it. Replace the Acme content with your context. <strong>And tell me what you built.</strong></p>]]></content:encoded></item><item><title><![CDATA[How to bring a company up to speed on AI]]></title><description><![CDATA[Identify the fast movers. Build a shared backlog. Run 2-week sprints with a single owner per topic. Pair-do with the rest of the team.]]></description><link>https://www.theaithinker.com/p/how-to-bring-a-company-up-to-speed</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-bring-a-company-up-to-speed</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 11 May 2026 11:00:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6dd2f487-44c2-47d0-aa0f-5d613ca1a955_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It&#8217;s Monday morning. You&#8217;re scanning your week. Leadership offsite, three product reviews, a check-in with each of your team leads. And the same pattern keeps showing up. In every team across the company, two or three people have AI prompts pinned to their second monitor and a half-finished agent in their personal repo. The rest haven&#8217;t really started. You&#8217;ve been telling yourself this gap is fine. Early days. Give it time. But it&#8217;s been months, and the gap keeps widening across every team you look at. <strong>The fast ones are getting faster. The rest aren&#8217;t moving.</strong></p><p>You don&#8217;t have a process problem. <strong>You have a channeling problem.</strong> The energy is there, scattered across the company. It&#8217;s just spilling.</p><p>You may have read the headline. <a href="https://fortune.com/2025/08/18/mit-report-95-percent-generative-ai-pilots-at-companies-failing-cfo/">MIT&#8217;s 2025 NANDA report</a> found that 95% of enterprise GenAI pilots ship no measurable P&amp;L impact. The press read it as a scandal. <strong>It isn&#8217;t.</strong> Five percent succeeding is roughly what any innovation portfolio produces, in any domain, in any decade. That&#8217;s the math of betting on early ideas. The real question isn&#8217;t whether your pilots will fail. <strong>It&#8217;s whether they&#8217;ll fail in a way that teaches you anything.</strong></p><p>After installing this in several companies, the same pattern shows up every time. Each team has its few fast movers and its many non-starters, and the gap compounds without coordination. <strong>Eighteen months into AI going mainstream, that gap has stopped closing on its own.</strong> The thing that actually works is the lightest possible governance: three innovation principles plus four agile rituals. <strong>Common sense. Borrowed from places you trust. Applied to AI.</strong></p><p>If you&#8217;ve tried something like this and watched it fizzle (a guild, an AI team, an AI working group), stay with me. The networks I&#8217;ve watched fail didn&#8217;t fail because the framework was wrong. They failed because one of four conditions stopped holding underneath. <strong>We&#8217;ll work from the innovation principles to the rituals, and finish with the four conditions that keep the system alive.</strong> The result is a playbook you can start running next sprint without repeating the same fizzle.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UnbQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UnbQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!UnbQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!UnbQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!UnbQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UnbQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4246059,&quot;alt&quot;:&quot;Hand-drawn black-and-white infographic showing three milestones connected by arrows. First block (a stack of folders): &#8220;Three principles.&#8221; Second block (a circular flow): &#8220;Four rituals + pair-doing.&#8221; Third block (a starting flag): &#8220;Six-step kickoff.&#8221; The path leads to a final block on the right showing a small group of figures together: &#8220;Whole company up to speed.&#8221;&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://www.theaithinker.com/i/196991812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn black-and-white infographic showing three milestones connected by arrows. First block (a stack of folders): &#8220;Three principles.&#8221; Second block (a circular flow): &#8220;Four rituals + pair-doing.&#8221; Third block (a starting flag): &#8220;Six-step kickoff.&#8221; The path leads to a final block on the right showing a small group of figures together: &#8220;Whole company up to speed.&#8221;" title="Hand-drawn black-and-white infographic showing three milestones connected by arrows. First block (a stack of folders): &#8220;Three principles.&#8221; Second block (a circular flow): &#8220;Four rituals + pair-doing.&#8221; Third block (a starting flag): &#8220;Six-step kickoff.&#8221; The path leads to a final block on the right showing a small group of figures together: &#8220;Whole company up to speed.&#8221;" srcset="https://substackcdn.com/image/fetch/$s_!UnbQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!UnbQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!UnbQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!UnbQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecb9463-aeb5-47f5-8933-270b5a7a5f5a_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Principles, rituals, kickoff: three stages from gap to whole-company lift.</figcaption></figure></div><ul><li><p>Manage AI as an innovation portfolio: three principles to borrow before you build any rhythm.</p></li><li><p>Run it on agile rituals: a 2-week cycle, a pair-doing move, and four conditions that keep the system alive.</p></li><li><p>Start it next sprint, in six concrete moves.</p></li></ul><p>The first principle is about organization. Two debates live there, and they have the same answer.</p><div><hr></div><h2>Manage AI as an innovation portfolio</h2><h3>Combine top-down and bottom-up</h3><p><strong>Debate 1: top-down or bottom-up.</strong> Most leaders facing AI default to one or the other. Top-down: &#8221;the platform team will pick the tools and roll them out.&#8221; Bottom-up: &#8221;everyone will figure it out on their own.&#8221; Both are partial.</p><ul><li><p><strong>Top-down</strong> is the right move for mid-term consolidation and governance. Once a tool, prompt library, or skill has proven its value, you need top-down to scale it company-wide: security review, legal sign-off, procurement, mandatory training, integration with existing systems. <strong>That&#8217;s all real.</strong> The problem is when top-down is your only AI strategy. The AI landscape moves faster than any procurement cycle.</p></li><li><p><strong>Bottom-up</strong> is the right move for short-term experimentation and speed. Motivated people moving fast on their own tasks is how you discover what actually works. Without it, you have a strategy with no signal. <strong>The problem is when bottom-up is your only strategy.</strong> Three teams build three different prompt libraries that don&#8217;t talk to each other. Six other teams don&#8217;t start at all because nobody told them where to begin. Within six months, the gap is structural, and the libraries don&#8217;t merge cleanly into anything reusable.</p></li></ul><p>You need both. The challenge is connecting them. <strong>A small protected community in between: lets bottom-up energy run, captures what works, and hands it to top-down once it&#8217;s ready to scale.</strong> <a href="https://www.wenger-trayner.com/introduction-to-communities-of-practice/">Etienne Wenger named this pattern in 1998</a>. He called it a community of practice: a group that shares a concern, learns by doing, and decides what&#8217;s good enough to scale. AI is the latest domain it applies to.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vuXO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vuXO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!vuXO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!vuXO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!vuXO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!vuXO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3927493,&quot;alt&quot;:&quot;Hand-drawn black-and-white diagram with three horizontal layers stacked vertically. Top layer (a shield): &#8220;Top-down: governance, scaling.&#8221; Middle layer, larger and emphasized (a cluster of figures connected by lines): &#8220;The community network.&#8221; Bottom layer (a small spark): &#8220;Bottom-up: experiments, speed.&#8221; Arrows flow upward from the bottom into the middle and downward from the top into the middle.&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://www.theaithinker.com/i/196991812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn black-and-white diagram with three horizontal layers stacked vertically. Top layer (a shield): &#8220;Top-down: governance, scaling.&#8221; Middle layer, larger and emphasized (a cluster of figures connected by lines): &#8220;The community network.&#8221; Bottom layer (a small spark): &#8220;Bottom-up: experiments, speed.&#8221; Arrows flow upward from the bottom into the middle and downward from the top into the middle." title="Hand-drawn black-and-white diagram with three horizontal layers stacked vertically. Top layer (a shield): &#8220;Top-down: governance, scaling.&#8221; Middle layer, larger and emphasized (a cluster of figures connected by lines): &#8220;The community network.&#8221; Bottom layer (a small spark): &#8220;Bottom-up: experiments, speed.&#8221; Arrows flow upward from the bottom into the middle and downward from the top into the middle." srcset="https://substackcdn.com/image/fetch/$s_!vuXO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!vuXO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!vuXO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!vuXO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F219d658b-3a63-4b8f-aa42-27f3601738cb_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Top-down meets bottom-up through the community network in the middle.</figcaption></figure></div><p><strong>Debate 2: dedicated team or embedded innovation.</strong> A close cousin of debate 1. Some companies create a dedicated innovation team. Others leave innovation in each existing team. Same answer: both, ideally hybrid. A dedicated AI core team owns the cross-cutting work (a shared prompt library, an internal Claude skill catalog, the shared backlog itself). Embedded contributors in each team own the process improvements specific to their domain. They know their work best. <strong>If you can only run one, run embedded.</strong> Their proximity to the actual work beats the dedicated team&#8217;s coordination advantage. Running both, knit through the same network, is what scales.</p><p>The community network is the operational form of both answers. Top-down meets bottom-up there. Dedicated meets embedded there. <strong>The network is where the connection happens.</strong></p><p>Once the connective layer exists, the next question is how to track the work happening inside it. AI experiments aren&#8217;t projects.</p><h3>Stop tracking AI work like projects</h3><p>The second principle is about measurement: <strong>AI work is innovation, not a project.</strong> What you track has to change.</p><p>A normal project tracks planning, budget, and deliverables. An innovation effort tracks pivots, failures, and learnings. The two look similar from a distance. Up close, they&#8217;re opposites.</p><p><strong>What makes AI work specifically weird: the technology shifts under your feet faster than your sprint cadence.</strong> The Mistral model that beat your benchmark in March will be replaced by July. The Claude skill that solved your QA problem in Q1 may be obsolete by Q3 when the next context-engineering pattern replaces it. <strong>Outputs go stale. Learnings don&#8217;t.</strong> That&#8217;s the shift you&#8217;re really making: from tracking what shipped to tracking what you understood.</p><p>Three concrete shifts in measurement:</p><ul><li><p><strong>Expect 80% of experiments to fail.</strong> Not &#8220;tolerate.&#8221; Expect. The 95% pilot-failure rate from the intro is what you get when nobody runs AI work as a portfolio: pilots commissioned, run, and forgotten. Inside a working network the rate drops, but it stays high on purpose. <strong>Eighty percent is the target, not the accident.</strong> If your hit rate is much higher, you&#8217;re picking targets that are too safe. If it&#8217;s much lower, you&#8217;re picking targets too speculative. The 80% is how you find the 20% that scales.</p></li><li><p><strong>Measure learnings, not outputs.</strong> What did you learn from the failed experiments? Which assumption was wrong? What would you try differently next time? A failed experiment with a clear lesson is more valuable than a successful one with no insight.</p></li><li><p><strong>Don&#8217;t celebrate failure for its own sake.</strong> Some companies overdo this: failure parties, &#8220;fail fast&#8221; t-shirts. That&#8217;s theater. A real failure is one where you learned something. A non-failure is one where you didn&#8217;t. Stay honest about which kind you&#8217;re shipping.</p></li></ul><p>This shift in measurement is what most companies skip when they &#8220;do AI experiments.&#8221; They run experiments but track them on a project dashboard: completion percentage, on-time delivery, ROI estimates pulled out of thin air. Then they wonder why nothing scales. <strong>The reframe is the foundation. Without it, no ritual you bolt on top will hold.</strong></p><p>The operational form of this principle (what counts as a successful learning, written down) is an artifact of the agile rhythm, not of the principle itself. Change what you measure before you formalize how you record it.</p><p>Once you measure learnings, the next question is where to place your bets.</p><h3>Diversify your AI bets</h3><p>The third principle: <strong>don&#8217;t put all your AI eggs in one basket.</strong> Spread bets across distances from your current work.</p><p>A simple way to classify any AI experiment is by how far it sits from how you operate today.</p><ul><li><p><strong>Close-in bets.</strong> Improvements to an existing process. An agent that drafts your weekly status report. A Claude skill that turns customer interview transcripts into a clustered theme list. Low risk, fast feedback, modest payoff. You need these to build trust and momentum.</p></li><li><p><strong>Mid-distance bets.</strong> New workflows that change how a team operates without rewriting the whole org chart. A pair-doing ritual that lets non-builders ship their first prompt. A shared prompt library that becomes the team&#8217;s first AI artifact.</p></li><li><p><strong>Far bets.</strong> Bets that imagine the work fundamentally differently. What if half the approval committees disappeared because every prototype was already testable end-to-end? What if QA happened through monitoring instead of dedicated review? Most of these will not work. The few that do will reset what your company is capable of.</p></li></ul><p>A backlog with only close-in bets produces incremental wins forever and never compounds. A backlog with only far bets produces theater and never ships anything usable. <strong>A healthy backlog has all three.</strong></p><p><a href="https://www.lifelongfaith.com/uploads/5/1/6/4/5164069/managing_your_innovation_portfolio.pdf">Bansi Nagji and Geoff Tuff named this exact pattern in Harvard Business Review in 2012.</a> They call the three categories core, adjacent, and transformational, and they have a famous allocation rule: <strong>70-20-10</strong>. Roughly seventy percent of the work on close-in bets, twenty percent on mid-distance, ten percent on far. It&#8217;s a default, not a law. But it&#8217;s a useful counterweight to the two failure modes above.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ku91!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ku91!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!ku91!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!ku91!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!ku91!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ku91!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3879156,&quot;alt&quot;:&quot;Hand-drawn black-and-white diagram with a horizontal axis labeled &#8220;Distance from how you operate today.&#8221; Left end: &#8220;Close to today.&#8221; Right end: &#8220;Fundamentally different.&#8221; Three labeled zones across the axis: &#8220;Close-in: improve current work,&#8221; &#8220;Mid-distance: new workflows,&#8221; &#8220;Far: rethink the work.&#8221; Ten dots scattered across the axis showing the 70-20-10 allocation: about seven on the left, two in the middle, one on the right.&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://www.theaithinker.com/i/196991812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn black-and-white diagram with a horizontal axis labeled &#8220;Distance from how you operate today.&#8221; Left end: &#8220;Close to today.&#8221; Right end: &#8220;Fundamentally different.&#8221; Three labeled zones across the axis: &#8220;Close-in: improve current work,&#8221; &#8220;Mid-distance: new workflows,&#8221; &#8220;Far: rethink the work.&#8221; Ten dots scattered across the axis showing the 70-20-10 allocation: about seven on the left, two in the middle, one on the right." title="Hand-drawn black-and-white diagram with a horizontal axis labeled &#8220;Distance from how you operate today.&#8221; Left end: &#8220;Close to today.&#8221; Right end: &#8220;Fundamentally different.&#8221; Three labeled zones across the axis: &#8220;Close-in: improve current work,&#8221; &#8220;Mid-distance: new workflows,&#8221; &#8220;Far: rethink the work.&#8221; Ten dots scattered across the axis showing the 70-20-10 allocation: about seven on the left, two in the middle, one on the right." srcset="https://substackcdn.com/image/fetch/$s_!ku91!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!ku91!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!ku91!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!ku91!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc6c767-9d3a-4c92-95ac-a91f6bb76b77_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A healthy AI portfolio: roughly 70% close-in, 20% mid-distance, 10% far.</figcaption></figure></div><p><strong>The cautionary anecdote: prompt engineering, then context engineering.</strong> When LLMs first hit the mainstream, the loudest trend was prompt engineering. Prompt libraries, prompt courses, prompt job titles. By mid-2025, Andrej Karpathy (<a href="https://x.com/karpathy/status/1937902205765607626">post</a>) and Simon Willison (<a href="https://simonwillison.net/2025/Jun/27/context-engineering/">post</a>) were both publicly calling the shift. Context engineering, how the model gets fed the right retrieval, tools, memory, and state, is the load-bearing skill, and prompts are one ingredient inside it. <strong>Prompts didn&#8217;t die. They got demoted from the whole skill to one ingredient.</strong> A company that bet only on prompt infrastructure in 2023 didn&#8217;t waste the work. But two years later, they&#8217;re rebuilding most of the surrounding system to keep up. The companies that placed bets at varied distances (prompts and retrieval pipelines, prompts and agent tooling, prompts and internal context layers) compounded. <strong>The principle isn&#8217;t predict the next trend. It&#8217;s don&#8217;t bet only on this one.</strong></p><p>Three principles tell you how to organize, what to measure, and where to bet. They need a rhythm. That&#8217;s what agile rituals give you.</p><div><hr></div><h2>Run it on agile rituals</h2><h3>Borrow two artifacts and four rituals</h3><p>Here&#8217;s where the answer surprises me as I write it: <strong>the cleanest framework is something you already know.</strong></p><p>It&#8217;s the bones of agile. Stripped of the certifications, the ceremony, and the eight-page Confluence templates. <strong>Two artifacts</strong> (the things the work produces) and <strong>four rituals</strong> (when the work happens). That&#8217;s it.</p><p><strong>Two artifacts:</strong></p><ul><li><p><strong>The backlog</strong>. A single shared list of every AI experiment, idea, and pain point worth exploring. Anyone in the company can add to it. Some items are precise (&#8221;test Mistral Codestral on a real bug fix and report what it ships&#8221;); others are vague (&#8221;explore using LLMs for our weekly customer-research synthesis&#8221;). Both are fine. Vague items get sharpened by whoever picks them up. The backlog is a living queue, not a roadmap.</p></li><li><p><strong>The Definition of Done.</strong> The same idea you&#8217;ve used in software work, applied here. Five criteria that have to hold for any experiment to count as shipped:</p><ul><li><p><strong>Tested by a non-creator.</strong> Someone who didn&#8217;t build the tool has used it on a real task and it worked.</p></li><li><p><strong>Documented.</strong> Step-by-step instructions including required inputs and expected outputs.</p></li><li><p><strong>Centralized.</strong> Published somewhere everyone can find it (a shared playbook, a wiki page, a folder).</p></li><li><p><strong>Demoed.</strong> Presented at the next demo.</p></li><li><p><strong>Success metric defined.</strong> A simple way to measure impact (time saved, frequency of use, quality lift) is named.</p></li></ul></li></ul><p>The &#8220;tested by a non-creator&#8221; criterion is the sharpest one. <strong>It&#8217;s dogfooding in its strict form: not &#8220;the team uses it,&#8221; but &#8220;someone other than the author can run it.&#8221;</strong> It forces the owner to make the work usable, not just buildable. A prompt that only the author can run is half the work. A prompt the author&#8217;s teammate can run on Monday is the whole work.</p><p><strong>Four rituals:</strong></p><ul><li><p><strong>The planning.</strong> Every two weeks, the contributors gather for 30 minutes. They look at the backlog, pick what each of them will own for the next sprint, and commit to a demo at the end. <strong>One owner per item, always.</strong> Others can help. The owner is accountable.</p></li><li><p><strong>The sprint.</strong> Two weeks. Each contributor spends roughly <strong>one day</strong> of focused work on their item. That&#8217;s the contract: eight hours per sprint, negotiated with their manager up front. If they don&#8217;t have the capacity in a given sprint, they sit it out. No drama.</p></li><li><p><strong>The demo.</strong> End of the sprint. Every owner presents what they shipped, what they learned, and whether it should scale to the rest of the company. This is the meeting that makes the network real. Skip it for two sprints in a row and the network dies.</p></li><li><p><strong>The retro.</strong> Every few sprints (every quarter is a good rhythm), you stop and ask: what&#8217;s working, what&#8217;s not, what should we change? This is the meeting that lets the system itself adapt. Without it, the rituals drift into ceremony and the work gets stale.</p></li></ul><p>Picture the cycle.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cIlS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cIlS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!cIlS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!cIlS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!cIlS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!cIlS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4194243,&quot;alt&quot;:&quot;Hand-drawn black-and-white diagram in classic Scrum-cycle style. Backlog (a stack of index cards) sits to the left as input feeding into Sprint Planning (around 30 min). Planning leads into a 2-week Sprint timebox (an hourglass) with a callout &#8220;about one day per contributor.&#8221; Sprint leads to a Demo (a small presentation screen) at the end, then loops back to the Backlog. A separate annotation, &#8220;Retro every quarter,&#8221; cuts across the loop with a dashed connector. A small Definition of Done checklist is attached to the demo step.&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://www.theaithinker.com/i/196991812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn black-and-white diagram in classic Scrum-cycle style. Backlog (a stack of index cards) sits to the left as input feeding into Sprint Planning (around 30 min). Planning leads into a 2-week Sprint timebox (an hourglass) with a callout &#8220;about one day per contributor.&#8221; Sprint leads to a Demo (a small presentation screen) at the end, then loops back to the Backlog. A separate annotation, &#8220;Retro every quarter,&#8221; cuts across the loop with a dashed connector. A small Definition of Done checklist is attached to the demo step." title="Hand-drawn black-and-white diagram in classic Scrum-cycle style. Backlog (a stack of index cards) sits to the left as input feeding into Sprint Planning (around 30 min). Planning leads into a 2-week Sprint timebox (an hourglass) with a callout &#8220;about one day per contributor.&#8221; Sprint leads to a Demo (a small presentation screen) at the end, then loops back to the Backlog. A separate annotation, &#8220;Retro every quarter,&#8221; cuts across the loop with a dashed connector. A small Definition of Done checklist is attached to the demo step." srcset="https://substackcdn.com/image/fetch/$s_!cIlS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!cIlS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!cIlS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!cIlS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e098aa2-9558-4c07-b65a-695ef7ab9d9c_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Two artifacts and four rituals: backlog, planning, sprint, demo. Retro every quarter.</figcaption></figure></div><p><strong>Why this lands.</strong> A two-week cadence is fast enough to keep up with how AI evolves. It&#8217;s slow enough to actually deliver. Eight hours per sprint is small enough that managers approve it without renegotiating org structure. It&#8217;s large enough to ship something demoable. The sprint length and the time commitment are both human-scale. That&#8217;s not a coincidence. It&#8217;s the same reason agile works for software in the first place.</p><p>The rituals give the fast movers a rhythm. They don&#8217;t, by themselves, lift the rest of the team. That takes one more move.</p><h3>Lift the team with pair-doing</h3><p>Here&#8217;s the question the rituals don&#8217;t answer: <strong>how does the 5% actually help the 95%?</strong></p><p>If the answer is &#8221;by demoing,&#8221; it doesn&#8217;t work. Watching a demo doesn&#8217;t move someone from &#8220;I haven&#8217;t started&#8221; to &#8220;I just shipped my first prompt.&#8221; It produces admiration, then forgetting. <strong>You need a different ritual for that, and it has a name: pair-doing.</strong></p><p>The lineage is borrowed, not invented. Pair programming (Extreme Programming, late 1990s) and <a href="https://mobprogramming.org/">Woody Zuill&#8217;s mob programming</a> (mid-2010s), applied outside engineering. <strong>Same mechanic, different domain.</strong></p><p>Pair-doing is what it sounds like. One fast mover blocks 30 to 60 minutes on their calendar. Anyone on the team can sign up. <strong>The non-mover brings a real task from their week</strong>: not a hypothetical, not a tutorial. A specific email they have to write, a customer call they have to summarize, a feature spec they have to draft. They sit together (in person or on a video call), and <strong>the fast mover walks them through doing the task with AI.</strong> Live. Hands on the keyboard.</p><p>The non-mover leaves having actually completed a piece of their own work with AI. Not having watched someone else do it.</p><p><strong>Why pair-doing works when workshops don&#8217;t:</strong></p><ul><li><p><strong>It uses real work, not exercises.</strong> Exercises are forgotten by Friday. Real work is the thing they were going to do anyway.</p></li><li><p><strong>It produces a finished output that day.</strong> The customer-call summary is done. They&#8217;re not building a portfolio of practice runs. They&#8217;re shipping their actual job.</p></li><li><p><strong>It scales linearly with capacity.</strong> That&#8217;s a feature, not a bug. It keeps the network honest about its size. If you have two fast movers and they each run two pair-doing slots a week, that&#8217;s four people lifted per week. After a quarter, that&#8217;s roughly 50 people who&#8217;ve shipped their first AI-assisted piece of work. Workshop attendance doesn&#8217;t translate that way.</p></li></ul><p><strong>Different people need different support.</strong> Not everyone in the 95% is in the same place. A simple grid clarifies who needs what.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PNiB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PNiB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!PNiB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!PNiB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!PNiB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!PNiB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3480926,&quot;alt&quot;:&quot;Hand-drawn black-and-white diagram with four equal columns connected left-to-right by thin arrows showing progression. Column 1 (an eye): &#8220;Observer needs awareness.&#8221; Column 2 (a compass): &#8220;Explorer needs templates.&#8221; Column 3 (a wrench): &#8220;Practitioner needs workflows.&#8221; Column 4 (a small trophy): &#8220;Champion needs recognition.&#8221;&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://www.theaithinker.com/i/196991812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn black-and-white diagram with four equal columns connected left-to-right by thin arrows showing progression. Column 1 (an eye): &#8220;Observer needs awareness.&#8221; Column 2 (a compass): &#8220;Explorer needs templates.&#8221; Column 3 (a wrench): &#8220;Practitioner needs workflows.&#8221; Column 4 (a small trophy): &#8220;Champion needs recognition.&#8221;" title="Hand-drawn black-and-white diagram with four equal columns connected left-to-right by thin arrows showing progression. Column 1 (an eye): &#8220;Observer needs awareness.&#8221; Column 2 (a compass): &#8220;Explorer needs templates.&#8221; Column 3 (a wrench): &#8220;Practitioner needs workflows.&#8221; Column 4 (a small trophy): &#8220;Champion needs recognition.&#8221;" srcset="https://substackcdn.com/image/fetch/$s_!PNiB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!PNiB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!PNiB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!PNiB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17da779e-f5f1-4a13-b279-00ffb1234131_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Each level needs a different kind of support to move up.</figcaption></figure></div><p>The grid matters because <strong>treating an Observer like a Champion burns them out, and treating a Champion like an Observer wastes them.</strong> Pair-doing is most powerful for moving Explorers to Practitioners. That&#8217;s where the gap is widest and the lift compounds fastest.</p><p>The rituals plus pair-doing are the engine. Four conditions keep the engine running past cycle three.</p><h3>Set up the four conditions of success</h3><p>These conditions aren&#8217;t extra rituals to bolt on. They&#8217;re the underlying things that have to hold for everything else to work. Set them up at kickoff. Check on them at every retro.</p><ol><li><p><strong>Lock in an active sponsor.</strong> A sponsor isn&#8217;t a manager who approves the network. A sponsor is a manager who protects time, attends demos, and amplifies wins. Picture the most senior person who&#8217;d be willing to walk into a Wednesday demo, ask a sharp question about what was shipped, and Slack a kudos to the contributor&#8217;s manager afterward. That&#8217;s the sponsor. Without one, contributors get pulled back into day-job delivery and the network dies in cycle three. <strong>If you can&#8217;t name your sponsor in one sentence and describe what they did at the last demo, you don&#8217;t have one.</strong></p></li><li><p><strong>Enforce the Definition of Done.</strong> Defining the DoD is easy. Enforcing it is the work. Hold every owner to all five criteria, especially &#8221;tested by a non-creator.&#8221; If an owner shows up at a demo with a prompt that only they can run, the demo isn&#8217;t done. It&#8217;s a status update. Push back warmly: &#8221;Great start. Who on your team can try it before next demo?&#8221; The DoD is what turns &#8220;I built something&#8221; into &#8220;the team can use it,&#8221; and it only happens if someone holds the line.</p></li><li><p><strong>Switch from parallel to themed when the signal appears.</strong> Early on, let contributors pick whatever pain point lights them up. That&#8217;s how you harvest motivation and self-selection. Once the rhythm holds, switch modes: <strong>one theme per cycle, all experiments target it.</strong> Themed cycles produce something the rest of the company can adopt. Parallel sandboxes produce a scattered playbook nobody references. The trick is when. Too early and you kill motivation. Too late and the output stays shallow. <strong>Watch for the signal: more than half the demos start pulling from the same problem area without anyone asking.</strong> When that happens, the team is ready. In practice this lands somewhere between sprint 4 and sprint 6. The signal is the trigger, not the calendar.</p></li><li><p><strong>Make pair-doing a habit, not a one-off.</strong> A single pair-doing session doesn&#8217;t shift behavior. A weekly slot, repeated for a quarter, does. <strong>Hold the calendar slot even when nobody signs up.</strong> The slot itself is the signal that this is how the team works now. After a few quiet weeks, somebody will book in. Usually the explorer who&#8217;s been watching from the sidelines and finally has a real task to bring.</p></li></ol><p>The pattern across all four: <strong>easy to introduce, hard to sustain.</strong> Anyone can stand up a network in a kickoff meeting. The networks that last past cycle three keep these four conditions true after the launch energy fades.</p><p>Which makes the question concrete: how do you actually start?</p><div><hr></div><h2>Start it next sprint</h2><p>Six concrete moves. None require executive buy-in beyond a sponsor and roughly 8 hours per contributor per sprint.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cZ0x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cZ0x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!cZ0x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!cZ0x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!cZ0x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!cZ0x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4154614,&quot;alt&quot;:&quot;Hand-drawn black-and-white timeline with six numbered checkpoints arranged left-to-right along a path, each connected by an arrow. Step 1 (a checklist): &#8220;Identify fast movers.&#8221; Step 2 (a handshake): &#8220;Get manager buy-in.&#8221; Step 3 (a meeting circle): &#8220;Run kickoff workshop.&#8221; Step 4 (a stack of post-its): &#8220;Brainstorm the backlog.&#8221; Step 5 (an hourglass): &#8220;Run the first sprint.&#8221; Step 6 (a forking arrow merging into one path): &#8220;Switch parallel to themed.&#8221; A thin time-marker line runs underneath labeled &#8220;Week 0&#8221; on the left and &#8220;Week 12+&#8221; on the right.&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://www.theaithinker.com/i/196991812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hand-drawn black-and-white timeline with six numbered checkpoints arranged left-to-right along a path, each connected by an arrow. Step 1 (a checklist): &#8220;Identify fast movers.&#8221; Step 2 (a handshake): &#8220;Get manager buy-in.&#8221; Step 3 (a meeting circle): &#8220;Run kickoff workshop.&#8221; Step 4 (a stack of post-its): &#8220;Brainstorm the backlog.&#8221; Step 5 (an hourglass): &#8220;Run the first sprint.&#8221; Step 6 (a forking arrow merging into one path): &#8220;Switch parallel to themed.&#8221; A thin time-marker line runs underneath labeled &#8220;Week 0&#8221; on the left and &#8220;Week 12+&#8221; on the right." title="Hand-drawn black-and-white timeline with six numbered checkpoints arranged left-to-right along a path, each connected by an arrow. Step 1 (a checklist): &#8220;Identify fast movers.&#8221; Step 2 (a handshake): &#8220;Get manager buy-in.&#8221; Step 3 (a meeting circle): &#8220;Run kickoff workshop.&#8221; Step 4 (a stack of post-its): &#8220;Brainstorm the backlog.&#8221; Step 5 (an hourglass): &#8220;Run the first sprint.&#8221; Step 6 (a forking arrow merging into one path): &#8220;Switch parallel to themed.&#8221; A thin time-marker line runs underneath labeled &#8220;Week 0&#8221; on the left and &#8220;Week 12+&#8221; on the right." srcset="https://substackcdn.com/image/fetch/$s_!cZ0x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!cZ0x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!cZ0x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!cZ0x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c7bda9d-c365-401d-9564-acc98c275a62_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The kickoff path: six moves over twelve weeks.</figcaption></figure></div><ol><li><p><strong>Identify the fast movers.</strong> They&#8217;re easy to spot. They post AI things in Slack. They corner you after presentations to show you their latest prototype. They ask whether legal will finally approve a tool they&#8217;ve been quietly using. Make a list. Aim for 4 to 8 names at the team scale, 8 to 15 across functions at the company scale.</p></li><li><p><strong>Get manager buy-in for the time.</strong> Walk to each name&#8217;s manager. Explain the network in two sentences (a small group of motivated people who&#8217;ll experiment, share, and lift the rest of the team) and the time commitment (one day per two weeks, if the contributor has the capacity that sprint). Most managers say yes once the time is bounded.</p></li><li><p><strong>Run a kickoff workshop.</strong> 90 minutes. Four blocks: vision (where is the company on AI maturity, where does it want to be), the three innovation principles (so leadership doesn&#8217;t measure the network only on quick wins), accountabilities (what contributors are signing up for), and an open floor for concerns. The output is alignment, not a deliverable.</p></li><li><p><strong>Brainstorm the first backlog.</strong> Within a week of the kickoff, run a 60-minute session where each contributor lists the friction points they hit in their work. Cluster into 4 to 6 candidate themes. Pick the first sprint&#8217;s items and put them in your existing tooling: Jira, Linear, Notion, whatever the company already uses. <strong>Do not introduce a new tool for this.</strong></p></li><li><p><strong>Run the first sprint, and prime the pump if you have to.</strong> The first demo is the most fragile moment. If two contributors couldn&#8217;t finish, present yourself. Or pull in a piece of pre-existing work and frame it explicitly: &#8221;this is something I built before the network started. I&#8217;m using it today to model what a demo looks like.&#8221; <strong>The goal in cycle one isn&#8217;t volume. It&#8217;s establishing the rhythm.</strong> Once cycle two arrives, real demos start happening and you don&#8217;t have to push anymore.</p></li><li><p><strong>Switch from parallel to themed when the signal appears.</strong> The first cycles are deliberately scattered. Let people pick what they&#8217;re motivated by. Once more than half the demos pull from the same problem area without anyone asking, the rhythm is real and you can switch to themed cycles: one pain point per cycle, all experiments target it. In practice this lands around sprint 4 to sprint 6. The signal is the trigger, not the calendar. <strong>This is the move that turns a fun network into something the rest of the company adopts.</strong></p></li></ol><p>Six moves. Twelve weeks. The network either has a rhythm by then or you&#8217;ve learned what was missing.</p><div><hr></div><h2>Start here</h2><p>Innovation portfolios. Agile rhythm. Pair work. None of these principles are new. <strong>What&#8217;s new is the cost of trying.</strong> A sponsor, a backlog, four rituals, a calendar slot for pair-doing. That&#8217;s the kit.</p><p>Pick a sponsor. Pick four people. Pick a sprint length. <strong>Start.</strong></p><p>In a few months, look at your teams again. Either the gap closed, or you&#8217;ll know exactly which condition stopped holding.</p>]]></content:encoded></item><item><title><![CDATA[How to turn work into cinematic videos with NotebookLM]]></title><description><![CDATA[Open NotebookLM. Add one focused source. Pick the cinematic format. Write instructions with a bold central metaphor. Generate and wait 30 minutes.]]></description><link>https://www.theaithinker.com/p/how-to-turn-work-into-cinematic-videos</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-turn-work-into-cinematic-videos</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 04 May 2026 11:02:59 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cbf4fb2d-5af7-4b57-8e58-de65a0473728_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>NotebookLM keeps quietly dropping new things. A month ago I opened it for something else and spotted <strong>a new video format hiding in the studio panel: cinematic</strong>. I generated one with zero instructions. The result was unexpectedly polished.</p><p>A few weeks later I came back with proper time. Wrote instructions. Specified duration, format, on-screen elements. <strong>The output mostly ignored them.</strong> Tried again. Same thing. I was a few minutes from dropping this article.</p><p>Then <strong>NotebookLM surprised me with this one.</strong> Take a look.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;2ccea835-8176-4df0-b350-4bba306a9efe&quot;,&quot;duration&quot;:null}"></div><p>Honestly, not bad, right? Style. The Netflix logo woven into the staging. Animated transitions, generated charts, stock-footage cuts that fit the narration. <strong>It felt like someone had art-directed it.</strong></p><p>That&#8217;s what&#8217;s possible when the brief lands. Most briefs don&#8217;t. <strong>One in ten does.</strong></p><blockquote><p>Cinematic is a creative tool, not a prompt-and-go tool. <strong>Write it like a film brief</strong>, not like a chat message.</p></blockquote><p>Here&#8217;s the rough flow that produces a generation worth keeping.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jbAl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jbAl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!jbAl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!jbAl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!jbAl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jbAl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.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;:2952362,&quot;alt&quot;:&quot;A hand-drawn five-step infographic showing the linear flow from picking a focused source, through opening Cinematic, writing bold instructions, generating, and iterating on the result.&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://www.theaithinker.com/i/196106672?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A hand-drawn five-step infographic showing the linear flow from picking a focused source, through opening Cinematic, writing bold instructions, generating, and iterating on the result." title="A hand-drawn five-step infographic showing the linear flow from picking a focused source, through opening Cinematic, writing bold instructions, generating, and iterating on the result." srcset="https://substackcdn.com/image/fetch/$s_!jbAl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!jbAl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!jbAl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!jbAl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62bc549-7d0a-46f8-b8d0-76b5fd139c40_2752x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Three sections from here to your own working video:</p><ol><li><p><strong>Learn from my experiments:</strong> what I tested and where it broke.</p></li><li><p><strong>Make your first cinematic video:</strong> the click-by-click and the five patterns that worked.</p></li><li><p><strong>Apply it to real work:</strong> five product-work use cases plus when to play these in a meeting.</p></li></ol><p>Press play.</p><div><hr></div><h2>Learn from my experiments</h2><h3>The setup: one PRD, +10 cinematic videos</h3><p>I didn&#8217;t go far for the topic. I&#8217;m reusing the same fictional Netflix feature I built around in my previous post on visual storytelling:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0bc6c294-1d06-47c2-8b0e-b49821fe686f&quot;,&quot;caption&quot;:&quot;Short on time? I get it. Here is the entire step-by-step guide summarized in a single visual:&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to elevate visual storytelling with Nano Banana Pro&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:4824458,&quot;name&quot;:&quot;Adam Faik&quot;,&quot;bio&quot;:&quot;Helping product managers become AI-native builders. Join for weekly, step-by-step AI playbooks and real-world projects you can apply to your work.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41de16f9-51a4-4763-ba7d-dfb35429b196_1585x1585.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-09T12:02:45.556Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b5f9ccf-7eb9-4aa6-9ff2-175c909c0e0b_1024x731.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://www.theaithinker.com/p/how-to-elevate-visual-storytelling&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187191446,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:6132538,&quot;publication_name&quot;:&quot;The AI Thinker&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!s5nF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37afd3e1-3442-4517-94cb-068668baf9ef_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The pretend feature is &#8220;random shuffle.&#8221; One button on the Netflix home screen that picks a comfort show and starts playing it instantly, so you don&#8217;t lose another twenty minutes scrolling at 11pm. I wrote a PRD for it. Last time, I turned that PRD into a visual library using Nano Banana Pro and a voice note. This time: <strong>same PRD, same notebook, generating videos instead of static images.</strong></p><p>NotebookLM offers three video formats. The differences matter.</p><ul><li><p><strong>Cinematic (New!):</strong> A stitched composition of animated clips, generated images, stock-footage cuts, and on-screen graphs, with a visual style that changes per generation. The video at the top is one.</p></li><li><p><strong>Explainer:</strong> A structured, comprehensive overview that connects the dots within your sources. Single voice, single visual style, more linear.</p></li><li><p><strong>Brief:</strong> A bite-sized version of the &#8220;explainer&#8221;. Same single voice and recognizable style, just shorter. Useful when you want a quick summary, not a vibe.</p></li></ul><p>To feel the difference, here&#8217;s a &#8220;brief &#8220;generation from the same workspace.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;a4c6e999-8ed0-49a2-b4c4-322494fc14ff&quot;,&quot;duration&quot;:null}"></div><p>Cinematic is the one I came to test. <strong>Same source, very different output per generation.</strong></p><p>I generated more than ten cinematic videos with different instructions, varying the framing, the audience, and the visual style each time. The list piled up in the studio panel.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rTvq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rTvq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!rTvq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!rTvq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!rTvq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!rTvq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.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;:1166701,&quot;alt&quot;:&quot;The right-hand Studio panel of NotebookLM showing a list of generated Cinematic videos, with one in progress at the top.&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://www.theaithinker.com/i/196106672?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The right-hand Studio panel of NotebookLM showing a list of generated Cinematic videos, with one in progress at the top." title="The right-hand Studio panel of NotebookLM showing a list of generated Cinematic videos, with one in progress at the top." srcset="https://substackcdn.com/image/fetch/$s_!rTvq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!rTvq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!rTvq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!rTvq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5c79be-3f75-4d29-bd30-dc0b6783a431_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The queue of generated videos in the right-hand Studio panel.</figcaption></figure></div><p>To see every prompt I tested, <a href="https://notebooklm.google.com/notebook/c134df52-1f2d-4deb-b5cd-bfb653c9c231">open the workspace</a>, click any video, hit the &#8220;&#8230;&#8221; menu, and pick &#8220;show prompt&#8221;. The full instructions for that generation appear on the right.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notebooklm.google.com/notebook/c134df52-1f2d-4deb-b5cd-bfb653c9c231&quot;,&quot;text&quot;:&quot;Open NotebookLM&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notebooklm.google.com/notebook/c134df52-1f2d-4deb-b5cd-bfb653c9c231"><span>Open NotebookLM</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RI-x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RI-x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!RI-x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!RI-x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!RI-x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!RI-x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.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;:1870950,&quot;alt&quot;:&quot;A NotebookLM video opened with the Custom Prompt panel revealed on the right side, displaying the full instructions used to generate the video.&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://www.theaithinker.com/i/196106672?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A NotebookLM video opened with the Custom Prompt panel revealed on the right side, displaying the full instructions used to generate the video." title="A NotebookLM video opened with the Custom Prompt panel revealed on the right side, displaying the full instructions used to generate the video." srcset="https://substackcdn.com/image/fetch/$s_!RI-x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!RI-x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!RI-x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!RI-x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d05f3e-ecbb-41b1-a20d-94890c175ea4_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Click the three-dot menu, pick &#8220;show prompt,&#8221; and the full instructions appear on the right.</figcaption></figure></div><p>Honest summary of the batch: <strong>V04 is my favorite</strong>, the one at the top. V05 is also nice, the kind you&#8217;d ship if V04 didn&#8217;t exist. The other eight are okay. Animated graphs, on-screen diagrams, transitions that work. Maybe I&#8217;m being too demanding, but they&#8217;re not at the same level. Not bad videos. Just okay ones.</p><p>You&#8217;ll find the full instructions behind the video further down, plus a template to inspire your own.</p><h3>The honest fight: three constraints to know</h3><p>I want to be honest about <strong>three constraints I hit.</strong> They set the rules of the game.</p><ol><li><p><strong>Instruction-following: partial.</strong> Specify duration, on-screen elements, narrator register, and the system honors maybe half of what you asked for. Sometimes less. <strong>You write a brief; the model interprets.</strong> The output is a mix of what you said and what the model decided to do anyway.</p></li><li><p><strong>The quota: punishing on Pro.</strong> Two cinematic generations per day on AI Pro. Twenty on Ultra. You&#8217;re probably on Pro. Two shots before tomorrow. <strong>A bad brief costs you the whole day.</strong></p></li><li><p><strong>No feedback loop, at all.</strong> You can&#8217;t say &#8221;redo this but tighten the third beat.&#8221; <strong>Each generation is one-shot.</strong> If you don&#8217;t love it, you scrap it and start over with a new full brief.</p></li></ol><p>That&#8217;s what made V04 feel lucky. None of these are reasons not to try cinematic, <strong>they&#8217;re reasons the method has to be deliberate</strong>.</p><h2>Make your first cinematic video</h2><h3>Set up your first generation</h3><p><strong>The clicks are the easy part.</strong> Five steps to a generation in flight.</p><ol><li><p><strong>Create a new notebook.</strong> Go to <a href="https://notebooklm.google.com">notebooklm.google.com</a>. Click &#8220;New notebook&#8221;.</p></li><li><p><strong>Add one focused source.</strong> One. The reflex is to dump every PDF, slide deck, and meeting transcript into the notebook. <strong>More context &#8800; better output.</strong> A PRD. A brief. A one-page strategy doc. A research summary. Pick one. If you really need several, merge them into a single document and read every line: keep only what&#8217;s useful, still valid, and meant to be there.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1IpD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1IpD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!1IpD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!1IpD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!1IpD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!1IpD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.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;:1116916,&quot;alt&quot;:&quot;NotebookLM workspace showing one PRD document loaded as the source on the left side, and the Video Overview tile selected in the Studio panel on the right.&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://www.theaithinker.com/i/196106672?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="NotebookLM workspace showing one PRD document loaded as the source on the left side, and the Video Overview tile selected in the Studio panel on the right." title="NotebookLM workspace showing one PRD document loaded as the source on the left side, and the Video Overview tile selected in the Studio panel on the right." srcset="https://substackcdn.com/image/fetch/$s_!1IpD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!1IpD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!1IpD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!1IpD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd84d2449-379f-4bf2-baa2-9b4d28830732_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Netflix workspace with the PRD as the only source on the left, and Video Overview highlighted in the Studio panel on the right.</figcaption></figure></div><ol start="3"><li><p><strong>Open Cinematic.</strong> Studio panel &#8594; Video overview tile &#8594;small arrow.  Three formats appear. Pick cinematic.</p></li><li><p><strong>Write your instructions.</strong> The field is labeled, exact wording, &#8221;How would you like the video to be customized?&#8221; Style, structure, central metaphor, narrator register, brand hooks, visual style cues. Everything goes here.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oGPN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oGPN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!oGPN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!oGPN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!oGPN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!oGPN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.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;:1117765,&quot;alt&quot;:&quot;NotebookLM&#8217;s Customize Video Overview modal with the Cinematic format selected and a long instructions block visible in the customization field.&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://www.theaithinker.com/i/196106672?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="NotebookLM&#8217;s Customize Video Overview modal with the Cinematic format selected and a long instructions block visible in the customization field." title="NotebookLM&#8217;s Customize Video Overview modal with the Cinematic format selected and a long instructions block visible in the customization field." srcset="https://substackcdn.com/image/fetch/$s_!oGPN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!oGPN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!oGPN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!oGPN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0afaa9b-dde1-4d05-b110-87dfd92c94c9_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The customization modal: pick Cinematic, then write everything into the single instructions field.</figcaption></figure></div><ol start="5"><li><p><strong>Generate. Wait.</strong> Fifteen to thirty minutes. NotebookLM doesn&#8217;t block the tab. The mobile app sends a push when it&#8217;s ready, worth installing for that reason alone.</p></li></ol><p>The clicks are easy. The instructions are the work.</p><h3>Write instructions that land</h3><p><strong>Five patterns showed up across V04 and V05.</strong> Here they are, with one example each, pulled from the briefs that produced both videos.</p><ol><li><p><strong>First-person setup.</strong> Tell the system who you are, who you&#8217;re presenting to, and the feeling you want in the room. Specific, not abstract.</p></li></ol><blockquote><p>I&#8217;m the PM who wrote the random shuffle PRD. I&#8217;m walking the engineering team through the wireframes at sprint planning, and I want it memorable, not sleepy.</p></blockquote><ol start="2"><li><p><strong>One bold genre or format metaphor.</strong> Game show. Sports broadcast. Movie trailer. Late-night talk show. The metaphor gives the model permission to leave its default explainer voice and produce something with actual style.</p></li></ol><blockquote><p>Pitch the wireframes as a 1980s prime-time TV game show called &#8220;spin to unwind.&#8221;</p></blockquote><ol start="3"><li><p><strong>A named central scene with brand woven in.</strong> The brand belongs in the first paragraph, not as an afterthought.</p></li></ol><blockquote><p>Behind them, a velvet-curtain wall is studded with Netflix show tiles. Friends, Seinfeld, Brooklyn 99, Breaking Bad. Each glowing under studio spotlights.</p></blockquote><ol start="4"><li><p><strong>Segmented beats with PRD-element labels.</strong> This is the trick. Each beat of the metaphor gets a name and a label pointing at its source-document equivalent in parentheses. The model uses both.</p></li></ol><blockquote><p>The buzzer (a.k.a. the random shuffle button): A gigantic red buzzer sits center stage. Dramatic close-up. The audience gasps.</p></blockquote><ol start="5"><li><p><strong>A tone directive, a sign-off, a visual style paragraph.</strong> Tone translates content into the metaphor&#8217;s currency. Sign-off lands the metaphor. Visual style is 8 to 12 comma-separated phrases on palette, lighting, typography, voiceover, and sound, appended to the same block.</p></li></ol><blockquote><p>Tone: Treat every wireframe element like a game-show set piece.</p><p>Sign-off: Press the button. Win the night.</p><p>Visual style: 1980s American prime-time game show, neon-accented set, chunky Las Vegas-style typography, studio spotlights, velvet curtains, lower-third prize graphics in flashing yellow...</p></blockquote><p><strong>The reusable template.</strong> Strip out the Netflix specifics and you have a fill-in-the-blanks shape that works for any source artifact and any audience.</p><blockquote><p>I&#8217;m the [role] who [authored the source artifact]. I&#8217;m presenting [the artifact] to [audience] at [occasion], and I want the room to feel [the desired register].</p><p>Deliver it as [a bold genre or format metaphor]. [Two sentences naming the central setting, with at least one brand visual hook woven in.]</p><p>The beats:</p><p>- [Beat 1] (a.k.a. [source element]): [vivid scene + how the narrator frames it].</p><p>- [Beat 2] (a.k.a. [source element]): [same shape].</p><p>- [Beat 3] (a.k.a. [source element]): [same shape].</p><p>- [Beat 4] (a.k.a. [source element]): [same shape].</p><p>Sign-off: [one closing line that lands the metaphor].</p><p>Tone: [three-word descriptor]. No irony. Treat [the source content] like [the metaphor&#8217;s currency].</p><p>Visual style: [8 to 12 comma-separated phrases on palette, lighting, typography, graphics, voiceover, sound, with 1 to 2 brand-specific hooks].</p></blockquote><p><strong>The patterns in action: V04 in full.</strong> Here&#8217;s the actual instructions block that produced the video at the top. Read it as a showcase of how the five patterns play out together, not as something to copy. The template above is your starting point.</p><blockquote><p>You are the product manager who wrote the PRD for Netflix&#8217;s random shuffle feature. You&#8217;re walking the engineering and design teams through the low-fidelity wireframes so the whole room sees the interaction flow before sprint planning, and you want it memorable, not sleepy.</p><p>Pitch the wireframes as a 1980s prime-time TV game show called &#8220;spin to unwind.&#8221; The host wears a sparkly navy suit, smiles too hard, and narrates every interaction like a big reveal. Tired Tom is tonight&#8217;s lucky contestant.</p><p>- Segment 1: The wheel (a.k.a. the home screen). The host stands in front of a giant spinning wheel made of Netflix tiles. &#8220;Behind each of these tiles, Tom, is another agonizing decision. But we&#8217;ve got a better way.&#8221;</p><p>- Segment 2: The warm-up round (a.k.a. onboarding). The host walks Tom through three quick onboarding taps with studio applause after each one. &#8220;Now choose your three favorite sitcoms, Tom. Lock &#8216;em in!&#8221;</p><p>- Segment 3: The buzzer (a.k.a. the random shuffle button). A gigantic red buzzer sits center stage. Dramatic close-up. The audience gasps as Tom hovers. Slam cut when he presses. Lights go wild.</p><p>- Segment 4: The prize (a.k.a. the playback screen). The Friends opening credits begin. Confetti falls. Tom lifts a trophy shaped like a remote control.</p><p>The host narrates wireframe elements as game-show set pieces, not as UX components. Each step gets a studio sting, a lower-third prize-value graphic, and at least one audience reaction shot. Around 2 minutes total.</p><p>Visual style: 1980s American prime-time game show, neon-accented set, chunky Las Vegas-style block typography, studio spotlights, enthusiastic announcer voiceover, orchestral stings between segments, lower-third prize graphics in flashing yellow, velvet curtains, audience reaction shots.</p></blockquote><p>This worked once. Plenty of close variants didn&#8217;t. <strong>The five patterns above are your best shot at finding your own working version.</strong></p><h3>Iterate on what almost worked</h3><p><strong>No native feedback loop in NotebookLM.</strong> You can&#8217;t comment on a generation and ask for a tweak the way you would in chat. Each Cinematic generation is one-shot. Default move: scrap it and start over with a new full brief.</p><p>There&#8217;s a workaround I haven&#8217;t tested on cinematic yet. I think it&#8217;s the path forward when you land a near-perfect generation.</p><p><strong>Download the video. Add it back to the notebook as a source.</strong> NotebookLM accepts video files. Once it&#8217;s in there, launch a new generation that starts from that source video with small adjustments. The kind of feedback you&#8217;d give:</p><ul><li><p>Change one specific sequence and keep the others as they are.</p></li><li><p>Swap a specific line of narration for new wording.</p></li><li><p>Restructure the order of the beats.</p></li><li><p>Adjust the visual style or palette of one segment.</p></li></ul><p>I haven&#8217;t run this on cinematic, quota burned. I tested the same trick on slides for the slides post a few months ago, and it worked surprisingly well:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ad090496-b35f-4fdf-8b83-31cf6d5af7d6&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to create top-tier slides with NotebookLM&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:4824458,&quot;name&quot;:&quot;Adam Faik&quot;,&quot;bio&quot;:&quot;Helping product managers become AI-native builders. Join for weekly, step-by-step AI playbooks and real-world projects you can apply to your work.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41de16f9-51a4-4763-ba7d-dfb35429b196_1585x1585.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-12-22T12:03:10.622Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71b97be0-3c4e-41a6-8743-32e4001419c3_1024x731.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://www.theaithinker.com/p/how-to-create-top-tier-slides-with&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:182238903,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:6132538,&quot;publication_name&quot;:&quot;The AI Thinker&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!s5nF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37afd3e1-3442-4517-94cb-068668baf9ef_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><strong>Same idea:</strong> feed the system its own previous output as a starting point, then steer.</p><p>It&#8217;s not officially documented. It emerged from how NotebookLM treats video as a valid source format. <strong>If you try it on cinematic before I do, tell me what you find.</strong></p><h2>Apply it to real work</h2><h3>Pick from five use cases</h3><p>With only two cinematic generations per day on AI Pro, the question is <strong>which moments at work are worth one of your shots</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_!vXWt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vXWt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!vXWt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!vXWt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!vXWt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!vXWt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.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;:3821495,&quot;alt&quot;:&quot;A vertical list of five cards showing product-work use cases for a cinematic video: pitch the strategic case to leadership, walk the dev team through the wireframes, brief marketing on the campaign positioning, kick off cross-functional research with design, and open the all-hands with the long-term vision.&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://www.theaithinker.com/i/196106672?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A vertical list of five cards showing product-work use cases for a cinematic video: pitch the strategic case to leadership, walk the dev team through the wireframes, brief marketing on the campaign positioning, kick off cross-functional research with design, and open the all-hands with the long-term vision." title="A vertical list of five cards showing product-work use cases for a cinematic video: pitch the strategic case to leadership, walk the dev team through the wireframes, brief marketing on the campaign positioning, kick off cross-functional research with design, and open the all-hands with the long-term vision." srcset="https://substackcdn.com/image/fetch/$s_!vXWt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!vXWt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!vXWt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!vXWt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a198d0f-2e41-4bd5-bba5-89bb5c057f37_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Five places this format genuinely pays off. Each comes with a one-line snippet to spark your own brief.</p><ol><li><p><strong>Pitch the strategic case to leadership.</strong> Quarterly reviews, board prep, exec narrative. Makes the bet feel like a story, not a slide deck.</p></li></ol><blockquote><p>Deliver it as an ESPN SportsCenter broadcast. The anchor calls activation, watch-through, and retention like championship stats.</p></blockquote><ol start="2"><li><p><strong>Walk the dev team through the wireframes.</strong> Sprint planning, design reviews, kickoff sessions. Forces the room to pay attention to a UI flow they&#8217;d otherwise zone out on.</p></li></ol><blockquote><p>Pitch the wireframes as a 1980s prime-time TV game show called &#8220;spin to unwind.&#8221; A host in a sparkly navy suit narrates every interaction like a big reveal.</p></blockquote><ol start="3"><li><p><strong>Brief marketing on the campaign positioning.</strong> Before anyone writes a line of copy. Marketing writes copy after feeling the trailer, not before.</p></li></ol><blockquote><p>Deliver it as a summer-blockbuster trailer drop. A booming voiceover, a hundred-foot Netflix marquee, lens flares across every brand reveal.</p></blockquote><ol start="4"><li><p><strong>Kick off cross-functional research with design.</strong> Surface the user pain before the team designs around it. Each viewer persona becomes a guest with a story.</p></li></ol><blockquote><p>Pitch it as a late-night talk show. Three guests walk through the curtain, each tells a 20-second story of last night&#8217;s viewing chaos.</p></blockquote><ol start="5"><li><p><strong>Open the all-hands with the long-term vision.</strong> Town hall, off-site, Product Week. Makes the long-term bet feel inevitable, not abstract.</p></li></ol><blockquote><p>Render it as a prestige-drama teaser. Somewhere between Black Mirror and Stranger Things in tone. Serious. Cinematic. Slightly melodramatic.</p></blockquote><h3>Use it before the meeting, not in it</h3><p><strong>These videos don&#8217;t belong inside most meetings.</strong> A working meeting is an exchange between people. A generated video is a broadcast. Stopping a discussion to play two to four minutes of a robotic AI voice saying exactly what the person could have said is awkward. The two don&#8217;t mix.</p><p><strong>The exception is broadcast moments:</strong> all-hands, off-site keynotes, product week openers. The room has already accepted that one person is going to talk at them. A 2-minute cinematic video as the cold open lands hard. That&#8217;s exactly why use case 5 above is the one meeting where I&#8217;d press play in the room.</p><p>For every other kind of meeting, these videos earn their place <strong>before the meeting starts.</strong> Drop the link in the calendar invite. Send it the morning of, in a Slack message, or as the first item in a pre-read packet.</p><p>The audience arrives with the picture in their heads, with formed opinions, with sharper questions. <strong>The meeting becomes the discussion the picture provoked, not the picture itself.</strong></p><p>That&#8217;s where this format unlocks something a static deck doesn&#8217;t: <strong>a shared visual frame</strong> the room arrives with, instead of one you spend the meeting building from scratch.</p><h2>Try it and tell me what landed</h2><p><strong>One in ten generations produced something I&#8217;d share with a team.</strong> The other nine taught me what a working brief looks like.</p><p>The patterns from V04 and V05 are the closest thing I have to a recipe. Recipes for creative tools are aspirational, not deterministic. Plenty of close variants of the same brief produced forgettable output.</p><p>NotebookLM recently added a <strong>per-slide feedback feature for slides.</strong> You comment on a single slide, and the system regenerates that slide with the comment applied. If that pattern lands on cinematic, the workaround above becomes unnecessary, and real iteration becomes possible inside the tool. Worth checking back in a few months.</p><p>In the meantime: try it on something you&#8217;d otherwise put in a deck. <strong>Tell me what landed.</strong> If you crack a different pattern that works, send the instructions, I&#8217;ll share it in a follow-up post.</p>]]></content:encoded></item><item><title><![CDATA[How to use AI to actually learn to code]]></title><description><![CDATA[Open Claude.ai or any other LLM chat. Paste a Kaggle dataset and ask it to be your tutor. Follow the plan one phase at a time. Get a second opinion at the end to catch what you missed.]]></description><link>https://www.theaithinker.com/p/how-to-use-ai-to-actually-learn-to</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-use-ai-to-actually-learn-to</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 27 Apr 2026 11:00:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8dbcfe11-74af-461e-9469-fc815d450cd1_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few months ago, I was preparing a user research session with Gemini. It generated a full set of interview questions with complete confidence. Most of them were fine, solid junior-level work, the kind a new PM might hand in on their first session. <strong>But a few were terrible.</strong> Asking users what they want from the product. Asking them to predict the future. Classic discovery-principle violations I&#8217;d spent years learning to spot.</p><p>I caught the bad ones instantly. The AI didn&#8217;t flag them as risky. It produced them with the same tone as the good ones. <strong>The point: this is competent junior output that still needs an expert in the room.</strong> What happens to someone who isn&#8217;t?</p><p>The same thing happens with code, only worse. The output looks competent. The notebook runs. The accuracy number sounds plausible. <strong>And you ship a model that&#8217;s been cheating on the test the whole time, because you didn&#8217;t have the vocabulary to spot it.</strong> It&#8217;s a pattern I&#8217;ve seen repeatedly, and the project we&#8217;re about to walk through illustrates it better than any abstract example could.</p><p><strong>AI amplifies what you already know.</strong> Your expertise, and your gaps. That&#8217;s why learning still matters even when the AI writes the code, and it&#8217;s also why learning has never been easier, because <strong>the same AI that exposes the gaps can be the patient tutor that closes them.</strong></p><p>Five sections to get from there to a working model on GitHub:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KLBn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KLBn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!KLBn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!KLBn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!KLBn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KLBn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3375484,&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.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_!KLBn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!KLBn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!KLBn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!KLBn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45096f3c-d135-4692-b646-90179a5682bd_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>Why I changed my mind about PMs and code</p></li><li><p>The build, narrated from the inside: from a Kaggle dataset to a working model, with one classic ML mistake caught along the way</p></li><li><p>The best practices for using an LLM as your tutor, plus what it actually feels like</p></li><li><p>What AI changes about learning, ten years apart, same author, different experience</p></li><li><p>Your first project, this evening</p></li></ul><p>Let&#8217;s start with what I believed a year ago, and how the year proved me wrong.</p><div><hr></div><h2>Why this matters</h2><p>Two objections come up every time I talk about this with another PM. They were my objections too, word for word, until a year ago.</p><ul><li><p><strong>Objection 1.</strong> PMs work with developers by design. Discovery, specs, handoff. No one expects a PM to write production code. That&#8217;s the job description.</p></li><li><p><strong>Objection 2.</strong> AI coding tools exist. A few prompts and you have a working prototype. So why spend time learning a skill the machine already does?</p></li></ul><p><strong>Short answer to both, before the long version:</strong></p><ul><li><p>The job description is shifting toward <strong>people who can build</strong>, not just specify.</p></li><li><p><strong>AI amplifies what you already know</strong>, including the gaps.</p></li></ul><p>The PM who learns to code becomes more autonomous, not redundant. The PM who outsources to AI without understanding what it produces becomes more dependent, not less. I held both objections anyway until a year ago. The rest of this section is how the year answered them.</p><h3>The conversion: what I thought, and what actually changed</h3><p>I&#8217;ve been working with AI for ten years, well before LLMs. The unglamorous kind: fraud detection in the public sector, classical machine learning, the kind nobody mentioned at dinner parties. <strong>When LLMs arrived and suddenly everyone was an &#8220;AI expert&#8221; from one ChatGPT prompt, something felt off.</strong> I needed to prove something more durable than prompt fluency.</p><p>I enrolled in a <a href="https://formations.pantheonsorbonne.fr/fr/catalogue-des-formations/diplome-d-universite-DU/diplome-d-universite-KBVXM363/diplome-d-universite-sorbonne-data-analytics-KPMK3V7Z.html">one-year evening program at the Sorbonne</a>. Real projects, actual rigor. My mindset going in: give the minimum, collect the diploma, move on. <strong>I told myself product people don&#8217;t need to code. I believed that.</strong></p><p>Something strange happened. The code wasn&#8217;t the surprise. Writing Python is mechanical, and AI handles most of it. <strong>What was surprising was the development process itself.</strong> Going from a notebook on a laptop to something running in production. Monitoring whether a model is drifting. Routing predictions in real time. Managing data across knowledge graphs. All those questions about how things move from theory to actual production turned out to be more interesting than I&#8217;d expected.</p><p>Then a second shift. I started seeing the same process in PM work. We produce ideas, specifications, prototypes too. <strong>That workflow benefits from the same rigor:</strong> version control, structured checkpoints, outputs that can be reviewed and improved. Product decisions are constrained and unlocked by what&#8217;s technically feasible. PMs who understand the development side don&#8217;t just communicate better with engineers. <strong>They make different bets</strong>, earlier and more confidently, with fewer surprises in sprint review.</p><p>The Git and GitHub mindset shift came last and landed hardest. <strong>I started seeing every project as a GitHub project.</strong> Not just code. Everything. Every commit is an undo button, so experiments become cheap. Every README is a spec for whoever reads it next, human or AI. Every public repo is portable proof of work, the modern PM portfolio. Every conversation with an engineer suddenly has a shared vocabulary, which makes meetings shorter. That mental shift is worth more than the Python syntax.</p><h3>AI amplifies what you already know, including your gaps</h3><p>The Gemini moment from the intro is the principle in one scene. <strong>AI enforces bad habits more efficiently.</strong> It didn&#8217;t invent bad discovery questions. It amplified the prompter&#8217;s lack of domain knowledge and produced them at scale, with confidence.</p><p>The coding parallel is direct and uncomfortable. If you don&#8217;t know what clean, correct code looks like, AI produces messy code and you won&#8217;t catch it. You&#8217;ll think it worked. You&#8217;ll ship the leak. Y<strong>ou&#8217;ll trust the accuracy number without knowing it was built on a cheating feature.</strong> All of that happened in this build. It was a second AI session, not the first, that caught it.</p><p>The synthesis: you don&#8217;t need to learn to code from scratch so you can replace the AI. <strong>You need enough vocabulary to audit what it produces.</strong> That&#8217;s what autonomy looks like in 2026. Not prompting faster, but catching errors earlier and asking sharper questions.</p><p>After one year, that vocabulary includes data leakage, overfitting, class imbalance, training versus test accuracy, feature importance versus SHAP values. <strong>Each term is a filter.</strong> AI output now has to pass through those filters before I trust it.</p><p>The future belongs to people who can think about the future and build in the present. The PM role isn&#8217;t disappearing. <strong>It&#8217;s expanding toward something between product management, design, and development.</strong> This is the right time to close the gap, because the tools to do it have never been more accessible.</p><h3>Use an LLM chat, not a coding tool</h3><p>Start with the popular narrative. There&#8217;s a wave of YouTube videos and op-eds claiming that learning with AI makes people shallow or lazy. Brain-rot, dependency, the death of expertise. Pick the framing. <strong>It&#8217;s true if you let it. It&#8217;s false if you don&#8217;t.</strong> The tool isn&#8217;t the problem. The shortcut is the problem.</p><p>You&#8217;ve almost certainly used an LLM to learn something already. Summarizing a long article, formalizing messy notes, debating a concept, getting a 24/7 explainer for anything you were curious about. That&#8217;s not the new thing. <strong>The new thing is that code is one of the highest-leverage things to learn this way, and almost nobody is doing it right.</strong></p><p>It has never been easier to learn coding from scratch. Ten years ago, the alternatives were a 30-hour video course and a Stack Overflow thread that might get answered tomorrow. Today it&#8217;s a one-on-one tutor that explains every line on demand, never gets impatient, and adjusts to your pace. The blocker for most people isn&#8217;t whether AI can teach code. <strong>It&#8217;s that they&#8217;ve been pointing AI at the wrong job.</strong></p><p>The wrong job is the AI that <strong>generates code instead of teaching it</strong>. Claude Code, Cursor, vibe-coding agents. They produce too much output too fast. You can&#8217;t follow. You can&#8217;t ask. The notebook works because the machine did everything, and the moment something breaks in front of someone, <strong>you discover you didn&#8217;t actually learn anything.</strong> The output looks like productivity. The reality is dependency.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XRmt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XRmt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!XRmt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!XRmt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!XRmt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!XRmt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3340411,&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.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_!XRmt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!XRmt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!XRmt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!XRmt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ceb8da5-26c1-4b63-97b2-09b6a7e86c83_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Important nuance: t<strong>his isn&#8217;t an argument against code-agent tools as a category.</strong> It&#8217;s an argument about when to use them. When you&#8217;re learning, stay in chat mode and stay in the loop. One step, confirm, ask, next step. When you&#8217;re delivering work you already understand (you know what good code looks like, you know the failure modes, you can read what the agent produces and catch what&#8217;s wrong), switching to a code agent is exactly the right move. <strong>The trap is using a code agent to learn. The win is using one when you no longer need to.</strong></p><p>The rule that flips the LLM from code generator to patient instructor, set at the very start of the conversation: &#8220;<strong>Explain before every command.</strong> Wait for my confirmation before the next step.&#8221; That single sentence is the difference between a notebook that teaches you and a notebook that teaches the AI.</p><p><strong>For a PM, the deliverable was never the notebook.</strong> It&#8217;s the vocabulary you can use in the next sprint review. A model you can explain is one you can defend in a meeting, challenge when the numbers look off, and redirect when the team is asking the wrong question. The patient-instructor approach builds that. The code generator skips it entirely.</p><div><hr></div><h2>The project</h2><h3>From data to a working model: the workflow</h3><p>If you want to follow this build yourself, step by step, <strong>the complete guide is here on <a href="https://docs.google.com/document/d/1J4rloRvZ55dYR4-yfxPcOfEco5N6P84IZq1wPNx1LZo/edit?usp=sharing">Google Docs</a></strong>. The final notebook is at <a href="https://github.com/adamfaik/churn-prediction">github.com/adamfaik/churn-prediction</a>. Open it and you&#8217;ll see every cell, every chart, and every commit.</p><p><strong>Why churn prediction.</strong> Understanding how the product is used, or not used, is one of the core jobs of a product person. Why are users leaving? Which segments are at risk? What&#8217;s the gap in lifetime value between cohorts? These are the questions a PM brings to every retention meeting.</p><p>Before LLMs, the answer came down to two slow paths. Either I filed a ticket with the data team and waited two or three weeks for a chart in a slide deck, readable but not mine and not something I could iterate on. Or I tried to learn the analysis myself: a 30-hour Udemy course, half-finished side projects, no one to ask when something broke. <strong>Both paths were inefficient enough that most decisions still got made on intuition and dashboard glances.</strong></p><p>There&#8217;s now a third path, and it&#8217;s the entire reason this article exists. The PM picks a real dataset, opens an LLM chat, and walks through the analysis themselves in an evening. They probably won&#8217;t ship the model to production. <strong>That&#8217;s not the point.</strong> They bring sharper questions to the next retention meeting, having seen the data with their own eyes and built a working model on it. This is the autonomy the section above promised.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bC3-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bC3-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!bC3-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!bC3-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!bC3-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!bC3-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3626673,&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.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_!bC3-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!bC3-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!bC3-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!bC3-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16f1ddb-5964-4b5b-9b82-1d0cd6722ec3_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The workflow itself, before zooming into the build.</strong> The build guide for this project distills four meta-steps that make the whole thing work. They&#8217;re the workflow of <strong>discussing with the LLM</strong>, not the data-science workflow itself. The seven machine learning phases came from the LLM during step 2 and are narrated phase by phase in the next sub-sections.</p><ol><li><p><strong>Set up your workspace once.</strong> VS Code with the integrated terminal, Python and Jupyter inside it. Not the focus, but it has to exist before the rest works. Thirty minutes the first time, never again.</p></li><li><p><strong>Hand the LLM your problem and ask for a plan.</strong> Don&#8217;t ask for code. Paste the dataset description, your full context, and the kind of beginner you are. What comes back is a multi-phase plan with checkpoints. For this build, seven phases of classic ML.</p></li><li><p><strong>Work the plan one phase at a time, with the LLM as patient tutor.</strong> Inside this step lives a five-move loop that runs once per phase: expand the phase into actions, do one action, share the result back (success or failure), ask the deep-dive &#8220;why&#8221; question, verify the checkpoint. Push back when the plan misses something you know is important.</p></li><li><p><strong>Get a second opinion before declaring done.</strong> Open a fresh LLM session with no shared history, attach the GitHub repo, ask &#8220;any feedback?&#8221;. Two AIs disagreeing is the highest-value moment in any build, and in this project it&#8217;s where a data leakage that the tutor never spotted got caught.</p></li></ol><p><strong>For PMs specifically: this isn&#8217;t a one-off ritual for the churn project.</strong> It&#8217;s a portable workflow that runs on any technical topic: the analytics question you&#8217;d normally file with the data team, a feature spec where you need to understand a backend constraint, a competitive analysis where you want to reverse-engineer how a tool works. Same four steps, same five-move loop. The churn project just happens to be where this article shows it in action.</p><h3>Set up your workspace once</h3><p>Before any conversation with the LLM can produce code that runs, the workspace needs to exist. <strong>The setup is light: three installs, one folder, one verification command.</strong> The full step-by-step (with screenshots, troubleshooting notes, and Mac/Windows variants) lives in <a href="https://docs.google.com/document/d/1J4rloRvZ55dYR4-yfxPcOfEco5N6P84IZq1wPNx1LZo/edit?usp=sharing">the reader guide</a>.</p><ul><li><p><strong>Python</strong>, downloaded from <a href="https://www.python.org/downloads/">python.org</a>. macOS and Windows installers are straightforward. On Windows, the only must-do is checking &#8220;Add Python to PATH&#8221; during install, otherwise the terminal won&#8217;t find Python later.</p></li><li><p><strong>VS Code</strong>, downloaded from <a href="https://code.visualstudio.com/">code.visualstudio.com</a>. It&#8217;s the editor where the notebook will live. Two extensions get installed inside it from the Extensions panel on the left sidebar: the <strong>Python</strong> extension (by Microsoft) and the <strong>Jupyter</strong> extension (by Microsoft).</p></li><li><p><strong>A project folder</strong> created on disk wherever you keep projects. This build called it <code>churn-prediction</code>. VS Code opens it via File &#8594; Open Folder. The sidebar shows the folder name at the top and an empty tree below, the canvas before the first file.</p></li></ul><p>Once the folder is open in VS Code, <strong>the integrated terminal opens at the bottom</strong> of the window via View &#8594; Terminal (or <code>Ctrl + `</code>) and is already scoped to the project folder. <strong>From here on, every terminal command runs inside this panel.</strong> No separate terminal app, no confusion about which directory you&#8217;re in.</p><p>A quick verification: <code>python3 --version</code> in the integrated terminal. If it returns <code>Python 3.11.x</code> or newer, the workspace is ready. T<strong>he whole setup takes about 30 minutes the first time and is reusable across every future project.</strong> Accounts you&#8217;ll need by this point: <a href="https://github.com/">GitHub</a> (free), <a href="https://www.kaggle.com/">Kaggle</a> (free), and an LLM chat (Claude.ai or equivalent). Detailed install steps for Mac and Windows live in the <a href="https://docs.google.com/document/d/1J4rloRvZ55dYR4-yfxPcOfEco5N6P84IZq1wPNx1LZo/edit?usp=sharing">reader guide</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p1Q_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p1Q_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!p1Q_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!p1Q_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!p1Q_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!p1Q_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.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;:700556,&quot;alt&quot;:&quot;Dark VS Code window with an empty churn-prediction folder in the Explorer panel and the integrated terminal panel showing a clean shell prompt at the bottom&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Dark VS Code window with an empty churn-prediction folder in the Explorer panel and the integrated terminal panel showing a clean shell prompt at the bottom" title="Dark VS Code window with an empty churn-prediction folder in the Explorer panel and the integrated terminal panel showing a clean shell prompt at the bottom" srcset="https://substackcdn.com/image/fetch/$s_!p1Q_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!p1Q_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!p1Q_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!p1Q_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c33f90-dddb-4b33-afa8-90fc79d2abdd_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Nothing in the workspace yet. The setup is done.</figcaption></figure></div><p>That&#8217;s it for setup. The next conversation is the one that turns this empty workspace into a project.</p><h3>Hand the LLM your problem and ask for a plan</h3><p>With the workspace ready, the first conversation that matters: <strong>the build starts at the dataset.</strong> The <a href="https://www.kaggle.com/datasets/blastchar/telco-customer-churn">IBM Telco Customer Churn dataset on Kaggle</a> is the canonical first ML problem. 7,043 customers, twenty-one attributes, one binary target (did they cancel?). Small enough to finish in an evening, big enough to teach real lessons.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2TR4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2TR4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!2TR4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!2TR4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!2TR4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2TR4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.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;:1049623,&quot;alt&quot;:&quot;Kaggle dataset page for Telco Customer Churn showing the dataset description, columns metadata including demographics, services, account info, and churn label&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Kaggle dataset page for Telco Customer Churn showing the dataset description, columns metadata including demographics, services, account info, and churn label" title="Kaggle dataset page for Telco Customer Churn showing the dataset description, columns metadata including demographics, services, account info, and churn label" srcset="https://substackcdn.com/image/fetch/$s_!2TR4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!2TR4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!2TR4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!2TR4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc76f3a7-9f20-4b68-bd69-71c057d85746_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The dataset on Kaggle. About Dataset, columns metadata, all visible.</figcaption></figure></div><p>Ctrl+A, Ctrl+C the dataset description and column list. Open Claude.ai in a new browser tab. Paste it in along with full context: VS Code open, Python installed, first project, want to learn.</p><p><strong>What comes back is a plan, not code.</strong> A 7-phase plan with goals and checkpoints per phase. The first instinct is to start executing immediately. The right move is to read the whole thing end to end first and ask &#8220;why&#8221; on anything that&#8217;s unclear before touching a keyboard.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jYOc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jYOc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!jYOc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!jYOc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!jYOc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!jYOc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.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;:1006595,&quot;alt&quot;:&quot;Claude.ai chat showing the user&#8217;s first prompt with bullet-pointed setup context, followed by Claude&#8217;s response titled &#8220;Your Churn Prediction Project: The Full Plan&#8221;&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude.ai chat showing the user&#8217;s first prompt with bullet-pointed setup context, followed by Claude&#8217;s response titled &#8220;Your Churn Prediction Project: The Full Plan&#8221;" title="Claude.ai chat showing the user&#8217;s first prompt with bullet-pointed setup context, followed by Claude&#8217;s response titled &#8220;Your Churn Prediction Project: The Full Plan&#8221;" srcset="https://substackcdn.com/image/fetch/$s_!jYOc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!jYOc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!jYOc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!jYOc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c0e3aeb-8d64-4f36-9f17-9148fd79f96c_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The first prompt with full PM context. Claude opens with &#8220;Your Churn Prediction Project: The Full Plan.&#8221;</figcaption></figure></div><p>The plan that came back for this build (yours will look similar): set up the project (libraries, dataset, notebook) &#8594; load and look at the data &#8594; clean what&#8217;s broken &#8594; explore patterns &#8594; prepare for modeling &#8594; train and compare models &#8594; interpret and ship. Seven phases, each with a checkpoint, each one ready to expand into specific actions when its turn comes.</p><p>The simple framing matters. You don&#8217;t ask the LLM to write a churn model. <strong>You ask it to walk you through how to build one.</strong> Same tool, completely different output. Code without learning versus learning that produces code.</p><h3>Work the plan one phase at a time</h3><p>Now the plan turns into a working model. <strong>Each phase runs through the five-move loop introduced above:</strong> expand into actions, do one action, share the result back, ask the deep-dive &#8220;why&#8221; question, verify the checkpoint. Six phases of work, narrated in order.</p><h4>Phase 1: finish the workspace setup with the LLM</h4><p>The LLM&#8217;s Phase 1 isn&#8217;t &#8220;install Python.&#8221; That&#8217;s already done. <strong>It&#8217;s the first concrete output the project needs: a </strong><code>requirements.txt</code><strong> file.</strong> The LLM introduces it as &#8220;a shopping list for Python libraries.&#8221; Eight dependencies, each pinned to a specific version so the project behaves the same way in a year.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3vyL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3vyL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!3vyL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!3vyL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!3vyL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!3vyL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.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;:1028071,&quot;alt&quot;:&quot;Claude.ai chat showing &#8220;What is a requirements.txt? Think of it like a shopping list for Python libraries&#8221; with eight pinned package versions&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude.ai chat showing &#8220;What is a requirements.txt? Think of it like a shopping list for Python libraries&#8221; with eight pinned package versions" title="Claude.ai chat showing &#8220;What is a requirements.txt? Think of it like a shopping list for Python libraries&#8221; with eight pinned package versions" srcset="https://substackcdn.com/image/fetch/$s_!3vyL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!3vyL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!3vyL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!3vyL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a565d63-adf7-438c-a0aa-e9e8dc5b87c0_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The shopping-list metaphor. Eight pinned dependencies, ready to install with one command.</figcaption></figure></div><p>One install command later (<code>pip install -r requirements.txt</code>), all eight libraries are on the machine.</p><p>A pushback that became the first meta-lesson. The LLM&#8217;s plan never included GitHub versioning. Phase 1 was setting everything up locally, with nothing saved anywhere else. I stopped mid-phase and said so plainly: &#8220;I want to save to GitHub from the start, not just at the end.&#8221; Claude adjusted immediately: &#8220;Great instinct, that&#8217;s exactly what real developers do.&#8221; <strong>The plan was a draft. It was always meant to be reshaped.</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_!2-7V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2-7V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!2-7V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!2-7V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!2-7V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2-7V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.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;:938265,&quot;alt&quot;:&quot;VS Code window showing .gitignore file open in the editor and the integrated terminal with successful pip install, git init, and git config commands&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code window showing .gitignore file open in the editor and the integrated terminal with successful pip install, git init, and git config commands" title="VS Code window showing .gitignore file open in the editor and the integrated terminal with successful pip install, git init, and git config commands" srcset="https://substackcdn.com/image/fetch/$s_!2-7V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!2-7V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!2-7V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!2-7V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644440fa-eb3e-4fe5-9603-3e262f6c51a4_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Workspace in shape. <code>.gitignore</code>, the notebook, requirements installed, Git initialized with my name and email.</figcaption></figure></div><p>Two small VS Code rhythms learned during this phase. <strong>A dot next to a filename in the tab bar means unsaved.</strong> Save before every commit, always. After the first push, the source control panel lights up with file colors: green for new files never tracked before, orange for modified files. Both disappear after a clean commit. The empty source control panel becomes the live &#8220;nothing waiting&#8221; status.</p><p>Phase 1 ends with the dataset downloaded into the project folder, the first Jupyter notebook (<code>churn_analysis.ipynb</code>) created and open in VS Code, and the first commit pushed to a fresh GitHub repo.</p><h4>Phase 2: load and look at the data</h4><p>One line of Python and 7,043 customer records appear in a notebook cell. <strong>The LLM calls a DataFrame &#8220;a spreadsheet but with superpowers.&#8221;</strong> Every row is one customer, every column is one thing known about them. The output shows (<code>7043, 21)</code>: 7,043 customers, 21 features. That number becomes the baseline everything is measured against.</p><p>The LLM&#8217;s checkpoint after Phase 2: &#8220;You&#8217;ve loaded 7,043 customer records, confirmed 21 columns, and seen the first few rows. Say the word and we move to Phase 3, where we clean what needs cleaning.&#8221;</p><p><strong>Checkpoints like that became a rhythm.</strong> Each one confirmed what was done, named the state of the data, and bridged to what was next. They made it possible to stop for the day and pick up the next morning without losing the thread.</p><h4>Phase 3: clean what&#8217;s broken</h4><p>The data is messier than it looks. <strong>The </strong><code>TotalCharges</code><strong> column appears to contain numbers but is actually stored as text, a quirk of how the CSV was exported.</strong> Converting it reveals 11 rows with blank values that quietly get dropped. 7,043 becomes 7,032. This is the reality of working with real data: the first thing you do is clean what shouldn&#8217;t need cleaning.</p><p>A small but important move in the same phase: the <code>Churn</code> column gets converted from &#8220;Yes/No&#8221; to 1/0. <strong>Models can&#8217;t read text. Anything binary becomes a number before going further.</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_!a3aY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a3aY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!a3aY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!a3aY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!a3aY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!a3aY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.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;:1025319,&quot;alt&quot;:&quot;VS Code Jupyter notebook showing the output of df.isnull().sum() with all columns reading 0, integrated terminal showing the Phase 3 commit being pushed to GitHub&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code Jupyter notebook showing the output of df.isnull().sum() with all columns reading 0, integrated terminal showing the Phase 3 commit being pushed to GitHub" title="VS Code Jupyter notebook showing the output of df.isnull().sum() with all columns reading 0, integrated terminal showing the Phase 3 commit being pushed to GitHub" srcset="https://substackcdn.com/image/fetch/$s_!a3aY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!a3aY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!a3aY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!a3aY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd8025a-ae85-4b12-aedc-b8443dd3136d_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Checkpoint after Phase 3. Zero missing values across all 20 columns. Ready to explore.</figcaption></figure></div><p>After Phase 3, zero missing values. The LLM&#8217;s checkpoint: &#8220;You independently caught the data leakage concept. That&#8217;s genuinely impressive for someone on their first project.&#8221; (More on what that means in the second-opinion section below.)</p><h4>Phase 4: explore the data</h4><p>EDA, Exploratory Data Analysis, is the habit of looking at the data before doing anything with it. <strong>Not modeling, just looking.</strong> Five or six charts.</p><p>The first chart: overall churn rate. 73.4% stayed, 26.6% left. <strong>That 73.4% number matters more than it looks. It&#8217;s the naive baseline.</strong> A dumb model that predicts &#8220;no churn&#8221; for everyone would be 73.4% accurate by default. Any model has to beat that to be worth anything. Accuracy alone is therefore a terrible metric on imbalanced data, a lesson that comes back hard in Phase 6.</p><p><strong>The chart that changes everything is the second one: churn by contract type.</strong> Month-to-month customers churn at 42.7%, one-year contract customers at 11.3%, two-year customers at 2.8%. The LLM&#8217;s note: &#8220;As a PM, this is the chart that will make you want to immediately call your retention team.&#8221; Month-to-month customers churn at 15 times the rate of two-year customers. That&#8217;s not a pattern. That&#8217;s a business decision waiting to be made.</p><p>A third chart: churn by tenure.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GI1v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GI1v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!GI1v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!GI1v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!GI1v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!GI1v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.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;:948712,&quot;alt&quot;:&quot;Claude.ai chat showing tenure analysis with the bullet &#8220;0-12 months: 47.7% churn &#8212; nearly half of new customers leave in year one&#8221; alongside a small embedded staircase chart&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude.ai chat showing tenure analysis with the bullet &#8220;0-12 months: 47.7% churn &#8212; nearly half of new customers leave in year one&#8221; alongside a small embedded staircase chart" title="Claude.ai chat showing tenure analysis with the bullet &#8220;0-12 months: 47.7% churn &#8212; nearly half of new customers leave in year one&#8221; alongside a small embedded staircase chart" srcset="https://substackcdn.com/image/fetch/$s_!GI1v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!GI1v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!GI1v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!GI1v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F937eae97-eba8-4238-8312-8e83c5bf9db2_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The descending staircase. Year one is the critical retention window.</figcaption></figure></div><p>47.7% of customers churn within their first 12 months. After five years, the rate drops to 6.6%. <strong>Year one is the critical retention window.</strong></p><p>A fourth chart compares monthly charges. Higher-bill customers churn more. The LLM uses this to surface a critical PM lesson: <strong>&#8221;Correlation isn&#8217;t causation.&#8221;</strong> This chart raises the question, it doesn&#8217;t answer it. Do they leave because the bill is high, or are high-bill customers structurally more likely to leave for other reasons? That distinction is exactly the kind of thing AI can&#8217;t tell you on its own. You have to bring the framing.</p><p>The LLM&#8217;s checkpoint after Phase 4: &#8220;You have 5-6 charts that tell a clear story about what drives churn. <strong>You could explain it to a colleague without showing any code.</strong>&#8221; That&#8217;s the sentence that makes a PM feel like a data person for the first time.</p><h4>Phase 5: prepare the data for the model</h4><p>Data needs to be reshaped before a model can read it. <strong>ML models only understand numbers.</strong> They can&#8217;t process text like &#8220;Month-to-month&#8221; or &#8220;Fiber optic.&#8221; The solution is one-hot encoding. The LLM&#8217;s explanation: &#8220;You can&#8217;t say DSL=0, Fiber=1, No service=2 because that implies Fiber is mathematically twice DSL, which is nonsense. One-hot encoding gives each category its own 0/1 column.&#8221;</p><p>Then the train/test split: 80% to train, 20% hidden until the end. The LLM&#8217;s metaphor: &#8221;<strong>like an unseen exam.</strong> If you test the model on data it trained on, it looks brilliant and is useless on real new customers.&#8221; <strong>The 80/20 split is stratified</strong>, which means the original churn rate (26.6%) is preserved in both halves. Without stratification, the test set could randomly end up with 15% churners or 40%, and the reported performance number would be misleading. Stratification keeps the test honest.</p><p>A subtle but critical moment: numerical columns get scaled. Without scaling, a <code>tenure</code> value of 72 dominates a <code>SeniorCitizen</code> value of 1 just because the number is bigger. <strong>The order matters: scale after the split, not before, and only learn the scaling factors from training data.</strong> The LLM&#8217;s framing: &#8220;fit on training, then apply to test, never the other way around.&#8221; A few exchanges earlier I&#8217;d instinctively asked whether scaling should happen before or after the split. Claude&#8217;s reaction: &#8220;You&#8217;ve just independently discovered one of the most important concepts in machine learning.&#8221; First encounter with data leakage thinking, well before the formal catch in the next section.</p><h4>Phase 6: train and compare three models</h4><p><strong>Logistic Regression is the simplest baseline.</strong> It draws a straight line through the data, very explainable. <strong>Random Forest is a committee of decision trees.</strong> The LLM&#8217;s metaphor: &#8220;500 different analysts each studying the data independently, then going with the majority opinion.&#8221; And XGBoost, with the metaphor that&#8217;s actually worth remembering: &#8221;where Random Forest builds trees independently and votes, <strong>XGBoost builds them sequentially.</strong> Each new tree specifically focuses on fixing the mistakes the previous trees made.&#8221;</p><p>Five metrics, set up before any model trains. Each answers a different question:</p><ul><li><p><strong>Accuracy.</strong> Of all predictions, how many were right? Misleading on its own here, since the naive &#8220;predict no churn for everyone&#8221; already hits 73.4%.</p></li><li><p><strong>Precision.</strong> Of the customers the model flagged as churners, how many actually churned? Optimize for precision when false alarms are expensive (wasted retention spend on people who weren&#8217;t leaving).</p></li><li><p><strong>Recall.</strong> Of the actual churners, how many did the model catch? Optimize for recall when missing a churner is expensive (a customer who could have been saved). For most retention teams, recall wins.</p></li><li><p><strong>F1 score.</strong> The balance of precision and recall in one number, useful when both matter.</p></li><li><p><strong>ROC-AUC.</strong> How well the model separates churners from stayers across every possible decision threshold. 1.0 is perfect, 0.5 is a coin flip. The gold standard for churn models because it doesn&#8217;t depend on where you draw the line.</p></li></ul><p><strong>The confusion matrix visualizes all of this in a 2x2 grid:</strong> true positives (correctly flagged churners), false positives (flagged but stayed), true negatives (correctly identified stayers), false negatives (the churners the model missed). One glance tells you what kind of mistakes the model is making, and which kind your team can afford.</p><p>The overfitting catch came right away. <strong>Random Forest reached 100% accuracy on training data but only 79% on the test set.</strong> The LLM named it immediately: &#8220;Classic overfitting, the forest memorized the training set but didn&#8217;t generalize.&#8221; Logistic Regression, the simplest model, held steady at 80% on both. XGBoost hit 74.9% accuracy but 71.4% recall, the best at actually catching churners. That&#8217;s the one that got chosen.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MlZ7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MlZ7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!MlZ7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!MlZ7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!MlZ7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!MlZ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa822991-e794-4643-84e1-f9249db39f18_3248x1956.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;:891148,&quot;alt&quot;:&quot;Claude.ai chat showing a comparison table of Logistic Regression, Random Forest, and XGBoost across Accuracy, Precision, Recall, F1 Score, and ROC-AUC, with XGBoost recall (0.714) bolded as the best&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude.ai chat showing a comparison table of Logistic Regression, Random Forest, and XGBoost across Accuracy, Precision, Recall, F1 Score, and ROC-AUC, with XGBoost recall (0.714) bolded as the best" title="Claude.ai chat showing a comparison table of Logistic Regression, Random Forest, and XGBoost across Accuracy, Precision, Recall, F1 Score, and ROC-AUC, with XGBoost recall (0.714) bolded as the best" srcset="https://substackcdn.com/image/fetch/$s_!MlZ7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!MlZ7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!MlZ7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!MlZ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa822991-e794-4643-84e1-f9249db39f18_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">All three models head to head. XGBoost made a different trade-off and won on recall.</figcaption></figure></div><p><strong>For a PM, this whole phase is one conversation: which metric matters for which business decision?</strong> &#8220;Highest accuracy&#8221; is the wrong default for an imbalanced dataset, and accepting it without question is how a retention strategy gets built on a misleading number. The PM value here isn&#8217;t writing the code. It&#8217;s leading the conversation with the data team, naming the cost of a missed churner versus a false alarm, and choosing the metric that maps to the actual decision the team will make.</p><p>A consistent technique I used across every phase: <strong>ask for per-line comments on every code block.</strong> &#8220;Rewrite this snippet with a comment on every single line. I want it to read like a tutorial when I open the file next week.&#8221; Those comments became my notes. They&#8217;re also what made writing this article possible days later.</p><h3>Get a second opinion before declaring done</h3><p>Between Phase 2 and Phase 3, and again at the end of the build, I opened a new LLM session. <strong>Not the same one.</strong> A fresh tab, zero conversation history, the GitHub repo attached via the GitHub integration. Three words: &#8220;Any feedback?&#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_!hV3a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hV3a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!hV3a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!hV3a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!hV3a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!hV3a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.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;:982639,&quot;alt&quot;:&quot;Claude.ai chat showing the prompt &#8220;I&#8217;m a non-technical PM learning to code. What would you improve about this repo right now?&#8221; with response listing strengths and improvements&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude.ai chat showing the prompt &#8220;I&#8217;m a non-technical PM learning to code. What would you improve about this repo right now?&#8221; with response listing strengths and improvements" title="Claude.ai chat showing the prompt &#8220;I&#8217;m a non-technical PM learning to code. What would you improve about this repo right now?&#8221; with response listing strengths and improvements" srcset="https://substackcdn.com/image/fetch/$s_!hV3a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!hV3a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!hV3a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!hV3a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F841a85ae-bb59-49e6-bd33-1323e071445f_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A new Claude tab. The repo attached. The feedback already pointing at structural and quality issues.</figcaption></figure></div><p><strong>What the fresh session at the end caught was the killer one. </strong>A leaky feature is one that secretly gives the model information about the outcome it&#8217;s supposed to predict, making it look accurate in testing while being useless in production. <strong>TotalCharges is exactly that.</strong> It&#8217;s essentially MonthlyCharges &#215; tenure. Customers who left earlier naturally have lower TotalCharges because they were billed fewer months. The model wasn&#8217;t predicting who would churn. It was detecting who already had. The LLM&#8217;s explanation: &#8220;Like predicting someone died because their life was short.&#8221;</p><p>The fresh session returned five points: the leakage, a missing comment in the code explaining a dropped column, a quantification of the false alarm cost (how many customers would be incorrectly targeted by a retention campaign), a naive baseline that was never explained, and <strong>SHAP values as a more rigorous measure of feature importance than the default method.</strong> Default importance counts how often a feature was used to split decisions; SHAP measures how much each feature actually moved each prediction. They answer different questions, &#8220;how often&#8221; versus &#8220;how much,&#8221; and sometimes produce different rankings. For this dataset, SHAP showed tenure mattering more than default importance suggested, and fiber optic mattering less.</p><p><strong>The fix: drop TotalCharges, retrain all three models, compare before and after.</strong> Slightly lower accuracy, but an honest model. The final commit: &#8220;Address reviewer feedback: remove leaky feature, add cost analysis, SHAP values.&#8221;</p><p>The tutor session never caught it because it had been inside the build since Phase 3. It had no reason to question a decision it made itself. <strong>The fresh session had no stake in being right.</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_!T6S0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T6S0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!T6S0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!T6S0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!T6S0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!T6S0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3430988,&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.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_!T6S0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!T6S0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!T6S0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!T6S0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dff0-2fe5-4e4f-a640-95ffd37b32d9_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>For a PM, this is the moment that earns trust with engineers and data scientists.</strong> Catching a leak, even with help from a fresh AI session, and being able to describe it in one sentence (&#8221;the model was learning from the outcome instead of predicting it&#8221;) is the difference between being someone who reads ML reports and someone who participates in modeling decisions. This single move, repeated a few times over a year, is how a PM gets invited deeper into the technical conversation rather than nudged out of it.</p><h3>The result: what the model actually found</h3><p><strong>XGBoost finished at 71.4% recall, meaning 71 of every 100 customers who actually churn get flagged.</strong> The 15x churn rate gap is the single most actionable finding in the entire build: month-to-month at 42.7%, two-year at 2.8%. 47.7% of customers churn within year one, so onboarding is the highest-leverage intervention. Fiber optic customers churn at nearly double the rate of DSL (41.9% versus 19.0%), a service-quality signal worth investigating.</p><p><strong>The last step is making the model reusable.</strong> The trained XGBoost model gets saved to a <code>.pkl</code> file (along with the fitted scaler and the encoded feature column list). The model can be loaded later and used to score new customers without retraining the whole pipeline. It&#8217;s the small artifact that turns a notebook into something that could plausibly be deployed.</p><p>I wrote three business recommendations directly into the notebook: an annual contract incentive programme, a 90-day onboarding programme for new customers, a targeted NPS investigation for fiber optic customers.</p><p><strong>The <a href="https://github.com/adamfaik/churn-prediction">GitHub repo</a> is the artifact.</strong> A README that reads like a product spec, ten commits that trace the build phase by phase, a notebook where every code cell explains itself in comments, and the saved model file that proves the pipeline works end to end.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TUZf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TUZf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!TUZf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!TUZf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!TUZf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!TUZf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.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;:977860,&quot;alt&quot;:&quot;GitHub repo page for adamfaik/churn-prediction showing the rendered README with sections &#8220;Telco Customer Churn Prediction,&#8221; &#8220;Business Context,&#8221; and &#8220;Dataset&#8221;&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="GitHub repo page for adamfaik/churn-prediction showing the rendered README with sections &#8220;Telco Customer Churn Prediction,&#8221; &#8220;Business Context,&#8221; and &#8220;Dataset&#8221;" title="GitHub repo page for adamfaik/churn-prediction showing the rendered README with sections &#8220;Telco Customer Churn Prediction,&#8221; &#8220;Business Context,&#8221; and &#8220;Dataset&#8221;" srcset="https://substackcdn.com/image/fetch/$s_!TUZf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!TUZf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!TUZf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!TUZf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7efb3ad-0648-4198-8166-9de361c9c12e_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The README opens with business context, the dataset, and the questions the project answers. It reads like a one-pager a PM would hand to a stakeholder.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ixgb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ixgb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!ixgb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!ixgb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!ixgb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ixgb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.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;:974114,&quot;alt&quot;:&quot;GitHub commits page showing the chronological commit list including &#8220;Address reviewer feedback: remove leaky feature, add cost analysis, SHAP values&#8221; at the top and &#8220;Initial commit: project setup and requirements&#8221; at the bottom&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="GitHub commits page showing the chronological commit list including &#8220;Address reviewer feedback: remove leaky feature, add cost analysis, SHAP values&#8221; at the top and &#8220;Initial commit: project setup and requirements&#8221; at the bottom" title="GitHub commits page showing the chronological commit list including &#8220;Address reviewer feedback: remove leaky feature, add cost analysis, SHAP values&#8221; at the top and &#8220;Initial commit: project setup and requirements&#8221; at the bottom" srcset="https://substackcdn.com/image/fetch/$s_!ixgb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!ixgb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!ixgb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!ixgb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7ebb1aa-97db-4377-9d61-f614d5a5ca1f_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ten commits, phase by phase. Anyone can read the build&#8217;s full history without opening the notebook.</figcaption></figure></div><h2>How to use an LLM as your tutor</h2><h3>Apply these seven moves</h3><p>The first one is the headline. The other six assume it&#8217;s already in place.</p><p><strong>Ask for a plan first. This is the superpower.</strong> The move that turns &#8220;use AI&#8221; into &#8220;learn from AI&#8221; is asking for a plan before asking for anything else. Paste your context, paste your goal, paste any constraint you can think of, then ask for a multi-phase plan with checkpoints. <strong>It works for far more than ML:</strong> a feature spec, a competitor breakdown, a backend system you want to understand, a cooking technique, a workout program, a Spanish grammar topic you&#8217;ve avoided for years. The plan gives you a runway and gives the LLM a frame. The first conversation in this entire build was exactly this move. Paste the Kaggle dataset and the PM context, get a 7-phase plan back. Every other technique below assumes the plan exists.</p><p><strong>Drop a screenshot before you describe.</strong> The LLM reads UI state, not just text.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PTHW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PTHW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!PTHW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!PTHW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!PTHW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!PTHW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.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;:909817,&quot;alt&quot;:&quot;Claude.ai response titled &#8220;Perfect &#8212; that looks exactly right!&#8221; identifying Python 3.13.3 from a VS Code screenshot and noting potential xgboost compatibility&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude.ai response titled &#8220;Perfect &#8212; that looks exactly right!&#8221; identifying Python 3.13.3 from a VS Code screenshot and noting potential xgboost compatibility" title="Claude.ai response titled &#8220;Perfect &#8212; that looks exactly right!&#8221; identifying Python 3.13.3 from a VS Code screenshot and noting potential xgboost compatibility" srcset="https://substackcdn.com/image/fetch/$s_!PTHW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!PTHW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!PTHW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!PTHW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653e1200-7ea7-494e-9467-e9af8d6fba4e_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Claude reading the UI: &#8220;you&#8217;re running Python 3.13.3 (visible in the bottom-right corner).&#8221; No error happened yet.</figcaption></figure></div><p>In Phase 1, before any error had happened, the LLM noticed &#8220;Python 3.13.3 in the bottom-right corner&#8221; of a VS Code screenshot and flagged that one library (xgboost) might need extra handling on that version. <strong>It read the kernel selector, the toolbar, the Explorer panel.</strong> Save the typing. Paste the picture and let the model do the inspection.</p><p><strong>Treat errors as conversation, not failure.</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_!JZ4v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JZ4v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!JZ4v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!JZ4v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!JZ4v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!JZ4v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.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;:1108593,&quot;alt&quot;:&quot;VS Code Jupyter notebook showing import cell and ModuleNotFoundError: No module named &#8216;pandas&#8217; in the output&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code Jupyter notebook showing import cell and ModuleNotFoundError: No module named &#8216;pandas&#8217; in the output" title="VS Code Jupyter notebook showing import cell and ModuleNotFoundError: No module named &#8216;pandas&#8217; in the output" srcset="https://substackcdn.com/image/fetch/$s_!JZ4v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!JZ4v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!JZ4v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!JZ4v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67a73ea7-1786-4b63-9945-85dcd4093b59_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The error every Python beginner sees at least once.</figcaption></figure></div><p>When <code>import pandas as pd</code> returned <code>ModuleNotFoundError: No module named &#8216;pandas&#8217;</code>, the response wasn&#8217;t &#8220;you broke it.&#8221; <strong>It was a metaphor and a fix.</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_!tFQ2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tFQ2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!tFQ2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!tFQ2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!tFQ2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!tFQ2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.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;:921705,&quot;alt&quot;:&quot;Claude.ai response titled &#8220;Classic beginner issue &#8212; easy fix!&#8221; explaining that the kernel uses a different Python and using the metaphor of installing apps on someone else&#8217;s phone&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://www.theaithinker.com/i/195446977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude.ai response titled &#8220;Classic beginner issue &#8212; easy fix!&#8221; explaining that the kernel uses a different Python and using the metaphor of installing apps on someone else&#8217;s phone" title="Claude.ai response titled &#8220;Classic beginner issue &#8212; easy fix!&#8221; explaining that the kernel uses a different Python and using the metaphor of installing apps on someone else&#8217;s phone" srcset="https://substackcdn.com/image/fetch/$s_!tFQ2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png 424w, https://substackcdn.com/image/fetch/$s_!tFQ2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png 848w, https://substackcdn.com/image/fetch/$s_!tFQ2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!tFQ2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5227ae-81f5-4707-9b23-6cbb7b3ac386_3248x1956.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The phone-apps metaphor. One line of plain English flips the error from blocker to lesson.</figcaption></figure></div><p>&#8220;The libraries are installed, but the notebook&#8217;s kernel is using a different Python than the one where we installed them. <strong>Think of it like installing apps on your phone but trying to run them on someone else&#8217;s phone.&#8221;</strong> Then a one-line install fix and a &#8220;restart the kernel&#8221; instruction. Paste the full error verbatim. Ask for the explanation, not just the fix.</p><p><strong>Ask for per-line comments on every code block.</strong> &#8220;Rewrite this snippet with a comment on every single line. I want it to read like a tutorial when I open the file next week.&#8221; Those comments became my study notes. <strong>They&#8217;re also the lines I&#8217;ll quote when someone asks how the code works six months later.</strong> The pattern is portable: any AI-generated artifact (SQL, config file, spec doc) can be made to explain itself line by line.</p><p><strong>Ask the same question three different ways.</strong> The LLM doesn&#8217;t get frustrated. &#8220;Explain this like I&#8217;ve never seen code.&#8221; &#8220;Now as a PM, not an engineer.&#8221; &#8220;Now with a real-world analogy.&#8221; <strong>Three takes on the same concept.</strong> Keep the one that lands.</p><p><strong>Push back when the plan misses something.</strong> The original plan in this build skipped GitHub versioning entirely. Phase 1 set everything up locally with no remote backup. I stopped mid-phase, said so plainly, and the plan adjusted immediately (&#8221;Great instinct, that&#8217;s exactly what real developers do&#8221;). <strong>You always know your context better than the LLM does.</strong> When a gap shows up, name it. The LLM has no ego about being wrong; it integrates the correction without friction.</p><p><strong>One warning: when you say &#8220;I&#8217;m a beginner,&#8221; the LLM may oversimplify.</strong> It might skip edge cases, skip error handling, or give a version that works for the tutorial but wouldn&#8217;t hold up in production. <strong>That&#8217;s exactly why the second-opinion session above isn&#8217;t optional.</strong> One session teaches you, a second session audits what you learned. Treat them as a pair, not as alternatives.</p><h3>The felt experience: what changed for me</h3><p>Two observations on what working this way actually feels like, hour after hour:</p><ul><li><p><strong>The encouragement is real.</strong> When the LLM says &#8220;great instinct&#8221; or &#8220;you caught that yourself before I even explained it fully,&#8221; it&#8217;s flagging a moment when you did something a beginner wouldn&#8217;t normally do. The recognition isn&#8217;t decorative. Over the course of an evening&#8217;s focused build, those moments add up to a low-grade momentum that&#8217;s hard to get from a textbook or a video course.</p></li><li><p><strong>You can reframe any output in any direction.</strong> &#8220;Read this output like a PM&#8221; worked dozens of times in this build. The same numbers land completely differently depending on the lens: raw accuracy versus retention budget impact versus board-ready story. The LLM switches frames on request, and the second framing is usually the one your team will actually understand.</p></li></ul><p>What this style of learning quietly removes that traditional self-taught paths never could: <strong>the loneliness of being stuck, and the rigidity of pre-recorded explanations.</strong></p><div><hr></div><h2>What AI changes about learning</h2><p>Step back from the build for a moment. One PM, one project, one evening. <strong>The bigger story is what&#8217;s actually different about learning today</strong>, anchored in the same person trying to learn the same kind of thing, ten years apart.</p><h3>The contrast: same brain, ten years apart</h3><p><strong>Ten years ago.</strong> A 30-hour Udemy course bought on a whim, half-watched in evenings. Stack Overflow for the parts that broke, YouTube comments for the parts that confused. <strong>No one to ask the obvious dumb question.</strong> No one to translate the textbook into plain English. No one to hold the rope when a side project stalled out. Most people who started never finished. Most who finished couldn&#8217;t transfer what they learned to their actual job.</p><p><strong>This year.</strong> A one-year program at the Sorbonne, evening classes alongside a full-time PM job. <strong>The course itself was good.</strong> But the actual learning happened in a different place than the diploma suggested it would.</p><p>I recorded every lecture, transcribed the audio, and pasted the transcripts into Gemini for cleaner notes with the gaps filled in. Once a unit was done, I dropped everything into NotebookLM and let it generate a podcast and a slide deck to replay on the commute, in the gym, between meetings. And through all of it, I kept a continuous conversation going with Gemini: questions about the lecture content, metaphors that helped a hard concept land, code snippets explained line by line, deeper discussions hours after the actual instructor had gone home. **A 24/7 patient tutor in the pocket.**</p><p>The diploma was the scaffolding. <strong>The AI was the actual classroom.</strong></p><h3>The instructor&#8217;s new job</h3><p>This isn&#8217;t an argument that AI replaces teachers. The instructor still does work that AI can&#8217;t. <strong>They tell you what&#8217;s possible</strong>, including the things AI won&#8217;t volunteer because you didn&#8217;t know to ask. <strong>They give you the principles</strong> you need to challenge AI output. <strong>They catch the leaks</strong> (in this build&#8217;s case, a literal data leakage in the model) that you&#8217;d miss because you don&#8217;t yet know leaks exist.</p><p>The four-minute mile is the parallel that fits here. On May 6, 1954, <a href="https://en.wikipedia.org/wiki/Four-minute_mile">Roger Bannister ran a mile in under four minutes</a>, something the medical community genuinely believed was physically impossible. Within a year, dozens of runners broke the same barrier. <strong>Knowing something is possible changes what people attempt.</strong> A good instructor today is mostly in the business of expanding what their students believe is possible, and trusting AI to handle the parts that used to require lectures.</p><p>One last thing. I&#8217;m joining the training team at the Sorbonne on the PM side after this year. <strong>Knowing every future student will have a 24/7 patient tutor in their pocket will probably change how I teach.</strong> More time spent on what AI can&#8217;t do (naming what&#8217;s possible, framing real problems, defending judgment calls, holding the rope when a student is stuck on something that has no clean answer) and less on what it now does for free. The job description of &#8220;instructor&#8221; is being rewritten in real time, and getting to be on both sides of that change at the same moment is <strong>one of the strangest and most interesting things happening in education right now.</strong></p><div><hr></div><h2>Start your first project this evening</h2><p>The bar to start has never been lower. <strong>One dataset, one LLM chat session, one question: &#8220;give me a beginner-friendly plan.&#8221;</strong></p><p>Don&#8217;t do this for the joy of learning. <strong>Do it the next time a real question lands on your desk</strong>, the kind that would normally turn into a ticket and three weeks of waiting for the data team. Why are users dropping off, what&#8217;s driving conversion, where the support tickets are spiking, which features correlate with retention, which support categories are growing fastest. Pull the export yourself. Ctrl+A, Ctrl+C. Open an LLM chat, not a coding assistant. Paste it in along with what you&#8217;re trying to figure out. Ask for a beginner-friendly plan. Spend an evening on it. You probably won&#8217;t ship the analysis. <strong>You&#8217;ll walk into the next meeting with sharper questions than the people still waiting in the queue.</strong></p><p>The public repo for this build: <a href="https://github.com/adamfaik/churn-prediction">github.com/adamfaik/churn-prediction</a>. Everything is there if you want to see what the end looks like before you start.</p>]]></content:encoded></item><item><title><![CDATA[How I restored an old book with Claude skills]]></title><description><![CDATA[Reopened an abandoned project. Spent an afternoon thinking with Claude Code about what the book should feel like. It finished what I couldn&#8217;t. A book from 1683 changed how I work as a product manager.]]></description><link>https://www.theaithinker.com/p/how-i-restored-an-old-book-with-claude</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-i-restored-an-old-book-with-claude</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 20 Apr 2026 11:01:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a740181d-de6b-4d7c-b80b-3fd212fc0fa5_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few weeks ago I published a book online. A French captivity memoir from 1683, modernized and annotated, sitting quietly at <a href="https://adamfaik.github.io/captivite-mouette/">adamfaik.github.io/captivite-mouette</a>. You can read it right now, in French, from the first page of the preface to the Arabic-French lexicon at the back. <strong>I had told myself I&#8217;d finish that book when I retired.</strong> I&#8217;m still decades away from retirement.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eJlO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eJlO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png 424w, https://substackcdn.com/image/fetch/$s_!eJlO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png 848w, https://substackcdn.com/image/fetch/$s_!eJlO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!eJlO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eJlO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png" width="2971" height="1474" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1474,&quot;width&quot;:2971,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2388254,&quot;alt&quot;:&quot;Alt: Homepage of the captivite-mouette book site showing the cover art, the title &#8220;Relation de la Captivit&#233; du Sieur Mo&#252;ette dans les Royaumes de Fez et de Maroc&#8221;, and a table of contents with chapter links&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01d8162d-54a8-4e99-9eed-df481005b57a_2996x1474.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Alt: Homepage of the captivite-mouette book site showing the cover art, the title &#8220;Relation de la Captivit&#233; du Sieur Mo&#252;ette dans les Royaumes de Fez et de Maroc&#8221;, and a table of contents with chapter links" title="Alt: Homepage of the captivite-mouette book site showing the cover art, the title &#8220;Relation de la Captivit&#233; du Sieur Mo&#252;ette dans les Royaumes de Fez et de Maroc&#8221;, and a table of contents with chapter links" srcset="https://substackcdn.com/image/fetch/$s_!eJlO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png 424w, https://substackcdn.com/image/fetch/$s_!eJlO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png 848w, https://substackcdn.com/image/fetch/$s_!eJlO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!eJlO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28846721-ecaa-44e3-8bbb-4eae1c74c5f1_2971x1474.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The live site. Cover, chapters, annotations, the whole thing.</figcaption></figure></div><p>Here&#8217;s the part that still surprises me. I didn&#8217;t set out to finish it. That afternoon, I was working on something else in Claude Code and it was taking its time on a slow task.</p><p>I could have scrolled Instagram. Instead, I opened a second VS Code window, pulled up the repo of that abandoned book project, and started poking around. Just to have something to do while another window was busy.</p><p>A few hours later, I had compared twenty-one chapters to the original 1683 source, added about a hundred and forty historical annotations (each one with a cited source), and published the whole thing on GitHub Pages. <strong>I had not meant to finish the book.</strong> I meant to have something to do while another task was thinking. And the work just... happened.</p><p><strong>It&#8217;s about the shift in how I work.</strong> How I went from thinking of Claude Code as &#8221;that thing engineers use for code&#8221; to seeing it as a way to run any project where the same rules have to be applied over and over. Including, apparently, a 17th-century autobiographical memoir and a slice of French-Moroccan history.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c2xj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c2xj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!c2xj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!c2xj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!c2xj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c2xj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3612780,&quot;alt&quot;:&quot;Handmade-style infographic showing five panels in a horizontal flow: A forgotten memoir &#8594; Chat mode, no rules &#8594; Rules in a file &#8594; Three Skills, 21 chapters &#8594; Spot Skills everywhere&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade-style infographic showing five panels in a horizontal flow: A forgotten memoir &#8594; Chat mode, no rules &#8594; Rules in a file &#8594; Three Skills, 21 chapters &#8594; Spot Skills everywhere" title="Handmade-style infographic showing five panels in a horizontal flow: A forgotten memoir &#8594; Chat mode, no rules &#8594; Rules in a file &#8594; Three Skills, 21 chapters &#8594; Spot Skills everywhere" srcset="https://substackcdn.com/image/fetch/$s_!c2xj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!c2xj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!c2xj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!c2xj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2071f06e-2c24-4208-8b05-aa66741ab273_2816x1536.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The arc of the article, at a glance.</figcaption></figure></div><p>Here&#8217;s what the rest of the article covers, in order:</p><ol><li><p><strong>The use case: a forgotten 1683 memoir.</strong> The book, what makes it worth a modern edition, and the personal story behind it.</p></li><li><p><strong>First try: how I used Gemini.</strong> The first attempt: what worked, what the tools got right, and why I stopped anyway.</p></li><li><p><strong>The click: rules in a file, not a chat.</strong> The moment the mindset shifted: from re-pasting rules into a chat to encoding them in a file.</p></li><li><p><strong>How I finished the book: four steps.</strong> Ten editorial rules defined in one morning, three Skills built in sequence, twenty-one chapters run in parallel.</p></li><li><p><strong>Spot skills in every project.</strong> The three-question test and how the same shape shows up in any product week.</p></li></ol><p>Let&#8217;s open the book.</p><div><hr></div><h2>The use case: a forgotten 1683 memoir</h2><p>I found it on <a href="https://archive.org/details/bub_gb_UPc9AAAAcAAJ">archive.org</a> one evening when I was bored and typed &#8221;livre du Maroc&#8221; into the search bar. A pretty chaotic way to stumble on a book. <strong>The title that came back stopped me cold</strong>: <em>Relation de la Captivit&#233; du Sieur Mo&#252;ette dans les Royaumes de Fez et de Maroc.</em></p><p>A Frenchman. Eleven years held captive in Morocco under Moulay Isma&#239;l. Published in 1683. I&#8217;ve always been drawn to the history of both countries, and <strong>a first-person 17th-century memoir from someone who lived both is not a book you scroll past.</strong> I <a href="https://archive.org/details/bub_gb_UPc9AAAAcAAJ">downloaded it</a> instantly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BjxU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BjxU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png 424w, https://substackcdn.com/image/fetch/$s_!BjxU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png 848w, https://substackcdn.com/image/fetch/$s_!BjxU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!BjxU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!BjxU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png" width="1456" height="716" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:716,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:759547,&quot;alt&quot;:&quot;The archive.org viewer showing the scanned 1683 title page of the Mo&#252;ette memoir, with 17th-century typography and the long-s character&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The archive.org viewer showing the scanned 1683 title page of the Mo&#252;ette memoir, with 17th-century typography and the long-s character" title="The archive.org viewer showing the scanned 1683 title page of the Mo&#252;ette memoir, with 17th-century typography and the long-s character" srcset="https://substackcdn.com/image/fetch/$s_!BjxU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png 424w, https://substackcdn.com/image/fetch/$s_!BjxU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png 848w, https://substackcdn.com/image/fetch/$s_!BjxU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!BjxU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34547c8f-c053-4fac-914e-2988bc6a74e6_2996x1474.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Found on <a href="https://archive.org/details/bub_gb_UPc9AAAAcAAJ">archive.org</a>. The original title page, archaic typography included.</figcaption></figure></div><p>The first page was almost unreadable. Not just old French. Pre-1800 French, with the long-s (&#383;) instead of s, and spellings and abbreviations that make your eyes bounce off the page after two sentences. I gave up after three pages.</p><p>A week later I tried again, and something strange happened. <strong>By the end of chapter one I was reading it almost normally.</strong> Your brain does an involuntary translation once you&#8217;ve seen enough of the pattern. It&#8217;s a little like those well-known scrambled-letter paragraphs where the first and last letters are right and everything in the middle is a mess. Same phenomenon, slower setup.</p><p>I finished the book over a long weekend. <strong>Two things hit me.</strong></p><p>The first was the modernity of it. Mo&#252;ette is talking, in 1683, about things that still feel recognizable in 2026. The politics of North Africa. The economics of trans-Mediterranean trade. The porous borders of belief and identity. <strong>The names change. The shape of the conversations doesn&#8217;t.</strong> That&#8217;s the part you never get from a history textbook. Read through someone&#8217;s lived experience and the whole period comes alive from the inside. You don&#8217;t learn about the 17th century. You sit next to someone who lived it.</p><p>The second was that Mo&#252;ette is a weirder narrator than you&#8217;d expect. He was taken captive in the 1670s and then decided, somewhere along the way, to treat his captivity as fieldwork. <strong>He saw himself as an observer.</strong> He believed France and Morocco were eventually going to have to figure out how to talk to each other, and he wanted to come back with something useful for that conversation. A kind of self-appointed diplomat, writing notes in chains. That&#8217;s a strange posture to hold, and it&#8217;s the reason the book is as good as it is.</p><p>And then there&#8217;s the personal layer, which is the part I almost kept to myself. I grew up in Morocco. I moved to France to study and then to work. Mo&#252;ette did the reverse trip, involuntarily, in 1670. I&#8217;m not going to overstate the parallel (I&#8217;m not, to be clear, a captive in France, thank you for asking), but <strong>reading his memoir felt like meeting someone who made my exact trajectory 350 years earlier, in the opposite direction.</strong> That&#8217;s why the book kept tugging at me months after I&#8217;d finished it.</p><p>Here&#8217;s what I started thinking. A book like this deserves more than a scan sitting quietly on archive.org, smelling of basement. A modernized French edition is the minimum. Past that, it deserves a bande dessin&#233;e, a Netflix series, and honestly a Scorsese film, but I&#8217;m willing to negotiate. <strong>It&#8217;s a tight, weird, human account of a period most of us only ever learn in abstractions.</strong></p><p>I checked Amazon. <strong>Nobody had made a modern edition.</strong> If the book was going to get one, I was going to have to do it myself.</p><div><hr></div><h2>First try: how I used Gemini</h2><h3>First attempt: chapters one by one</h3><p>My first attempt was months earlier, and it was all done in Gemini. I&#8217;d open the PDF, copy a page, paste it into the chat, and ask for a modern French transcription. Genuinely, I did not expect this to work.</p><p>The first time it did, I was a little stunned. <strong>Even with archaic spellings and garbled OCR in the source, Gemini came back with readable, well-formed paragraphs.</strong> I kept going, chapter by chapter, pushing several pages at a time thanks to the big context window.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qO8c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qO8c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png 424w, https://substackcdn.com/image/fetch/$s_!qO8c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png 848w, https://substackcdn.com/image/fetch/$s_!qO8c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!qO8c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!qO8c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png" width="1456" height="716" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:716,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:407438,&quot;alt&quot;:&quot;Gemini chat interface showing a chapter of the 1683 memoir being transcribed to modern French, with the archaic source text visible in the prompt&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Gemini chat interface showing a chapter of the 1683 memoir being transcribed to modern French, with the archaic source text visible in the prompt" title="Gemini chat interface showing a chapter of the 1683 memoir being transcribed to modern French, with the archaic source text visible in the prompt" srcset="https://substackcdn.com/image/fetch/$s_!qO8c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png 424w, https://substackcdn.com/image/fetch/$s_!qO8c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png 848w, https://substackcdn.com/image/fetch/$s_!qO8c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!qO8c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2014b7-c0d9-4e45-a50c-7ef53c5f1612_2996x1474.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Gemini chat, one chapter at a time. Each chat its own island.</figcaption></figure></div><p>The result was a working first pass. Chapter by chapter, Gemini turned the archaic French into readable modern French, formatted as markdown. Each chapter came out as a structured file: headings, paragraphs, footnote markers in place.</p><p>Not perfect. There were omissions and meaning drifts I&#8217;d only discover much later. But <strong>it was a genuine starting point. A folder of modernized text, ready to become a book.</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_!Yqpf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yqpf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png 424w, https://substackcdn.com/image/fetch/$s_!Yqpf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png 848w, https://substackcdn.com/image/fetch/$s_!Yqpf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!Yqpf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yqpf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png" width="1456" height="716" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:716,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:369495,&quot;alt&quot;:&quot;Gemini producing modernized French text in markdown format, with chapter headings and paragraphs formatted as a code block&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Gemini producing modernized French text in markdown format, with chapter headings and paragraphs formatted as a code block" title="Gemini producing modernized French text in markdown format, with chapter headings and paragraphs formatted as a code block" srcset="https://substackcdn.com/image/fetch/$s_!Yqpf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png 424w, https://substackcdn.com/image/fetch/$s_!Yqpf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png 848w, https://substackcdn.com/image/fetch/$s_!Yqpf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!Yqpf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5109286-c08e-4759-9269-0f1b0d59e8d0_2996x1474.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Each chapter coming out as a clean markdown file.</figcaption></figure></div><p>The most fun part was the Arabic lexicon at the end of the book. Mo&#252;ette had included a small French / dialectal-Arabic dictionary. Not classical Arabic. Street Arabic from 17th-century Morocco. Running it through Gemini, I realized a lot of those words are still used in Moroccan darija today. <strong>A tiny time capsule of spoken language that survived 350 years.</strong></p><p>I want to be honest about what I was actually doing here. <strong>I wasn&#8217;t using Gemini because it&#8217;s &#8221;the right tool for OCR.&#8221;</strong> I was using Gemini because it was the AI I knew, and chat was the only mode I knew how to work in.</p><p>Open a tab. Write a prompt. Hope the model keeps the context. Paste a page. Paste another page. Thank the gods for the big context window. <strong>Everything I built in this phase, I built in chat mode.</strong> One long conversation per chapter. Rules re-explained in each new tab. No memory between sessions.</p><p>That worked. But it hit a ceiling I couldn&#8217;t see from inside it. Picture the whole project being held together by three hundred Gemini tabs in my favorites bar and my own willingness to keep pasting the same block of instructions into each new one.</p><h3>Use a standard tool, not custom code</h3><p>When I eventually asked Gemini how to publish the book as a website, I expected &#8221;let&#8217;s build a small React app.&#8221; Instead, Gemini pointed me at <a href="https://vitepress.dev/">VitePress</a>, a static-site framework that turns markdown files into a clean, navigable, book-shaped site. I&#8217;d never heard of VitePress. I also hadn&#8217;t asked. <strong>I was about to ask the model to build me something custom, and it quietly told me there was a standard tool for this job.</strong></p><p>That&#8217;s the lesson I keep coming back to. Before you ask an AI to vibe-code a custom thing, ask it the opposite question first:</p><blockquote><p>Is there a standard framework, library, or tool that already does this? If there is, use it.</p></blockquote><p>Most of the time, the answer is yes. A few examples I&#8217;ve hit since:</p><ul><li><p>For a <strong>book or documentation site</strong>, <a href="https://vitepress.dev/">VitePress</a> or <a href="https://docusaurus.io/">Docusaurus</a>.</p></li><li><p>For a <strong>quick internal data dashboard</strong>, <a href="https://streamlit.io/">Streamlit</a>.</p></li><li><p>For a <strong>training or course site</strong>, <a href="https://docusaurus.io/">Docusaurus</a> or <a href="https://www.mkdocs.org/">MkDocs</a>.</p></li><li><p>For an <strong>LLM prototype with a simple UI</strong>, <a href="https://www.gradio.app/">Gradio</a> or <a href="https://streamlit.io/">Streamlit</a>.</p></li><li><p>For <strong>presentation slides</strong> generated from a structured document: <a href="https://marp.app/">Marp</a> (markdown &#8594; slides), <a href="https://www.overleaf.com/learn/latex/Beamer">Beamer</a> (LaTeX &#8594; slides), or a small <a href="https://python-pptx.readthedocs.io/en/latest/">Python script</a> with <code>python-pptx</code> if you need a programmatic PowerPoint.</p></li></ul><p><strong>Off-the-shelf tools are boring.</strong> They&#8217;re also well-tested, documented, styled by people who actually care about typography, and usually fifteen minutes of setup. <strong>Custom code is seductive because the model will happily generate three hundred lines of it.</strong> Resist for a second. Ask the &#8221;is there something standard?&#8221; question. Often the answer saves you from a pile of maintenance you don&#8217;t want.</p><h3>The site build: six steps with Gemini</h3><p>Once VitePress was on the table, I asked Gemini to walk me through it. <strong>Nothing magical happened here</strong>, but the process might be useful if you&#8217;ve never set up a static-site project before.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j09q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j09q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!j09q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!j09q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!j09q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!j09q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3663119,&quot;alt&quot;:&quot;Handmade-style infographic showing six numbered steps in a vertical flow: Create the repo &#8594; Set up the scaffold &#8594; Add content files &#8594; Generate a cover image &#8594; Customize the theme &#8594; Deploy to GitHub Pages&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade-style infographic showing six numbered steps in a vertical flow: Create the repo &#8594; Set up the scaffold &#8594; Add content files &#8594; Generate a cover image &#8594; Customize the theme &#8594; Deploy to GitHub Pages" title="Handmade-style infographic showing six numbered steps in a vertical flow: Create the repo &#8594; Set up the scaffold &#8594; Add content files &#8594; Generate a cover image &#8594; Customize the theme &#8594; Deploy to GitHub Pages" srcset="https://substackcdn.com/image/fetch/$s_!j09q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!j09q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!j09q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!j09q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F013fc4c0-12d1-4204-85ab-584ecf0dc9bd_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Six steps, one afternoon.</figcaption></figure></div><p>Roughly how I did it:</p><ol><li><p><strong>Created a new empty repo</strong> on GitHub for the book project. No git-clone terminal dance. I made the repo on github.com directly, added a README from the web interface, then downloaded the repo as a ZIP when I needed the files locally.</p></li><li><p><strong>Followed VitePress&#8217;s official setup instructions</strong> with Gemini narrating them in plain French as we went. The scaffold gives you a configuration file, a home page, and a <code>docs/</code> folder where your markdown chapters live. Same idea as a Word document with a table of contents, except each chapter is its own small file.</p></li><li><p><strong>Created one markdown file per chapter</strong>, calmly, one at a time, pasting in the modernized French that Gemini had produced during the earlier chat sessions. Files named <code>preface.md</code>, <code>chapitre-1.md</code>, <code>chapitre-2.md</code>, and so on.</p></li><li><p><strong>Asked Gemini to generate a cover image</strong> for the modern edition. Something with period typography and a hint of 17th-century North Africa. It produced something decent on the second try. That became the book&#8217;s homepage art.</p></li><li><p><strong>Asked Gemini to help adjust the VitePress theme</strong> so the site felt closer to the book&#8217;s period. Historical serif fonts that are still readable on screen. A slightly warmer palette than the default. A navigation sidebar with the chapters in order. I described the mood (&#8221;old paper, candle light, but readable on a 2024 laptop&#8221;) and Gemini produced a CSS file that matched it reasonably well.</p></li><li><p><strong>Deployed to GitHub Pages</strong>, again with Gemini&#8217;s instructions, which is where I hit a small hiccup. GitHub Pages will happily render your README as the homepage by default, not your VitePress build. You have to flip a setting in the repo&#8217;s Pages tab to tell it to use a GitHub Actions workflow instead. Fifteen minutes, not fifteen seconds, but once flipped it stayed flipped.</p></li></ol><p><strong>By the end of an afternoon, I had a private, working, scrolling book-shaped site.</strong> A third of the chapters modernized. A cover image. A period-appropriate theme. A deploy pipeline. Not published publicly, but running.</p><h3>The stall: out of time and no plan</h3><p>And then, for a few reasons, I stopped.</p><p>The first reason was the content itself. Mo&#252;ette is a 17th-century Catholic writing about people he considers his enemies, and the vocabulary shows it. <strong>I didn&#8217;t want to push something into the world without knowing how to handle the parts that would land badly.</strong></p><p>The second reason is more boring. I ran out of time and momentum. I had a decent VitePress scaffolding, a cover, maybe a third of the chapters done, and no clear path to the finish line.</p><p>The twenty pieces left to modernize and review felt like a lot of evening hours, and not one of them felt especially fun. <strong>I told myself I&#8217;d come back to it when I retired.</strong> Then I closed the tab.</p><p>It sat there for months.</p><p>Looking back, stopping was the right call. If I&#8217;d kept grinding through chapter-by-chapter pastes in Gemini, I&#8217;d have spent weeks on something that eventually took an afternoon. The problem wasn&#8217;t the effort. It was the shape of work. <strong>I didn&#8217;t even know skills were a thing.</strong></p><p>Leaving the project in a drawer meant I came back to it after I&#8217;d understood something new. <strong>Put it down. Let your understanding catch up. Then open it again.</strong></p><div><hr></div><h2>The click: rules in a file, not a chat</h2><p>Back to the afternoon. Second VS Code window open, abandoned repo loaded, I typed a request. Something like: &#8221;can you compare this modernized chapter to the original 1683 source and tell me what went wrong?&#8221; <strong>Claude Code read both files, thought for a minute, and came back with a list of differences.</strong> Missing paragraphs. Odd word choices. A few proper nouns spelled three different ways across the chapter.</p><p>That alone was useful. But while I was reading the output, a smaller thought hit me: I&#8217;m going to want to do this exact thing on the next chapter. And the one after that. With the same rules.</p><p>In Gemini, that would have meant opening a new chat, re-pasting the rules, re-explaining the context, every time. <strong>I have a folder of three hundred bookmarked Gemini conversations</strong> that exists exactly so I can find the rules I wrote down somewhere and paste them into the new chat. That&#8217;s a lot of effort for something that&#8217;s really just saying &#8221;apply these rules.&#8221;</p><p>What Claude Code let me do instead was create a file. A small markdown file, in a folder called <code>.claude/skills/</code>, with a name and a short description and the rules written out. <strong>Once that file existed, I could type </strong><code>/review-chapter chapitre-2</code><strong> and Claude Code would just... apply the rules.</strong> No re-pasting. No re-explaining. The same behavior every time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2I64!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2I64!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png 424w, https://substackcdn.com/image/fetch/$s_!2I64!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png 848w, https://substackcdn.com/image/fetch/$s_!2I64!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!2I64!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2I64!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png" width="1456" height="716" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:716,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:489745,&quot;alt&quot;:&quot;VS Code editor showing the contents of review-chapter SKILL.md, including the frontmatter with name and description, and the structured instructions for the Skill&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code editor showing the contents of review-chapter SKILL.md, including the frontmatter with name and description, and the structured instructions for the Skill" title="VS Code editor showing the contents of review-chapter SKILL.md, including the frontmatter with name and description, and the structured instructions for the Skill" srcset="https://substackcdn.com/image/fetch/$s_!2I64!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png 424w, https://substackcdn.com/image/fetch/$s_!2I64!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png 848w, https://substackcdn.com/image/fetch/$s_!2I64!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!2I64!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff31c997a-0bc6-46c3-a245-699e98aa9534_2996x1474.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A skill is just a markdown file. Name, description, rules.</figcaption></figure></div><p>The difference isn&#8217;t the AI. It&#8217;s the container. A rule typed into a chat window lives exactly as long as that chat window is open. <strong>A rule written into a file outlives the conversation.</strong> It travels with the repo. It applies the same way next month as it does today.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tXYy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tXYy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!tXYy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!tXYy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!tXYy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!tXYy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3422752,&quot;alt&quot;:&quot;Handmade-style infographic comparing a one-off prompt (rule disappears after the chat) with a Skill (rule lives in a file and gets reused across inputs)&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade-style infographic comparing a one-off prompt (rule disappears after the chat) with a Skill (rule lives in a file and gets reused across inputs)" title="Handmade-style infographic comparing a one-off prompt (rule disappears after the chat) with a Skill (rule lives in a file and gets reused across inputs)" srcset="https://substackcdn.com/image/fetch/$s_!tXYy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!tXYy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!tXYy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!tXYy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb892e00-516e-4c23-b02f-5f716db18ba7_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rules in a prompt evaporate. Rules in a file stick around.</figcaption></figure></div><p>That was the click. I wasn&#8217;t writing a prompt anymore. <strong>I was writing a rule.</strong> The rule lived in a file. The file lived in the repo. Next week, next month, next year, the rule would still be there, applying itself consistently to whatever chapter I pointed it at.</p><p>That&#8217;s the thesis of this article, and I&#8217;ll say it plainly: <strong>any project you&#8217;d run on a whiteboard can be run in a repo.</strong> Not just code. Any project where the same rules have to get applied to multiple inputs. A book. A stack of stakeholder updates. A folder of user-interview transcripts. A weekly research synthesis. <strong>If you&#8217;ve ever pasted the same block of context into a fresh chat window twice, you&#8217;ve hit the shape of work that Skills solve.</strong></p><div><hr></div><h2>How I finished the book: four steps</h2><p>Once the mindset shifted, everything else followed in sequence. <strong>Four steps, each one unlocking the next.</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_!G09L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G09L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!G09L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!G09L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!G09L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!G09L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3968973,&quot;alt&quot;:&quot;Handmade-style infographic showing four numbered boxes in a horizontal flow: Define rules &#8594; Build Skills &#8594; Run in parallel &#8594; Ship with confidence&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade-style infographic showing four numbered boxes in a horizontal flow: Define rules &#8594; Build Skills &#8594; Run in parallel &#8594; Ship with confidence" title="Handmade-style infographic showing four numbered boxes in a horizontal flow: Define rules &#8594; Build Skills &#8594; Run in parallel &#8594; Ship with confidence" srcset="https://substackcdn.com/image/fetch/$s_!G09L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!G09L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!G09L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!G09L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c00eda3-e94c-40c1-9d03-121333310720_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Define rules, build Skills, run in parallel, ship with confidence.</figcaption></figure></div><h3>Define your rules once</h3><p>Before writing any Skill, I needed to know what the rules actually were. I had a vague sense of what the modernization should feel like: preserve Mo&#252;ette&#8217;s voice, handle the old typography, keep the unusual words where they belonged. <strong>A feeling isn&#8217;t a rule, and a rule you can&#8217;t write down in one sentence can&#8217;t live in a skill file.</strong></p><p>So Claude Code and I spent a morning doing something very simple. <strong>One question at a time, with options.</strong></p><p>A typical exchange looked like this:</p><blockquote><p><strong>Claude Code</strong>: For the author&#8217;s voice, which of these three feels right?<br>(A) Keep the original phrasing exactly, even when archaic.<br>(B) Allow light rephrasing for clarity, but preserve personal interjections and hedging.<br>(C) Modernize fully for readability, voice can drift.</p><p><strong>Me:</strong> B. If he says &#8221;je ne sais combien de d&#233;serts&#8221;, that stays. It never becomes &#8221;de nombreux d&#233;serts&#8221;.</p><p><strong>Claude Code:</strong> Got it. Locking that as rule #1: voice preservation, light rephrasing allowed, personal interjections and hedges always kept.</p></blockquote><p>That&#8217;s the pattern. <strong>One question, 2&#8211;3 concrete options, pick one, lock it.</strong> Repeat until you have a list.</p><p>Try it the opposite way and you&#8217;ll freeze. I know this because I&#8217;ve frozen. &#8221;What are your editorial rules?&#8221; is an impossible question. &#8221;Given this paragraph, would you prefer A, B, or C?&#8221; is a simple question. <strong>Options force judgment. Judgment produces rules.</strong></p><p><strong>By the end of the morning, I had ten.</strong> Three of them took real back-and-forth.</p><ul><li><p><strong>Voice preservation</strong> was first. The reason it took ten minutes, not two, is the example I had to nail down: &#8221;je ne sais combien de d&#233;serts&#8221; can&#8217;t become &#8221;de nombreux d&#233;serts.&#8221; That hedged, slightly shy way of describing an overwhelming thing is who Mo&#252;ette is as a narrator. Smooth it out and you lose the person.</p></li><li><p><strong>Handling omissions.</strong> Gemini&#8217;s first pass had quietly left some paragraphs out. The question: reintegrate them silently (A), add editorial brackets to signal they&#8217;d been restored (B), or leave the gaps and note them in a footnote (C). I picked A. Mo&#252;ette wrote those paragraphs. They belong in the text. An editorial bracket interrupts the reading experience with a scholarship signal most readers didn&#8217;t ask for.</p></li><li><p><strong>Sensitive terminology</strong> was the uncomfortable one. Mo&#252;ette uses vocabulary that a 17th-century French Catholic writing about his captors would use. Options: modernize the terms (A), keep them exactly as written and contextualize via annotations (B), or remove the worst instances (C). I picked B. <strong>Changing the vocabulary would be changing the historical record.</strong> The annotations explain without excusing. I&#8217;ll come back to how this made it possible to ship.</p></li></ul><p><strong>The other seven took much less time.</strong> Some were thirty seconds: footnote format was just &#8221;which syntax does VitePress support?&#8221; Done.</p><p>Once the ten rules existed, I saved them in three places. Inside project memory (so Claude Code would always see them). Embedded inside each skill (so the skill carried the rules with it). And in a <a href="https://adamfaik.github.io/captivite-mouette/note-editeur.html">reader-facing editorial note</a> on the published site (so anyone reading the book could see exactly what was done to the text). <strong>Three homes for the same rules. Each one earning its place.</strong></p><h3>The three skills: review, apply, enrich</h3><p><strong>I didn&#8217;t start by designing three Skills.</strong> I started by needing one answer: &#8220;what&#8217;s actually wrong with what Gemini produced?&#8221;</p><p>The first skill I built was <code>review-chapter</code>. I described what I wanted: read a modernized chapter, read the corresponding section of the 1683 source, compare paragraph by paragraph, flag every problem. Then I wrote the skill.</p><p>I ran it on the preface. <strong>The output was immediately useful and immediately humbling.</strong> Twelve instances where Mo&#252;ette&#8217;s personal voice had been smoothed away. The exact sentence I&#8217;d noticed (&#8221;je ne sais combien de d&#233;serts&#8221; quietly rewritten as &#8221;de nombreux d&#233;serts&#8221;) was flagged, with the source passage and a suggested fix.</p><p>I ran it on chapter 1. Same categories: omissions, meaning shifts, OCR artifacts, proper nouns spelled inconsistently. <strong>I had a diagnosis.</strong></p><p>What I didn&#8217;t have was a way to fix all of it consistently. And that&#8217;s when the connection clicked. I had just spent a morning writing ten editorial rules. Those rules were sitting in project memory. &#8221;I have a set of rules I want applied to every chapter. That&#8217;s exactly what a Skill is for.&#8221; <strong>So the second skill wrote itself out of the first.</strong> That became <code>harmonize</code>.</p><p>Running both skills across all the chapters left me with a clean text. But <strong>clean doesn&#8217;t mean alive.</strong> A modern reader hitting Mo&#252;ette&#8217;s offhand mentions of &#8221;les corsaires de Bouregreg&#8221; or &#8221;les Marabouts&#8221; or &#8221;la milice des Ren&#233;gats&#8221; gets nothing: no frame, no context, no reason to care. So a third conversation started: &#8221;what if we added a short sourced annotation at the end of each chapter?&#8221; That conversation produced <code>annotate</code>.</p><p>Three skills, each one discovered by using the previous one (browse in the <a href="https://github.com/adamfaik/captivite-mouette">GitHub repo</a>).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q493!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q493!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png 424w, https://substackcdn.com/image/fetch/$s_!q493!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png 848w, https://substackcdn.com/image/fetch/$s_!q493!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!q493!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!q493!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png" width="1456" height="716" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:716,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:342435,&quot;alt&quot;:&quot;GitHub directory view showing the .claude/skills folder with three subfolders (annotate, harmonize, review-chapter), each containing a SKILL.md file&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="GitHub directory view showing the .claude/skills folder with three subfolders (annotate, harmonize, review-chapter), each containing a SKILL.md file" title="GitHub directory view showing the .claude/skills folder with three subfolders (annotate, harmonize, review-chapter), each containing a SKILL.md file" srcset="https://substackcdn.com/image/fetch/$s_!q493!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png 424w, https://substackcdn.com/image/fetch/$s_!q493!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png 848w, https://substackcdn.com/image/fetch/$s_!q493!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!q493!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09a91550-5fdc-47ed-96c7-3e74948fa5b4_2996x1474.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Three small folders. Three markdown files. That&#8217;s the whole apparatus.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R9Vk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R9Vk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!R9Vk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!R9Vk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!R9Vk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!R9Vk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3068057,&quot;alt&quot;:&quot;Handmade-style infographic showing three boxes in a row: Review (magnifying glass over document, output: Report) &#8594; Apply rules (gear pushing changes into document, output: Edits) &#8594; Enrich (book with sticky notes, output: Annotations)&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade-style infographic showing three boxes in a row: Review (magnifying glass over document, output: Report) &#8594; Apply rules (gear pushing changes into document, output: Edits) &#8594; Enrich (book with sticky notes, output: Annotations)" title="Handmade-style infographic showing three boxes in a row: Review (magnifying glass over document, output: Report) &#8594; Apply rules (gear pushing changes into document, output: Edits) &#8594; Enrich (book with sticky notes, output: Annotations)" srcset="https://substackcdn.com/image/fetch/$s_!R9Vk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!R9Vk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!R9Vk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!R9Vk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbd11bb-2cdf-4566-b9ed-7952103cef9f_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Each Skill produces something the next one builds on.</figcaption></figure></div><p>Here&#8217;s what each one actually does:</p><ul><li><p><code>review-chapter</code>: the diagnostic. Reads the modernized chapter, reads the corresponding section of the 1683 source, compares paragraph by paragraph. Produces a structured report across eight categories (A&#8211;H): omissions, meaning shifts, unauthorized additions, proper-noun inconsistencies, modernization inconsistencies, OCR artifacts, paragraph structure, footnote candidates. Each issue gets a location, a quoted source passage, a problem statement, and a suggested fix. The report ends with an overall grade: Good / Needs minor fixes / Needs significant rework. Read the full SKILL.md <a href="https://github.com/adamfaik/captivite-mouette/blob/main/.claude/skills/review-chapter/SKILL.md">here</a>.</p></li><li><p><code>harmonize</code>: the rules-applier. Applies all ten editorial rules using the edit tool to touch only what needs touching, never rewriting the whole file. Voice preservation, silent reintegration of omissions, proper-noun normalization, footnote discipline, paragraph-structure rules, sensitive-vocabulary preservation. All embedded in the skill itself. When I run <code>/harmonize chapitre-7</code>, it doesn&#8217;t just &#8220;modernize&#8221; the chapter. <strong>It applies the whole editorial policy.</strong> Read it <a href="https://github.com/adamfaik/captivite-mouette/blob/main/.claude/skills/harmonize/SKILL.md">here</a>.</p></li><li><p><code>annotate</code>: the one with the strictest rule. Appends a &#8221;Rep&#232;res historiques&#8221; section to each chapter with five to ten contextual notes. Each note: a brief quote from the chapter, a 3-6 sentence explanation, a cited source. <strong>Every factual claim must be verified via WebSearch before it&#8217;s written.</strong> No exceptions. If the model can&#8217;t verify something, the note either gets dropped or explicitly marked as uncertain. Academic sources preferred. The tone target is &#8221;a knowledgeable friend, not a textbook.&#8221; Read it <a href="https://github.com/adamfaik/captivite-mouette/blob/main/.claude/skills/annotate/SKILL.md">here</a>.</p></li></ul><h3>The run: 21 chapters in parallel</h3><p>Once the three Skills existed, I had to run them across the whole book. That&#8217;s 21 files: the preface, the royal privil&#232;ge, fifteen chapters, a commerce treaty, the Arabic lexicon, a geography annex. <strong>I could have run them one at a time. I didn&#8217;t.</strong></p><p>I did the first chapter in full. Ran <code>/review-chapter chapitre-1</code>, read the report, ran <code>/harmonize chapitre-1</code>, read the diff, ran <code>/annotate chapitre-1</code>, read the annotations. Then I stopped and asked myself a simple question: does this look right? It did. <strong>Then I fanned out.</strong> Claude Code launched sub-agents (parallel workers, up to eleven at a time for the annotation pass) and pointed each one at a different chapter.</p><p>The pattern is worth naming, because it stops you from blowing up a whole project on a flawed first run:</p><blockquote><p><strong>Demo one. Approve it. Then fan out.</strong></p></blockquote><p>The run itself was genuinely fast. Minutes, not hours. Here are the numbers across all 21 files:</p><ul><li><p><strong>412 insertions, 253 deletions</strong> committed across 22 files</p></li><li><p><strong>~70 footnotes</strong> added</p></li><li><p><strong>~140 sourced historical annotations</strong> written</p></li><li><p><strong>Up to 11 concurrent sub-agents</strong> during the annotation pass, 6 during review/harmonize</p></li></ul><p>I want to be honest about the timeline. The &#8221;I finished it in under an hour&#8221; line was the felt experience, not the actual clock.</p><p><strong>The run took minutes. The work took two days.</strong> That morning spent defining rules. An afternoon fixing a few mistakes. Another morning reviewing annotations, rewriting the editorial note, and publishing the site.</p><blockquote><p><strong>Skills aren&#8217;t magic. They&#8217;re leverage. The run is fast because the rules are sharp. The rules take a morning.</strong></p></blockquote><p><strong>What the annotations surfaced is the part I keep bragging about at dinners.</strong> The Republic of Bouregreg, a corsair city-state that existed between 1627 and 1668. Barbary lions, which roamed North Africa until they went extinct in the wild in 1942.</p><p>The fleurs de lys carved by French slaves into the walls of Moulay Isma&#239;l&#8217;s palace at Meknes. The Order of the Merci&#8217;s &#8220;blood vow&#8221;, a fourth monastic vow to offer oneself as a replacement for a captive who couldn&#8217;t be ransomed. I knew none of this before the <code>annotate</code> skill found it and sourced it. <strong>The annotations made the book twice as alive.</strong></p><h3>What made it shippable: values in the skill</h3><p>One of the reasons the book had sat in a private repo for months was the content itself. Some passages are genuinely uncomfortable by today&#8217;s standards. <strong>I wasn&#8217;t sure I wanted my name on a site hosting that content without some kind of frame.</strong></p><p>The <code>annotate</code> skill gave me the frame. Its job on those passages wasn&#8217;t to censor them or smooth them over. It was to contextualize them. <strong>Sourced notes. Historical framing. Scholarly context that helps a modern reader understand what they&#8217;re looking at and why it&#8217;s there.</strong> The content warning on the homepage tells readers what they&#8217;re walking into before they open the first chapter.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ri79!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ri79!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png 424w, https://substackcdn.com/image/fetch/$s_!ri79!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png 848w, https://substackcdn.com/image/fetch/$s_!ri79!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png 1272w, https://substackcdn.com/image/fetch/$s_!ri79!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ri79!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png" width="1456" height="719" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:719,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:619160,&quot;alt&quot;:&quot;The book site&#8217;s &#8220;Avertissement sur le contenu&#8221; page, explaining that the text preserves historically offensive terminology with scholarly context, followed by the editorial methodology&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The book site&#8217;s &#8220;Avertissement sur le contenu&#8221; page, explaining that the text preserves historically offensive terminology with scholarly context, followed by the editorial methodology" title="The book site&#8217;s &#8220;Avertissement sur le contenu&#8221; page, explaining that the text preserves historically offensive terminology with scholarly context, followed by the editorial methodology" srcset="https://substackcdn.com/image/fetch/$s_!ri79!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png 424w, https://substackcdn.com/image/fetch/$s_!ri79!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png 848w, https://substackcdn.com/image/fetch/$s_!ri79!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png 1272w, https://substackcdn.com/image/fetch/$s_!ri79!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0eb81a-b63f-4ae4-af4f-91d869d7847d_2974x1468.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The reader knows before they open the first chapter.</figcaption></figure></div><p>That combination (a content warning and annotations that explain rather than erase) was what finally made me feel ready to ship. <strong>A skill can hold values, not just rules.</strong> The whole policy lives in a file. It can be inspected. It can be argued with. That&#8217;s what I want from a system I put my name on.</p><h3>What I&#8217;d change: use <code>skill-creator</code></h3><p><strong>Only one thing.</strong> Next time, I&#8217;d open Anthropic&#8217;s <code>skill-creator</code> <a href="https://github.com/anthropics/skills/tree/main/skills/skill-creator">skill</a> before writing a single file. It&#8217;s a skill that helps you write other skills. You describe what you want, it scaffolds the folder, the SKILL.md, the frontmatter, all following current best practices. I didn&#8217;t know it existed when I built my three, so I learned the hard way, through trial and Claude Code&#8217;s diagnostic errors. It worked out fine. But if you&#8217;re about to build your first skill, <code>skill-creator</code><strong> is the shortcut I wish I&#8217;d taken.</strong></p><div><hr></div><h2>Spot skills in every project</h2><p>After the book was live, I sat down to write a stakeholder update at work and caught myself thinking: &#8221;wait, this is a skill.&#8221; Not a lightning bolt. <strong>A small, quiet &#8221;oh, this too&#8221; about a task I&#8217;d been doing the hard way for years.</strong></p><p><strong>The book didn&#8217;t teach me skills. It taught me to see them.</strong> Here&#8217;s the practical test I started applying. Three questions, in order:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sXju!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sXju!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!sXju!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!sXju!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!sXju!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!sXju!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.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;:3327655,&quot;alt&quot;:&quot;Handmade-style infographic showing three vertically stacked boxes connected by arrows, each with a question and a side label &#8220;If yes &#8594; it&#8217;s a Skill&#8221;: Am I re-explaining the same rules over and over? / Is there a checklist living in my head I never wrote down? / Does the output need to look the same shape every time?&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://www.theaithinker.com/i/194452271?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade-style infographic showing three vertically stacked boxes connected by arrows, each with a question and a side label &#8220;If yes &#8594; it&#8217;s a Skill&#8221;: Am I re-explaining the same rules over and over? / Is there a checklist living in my head I never wrote down? / Does the output need to look the same shape every time?" title="Handmade-style infographic showing three vertically stacked boxes connected by arrows, each with a question and a side label &#8220;If yes &#8594; it&#8217;s a Skill&#8221;: Am I re-explaining the same rules over and over? / Is there a checklist living in my head I never wrote down? / Does the output need to look the same shape every time?" srcset="https://substackcdn.com/image/fetch/$s_!sXju!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!sXju!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!sXju!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!sXju!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05dfc76a-241c-4608-9c62-3800a0455533_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Three questions. Any yes is enough.</figcaption></figure></div><ol><li><p><strong>Am I re-explaining the same rules over and over?</strong> If you&#8217;ve typed the same block of context into a fresh chat window more than twice, those rules belong in a file, not in your head.</p></li><li><p><strong>Is there a checklist living in my head that I never wrote down?</strong> The quality bar you apply before sending something, the three things you always catch, the format you always enforce. That&#8217;s a skill waiting to be written down.</p></li><li><p><strong>Does the output need to look the same shape every time?</strong> Same structure, same tone rules, same format, week after week. That&#8217;s the exact shape a skill solves.</p></li></ol><p>Applied to a product week, the list shows up fast. I wrote about one of these in detail already: <code>/customer-pulse</code>.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0301579d-d6e0-4c89-b189-7da72888abab&quot;,&quot;caption&quot;:&quot;When I first heard about Claude skills, I dismissed them. &#8220;Custom GPTs with a different name,&#8221; I thought. Anthropic&#8217;s version of Gems. I tried one, shrugged, and moved on.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to build your first Claude Code skill&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:4824458,&quot;name&quot;:&quot;Adam Faik&quot;,&quot;bio&quot;:&quot;Helping product managers become AI-native builders. Join for weekly, step-by-step AI playbooks and real-world projects you can apply to your work.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41de16f9-51a4-4763-ba7d-dfb35429b196_1585x1585.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-04-13T11:01:42.174Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fd3dde8-be3e-4183-8087-737f9dde9061_1024x731.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://www.theaithinker.com/p/how-to-build-your-first-claude-code&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:193361773,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:6132538,&quot;publication_name&quot;:&quot;The AI Thinker&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!s5nF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37afd3e1-3442-4517-94cb-068668baf9ef_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>That skill searches reviews, forums, and app stores for what users are saying, and returns a structured report with ranked themes, real quotes, and a &#8220;Top 3 this week&#8221; action list. If you want the step-by-step on building a skill from scratch, any Skill, that&#8217;s where to start.</p><p>The same pattern shows up across the rest of a product week:</p><ul><li><p><strong>Customer feedback synthesis.</strong> Multiple sources, grouped by theme, real quotes, source links. The rules you re-apply every time are exactly what a skill holds.</p></li><li><p><strong>Stakeholder updates.</strong> Same structure every week, same length target, same tone rules. Skill-shaped.</p></li><li><p><strong>User-interview theming.</strong> A folder of transcripts, a definition of what a good theme looks like, quote extraction with attribution. Skill-shaped.</p></li><li><p><strong>Competitor monitoring.</strong> A list of URLs, a definition of what change looks like, a weekly diff. Skill-shaped.</p></li><li><p><strong>Meeting recaps.</strong> Your team&#8217;s template, your tone rules, action items always in the same format. Skill-shaped.</p></li></ul><p><strong>Once you answer yes to one of those three questions, you&#8217;re looking at a skill.</strong> The only question is which project you want to start with.</p><div><hr></div><h2>Start with a project you already know</h2><p>The book took an afternoon to finish. The afternoon started because another task was thinking and I had a spare VS Code window. <strong>That&#8217;s the whole origin story.</strong></p><p>It&#8217;s still not finished, if I&#8217;m honest. I&#8217;d like to generate comic-book panels with Gemini Nano Banana Pro to tell Mo&#252;ette&#8217;s story visually. Maybe a short film, once video models get a bit cheaper. <strong>Another weekend, another skill.</strong></p><p><strong>Your turn.</strong> You don&#8217;t need a 17th-century book. You just need one project where you already know what good looks like, and where you&#8217;re tired of re-explaining it. Open it. Ask one question: &#8220;what rule am I re-pasting into every fresh chat?&#8221; Write it down. Put it in a file. <strong>That&#8217;s the first skill.</strong></p>]]></content:encoded></item><item><title><![CDATA[How to build your first Claude Code skill]]></title><description><![CDATA[Install Claude Code. Run a skill that searches reviews, forums, and app stores. Understand the building blocks. Build your first skill step by step.]]></description><link>https://www.theaithinker.com/p/how-to-build-your-first-claude-code</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-build-your-first-claude-code</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 13 Apr 2026 11:01:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6fd3dde8-be3e-4183-8087-737f9dde9061_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first heard about Claude skills, <strong>I dismissed them.</strong> &#8220;Custom GPTs with a different name,&#8221; I thought. Anthropic&#8217;s version of Gems. I tried one, shrugged, and moved on.</p><p>Then something shifted. I saw product people getting genuinely excited. Not about the concept, but about what they were building with it. So I carved out an afternoon, sat down, and actually built one from scratch. <strong>And it changed how I think about my work.</strong></p><p>The skill I built is called <code>/customer-pulse</code>. It searches the web for what real users are saying about a product (app store reviews, Trustpilot, forums, comparison articles, etc.), then produces a structured report with ranked themes, real quotes, blind spots, and concrete actions. Everything I built is in this <a href="https://github.com/adamfaik/product-feedback-skill">GitHub repo</a>. Clone it, explore it, use it for your own product.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CnST!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CnST!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png 424w, https://substackcdn.com/image/fetch/$s_!CnST!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png 848w, https://substackcdn.com/image/fetch/$s_!CnST!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png 1272w, https://substackcdn.com/image/fetch/$s_!CnST!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CnST!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png" width="1456" height="710" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:710,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:547054,&quot;alt&quot;:&quot;GitHub page showing the product-feedback-skill repository with README, initial commit, and public visibility badge&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="GitHub page showing the product-feedback-skill repository with README, initial commit, and public visibility badge" title="GitHub page showing the product-feedback-skill repository with README, initial commit, and public visibility badge" srcset="https://substackcdn.com/image/fetch/$s_!CnST!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png 424w, https://substackcdn.com/image/fetch/$s_!CnST!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png 848w, https://substackcdn.com/image/fetch/$s_!CnST!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png 1272w, https://substackcdn.com/image/fetch/$s_!CnST!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce47653a-d9d9-4514-8f95-8d11e058dd8b_2964x1446.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The public repo. Clone it, use it, make it yours</figcaption></figure></div><p><strong>A quick definition:</strong> a skill is a set of instructions written in plain English that lives in your project folder. When invoked, Claude reads those instructions, reads your files, uses real tools (web search, file creation, page fetching, etc.), and produces real output. Unlike a custom GPT or a Gem, <strong>it lives in your repo</strong>. You own it. You version-control it. It evolves with your project.</p><p>Here&#8217;s what we&#8217;ll go through in this article:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1Ked!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1Ked!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!1Ked!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!1Ked!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!1Ked!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1Ked!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5609789,&quot;alt&quot;:&quot;Handmade infographic showing 4 levels as a progression: Level 1 Run a Skill, Level 2 Open and Learn, Level 3 Build Your First Skill, Level 4 Go Further, each with icons and a description of the stop point.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade infographic showing 4 levels as a progression: Level 1 Run a Skill, Level 2 Open and Learn, Level 3 Build Your First Skill, Level 4 Go Further, each with icons and a description of the stop point." title="Handmade infographic showing 4 levels as a progression: Level 1 Run a Skill, Level 2 Open and Learn, Level 3 Build Your First Skill, Level 4 Go Further, each with icons and a description of the stop point." srcset="https://substackcdn.com/image/fetch/$s_!1Ked!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!1Ked!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!1Ked!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!1Ked!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb04ca97b-2260-405f-b1ee-5cbfa8677564_2816x1536.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Level 1: Download the repo and run a skill.</strong> Get Claude Code installed, download the project, run the skill, and see a real feedback report.</p></li><li><p><strong>Level 2: Understand what skills are.</strong> Open the skill files and learn the building blocks: SKILL.md, product context, CLAUDE.md. See how skills compare to custom GPTs, NotebookLM, and saved prompts.</p></li><li><p><strong>Level 3: Build your first skill step by step.</strong> The real story: how I described my problem to Claude Code, the review process that caught 5 issues, and the iteration that turned a generic report into an actionable one.</p></li><li><p><strong>Level 4: Go further.</strong> Where to find existing skills, what MCP servers and agents are, and when skills are the wrong tool.</p></li></ul><p>Each level is self-contained. Stop at Level 1 and still walk away with a working tool. Go to Level 3 and walk away knowing how to build your own.</p><div><hr></div><h2>Why this use case</h2><p><a href="https://github.com/adamfaik/product-feedback-skill/blob/main/.claude/skills/customer-pulse/SKILL.md">Read the full skill instructions</a>. <strong>It&#8217;s plain English, no code.</strong> That file is the entire skill.</p><p>I chose feedback collection because <strong>it&#8217;s something product people will always do.</strong> No matter how much AI disrupts our work, understanding what users actually experience remains a human decision. AI can collect, synthesize, and structure the data faster. But deciding what matters is still ours.</p><p>I considered building skills for other PM tasks: PRD generation, user story refinement, sprint review preparation. I dismissed them. Not because they&#8217;re bad ideas, but because <strong>I&#8217;m genuinely unsure those artifacts will exist in the same form</strong> much longer. When AI can build a working prototype from a conversation, do we still need a 15-page specification document? Maybe the future is less specifying and more building. And maybe <strong>&#8220;building&#8221; increasingly means creating skills that do the work</strong>, which happens to be the topic of this article.</p><p>Feedback collection, though, stays. Users will always talk. <strong>The question is whether we listen fast enough.</strong></p><div><hr></div><h2>Level 1: Download the repo and run a skill</h2><p><strong>Allow about 30 minutes for this level.</strong> At the end, a full customer feedback report will be waiting in your project folder.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!etig!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!etig!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!etig!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!etig!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!etig!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!etig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5648553,&quot;alt&quot;:&quot;Handmade infographic showing 4 steps with arrows: Open your code editor, Install Claude Code, Download the project from GitHub, Run /customer-pulse and get a feedback report&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade infographic showing 4 steps with arrows: Open your code editor, Install Claude Code, Download the project from GitHub, Run /customer-pulse and get a feedback report" title="Handmade infographic showing 4 steps with arrows: Open your code editor, Install Claude Code, Download the project from GitHub, Run /customer-pulse and get a feedback report" srcset="https://substackcdn.com/image/fetch/$s_!etig!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!etig!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!etig!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!etig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25203e35-658e-4b22-bbc8-708d717f2e30_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><h3>Step 1: Open your code editor</h3><p><strong>Open VS Code, Cursor, or any code editor</strong> that has a built-in terminal. If you don&#8217;t have one, download VS Code for free from <a href="https://code.visualstudio.com">code.visualstudio.com</a>.</p><p>Once it&#8217;s open, find the built-in terminal. In VS Code: go to <strong>Terminal &#8594; New Terminal</strong>. A panel appears at the bottom.</p><p>One tip that made a big difference for me: <strong>move the terminal panel to the right side.</strong> In VS Code, right-click the terminal header bar, select <strong>Panel Position &#8594; Right</strong>. This puts your files on the left and Claude Code on the right. Much easier to work with. I spent way too long with it at the bottom before discovering this.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d4N2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d4N2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!d4N2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!d4N2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!d4N2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!d4N2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:670098,&quot;alt&quot;:&quot;VS Code showing the Panel Position dropdown menu with the Right option highlighted.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code showing the Panel Position dropdown menu with the Right option highlighted." title="VS Code showing the Panel Position dropdown menu with the Right option highlighted." srcset="https://substackcdn.com/image/fetch/$s_!d4N2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!d4N2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!d4N2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!d4N2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda428683-abea-4a1a-9352-3a660aa067fb_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Panel Position &#8594; Right. Files on the left, AI on the right</figcaption></figure></div><h3>Step 2: Install Claude Code</h3><p><strong>So what&#8217;s Claude Code exactly?</strong> It&#8217;s an AI assistant that runs inside your terminal. Unlike ChatGPT or Gemini, it doesn&#8217;t live in a browser. <strong>It lives in your project folder.</strong> It can read your files, search the web, create documents, and run skills. Think of it as an AI colleague that sits inside your project and actually does things, not just talks about them.</p><p>One thing to know upfront: <strong>it requires a paid Anthropic plan.</strong> The Pro plan is $20/month and the Max plan is $100/month. <strong>There&#8217;s no free tier for Claude Code.</strong> It&#8217;s worth it, but it&#8217;s good to know before installing.</p><p>To install it, paste this command into the terminal and press Enter:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;7629ce05-1e4d-4723-994c-ad9d4a082d66&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">curl -fsSL https://claude.ai/install.sh | bash</code></pre></div><p>That&#8217;s it. One line. This comes straight from the <strong><a href="https://code.claude.com/docs/en/quickstart">official quickstart guide</a></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_!enPT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!enPT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!enPT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!enPT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!enPT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!enPT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:899949,&quot;alt&quot;:&quot;VS Code showing the terminal on the right with Claude Code successfully installed, version number and path displayed.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code showing the terminal on the right with Claude Code successfully installed, version number and path displayed." title="VS Code showing the terminal on the right with Claude Code successfully installed, version number and path displayed." srcset="https://substackcdn.com/image/fetch/$s_!enPT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!enPT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!enPT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!enPT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1baea8b-6ba4-4231-a08a-c09526896169_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">One command. Claude Code is installed</figcaption></figure></div><p><strong>Now here&#8217;s something that trips up a LOT of people</strong>, and I want to save you the confusion. The terminal has two modes. Right now it&#8217;s in <strong>bash mode</strong>. That means it runs system commands, like the install command you just pasted. But when you launch Claude Code, it switches to <strong>conversation mode</strong>. In conversation mode, you type in natural language, like talking to a colleague. You invoke skills with the <code>/</code> prefix. So <code>/customer-pulse</code> is a skill. <code>curl</code> is a bash command. Don&#8217;t mix them up. <strong>Two modes, two purposes.</strong></p><p>If you want to get familiar with some Claude Code commands and shortcuts, there&#8217;s a nice <strong><a href="https://cc.storyfox.cz/">community cheat sheet</a></strong> that covers the essentials.</p><p>Close and reopen the terminal (or open a new one) so it picks up the new command. Then type:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;9a201a7e-b276-42db-ad4a-1eb2a1cc7970&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">claude</code></pre></div><p>The first time, a browser window opens to log in with your Anthropic account. After that, Claude Code starts directly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Arv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Arv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!3Arv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!3Arv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!3Arv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Arv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:864671,&quot;alt&quot;:&quot;VS Code with Claude Code running in the right terminal panel, showing the Opus model name and input prompt.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code with Claude Code running in the right terminal panel, showing the Opus model name and input prompt." title="VS Code with Claude Code running in the right terminal panel, showing the Opus model name and input prompt." srcset="https://substackcdn.com/image/fetch/$s_!3Arv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!3Arv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!3Arv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!3Arv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3c0577f-6996-449c-89b4-6d4c2e4a1df7_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Claude Code is ready. The conversation starts here</figcaption></figure></div><h3>Step 3: Download and open the project</h3><p>Exit Claude Code for now (type <code>exit</code> or press <code>Ctrl+C</code>). Go to the <a href="https://github.com/adamfaik/product-feedback-skill">product-feedback-skill repo on GitHub</a>. Click the green <strong>Code</strong> button, then <strong>Download ZIP</strong>. Unzip the folder wherever you keep your projects (for example, your Documents folder).</p><p>Now in your editor, go to <strong>File &#8594; Open Folder</strong>, navigate to <code>product-feedback-skill</code>, and click Open. The left sidebar (the explorer) shows all the project files.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EPED!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EPED!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!EPED!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!EPED!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!EPED!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!EPED!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1059623,&quot;alt&quot;:&quot;VS Code Explorer sidebar showing the product-feedback-skill folder structure with .claude, product-context, reports folders and README.md.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code Explorer sidebar showing the product-feedback-skill folder structure with .claude, product-context, reports folders and README.md." title="VS Code Explorer sidebar showing the product-feedback-skill folder structure with .claude, product-context, reports folders and README.md." srcset="https://substackcdn.com/image/fetch/$s_!EPED!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!EPED!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!EPED!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!EPED!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92d698b0-40ca-44cd-ac5c-c5ef85d6d49e_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The project open in VS Code. Everything is visible in the explorer</figcaption></figure></div><h3>Step 4: Run the skill</h3><p>Open a new terminal in your editor (<strong>Terminal &#8594; New Terminal</strong>) and make sure it&#8217;s inside the project folder. Then launch Claude Code:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;3d47d6d3-a93d-4d90-ab1b-bac34ff62412&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">claude</code></pre></div><p>The repo includes product context files for two products: Figma and Slack. Let&#8217;s try Figma. Type:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;2cfeb864-fa6b-43a8-8f31-cddb0eeee83a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">/customer-pulse figma</code></pre></div><p><strong>And then just watch.</strong> It&#8217;s genuinely fun to see. Claude reads the Figma product context, starts searching the web (Trustpilot reviews, forum threads, comparison articles), fetches the most relevant pages, extracts real user quotes, groups them into themes, scores each by severity, and writes a full report to <code>reports/</code>. The whole thing takes a few minutes because Claude is making 12 web searches and fetching up to 20 pages. Just let it do its thing.</p><p>When it&#8217;s done, open the generated report in the <code>reports/</code> folder. Right-click the file tab &#8594; <strong>&#8221;Open Preview&#8221;</strong> to see it formatted instead of raw text.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NbDK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NbDK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!NbDK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!NbDK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!NbDK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!NbDK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/caddc033-075b-49be-9af8-88894331c320_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1440220,&quot;alt&quot;:&quot;VS Code showing the Customer Pulse Report for Figma in preview mode with executive summary, top insights ranked by priority, and source URLs.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code showing the Customer Pulse Report for Figma in preview mode with executive summary, top insights ranked by priority, and source URLs." title="VS Code showing the Customer Pulse Report for Figma in preview mode with executive summary, top insights ranked by priority, and source URLs." srcset="https://substackcdn.com/image/fetch/$s_!NbDK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!NbDK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!NbDK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!NbDK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaddc033-075b-49be-9af8-88894331c320_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The generated report. Ranked themes, real quotes, source links</figcaption></figure></div><p>One command. <strong>A full customer feedback analysis</strong> with source URLs, severity rankings, sentiment direction, and a &#8220;Top 3 things to do this week&#8221; action list. Try <code>/customer-pulse slack</code> for the other product.</p><div><hr></div><h2>Level 2: Understand what skills are</h2><p>OK so the report just appeared. That&#8217;s cool. But what actually happened behind the scenes? Three files made the whole thing work. Let&#8217;s open each 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_!l1vx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l1vx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!l1vx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!l1vx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!l1vx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!l1vx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5073068,&quot;alt&quot;:&quot;Handmade infographic showing Product Context feeding into SKILL.md, CLAUDE.md providing project briefing, SKILL.md using WebSearch and WebFetch tools, and producing a Report file with ranked themes, quotes, and actions.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade infographic showing Product Context feeding into SKILL.md, CLAUDE.md providing project briefing, SKILL.md using WebSearch and WebFetch tools, and producing a Report file with ranked themes, quotes, and actions." title="Handmade infographic showing Product Context feeding into SKILL.md, CLAUDE.md providing project briefing, SKILL.md using WebSearch and WebFetch tools, and producing a Report file with ranked themes, quotes, and actions." srcset="https://substackcdn.com/image/fetch/$s_!l1vx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!l1vx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!l1vx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!l1vx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c84992f-fc64-4d19-8f4c-577efe0f82a6_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Step 1: Open the SKILL.md</h3><p>In the explorer sidebar, navigate to <code>.claude/skills/customer-pulse/SKILL.md</code>. Click it. Or <a href="https://github.com/adamfaik/product-feedback-skill/blob/main/.claude/skills/customer-pulse/SKILL.md">read it directly on GitHub</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Ga9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Ga9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!0Ga9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!0Ga9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!0Ga9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Ga9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1367260,&quot;alt&quot;:&quot;VS Code showing SKILL.md in raw Markdown with YAML frontmatter (name, description, allowed-tools) and the beginning of the step-by-step instructions.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code showing SKILL.md in raw Markdown with YAML frontmatter (name, description, allowed-tools) and the beginning of the step-by-step instructions." title="VS Code showing SKILL.md in raw Markdown with YAML frontmatter (name, description, allowed-tools) and the beginning of the step-by-step instructions." srcset="https://substackcdn.com/image/fetch/$s_!0Ga9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!0Ga9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!0Ga9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!0Ga9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b0df8-97af-4040-8f4f-76733876bb01_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The raw file. Frontmatter at the top, plain English instructions below</figcaption></figure></div><p>Take a moment to read it. This is the entire skill. <strong>A Markdown file.</strong> No code. No API calls. No special syntax. Just English. <strong>If you can write an email, you can write a skill.</strong> Seriously.</p><p>Right-click the tab &#8594; <strong>&#8221;Open Preview&#8221;</strong> to see it formatted. That&#8217;s easier to read once you understand the structure.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n9wg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n9wg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!n9wg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!n9wg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!n9wg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!n9wg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1324489,&quot;alt&quot;:&quot;VS Code split view showing SKILL.md preview on the left with structured steps and the terminal on the right.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code split view showing SKILL.md preview on the left with structured steps and the terminal on the right." title="VS Code split view showing SKILL.md preview on the left with structured steps and the terminal on the right." srcset="https://substackcdn.com/image/fetch/$s_!n9wg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!n9wg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!n9wg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!n9wg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512e8b39-7455-4beb-9e3a-944eb719413a_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The same file in preview mode. Easier to read, same content</figcaption></figure></div><p>It has two parts. <strong>The header (called frontmatter) controls how the skill behaves.</strong> The settings that matter most:</p><ul><li><p><code>description</code>: how Claude decides whether to suggest the skill. Vague descriptions like &#8220;analyzes stuff&#8221; don&#8217;t work. Specific ones like &#8220;use when the user wants to understand customer sentiment&#8221; do. It&#8217;s like giving a teammate a proper job description.</p></li><li><p><code>disable-model-invocation: true</code>: prevents the skill from auto-triggering. For a skill that makes 30+ web calls, you want explicit control.</p></li><li><p><code>allowed-tools</code>: lists tools Claude can use without asking permission each time. Without it, Claude pauses 20+ times to ask. With it, the skill runs smoothly.</p></li><li><p><code>$ARGUMENTS</code>: when you type <code>/customer-pulse figma</code>, &#8220;figma&#8221; replaces <code>$ARGUMENTS</code> in the instructions.</p></li></ul><p><strong>The body tells Claude what to do</strong>, step by step, in plain English. The <a href="https://code.claude.com/docs/en/skills">official skills documentation</a> has the full reference.</p><p><strong>When does it make sense to build a skill?</strong> Tasks that are repeatable, multi-step, and benefit from context. If you&#8217;d need to re-explain the same context more than twice, it&#8217;s worth encoding as a skill. For one-off tasks, just ask Claude directly.</p><h3>Step 2: Open the product context</h3><p>Navigate to <code>product-context/figma.md</code>. Or <a href="https://github.com/adamfaik/product-feedback-skill/blob/main/product-context/figma.md">read it on GitHub</a>.</p><p>This file describes Figma: features, customer segments, pricing, known pain points, competitors. The skill reads it before searching. That&#8217;s why the report isn&#8217;t generic. <strong>Without product context</strong>, you get &#8220;users complain about performance.&#8221; <strong>With it</strong>, you get &#8220;the March 2026 regression affected component manipulation specifically, compounding the long-standing 2GB memory cap issue that hits enterprise teams with variant-heavy design systems.&#8221;</p><p><strong>This separation is the clever part.</strong> The SKILL.md defines the process. The product context defines the knowledge. Change the context, and the entire analysis shifts. Without touching the instructions.</p><p>If you were doing this at work, your context file could include customer personas, Jira backlog categories, OKRs, NPS themes, competitive analysis, and roadmap features. <strong>The richer the context, the smarter the analysis.</strong> The skill doesn&#8217;t care where the knowledge comes from. It just reads the file.</p><h3>Step 3: Understand how skills compare to other tools</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WB7s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WB7s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!WB7s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!WB7s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!WB7s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!WB7s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5802405,&quot;alt&quot;:&quot;Handmade comparison infographic with 4 columns: Saved Prompt, Custom GPT/Gem, NotebookLM, Claude Code Skill. Each shows checkmarks for what it can do and crosses for what it can&#8217;t. Skills have the most checkmarks: read files, search web, create files, lives in repo, versioned, repeatable.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade comparison infographic with 4 columns: Saved Prompt, Custom GPT/Gem, NotebookLM, Claude Code Skill. Each shows checkmarks for what it can do and crosses for what it can&#8217;t. Skills have the most checkmarks: read files, search web, create files, lives in repo, versioned, repeatable." title="Handmade comparison infographic with 4 columns: Saved Prompt, Custom GPT/Gem, NotebookLM, Claude Code Skill. Each shows checkmarks for what it can do and crosses for what it can&#8217;t. Skills have the most checkmarks: read files, search web, create files, lives in repo, versioned, repeatable." srcset="https://substackcdn.com/image/fetch/$s_!WB7s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!WB7s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!WB7s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!WB7s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56e50737-2c5c-4abb-b243-50c2ca3002f7_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>A saved prompt.</strong> Every time you paste your product description and analysis request into ChatGPT, you&#8217;re doing manually what a skill does automatically. A skill reads your files for you. The context is always there. No pasting.</p><p><strong>A custom GPT or Gem.</strong> Lives in someone else&#8217;s cloud. Can&#8217;t read your local files. Can&#8217;t create documents in your repo. A skill is a Markdown file you own, version-controlled with git.</p><p><strong>NotebookLM.</strong> Same &#8220;rich context&#8221; idea, but limited to answering questions and generate a certain type of content. Skills can search the web, create files, and produce reports that feed into your next workflow. Skills are rich context plus real actions in the same place.</p><p><strong>Perplexity.</strong> Great for one-time answers. A skill gives you a versioned, repeatable process that improves over time. A Perplexity search doesn&#8217;t compound. A skill does.</p><p><strong>Skills also work beyond Claude Code.</strong> You can use them in claude.ai (upload as zip) and in the Claude desktop app with Cowork. Claude Code is the most powerful surface though, with full network access and features like <code>allowed-tools</code>.</p><h3>Step 4: Open the CLAUDE.md</h3><p>Last file. Open <code>CLAUDE.md</code> at the project root. Or <a href="https://github.com/adamfaik/product-feedback-skill/blob/main/CLAUDE.md">read it on GitHub</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cssX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cssX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!cssX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!cssX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!cssX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!cssX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a026931-3e46-4590-a179-f6a938392793_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1083702,&quot;alt&quot;:&quot;VS Code split view with CLAUDE.md preview showing Project Overview and Repository Structure on the left, and Claude Code terminal on the right.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code split view with CLAUDE.md preview showing Project Overview and Repository Structure on the left, and Claude Code terminal on the right." title="VS Code split view with CLAUDE.md preview showing Project Overview and Repository Structure on the left, and Claude Code terminal on the right." srcset="https://substackcdn.com/image/fetch/$s_!cssX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!cssX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!cssX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!cssX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a026931-3e46-4590-a179-f6a938392793_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The project briefing. Claude reads it at the start of every session</figcaption></figure></div><p><strong>A </strong><code>README.md</code><strong> is for humans. </strong><code>CLAUDE.md</code><strong> is for Claude.</strong> It tells Claude what the project is about, what files matter, and how things connect. Claude reads it automatically at the start of every session. Create one for any project by typing <code>/init</code>. Keep it under 30 lines.</p><div><hr></div><h3>Level 3: Build your first skill step by step</h3><p>If you&#8217;ve read my previous post on <a href="https://www.theaithinker.com/p/how-to-save-5-hours-a-week-with-gems">how to save +5 hours a week with Gems</a>, the process here will feel familiar. Same loop: <strong>ask the AI to write the instructions, test them, see what&#8217;s wrong, improve them, test again.</strong> With Gems, you do this in a web interface. With Claude Code skills, you do it inside your project folder. The principle doesn&#8217;t change. The power does.</p><p>Here&#8217;s how I actually built <code>/customer-pulse</code>. Not the clean version. The real one. Before the details, here&#8217;s the overview:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ijgw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ijgw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!ijgw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!ijgw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!ijgw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ijgw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4414436,&quot;alt&quot;:&quot;Handmade infographic showing 5 steps: Describe the problem, Review with AI, Run and evaluate, Improve the skill (with iteration loop arrow back to step 3), Test on another product.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Handmade infographic showing 5 steps: Describe the problem, Review with AI, Run and evaluate, Improve the skill (with iteration loop arrow back to step 3), Test on another product." title="Handmade infographic showing 5 steps: Describe the problem, Review with AI, Run and evaluate, Improve the skill (with iteration loop arrow back to step 3), Test on another product." srcset="https://substackcdn.com/image/fetch/$s_!ijgw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!ijgw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!ijgw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!ijgw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e11cfe-d3e8-496a-ae6f-c4df67688cc6_2816x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p><strong>Describe the problem.</strong> No technical instructions. Just explain what you need.</p></li><li><p><strong>Review the skill.</strong> Ask Claude Code to check its own work.</p></li><li><p><strong>Run it and evaluate.</strong> See what&#8217;s good, what&#8217;s missing.</p></li><li><p><strong>Improve the instructions, not the output.</strong> Fix the SKILL.md so every future run is better.</p></li><li><p><strong>Test on a different product.</strong> Make sure it generalizes.</p></li></ol><h3>Step 1: Describe your problem</h3><p>I opened Claude Code and typed:</p><blockquote><p>I&#8217;m a product manager and one of my jobs is to explore customer feedback across different platforms (app stores, review sites, forums) so I can make better decisions and understand the problems our users are facing. But it&#8217;s time consuming. I sometimes miss important sources, and I struggle to synthesize and identify the most actionable feedback. I was wondering if it makes sense to create a system here that helps me do that every time. Feel free to ask me any questions.</p></blockquote><p>I didn&#8217;t say &#8220;create a <code>.claude/skills/</code> folder.&#8221; I described a problem. <strong>You don&#8217;t need to know terminal commands.</strong> You need to know how to describe a problem clearly. That&#8217;s a skill product people already have.</p><p>Claude asked clarifying questions: what product, what sources, what format. I said Figma. It proposed a 4-phase architecture with a scoring system and guardrails. Then it built everything. I just watched files appear in the VS Code Explorer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SpOW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SpOW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!SpOW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!SpOW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!SpOW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!SpOW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1142716,&quot;alt&quot;:&quot;Claude Code conversation showing interactive questions about which product to analyze, with multiple choice options.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude Code conversation showing interactive questions about which product to analyze, with multiple choice options." title="Claude Code conversation showing interactive questions about which product to analyze, with multiple choice options." srcset="https://substackcdn.com/image/fetch/$s_!SpOW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!SpOW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!SpOW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!SpOW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fd4c7b5-3eaf-45f9-af6e-d60bb3aeff9b_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Claude asks what product, what sources, what format</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ps9S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ps9S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!ps9S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!ps9S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!ps9S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ps9S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1127402,&quot;alt&quot;:&quot;Claude Code showing a structured plan with files to create table, context description, and how the skill workflow will operate.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude Code showing a structured plan with files to create table, context description, and how the skill workflow will operate." title="Claude Code showing a structured plan with files to create table, context description, and how the skill workflow will operate." srcset="https://substackcdn.com/image/fetch/$s_!ps9S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!ps9S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!ps9S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!ps9S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4627c95e-f2d7-4923-9d10-3ad2bfc6af61_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The proposed architecture. From a problem description, not a spec</figcaption></figure></div><h3>Step 2: Review the work</h3><p>Here&#8217;s a workflow I wish someone had told me about earlier: <strong>the double-loop.</strong> One AI session builds. Another reviews. You make the decisions.</p><p>I asked Claude Code <strong>in another session</strong> to check the skill against best practices. It found five issues: lowercase file name (should be <code>SKILL.md</code>), no <code>$ARGUMENTS</code> support, missing <code>disable-model-invocation</code>, missing <code>allowed-tools</code>, and a too-generic description. I shared the findings back in the initial session and Claude Code fixed everything in minutes. <strong>I asked AI to check AI&#8217;s work, and then I made the decision about what to fix.</strong></p><p>One thing I also learned: Claude sometimes creates a <strong>command</strong> (the old format) when you ask for a skill. Commands work, but lack the frontmatter options. Always double-check. <strong>You&#8217;re the pilot, even in autopilot mode.</strong></p><h3>Step 3: Run it and evaluate</h3><p>The first run produced a solid report. 65+ data points, ten ranked themes with real quotes and source URLs. But it was missing things. No blind spots section. No separation of &#8220;already known&#8221; vs &#8220;new discovery.&#8221; The recommended actions were generic (&#8221;publish a performance roadmap&#8221;), the kind of advice any consultant would give for $500/hour without knowing your product.</p><h3>Step 4: Improve the skill, not the report</h3><p>I was about to edit the report. Then I stopped. If I fix the report, I get a better report once. <strong>If I fix the </strong><code>SKILL.md</code><strong>, every future run produces a better report automatically.</strong> You&#8217;re not building a document. You&#8217;re building a machine that produces documents.</p><p>Here&#8217;s exactly what I told Claude. No prompt engineering. Just describing what was wrong:</p><blockquote><p>The report is missing a blind spots section. I want to know what data is missing and why.</p></blockquote><blockquote><p>Separate confirmed known issues from new discoveries. Tag each theme as CONFIRMED or NEW.</p></blockquote><blockquote><p>The recommended actions are too generic. Make them reference specific data from the report.</p></blockquote><blockquote><p>Add a &#8220;Top 3 this week&#8221; section at the top with concrete actions and links.</p></blockquote><blockquote><p>Track whether each theme is getting worse, staying stable, or improving.</p></blockquote><p>Claude Code updated the <code>SKILL.md</code>. I ran it again. Same Figma. Same search 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_!dyEL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dyEL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!dyEL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!dyEL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!dyEL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!dyEL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1417083,&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.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_!dyEL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!dyEL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!dyEL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!dyEL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff46819ba-9eb5-4427-8c02-c9794b7d9c48_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Same skill, better instructions</figcaption></figure></div><p>The difference was striking. The v2 report tagged every theme as <code>[CONFIRMED]</code> or <code>[NEW]</code>. The blind spots section revealed that 15 of 17 features launched at Config 2025 had zero public feedback. <strong>That&#8217;s a strategic insight, not just a gap.</strong></p><p><strong>Practical tip:</strong> after three rounds of iteration, Claude started giving me circular answers. I typed <code>/clear</code> and it immediately got better. It resets the conversation while keeping your files. I use it regularly now.</p><h3>Step 5: Test it on a different product</h3><p>I wanted to try Slack. But when I needed a new product context file, I caught myself about to do the same one-shot research again. And then I thought: wait. Isn&#8217;t this exactly what skills are for?</p><p><strong>That&#8217;s how the skill fever gets you.</strong> I built <code>/product-context</code> instead, a second skill that researches any product and generates the context file automatically. Typed <code>/product-context Slack</code>, got a filled-in context file, then ran <code>/customer-pulse slack</code>.</p><p>It worked. <strong>Different product, same quality.</strong> The skill found 25 incidents in 90 days, a ghost-seat credit arbitrage, and enterprise privacy concerns about the desktop AI agent.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2qYR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2qYR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!2qYR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!2qYR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!2qYR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2qYR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1223935,&quot;alt&quot;:&quot;VS Code showing the Customer Pulse Report for Slack with Top 3 This Week section, Executive Summary, and Top Insights ranked by priority.&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://www.theaithinker.com/i/193361773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VS Code showing the Customer Pulse Report for Slack with Top 3 This Week section, Executive Summary, and Top Insights ranked by priority." title="VS Code showing the Customer Pulse Report for Slack with Top 3 This Week section, Executive Summary, and Top Insights ranked by priority." srcset="https://substackcdn.com/image/fetch/$s_!2qYR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png 424w, https://substackcdn.com/image/fetch/$s_!2qYR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png 848w, https://substackcdn.com/image/fetch/$s_!2qYR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png 1272w, https://substackcdn.com/image/fetch/$s_!2qYR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f45d96-a3a9-456b-a8ed-cb3a281ab93f_3248x1964.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Same skill, different product</figcaption></figure></div><p><a href="https://github.com/adamfaik/product-feedback-skill/blob/main/reports/slack-pulse-2026-04-04.md">Read the full Slack report on GitHub</a>.</p><p>What started as &#8220;let me test with another product&#8221; turned into &#8220;let me build another skill.&#8221;</p><p><strong>Three ways to set up your product context:</strong> auto-generate with <code>/product-context</code>, paste your own internal docs, or combine both. If you&#8217;re at a real company, your internal documentation is your richest source.</p><div><hr></div><h2>Expect ideas to explode</h2><p>After I built <code>/customer-pulse</code>, ideas started exploding. Like popcorn: every kernel triggered three more. &#8220;What if I built a skill that tracks competitor launches?&#8221; &#8220;What about an automated NPS synthesis?&#8221; I couldn&#8217;t stop.</p><p>The last time I felt this was Notion in 2019. <strong>Wanting to spend weekends restructuring everything into this new system.</strong> With Notion, it was &#8220;I need to move all my notes into this tool.&#8221; With skills, it&#8217;s &#8220;I need to redo all my previous projects with this new approach.&#8221;</p><p>Here&#8217;s my honest warning: <strong>once you build your first skill, you&#8217;ll see them everywhere.</strong> Write your ideas down. Prioritize. Don&#8217;t build them all tonight. I say this from experience because I&#8217;ve been there, staring at the terminal at midnight, convincing myself &#8220;this one will only take 20 minutes.&#8221;</p><p>But that feeling is the point. &#8220;PM becoming a builder&#8221; isn&#8217;t just about learning a new tool. <strong>It&#8217;s about a shift in how you see problems.</strong> Before skills, a repetitive task was just a task. After skills, every repetitive task is an opportunity to build something. That perceptual shift is the real transformation. And honestly? <strong>It&#8217;s the most fun I&#8217;ve had with AI tools in a long time.</strong></p><div><hr></div><h2>Level 4: Go further</h2><p>I&#8217;m not an expert on everything that follows. <strong>These are the topics I want to explore next.</strong> What I can tell you is that after building my first skill, I feel like I&#8217;ve become an architect of my own workflows. It&#8217;s the first time I feel like if I go to work this Monday, I&#8217;ll be a completely different person. Not because I learned a new feature, but because I see my work differently.</p><p><strong>MCP servers plug new data sources into Claude Code.</strong> Imagine the skill pulling your product context from Confluence automatically.</p><p><strong>Hooks are automated actions triggered by events.</strong> I&#8217;m curious about using them to automate things like &#8220;run customer-pulse every Monday morning.&#8221;</p><p><strong>Agents and sub-agents handle complex multi-step workflows</strong> where skills aren&#8217;t enough. Start with skills. Graduate to agents when you hit the ceiling.</p><p><strong>The ecosystem:</strong> A few starting points worth bookmarking:</p><ul><li><p><strong><a href="https://github.com/anthropics/skills">Anthropic&#8217;s official skills</a>:</strong> document processing, demos, and a skill-creator.</p></li><li><p><strong><a href="https://github.com/phuryn/pm-skills">Pawel Huryn&#8217;s PM skills</a>:</strong> 100+ skills for product work. The most comprehensive PM collection.</p></li><li><p><strong><a href="https://github.com/ComposioHQ/awesome-claude-skills">Community collections</a>:</strong> curated lists with thousands of skills.</p></li></ul><p><strong>But the skill you build yourself will always be more valuable than a generic one.</strong> These collections are starting points. The real power is in building your own.</p><div><hr></div><h2>Your turn</h2><p>I started this article thinking I&#8217;d explain what skills are. I ended up building a customer feedback tool, a product context generator, and a system that gets better every time I use it. <strong>All from conversations.</strong> No code.</p><p>The thing that surprised me most isn&#8217;t the technology. It&#8217;s how it changed the way I think. I used to see repetitive tasks as part of the job. Now <strong>I see them as skills waiting to be built.</strong></p><p><strong>Build your own skills.</strong> Open Claude Code. Describe a problem you face every week. Here are five ideas:</p><ul><li><p><strong>Competitor watch.</strong> &#8220;Search for what my top 3 competitors shipped last week, give me a summary with links.&#8221;</p></li><li><p><strong>Meeting recap.</strong> &#8220;Take a meeting transcript, extract decisions, action items, and open questions in my team&#8217;s template.&#8221;</p></li><li><p><strong>Release notes drafter.</strong> &#8220;Read the last 20 git commits, group them by theme, write user-facing release notes.&#8221;</p></li><li><p><strong>Onboarding guide.</strong> &#8220;Read our documentation and create a structured onboarding plan for a new team member.&#8221;</p></li><li><p><strong>Weekly digest.</strong> &#8220;Search for the latest news about [topic], summarize the top 5, highlight what&#8217;s relevant to our roadmap.&#8221;</p></li></ul><p>Each of these is one conversation with Claude Code. Describe the problem, let Claude build the skill, review it, iterate. The same five steps from Level 3.</p><p>And remember: <strong>write your ideas down.</strong> Don&#8217;t build them all tonight. But do build the first one. That&#8217;s the one that changes everything!</p>]]></content:encoded></item><item><title><![CDATA[How to vibe code an agent to query your data]]></title><description><![CDATA[Generate two Python files using Gemini and the LangGraph framework. Ask Claude to review your code to ensure it's robust. Deploy a Streamlit interface to let users query the data in plain English.]]></description><link>https://www.theaithinker.com/p/how-to-vibe-code-an-agent-to-query</link><guid isPermaLink="false">https://www.theaithinker.com/p/how-to-vibe-code-an-agent-to-query</guid><dc:creator><![CDATA[Adam Faik]]></dc:creator><pubDate>Mon, 06 Apr 2026 11:03:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b478b476-cabf-4350-95fc-7380f74963de_1024x731.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you only have seven minutes, watch this quick video recap to <strong>get a complete overview of everything covered in this article!</strong></p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;5683ffb3-b847-4bbe-bac3-5f9f1cb9db75&quot;,&quot;duration&quot;:null}"></div><div><hr></div><p>I built a small AI agent that turns plain English questions into SQL queries. It doesn&#8217;t just write the code. It executes the query, finds the answer, and explains the result in plain text. <strong>You&#8217;re basically talking to the data.</strong></p><p>Here is what it looks like in action. You just type a question and the agent does the heavy lifting to find the exact answer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PkCh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PkCh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!PkCh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!PkCh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!PkCh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PkCh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:232346,&quot;alt&quot;:&quot;A dark mode web application showing a chat interface. The user asks for the total number of customers. The AI agent replies with the exact number and displays expandable menus to view the generated SQL code and the raw data.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A dark mode web application showing a chat interface. The user asks for the total number of customers. The AI agent replies with the exact number and displays expandable menus to view the generated SQL code and the raw data." title="A dark mode web application showing a chat interface. The user asks for the total number of customers. The AI agent replies with the exact number and displays expandable menus to view the generated SQL code and the raw data." srcset="https://substackcdn.com/image/fetch/$s_!PkCh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!PkCh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!PkCh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!PkCh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20c14339-b536-42cb-b4bd-1bed00328882_3000x1458.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Question: &#8220;How many customers are there in total in the database?&#8221;</figcaption></figure></div><p>You might think this sounds incredibly complex. I&#8217;ll let you in on a secret. <strong>It&#8217;s mostly just two Python files that Gemini Pro generated for me.</strong> You&#8217;d be shocked to see how easy how easy it is to build a proof of concept. Anyone can do it in a few hours. It isn&#8217;t some high-level engineering magic. It&#8217;s really about following a clear process and understanding a few core agentic concepts. It&#8217;s the kind of project that makes you look incredibly smart at the office.</p><p>You might ask why we bother building an AI agent when business teams can just use Gemini, or any other LLM, to write SQL. The reason is that AI tools are great at writing code, but copying and pasting queries is a terrible experience for decision-makers. This AI agent handles the execution automatically. <strong>It also manages security, reliability, and costs.</strong> It interprets the user&#8217;s intent, writes the query, and shows a nice table or a chart. It&#8217;s much smoother than jumping between different tools. I design it as a complete experience to make life easier for the decision-makers. They won&#8217;t have to worry about the boring technical details. It acts exactly like a very fast data analyst working right on their screen.</p><p>We don&#8217;t need to debate the value of a text-to-SQL agent. In our jobs, we see the same problem every day: product teams and business leaders have plenty of data but never enough time. We have customer feedback, web analytics, and sales numbers scattered everywhere. Most decision-makers don&#8217;t know how to write SQL. They also don&#8217;t want to wait three days for the data team to pull a simple revenue report. <strong>This creates a massive dependency bottleneck</strong> that slows down every decision. LLMs democratize data access for everyone. Business users get their answers directly without bothering the data engineers. This allows the whole company to make decisions much faster.</p><p>I&#8217;m going to show you exactly how I built this using a pro plan of an LLM. I used an e-commerce dataset from Kaggle for my project. <strong>You can use any data you want</strong>, like a customer feedback file or your own web logs. Here is the plan:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H1dL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H1dL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!H1dL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!H1dL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!H1dL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!H1dL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png" width="2752" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:997749,&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf9ce084-327a-4e46-8fec-7a76c091f989_2752x1536.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_!H1dL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!H1dL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!H1dL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!H1dL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27561c8-ec41-4b29-869f-108907aa3c52_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Demo:</strong> First, we&#8217;ll look at the final web interface and the project files to understand exactly what we&#8217;re trying to build.</p></li><li><p><strong>Workflow:</strong> Next, I&#8217;ll show you my slightly chaotic vibe coding process using Gemini to write the logic and Claude to ruthlessly review it.</p></li><li><p><strong>Architecture:</strong> Then, we&#8217;ll break down the core engine. We&#8217;ll look at how to turn CSVs into a database, map out the LangGraph nodes, and set up strict security guardrails.</p></li><li><p><strong>Reality check:</strong> Finally, we&#8217;ll cover the most important part of the entire project: building an eval dashboard to ensure the agent doesn&#8217;t invent fake numbers.</p></li></ul><p>Most of us have some old CSV file sitting in a folder somewhere. You just need to follow a few simple steps to bring it to life. <strong>You&#8217;ll ask your LLM to produce two Python files</strong> and you&#8217;ll be ready to go. It&#8217;s a fun project that feels like a shortcut to becoming an AI-native builder. You&#8217;ll realize that you don&#8217;t need to be an SQL expert to create something truly useful. Grab your coffee and let&#8217;s do it!</p><div><hr></div><h2>Demo: what we are actually building</h2><p>Before we dive into the build process, let me show you the final result again. You open a web interface, you see a search bar, and <strong>you type a question in natural language</strong>. Here is what you get back.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Jri-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jri-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!Jri-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!Jri-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!Jri-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jri-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:309700,&quot;alt&quot;:&quot;A dark mode web application interface showing a user asking for the top 5 product categories by revenue, and the agent providing a text summary of the answer.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A dark mode web application interface showing a user asking for the top 5 product categories by revenue, and the agent providing a text summary of the answer." title="A dark mode web application interface showing a user asking for the top 5 product categories by revenue, and the agent providing a text summary of the answer." srcset="https://substackcdn.com/image/fetch/$s_!Jri-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!Jri-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!Jri-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!Jri-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a596cdb-443b-4bb5-b02a-413942b1474d_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The agent returns a clear, formatted text response</figcaption></figure></div><p>The agent processes your question and gives you a direct answer. <strong>It also generates a chart automatically when it makes sense.</strong> This makes the data much easier to read at a glance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!izzp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!izzp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!izzp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!izzp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!izzp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!izzp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:300669,&quot;alt&quot;:&quot;A bar chart displaying the total revenue for the top 5 product categories, categorized by different colors.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A bar chart displaying the total revenue for the top 5 product categories, categorized by different colors." title="A bar chart displaying the total revenue for the top 5 product categories, categorized by different colors." srcset="https://substackcdn.com/image/fetch/$s_!izzp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!izzp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!izzp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!izzp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e651c1-76a0-45ad-acf2-7918aa6cb97b_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A generated bar chart visualizing the top 5 categories</figcaption></figure></div><p>I designed the interface to <strong>show what happens behind the scenes</strong>. You can expand several sections to see the agent&#8217;s internal monologue. You can <strong>check how it reasoned</strong> through the problem. You can <strong>see the exact execution plan</strong> it created before writing any 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_!UoOA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UoOA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!UoOA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!UoOA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!UoOA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!UoOA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:288882,&quot;alt&quot;:&quot;An expanded menu showing the step-by-step logs of the agent, including query reformulation, complex query detection, and SQL translation.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="An expanded menu showing the step-by-step logs of the agent, including query reformulation, complex query detection, and SQL translation." title="An expanded menu showing the step-by-step logs of the agent, including query reformulation, complex query detection, and SQL translation." srcset="https://substackcdn.com/image/fetch/$s_!UoOA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!UoOA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!UoOA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!UoOA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66f664a9-e353-4419-b9b6-be6bfc13a7a7_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Tracking the agent&#8217;s step-by-step reasoning process</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F-wM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F-wM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!F-wM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!F-wM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!F-wM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!F-wM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:330009,&quot;alt&quot;:&quot;An expanded menu displaying the detailed SQL execution plan, outlining the necessary tables, foreign keys for joins, and required columns.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="An expanded menu displaying the detailed SQL execution plan, outlining the necessary tables, foreign keys for joins, and required columns." title="An expanded menu displaying the detailed SQL execution plan, outlining the necessary tables, foreign keys for joins, and required columns." srcset="https://substackcdn.com/image/fetch/$s_!F-wM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!F-wM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!F-wM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!F-wM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165621d7-ebac-43df-9fd1-10fc57f55d68_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The agent&#8217;s chain-of-thought execution plan</figcaption></figure></div><p>You can also <strong>inspect the actual SQL query</strong> it generated and executed. Finally, you can <strong>look at the raw data table</strong> it pulled from the database.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nu4m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nu4m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!Nu4m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!Nu4m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!Nu4m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nu4m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:287991,&quot;alt&quot;:&quot;An expanded menu showing the generated SQL code with JOIN and GROUP BY statements.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="An expanded menu showing the generated SQL code with JOIN and GROUP BY statements." title="An expanded menu showing the generated SQL code with JOIN and GROUP BY statements." srcset="https://substackcdn.com/image/fetch/$s_!Nu4m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!Nu4m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!Nu4m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!Nu4m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dcf3a69-86df-4a05-9a5e-40dcc8f986fe_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The exact SQL query written by the agent</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9nRi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9nRi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!9nRi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!9nRi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!9nRi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!9nRi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:299640,&quot;alt&quot;:&quot;An expanded menu showing the raw data table with product category names and their corresponding total revenue.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="An expanded menu showing the raw data table with product category names and their corresponding total revenue." title="An expanded menu showing the raw data table with product category names and their corresponding total revenue." srcset="https://substackcdn.com/image/fetch/$s_!9nRi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!9nRi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!9nRi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!9nRi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb044e-d286-4053-bf75-36e3095b3377_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The raw data extracted directly from the database</figcaption></figure></div><p>I keep all these details visible because I built it. <strong>It helps me debug and understand the agent&#8217;s behavior.</strong> You would obviously hide all these technical panels if you deployed this for a business team. To an end-user, this interface feels exactly like a Custom GPT or Gem. <strong>It answers questions, but only within a strictly defined scope.</strong> If you ask it about the weather in S&#227;o Paulo, it will reject the question. If you ask it for the May 2018 revenue, it gives you the exact number.</p><p>So, what does the codebase look like? I will show you my code editor.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AAv-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AAv-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png 424w, https://substackcdn.com/image/fetch/$s_!AAv-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png 848w, https://substackcdn.com/image/fetch/$s_!AAv-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png 1272w, https://substackcdn.com/image/fetch/$s_!AAv-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!AAv-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/edb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1276801,&quot;alt&quot;:&quot;A VS Code interface showing the project directory on the left and a detailed README markdown file on the right.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A VS Code interface showing the project directory on the left and a detailed README markdown file on the right." title="A VS Code interface showing the project directory on the left and a detailed README markdown file on the right." srcset="https://substackcdn.com/image/fetch/$s_!AAv-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png 424w, https://substackcdn.com/image/fetch/$s_!AAv-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png 848w, https://substackcdn.com/image/fetch/$s_!AAv-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png 1272w, https://substackcdn.com/image/fetch/$s_!AAv-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedb796de-bca6-49b5-b044-e3b2d5b472ad_3248x1962.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The project structure inside the VS Code editor</figcaption></figure></div><p>I lied a little bit earlier. The project has more than two files. But my original point stands. <strong>Only two main files hold the core structure of the app:</strong> <code>agent.py</code> and <code>app.py</code>. The rest are just small utility scripts. I also didn&#8217;t lie about writing the code. I didn&#8217;t write a single line of this myself. <strong>I used the Pro version of Gemini to generate everything.</strong> Gemini writes much better Python code than I do anyway.</p><p>You probably want to click a link and test this application right now. I totally get it. It&#8217;s a fun agent. Unfortunately, I didn&#8217;t deploy it to the public web. Every time you ask a question, the app sends a request to OpenAI. That costs money. I used OpenAI for the reasoning and<strong> set a strict five-euro budget</strong> for this entire project. I generated a secret API token and stored it locally on my machine. I didn&#8217;t use a free open-source model. <strong>But I put all these files in a <a href="https://github.com/adamfaik/sql-agent">public GitHub repository</a>.</strong> You can explore the code directly.</p><p><strong>Publishing the app would be very easy.</strong> The code is on GitHub and the Streamlit framework makes web deployment trivial. But my five-euro budget might disappear in few days. So, if you want to play with it, you can <strong>clone the GitHub repository</strong> and run it locally on your computer. The README.md (<a href="https://github.com/adamfaik/sql-agent/blob/main/README.md">read on GitHub</a>) file helps you run the agent locally.</p><p>Now that you know what the final agent looks like, let&#8217;s talk about <strong>how to actually build it.</strong> Let me walk you through my exact, slightly messy process for vibe coding this entire project using two LLMs.</p><div><hr></div><h2>Workflow: vibe code with two LLMs</h2><p>Let&#8217;s dive into my process. People call it vibe coding today. Honestly, <strong>it&#8217;s often a very chaotic experience.</strong> You fight the code constantly. You hit errors, you don&#8217;t understand everything immediately, and it gets frustrating. Then suddenly it works, and you only remember the good parts. I didn&#8217;t take screenshots of every single error I encountered. I struggled a lot. But I&#8217;m very happy with the final result. <strong>You just need to be extremely persistent.</strong> You will struggle, but it always works in the end if you don&#8217;t give 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_!ogan!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ogan!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!ogan!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!ogan!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!ogan!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ogan!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png" width="2752" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:966116,&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6203ccca-7fc8-4600-9a4e-705c4bf69be8_2752x1536.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_!ogan!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!ogan!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!ogan!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!ogan!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b07eab-f208-49ce-a47f-a42081724320_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>1. Pick a real database to start building</h3><p>First, I needed some data to test my idea. I went on Kaggle and found the <a href="https://www.kaggle.com/datasets/olistbr/brazilian-ecommerce">Olist e-commerce database</a>. I downloaded it to my Mac.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W__e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W__e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!W__e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!W__e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!W__e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!W__e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/851bf322-a105-4822-9902-84543792ae49_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:600110,&quot;alt&quot;:&quot;The Kaggle web page for the Brazilian E-Commerce Public Dataset by Olist, showing a download button and dataset details.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Kaggle web page for the Brazilian E-Commerce Public Dataset by Olist, showing a download button and dataset details." title="The Kaggle web page for the Brazilian E-Commerce Public Dataset by Olist, showing a download button and dataset details." srcset="https://substackcdn.com/image/fetch/$s_!W__e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!W__e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!W__e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!W__e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F851bf322-a105-4822-9902-84543792ae49_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Downloading the Olist dataset from Kaggle to start the project</figcaption></figure></div><p>This dataset looked very solid. <strong>It has massive tables and a lot of data points.</strong> I figured if I can handle this complex database, I can handle any simple CSV file later. I wanted to start with a tough challenge. Just to give you an idea of what we are dealing with, here is the structure of the database. It connects customers, orders, payments, and products across multiple interconnected tables.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Yal!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Yal!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png 424w, https://substackcdn.com/image/fetch/$s_!-Yal!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png 848w, https://substackcdn.com/image/fetch/$s_!-Yal!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png 1272w, https://substackcdn.com/image/fetch/$s_!-Yal!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Yal!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png" width="1456" height="876" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f547139-4673-4068-a354-5128126307df_2486x1496.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:876,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209677,&quot;alt&quot;:&quot;Entity-Relationship Diagram of the Olist dataset showing multiple interconnected tables including orders, customers, products, and payments linked by specific IDs.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Entity-Relationship Diagram of the Olist dataset showing multiple interconnected tables including orders, customers, products, and payments linked by specific IDs." title="Entity-Relationship Diagram of the Olist dataset showing multiple interconnected tables including orders, customers, products, and payments linked by specific IDs." srcset="https://substackcdn.com/image/fetch/$s_!-Yal!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png 424w, https://substackcdn.com/image/fetch/$s_!-Yal!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png 848w, https://substackcdn.com/image/fetch/$s_!-Yal!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png 1272w, https://substackcdn.com/image/fetch/$s_!-Yal!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f547139-4673-4068-a354-5128126307df_2486x1496.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The complex database schema we need the AI agent to navigate (<a href="https://www.kaggle.com/datasets/olistbr/brazilian-ecommerce">source</a>)</figcaption></figure></div><p>You can pick any data you want for your own project. You can use fake data or real feedback logs from your product. <strong>You just need some basic CSV files to start.</strong></p><h3>2. Use Gemini to write code and Claude to review it</h3><p>Next, <strong>I opened two browser tabs.</strong> I opened one tab for Gemini and one tab for Claude. <strong>I treat Gemini like a junior developer.</strong> Gemini writes reasonable code and handles the logic well. The best part is that I can actually read its code. I ask Gemini to write very detailed comments so I understand everything. I read the code line by line. I just explain my goal to Gemini, and it writes honest, clean code for me.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dSs0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dSs0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!dSs0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!dSs0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!dSs0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!dSs0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png" width="2752" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:818914,&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F860bbb5b-dfdf-441e-89d3-a35892fcfa3f_2752x1536.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_!dSs0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!dSs0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!dSs0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!dSs0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b36a07-1f32-4f63-a431-e51f11d54dbe_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>I use Claude as a senior code reviewer.</strong> I don&#8217;t explain any context to Claude. I don&#8217;t tell it the project story or my goals. I assume Claude has done this exact project ten times already. I take the Python file Gemini wrote and paste it directly into Claude. I just ask, &#8220;What do you think of this?&#8221; It&#8217;s actually really funny. Claude immediately generates a massive backlog of things to fix. <strong>It points out every single flaw.</strong></p><p>Claude always offers to rewrite the whole file to make it cleaner. I always say no. I tell it to just give me the bullet points. I take those bullet points back to Gemini. <strong>I tell Gemini to write a new block of code to fix the specific issue.</strong> I copy that new block and paste it into my file.</p><p>You are probably thinking this sounds like <strong>a lot of copying and pasting.</strong> You&#8217;re absolutely right. I copy and paste constantly. But this is exactly how I learn Python right now. It forces me to understand <strong>how every single line contributes to the application.</strong> It keeps me moving forward.</p><h3>3. Organize your screens for efficient coding</h3><p>So, I keep my two LLM assistants in one window. In another window, I open the code editor. I use VS Code. I also keep GitHub open. I like to <strong>create a checkpoint every time I make a successful change.</strong> It helps me track my progress.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eFYd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eFYd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!eFYd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!eFYd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!eFYd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!eFYd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png" width="2752" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:955536,&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fa28807-0001-4e59-8845-bbe2900f4909_2752x1536.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_!eFYd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!eFYd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!eFYd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!eFYd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00de8d61-04c7-47b3-a27d-2ce80459229e_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p>I see a lot of people vibe coding with twenty tabs open at once. They have a very noisy setup. I don&#8217;t hate multitasking. But for vibe coding efficiently, <strong>you need a strict visual separation.</strong> You need one window for your LLM assembly. These are your colleagues guiding and coaching you. You need a second window for execution. This is where you write code and test things. I like to keep full control of the execution window for now.</p><h3>4. Ask for a plan, then iterate and fix errors block by block</h3><p>Let&#8217;s go back to the start of the project. <strong>I discuss my goal with Gemini first.</strong> I ask it to write a detailed plan. It gives me a simple step-by-step list. I tell Gemini I am a beginner and I need very detailed instructions. I copy and paste the entire Kaggle page description directly into the prompt so it understands the data. I also tell Gemini to <strong>include GitHub save points in the plan</strong>. It gives me a beautiful roadmap to follow.</p><p>Once I have the plan, I execute it with Gemini. <strong>Gemini guides me to create the first two files.</strong> I run a quick test to see if the app opens. Then, we iterate. I hit roadblocks. I paste the terminal errors back to Gemini. We fix them together. Once the app works nicely, I push a save to GitHub. Then, I show the working code to Claude. <strong>Claude gives me security and performance tips.</strong></p><p>I do a few rounds of this back-and-forth between the two models. Eventually, Claude starts suggesting extremely complex features. <strong>The suggestions become too theoretical</strong> and don&#8217;t matter for my simple agent. I stop listening to Claude at that point.</p><h3>Avoid coding agents when you want to learn</h3><p>You might wonder why I used Gemini Pro for this. Why didn&#8217;t I use Claude Code or another dedicated coding agent? People talk about Claude Code constantly. It&#8217;s a fantastic tool. If I asked Claude Code to build this text-to-SQL app, it would do it in under a minute. I would <strong>close my eyes, click a button, and the app would be finished. </strong>But <strong>Claude Code would generate a massive, complex, industrial-grade architecture.</strong> I would stare at dozens of files and have absolutely no idea how they work. Unless you are a senior software engineer with a free week to read code line by line, you won&#8217;t understand it.</p><p>I want to actually learn what happens behind the curtain. <strong>I use Gemini so I can work block by block.</strong> I talk with the LLM. We build the logic step by step. We construct something reasonable together. I understand every piece of it. I can test it easily. I push the final save to GitHub, and the project is done. I have a working AI agent that talks to my data.</p><p>This process might sound like a chaotic mess, but <strong>it actually produces a working result.</strong> Now, let&#8217;s look at the agent architecture. We will break down the agent file by file so you can understand exactly how the engine works under the hood and how all these pieces fit together.</p><div><hr></div><h2>Architecture: build the core engine</h2><p>If you follow the workflow I just shared, you can easily build this exact same engine, or probably something even better! So why am I explaining the code if the LLMs wrote it? Because <strong>you still need to be the director.</strong> The goal of this section is to teach you the fundamental concepts of agent architecture. When you understand how the engine actually works under the hood, you can guide the LLMs, challenge their complex suggestions, and ensure they don&#8217;t skip some steps. You can rely on LLMs to write the Python syntax, but <strong>you still need to be the one steering the ship.</strong></p><p>In this section, I might get a little too enthusiastic and say things like &#8220;I built this&#8221; or &#8220;I designed that,&#8221; but keep in mind that this entire architecture is simply <strong>the result of my deep and long conversations with Gemini and Claude.</strong></p><h3>1. Prepare the data and extract the database schema</h3><p>The very first thing we need to tackle is <strong>data ingestion and schema creation.</strong> Here is the high-level view of the method.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FmdW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png 424w, https://substackcdn.com/image/fetch/$s_!FmdW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png 848w, https://substackcdn.com/image/fetch/$s_!FmdW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png 1272w, https://substackcdn.com/image/fetch/$s_!FmdW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!FmdW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png" width="1456" height="183" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:183,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:326989,&quot;alt&quot;:&quot;A flowchart showing the data preparation process. It starts with raw spreadsheets moving through an \&quot;Organize Data\&quot; step into a central database. Next, a \&quot;Create AI Blueprint\&quot; step branches into two options: a \&quot;Quick Method\&quot; yielding a basic blueprint of just column names, and a \&quot;Detailed Method\&quot; yielding a smart blueprint with column names and real examples. Both feed into the final AI Assistant.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A flowchart showing the data preparation process. It starts with raw spreadsheets moving through an &quot;Organize Data&quot; step into a central database. Next, a &quot;Create AI Blueprint&quot; step branches into two options: a &quot;Quick Method&quot; yielding a basic blueprint of just column names, and a &quot;Detailed Method&quot; yielding a smart blueprint with column names and real examples. Both feed into the final AI Assistant." title="A flowchart showing the data preparation process. It starts with raw spreadsheets moving through an &quot;Organize Data&quot; step into a central database. Next, a &quot;Create AI Blueprint&quot; step branches into two options: a &quot;Quick Method&quot; yielding a basic blueprint of just column names, and a &quot;Detailed Method&quot; yielding a smart blueprint with column names and real examples. Both feed into the final AI Assistant." srcset="https://substackcdn.com/image/fetch/$s_!FmdW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png 424w, https://substackcdn.com/image/fetch/$s_!FmdW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png 848w, https://substackcdn.com/image/fetch/$s_!FmdW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png 1272w, https://substackcdn.com/image/fetch/$s_!FmdW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a157916-42a6-4ec9-bece-e2325d5d0ec9_3047x384.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div><figcaption class="image-caption">The full data ingestion workflow</figcaption></figure></div><p>We start with <a href="https://www.kaggle.com/datasets/olistbr/brazilian-ecommerce">nine massive CSV files from Kaggle</a>. We absolutely <strong>don&#8217;t want to query these raw files every time a user asks a question.</strong> That would slow the execution to a crawl and cost a fortune in API tokens. The LLM needs a standardized, organized base to work efficiently. I asked Gemini to help me write a few preparation scripts to handle this.</p><p>I organized my workspace to <strong>keep things clean.</strong> I have a <code>data</code> folder for the incoming CSV files. I have a <code>scripts</code> folder for my Python preparation files. <strong>You have to be very careful when pushing projects to GitHub.</strong> It&#8217;s a common rule to never publish raw business data online. I used a <strong>.gitignore</strong> file (<a href="https://github.com/adamfaik/sql-agent/blob/main/.gitignore">read on GitHub</a>) to block the CSV files and the database from uploading. I also hid my <code>.env</code> file containing my OpenAI API key. Gemini walked me through setting up these security measures.</p><p>The first script is <code>build_db.py</code> (<a href="https://github.com/adamfaik/sql-agent/blob/main/scripts/build_db.py">read on GitHub</a>). <strong>This script reads all the raw CSV files and creates a simplified SQL database.</strong> We use SQLite for this. SQLite is a super lightweight database engine. It stores everything in a simple local file on your computer. You don&#8217;t need to spin up a complicated external server or manage credentials. It&#8217;s the perfect tool for fast prototyping.</p><p>Next, the agent needs to <strong>understand the architecture of the new database</strong>. The <code>extract_schema.py</code> file (<a href="https://github.com/adamfaik/sql-agent/blob/main/scripts/extract_schema.py">read on GitHub</a>) connects to the SQLite file. It queries the internal system to extract the raw structure. It isolates the technical instructions and saves this text to map out the model. This gives a basic list of columns and tables.</p><p>But a raw list of columns isn&#8217;t enough. The LLM needs to understand the actual content. This is where <code>build_schema.py</code> comes in (<a href="https://github.com/adamfaik/sql-agent/blob/main/scripts/build_schema.py">read on GitHub</a>). This script generates a much richer, semantic version of the schema.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;92078685-20f7-4410-81cf-a083ebf34a33&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># Extract from build_schema.py: The Schema Linking trick
if col_type.upper() in ["TEXT", "VARCHAR"]:
    try:
        cursor.execute(f"SELECT DISTINCT {col_name} FROM {table_name} WHERE {col_name} IS NOT NULL LIMIT 4;")
        samples = [str(row[0]) for row in cursor.fetchall()]
        if samples:
            formatted_samples = ", ".join([f"'{s}'" for s in samples])
            comment = f" -- Examples: {formatted_samples}"
    except Exception:
        pass</code></pre></div><p>This code uses a powerful technique called <strong>schema linking</strong>. For every text column, the script grabs <strong>four real values directly from the database.</strong> It connects the theoretical structure to factual content. The agent now understands the exact format it needs to search for. Instead of just seeing a column named &#8220;product_category_name&#8221;, it sees real examples like &#8220;cama_mesa_banho&#8221; or &#8220;beleza_saude&#8221;.</p><p>You can see exactly how this enriched structure looks in the generated text file <code>schema.txt</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_!YYUa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YYUa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png 424w, https://substackcdn.com/image/fetch/$s_!YYUa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png 848w, https://substackcdn.com/image/fetch/$s_!YYUa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png 1272w, https://substackcdn.com/image/fetch/$s_!YYUa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!YYUa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1383248,&quot;alt&quot;:&quot;A code editor displaying a schema.txt file, showing SQL CREATE TABLE statements where each text column has a comment listing four real example values pulled from the database.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A code editor displaying a schema.txt file, showing SQL CREATE TABLE statements where each text column has a comment listing four real example values pulled from the database." title="A code editor displaying a schema.txt file, showing SQL CREATE TABLE statements where each text column has a comment listing four real example values pulled from the database." srcset="https://substackcdn.com/image/fetch/$s_!YYUa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png 424w, https://substackcdn.com/image/fetch/$s_!YYUa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png 848w, https://substackcdn.com/image/fetch/$s_!YYUa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png 1272w, https://substackcdn.com/image/fetch/$s_!YYUa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b9fd2c-e85b-478a-8668-1692af596cf4_3248x1962.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The generated schema file injected with real data examples</figcaption></figure></div><p>Finally, the agent accesses the Olist database via the SQLite connection. The system injects this massive, enriched text directly into every instruction sent to the model. We call this a <strong>full context injection</strong>. It guarantees absolute visibility for the agent. In the past, developers had to use clever tricks to filter data and bypass memory limits. Today, context windows are huge. We can feed the LLM everything at once. The model has all the context it needs to shine and give us highly accurate SQL queries.</p><h3>2. Build the agent logic with LangGraph nodes</h3><p>Let&#8217;s look at the core of the agent. Everything happens inside the file called <code>agent.py</code> (<a href="https://github.com/adamfaik/sql-agent/blob/main/agent.py">read on GitHub</a>). It&#8217;s about 500 lines of code. That might sound like a lot. But I built it iteratively step by step with Gemini and Claude. It&#8217;s actually very simple to read. We use a framework called <strong>LangGraph</strong>.</p><p><a href="https://www.langchain.com/langgraph">LangGraph</a> is an open-source framework built by the LangChain team. You have probably heard of other agent frameworks like <a href="https://microsoft.github.io/autogen/stable//index.html">AutoGen</a> or <a href="https://crewai.com/">CrewAI</a>. Those frameworks give AI agents a lot of freedom to think and act autonomously. That is cool for experiments, but terrible for production. <strong>Highly autonomous agents often hallucinate</strong>, loop infinitely, or completely forget the user&#8217;s original request. LangGraph is different. <strong>It treats your agent like a state machine.</strong> You build independent workstations called <strong>nodes</strong>. You connect them with strict traffic rules called <strong>edges</strong>. <strong>The agent can only move exactly where you allow it to go.</strong> I chose it because it gives me absolute control over the execution flow.</p><p>Before we write the logic, we connect the LLM. I used the <a href="https://platform.openai.com/api-keys">OpenAI API</a>. <strong>I generated a secret key, pasted it into my project, and set a hard five-euro limit</strong> to test things safely. My code includes a simple configuration variable <code>model_name = "gpt-4o-mini"</code>. This makes the system completely independent. I can swap to a different model just by changing one word in the code.</p><p>The very first thing we define in the code is the AgentState. <strong>Think of this as the shared memory of the agent.</strong> It uses strict typing to track exactly what happens at every step. It stores the user&#8217;s question, the SQL plan, the raw data, and any errors. It also stores the entire conversation history. It never overwrites previous messages. It just appends new ones. This allows the agent to remember everything you discussed.</p><p>I created six specific nodes to handle the workflow. Here is a map of how the data flows through them.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UmDy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc97c163d-61de-4ead-a210-e8d4573d3943_1904x195.png 424w, https://substackcdn.com/image/fetch/$s_!UmDy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc97c163d-61de-4ead-a210-e8d4573d3943_1904x195.png 848w, https://substackcdn.com/image/fetch/$s_!UmDy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc97c163d-61de-4ead-a210-e8d4573d3943_1904x195.png 1272w, https://substackcdn.com/image/fetch/$s_!UmDy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc97c163d-61de-4ead-a210-e8d4573d3943_1904x195.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!UmDy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc97c163d-61de-4ead-a210-e8d4573d3943_1904x195.png" width="1456" height="149" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c97c163d-61de-4ead-a210-e8d4573d3943_1904x195.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:149,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A flowchart diagram of the LangGraph agent architecture. It begins with user input moving to Node 1 for query reformulation, then to Node 2, a semantic router. Node 2 routes \&quot;Out of Scope\&quot; queries to a blocked end state, \&quot;Simple\&quot; queries directly to Node 4 to generate SQL, and \&quot;Complex\&quot; queries to Node 3 for planning before generating SQL. Node 4 passes the query to Node 5 to execute the SQL, which features a self-correction loop back to Node 4 if an error is detected. Successful execution moves to Node 6 to summarize results and ends with the Final UI Output.&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="A flowchart diagram of the LangGraph agent architecture. It begins with user input moving to Node 1 for query reformulation, then to Node 2, a semantic router. Node 2 routes &quot;Out of Scope&quot; queries to a blocked end state, &quot;Simple&quot; queries directly to Node 4 to generate SQL, and &quot;Complex&quot; queries to Node 3 for planning before generating SQL. Node 4 passes the query to Node 5 to execute the SQL, which features a self-correction loop back to Node 4 if an error is detected. Successful execution moves to Node 6 to summarize results and ends with the Final UI Output." title="A flowchart diagram of the LangGraph agent architecture. It begins with user input moving to Node 1 for query reformulation, then to Node 2, a semantic router. Node 2 routes &quot;Out of Scope&quot; queries to a blocked end state, &quot;Simple&quot; queries directly to Node 4 to generate SQL, and &quot;Complex&quot; queries to Node 3 for planning before generating SQL. Node 4 passes the query to Node 5 to execute the SQL, which features a self-correction loop back to Node 4 if an error is detected. Successful execution moves to Node 6 to summarize results and ends with the Final UI Output." srcset="https://substackcdn.com/image/fetch/$s_!UmDy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc97c163d-61de-4ead-a210-e8d4573d3943_1904x195.png 424w, https://substackcdn.com/image/fetch/$s_!UmDy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc97c163d-61de-4ead-a210-e8d4573d3943_1904x195.png 848w, https://substackcdn.com/image/fetch/$s_!UmDy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc97c163d-61de-4ead-a210-e8d4573d3943_1904x195.png 1272w, https://substackcdn.com/image/fetch/$s_!UmDy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc97c163d-61de-4ead-a210-e8d4573d3943_1904x195.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div><figcaption class="image-caption">The core LangGraph architecture</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OTml!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OTml!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!OTml!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!OTml!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!OTml!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!OTml!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png" width="2752" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1161612,&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37cace51-30fd-4a1b-8ed9-73599d800513_2752x1536.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_!OTml!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!OTml!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!OTml!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!OTml!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bed51-f29e-45d5-9fb3-006eab5f221f_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s break down exactly what happens at each of these six workstations.</p><p><strong>Node 1: Reformulate query.</strong> Users never ask complete questions. They say things like &#8220;What about the second product?&#8221;. The LLM cannot write SQL for that. <strong>This node acts as a context barrier.</strong> It reads the chat history and rewrites the user&#8217;s input into a standalone sentence. It changes &#8220;What about the second one?&#8221; to &#8220;What is the total revenue for beauty products in 2018?&#8221;. This is incredibly useful. The downstream nodes don&#8217;t have to worry about chat history. They only focus on a perfectly clear question.</p><p><strong>Node 2: Classify query. </strong>This is the semantic router. <strong>It analyzes the question and assigns it a complexity level</strong>: simple, complex, or out of scope. If a user asks about the weather in S&#227;o Paulo, this node blocks it immediately. This saves money. We don&#8217;t waste compute power trying to write SQL for an irrelevant question. For this node, I force the LLM to output a strict JSON format. LLM models love to chat. I don&#8217;t want a conversational answer here. I just want a structured category and a reason.</p><p><strong>Node 3: Plan SQL query. </strong>This node only activates for complex questions. We use a famous technique called <strong>chain of thought</strong>. We ask the model to <strong>plan its join strategy in plain English before writing any code.</strong> It lists the required tables and foreign keys. Separating the architectural thinking from the syntax writing massively reduces hallucinations on hard questions.</p><p><strong>Node 4: Generate SQL. </strong>This node translates the plan into real SQL code. I use a technique called <strong>in-context learning</strong>. I inject three perfectly written examples of SQL queries directly into the initial instructions. The LLM mimics the style of those examples. I also set the model&#8217;s temperature to exactly zero. A high temperature makes the LLM creative and varied. We are writing database code. We demand strict, rigid accuracy, not creativity.</p><p><strong>Node 5: Execute SQL. </strong>This is where Python takes over. <strong>The script takes the generated SQL and runs it directly against the local SQLite database.</strong> It extracts the raw data. The LLM has a limited context window. If the user asks for a table of 50,000 customers, the app will crash and burn our budget. My Python code specifically truncates the results. It limits the data sent back to the LLM to a maximum of 10 rows. It also adds a warning note to tell the model that the data was truncated. We show the user a preview, but we protect the system.</p><p><strong>Node 6: Summarize results. </strong>This final node translates the raw database output back into a human-friendly text. <strong>It explains the numbers clearly.</strong> It also analyzes the data shape and decides on the best chart type to display in the user interface.</p><p>After building the nodes, <strong>I had to define the traffic rules.</strong> I wrote conditional edges to control the flow. The most important rule is the <strong>self-correction loop</strong>. When node 5 executes the SQL, it might hit a syntax error. If that happens, the routing logic catches the error message. It sends the error back to Node 4 (Generate SQL). It tells the LLM, &#8220;You made a mistake, here is the error, fix your code.&#8221; The agent tries to fix itself automatically. I capped this loop at three maximum retries to prevent infinite loops.</p><p>Finally, <strong>I wrapped the whole graph in a MemorySaver.</strong> This acts as a long-term checkpoint system. It records the exact position and state of the agent after every single action.</p><p><strong>Every single node relies on a highly specialized system prompt.</strong> Writing good prompts is key to a stable agent. You have to give the LLM extremely explicit constraints. Let me show you the full prompt construction for node 4 (Generate SQL) as an example:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;0da75ec9-81bd-4c22-93fe-d82baf4c49d2&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># Craft the main system prompt
system_prompt = f"""You are an expert SQLite data analyst.
Your task is to translate the user's question into a valid SQLite query.

Here is the schema of the database:
{schema}

Rules:
1. Return ONLY the raw SQL query.
2. Do not wrap the SQL in markdown formatting (e.g., no ```sql).
3. Do not add any explanations or text.
4. Use JOINs correctly based on the provided schema.
5. CRITICAL LANGUAGE &amp; FORMAT RULE: The database only stores category names in Portuguese (product_category_name) and English (product_category_name_english). Furthermore, the English names are ALWAYS formatted in lowercase with underscores instead of spaces (e.g., 'health_beauty', 'watches_gifts'). If the chat history mentions categories in French, translate them to English AND format them with lowercase and underscores for the WHERE clause.
"""

# Inject Few-Shot examples ONLY if enabled
if use_few_shot:
    system_prompt += f"\n{few_shot_examples}\n"

# Self-correction logic: inject previous errors
if error:
    system_prompt += f"\n\nWARNING: Your previous query failed with this error: {error}. Please correct your SQL."

# Inject the architectural plan for complex queries
if plan:
    system_prompt += f"\n\nCRITICAL: Follow this architectural plan to write your SQL:\n{plan}"</code></pre></div><p>This prompt is structured and highly specific. I don&#8217;t just ask the LLM to &#8220;be careful with languages&#8221;. <strong>I tell it exactly how the database formats strings.</strong> I explain the exact lowercase and underscore rules. Then, the code dynamically injects the few-shot examples, the execution plan, and even the exact error message if the LLM messed up the previous try. This dynamic context is exactly what prevents your application from crashing when a user types a category name with a capital letter.</p><h3>3. Create the web interface with Streamlit</h3><p>Now we need a user interface. We only need one file for this: <code>app.py</code> (<a href="https://github.com/adamfaik/sql-agent/blob/main/app.py">read on GitHub</a>). I used a framework called <a href="https://streamlit.io/">Streamlit</a> to build it. A brilliant startup created Streamlit a few years ago, and Snowflake recently bought them. It&#8217;s completely open-source. It lets you build interactive web applications using only Python. You don&#8217;t need to write a single line of HTML, CSS, or JavaScript. It&#8217;s incredibly liberating for product builders. <strong>You just write your Python logic, and Streamlit renders a beautiful UI instantly.</strong> It&#8217;s the ultimate tool to turn a quick script into a professional product you can actually share.</p><p><strong>The interface needs a memory system.</strong> A chat app is useless if it forgets your last message. I use a built-in feature called <code>session_state</code> to store the conversation history. I also generate a unique <code>thread_id</code> for every user session. I pass this ID directly to our LangGraph agent. This guarantees the agent remembers exactly what we discussed five minutes ago. You can ask follow-up questions naturally without repeating yourself.</p><p>Let&#8217;s look at the actual user experience. When you type a question, the interface doesn&#8217;t just freeze and make you wait in silence. <strong>It shows you exactly what the agent is doing in real-time.</strong> I built a glass box interface. You can literally watch the agent think.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aVTP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aVTP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!aVTP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!aVTP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!aVTP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!aVTP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:288882,&quot;alt&quot;:&quot;The web interface showing a status container expanding to reveal the agent&#8217;s internal steps, like reformulating the query and detecting complexity.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The web interface showing a status container expanding to reveal the agent&#8217;s internal steps, like reformulating the query and detecting complexity." title="The web interface showing a status container expanding to reveal the agent&#8217;s internal steps, like reformulating the query and detecting complexity." srcset="https://substackcdn.com/image/fetch/$s_!aVTP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!aVTP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!aVTP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!aVTP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F891ef2ff-bc52-4338-8b12-bff19bbbce0c_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Tracking the agent&#8217;s live progress step by step</figcaption></figure></div><p>I built this transparency using a Streamlit component called <code>st.status</code>. The LangGraph agent streams events back to the interface as it moves from node to node. <strong>I catch these events in a simple loop.</strong> I check the <code>node_name</code> and display the corresponding information inside an expandable menu using <code>st.expander</code>.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;de8370ac-4995-44b3-83f7-146d41a6626a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># Catching the agent's events to display intermediate steps
for event in st.session_state.agent_graph.stream(initial_state, config=config):
    for node_name, node_state in event.items():
        
        if node_name == "plan_sql_query":
            status.write("&#9203; &#201;laboration du plan de jointure...")
            with st.expander("&#128203; Voir le plan d'ex&#233;cution", expanded=False):
                st.markdown(node_state.get("sql_plan"))
        
        elif node_name == "generate_sql":
            status.write("&#9203; Traduction en SQL...")
            with st.expander("&#128269; View Generated SQL", expanded=False):
                st.code(node_state.get("sql_query"), language="sql")</code></pre></div><p>This code snippet shows exactly how I pull the agent&#8217;s internal thoughts and put them on the screen.</p><h3>4. Secure the database and prevent execution errors</h3><p>We have a working app, but we can&#8217;t just hand it to the business team and hope for the best. <strong>We need serious security mechanisms.</strong> You don&#8217;t want someone to accidentally destroy your database or run up a massive API bill. Let&#8217;s look at exactly how I implemented these guardrails in the code. It&#8217;s actually much easier than it sounds.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IQR9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IQR9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!IQR9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!IQR9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!IQR9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!IQR9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png" width="2752" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1202767,&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74808979-a1c0-42c5-8c83-adb6c731b871_2752x1536.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_!IQR9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!IQR9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!IQR9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!IQR9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ff633d-cc2c-46cf-afa7-e849bc9a0371_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>First, <strong>we have to protect the API keys.</strong> We never write passwords directly in the Python code. <strong>We store them in a hidden file called </strong><code>.env</code>. In the <code>agent.py</code> file, we just add two lines at the very top:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;f65296e0-144d-47de-b00e-012c1c82f2c0&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from dotenv import load_dotenv
load_dotenv() # This loads your secret keys safely</code></pre></div><p>This simple step ensures we never accidentally publish our private keys to GitHub for the whole world to see.</p><p>Next, <strong>we must protect the database itself.</strong> What happens if the AI hallucinates or a user intentionally tries to execute a <code>DROP TABLE</code> command? <strong>We build a firewall right before the execution step.</strong> Many developers write a lazy rule to block specific words like <code>if "DROP" in query</code>. This is a terrible method. Users can easily bypass simple word filters. Instead, I used a library called <code>sqlparse</code> to build an <strong>Abstract Syntax Tree (AST)</strong> parser. It breaks the query into logical blocks and checks the exact core command.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;e1d25952-6c13-4e92-bf18-3fde7d058c86&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># STRICT SECURITY GUARDRAIL
import sqlparse

parsed_statements = sqlparse.parse(sql_query)
for statement in parsed_statements:
    if not statement.is_whitespace:
        stmt_type = statement.get_type().upper()
        
        # Only SELECT statements are allowed
        if stmt_type != 'SELECT':
            return {"error": f"Security Violation: '{stmt_type}' operation detected."}</code></pre></div><p>If the command is anything other than a simple <code>SELECT</code> statement, the program blocks the execution instantly. It&#8217;s an incredibly robust way to guarantee a strict read-only environment.</p><p><strong>We also have to prevent compute overloads.</strong> Sometimes, the LLM writes a bad query and forgets to link two tables correctly. This creates a massive <strong>cartesian product</strong>. A simple question suddenly tries to return millions of rows. This will crash the application and burn your API budget. SQLite doesn&#8217;t have a simple timeout parameter, so I used a trick with <code>set_progress_handler</code>.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;3827e9f2-d586-4c50-9519-3c8bbe7b22fc&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import time
start_time = time.time()
TIMEOUT_SECONDS = 5.0 

def progress_handler():
    # If execution takes more than 5 seconds, abort it
    if time.time() - start_time &gt; TIMEOUT_SECONDS:
        return 1 
    return 0
    
# Check the time every 10,000 database instructions
conn.set_progress_handler(progress_handler, 10000)
cursor.execute(sql_query)</code></pre></div><p>If a query takes more than five seconds to run, the system kills it automatically.</p><p>Finally, <strong>we need to protect the LLM&#8217;s memory.</strong> If a query succeeds but returns 50,000 rows, sending all that text to the LLM will cost a fortune in API tokens. I strictly truncate the results in Python before sending the data back to the agent for the final summary.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;00964464-fed5-4db6-a23f-c333f256cff1&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">llm_row_limit = 10
formatted_results = ""

# Send only the first 10 rows to the LLM
for row in results[:llm_row_limit]:
    formatted_results += str(row) + "\n"
    
if len(results) &gt; llm_row_limit:
    formatted_results += f"\nWARNING: {len(results) - llm_row_limit} additional rows hidden to save tokens."</code></pre></div><p>We give the user a clear preview of the data in the UI, but we protect the system&#8217;s memory and our wallets. This is exactly how you build a secure agentic system.</p><p>As you can see, the core architecture really just relies on two main files. One file holds the agent&#8217;s logic, and the other holds the user interface. You will obviously write a few extra helper scripts along the way to ingest data or manage your GitHub repository. But fundamentally, <strong>the project remains very basic and simple. </strong>But having a simple architecture is meaningless if the AI hallucinates, which is why we must now <strong>build a rigorous evaluation framework to prove the system actually works.</strong></p><div><hr></div><h2>The eval: prove the system actually works</h2><p>I could have stopped right there and called it a day. The agent works, it looks great, and it answers questions. But building the agent is actually only half the job. <strong>Building a robust evaluation framework is the most important thing you will do.</strong> You might wonder why we need to spend time on this. The answer is simple. AI models change constantly. OpenAI, Google or Anthropic might release a new update tomorrow that completely breaks my carefully crafted system prompts. If that happens, my entire agent logic might need a rewrite. But <strong>a solid evaluation system never changes.</strong> It acts as an anchor. It tells you instantly if a new model makes your agent smarter or dumber. If you invest your time anywhere, invest it here.</p><h3>1. Build the test plan and SQL dataset</h3><p>Everything for this phase happens inside an <code>eval</code> folder (<a href="https://github.com/adamfaik/sql-agent/tree/main/eval">view on GitHub</a>). I started by creating a benchmark dataset of 60 test questions. You might ask why I chose exactly 60. Don&#8217;t look for a deeply scientific reason. I originally wanted to write 50. Then I found a few more interesting edge cases to add. If this were a real enterprise product, <strong>I would probably use 1,000 questions to be safe.</strong> But remember my strict five-euro budget! Running an evaluation test costs money because you send dozens of prompts to the API at once. <strong>A suite of 60 questions costs me about 50 cents per run.</strong> A massive dataset would bankrupt my little experiment in an hour.</p><p>I created a file called <code>benchmark.json</code> (<a href="https://github.com/adamfaik/sql-agent/blob/main/eval/benchmark.json">read on GitHub</a>) to act as the ultimate source of truth. <strong>It works just like a classic software testing file.</strong> It contains the question, the difficulty level, and the perfect gold SQL query we expect the agent to generate. Let&#8217;s look at what these categories mean in practice.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aOYQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aOYQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!aOYQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!aOYQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!aOYQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!aOYQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png" width="2752" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:993408,&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b995978-d767-4741-81ef-23c2dde165ba_2752x1536.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_!aOYQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!aOYQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!aOYQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!aOYQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f523ea4-4c17-4d77-914f-533a732bab77_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>First, we have <strong>15 simple questions</strong>. These test the absolute minimum performance baseline. They usually target a single table and require no joins. For example, a simple question looks like: &#8220;Tell me how many customers live in S&#227;o Paulo.&#8221; The expected gold SQL is <code>SELECT COUNT(*) FROM customers WHERE customer_city = 'sao paulo';</code>.</p><p>Second, we have <strong>25 complex questions</strong>. This is the core function of the agent. These questions force the LLM to use its chain-of-thought planner. <strong>They involve three or more tables, dates, and heavy aggregations.</strong> A complex question looks like: &#8220;What are the top 5 product categories that generate the most revenue?&#8221; The agent must write a massive query with multiple joins across order items, products, and English translations to get the right answer.</p><p>Third, we have <strong>10 out-of-scope questions</strong>. These test our semantic router and security guardrails. We ask things completely unrelated to our e-commerce data. For example: &#8220;What will the weather be like in S&#227;o Paulo next week?&#8221; The expected gold SQL here is <code>null</code>. <strong>The agent must reject the question</strong> gracefully instead of hallucinating fake weather data.</p><p>Finally, we have <strong>10 ambiguous questions</strong>. I actually didn&#8217;t plan for these. Claude suggested I add them during a code review. These questions test how the agent handles vague human language. A user might ask: &#8220;Show me the best-selling items.&#8221; The word &#8220;best&#8221; means absolutely nothing to a database. Does it mean highest revenue? Most items sold? Highest review score? There is no gold SQL possible here either. <strong>The agent needs to navigate the ambiguity safely.</strong></p><p>I know how to write SQL, but writing 60 test cases manually is incredibly boring. I let the AI do the heavy lifting. <strong>I asked Gemini to generate the entire JSON file</strong> based on the database schema. Then, I pasted the file into Claude and asked it to review Gemini&#8217;s logic. In a real company, you need an expert to verify these gold queries manually. You cannot trust an AI to grade an AI without a human baseline. But for a fast vibe coding project, this dual-LLM generation method works perfectly.</p><h3>2. Define the metrics to score the agent</h3><p>Having a big pile of test questions is a great start. But a test plan is completely useless if you don&#8217;t have a way to score it. You need clear indicators. You have to know if your agent is getting smarter or dumber every time you tweak a prompt. <strong>I defined four specific metrics to measure the success.</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_!vBRg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1897617-a5c7-4534-8f45-f62130795026_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vBRg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1897617-a5c7-4534-8f45-f62130795026_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!vBRg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1897617-a5c7-4534-8f45-f62130795026_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!vBRg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1897617-a5c7-4534-8f45-f62130795026_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!vBRg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1897617-a5c7-4534-8f45-f62130795026_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!vBRg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1897617-a5c7-4534-8f45-f62130795026_2752x1536.png" width="2752" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1897617-a5c7-4534-8f45-f62130795026_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1282997,&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2072c449-24c2-4993-a26e-6ffbe9f3fd1c_2752x1536.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_!vBRg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1897617-a5c7-4534-8f45-f62130795026_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!vBRg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1897617-a5c7-4534-8f45-f62130795026_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!vBRg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1897617-a5c7-4534-8f45-f62130795026_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!vBRg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1897617-a5c7-4534-8f45-f62130795026_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The first indicator is <strong>strict exactitude</strong>. This metric runs the reference gold SQL, runs the agent&#8217;s SQL, and compares the two final data tables. It doesn&#8217;t look at the lines of code. <strong>It only looks at the raw numbers.</strong> It is highly conservative. If the agent finds the exact right answer but sorts the table differently, this metric scores it as a failure. It is ruthless. But it gives you a solid, rigorous baseline that does not rely on another AI.</p><p>Because strict exactitude is so rigid, we need a second indicator. <strong>This is semantic exactitude.</strong> It evaluates the real meaning of the answer. Strict exactitude fails a query for a bad sorting order. Semantic exactitude understands the context. <strong>I built an LLM-as-a-Judge system for this.</strong> An external AI grades the agent&#8217;s answer on a strict scale from 0 to 3. A score of 3 means the data perfectly answers the user&#8217;s question. A 2 means it is plausible but has a minor flaw. A 1 means the logic is related but wrong. A 0 is a total failure.</p><p>I use OpenAI&#8217;s <strong>most advanced model</strong>, <code>gpt-4o</code>, to act as the judge. You always want a smarter, heavier model grading the homework of your smaller, faster agent. I use a strict Pydantic model to force the judge to output a clean JSON score. Here is exactly how I prompt the judge in the code:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;84727065-1051-4695-9a7d-93dde128cadf&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># The strict grading rubric for our LLM Judge
judge_prompt = f"""You are an impartial SQL evaluation judge.
Your task: determine if the agent's SQL answer is semantically correct for the user's question.

User question: {item.get('question', 'N/A')}
Gold SQL result: {gold_str}
Agent SQL result: {agent_str}

Score the agent on a scale of 0 to 3:
- 3: Perfectly correct (same data, possibly different order/format)
- 2: Partially correct (right direction, missing a filter or wrong aggregation)
- 1: Wrong but related (queried the right tables but wrong logic)
- 0: Completely wrong or no SQL generated
"""</code></pre></div><p>The third metric is the <strong>valid SQL rate</strong>. This indicator simply asks if the database crashed. <strong>It counts the proportion of queries that executed without throwing a technical SQLite error.</strong> It also gives the agent full points if it successfully rejects an out-of-scope question. This metric measures the pure technical robustness of your system.</p><p>The fourth and final indicator is <strong>latency</strong>. We measure <strong>the average execution time per question in seconds.</strong> This is crucial if you want to deploy your app in production. The response time dictates the user experience. If your agent writes perfect SQL but takes 45 seconds to think, your users will close the window. This metric calculates the entire round trip. It includes the API calls, the planning phase, and any automatic self-correction loops.</p><p>So, we have our framework. We have strict and semantic exactitude to measure the quality of the answer. We have the valid SQL rate to measure technical robustness. We have latency to evaluate operational speed. Now we just need to <strong>run the tests and look at the numbers!</strong></p><h3>3. Build a dashboard to automate the tests</h3><p>I could have just written a simple Python script to run my 60 questions. I could have just printed the final scores in the terminal. But we saw how incredibly fast Streamlit is for building interfaces. <strong>I figured the evaluator deserves a great user experience too!</strong> So, I built a dedicated web dashboard just for testing the agent: <code>eval_app.py</code> (<a href="https://github.com/adamfaik/sql-agent/blob/main/eval/eval_app.py">read on GitHub</a>). It gives us a clean, visual way to launch the benchmark and analyze the results.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3O0q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3O0q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!3O0q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!3O0q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!3O0q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!3O0q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:674944,&quot;alt&quot;:&quot;The Evaluation Dashboard UI showing the experiment settings on the left sidebar and the loaded benchmark dataset on the main screen.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Evaluation Dashboard UI showing the experiment settings on the left sidebar and the loaded benchmark dataset on the main screen." title="The Evaluation Dashboard UI showing the experiment settings on the left sidebar and the loaded benchmark dataset on the main screen." srcset="https://substackcdn.com/image/fetch/$s_!3O0q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!3O0q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!3O0q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!3O0q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2503d280-23bd-4183-9cc8-8705ca8bf93b_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The custom Streamlit dashboard ready to evaluate the agent</figcaption></figure></div><p><strong>I added a big red button to launch the test.</strong> When you click it, the system loops through all 60 questions. It sends them to the agent, waits for the SQL execution, passes the results to our LLM judge, and calculates the scores.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ERjX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ERjX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!ERjX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!ERjX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!ERjX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ERjX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:297813,&quot;alt&quot;:&quot;A progress bar indicating the evaluation is running, currently on question 17 out of 60.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A progress bar indicating the evaluation is running, currently on question 17 out of 60." title="A progress bar indicating the evaluation is running, currently on question 17 out of 60." srcset="https://substackcdn.com/image/fetch/$s_!ERjX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!ERjX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!ERjX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!ERjX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb757a79-fbdc-4139-b0c4-893c713efbf0_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Tracking the evaluation progress in real-time</figcaption></figure></div><p>I am naturally curious. I didn&#8217;t want to just run the test once and accept the first score. <strong>I wanted to play with the parameters.</strong> I wanted to see exactly how each feature impacts the agent&#8217;s performance. Does the agent really need all those complex nodes? To figure this out, <strong>I built a configurator in the left sidebar.</strong> This allows us to <strong>run an ablation study.</strong> An ablation study is just a fancy scientific term for turning features on and off to see what breaks.</p><p>First, I added a dropdown to change the core LLM. I limited it to three OpenAI models for this experiment: <code>gpt-3.5-turbo</code>, <code>gpt-4o-mini</code>, and <code>gpt-4o</code>. You could easily plug in open-source models here if you wanted.</p><p>Next, I added toggle switches to enable or disable three optional modules in our LangGraph architecture:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zTH6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zTH6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!zTH6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!zTH6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!zTH6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zTH6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png" width="2752" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:838007,&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4bcce1-dd26-4444-96a9-926ec7e8fcf6_2752x1536.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_!zTH6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!zTH6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!zTH6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!zTH6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec074a86-bfca-4adb-8301-439d2048e82f_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Few-shot prompting:</strong> Do we really need to inject the three SQL examples into the system prompt? Let&#8217;s turn it off and see if the model forgets how to format the categories.</p></li><li><p><strong>Self-correction loop:</strong> Does the agent actually fix its own SQLite syntax errors, or does it just spin in circles? We can disable the loop to find out.</p></li><li><p><strong>Chain of thought SQL planner:</strong> Does forcing the agent to write an execution plan actually help it write better code for complex queries?</p></li></ul><p>Once the test finishes, the dashboard instantly visualizes our four key indicators.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z2Qj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z2Qj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!Z2Qj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!Z2Qj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!Z2Qj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z2Qj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1356463b-982a-410d-af9b-0277593171da_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:394209,&quot;alt&quot;:&quot;Circular gauges displaying the final performance metrics: Strict Accuracy, Semantic Accuracy, Valid SQL Rate, and Self-Correction Triggers.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Circular gauges displaying the final performance metrics: Strict Accuracy, Semantic Accuracy, Valid SQL Rate, and Self-Correction Triggers." title="Circular gauges displaying the final performance metrics: Strict Accuracy, Semantic Accuracy, Valid SQL Rate, and Self-Correction Triggers." srcset="https://substackcdn.com/image/fetch/$s_!Z2Qj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!Z2Qj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!Z2Qj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!Z2Qj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1356463b-982a-410d-af9b-0277593171da_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The global performance metrics after a complete run</figcaption></figure></div><p>Looking at global percentages is great, but <strong>we also need to see the exact failures.</strong> Why did the agent score a 0 on question 42? To debug this, the dashboard generates a detailed log table. It shows the strict match result, the LLM Judge&#8217;s score out of 3, the judge&#8217;s exact reasoning, and any technical SQL errors encountered.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7TZC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7TZC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!7TZC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!7TZC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!7TZC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!7TZC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:670188,&quot;alt&quot;:&quot;A detailed data table showing the evaluation logs for each individual question, including the judge&#8217;s score and reasoning.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A detailed data table showing the evaluation logs for each individual question, including the judge&#8217;s score and reasoning." title="A detailed data table showing the evaluation logs for each individual question, including the judge&#8217;s score and reasoning." srcset="https://substackcdn.com/image/fetch/$s_!7TZC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!7TZC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!7TZC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!7TZC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd1c5de0-bcdb-4321-871f-5ed9e673a736_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Line-by-line breakdown of the agent&#8217;s successes and failures</figcaption></figure></div><p>Running these evaluations costs real money. <strong>Clicking that red button burns about 50 cents every single time.</strong> It would be a tragedy to run 20 different configurations and lose all the data when you refresh the page. <strong>I added a small piece of code to save every single run to a local JSON file: </strong><code>runs_history.json</code> (<a href="https://github.com/adamfaik/sql-agent/blob/main/eval/runs_history.json">read on GitHub</a>).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SAxl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SAxl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!SAxl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!SAxl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!SAxl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!SAxl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/acd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:572505,&quot;alt&quot;:&quot;A comparison table showing historical evaluation runs, detailing the model used, toggles activated, and the resulting accuracy scores.&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A comparison table showing historical evaluation runs, detailing the model used, toggles activated, and the resulting accuracy scores." title="A comparison table showing historical evaluation runs, detailing the model used, toggles activated, and the resulting accuracy scores." srcset="https://substackcdn.com/image/fetch/$s_!SAxl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png 424w, https://substackcdn.com/image/fetch/$s_!SAxl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png 848w, https://substackcdn.com/image/fetch/$s_!SAxl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!SAxl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd09d85-3f5b-4087-bbfd-c990e5a5f1f8_3000x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The ablation study history table comparing different agent configurations</figcaption></figure></div><p>This history table is the most powerful part of the dashboard. <strong>It lets you compare different model configurations side-by-side.</strong> You can clearly see how swapping from <code>gpt-3.5-turbo</code> to <code>gpt-4o-mini</code> impacts the valid SQL rate. You can see what happens when you turn off the chain of thought planner.</p><p>This is obviously a simplified evaluation setup. <strong>If you put this in production, you would build a much bigger system.</strong> You would test different system prompts, tweak the temperature, and test completely different node architectures. But even with just three toggles and three models, we can gather enough data to find the absolute best configuration for this AI agent. Let&#8217;s look at what the numbers actually revealed.</p><h3>4. Analyze the test scores and identify failures</h3><p>I ran my tests using the dashboard. <strong>I played with the configurations and analyzed the numbers.</strong> The results are truly counter-intuitive. The best configuration is not the most complex one. Our instinct tells us to turn on every single feature. However, the data proves otherwise. The optimal configuration, relying solely on few-shot prompting without the extra loops, achieved an impressive <strong>83.9% semantic accuracy</strong>. Compare this to the full stack configuration with every complex feature enabled, which <strong>only scored 80.0%.</strong></p><p><strong>The real magic bullet is in-context learning</strong> (few-shot prompting). I inject just three examples of SQL queries into the initial instructions. That simple action pushes the <code>gpt-4o</code> model&#8217;s score up to <strong>88.3%</strong>. The examples guide the model perfectly. They are absolutely critical for succeeding on complex queries.</p><p>Conversely, <strong>the SQL planner actually hurts performance.</strong> It sounds crazy, right? We add a node to force the agent to think, and it makes more mistakes. Detailed analysis reveals the core problem: <strong>the model suffers from an overthinking phenomenon.</strong> The planner specifically degrades performance on medium-complexity questions. Instead of writing a straightforward query, <strong>it invents unnecessary logical constraints</strong> and builds an execution plan that is way too heavy, which ultimately ruins the final SQL query.</p><p>Let&#8217;s look at a concrete example. I ask the agent to find the ID of the single order with the highest number of payment installments. <strong>Without the planner, the agent keeps it simple.</strong> It queries the payments table, sorts the data, and returns the exact single ID requested, scoring a perfect 3 out of 3 from the LLM judge. But <strong>when we turn the planner on, the agent overthinks it.</strong> It creates a convoluted execution plan, misunderstands the basic filtering logic, and returns a massive list of multiple IDs instead of just the top one. The query runs, but it completely fails the strict accuracy test. <strong>Too much thinking hurts performance.</strong></p><p><strong>Let&#8217;s talk about the self-correction loop.</strong> When I enable this option, the rate of valid SQL queries increases. That makes sense. The agent reads the syntax errors returned by the SQLite database and fixes its typos. But here is the catch: <strong>the overall semantic accuracy does not improve.</strong> Why? It&#8217;s a self-correction paradox. When you activate few-shot prompting, the provided examples allow the model to generate perfect SQL syntax on the very first try. The self-correction loop becomes practically inactive. <strong>The errors that remain are purely logical.</strong> The database engine cannot detect a business logic error, so the code runs perfectly and no correction is triggered. But the agent calculates the wrong thing, and the LLM judge spots this semantic error and gives it a zero.</p><p><strong>Ultimately, designing an agent is a pure game of trade-offs.</strong> A more powerful model gives you more accurate answers, but it completely destroys your wait times. The optimal configuration using the lightweight <code>gpt-4o-mini</code> model took just 4.51 seconds per question. When I upgraded to the heavier <code>gpt-4o</code> model to chase a few extra accuracy points, <strong>the latency ballooned to a massive 15.4 seconds per question.</strong> A user is not going to wait 15 seconds staring at their screen. Even if you stick to the faster model, adding complex steps like the SQL planner pushes the latency back up to 8.46 seconds.</p><p>I also dug into the agent&#8217;s recurring failures. Why does it always fail on specific questions? I identified <strong>three main traps</strong>:</p><ul><li><p>First, <strong>business vocabulary ambiguity.</strong> The agent doesn&#8217;t understand the subtle nuances of this specific company.</p></li><li><p>Second, <strong>percentages.</strong> The model calculates ratios very poorly, but this is actually a specific technical limitation of SQLite. SQLite performs integer division by default, and the model frequently forgets to explicitly cast those integers into floats before dividing them. As a result, the fraction always rounds down to zero. The good news is that migrating from a local SQLite database to a modern cloud data warehouse natively fixes this issue without requiring any changes to the agent&#8217;s logic.</p></li><li><p>Third, <strong>the translation gap.</strong> The database mixes English and Portuguese. The agent sometimes forgets to join the translation table. It tries to filter an English category directly on the Portuguese column.</p></li></ul><p>One final note on evaluation. I use a natural language model as a judge. It&#8217;s convenient, but it&#8217;s risky. <strong>LLMs have proven cognitive biases.</strong> They love long answers. They often favor the first option presented to them. The judge is not perfect. You must always keep a critical eye on its grades.</p><div><hr></div><h2>Roadmap: take the prototype to production</h2><p>If I actually deployed this to the whole company tomorrow, <strong>I would definitely add a few serious upgrades</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_!bkhe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bkhe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!bkhe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!bkhe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!bkhe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!bkhe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png" width="2752" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1020670,&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://www.theaithinker.com/i/192485028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd917e25c-44f8-41d8-8b46-b52e0bfb7bda_2752x1536.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_!bkhe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!bkhe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!bkhe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!bkhe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d252b6d-fa7b-433e-90fd-4179b43fbd10_2752x1536.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The current prototype is great, but real-world users are chaotic. If I had another weekend to hack on this, I would tackle the business ambiguity first. Right now, the LLM only knows the raw database structure and a few sample values. It completely ignores the weird internal business rules. <strong>I would build a much richer data dictionary.</strong> I would document every column definition, every possible value, and all the strict business exceptions. <strong>I would even connect a RAG system.</strong> This would let the agent read the internal company wiki to understand exactly how to define &#8220;active customer&#8221; before it writes a single line of code.</p><p>Relying purely on an AI judge to grade the homework is also a bit risky long-term. <strong>We need real humans to spot-check the work.</strong> I would add simple thumbs-up and thumbs-down buttons directly to the chat interface. Business experts could randomly test queries and immediately flag bad answers. We would route this human feedback straight back to our evaluation dashboard to improve the system. It&#8217;s essentially a lightweight <strong>reinforcement learning from human feedback</strong> (RLHF) loop. It keeps the AI honest and gives us a much-needed safety net.</p><p>If this agent goes live, <strong>I would be terrified of silent failures.</strong> AI models update behind the scenes, and their reasoning performance drifts over time. <strong>We need strict, automated monitoring.</strong> I would set up a script to run our evaluation benchmark automatically every single night. If the database reliability suddenly drops, <strong>the system should instantly trigger a red alert in Slack.</strong> You want to know the agent is broken before the CEO tries to pull a crucial revenue report.</p><p>Finally, <strong>I would upgrade the agent&#8217;s memory.</strong> Right now, I hardcoded exactly three static SQL examples directly into the system prompt. That&#8217;s perfectly fine for a quick prototype, but it limits the agent&#8217;s potential. <strong>I would build an automated feedback loop.</strong> Every time a user gets a perfect answer, we save that specific question and SQL pair into a vector database. When a new question comes in, the agent would search the database and dynamically <strong>fetch the three most relevant historical examples</strong>. Instead of relying on a static prompt, the agent would literally get smarter and more adaptable every single day just by talking to your team.</p><div><hr></div><h2>Start building your own data agent today!</h2><p>So, that&#8217;s the whole project. That&#8217;s exactly how I built a custom AI agent from scratch. <strong>We went from an old folder of CSV files to a smart, conversational database.</strong> We didn&#8217;t need a massive engineering team or a computer science degree. We just used a couple of LLM colleagues, a clear plan, and some persistence. <strong>It&#8217;s completely doable for anyone willing to try.</strong></p><p>I really hope this inspired you to build your own agent. You don&#8217;t have to be a backend expert to create AI-native products anymore. <strong>You just need a problem to solve and the patience to fight through a few Python errors.</strong> Find a dataset that you actually care about. It could be your user feedback logs, your web analytics, or your sales pipeline. Go grab those files. Open up your favorite LLM and start asking for code. <strong>You will be amazed at what you can build in a single weekend.</strong> Have fun vibe coding, and let&#8217;s get to work!</p>]]></content:encoded></item></channel></rss>