<?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[Requisite Intelligence: AI-assisted Software Development]]></title><description><![CDATA[Building software with AI: coding agents, developer tooling, and workflows that pair human engineers with generative AI.]]></description><link>https://requisiteintelligence.substack.com/s/ai-assisted-software-development</link><image><url>https://substackcdn.com/image/fetch/$s_!b-ML!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fdbdb2-8378-43b5-ae0b-a6db652cd13d_1024x1024.png</url><title>Requisite Intelligence: AI-assisted Software Development</title><link>https://requisiteintelligence.substack.com/s/ai-assisted-software-development</link></image><generator>Substack</generator><lastBuildDate>Wed, 29 Jul 2026 07:28:05 GMT</lastBuildDate><atom:link href="https://requisiteintelligence.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Gabriele Randelli]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[requisiteintelligence@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[requisiteintelligence@substack.com]]></itunes:email><itunes:name><![CDATA[Gabriele Randelli]]></itunes:name></itunes:owner><itunes:author><![CDATA[Gabriele Randelli]]></itunes:author><googleplay:owner><![CDATA[requisiteintelligence@substack.com]]></googleplay:owner><googleplay:email><![CDATA[requisiteintelligence@substack.com]]></googleplay:email><googleplay:author><![CDATA[Gabriele Randelli]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How I Engineered my Claude Code Environment ]]></title><description><![CDATA[The workbench behind minus-tracker: an efficient CLAUDE.md, a backward loop to evolve it over time, multi-agent orchestration and so much more]]></description><link>https://requisiteintelligence.substack.com/p/how-i-engineered-my-claude-code-environment</link><guid isPermaLink="false">https://requisiteintelligence.substack.com/p/how-i-engineered-my-claude-code-environment</guid><dc:creator><![CDATA[Gabriele Randelli]]></dc:creator><pubDate>Sun, 26 Jul 2026 20:14:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vJcP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>Before you build, build the workbench</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vJcP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vJcP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!vJcP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!vJcP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!vJcP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vJcP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35023,&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://requisiteintelligence.substack.com/i/208591567?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.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_!vJcP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!vJcP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!vJcP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!vJcP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ee807b-1f8c-42da-9acb-9a4433379139_1024x559.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Raise your hand if you&#8217;ve never assembled IKEA furniture. And what&#8217;s your take on those tiny Allen keys they throw in? Good that IKEA provides the tools, but they&#8217;re not the best gear for hours of driving screws, are they? I&#8217;ve experienced this firsthand and ended up buying a decent toolset.</p><p>The Claude Code environment is my professional workbench. And before I walk you through the process I used to build minus-tracker &#8212; spec-driven vibe coding, starting next episode &#8212; I want to show you the bench I built it on, because that&#8217;s where I spent most of my time, before I ever wrote a single line of <code>idea.md</code>.</p><p>I&#8217;m planning to eventually open-source a sanitized version of my environment as a GitHub repo. Feel free to copy it. But a borrowed workbench never quite fits your hand, so my recommendation is to take inspiration from mine and build your own. What actually matters in this episode isn&#8217;t the tool list &#8212; it&#8217;s understanding why each one hangs where it does, so you can tune it to your own style instead of cloning it verbatim.</p><p>Under the hood of my environment lies a process, different from the dev one, aimed at evolving the environment itself and keeping it clean.</p><h3>Why</h3><p>Why is the environment so important? To me, the following aspects should convince you, at least when addressing spec-driven vibe coding projects:</p><ul><li><p>avoiding <a href="https://towardsdatascience.com/governed-context-managing-context-rot-in-claude-code/">context rot</a> as much as possible, by loading knowledge only when you really need it and restricting it to the topic you need to address. This is, in my experience, the single most impactful factor;</p></li><li><p>avoiding re-inventing the wheel every time. I find myself adding new features to my apps every day, and over time I&#8217;ve acquired decent knowledge of the best way to execute a task (e.g. how to create an efficient plan). Building a good skillset in particular, developed with the <a href="https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf">skill-creator</a> tool, is a great way to bank this knowledge: on your next project, you won&#8217;t have to remember every single nuance;</p></li><li><p>spec-driven vibe coding and context engineering lead to a workflow divided into steps, independent and decoupled tasks to execute. A good environment configured with skills, commands and subagents is necessary to properly implement such a workflow;</p></li><li><p>the community has created a ton of skills and subagents. I&#8217;m not personally in favor of just cloning a repo with 1000 subagents or skills and passively using them. I still encourage you to build your own tools, but taking a look at the descriptions of those public repos is extremely valuable for inspiration. I personally reuse a small subset of tools published by someone else, and then build my own.</p></li></ul><p>One last but very important comment about my environment: it&#8217;s not static &#8212; it evolves over time. And to make that happen, there&#8217;s a well-defined process, because I only want to capture the truly relevant things I&#8217;ve learned from the past projects. We&#8217;re going to start by analyzing how my <code>CLAUDE.md</code> is structured, to understand what I mean by a dynamic environment.</p><h3>The most important piece: a CLAUDE.md that&#8217;s an index, not a wall of rules</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ncAB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ncAB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!ncAB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!ncAB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!ncAB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ncAB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/285bc3a7-1622-47e3-8d3b-ac8ec896607f_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;:1378086,&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://requisiteintelligence.substack.com/i/208591567?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.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_!ncAB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!ncAB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!ncAB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!ncAB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F285bc3a7-1622-47e3-8d3b-ac8ec896607f_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If I had to save exactly one tool off this bench, it would be this one.</p><p>My global <code>CLAUDE.md</code> (<code>~/.claude/CLAUDE.md</code>, loaded into every single project I work on) is deliberately short. It holds five always-on principles &#8212; simplicity first, no laziness, think before coding, surgical changes, low latency even at the expense of elegance &#8212; and little else written out in full. Sounds familiar? Well, it&#8217;s what <a href="https://github.com/karpathy">Andrej Karpathy</a> said in a post back in January 2026. I&#8217;m just copying from the Master (oops, I should probably say learning by imitation here).</p><p>Everything else isn&#8217;t in the file: it&#8217;s <strong>indexed</strong> by a table that routes to specific reference files depending on the situation:</p><ul><li><p><strong>Non-trivial task (3+ steps)</strong>: <code>brainstorming</code> &#8594; <code>writing-plans</code> &#8594; <code>executing-plans</code></p></li><li><p><strong>Bug report</strong>: <code>diagnose</code> (structured repro &#8594; instrumentation &#8594; fix)</p></li><li><p><strong>Feature development</strong>: <code>project-rules</code> + <code>tdd</code> (if the spec is solid) or <code>prototype</code> (if exploratory)</p></li><li><p><strong>Before a commit</strong>: <code>code-review</code> + <code>verify</code> + <code>security-review</code></p></li><li><p><strong>UI changes</strong>: <code>prototype</code> or <code>frontend-design</code></p></li><li><p><strong>Git commits</strong>: convention lives in <code>project-rules/references/git.md</code></p></li></ul><p>The actual rulebook (<code>project-rules</code>) is a personal skill with a <code>references/</code> folder &#8212; <code>planning.md</code>, <code>code-quality.md</code>, <code>testing.md</code>, <code>workflow.md</code>, <code>git.md</code>, <code>ui-design.md</code> &#8212; and each of those files loads <strong>only when it&#8217;s needed</strong>, not on every session. The root <code>CLAUDE.md</code> never grows unbounded, because it isn&#8217;t the thing holding the rules: it&#8217;s the map that says where to find them.</p><p>One thing worth noting: skills are automatically loaded if Claude Code infers that they are useful to fulfill the assigned task. Still, what I&#8217;ve learned from several experts is that explicitly &#8220;suggesting&#8221; the skill further increases efficiency.</p><p>The same philosophy repeats at the project level. The home-level <code>CLAUDE.md</code> contains generic principles applicable to every spec-driven vibe coding project. The project-level one is specialized to the context of that specific project.</p><h3>The backward loop: the workbench that sharpens itself</h3><p>A static index is already useful. What makes it genuinely powerful is that <strong>it doesn&#8217;t stay static</strong>.</p><p>A dedicated skill, <a href="https://github.com/nathanonn/claude-skill-build-insights-logger">build-insights-logger</a>, records lessons learned during real sessions &#8212; not theoretical hunches, but things that actually happened: a pattern that caused the same bug twice, a shortcut that worked better than expected, a wrong assumption that cost real time. My own global <code>CLAUDE.md</code> includes a &#8220;self-improvement&#8221; section reminding me to check that log on a weekly cadence and, when a recurring pattern shows up, to fold it back into <code>CLAUDE.md</code> or the reference files it indexes.</p><p>It&#8217;s a literal backward loop: sessions produce insights, insights get reviewed weekly, the review rewrites the index that will guide future sessions. The workbench isn&#8217;t something you set up once and use forever &#8212; it&#8217;s something that reorganizes itself, a bit at a time, based on what you actually built on it, not what you assumed on day one you&#8217;d need. Of everything in this episode, if I had to point you to one thing to replicate first, it&#8217;s this: don&#8217;t write your <code>CLAUDE.md</code> once and call it done. Build the mechanism that keeps it current.</p><h3>The tool pegboard: plugins and skills</h3><p>My environment has a pegboard of third-party plugins, pulled down depending on the task. The most used is <a href="https://claude.com/plugins/superpowers">superpowers</a> &#8212; it brings skills like <code>brainstorming</code>, <code>systematic-debugging</code>, and <code>subagent-driven-development</code>, and it&#8217;s designed to work <strong>alongside</strong> the project&#8217;s own command pipeline, not instead of it: the pipeline runs the actual spec-first flow (idea &#8594; PRD &#8594; test plan &#8594; impl plan &#8594; execution &#8594; verification), and <code>superpowers</code>&#8216; commands step in inside individual phases &#8212; stress-testing a plan before executing it, for instance, or debugging systematically when something breaks.</p><p>The rest of the pegboard stays hung up until it&#8217;s needed: tools for simplifying code after a refactor, for interface design, for handling Office documents or PDFs, for creating new skills, for autonomous loops on repetitive tasks, for dedicated code review, for browser automation during testing. None of these is &#8220;always on&#8221; &#8212; it&#8217;s the same indexing logic applied to tools: hung in an orderly row, pulled down only when the specific task calls for it.</p><p>If you want a data point instead of a vibe: I went back through this project&#8217;s actual session logs and counted which skills I invoked most while building minus-tracker. Here are the top 5, by raw invocation count:</p><ul><li><p><code>brainstorming</code> (<code>superpowers</code>): Explores requirements, intent, and design options before any implementation starts &#8212; mandatory before creative or feature work.</p></li><li><p><code>executing-plans</code> (<code>superpowers</code>): Runs a written implementation plan step by step, with review checkpoints along the way, often in a separate session from the one that wrote it.</p></li><li><p><code>claude-in-chrome</code> (native, not a plugin): Drives an actual Chrome browser &#8212; clicking, filling forms, screenshots, reading console/network logs &#8212; for testing and browser-based tasks.</p></li><li><p><code>writing-plans</code> (<code>superpowers</code>): Turns a spec or a set of requirements into a concrete, written implementation plan, before any code gets touched.</p></li><li><p><code>subagent-driven-development</code> (<code>superpowers</code>): Delegates independent tasks from a plan to standalone subagents, each with a clear context, executed within the same session.</p></li></ul><h3>The six commands that drive the pipeline (names only, for now)</h3><p>The private orchestration repo behind minus-tracker has six custom slash <a href="https://code.claude.com/docs/en/commands">commands</a>, one per stage of the spec-first pipeline: <code>/spec_brainstorm</code>, <code>/spec_review</code>, <code>/write_test_plan</code>, <code>/write_impl_plan</code>, <code>/do_impl_plan</code>, <code>/run_test_plan</code>. I&#8217;m naming them here purely for the workbench&#8217;s completeness &#8212; what each one actually does, and how they fit together, is next episode&#8217;s content. This specific workflow is hugely inspired by <a href="https://github.com/nathanonn/workflow-engineering-starter-kit">N</a></p><p></p><p><a href="https://github.com/nathanonn/workflow-engineering-starter-kit">athan Onn</a> (I can&#8217;t help thanking him for his great blog!) and is a pure context engineering implementation. As you will see in the next episodes, I&#8217;ve slightly revised his work, according to my needs.</p><p>The workflow is deterministic, we never change the phase order. Thereby, it would not make any sense to transform these commands into skills. Commands trigger tasks that are accomplished by delegating to subagents or by loading skills. This concept is important to understand how each piece fit in the puzzle.</p><h3>Parallelize everything: subagents, agent view, and workflows</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VQZV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VQZV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!VQZV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!VQZV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!VQZV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VQZV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/900b024d-acd8-4e7c-8603-79b365f8c6db_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;:1478804,&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://requisiteintelligence.substack.com/i/208591567?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.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_!VQZV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!VQZV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!VQZV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!VQZV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900b024d-acd8-4e7c-8603-79b365f8c6db_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One principle from my CLAUDE.md I haven&#8217;t mentioned yet: parallelize as much as possible. It didn&#8217;t make the five headline principles &#8212; it lives one level down, in the <code>workflow.md</code> reference file inside <code>project-rules</code>, the same skill already indexed by the routing table earlier in this piece. Which is, again, the whole point of an index: the rule is there, it just isn&#8217;t cluttering the top.</p><p>The reasoning behind it is simple. A single conversation has one context window, and every search result, log, or file I read into it is space I can&#8217;t spend on the actual problem. <a href="https://code.claude.com/docs/en/sub-agents">Subagents</a> are the first lever &#8212; workers Claude spawns inside the same session to handle a side task in their own context and report back only a summary. Pulling real numbers from this project&#8217;s session logs, my most-used subagent type by a wide margin is <code>Explore</code> (38 invocations, read-only codebase search, so I don&#8217;t pollute my own context with the search itself), followed by <code>general-purpose</code> (17, for heavier multi-step delegation) and <code>Plan</code> (5, when I want an architecture proposal weighed before committing to one).</p><p>Subagents cover a lot, but not everything. When I have several genuinely independent things going and want to hand them off instead of babysitting one conversation, I reach for <a href="https://code.claude.com/docs/en/agent-view">agent view</a> &#8212; one screen, opened with <code>claude agents</code>, that dispatches and monitors background sessions so I can check status at a glance and step in only when one actually needs me. And when a job is too large to coordinate turn by turn &#8212; a codebase-wide audit, a big migration, research that needs cross-checking &#8212; <a href="https://code.claude.com/docs/en/workflows">dynamic workflows</a> move the plan itself into a script: Claude writes it, a runtime runs it in the background, and I get one synthesized result instead of a turn-by-turn transcript. My own CLAUDE.md is deliberately conservative about that last one: never launch a workflow unprompted, always propose it explicitly with a rough cost estimate first, and wait for the go-ahead. More hands on the bench is only worth it when I actually need them.</p><h3>Small ergonomics: hooks and permissions</h3><p>A few minor details round out the bench. A <a href="https://code.claude.com/docs/en/hooks">hook</a> runs every file edit through <code>prettier</code> automatically, so I never end a session cleaning up inconsistent formatting; another plays a short sound when Claude finishes a turn, so I can step away during a long task without checking every thirty seconds. I also lean on <a href="https://code.claude.com/docs/en/remote-control">remote control</a> to hand a running session off to my phone when I need to step away mid-task but still want to check progress or approve a step.</p><p>Trust follows the same logic. The project&#8217;s <code>.claude/settings.local.json</code> isn&#8217;t &#8220;allow everything&#8221; granted up front &#8212; it&#8217;s an allowlist grown incrementally, pattern by pattern (<code>Bash(npm test *)</code>, <code>Bash(git diff *)</code>, <code>WebFetch(domain:github.com)</code>), never a blanket &#8220;allow all shell commands.&#8221; A broader, global <a href="https://code.claude.com/docs/en/sandbox-environments">sandbox</a> configuration backs it up, constraining filesystem and network access even before a specific permission is granted. Trust grows with evidence, not before.</p><h3>Build your own workbench</h3><p>A good craftsman doesn&#8217;t spend most of their time on the material &#8212; they spend it on the bench, before ever touching it. This episode isn&#8217;t the complete list of every single tool I own &#8212; it&#8217;s the logic behind how I chose and organized them: an index instead of a wall of text, a loop that rewrites it on its own instead of a static file, permissions earned instead of granted in bulk. Copy them verbatim to get started if you want, but the point isn&#8217;t replicating my exact bench &#8212; it&#8217;s understanding why it&#8217;s built this way, and tuning it to your own style.</p><p>Rome wasn&#8217;t built in a day. It took me three months to fully set up everything I described here, and it keeps evolving. My last hint: learn by doing. Start with a basic environment setup, maybe with just one or two of the features mentioned above. Build your first project. You&#8217;ll have plenty of time to upgrade your config, no worries!</p><p>Next episode goes into the actual pipeline: how a 15-part spec translates Italian tax law into requirements an agent can implement without inventing anything along the way. Subscribe if you want the rest of it.</p><p></p>]]></content:encoded></item><item><title><![CDATA[The Broker Statement My Accountant Had Never Seen]]></title><description><![CDATA[How I adopted spec-driven vibe coding to build a tax engine in three and a half weeks]]></description><link>https://requisiteintelligence.substack.com/p/the-broker-statement-my-accountant</link><guid isPermaLink="false">https://requisiteintelligence.substack.com/p/the-broker-statement-my-accountant</guid><dc:creator><![CDATA[Gabriele Randelli]]></dc:creator><pubDate>Sun, 19 Jul 2026 09:37:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7RuK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>The statement my accountant had never seen</h3><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7RuK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7RuK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!7RuK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!7RuK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!7RuK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7RuK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:849188,&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://requisiteintelligence.substack.com/i/207636583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.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_!7RuK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!7RuK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!7RuK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!7RuK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F611c97f9-295b-4281-bc90-f01ab53f8cc6_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I still remember my accountant&#8217;s face the first time I handed him a brokerage statement &#8212; in English, every line item in dollars, from a US broker he&#8217;d never heard of. He flipped through it twice, looked up, and asked me for one more week to go through it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://requisiteintelligence.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Requisite Intelligence is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</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>That statement existed because of restricted stock units. I&#8217;d worked at Hewlett-Packard Enterprise, then moved to Google, and RSUs had been quietly vesting into a US brokerage account the whole time &#8212; grants nobody ever asked me to think about, because that&#8217;s the point of RSUs: you get equity, you wait, it shows up. I wasn&#8217;t interested in personal finance back then. I just let it sit.</p><p>That changed in 2023. I started reading &#8212; books, Italian finance writers (<a href="https://www.youtube.com/@thebull_finance">The Bull</a>, <a href="https://www.youtube.com/@mr_rip">Mr. RIP</a>, <a href="https://www.youtube.com/@PaoloColetti">Paolo Coletti</a>, <a href="https://www.youtube.com/@PietroMichelangeli">Pietro Michelangeli</a>, if you want good sources), the whole rabbit hole &#8212; and one of the first things I did with that new knowledge was sell most of the RSUs and diversify into plain, boring, cap-weighted ETFs. Sensible. Except a US broker account isn&#8217;t an Italian <em>Regime Amministrato</em> account, where the bank withholds and reports gains for you automatically. Mine falls under <em>Regime Dichiarativo</em>: I calculate, I declare, I&#8217;m the one on the hook if I get it wrong. My accountant&#8217;s hesitation wasn&#8217;t a personal failing &#8212; foreign multi-currency brokers under Regime Dichiarativo are a genuine niche inside Italian tax prep, and niche means nobody&#8217;s built decent tooling for it. Which meant it was on me.</p><p>So I learned Quadro RT, RM, RW &#8212; the forms, and the specific arithmetic Italian law actually requires, most of which no general-purpose brokerage tool respects:</p><ul><li><p><strong>LIFO, not FIFO</strong> &#8212; the last lot bought is the first one sold, by law, regardless of what your broker&#8217;s own report defaults to.</p></li><li><p><strong>The ECB reference rate on the exact trade date</strong> (&#177;3 business days) &#8212; not a monthly average, not &#8220;today&#8217;s rate.&#8221;</p></li><li><p><strong>Two tax buckets that can&#8217;t touch each other</strong> &#8212; ETF gains (Art. 44 TUIR) and stock gains/losses (Art. 67 TUIR) are calculated and reported separately; a stock loss can&#8217;t offset an ETF gain.</p></li></ul><p>By 2025 I could fill in RT/RM/RW by hand, from a spreadsheet, in an afternoon. It wasn&#8217;t a good use of an afternoon &#8212; and it&#8217;s also roughly when I started paying real attention to vibe coding.</p><h3>Personal finance was the excuse, not the point</h3><p>I founded a startup in 2012. I&#8217;ve been a builder for a long time, with a stubbornly pragmatic streak &#8212; when something new shows up, I want my hands on it, not just an opinion about it. When the whole vibe-coding trend broke out, I wanted in, past the headlines, actually building something.</p><p>Here&#8217;s the part I didn&#8217;t expect going in: personal finance wasn&#8217;t the reason I started this project. It was the vehicle. Getting genuinely good at vibe coding was the actual goal, and I needed a subject I already loved enough to stay obsessed with for months, not weeks &#8212; because that&#8217;s roughly how long a real side project takes before it&#8217;s real. It could have been almost anything. I picked the thing I&#8217;d already spent two years reading books and following Italian finance writers about, because obsession is the only fuel that survives week six.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rzFR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rzFR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!rzFR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!rzFR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!rzFR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rzFR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:925280,&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://requisiteintelligence.substack.com/i/207636583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.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_!rzFR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!rzFR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!rzFR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!rzFR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f77b93-fe5f-4fc5-a57d-630857fc93db_1024x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That project has a name: <strong>minus-tracker</strong> &#8212; a CLI that turns a DEGIRO export into LIFO-matched, ECB-converted, correctly-bucketed capital gains, ready for Quadro RT/RM. Source is on <a href="https://github.com/gabrielerandelli/minus-tracker">GitHub</a>; the package itself is on <a href="https://www.npmjs.com/package/@gabrielerandelli/minus-tracker">npm</a>.</p><p>This is what this series is about: reporting the evolution of my journey into spec-driven vibe coding and context engineering. The adopted workflow, the skills, the subagents, the environment setup, everything that can be useful if you want to go down a similar path, with one important call out before starting: studying is important, but in the end you need to start building from day 0.</p><h3>It takes a (fool-proof) workflow to remain sane</h3><p>I don&#8217;t have one clean story about the moment doubt kicked in &#8212; if I&#8217;m honest, there wasn&#8217;t a single night or a single bug I can point to. What there was, instead, was a slow accumulation: weeks of prompting without a plan, watching Claude Code produce code that ran fine in isolation and fought everything around it &#8212; a new file for every new idea instead of extending what already existed, logic quietly duplicated in two or three places because nothing forced it to reuse what it had already built. No single moment stung. It was death by a thousand small rewrites, and it took me longer than I&#8217;d like to admit to notice the pattern instead of just patching around it each time.</p><p>I went looking for a better process, and what actually clicked for me was Nathan Onn&#8217;s writing (<a href="https://www.nathanonn.com/">nathanonn</a>.com) on structured, spec-driven ways of working with coding agents &#8212; worth a read if you&#8217;re hitting the same wall. What I built from that, over the following weeks, was a six-stage pipeline that treats writing software the way I&#8217;d treat filling out a tax form: get the requirements exactly right before you touch a single number.</p><p><strong>idea.md &amp; PRD.md</strong> &#8212; Requirements pinned down to the letter, before a single line of code.</p><p><strong>test_plan.md &amp; impl_plan.md</strong> &#8212; The map, drawn before the code.</p><p><strong>execute</strong> &#8212; One focused sub-agent per task, grouped into dependency waves (~18% context used per task).</p><p><strong>verify</strong> &#8212; One sub-agent at a time, up to 3 automatic fix cycles per failing test.</p><p>The execution step changed things the most. Every task runs in its own sub-agent, with a clean context &#8212; it never has to &#8220;remember&#8221; the whole project, just its one task and the interfaces it has to respect. Per my own setup notes, that&#8217;s roughly a third of what a single agent burns trying to hold the entire project in its head (~56%). Narrower context, fewer contradictions between pieces, and when something breaks I know exactly which task touched it.</p><h3>The bar wasn&#8217;t &#8220;it runs&#8221; &#8212; it was &#8220;it&#8217;s legally correct&#8221;</h3><p>Getting the code to execute was never the hard requirement. Getting it right under Italian law was. Every calculation rule &#8212; LIFO matching, the four-year loss-carryforward window, the split between the two tax buckets &#8212; is validated against the Agenzia delle Entrate&#8217;s own FAQ scenarios, not against expectations I wrote myself based on how I assumed the law worked. Twelve of those scenarios map one-to-one to official FAQ examples, accounting for 61 of the suite&#8217;s 506 test cases. One of them, worked in full:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">        Units   Price/unit   Date         Fees
BUY     10      &#8364;100.00      2024-01-02   &#8364;2.00
SELL    10      &#8364;150.00      2024-06-03   &#8364;2.00</code></pre></div><p>Result: a taxable gain of <strong>&#8364;496.00</strong>, fees allocated per lot, down to the cent &#8212; not an approximation.</p><p>That kind of precision didn&#8217;t show up in one sitting. It came together in stages, each version doing one thing. Grounding the software behavior to legal documentation and dedicating a significant amount of time to create a simulation environment to test it out alongside the software itself is, to me, mandatory to ensure vibe-coding is not producing crappy software.</p><h3>Three and a half weeks, four versions</h3><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Version   Shipped        What it added
v0.5.0    Jun 16, 2026   Core: DEGIRO parser, LIFO/FIFO calculator, multi-currency via ECB rates, CLI
v0.6.0    Jun 29, 2026   Two-bucket tax classification, OpenFIGI lookup, 4-year carryforward
v0.7.0    Jul 3, 2026    Modello Redditi PF export (Quadro RT/RM)
v0.8.0    Jul 5, 2026    Stateless classification mode + minus-tracker-mcp server, for AI agents</code></pre></div><p>Three and a half weeks, June 13 to July 5, from an empty repository to a package on npm with 506 passing tests. It&#8217;s public today, MIT-licensed, zero runtime dependencies in the core library.</p><p>It wasn&#8217;t flawless. A few hours after v0.8.0 shipped, I turned the same adversarial instinct I&#8217;d used to build the thing loose on the finished product &#8212; and it found seven real bugs, one of them with actual tax consequences if you&#8217;d hit it on the wrong trade. Full repro, root cause, and the same-day fix are Episode 8. For now: it happened, it got fixed before the day was over, and I&#8217;ll walk through exactly how later in the series.</p><h3>What I&#8217;d actually like from you</h3><p>I don&#8217;t think minus-tracker&#8217;s ceiling is &#8220;a CLI that fills in Quadro RT.&#8221; It&#8217;s the first capstone in what I&#8217;d like to grow into a broader personal finance toolkit &#8212; no promises on scope or timeline on that front. What exists right now is real, free, and on npm, and I&#8217;d genuinely like people to run it against their own portfolio and tell me what breaks:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">npx @gabrielerandelli/minus-tracker
</code></pre></div><p>Your trades and results never leave your machine &#8212; the one optional network call sends ISIN codes, not amounts or account details, to classify instrument types, and even that&#8217;s skippable with --offline.</p><p>It&#8217;s a calculation aid, not tax advice &#8212; mine or the tool&#8217;s &#8212; so treat anything with real money behind it accordingly. But if you have a DEGIRO export, a multi-currency mess, or an RSU sale you never quite trusted your own math on, try it and reply with what you find.</p><p>Next tax season, I&#8217;ll walk into it with Quadro RT, RM, and RW already filled in &#8212; done myself, start to finish, with the tool I built for exactly that. That&#8217;s not a knock on what my accountant does; a niche, multi-currency Regime Dichiarativo filing like mine was never going to be where a general practice adds the most value, and that&#8217;s fine. It&#8217;s just that AI made it possible for me to close that gap myself, on my own numbers, instead of handing off a statement I couldn&#8217;t fully explain myself. That&#8217;s the part of &#8220;vibe coding&#8221; nobody puts in the tweet.</p><h3>What&#8217;s Next</h3><p>This is a 9-part series. Next up: the environment itself &#8212; the actual Claude Code setup, the skills, and the CLAUDE.md files behind everything above. Creating an efficient environment is where I spent most of my time and, in my opinion, the best favor I can do for you is to address this part before the workflow description. Subscribe if you want the rest of it.</p><h3>Resources</h3><p>In my constant interleaving between studying and executing, as you may imagine, not everything was built from scratch. It&#8217;s worth crediting those who have influenced me in this journey and to leave here some resources that, trust me, can accelerate your learning:</p><ul><li><p><strong>Workflow and Context Engineering</strong>:<a href="https://www.nathanonn.com/"> Nathan Onn</a></p></li><li><p><strong>Agent Skills</strong>: A<a href="https://skills.addy.ie/">ddy Osmani</a></p></li><li><p><strong>Loop Engineering</strong>: <a href="https://www.theunwindai.com/">Shubham Saboo</a></p></li><li><p><strong>Knowledge Base</strong>:<a href="https://x.com/karpathy/status/2039805659525644595?lang=en"> Andrej Karpathy</a></p></li><li><p><strong>SDLC</strong>: <a href="https://medium.com/@galloro.giovanni">Giovanni Galloro</a></p></li><li><p><strong>Agents CLI</strong>: <a href="https://developers.googleblog.com/agents-cli-in-agent-platform-create-to-production-in-one-cli/">Elia Secchi &amp; Pier Paolo Ippolito</a></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://requisiteintelligence.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Requisite Intelligence is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</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>]]></content:encoded></item></channel></rss>