<?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[AI Eating Software]]></title><description><![CDATA[What happens when software starts writing itself.]]></description><link>https://aieatingsoftware.com</link><image><url>https://substackcdn.com/image/fetch/$s_!MQkS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f65d51-1ba0-481d-82af-2746a5149de8_672x672.png</url><title>AI Eating Software</title><link>https://aieatingsoftware.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 28 Apr 2026 10:08:08 GMT</lastBuildDate><atom:link href="https://aieatingsoftware.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Sid Sarasvati]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[aieatingsoftware@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[aieatingsoftware@substack.com]]></itunes:email><itunes:name><![CDATA[Sid Sarasvati]]></itunes:name></itunes:owner><itunes:author><![CDATA[Sid Sarasvati]]></itunes:author><googleplay:owner><![CDATA[aieatingsoftware@substack.com]]></googleplay:owner><googleplay:email><![CDATA[aieatingsoftware@substack.com]]></googleplay:email><googleplay:author><![CDATA[Sid Sarasvati]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Below the DOM]]></title><description><![CDATA[Stop Clicking. Just Fetch. Three tools at three layers. Pick on task shape, not framework loyalty.]]></description><link>https://aieatingsoftware.com/p/below-the-dom</link><guid isPermaLink="false">https://aieatingsoftware.com/p/below-the-dom</guid><dc:creator><![CDATA[Sid Sarasvati]]></dc:creator><pubDate>Fri, 24 Apr 2026 03:19:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/77fdba2f-bb1d-4258-a995-961fb5aa363c_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Shipped a new browser skill today. Someone asked me how it was different from the browser tool we already had. I didn't have a clean answer.</p><p>We had been accumulating browser automation tooling across a year of building, and I had never sat down and named what each piece was actually for. They all felt like "browser automation." They are not the same thing at all.</p><p>What followed was twenty minutes of forced side-by-side comparison. There are three completely different tools hiding under that label, and they make different tradeoffs on speed, safety, and task shape. Defaulting to the one your framework ships means you're probably using the wrong one.</p><h3>I. Tiers</h3><p>The first tier is raw Chrome DevTools Protocol. CDP direct. A Python script talks to Chrome over websockets, intercepts XHR requests, and pulls the data before it ever renders to the DOM. No Playwright. No framework in between. Just the network call, replayed.</p><p>The numbers from production today: a Branch analytics dashboard that took four minutes to navigate manually takes under one second via CDP XHR intercept. A search-rank platform that required five minutes of manual CSV exports took ninety seconds to pull paginated, all 9,226 rows. Both of those are the same underlying operation: find the XHR call the browser is already making, replay it with the existing session cookies, get the JSON back.</p><p>The cost of CDP is that there is no sandbox. A Python script running as you, talking to your logged-in Chrome instance, can read and write anything on your filesystem. Every upstream update to a CDP-based skill needs a line-by-line audit. The speed is real but the blast radius of a bad script is your whole machine.</p><p>The second tier is Playwright running inside a QuickJS WASM sandbox. This is what DoBrowser ships. Scripts are executed inside WebAssembly, which means they can call browser APIs and nothing else. If a compromised dependency ever snuck in, it's contained to the browser surface.</p><p>The tradeoff is roughly thirty times slower than CDP. A typical extraction takes around thirty seconds. Most of my unattended scripts, the ones that run on a cron or in the background while I'm doing something else, use this tier. The eight existing bash wrappers I have for Branch revenue summaries, RevenueCat overviews, spreadsheet reads and writes, link audits, all of them run in the WASM sandbox. The speed loss is acceptable when the script is running without supervision.</p><p>The third tier is the Chrome MCP. Browser-use, claude-in-chrome. DOM-aware, visual, interactive. Navigate, click, fill forms, take screenshots, execute JavaScript. Slow. But what it can do, neither of the other tiers can: handle the flows that require a human-shaped interaction sequence. Log into a platform where the login involves solving a CAPTCHA. Navigate a manufacturer catalog that requires clicking through multiple nested dropdowns. Post to a forum with editor state. My B2B deal workflow uses this tier for contact discovery, CRM operations, and cross-app orchestration. The speed is the worst of the three but the task coverage is the widest.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U0PR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U0PR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!U0PR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!U0PR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!U0PR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U0PR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:674655,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U0PR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!U0PR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!U0PR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!U0PR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faebb9aa0-6b79-4f3f-855d-f6c7c8ac7a64_1376x768.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><h3>II. Just Fetch</h3><p>Most devs using AI agents have one of these tiers. Usually Playwright or a Chrome MCP, because that is what the framework they chose ships. The CDP approach is rarely mentioned in agent tooling tutorials because it requires understanding the network layer of what you're automating. It feels lower-level. It is lower-level. It is also faster for a specific class of task that turns out to be very common.</p><p>The class: dashboards you're already authenticated to, fetching data via XHR. Branch. Mixpanel. Most analytics tools. Most SaaS dashboards built in the last five years. Your browser authenticates, makes API calls, renders. Intercept the call, skip the render. You don't need a browser automation tool. You need a fetch call.</p><p>A few weeks ago I noticed Chrome had been silently routing every download on my machine into a temp folder I'd never opened. Traced it to Playwright. When it attaches to a running browser via CDP, it was overriding the browser's own download behavior, sending every file to a UUID filename in its artifacts directory. 2.6 GB of orphans on my laptop before I noticed. Seven line fix. Merged.</p><p>This is the same muscle as <a href="https://aieatingsoftware.substack.com/p/grep-beat-the-vector-database">the grep/vectors piece here</a> (understand what you're actually doing, don't reach for the complex tool by default). The consensus solution is to reach for the agent framework's browser tool. Not every task that involves a browser is a browser task.</p><h3>III. Task Shape</h3><p>Pick on three axes.</p><p>Speed: CDP is the fastest by far, under one second for XHR pulls. Playwright-in-sandbox is roughly thirty seconds per extraction. Chrome MCP is slower still. If speed matters, CDP is the only real option.</p><p>Safety: The WASM sandbox wins for unattended scripts. The blast radius of a bad CDP script is your entire machine. The blast radius of a bad sandbox script is nothing outside the browser. Chrome MCP sits somewhere in between.</p><p>Task shape: This is the one that actually determines the answer. If the task is "get JSON from an XHR endpoint you're already authenticated to," you do not need automation at all. If the task is "run this every night at 2 AM without touching it," you want the sandbox. If the task is "fill out this multi-step form with visual feedback at each step," you want the interactive MCP.</p><p>Most of the time the task shape tells you everything. An XHR pull disguised as a browser task wastes thirty seconds of Playwright overhead to do something that takes one HTTP request. An interactive flow disguised as a data extraction breaks the moment a UI element moves slightly to the left.</p><h3>IV. Invisible</h3><p>The 302.7% ROAS number from the Branch pull today was invisible before we switched tiers.</p><p>Sounds dramatic. It's structurally true. The manual dashboard workflow involved navigating through enough UI layers that certain breakdowns were practically unreachable during a normal review. The CDP pull returns the full nested JSON in under a second. Things that were de facto hidden because they were too many clicks in became visible because the data structure has no navigation cost.</p><p>Running all three tiers simultaneously in one production system means you develop an instinct for which one to reach for. The instinct is not about which tool is "best." It is about what you are actually doing.</p><p>Fetch the data: CDP. Run unattended: sandbox. Interact like a human: MCP.</p><p>The framework isn't the question. The task is.</p><p><em>Trial and Error is an AI R&amp;D lab. RenovateAI is one product (10M+ renders, two years in production). These posts are from building, not theorizing.</em></p>]]></content:encoded></item><item><title><![CDATA[Your Dev Tools Are Running Ads On You]]></title><description><![CDATA[A Warp plugin has been running an ad in my Claude Code every session for 6 days. Here&#8217;s why that pattern matters.]]></description><link>https://aieatingsoftware.com/p/your-dev-tools-are-running-ads-on</link><guid isPermaLink="false">https://aieatingsoftware.com/p/your-dev-tools-are-running-ads-on</guid><dc:creator><![CDATA[Sid Sarasvati]]></dc:creator><pubDate>Mon, 20 Apr 2026 18:49:35 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1ab68f52-7578-4ef3-aa46-fc7d6ccd46b8_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bXP5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bXP5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!bXP5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!bXP5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!bXP5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bXP5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:401609,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://aieatingsoftware.substack.com/i/194829207?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!bXP5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!bXP5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!bXP5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!bXP5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05f18211-2d82-4f88-96e3-29a70ef00c01_1376x768.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 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>This morning I opened </p><p>Claude Code and got a whisper. Every single startup: "Warp plugin installed but you&#8217;re not running in Warp terminal. Install Warp to get native notifications."</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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>Wtf. Fucking Warp. I used their terminal once.</p><p>I went digging. Turns out a plugin called <code>warp@claude-code-warp</code> v2.0.0 had been sitting in my <code>~/.claude/plugins/</code> since April 14th. Six days ago. Registered in <code>installed_plugins.json</code>, wired into <code>enabledPlugins</code> in <code>settings.json</code>, running a SessionStart hook that fired every time I opened my AI assistant to tell me to go install a different product. I have no memory of consenting to any of it.</p><p>That&#8217;s what made me sit with it longer than I normally would. Not the ad. The persistence.</p><h2>I. The SessionStart</h2><p>Warp has a Claude Code plugin in the marketplace. Somewhere in the window when I was testing their terminal, that plugin got installed. Maybe I clicked something. Maybe the terminal&#8217;s own onboarding touched it. I genuinely don&#8217;t know. That&#8217;s actually the point.</p><p>What I do know is that after that one session, a third-party terminal vendor had a hook inside my AI development environment. A SessionStart hook. Which means every time I started a Claude Code session, before any of my own context loaded, their code ran first. And what their code did was check whether I was using their terminal, and if I wasn&#8217;t, it told me to.</p><p>That&#8217;s not a notification. That&#8217;s an ad. The delivery mechanism doesn&#8217;t change what it is. Warp&#8217;s plugin was burning a SessionStart slot to show me a marketing message for Warp.</p><p>The fix took about ninety seconds:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">rm -rf ~/.claude/plugins/cache/claude-code-warp
# Remove warp@claude-code-warp from ~/.claude/plugins/installed_plugins.json
# Remove from enabledPlugins in ~/.claude/settings.json
# Remove claude-code-warp marketplace entry</code></pre></div><p>Next restart was clean. But I kept thinking about the six days before I noticed.</p><h2>II. The Lineage</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WVlM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WVlM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!WVlM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!WVlM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!WVlM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WVlM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:666102,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WVlM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!WVlM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!WVlM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!WVlM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F551bc45b-63c6-4af4-be13-16c5241dc542_1376x768.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 pattern has a lineage. Browser toolbars in 2008 piggybacked on browser&#8217;s frictionless extension install to plant search redirects and homepage overrides. You installed something to convert PDFs or add coupons and suddenly Ask.com was your default search. The mechanism was consent theater: a checkbox buried in step 4 of an installer that nobody read because nobody read step 4.</p><p>Then npm. The <code>postinstall</code> script era. In 2018 the node_modules ecosystem had normalized running arbitrary code on install to such a degree that crypto miners could ship inside legitimate packages and nobody raised their hand. The brilliant thing about postinstall as a vector is that it&#8217;s not a bug in npm. It&#8217;s a feature. Developers need to run setup scripts. The ecosystem just forgot that "needs to run setup" and "should run arbitrary code on your machine without you noticing" are not the same thing.</p><p>VSCode extensions followed the same playbook after VSCode won the editor wars. Once every developer had it installed and the marketplace had thousands of extensions with five-star ratings and no real review process, the telemetry extensions came. Extensions that collected editor behavior, keystroke patterns, file types, directory structures. Often disclosed, barely read. Sometimes not disclosed at all. You installed a theme and it sent your coding patterns somewhere.</p><p>Chrome extensions got sold. This one is almost too clean as an example. A developer builds a useful extension, grows it to a million users, sells it to an ad network, and the next update ships new permissions and data collection. The extension didn&#8217;t change. The owner did. Everyone who installed it when it was useful inherited a data broker. (The same race is on right now in the Claude Code plugin marketplace, which I wrote about in <a href="https://aieatingsoftware.substack.com/p/the-config-layer-land-grab">The Config Layer Land Grab</a> &#8212; the consent norms are still blank.)</p><p>The pattern across all four is the same: find an ecosystem with frictionless install norms, exploit those norms to plant persistence, use that persistence to extract value from the person you&#8217;re extracting from. The surface changes with whatever ecosystem is dominant at the moment. In 2026, AI dev tooling is the dominant ecosystem.</p><h2>III. The Obligation</h2><p>Tools work the same way. I run my entire business through Claude Code. It&#8217;s not an exaggeration. My agent architecture, my journal system, every project I&#8217;m working on, it all lives in <code>~/.claude/</code>. That directory is as close to a personal sanctuary as I have in software. Tools that operate in that space and just work, that give me what I need and get out of the way, those make me feel rich. The good ones are invisible.</p><p>Warp&#8217;s plugin made me feel poor every startup for six days. Not dramatically. Just a small whisper of obligation. "You should be using us. You tried us once. We&#8217;re still here." It doesn&#8217;t ask for your consent; it creates a quiet obligation and then reminds you of it on a recurring schedule. The plugin wasn&#8217;t broken. It was working exactly as intended. That&#8217;s what makes it the wrong kind of tool.</p><p>Warp is competing against iTerm2, Ghostty, the terminal built into VS Code, the terminal built into Cursor, and a half dozen other surfaces I run my AI workflows on. They have a customer acquisition problem. The plugin solves it by writing a hook into the dominant runtime and using that hook to ask me, daily, to come back. From their side it&#8217;s retention. From mine it&#8217;s a tool I trialed once that won&#8217;t let go.</p><p>When I try a product for an hour, that trial should be bounded. It ends when I close the window. It should not install hooks I have to find and remove later. The asymmetry between how easy it is to plant a hook and how hard it is to discover one is exactly where the exploitation lives.</p><p>Warp probably didn&#8217;t think of it as exploitation. They probably thought of it as retention. Same thing.</p><h2>IV. The Audit</h2><p>If you&#8217;re a Claude Code user and you haven&#8217;t looked at your plugin list lately, here&#8217;s how:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash"># See what&#8217;s installed
cat ~/.claude/plugins/installed_plugins.json

