<?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[bhaSuri]]></title><description><![CDATA[From vibe coding to agentic engineering. Building in public, researching the practice]]></description><link>https://www.bhasuri.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!N5Vk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a52c8b3-27bb-4a7f-8551-96b1d39c36c0_256x256.png</url><title>bhaSuri</title><link>https://www.bhasuri.dev</link></image><generator>Substack</generator><lastBuildDate>Mon, 04 May 2026 08:52:46 GMT</lastBuildDate><atom:link href="https://www.bhasuri.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Bharat Suri]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[bhasuri@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[bhasuri@substack.com]]></itunes:email><itunes:name><![CDATA[Bharat Suri]]></itunes:name></itunes:owner><itunes:author><![CDATA[Bharat Suri]]></itunes:author><googleplay:owner><![CDATA[bhasuri@substack.com]]></googleplay:owner><googleplay:email><![CDATA[bhasuri@substack.com]]></googleplay:email><googleplay:author><![CDATA[Bharat Suri]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Turning Routines Into Skills]]></title><description><![CDATA[From prompt macros to /brainstorm, and the difference between storing knowledge and encoding behavior]]></description><link>https://www.bhasuri.dev/p/turning-routines-into-skills</link><guid isPermaLink="false">https://www.bhasuri.dev/p/turning-routines-into-skills</guid><dc:creator><![CDATA[Bharat Suri]]></dc:creator><pubDate>Wed, 08 Apr 2026 17:38:18 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/acedb331-6889-4761-84ee-ec62846273c5_600x315.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.bhasuri.dev/p/a-five-part-system-for-building-real">Five files. Five questions. A CLAUDE.md that ties them together.</a> The setup works. Claude picks up where you left off, every session, for every project.</p><p>But you&#8217;re still the one holding it all together. <br>&#8220;Read the specs first.&#8221; <br>&#8220;Update status when we&#8217;re done.&#8221; <br>&#8220;Check the pipeline.&#8221; <br>&#8220;Commit the changes.&#8221; </p><p>Every time you add something new to the system (a new file, a new convention, a new check), that&#8217;s one more thing to remember to tell the LLM at the beginning of a session.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> </p><p><strong>The files hold the knowledge. But they don&#8217;t carry the session forward on their own.</strong> </p><p>That&#8217;s what <strong>skills</strong> are for.</p><div><hr></div><h3>Shortcuts</h3><p>One thing that made a real difference early on, before models that code, was codifying instructions I found myself repeating. <a href="https://x.com/goodalexander/">goodalexander</a> called these &#8220;prompt macros.&#8221;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>One of the first ones I used: OPTIMIZE. </p><p>The problem it solves: you braindump a flurry of thoughts into a chat, knowing well the model would give you a much better response if your request were cleaner, more structured. But you don&#8217;t want to rewrite it. So instead, you prepend your prompt with &#8220;OPTIMIZE,&#8221; and the model restructures your prompt into something precise, then answers <em>that</em>.</p><p>But how does it know what OPTIMIZE means? <strong>You define it</strong>. </p><p>Here&#8217;s the definition, abridged from the one I actually use:</p><blockquote><p><strong>OPTIMIZE</strong>: Analyze the prompt that follows for ambiguities and missing context. Rewrite it as a detailed, actionable specification: add defaults, specify output format, include operational requirements. Then execute the refined version.</p></blockquote><p>You save this somewhere the model can access it. Claude has personal preferences and project instructions; ChatGPT has custom instructions. Or just tell it in a chat: &#8220;remember this definition for OPTIMIZE.&#8221; Most LLMs now have memory that persists across conversations, even if it&#8217;s not always the most reliable.</p><p>If you have never tried a version of this, throw something messy at a chatbot and type OPTIMIZE before it.</p><p>Or try VARIANTS, to get structurally distinct alternatives instead of slight variations. And PUSHBACK, to force the model to disagree with you (an anti-sycophancy protocol). Ask your favourite model to help you define these macros, and to commit them to memory. Then use them.</p><p>I built a much larger set over time.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> And once you get the idea, you may have Claude itself suggest and create macros for how <em>you</em> work. </p><div><hr></div><h3>From macros to skills</h3><p>Anthropic&#8217;s Thariq Shihipar put it neatly: &#8220;Using Skills well is a skill issue.&#8221;  His concern is the craft of it &#8212; how to write ones that actually work.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a></p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://x.com/trq212/status/2033958799615398346&quot;,&quot;full_text&quot;:&quot;Using Skills well is a skill issue. \n\nI didn't quite realize how much until I wrote this, the best can completely transform how your team works.&quot;,&quot;username&quot;:&quot;trq212&quot;,&quot;name&quot;:&quot;Thariq&quot;,&quot;profile_image_url&quot;:&quot;https://pbs.substack.com/profile_images/1976939058741039104/r3GgzqRh_normal.jpg&quot;,&quot;date&quot;:&quot;2026-03-17T17:29:01.000Z&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{&quot;full_text&quot;:&quot;&quot;,&quot;username&quot;:&quot;trq212&quot;,&quot;name&quot;:&quot;Thariq&quot;,&quot;profile_image_url&quot;:&quot;https://pbs.substack.com/profile_images/1976939058741039104/r3GgzqRh_normal.jpg&quot;},&quot;reply_count&quot;:91,&quot;retweet_count&quot;:242,&quot;like_count&quot;:3825,&quot;impression_count&quot;:690699,&quot;expanded_url&quot;:null,&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>But the craft isn&#8217;t the bottleneck. There&#8217;s myriad freely available skills you can adopt and add to your system wholesale. <strong>The real skill issue is</strong> <strong>recognizing the repeated moves in your own workflow that deserve codification.</strong></p><p>I find it useful to think of skills as shortcuts that Claude Code (or Codex) knows to read.</p><p>Claude Code has a dedicated place for them: a <code>.claude/skills/</code> directory. Each skill is a markdown file. Not a plugin. Not a script. Just structured instructions in plain language that Claude follows when you type a slash command &#8212; <code>/log</code>, <code>/end</code>, <code>/brainstorm</code>.</p><pre><code><code>.claude/
    skills/
        brainstorm/
            SKILL.md
        start/
            SKILL.md
        end/
            SKILL.md</code></code></pre><p>The idea is the same as macros. PUSHBACK the macro became <code>/pushback</code> the skill. VARIANTS became <code>/variants</code>. </p><p>The instructions look similar. The reach is different. A skill can read your project files, check past decisions, produce structured output, update your specs. A macro can&#8217;t do any of that &#8212; it only shapes how the model responds within a single conversation.</p><p>If you wrote a macro, you can write a skill. Same thinking, different reach.</p><div><hr></div><h3>The first routine worth encoding</h3><p>The first thing I wanted off my plate was <strong>session continuity</strong>.</p><p>That only works if someone reliably reads the right files at the start and updates them at the end. <code>/start</code> and <code>/end</code> turn that from a repeated instruction into a routine.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gvyi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gvyi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png 424w, https://substackcdn.com/image/fetch/$s_!Gvyi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png 848w, https://substackcdn.com/image/fetch/$s_!Gvyi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png 1272w, https://substackcdn.com/image/fetch/$s_!Gvyi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gvyi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png" width="731" height="519" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:519,&quot;width&quot;:731,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48344,&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.bhasuri.dev/i/193586316?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.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_!Gvyi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png 424w, https://substackcdn.com/image/fetch/$s_!Gvyi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png 848w, https://substackcdn.com/image/fetch/$s_!Gvyi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png 1272w, https://substackcdn.com/image/fetch/$s_!Gvyi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67890987-fb07-42c0-85e3-6e9fd5a2f9b8_731x519.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><code>/start</code> reads your spec files, detects what you&#8217;re here to do from your opening message, and surfaces relevant context.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m1Ko!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m1Ko!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png 424w, https://substackcdn.com/image/fetch/$s_!m1Ko!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png 848w, https://substackcdn.com/image/fetch/$s_!m1Ko!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png 1272w, https://substackcdn.com/image/fetch/$s_!m1Ko!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m1Ko!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png" width="664" height="943" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:943,&quot;width&quot;:664,&quot;resizeWidth&quot;:664,&quot;bytes&quot;:69766,&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.bhasuri.dev/i/193586316?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m1Ko!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png 424w, https://substackcdn.com/image/fetch/$s_!m1Ko!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png 848w, https://substackcdn.com/image/fetch/$s_!m1Ko!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png 1272w, https://substackcdn.com/image/fetch/$s_!m1Ko!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d6e0de0-6e13-4f86-b871-16df2daccdc6_664x943.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p> <code>/end</code> updates status.md and pipeline.md so the next session doesn&#8217;t begin cold.</p><p>Now you know what&#8217;s inside: a markdown file in <code>.claude/skills/</code> that Claude reads when you type the name. The routine you used to perform manually, encoded once, done.</p><p> That alone is useful. But <code>/start</code> and <code>/end</code> are automation &#8212; they handle what you&#8217;d do anyway, just reliably. <br><br><strong>Some skills change the work itself.</strong></p><div><hr></div><h3>Before the first line of code</h3><p><a href="link-to-post-d">Two Files</a> described how I begin projects by asking Claude to grill me on what I intend to build, saving the results of that discussion as design.md.</p><p>Over time this grew into a structured interview template.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> Here&#8217;s what it looks like:</p><ol><li><p><strong>The Idea</strong> &#8212; What are you building? What triggered this? Walk me through using it step by step.</p></li><li><p><strong>Context Check</strong> &#8212; Does this overlap with something you already have? Who uses it? Where does it fit?</p></li><li><p><strong>Scope Boundaries</strong> &#8212; What&#8217;s the minimum version that&#8217;s useful? What are you explicitly <em>not</em> building? <code>/pushback</code> on &#8220;it should also...&#8221;</p></li><li><p><strong>Technical Constraints</strong> &#8212; What does it integrate with? Any hard limitations?</p></li><li><p><strong>Success Criteria</strong> &#8212; How will you know it&#8217;s done enough to use?</p></li><li><p><strong>Synthesis</strong> &#8212; Reflect back, surface tensions, propose boundaries, draft the spec files.</p></li></ol><p>You can use this today. Paste it into any LLM and run the interview yourself. You&#8217;ll get a better design.md than if you&#8217;d just said &#8220;help me plan my project.&#8221;</p><p>I folded this template into a skill called <code>/brainstorm</code>.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a> Now I type one word and Claude runs the full interview &#8212; checks my existing projects for overlaps, grills me on scope, pushes back when I&#8217;m cramming two features into one, and produces a design.md at the end.</p><p><strong>Same template. One word.</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_!iTWg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iTWg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png 424w, https://substackcdn.com/image/fetch/$s_!iTWg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png 848w, https://substackcdn.com/image/fetch/$s_!iTWg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!iTWg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iTWg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png" width="658" height="1260" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1260,&quot;width&quot;:658,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84652,&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.bhasuri.dev/i/193586316?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.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_!iTWg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png 424w, https://substackcdn.com/image/fetch/$s_!iTWg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png 848w, https://substackcdn.com/image/fetch/$s_!iTWg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!iTWg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60e79f7f-b0b7-488d-9527-7308586f2f33_658x1260.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And it works for more than kickoffs. Mid-project, when I&#8217;m thinking about a new feature, <code>/brainstorm</code> runs the same interview adapted to what already exists. It reads the codebase, assesses impact, tells me if the feature is more invasive than I think.</p><div><hr></div><h3>The wider pattern</h3><p><code>/brainstorm</code> is one skill that shapes the work. There are others. </p><p><code>/architect</code> turns a brief into a design document with architecture decisions and tradeoffs. <br><code>/review</code> audits code for quality and security before I ship. <br><code>/variants</code> generates structurally distinct alternatives when I&#8217;m stuck between approaches. <br><code>/pushback</code> forces Claude to find flaws in a plan before I commit to it.</p><p>The one I find myself reaching for most lately is <code>/study</code> &#8212; a structured way to absorb what everyone else is building and fold the patterns into my own system. That one deserves its own post.</p><p><strong>Encode the move once. Stop restating it every session.</strong></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p> This only grows. Once you start tracking decisions, managing a pipeline, committing code, syncing backups, the end-of-session checklist gets long. Forgetting one item (updating pipeline but not status, or committing but not syncing) means the next session starts with stale context. This is exactly the kind of routine that should be automated.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p> goodalexander&#8217;s <a href="https://x.com/goodalexander/status/1912975507714351541">11 AI Prompting Heuristics</a> were the seed for much of this thinking. His &#8220;Disagreeable Model&#8221; heuristic became my PUSHBACK macro, which became the <code>/pushback</code> skill.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p> I&#8217;m publishing a small <a href="https://github.com/bharat2288/dev-setup">starter set</a> in <code>dev-setup</code>, with one file per macro: <code>optimize.md</code>, <code>steps.md</code>, <code>variants.md</code>, <code>pushback.md</code>, and <code>snapshot.md</code>. The internal set is larger.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Anthropic&#8217;s team has written about building skills at scale. Thariq&#8217;s <a href="https://x.com/trq212/status/2033949937936085378">lessons from hundreds of production skills</a> describes categories, progressive disclosure patterns, and the principle that good skills give goals, not step-by-step procedures. <a href="https://code.claude.com/docs/en/skills">Anthropic&#8217;s official skills guide</a> covers the mechanics.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>The template is available in the <a href="https://github.com/bharat2288/dev-setup">starter set</a> at <code>.claude/skills/brainstorm/references/kickoff-flow.md</code>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>The public version of this flow is packaged in the <code>dev-setup </code>repo I shared above: trimmed versions of <code>/start</code>, <code>/end</code>, and <code>/brainstorm</code>, among other things.</p></div></div>]]></content:encoded></item><item><title><![CDATA[A Five-Part System for Building Real Stuff with AI]]></title><description><![CDATA[Your two files will get crowded. Here's what to add, when to add it, and the one file your LLM already knows how to read.]]></description><link>https://www.bhasuri.dev/p/a-five-part-system-for-building-real</link><guid isPermaLink="false">https://www.bhasuri.dev/p/a-five-part-system-for-building-real</guid><dc:creator><![CDATA[Bharat Suri]]></dc:creator><pubDate>Sun, 22 Mar 2026 12:29:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d69aa8f8-b26c-4710-8e96-f5be815f60d7_600x315.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you followed the <a href="https://www.bhasuri.dev/p/two-files-that-changed-how-i-build">last post</a> and you&#8217;re building something real, you have a specs folder with two files.</p><p><code>design.md</code> &#8212; what you&#8217;re building.<br><code>status.md</code> &#8212; where you are right now.</p><p>You tell Claude to read them at the start of each session. It picks up where you left off. It works.</p><p>Until it doesn&#8217;t.</p><div><hr></div><p>A couple of days into building <a href="https://github.com/bharat2288/fin">fin</a>, status.md had become a dumping ground. Feature ideas. Bugs I&#8217;d noticed. Half-formed thoughts about how subscriptions should work. Things I was dreaming up mixed in with things that actually existed.</p><p>Status was supposed to be <em>what is</em>. Now half of it was &#8220;what is&#8221; and half &#8220;what if.&#8221; And the more threads I opened in a single session, the messier Claude&#8217;s responses got. Not necessarily wrong. Just less focused. Less useful.</p><p>Here&#8217;s what I noticed: better organize what the model reads, and what it does becomes markedly more predictable. This idea is called <em>separation of concerns</em>.</p><p>Each file should answer exactly one question.</p><p><strong>When a file starts answering two questions, split it.</strong></p><div><hr></div><h3>pipeline.md &#8212; &#8220;What&#8217;s next?&#8221;</h3><p>The first concern worth separating: <strong>your</strong> <strong>developmental queue</strong>.</p><p>Feature ideas. Deferred work. Bugs you noticed but don&#8217;t want to fix right now. Things that aren&#8217;t the current state of the project &#8212; they&#8217;re the future state. They don&#8217;t belong in status.</p><p><strong>pipeline.md</strong> separates what&#8217;s next from what exists.</p><pre><code><code>specs/
    design.md      &#8592; what are we building?
    status.md      &#8592; where are we right now?
    pipeline.md    &#8592; what&#8217;s next?</code></code></pre><p>It doesn&#8217;t need to be fancy. A list works:</p><ul><li><p>&#8220;Dashboard chart overhaul &#8212; start with multi-select.&#8221;</p></li><li><p>&#8220;Subscription alerts &#8212; not enough pain yet, revisit later.&#8221;</p></li></ul><p>Tell Claude to read it alongside your other spec files at the the start of a session, and to &#8220;add this to the pipeline&#8221; or &#8220;queue this up&#8221; mid-session. It knows your priorities without your explaining them. It&#8217;ll slot it in and prioritize the list for you.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</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_!Uat3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Uat3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png 424w, https://substackcdn.com/image/fetch/$s_!Uat3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png 848w, https://substackcdn.com/image/fetch/$s_!Uat3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png 1272w, https://substackcdn.com/image/fetch/$s_!Uat3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Uat3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png" width="623" height="1029" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1029,&quot;width&quot;:623,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:71796,&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.bhasuri.dev/i/191734873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.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_!Uat3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png 424w, https://substackcdn.com/image/fetch/$s_!Uat3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png 848w, https://substackcdn.com/image/fetch/$s_!Uat3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png 1272w, https://substackcdn.com/image/fetch/$s_!Uat3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ed95ad-8600-456e-a665-274ae8571af7_623x1029.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Status then goes back to doing one thing: the current state &#8212; what exists right now and what happened in your most recent sessions.</p><div><hr></div><h3>decisions.md &#8212; &#8220;Why this and not that?&#8221;</h3><p>Some decisions are obvious from the code. You used Flask, not FastAPI. Anyone can see that.</p><p>But some decisions are invisible. The reasoning lived in a conversation, and when that conversation is gone, so is the reasoning.</p><p>I wanted my subscriptions in fin &#8212; Netflix, Spotify, ChatGPT &#8212; linked to actual bank transactions. Not static rows. Live data: when did I last pay, how much.</p><p>Claude and I worked through several matching approaches. We picked one. It worked.</p><p>A few days later, new session. Claude suggests a completely different approach &#8212; one we&#8217;d already considered and rejected.</p><p><strong>decisions.md</strong> is where that reasoning lives. <strong>A running log of choices</strong> that were contentious or consequential &#8212; the ones where you weighed alternatives and chose for reasons that aren&#8217;t obvious from the code.</p><p>Not every choice. Just the ones where forgetting would cause confusion. The test: <em>would Claude relitigate this if it didn&#8217;t know?</em></p><p>Over time, decisions.md becomes a developmental journal. You can trace the evolution of your project through the choices you made and why.</p><p>Status tracks session-by-session progress. Decisions tracks how the shape emerged. Design still holds the original vision &#8212; and the gap between design and reality is also telling.</p><p>If you&#8217;re building with someone else, decisions is even more valuable; a new collaborator can read the rationale without asking you to re-explain every choice.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</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_!WntA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WntA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png 424w, https://substackcdn.com/image/fetch/$s_!WntA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png 848w, https://substackcdn.com/image/fetch/$s_!WntA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png 1272w, https://substackcdn.com/image/fetch/$s_!WntA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WntA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png" width="603" height="873" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:873,&quot;width&quot;:603,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52426,&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.bhasuri.dev/i/191734873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.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_!WntA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png 424w, https://substackcdn.com/image/fetch/$s_!WntA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png 848w, https://substackcdn.com/image/fetch/$s_!WntA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png 1272w, https://substackcdn.com/image/fetch/$s_!WntA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a379ec0-57b5-4fff-8738-b132c52b3ed5_603x873.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The format is simple &#8212; you can use mine or ask Claude to suggest a structure that works for you:</p><ul><li><p><strong>Context</strong> &#8212; why this decision came up</p></li><li><p><strong>Options</strong> &#8212; what you considered</p></li><li><p><strong>Decision</strong> &#8212; what you chose</p></li><li><p><strong>Why it matters</strong> &#8212; what a future session needs to know</p></li></ul><pre><code><code>specs/
    design.md      &#8592; what are we building?
    status.md      &#8592; where are we right now?
    pipeline.md    &#8592; what&#8217;s next?
    decisions.md   &#8592; why this and not that?</code></code></pre><p><strong>Four files. Each answering one question.</strong></p><div><hr></div><h3>CLAUDE.md &#8212; &#8220;How does this all work?&#8221;</h3><p>You now have four spec files. But Claude doesn&#8217;t automatically know they exist. Every session, you&#8217;d need to say: &#8220;Read the specs folder. There&#8217;s a pipeline file now. And a decisions file.&#8221;</p><p><strong>CLAUDE.md</strong> is a markdown file at your project root that Claude Code reads automatically at the start of every session.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> You don&#8217;t ask. It just does. Anthropic calls it a project <em>constitution</em> &#8212; a persistent set of instructions the model loads before you say a word.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</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_!-IxM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-IxM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png 424w, https://substackcdn.com/image/fetch/$s_!-IxM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png 848w, https://substackcdn.com/image/fetch/$s_!-IxM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png 1272w, https://substackcdn.com/image/fetch/$s_!-IxM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-IxM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png" width="483" height="1227" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1227,&quot;width&quot;:483,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:101577,&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.bhasuri.dev/i/191734873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.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_!-IxM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png 424w, https://substackcdn.com/image/fetch/$s_!-IxM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png 848w, https://substackcdn.com/image/fetch/$s_!-IxM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png 1272w, https://substackcdn.com/image/fetch/$s_!-IxM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe1a0af-495d-4caa-9129-a1329d50b5f8_483x1227.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s where you describe your project&#8217;s layout: what lives where. The spec files you just created? CLAUDE.md is how Claude knows they exist.</p><p>It tells Claude:</p><ul><li><p>What this project is (one line)</p></li><li><p>Where to find context (your specs folder)</p></li><li><p>How to run the project (commands it can&#8217;t guess)</p></li><li><p>What to avoid (constraints that would waste time)</p></li></ul><p>Tell Claude to write it once. You revise it when the project&#8217;s structure changes.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a></p><pre><code><code>my-project/
    CLAUDE.md          &#8592; how does this all work?
    specs/
        design.md      &#8592; what are we building?
        status.md      &#8592; where are we right now?
        pipeline.md    &#8592; what&#8217;s next?
        decisions.md   &#8592; why this and not that?</code></code></pre><p><strong>Five files. Five questions. One system.</strong></p><div><hr></div><h3>Encoding the ritual(s)</h3><p>If you&#8217;re using these files, pretty soon you&#8217;ll find yourself tired of telling Claude to read design, status, pipeline, decisions before every session, and to update them at the end. This is where <em>skills</em> come in.</p><p>Claude Code lets you create reusable procedures you trigger with a slash command.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a> I start every session by typing <code>/sessionstart</code>. I end with <code>/sessionend</code>. That&#8217;s it &#8212; my shorthand for Claude to read the specs, surface what&#8217;s relevant, and update everything when we&#8217;re done.</p><p>CLAUDE.md gives Claude the map. Skills give Claude the routine. I&#8217;ll go over skills in much more detail in subsequent posts.</p><h3>A caveat</h3><p>Naval Ravikant recently said something worth sitting with:<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a></p><blockquote><p>&#8220;The only reason to use these workflows and tool sets, which are very ephemeral, and their longevity is measured in weeks, perhaps months at best, not in years, is if you&#8217;re at the bleeding edge and absolutely need every advantage.&#8221;</p></blockquote><p>His strongest version: AI will adapt to you faster than you can adapt to it. The tools will absorb the best practices. Why build infrastructure that&#8217;ll be outmoded?</p><p>He&#8217;s not wrong about the tools. Claude Code will evolve. Skills might work differently next quarter, or next week. Some of this may become built-in.</p><p><strong>But the act of structuring your process teaches you things about your own work that no tool can hand you.</strong> What belongs in status vs. pipeline? Which decisions are worth recording? Where does complexity actually live in your project? These aren&#8217;t questions a tool answers for you. They&#8217;re questions you answer by building the system &#8212; and the answers make you better at the work itself.</p><p><strong>The files aren&#8217;t just for Claude. They&#8217;re for you.</strong></p><p><em>What are we building?</em><br><em>Where are we right now?</em><br><em>What&#8217;s next?</em><br><em>Why this and not that?</em><br><em>How does this all work?</em></p><p>Five questions. Five files. Markdown. They&#8217;ll likely outlast whatever tool you&#8217;re using today.</p><p>Give it structure. The rest will follow.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>You can ask Claude to reorder your pipeline by priority anytime. It&#8217;ll present a proposed order for you to approve; you stay in control, but the sorting is handled.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p><a href="https://x.com/ashpreetbedi/status/2011220028453241218">Ashpreet Bedi</a> uses a similar pattern: architecture decision records (ADRs) that track context, options, and consequences. His full system is worth reading if you&#8217;re building at larger scale.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>CLAUDE.md is a first-party Claude Code feature. <a href="https://code.claude.com/docs/en/memory">Anthropic&#8217;s docs</a> recommend keeping it under 200 lines, focused on things the model can&#8217;t figure out by reading the code.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>You don&#8217;t need a template to draft this. Ask Claude: <em>&#8220;Read my project and help me write a CLAUDE.md &#8212; include the commands you can&#8217;t guess, the patterns that aren&#8217;t obvious from the code, and anything I&#8217;d have to re-explain every session.&#8221;</em> It&#8217;ll generate something reasonable. Refine from there.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>This is where tools like Claude Code diverge from browser-based chat. On the web, every conversation starts blank &#8212; there&#8217;s no way to persist instructions across sessions besides &#8220;project instructions.&#8221; Claude Code runs over your actual project files, and CLAUDE.md takes advantage of that. Other tools have equivalents: OpenAI&#8217;s Codex has AGENTS.md, Cursor has rules files. The concept is converging across every major tool.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>Skills are markdown files in <code>.claude/skills/</code> that Claude loads on demand. <a href="https://code.claude.com/docs/en/skills">Anthropic&#8217;s docs on skills</a>. I think of them as procedures or routines that one routinely invokes.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>Naval Ravikant&#8217;s <a href="https://www.youtube.com/watch?v=sXCKgEl9hBo&amp;t=960s">&#8220;On Artificial Intelligence&#8221;</a> makes a strong case for letting AI adapt to you rather than the other way around. I think he&#8217;s right about the tools and wrong about the discipline.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Two Files That Changed How I Build With AI]]></title><description><![CDATA[Before hooks, skills, or agents &#8212; you need a specs folder and two markdown files. Here's how I'd start if I were doing it all over again.]]></description><link>https://www.bhasuri.dev/p/two-files-that-changed-how-i-build</link><guid isPermaLink="false">https://www.bhasuri.dev/p/two-files-that-changed-how-i-build</guid><dc:creator><![CDATA[Bharat Suri]]></dc:creator><pubDate>Wed, 18 Mar 2026 08:42:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4624b7e3-81a5-43cb-a7a9-a3e5e1d4a9b5_600x315.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://x.com/naval/status/2033416520613732595&quot;,&quot;full_text&quot;:&quot;Coding an app is the new starting a podcast.&quot;,&quot;username&quot;:&quot;naval&quot;,&quot;name&quot;:&quot;Naval&quot;,&quot;profile_image_url&quot;:&quot;https://pbs.substack.com/profile_images/1256841238298292232/ycqwaMI2_normal.jpg&quot;,&quot;date&quot;:&quot;2026-03-16T05:34:12.000Z&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:1478,&quot;retweet_count&quot;:2334,&quot;like_count&quot;:27014,&quot;impression_count&quot;:2691436,&quot;expanded_url&quot;:null,&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>Naval has a habit of naming what everyone&#8217;s already feeling. If you&#8217;re curious about building with AI &#8212; or you&#8217;ve already started and every session feels like starting from scratch &#8212; here&#8217;s how I&#8217;d do it if I were starting all over again.</p><p><strong>Start with a real problem.</strong> Not a tutorial. Not a to-do app from a YouTube video. Something you actually need &#8212; a tracker, a dashboard, a tool for your business. The motivation matters. It&#8217;s what keeps you going when the AI gives you garbage on the third try. I built <a href="https://github.com/bharat2288/fin">fin </a>because I had zero handle on where my money was going each month. I built <a href="https://github.com/bharat2288/scholia">Scholia</a> because I didn&#8217;t want to pay Remnote for AI credits when I could pay the frontier labs directly, ha! </p><div><hr></div><h2>Getting set up</h2><p>You need two things: <strong>Claude Code</strong> and a <strong>terminal</strong>.</p><p>I know. The terminal. A Command Line Interface (CLI). That black window with text that looks like it&#8217;s from 1993. But here&#8217;s the thing &#8212; once you go terminal, you don&#8217;t go back. It&#8217;s where the real power is, and it&#8217;s how I build everything you&#8217;ll see on this Substack. </p><p>If a terminal truly isn&#8217;t for you, use <strong><a href="https://claude.com/download">Claude Desktop</a> (Cowork) </strong>instead &#8212; same AI, visual interface, works fine. I hear Codex isn't terrible either. </p><p>But try the terminal first.  On Windows, it&#8217;s called <strong>PowerShell</strong>. On Mac, it&#8217;s <strong>Terminal</strong>. If you&#8217;ve never installed a CLI tool before, ask any LLM you already use to walk you through it.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>Once Claude Code is installed:</p><p><strong>Make yourself a home base.</strong> Open File Explorer (Windows) or Finder (Mac), and create a folder where all your projects will live. I call mine <code>dev</code>. Everything I build goes here &#8212; one subfolder per project.</p><p>Inside <code>dev</code>, create a folder for your first project. Give it a name. I have one for each thing I build:</p><pre><code><code>dev/
    fin/
    scholia/
    moom/</code></code></pre><p>Each project gets its own folder. Don&#8217;t dump everything into one place. When you start something new, make a new folder.</p><p><strong>Now open your terminal, navigate to your project folder, and start Claude.</strong><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><pre><code><code>cd dev/fin