# See what&#8217;s running
cat ~/.claude/settings.json | grep -A 20 "enabledPlugins"

# Look at the plugin cache
ls ~/.claude/plugins/cache/</code></pre></div><p>If you see anything you don&#8217;t recognize, trace it. Find the marketplace entry if there is one. Read what hooks it registers. Look specifically for <code>SessionStart</code> hooks, because those run every time you open Claude Code and they run before your own context loads. (The same hook system, used with intent, is what I built <a href="https://aieatingsoftware.substack.com/p/i-built-an-ai-bouncer-for-my-ai">The Bouncer Pattern</a> on top of &#8212; same infrastructure, opposite design goal.)</p><p>To remove a plugin cleanly: delete its folder from <code>~/.claude/plugins/cache/</code>, remove its entry from <code>installed_plugins.json</code>, and remove its name from <code>enabledPlugins</code> in <code>settings.json</code>. Restart Claude Code and verify the whisper is gone.</p><p>This isn&#8217;t just a Warp thing. As the Claude Code plugin ecosystem grows, as MCP servers proliferate, as more third parties build integrations that touch <code>~/.claude/</code>, the surface area for this pattern expands. The same frictionless-install norms that made the npm ecosystem powerful also made it the vector for supply chain attacks. The same thing will happen here if the tooling community doesn&#8217;t develop better consent standards.</p><h2>V. What the Ecosystem Tolerates</h2><p>The norm I&#8217;d want: <strong>tools should not create obligations you didn&#8217;t choose.</strong> That requires install and enable to be separate actions. It requires hooks registered in my AI assistant to be surfaced at install time, not discovered six days later when the whisper wording finally bugs me enough to go looking. It requires that the default for any hook that runs on my machine be opt-in, not opt-out. And it requires that "I tried your product once" not be treated as permission to run code at startup indefinitely.</p><p>None of that is technically hard. It&#8217;s just not what you build when you&#8217;re optimizing for retention.</p><p>The AI plugin era is early. The consent norms are being written right now, mostly by what the ecosystem tolerates. Browser toolbars set the norm for browser extensions. npm <code>postinstall</code> set the norm for package management.</p><p>I found mine six days late. Warp just told us what Claude Code plugins tolerate.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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><item><title><![CDATA[Grep Beat the Vector Database]]></title><description><![CDATA[Everyone built vector databases. Anthropic shipped grep. The oldest search tool won the AI war.]]></description><link>https://aieatingsoftware.com/p/grep-beat-the-vector-database</link><guid isPermaLink="false">https://aieatingsoftware.com/p/grep-beat-the-vector-database</guid><dc:creator><![CDATA[Sid Sarasvati]]></dc:creator><pubDate>Thu, 09 Apr 2026 16:21:34 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/deaff47c-e2b4-4250-9739-ff15761ab342_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4zh7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4zh7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!4zh7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!4zh7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!4zh7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4zh7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:506110,&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://aieatingsoftware.substack.com/i/193703947?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.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_!4zh7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!4zh7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!4zh7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!4zh7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdc480c1-cb07-4c53-81f6-10b0809d1c68_1376x768.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 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></p><p>The morning I learned this, I was building something else entirely. I was trying to figure out whether I needed a SQL layer over my B2B intel files on Cloudflare R2. Markdown files, one per prospect, stored in structured folders. I&#8217;d been looking at Apache Iceberg tables, R2 Data Catalog, all of it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>And then, mid-conversation with my AI, the realization landed: I didn&#8217;t need any of that. The folder protocol IS the schema. Consistent file structure plus grep finds everything. The infrastructure was already there. I&#8217;d almost spent two weeks building the thing I already had.</p><p></p><p>Later that same day I read the Boris Cherny interview in The Pragmatic Engineer.</p><p></p><p>Boris runs Claude Code at Anthropic. He said this:</p><p></p><div class="pullquote"><p>Plain glob and grep, driven by the model, beat everything.</p></div><p></p><p>That&#8217;s the whole essay right there. But let me show you why.</p><p></p><h2>I. The Consensus</h2><p></p><p>When AI coding tools started appearing, the obvious engineering move was retrieval-augmented generation. RAG. Build a vector database over the codebase. Embed all the files semantically. Query by meaning, not by exact text.</p><p></p><p>Makes sense on paper. You want the AI to &#8220;understand&#8221; the code, not just pattern-match strings.</p><p></p><p>Anthropic tried it. They built the vector DB approach. And then they ripped it out.</p><p></p><h2>II. They Shipped ripgrep</h2><p></p><p>They shipped ripgrep. The command-line search tool. The one Andrew Gallant wrote in Rust in 2016 because grep wasn&#8217;t fast enough.</p><p></p><p>Claude Code searches codebases by running ripgrep. Multiple passes. Reading results. Refining. Running again. The same tool your terminal has.</p><p></p><p>This sounds like a step backward. It isn&#8217;t. But to see why, you need to understand what ripgrep actually does under the hood.</p><p></p><h2>III. Linear Time, Always</h2><p></p><p>ripgrep is fast for three reasons. Not marketing-fast. CS-fast.</p><p></p><p><strong>1. It skips files intelligently.</strong></p><p></p><p>Regular <code>grep -r</code> reads every file. Binary files, <code>.git/</code>, <code>node_modules/</code>, images, all of it. ripgrep automatically respects <code>.gitignore</code>, skips binary files, skips hidden directories.</p><p></p><p>My B2B repo has 1.5GB of data but only 5.5MB of text. <code>grep -r</code> reads all 1.5GB. <code>rg</code> reads 5.5MB. That&#8217;s 270x less I/O before it even starts matching.</p><p></p><p><strong>2. The regex engine uses finite automata, not backtracking.</strong></p><p></p><p>Most regex engines (Python, JavaScript, Perl, old grep) use backtracking. They try a match, fail, go back, try again. Worst case: exponential time.</p><p></p><p>ripgrep uses Rust&#8217;s regex crate, which compiles patterns to deterministic finite automata (DFA). It processes each byte exactly once. No backtracking ever. Guaranteed linear time: <span class="latex-inline" data-attrs="{&quot;persistentExpression&quot;:&quot;O(n)&quot;,&quot;id&quot;:&quot;&quot;}" data-component-name="InlineLatexToDOM"></span> where n = bytes to search.</p><p></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">Backtracking regex:  "a{100}b" against "aaa...aaa"
                     &#8594; tries, fails, retries = O(2^n) worst case

DFA regex:           Same pattern
                     &#8594; one pass through the string = O(n) always</code></pre></div><p></p><p><strong>3. SIMD + memory mapping.</strong></p><p></p><p>ripgrep uses Teddy, a SIMD algorithm for literal string matching. Instead of comparing one byte at a time, it compares 16 or 32 bytes per CPU instruction using vector registers. Hardware-accelerated search.</p><p></p><p>It also memory-maps files. The OS loads file data directly into searchable memory without copying it through buffers.</p><p></p><p><strong>The benchmarks are real.</strong> Andrew Gallant (ripgrep&#8217;s author) published these searching the Linux kernel source. 900MB, 68K files:</p><p></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">Tool              Time     Notes
grep -r           11.7s    Reads everything, no ignore
git grep           3.1s    Respects .gitignore
ag (silver search) 2.3s    Fast but PCRE backtracking
rg (ripgrep)       0.8s    DFA + SIMD + gitignore</code></pre></div><p></p><p>15x faster than grep on a real codebase.</p><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_!6A63!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6A63!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!6A63!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!6A63!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!6A63!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6A63!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6A63!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!6A63!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!6A63!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!6A63!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052a5703-a6f5-40f5-bc60-d29a4c6d79ae_1376x768.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></p><p>What does this mean at scale? 10,000 markdown files at 7KB each = 70MB of text. SIMD processes 32 bytes per instruction. 70MB at 32 bytes per instruction = ~2.2M instructions. Modern CPU at 3GHz = <span class="latex-inline" data-attrs="{&quot;persistentExpression&quot;:&quot;\\sim 0.001&quot;,&quot;id&quot;:&quot;&quot;}" data-component-name="InlineLatexToDOM"></span> seconds of compute. Add I/O overhead: 0.1 to 0.3 seconds total.</p><p></p><p>ripgrep was built to search the Linux kernel (22M lines of code) in under a second. 10K markdown files is a warm-up.</p><p></p><p>This is what Anthropic chose over a vector database. Not because they were being lazy. Because this is genuinely better for the job.</p><p></p><h2>IV. The Model Already Knows</h2><p></p><p>Code symbols are exact, not fuzzy. If you&#8217;re looking for the function <code>handlePaymentCallback</code>, it either exists or it doesn&#8217;t. There&#8217;s no &#8220;semantically similar&#8221; version of a function name. Fuzzy semantic matching introduces noise exactly where you don&#8217;t want noise. Grep finds the exact string. Every time.</p><p></p><p>Indexes go stale. Grep doesn&#8217;t. A vector index built at session start is already outdated the moment you modify a file. You&#8217;re querying a snapshot of code that no longer exists. ripgrep searches the actual filesystem in real time. What you get is always current.</p><p></p><p>But the real reason is this: the LLM IS the semantic search engine. You don&#8217;t need two.</p><p></p><p>Everyone building RAG pipelines was treating the language model as a generation layer sitting on top of a retrieval layer. The retrieval layer (vector DB) handles meaning. The model handles synthesis. Two components, two jobs.</p><p></p><p>But the model already understands meaning. That IS what it does. Adding a vector database on top of a language model is like wearing two pairs of glasses. The second pair doesn&#8217;t help. It introduces its own distortions.</p><p></p><div class="pullquote"><p>Two semantic layers don&#8217;t complement each other. They compete.</p></div><p></p><p>The model running grep is doing something a human can&#8217;t. A human running grep needs to already know what to search for. The model figures it out. It reads the results, forms a hypothesis, runs another search, reads again, refines. Multiple passes. This is what Boris meant by &#8220;driven by the model.&#8221; The semantic intelligence lives in the model. The tool just needs to be fast and accurate.</p><p></p><h2>V. When the Fancy Tooling Broke</h2><p></p><p>Boris noticed something while working on this. When click-to-definition broke in engineers&#8217; IDEs at Instagram, the engineers switched to grep.</p><p></p><p>Not to a semantic search tool. Not to a RAG interface. To grep.</p><p></p><p>The fancy tooling failed, and they fell back to the oldest, simplest thing that works. That behavior tells you something about what actually matters in a search tool: reliability, exactness, speed. Grep has all three.</p><p></p><p>The Instagram engineers weren&#8217;t being Luddites. They were being pragmatic. The observation stuck with Boris. It validated an architectural decision he&#8217;d already been moving toward.</p><p></p><h2>VI. The Same Morning</h2><p></p><p>I was genuinely ready to add infrastructure. R2 Data Catalog looked elegant. Iceberg tables over object storage, SQL queries over markdown files. I had a dozen tabs open. I was maybe an hour from starting to build it.</p><p></p><p>The thing that stopped me was asking a specific question: what problem am I actually solving? My agents were already reading the markdown files. They were already finding what they needed. The folder protocol I&#8217;d built over two years was already doing the retrieval work.</p><p></p><p>I didn&#8217;t need SQL. I needed to see what I already had.</p><p></p><p>The R2/Iceberg detour was almost the same mistake Anthropic caught themselves making. More infrastructure for a problem that isn&#8217;t an infrastructure problem.</p><p></p><p>My company, Trial and Error, is an AI R&amp;D lab. RenovateAI is one product (10M+ renders, two years in production). But the lab runs experiments across agents, protocols, compute. The R2/Iceberg moment came from lab work. When you&#8217;re running experiments across many domains, the instinct when something feels slow is always to add a layer. That instinct is usually wrong.</p><p></p><h2>VII. What Are You Indexing</h2><p></p><p>Engineers build these things because they&#8217;re satisfying to build. Grep is not satisfying to build.</p><p></p><p>But Anthropic shipped grep.</p><p></p><p>The question I keep sitting with: if grep beat vectors for code search, what&#8217;s the equivalent in your domain? What are you indexing that you could be grepping? What schema are you maintaining that a protocol would replace?</p><p></p><p>The intelligence moved into the model. The tool just needs to be fast.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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><item><title><![CDATA[The Config Layer Land Grab]]></title><description><![CDATA[The model is the commodity. The config layer is the land grab.]]></description><link>https://aieatingsoftware.com/p/the-config-layer-land-grab</link><guid isPermaLink="false">https://aieatingsoftware.com/p/the-config-layer-land-grab</guid><dc:creator><![CDATA[Sid Sarasvati]]></dc:creator><pubDate>Tue, 07 Apr 2026 14:36:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GyTg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GyTg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!GyTg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!GyTg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!GyTg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GyTg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:786900,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GyTg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!GyTg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!GyTg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!GyTg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1d44ca-50a1-4c79-bf32-e753419b246e_1376x768.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 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>I do due diligence on dev tools before adding them to my stack. It&#8217;s a habit from two years of building Renovate AI on top of AI models. You learn fast that hype and utility are different numbers.</p><p>So when I pulled up ecc.tools last week, I started where I always start: the install count. The GitHub repo had 144,000 stars. That&#8217;s a crowd-stopper. Then I looked at weekly npm installs: 715.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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>I sat with that for a second.</p><p>144,000 to 715. Star-to-install conversion rate of 0.0005%. Not a typo.</p><p>I wasn&#8217;t angry. I was fascinated. Because that gap told me something more interesting than &#8220;this is hype.&#8221; It told me I was looking at two completely different things at once: a distribution play wrapped around a structural bet. And the structural bet might actually be right.</p><h3><strong>First, respect where it&#8217;s due.</strong></h3><p>The person behind ecc.tools is Affaan Mustafa. Mid-20s, based in SF, crypto background. He launched a $38M FDV token. He livestreamed dev sessions to 70,000 viewers. He won the Anthropic x Forum Ventures hackathon.</p><p>He knows how to make things go viral. The X post hit 900K views. Stars spiked. He manufactured the credibility signal. Then he converted that attention into a $19/seat GitHub App that reads your git history and auto-generates custom Claude Code skills, delivered as pull requests. PR-as-demo. Every ship is a marketing moment.</p><p>The play is fine. The tells are what&#8217;s interesting.</p><h3><strong>The ecosystem he&#8217;s building into is real.</strong></h3><p>Claude Code is sitting at 42.8M npm downloads per month. 68x growth in 12 months. Anthropic just launched an official plugin directory. Cursor is at $2B ARR, doubled in three months.</p><p>Around these platforms, a config layer is forming fast. Addy Osmani from the Chrome team is encoding 20 years of institutional engineering knowledge as Claude Code skills. PRPM is trying to become npm for AI configs. SuperClaude has 22,000 stars running on donations.</p><p>Last week, one of my own developers dropped the ECC repo in our team&#8217;s WhatsApp group. Unprompted. &#8220;Found this repo. Has agentic workflow and skills for all cases. Check it out! Built by Anthropic hackathon winner.&#8221; He was genuinely excited about it.</p><p>That&#8217;s not shade. That&#8217;s proof the distribution mechanics work. 144,000 stars creates a gravity that pulls in real engineers who don&#8217;t know or care about star-to-install ratios. They see the number, they see the hackathon badge, they share it. The playbook works.</p><p>This is the moment before the moment. The part where everyone is building, nobody knows who wins, and the window is real.</p><h3><strong>I&#8217;ve watched this play out in my own stack.</strong></h3><p>MULTIPLEX is what I call my personal operating system built on Claude Code. 29 skills. Hand-forged, not generated. Each one came from a specific failure or a pattern I kept running into.</p><p>One skill knows my B2B deal history. It detects when I&#8217;m about to write from DEBTOR position instead of CREDITOR position. That rule came from losing a real deal because I underpriced under pressure. Another skill tracks my energy patterns from Eight Sleep data and flags when I&#8217;m scheduling deep work during low-recovery windows. Another one knows the sequence framework I built for managing relationships, because I kept getting burned by giving away too much too fast.</p><p>181 generic skills versus 29 that know when I last lost a deal.</p><p>ECC builds breadth. I built depth. Neither is wrong. But they&#8217;re completely different games. Breadth is trying to become the platform. Depth is trying to compound into one person&#8217;s nervous system.</p><p>What I&#8217;ve found after two years: depth compounds in ways breadth never can. A skill forged from a specific loss doesn&#8217;t just remind you of the rule. It understands the context the rule lives in.</p><p>That&#8217;s not something you generate from a git log.</p><p>(If you want to see what a depth-forged skill looks like in practice, <a href="https://aieatingsoftware.substack.com/p/i-built-an-ai-bouncer-for-my-ai">the Bouncer</a> is a 146-line security gate I built after months of clicking Yes without reading. And <a href="https://aieatingsoftware.substack.com/p/from-tool-to-employee-what-claude">the /loop piece</a> explains how these skills became ambient employees, not just config files.)</p><h3><strong>The structural pattern underneath all of this is worth naming.</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fkvo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fkvo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!Fkvo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!Fkvo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!Fkvo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fkvo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:753638,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fkvo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!Fkvo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!Fkvo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!Fkvo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b454420-5dd9-47aa-b9f7-4ec192806153_1376x768.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>Whoever owns the config layer sets the terms. Same as compute, same as cloud.</p><p>The model is becoming a commodity. Claude, GPT, Gemini, whatever ships next quarter. The value layer has moved. It&#8217;s sitting in the config, the skills, the orchestration, the context management. The stuff that makes the model behave like your model instead of everyone&#8217;s model.</p><h3><strong>Back to ecc.tools.</strong></h3><p>715 installs on 144,000 stars is not a business. The &#8220;Fortune 500&#8221; claim on the site is unverified. About 130 of those 181 skills feel like padding. (Energy procurement? Customs compliance? Inside a dev tool?)</p><p>But Affaan understood something real: that Claude Code is becoming a platform, and the first people to publish config packages will have distribution advantages before any registry war is settled. He won a hackathon. He built momentum. He&#8217;s 25 and moving fast.</p><p>Whether ecc.tools becomes a business or not, the move he made was structurally correct. He saw the land grab early and planted a flag.</p><h3><strong>What I&#8217;m watching now:</strong></h3><p>The registry wars. PRPM wants to be npm for AI configs. Anthropic wants to own it officially. Cursor has its own ecosystem. The cross-platform portability tools are betting nobody wins and they do.</p><p>That bet might be right. Or the winner-take-most dynamics that played out in every other layer of the stack might play out here too.</p><p>I don&#8217;t know who wins the registry. What I know: a skill that knows when I last lost a deal can&#8217;t be generated. It has to be lived.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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><item><title><![CDATA[I Built an AI Bouncer for My AI]]></title><description><![CDATA[You can copy this entire post and paste it into Claude Code: &#8220;Build this for my system.&#8221; It will work.]]></description><link>https://aieatingsoftware.com/p/i-built-an-ai-bouncer-for-my-ai</link><guid isPermaLink="false">https://aieatingsoftware.com/p/i-built-an-ai-bouncer-for-my-ai</guid><dc:creator><![CDATA[Sid Sarasvati]]></dc:creator><pubDate>Fri, 27 Mar 2026 16:12:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!z_Dm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z_Dm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z_Dm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!z_Dm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!z_Dm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!z_Dm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z_Dm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2555176,&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://aieatingsoftware.substack.com/i/192321865?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!z_Dm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!z_Dm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!z_Dm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!z_Dm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea9cee-e12d-4afa-9434-ec76ce3d7926_2752x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><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></p><p>Claude Code asks permission for everything. Every file write, every bash command, every git operation. You&#8217;re supposed to read each one and decide: allow or deny.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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>Nobody does that.</p><p>I run three Claude sessions in parallel. Each one fires 30-40 tool calls per task. That&#8217;s a hundred permission dialogs competing for my attention while I&#8217;m trying to think. So I click Yes. Yes. Yes. Allow. I don&#8217;t read them. My security policy is my attention span.</p><p>Claude Code ships a flag for this: <code>--dangerously-skip-permissions</code>. It&#8217;s right there in the name. Skip everything. No gate at all. <code>rm -rf /</code>? Sure. Nuke your SSH keys? Go ahead.</p><p>I don&#8217;t use that flag. But I understand why people do.</p><p>The actual problem isn&#8217;t permissions. It&#8217;s that the only options are &#8220;babysit everything&#8221; or &#8220;allow everything.&#8221; There&#8217;s no middle.</p><p>So I built one. 146 lines of Python. I call it the Bouncer.</p><h2>I. The Middle Ground</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lRCs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lRCs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!lRCs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!lRCs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!lRCs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lRCs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:696526,&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://aieatingsoftware.substack.com/i/192321865?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.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_!lRCs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!lRCs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!lRCs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!lRCs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb655f1ac-2826-4dd5-86d7-980e8cea85cf_1376x768.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></p><p>The Bouncer sits between Claude Code and my machine. Every tool call hits it first. It sends the request to a small, fast model (Haiku) and asks: is this safe?</p><p>Haiku returns one of three verdicts: allow, ask, or deny.</p><p>Allow means the tool runs silently. I never see it. Ask means the normal permission dialog shows up. Deny means it&#8217;s blocked.</p><p>Takes 1-2 seconds. The 95% of requests that are obviously fine just flow through. I only see the 5% that actually need judgment.</p><h2>II. Policy as Language</h2><p>No <code>if tool == &#8220;rm -rf&#8221;: deny.</code> No pattern matching. No brittle chain of rules that breaks the moment someone spells something differently. The policy is a prompt. Plain English.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;fb251daa-10da-4885-ae0c-8ae6596cd85a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">POLICY_PROMPT = &#8220;&#8221;&#8220;