claude</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1qT-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1qT-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png 424w, https://substackcdn.com/image/fetch/$s_!1qT-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png 848w, https://substackcdn.com/image/fetch/$s_!1qT-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png 1272w, https://substackcdn.com/image/fetch/$s_!1qT-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1qT-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png" width="739" height="481" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:481,&quot;width&quot;:739,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:37732,&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.bhasuri.dev/i/191337645?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.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_!1qT-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png 424w, https://substackcdn.com/image/fetch/$s_!1qT-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png 848w, https://substackcdn.com/image/fetch/$s_!1qT-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png 1272w, https://substackcdn.com/image/fetch/$s_!1qT-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4ea08e-2cbc-4d48-93f5-6e05afe443cb_739x481.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That&#8217;s it. You&#8217;re in.</p><p>You&#8217;re now armed with the two things you need to vibe code: <strong>an idea </strong>and a <strong>coding agent.</strong> </p><p>Everything you build, every file you create, lives in the directory you just created.</p><h2>The first thing to do</h2><p>Before Claude writes a line of code for you, ask it to help you think through what you&#8217;re building.</p><p>Not vaguely. Have it <strong>grill you</strong>. What&#8217;s the problem? Who&#8217;s it for? What&#8217;s the scope? What are you <em>not</em> building? Let it push back. Let it ask the questions you haven&#8217;t thought of yet.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><p>Then ask it to save that conversation as <code>design.md</code> in a folder called <code>specs/</code>.</p><pre><code><code>my-project/
    specs/
        design.md</code></code></pre><p>You now have a design document. <strong>You didn&#8217;t write it.</strong> Claude did, from your answers.</p><p>Here&#8217;s what mine looks like for fin:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TxY-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TxY-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png 424w, https://substackcdn.com/image/fetch/$s_!TxY-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png 848w, https://substackcdn.com/image/fetch/$s_!TxY-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png 1272w, https://substackcdn.com/image/fetch/$s_!TxY-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TxY-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png" width="463" height="615" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:615,&quot;width&quot;:463,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38956,&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.bhasuri.dev/i/191337645?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.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_!TxY-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png 424w, https://substackcdn.com/image/fetch/$s_!TxY-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png 848w, https://substackcdn.com/image/fetch/$s_!TxY-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png 1272w, https://substackcdn.com/image/fetch/$s_!TxY-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497f3cef-a141-42c6-9bea-970ea0ab9202_463x615.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That&#8217;s the whole purpose, scope, and architecture &#8212; written by Claude after a 10-minute conversation where it asked me what I needed and I answered honestly.</p><h2>The second file</h2><p>After your first real working session &#8212; an hour, two hours, whenever you want to stop &#8212; ask Claude to write a status update. What happened. What&#8217;s working. What&#8217;s broken. What you should pick up next time.</p><p>Ask it to save it as <code>status.md</code>.</p><pre><code><code>my-project/
    specs/
        design.md
        status.md</code></code></pre><p>Here&#8217;s a real one from fin:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cmSw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cmSw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png 424w, https://substackcdn.com/image/fetch/$s_!cmSw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png 848w, https://substackcdn.com/image/fetch/$s_!cmSw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png 1272w, https://substackcdn.com/image/fetch/$s_!cmSw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cmSw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png" width="461" height="621" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:621,&quot;width&quot;:461,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45124,&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.bhasuri.dev/i/191337645?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.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_!cmSw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png 424w, https://substackcdn.com/image/fetch/$s_!cmSw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png 848w, https://substackcdn.com/image/fetch/$s_!cmSw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png 1272w, https://substackcdn.com/image/fetch/$s_!cmSw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f81b0f3-88bb-4a8b-bb60-a9461bf29a40_461x621.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Next time you open Claude on this project, tell it to read <code>specs/</code>. It knows what you&#8217;re building. It knows where you left off. <strong>Zero re-explanation.</strong></p><h2>A third file?</h2><p>I didn&#8217;t start with three files. I started with two.</p><p><code>pipeline.md</code> &#8212; a backlog of what&#8217;s next &#8212; showed up later, when my projects got big enough that I couldn&#8217;t keep track of what to build next in my head.</p><p>If you&#8217;re building something small, <strong>two files is enough.</strong> The system grows with you.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> Don&#8217;t over-engineer it on day one.</p><div><hr></div><h2>Why markdown</h2><p>Why not Notion? Why not a database? Why not some fancy tool?</p><p>Markdown because:</p><ul><li><p><strong>The AI reads it natively.</strong> No parsing, no API, no export step. It&#8217;s just text.</p></li><li><p><strong>You can read it in any editor.</strong> VS Code, Obsidian, Notepad, your phone. No account required.</p></li><li><p><strong>It lives in your project directory.</strong> Right next to your code. Versioned with git if you&#8217;re using it.</p></li><li><p><strong>No dependencies.</strong> No accounts, no subscriptions, no setup. Create a file, start typing.</p></li></ul><h2>A note on context windows</h2><blockquote><p>The amount of information an LLM can hold in a single conversation</p></blockquote><p>Context windows started at around 4,000 tokens (roughly 3,000  words). They&#8217;re now at 1 million tokens on the highest tiers. That&#8217;s an entire codebase (or the Lord of the Rings trilogy) in memory.</p><p>Bigger context windows are genuinely useful. They can hold more. But <strong>what</strong> to hold &#8212; that&#8217;s still on you. A million tokens of raw conversation is noise. The model can hold a ton of information, but it can&#8217;t tell what matters unless you&#8217;ve told it.</p><p>That&#8217;s what the spec files do. They&#8217;re not a workaround for small context windows. They&#8217;re the signal inside the noise. <strong>The problem was never memory capacity. It&#8217;s memory structure.</strong></p><div><hr></div><h2>Closing thoughts</h2><p>After a week of updating <code>status.md</code>, you have a development journal you didn&#8217;t intend to write.</p><p>After a month, you have a searchable history of every decision, every blocker, every pivot &#8212; across every project.</p><p>You didn&#8217;t plan this. It just happens when you give your process a place to accumulate.</p><p>You&#8217;ll also notice you&#8217;re repeating yourself: &#8220;Claude, read the specs&#8221; at the start, &#8220;Claude, update status&#8221; at the end. There&#8217;s a way to automate that. Next post.</p><p>This works with Claude Code, Cowork, Cursor, Codex &#8212; anywhere you can point an LLM at files in a folder. The tool doesn&#8217;t matter. The structure does.</p><p>Happy building!</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Open Claude, ChatGPT, whatever you have and ask &#8220;how do I install Claude Code on my Windows laptop&#8221; (or Mac, or whatever you&#8217;re on). Follow what it tells you. The setup instructions are one of the things AI is genuinely good at.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>When you run <code>claude</code> from a directory, Claude Code operates within that folder &#8212; it can read, create, and edit files there. This is how it knows what project you&#8217;re working on. Different folder = different project = different context.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>I&#8217;ve since turned this into a proper kickoff process &#8212; a structured interview that produces a design document, architecture decisions, and a project roadmap in one conversation. That&#8217;s for a later post. For now, just have the conversation.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Inspired by <a href="https://x.com/ashpreetbedi/status/2011220028453241218">Ashpreet Bedi&#8217;s post</a> on spec-first development &#8212; he uses a <code>specs/</code> folder with design docs, implementation tracking, and decision records for AI coding agents. I adapted it: simpler, fewer files, focused on session continuity. His post is worth reading.</p></div></div>]]></content:encoded></item><item><title><![CDATA[About this publication]]></title><description><![CDATA[Building with AI, studying how people learn to work with it]]></description><link>https://www.bhasuri.dev/p/bharat-suri</link><guid isPermaLink="false">https://www.bhasuri.dev/p/bharat-suri</guid><dc:creator><![CDATA[Bharat Suri]]></dc:creator><pubDate>Tue, 17 Mar 2026 03:52:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!N5Vk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a52c8b3-27bb-4a7f-8551-96b1d39c36c0_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>I&#8217;m Bharat.</strong> I recently finished a PhD at Berkeley studying how people learn to orient toward algorithmic systems &#8212; how platforms teach participation without formal instruction.</p><p>Now I&#8217;m building. Full-stack tools, AI-assisted, shipped and used. A personal finance tracker. An ERP system for my wife&#8217;s health supplements company. A research knowledge platform. All built with AI coding agents, in a language I don&#8217;t formally &#8220;know.&#8221;</p><p>The building became its own research. How do you develop a mental model of an AI system&#8217;s capabilities? How do you systematize what you learn across projects? What compounds and what doesn&#8217;t?</p><p>This Substack is where I work through that &#8212; the tools, the process, the practice of getting better at building with AI. Not tips. Not tutorials. The actual trajectory, documented as it happens.</p><p><strong>First series:</strong> how I went from re-explaining everything every session to a system that learns from my own work.</p>]]></content:encoded></item></channel></rss>