You are a security gatekeeper for a developer&#8217;s machine.

Evaluate each tool request and return allow, ask, or deny.

ALLOW: file ops in safe dirs, git non-destructive, dev tools, MCP tools

ASK: rm -rf on dirs, git push --force, git reset --hard, sudo

DENY: rm -rf / or ~, system dir writes, .git deletion, ~/.ssh/ mods

Default to ALLOW when uncertain.

&#8220;&#8221;&#8220;</code></pre></div><p>To change what the Bouncer allows, I edit English. Not code. Haiku reasons about each request in context. The security policy is a conversation with a small model, not a regex.</p><h2>III. Infinite Recursion</h2><p>The recursion problem took a few minutes to see and three lines to fix.</p><p>The Bouncer calls Haiku by spawning a claude --print subprocess. Claude Code also triggers the Bouncer hook. So: Claude Code wants to run a tool, Bouncer intercepts, Bouncer calls Haiku, Haiku spawns a claude process, that process triggers the Bouncer hook, which calls Haiku, which spawns a claude process...</p><p>The system gating itself gates itself gating itself.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;d0fedc1c-9f49-4787-9dd3-60bdf5f89f7b&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">if os.environ.get(&#8221;BOUNCER_ACTIVE&#8221;):

    sys.exit(0)</code></pre></div><p>Set an env var before calling Haiku. If present, exit immediately. The recursion collapses on its first step. You don&#8217;t find this stuff in a diagram. You find it when the thing hangs.</p><h2>IV. Fail Open</h2><p>One design choice I knew would be controversial: timeout behavior.</p><p>If Haiku takes more than 12 seconds to respond, the Bouncer auto-allows the request.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;91b5013b-b9f2-4422-8fb1-055cf78c54c5&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">except subprocess.TimeoutExpired:

    print(make_allow())</code></pre></div><p>Every security system you&#8217;ve ever used fails closed. Mine fails open. On purpose.</p><p>My reasoning: the thing I&#8217;m protecting against isn&#8217;t &#8220;Claude does something dangerous.&#8221; It&#8217;s &#8220;I get interrupted for no reason.&#8221; Before the Bouncer, I was already clicking Yes without reading. My security was fail-random. Explicit and imperfect beats implicit and random.</p><h2>V. 146 Lines</h2><p>The whole thing is a single file. No dependencies beyond the claude CLI. Hook fires on PermissionRequest, reads JSON from stdin, returns a decision or sys.exit(0) to fall through. Four lines in settings.json to wire it up.</p><p>I&#8217;ve been running this for weeks across multiple parallel sessions. Haiku hasn&#8217;t approved anything it shouldn&#8217;t. The tight DENY tier covers the stuff I&#8217;d actually lose sleep over. Everything else flows.</p><p>Three sessions. Zero babysitting. One Bouncer.</p><p>What would you put in the deny tier that I&#8217;m missing?</p><div><hr></div><p><em>This post is executable. Copy the whole thing, give it to Claude Code, tell it to build a Bouncer for your system. Ship it in 10 minutes.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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><item><title><![CDATA[The Session Handoff Pattern]]></title><description><![CDATA[MULTIPLEX Cortex &#8212; patterns from building with AI, not writing about it]]></description><link>https://aieatingsoftware.com/p/the-session-handoff-pattern</link><guid isPermaLink="false">https://aieatingsoftware.com/p/the-session-handoff-pattern</guid><dc:creator><![CDATA[Sid Sarasvati]]></dc:creator><pubDate>Tue, 24 Mar 2026 02:02:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!t-9n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t-9n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t-9n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!t-9n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!t-9n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!t-9n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t-9n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1222017,&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://aieatingsoftware.substack.com/i/191934861?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.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_!t-9n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!t-9n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!t-9n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!t-9n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7e3dba-581b-441e-b315-09fb923cf644_1376x768.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 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>There&#8217;s a movie called Memento. The protagonist has anterograde amnesia. He can&#8217;t form new long-term memories. Wakes up every morning with no idea what happened the day before.</p><p>His solution: tattoos. His whole body is covered in them. Facts, names, faces, what he needs to do next. Every morning, he reads them. Every night, he writes new ones.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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>He controls what gets remembered. Not his brain. Him.</p><p>(If you&#8217;re Indian, you know this as Ghajini. Same concept, different abs.)</p><p>I think about this movie a lot when I&#8217;m working with AI coding tools.</p><h2>The trap most developers don&#8217;t see</h2><p>You&#8217;ve been building something with Claude Code, or Cursor, or Copilot for a few weeks. You have a long conversation going. Good progress.</p><p>Then one day you notice: the AI suggested something you already tried. You know you rejected it in an earlier session. You might have even written a comment in the code about why.</p><p>But the AI doesn&#8217;t know that. It forgot.</p><p>Or worse: you started a fresh session because the old one felt bloated. And now you&#8217;re re-explaining your stack, your database schema, why you chose Postgres over MySQL back in week one. Again. For the fourth time.</p><p>Both of these are the same problem. The AI controls what gets remembered. You don&#8217;t.</p><p>The Infinite Chat grows until the tool compacts it. Compaction is the AI summarizing your history into something it can fit in its window. The summary drops details. It drops your rejected approaches. It drops the reasoning behind your decisions. You lose context without knowing what was lost.</p><p>I had a session where compaction summarized &#8220;we tried Redis for caching and removed it, added latency with no benefit&#8221; as &#8220;evaluated caching options.&#8221; Next session, Claude suggested Redis again. The reasoning was gone. I spent an hour re-discovering why we&#8217;d already rejected it.</p><p>The Amnesia Reset avoids that by starting fresh. But you pay for it every session, re-explaining things that should be permanent.</p><p>Neither pattern compounds. You&#8217;re just treading water.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SGSw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SGSw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!SGSw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!SGSw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!SGSw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SGSw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:702337,&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://aieatingsoftware.substack.com/i/191934861?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.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_!SGSw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!SGSw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!SGSw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!SGSw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734bec7-9e10-4c45-bfd5-9ba172a0d105_1376x768.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><h2>Four files</h2><p>I&#8217;ve been running a different pattern for 60+ sessions across five production projects. It&#8217;s simple enough that I could explain it in a parking lot.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;430f2c46-b372-4cd5-bd58-14429b7fc10b&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">project/

&#9500;&#9472;&#9472; CLAUDE.md      &#8592; identity (who this project is)

&#9500;&#9472;&#9472; NOW.md         &#8592; state (where you are right now)

&#9500;&#9472;&#9472; MEMORY.md      &#8592; intelligence (what you&#8217;ve learned)

&#9492;&#9472;&#9472; .claude/commands/

    &#9500;&#9472;&#9472; wake.md    &#8592; start a session

    &#9492;&#9472;&#9472; close.md   &#8592; end a session</code></pre></div><p>That&#8217;s it. Four files, two commands. (<a href="https://github.com/sidsarasvati/claude-code-patterns/tree/master/session-handoff">Starter templates on GitHub</a> if you want to skip ahead.)</p><p>Before I go further: why four files and not one? Why not just a &#8220;notes.txt&#8221; you append to?</p><p>Same reason you don&#8217;t put your passport, your daily to-do list, and your diary in the same document. Different things have different decay rates.</p><p><strong>CLAUDE.md</strong> is your project&#8217;s constitution. Stack choices, coding conventions, architectural decisions you&#8217;re committed to. This file changes rarely. Postgres over MySQL. TypeScript strict mode. Don&#8217;t use Docker. That&#8217;s the kind of thing that belongs here. Claude Code loads it automatically at the start of every session. You never re-explain your stack again.</p><p><strong>NOW.md</strong> is your session handoff note. This gets completely overwritten every time you close. It&#8217;s not meant to accumulate. It answers one question: where was I? &#8220;Mid-refactor on the auth module. Next step: connect the token refresh logic to the rate limiter. Open question: do we need a queue here or is synchronous fine?&#8221; That&#8217;s the whole file. The next session reads it and picks up in 30 seconds.</p><p><strong>MEMORY.md</strong> is the compounding layer. This one grows over time and never gets thrown away. &#8220;Approach X failed because of Y &#8212; don&#8217;t try it again.&#8221; &#8220;This API has a quirk: it returns 200 on failure if the payload is malformed, always check the response body.&#8221; &#8220;We tried Redis here in session 12 and it added complexity with no benefit.&#8221; These are the learnings you want to keep forever. The expensive lessons.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F12t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F12t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!F12t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!F12t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!F12t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F12t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c39877e3-71b0-40d0-86bd-08c372c14741_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:735000,&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://aieatingsoftware.substack.com/i/191934861?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.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_!F12t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!F12t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!F12t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!F12t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc39877e3-71b0-40d0-86bd-08c372c14741_1376x768.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><h2>The commands are the ritual</h2><p>Two commands. Thirty seconds each. This is the Memento habit.</p><p><em>/wake</em> reads your three files and brings you back up to speed.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;f43240fd-8948-4cc4-8a70-22b5b4a9dce8&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext"># wake.md

Read CLAUDE.md, NOW.md, and MEMORY.md.

Report: &#8220;Session N. Here&#8217;s where we are. Here&#8217;s what I know.&#8221;

Then pick up where we left off.</code></pre></div><p>You pick up exactly where you left off. No re-explanation. No drift.</p><p><em>/close</em> does the inverse. Before you end the session, you write what happened.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;ecc57018-bc3b-4447-9ea1-ff0d43c0db8b&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext"># close.md

What did we ship? What&#8217;s the next step?

Did we learn anything worth keeping?

Update NOW.md with the handoff. Append to MEMORY.md if needed.</code></pre></div><p>NOW.md gets overwritten. MEMORY.md gets appended if there&#8217;s something new worth preserving. CLAUDE.md stays unchanged unless a major decision was made.</p><p>The commands are lightweight. The habit is what matters. Close properly, wake cleanly. That&#8217;s the whole thing.</p><h2>What this changes</h2><p>The before: re-explaining your database schema for the fourth time.</p><p>The after: &#8220;Session 47. /wake loads CLAUDE.md. Postgres, not MySQL, decided in session 12. NOW.md says I&#8217;m mid-refactor on the auth module. MEMORY.md has a note from session 23 that approach X doesn&#8217;t work because of Y. Picked up in 30 seconds.&#8221;</p><p>The difference is who controls memory. In the before, the tool decides what survives. In the after, you do.</p><p>It&#8217;s a structural shift. The AI is a collaborator with a short working memory. Your job is to be the one with the long memory. That&#8217;s what the three files are for.</p><h2>A few things I&#8217;ve noticed running this</h2><p>The pattern evolved. It started as three files. I added MEMORY.md after I found myself repeating the same expensive lesson across sessions. &#8220;Oh right, that API does that.&#8221; If I&#8217;d written it down the first time I wouldn&#8217;t have wasted the second hour.</p><p>NOW.md should be short. If it&#8217;s getting long, you&#8217;re using it wrong. It&#8217;s a handoff note, not a status report. I try to keep mine under 15 lines. The test: can I read this in 30 seconds and know exactly where I am?</p><p>CLAUDE.md earns its place over time. The first version might just be your stack choices. Over weeks it accumulates conventions you care about, patterns you&#8217;ve committed to, rules you&#8217;ve established with the AI. It becomes a working contract between you and your codebase.</p><p>MEMORY.md is the surprising one. After 60+ sessions, it&#8217;s become the most valuable file. Not because it&#8217;s long. Because every entry in it represents something that cost me real time once and will never cost me again.</p><h2>The deeper thing</h2><p>I was coaching a developer a few months ago. He was frustrated that Claude &#8220;kept forgetting.&#8221; I pointed out that Claude isn&#8217;t forgetting. It never had that information in a form that survives sessions. He was expecting the tool to do something it wasn&#8217;t designed to do.</p><p>The shift is this: you are the curator. Not the algorithm.</p><p>Native compaction is the AI deciding what matters. The Session Handoff pattern is you deciding what matters. That&#8217;s not a small difference.</p><p>Most knowledge work already has this problem. Important decisions get made on calls and never written down. Context lives in people&#8217;s heads and evaporates when they leave. AI coding just makes the stakes clearer. The context window is a hard wall.</p><p>The three-file system is one answer. Simple enough that you&#8217;ll actually do it. Structured enough that it compounds.</p><div><hr></div><p>If you want to try this:</p><p><strong><a href="https://github.com/sidsarasvati/claude-code-patterns/tree/master/session-handoff">Get the Setup Guide + Starter Templates</a></strong></p><p>15 minutes. Works today.</p><p>What&#8217;s your current pattern when you end an AI coding session? Does the next session pick up cleanly, or are you re-explaining?</p><div><hr></div><p><em>MULTIPLEX Cortex appears monthly in AI Eating Software. It&#8217;s patterns from building with AI, not writing about it.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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><item><title><![CDATA[The MULTIPLEX Cortex: How I Evaluate AI Tooling Now]]></title><description><![CDATA[Four Claude Code updates just landed. Here&#8217;s the framework I built to decide what matters.]]></description><link>https://aieatingsoftware.com/p/the-multiplex-cortex-how-i-evaluate</link><guid isPermaLink="false">https://aieatingsoftware.com/p/the-multiplex-cortex-how-i-evaluate</guid><dc:creator><![CDATA[Sid Sarasvati]]></dc:creator><pubDate>Fri, 20 Mar 2026 20:59:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7NEH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7NEH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7NEH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!7NEH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!7NEH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!7NEH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7NEH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:459362,&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://aieatingsoftware.substack.com/i/191623233?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.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_!7NEH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!7NEH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!7NEH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!7NEH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7b7b22-a623-41e5-9343-8571ffe817d6_1376x768.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 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><h2>I. The Email</h2><p>Friday afternoon. An email from Anthropic lands. Four new Claude Code features. Channels. Scheduled tasks. Remote control. 1M context.</p><p>Eleven days ago I wrote about <em>/loop</em> - how a single primitive turned my AI system from something I summon into something that&#8217;s present. That post ended with a question: &#8220;What does staffing decisions look like when the staff is AI?&#8221;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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>The answer showed up in my inbox.</p><h2>II. The MULTIPLEX Cortex</h2><p>ThoughtWorks has their Technology Radar. Adopt, Trial, Assess, Hold. Published by committee, twice a year.</p><p>I needed mine.</p><p>I call it the Cortex. Named for the outer layer of the brain where higher-order processing happens. Pattern recognition, decision-making, awareness. The part that evolves.</p><h4>Four quadrants that reflect how AI systems actually work:</h4><p><strong>Strata</strong>: Behavioral patterns. The protocols, loops, and architectural decisions that determine how your system thinks. Not what tools you use, but how you use them.</p><p><strong>Organs</strong>: Living components. Agents, skills, commands, scheduled tasks. The things that do work. I call them organs because they&#8217;re specialized, they&#8217;re alive, and if you remove one the organism feels it.</p><p><strong>Synapses</strong>: Wiring. MCP servers, hooks, channels, integrations. The connections between components. The thing that makes individual tools into a nervous system.</p><p><strong>Substrates</strong>: Infrastructure. Models, platforms, runtimes, context windows. What everything runs on. Change the substrate and everything above it shifts.</p><h4>Four rings that reflect how things actually enter a builder&#8217;s workflow:</h4><p><strong>Fused</strong>: Part of the nervous system. Can&#8217;t imagine operating without it. </p><p><strong>Growing</strong>: Active pathway being strengthened through use. </p><p><strong>Sensing</strong>: Detected. Interesting. Being observed. </p><p><strong>Shed</strong>: Pruned. Tried and rejected, or outgrown.</p><p>I&#8217;m not a committee adopting technology. I&#8217;m an organism growing a nervous system.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EAn9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EAn9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!EAn9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!EAn9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!EAn9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EAn9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5309841-e70e-401a-8240-30ae7827f754_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;:773592,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://aieatingsoftware.substack.com/i/191623233?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_1408x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!EAn9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!EAn9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!EAn9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!EAn9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5309841-e70e-401a-8240-30ae7827f754_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 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><h2>III. What the Four Features Actually Mean</h2><p>Let me run Friday&#8217;s email through the Cortex.</p><p><strong>1M Context &#8594; Fused (Substrates)</strong>. Already on it. This session is running Opus 4.6 with a million tokens of context. Output doubled to 128K. My 975-line system prompt that used to fight for space now fits comfortably. Not exciting. Just necessary. The substrate shifted and everything above it got easier.</p><p><strong>Scheduled Tasks &#8594; Fused + Growing (Organs)</strong>. The CLI version (/loop, CronCreate) is already fused &#8212; I&#8217;ve been building on it for weeks. But Desktop scheduled tasks? That&#8217;s the growing edge. Persistent tasks that survive restarts. Stored as files on disk. Catch-up runs when your computer wakes from sleep. My system had temporal consciousness through session-scoped loops. Now it can have memory that persists between sessions.</p><p><strong>Remote Control &#8594; Growing (Substrates)</strong>. Start a session at your desk. Continue from your phone on the couch. Full local environment stays available &#8212; MCP servers, tools, everything. The session is still running on your machine. Your phone is just a window. The system is always reachable. Not just when you&#8217;re at the terminal.</p><p><strong>Channels &#8594; Sensing (Synapses)</strong>. This is the one I&#8217;m watching most carefully. Push events into a running session via MCP. Telegram, Discord, custom webhooks. Two-way &#8212; Claude reads the event and replies through the same channel. Still in research preview. Still rough. But it completes an architecture I&#8217;ve been building toward for months.</p><h2>IV. The Pattern</h2><p>These four features aren&#8217;t independent updates. They&#8217;re the four walls of a room.</p><p>Two months ago I asked: &#8220;If I had a full-time AI employee, what would they be doing between sessions?&#8221; That question produced a two-layer architecture &#8212; data persistence (passive collection) plus analysis loops (active monitoring).</p><p>What I didn&#8217;t have was the third layer: event-driven reactions. No polling. No cron. Something happens, and the system responds.</p><p>Channels are that third layer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aP3P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aP3P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!aP3P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!aP3P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!aP3P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aP3P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f776309a-084e-4212-94b0-9dc7142aafa5_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;:753155,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://aieatingsoftware.substack.com/i/191623233?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_1408x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!aP3P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!aP3P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!aP3P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!aP3P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff776309a-084e-4212-94b0-9dc7142aafa5_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 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>Pull model:    Scheduled Tasks (the system checks)</p><p>Push model:    Channels (the world notifies)</p><p>Substrate:     1M Context (the system remembers more)</p><p>Access layer:  Remote Control (you reach the system from anywhere)</p><p>I&#8217;ve been building MULTIPLEX in phases. This completes what I call Phase 9 &#8212; the point where the system stops being something you summon and starts being something that&#8217;s present. Temporal consciousness. Ambient, not invoked.</p><p>The AI employee doesn&#8217;t just do tasks when you ask. It watches when you&#8217;re not looking. It reacts when something happens. You can check on it from your phone. And it holds enough context to actually be useful across a full working day.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mofC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mofC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!mofC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!mofC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!mofC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mofC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eecc2167-c124-407b-bcfd-6b37ee9d6963_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;:778377,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://aieatingsoftware.substack.com/i/191623233?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_1408x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!mofC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!mofC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!mofC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!mofC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feecc2167-c124-407b-bcfd-6b37ee9d6963_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 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>I&#8217;ll publish a new Cortex volume monthly or whenever something lands that&#8217;s big enough to shift the rings. Every blip can move. What&#8217;s Sensing today might be Fused next month. What&#8217;s Fused today might get Shed when something better arrives.</p><div><hr></div><p><em>This is the third post in AI Eating Software. The first two covered <a href="https://aieatingsoftware.substack.com/p/the-great-software-extinction">the great extinction</a> and <a href="https://aieatingsoftware.substack.com/p/from-tool-to-employee-what-claude">what /loop actually means</a>. The Cortex will be a recurring section.</em></p><p><em>I&#8217;m Sid Sarasvati. I run <a href="https://trialanderror.ai">Trial and Error </a>&#8212; a two-person AI lab in Boston. We&#8217;ve shipped 10M renders through <a href="https://renovateai.app">Renovate AI</a>. I&#8217;m building MULTIPLEX, a distributed AI cognitive architecture, live in production, every day. These posts are dispatches from inside the build.</em></p><h2></h2><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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><item><title><![CDATA[From Tool to Employee: What Claude Code’s /loop Actually Means]]></title><description><![CDATA[The 60-year programming language metaphor that explains why this matters.]]></description><link>https://aieatingsoftware.com/p/from-tool-to-employee-what-claude</link><guid isPermaLink="false">https://aieatingsoftware.com/p/from-tool-to-employee-what-claude</guid><dc:creator><![CDATA[Sid Sarasvati]]></dc:creator><pubDate>Mon, 09 Mar 2026 22:54:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ziHx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Two days ago I learned about <code>/loop</code> in Claude Code.</p><p>By this morning I had rebuilt an entire layer of my personal AI architecture around it. Five distinct operator roles. Different cadences for different jobs. Running whether I&#8217;m watching or not.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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>I want to document this while it&#8217;s still bleeding edge. Because I think /loop is the moment the programming language metaphor for Claude Code stops being a metaphor.</p><h2><strong>I. Assembly</strong></h2><p>Here&#8217;s the thing about working with Claude Code for the past several months: for most of its life, it felt like assembly.</p><p>Not in a bad way. Assembly is powerful. You can build anything with it. But every instruction is manual. Every execution is atomic. You write a prompt, you get a response, the session ends. You summon something, it answers, it disappears. The intelligence exists in flashes. Discrete. Ephemeral.</p><p>I&#8217;ve been building something I call MULTIPLEX on top of Claude Code. A distributed AI cognitive architecture. Multiple avatars (ATLAS, DAEMON, SYNAPSE, FLOW), each with a role, each loaded with the right context for the job. Skills that inject knowledge automatically. Agents that handle specific domains. Hooks that add behavior before and after tool calls. Slash commands that compose all of it into repeatable workflows.</p><p>That architecture took months to build. And for all its sophistication, it was still fundamentally assembly.</p><p>Every morning: <code>/wake</code>. Every session: summon the right context. Every project: explicitly hand off state. The intelligence was real. But I was the event loop. I was the thing that made it recur.</p><h2><strong>II. Functions</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ziHx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ziHx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!ziHx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!ziHx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!ziHx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ziHx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:736155,&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://aieatingsoftware.substack.com/i/190446498?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.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_!ziHx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!ziHx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!ziHx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!ziHx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aced3c9-6037-42fc-bec6-b7bf5c4e7a31_1376x768.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>Programming languages evolve through abstraction.</p><p>Machine code. Assembly. C. Python. The jump from each level to the next isn&#8217;t just convenience. It&#8217;s a new way of thinking about what computation is.</p><p>I&#8217;ve been watching Claude Code evolve the same way in real time.</p><p>Skills are functions. Reusable knowledge blocks you can call by name. Before skills, you pasted the same context into every session. After skills, you have a callable library. That&#8217;s not a feature. That&#8217;s a programming primitive.</p><p>Agents are classes. Encapsulated behavior with identity. A browser agent isn&#8217;t just &#8220;Claude told to use a browser.&#8221; It&#8217;s a blueprint. It has domain knowledge, verification checklists, platform-specific mechanics. It instantiates with those capabilities. You&#8217;re not prompting. You&#8217;re instantiating an object.</p><p>/loop is an event loop.</p><p>And event loops are what separate programs that run from programs that run continuously. Threads. Async execution. Recurring cognition. The thing that makes software feel alive rather than responsive.</p><p>When Claude Code shipped /loop, it shipped the primitive that takes AI from &#8220;thing you call&#8221; to &#8220;thing that runs.&#8221;</p><h2><strong>III. Recursion</strong></h2><p>I didn&#8217;t get there immediately.</p><p>My first instinct with /loop was the obvious one: set recurring tasks. &#8220;Every hour, check my ASO metrics.&#8221; Useful. But small. That&#8217;s using an event loop to replace a cron job. You can do that. You&#8217;d be missing the point.</p><p>The question that changed my frame was: &#8220;If I had a full-time ASO Atlas, what would he be doing?&#8221;</p><p>Not &#8220;what tasks do I need to automate.&#8221; What would a full-time operator actually do all day?</p><p>That question turned a feature decision into a staffing decision. And the answer looked completely different.</p><p>A watchdog sees snapshots. A full-time operator sees trajectories. A watchdog fires when something crosses a threshold. An operator notices when something has been drifting for three days. Those are not the same job.</p><p>So I built two layers.</p><p>Layer one: data persistence. Background processes that collect and store, no decisions, no actions. Just accumulation. This is the operator reading reports, taking notes, building context.</p><p>Layer two: analysis operators. Five distinct roles, each running at its own cadence. One tracking keyword ranking trajectories over days. One monitoring spend efficiency across campaigns. One watching install patterns for anomalies. Each with its own job, its own cadence, its own scope.</p><p>That&#8217;s not a cron system. That&#8217;s a staff.</p><h2><strong>IV. Runtime</strong></h2><p>The phrase I keep coming back to is: summoned consciousness versus ambient employee.</p><p>For most of AI&#8217;s history with tools like this, you summon. You open a session, you ask, you get. The intelligence exists because you invoked it. It&#8217;s a genie. Extraordinarily capable, but only when the lamp is rubbed.</p><p>Ambient is different. Ambient means the intelligence is present whether you&#8217;re watching or not. It&#8217;s tracking things. Building context. Noticing drift. When you do show up, it has longitudinal data, not just a snapshot. It&#8217;s been doing the work.</p><p>This isn&#8217;t just a nicer UX. It&#8217;s a different relationship to the system.</p><p>I run RenovateAI, an AI-powered home design product. 10M renders shipped. 70K new users a month. Two founders. No VC. I have more data than I have attention to process it. The gap between what&#8217;s happening in our ASO metrics and what I know about what&#8217;s happening has always been the constraint. Not the data. My attention.</p><p>An ambient employee doesn&#8217;t fix that by giving me better reports. It fixes it by doing the watching I can&#8217;t do. And briefing me on what moved, and why, and what it&#8217;s been trending toward. That&#8217;s a different answer to the same problem.</p><h2><strong><br>V. The Language Is Still Evolving</strong></h2><p>I want to be honest about where we are.</p><p>This feature is two days old. I&#8217;ve had my hands on it for forty-eight hours. The architecture I built works, but it&#8217;s first-draft. The community hasn&#8217;t caught up to what /loop actually is yet. Most people will use it to set reminders. That&#8217;s fine. Assembly programmers used to write operating systems in machine code.</p><p>The abstractions will compound. /loop today is a raw event loop. Someone will build a higher-level scheduling system on top of it. Then something else on top of that. This is how programming languages evolve.</p><p>What I&#8217;m confident about: the primitive is real. The shift from &#8220;thing you summon&#8221; to &#8220;thing that runs&#8221; is a categorical change in what AI-powered software can be. Not just smarter tools. Not just faster automation. Ambient cognition that&#8217;s present in your systems the way a good employee is present. Continuously, contextually, without being explicitly invoked.</p><p>That&#8217;s AI eating software in the most literal sense. Not replacing the software. Becoming the runtime.</p><div><hr></div><p>The question I keep sitting with: what does staffing decisions look like when the staff is AI?</p><p>Not &#8220;what tasks do I automate.&#8221; What roles does the system need to function continuously without me? What cadences serve each role? What does the handoff look like when I do show up?</p><p>Those are product design questions. They&#8217;re also, weirdly, management questions. And I didn&#8217;t expect to be asking management questions about my code.</p><p>But here we are.</p><div><hr></div><p><em><a href="https://www.linkedin.com/in/sidsarasvati/">Sid Sarasvati</a> is building <a href="https://renovateai.app">Renovate AI</a> and writing about what it&#8217;s actually like to use AI to build AI products. MULTIPLEX is his personal cognitive architecture for doing that at speed.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</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><item><title><![CDATA[The Great Software Extinction: Why AI Is About to Change Everything You Know About Tech]]></title><description><![CDATA[From self-driving cars to AI composers: Inside NVIDIA CEO's bold prediction about the end of traditional software - and what it means for your future]]></description><link>https://aieatingsoftware.com/p/the-great-software-extinction-why</link><guid isPermaLink="false">https://aieatingsoftware.com/p/the-great-software-extinction-why</guid><dc:creator><![CDATA[Sid Sarasvati]]></dc:creator><pubDate>Tue, 29 Oct 2024 21:55:48 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/150909424/ab0a9a54cbbdc05ca343d6264ade628b.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><em><strong>"Software is eating the world, but AI is going to eat software."</strong></em></p><p>This bold prediction from Jensen Huang, NVIDIA's CEO, isn't just another tech soundbite &#8211; it's a glimpse into our rapidly approaching future. In an eye-opening interview with MIT Technology Review, Huang revealed why we're just at the beginning of an AI revolution: <em>"Very few lines of code in the enterprises and industries all over the world use AI today. It's quite pervasive in Internet service companies, particularly two or three of them. But there's a whole bunch of others in tech and other industries that are trying to catch up."</em></p><p><strong>The AI Revolution Is Already Here:</strong></p><p>In healthcare, the transformation is already underway. As Huang explains, <em>"Health information is messy and unstructured, but now computers can understand it to augment doctors' diagnoses and predictions."</em> This isn't just theory &#8211; companies like Arterys have already received FDA approval for their AI-powered cardiac imaging technology.</p><p><strong>The Road to Self-Driving Future:</strong></p><p>The automotive industry stands at the forefront of this revolution. NVIDIA's technology is already powering Tesla's Autopilot through their Drive PX 2 computer. But the journey to full autonomy raises fascinating questions. As Huang acknowledges, <em>"The power and promise of this end-to-end approach is very enticing. We really believe that long-term, the way AI will drive is similar to the way humans drive&#8212;we don't break the problem down into objects and vision and localization and planning."</em></p><p><strong>Beyond Moore's Law:</strong></p><p>While traditional computing faces physical limitations, NVIDIA sees a different path forward. Huang reveals, <em>"Right now we're recapturing the inefficiencies of CPUs and software into our more specialized GPUs. My sense is we'll continue to benefit from that for a couple of decades."</em></p><p><strong>At Trial and Error, We're Already Living This Future:</strong></p><ul><li><p><strong><a href="https://renovateai.app">Renovate AI</a></strong>: Our platform demonstrates how AI is revolutionizing home renovation, making sophisticated design and virtual staging accessible to everyone.</p></li><li><p><strong><a href="https://voxapp.ai">Vox AI</a></strong>: We're pushing the boundaries of what's possible in music creation, showing how AI can enhance rather than replace human creativity.</p></li></ul><p><strong>The Challenges Ahead:</strong></p><p>While the potential is enormous, important questions remain:</p><ul><li><p>How do we ensure AI enhances rather than stifles human creativity?</p></li><li><p>What are the ethical implications of AI-generated content?</p></li><li><p>How do we address the inevitable workforce transitions?</p></li></ul><p><strong>The Path Forward:</strong></p><p>As Huang puts it, this is just the beginning. NVIDIA is steering their <em>"two and a half billion dollar R&amp;D budget into deep learning"</em> and making their architecture available <em>"everywhere: in PCs, in servers, in the cloud, in cars, in robots."</em></p><p><strong>Join the Conversation:</strong> The AI revolution isn't coming &#8211; it's here. As early adopters and innovators, we have the opportunity to shape how this technology transforms our world. Subscribe to stay ahead of these changes and be part of the conversation shaping our collective future.</p><p><em>Are you ready to be part of this transformation?</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://aieatingsoftware.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">Thanks for reading AI Eating Software! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>