<?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[Digital Thoughts]]></title><description><![CDATA[Practical AI insights from an e-commerce manager who builds agents at night]]></description><link>https://thoughts.jock.pl</link><image><url>https://substackcdn.com/image/fetch/$s_!5rgY!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9451e031-c31d-4140-8cc4-5bd048d66461_1024x1024.png</url><title>Digital Thoughts</title><link>https://thoughts.jock.pl</link></image><generator>Substack</generator><lastBuildDate>Mon, 06 Apr 2026 10:27:10 GMT</lastBuildDate><atom:link href="https://thoughts.jock.pl/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Paweł Józefiak]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[substack@jock.pl]]></webMaster><itunes:owner><itunes:email><![CDATA[substack@jock.pl]]></itunes:email><itunes:name><![CDATA[Pawel Jozefiak]]></itunes:name></itunes:owner><itunes:author><![CDATA[Pawel Jozefiak]]></itunes:author><googleplay:owner><![CDATA[substack@jock.pl]]></googleplay:owner><googleplay:email><![CDATA[substack@jock.pl]]></googleplay:email><googleplay:author><![CDATA[Pawel Jozefiak]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[My $600 Mac Mini Runs a 35B AI Model. Yesterday I Swapped Its Brain.]]></title><description><![CDATA[Three tiers of local inference on 16GB RAM. Qwen to Gemma. Zero downtime.]]></description><link>https://thoughts.jock.pl/p/local-llm-35b-mac-mini-gemma-swap-production-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/local-llm-35b-mac-mini-gemma-swap-production-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Fri, 03 Apr 2026 09:47:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1uDk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.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_!1uDk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1uDk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!1uDk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!1uDk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!1uDk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1uDk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4930092,&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://thoughts.jock.pl/i/193050507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.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_!1uDk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!1uDk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!1uDk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!1uDk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff71c5c-a1ef-43f5-b823-8b40acfaba3e_2048x2048.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>A few weeks ago I wrote about <a href="https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment">running Qwen on my MacBook and iPhone</a>. That was the first experiment. Local models doing real work on normal hardware. The gap between local and cloud was closing fast, and I wanted to push it further.</p><p>So I did. I <a href="https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026">moved everything to a headless Mac Mini M4</a>, the base $599 model with 16GB of RAM. Started with smaller Qwen models for message classification and context compression. Then I found a way to run a 35 billion parameter model on 16 gigs. 17 tokens per second. Zero swap. Everyone said you need 32GB minimum. I&#8217;ve been running it for about a week now.</p><p>Yesterday Google dropped Gemma 4 under Apache 2.0. Within hours I benchmarked it against my Qwen setup. Classification went from 8.5 seconds to 1.9 seconds. By evening the swap was done. Five files changed.</p><p>This is all of it. How I fit a 35B model on a $600 machine, what local models actually do when you&#8217;re running an <a href="https://thoughts.jock.pl/p/wiz-personal-ai-agent-claude-code-2026">AI agent 24/7</a> (spoiler: it&#8217;s way more than classification), how model routing works across three tiers, and why Gemma 4 made me swap the brain overnight.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eS1h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eS1h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png 424w, https://substackcdn.com/image/fetch/$s_!eS1h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png 848w, https://substackcdn.com/image/fetch/$s_!eS1h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png 1272w, https://substackcdn.com/image/fetch/$s_!eS1h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eS1h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png" width="714" height="192" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:192,&quot;width&quot;:714,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:165337,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thoughts.jock.pl/i/193050507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.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_!eS1h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png 424w, https://substackcdn.com/image/fetch/$s_!eS1h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png 848w, https://substackcdn.com/image/fetch/$s_!eS1h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png 1272w, https://substackcdn.com/image/fetch/$s_!eS1h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ad6ac6-a9e4-4107-af12-dc98f5abd963_714x192.png 1456w" sizes="100vw"></picture><div></div></div></a><figcaption class="image-caption">&#8220;Small LLM setup&#8221; for quick work</figcaption></figure></div><div><hr></div><h2>Why I Needed Local AI (It&#8217;s More Than You&#8217;d Think)</h2><p>My Mac Mini runs as a headless AI automation server. iMessages, emails, scheduled nightshift tasks, 35+ specialized skills. The brain is Claude Code. Claude is brilliant. Claude also has usage limits.</p><p>I pay for Claude Max. It&#8217;s not cheap. And every wake-up burns through that subscription. I needed a way to handle the routine work locally. Free. On the machine itself.</p><p>At first I thought this would just be message classification. Is this a question or a greeting? Route the boring stuff away from Claude. That&#8217;s how it started.</p><p>Turns out that was maybe 20% of what local models can do. Here&#8217;s what actually runs locally now:</p><ul><li><p><strong>Message triage</strong>: classifying every incoming message (question, request, idea, greeting, FYI) and assessing urgency. Under 2 seconds per message.</p></li><li><p><strong>Context compression</strong>: when someone sends a 500-word message, the local model compresses it to 30 words before Claude sees it. Same understanding, fewer tokens.</p></li><li><p><strong>Signal compression</strong>: my agent collects signals all day long (errors, metrics, task outcomes, all kinds of stuff). Before the <a href="https://thoughts.jock.pl/p/ai-agent-runs-overnight-setup-guide-2026">nightshift planning session</a>, the 35B compresses the entire day into a dense summary. Saves roughly 15x in tokens for the Opus planning call. That&#8217;s a lot of money over a month.</p></li><li><p><strong>Email preprocessing</strong>: same triage pattern applied to incoming emails before deciding whether to spin up a full Claude session.</p></li><li><p><strong>Memory consolidation</strong>: the agent accumulates daily notes and context. A local model clusters related entries and merges them. Like defragmenting a hard drive, but for the agent&#8217;s memory.</p></li><li><p><strong>Fallback</strong>: when Claude is rate-limited or down at 3am, the local 35B handles operational tasks. Not Claude-level reasoning, but functional.</p></li></ul><p>The triage classification is just one example. The local models touch nearly everything the agent does. The result: roughly <a href="https://thoughts.jock.pl/p/claude-model-optimization-opus-haiku-ai-agent-costs-2026">30-40% fewer Claude sessions</a> compared to routing everything through the API. My subscription lasts longer. And the agent responds faster for routine work because there&#8217;s no network round-trip.</p><div><hr></div><h2>Three Tiers, One $600 Machine</h2><p>Not every task needs the same model. Like, classifying &#8220;is this a question or just ok?&#8221; is a completely different thing than compressing an entire day of automation signals into a planning summary. So I built a routing system. Three local tiers plus the cloud.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BqrY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BqrY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.png 424w, https://substackcdn.com/image/fetch/$s_!BqrY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.png 848w, https://substackcdn.com/image/fetch/$s_!BqrY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.png 1272w, https://substackcdn.com/image/fetch/$s_!BqrY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BqrY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.png" width="798" height="369" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:369,&quot;width&quot;:798,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49365,&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://thoughts.jock.pl/i/193050507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.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_!BqrY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.png 424w, https://substackcdn.com/image/fetch/$s_!BqrY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.png 848w, https://substackcdn.com/image/fetch/$s_!BqrY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.png 1272w, https://substackcdn.com/image/fetch/$s_!BqrY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e77515c-afde-44dc-b8c2-23a49a715a1e_798x369.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>Why three tiers and not just one? A 2B model can tell you whether &#8220;What&#8217;s the status?&#8221; is a question or a greeting. But it can&#8217;t produce a useful 30-word summary of a 500-word message. And neither the 2B nor the 4.5B can do what the 35B does: compress an entire day of signals into a dense planning brief, or serve as a real fallback when Claude goes down. Different tools for different jobs.</p><p>The <strong>fast tier</strong> runs on every incoming message. Classifies the type (question, request, idea, greeting, FYI), assesses urgency. Under 2 seconds. If the message is a greeting or pure FYI, the agent skips Claude entirely. This one needs to be fast because it runs on every single message, all day.</p><p>The <strong>primary tier</strong> handles tasks where you need actual language understanding. Context compression is the main one: someone sends a long message, this model condenses it to 30 words before Claude sees it. It also handles things like Substack Notes generation as a fallback and the morning report AI summary. The 2.3B fast model can&#8217;t produce quality summaries. The 35B is overkill for this. The 4.5B sits in the sweet spot.</p><p>The <strong>heavy tier</strong> is where it gets interesting. The 35B does two things. It handles complex preprocessing (compressing the day&#8217;s automation signals before the <a href="https://thoughts.jock.pl/p/ai-agent-runs-overnight-setup-guide-2026">nightshift</a> Opus planning call, which saves roughly 15x in tokens). And it sits in the resilience chain as a Claude fallback. When Claude is rate-limited at 4am, the 35B handles health checks, error scanning, operational maintenance. Always marked as &#8220;[Local Fallback]&#8221; so I see the difference in the morning. But something functional beats nothing at 3am.</p><p>The triage routing for messages looks like this:</p><pre><code><code>1. Incoming message hits triage
2. Fast tier classifies (question/request/idea/greeting/fyi) + urgency
3. If greeting or fyi: skip Claude entirely
4. If long text: primary or heavy tier summarizes before Claude sees it
5. Prepend classification to Claude's prompt: "[Pre-classified: request, urgency: high]"
6. Claude skips its own analysis step = fewer tokens burned</code></code></pre><p>But message triage is just the entry point. The same models handle signal compression, email preprocessing, memory consolidation, fallback responses. The routing system is the foundation. The use cases keep growing, and that&#8217;s kind of the point.</p><p>Safety rules still matter. Messages mentioning money, deployment, publishing, or anything work-related always bypass local triage and go straight to Claude. Very short messages (under 20 characters) also skip triage because &#8220;yes&#8221; could be a standalone acknowledgment or an answer to a previous question. I learned that one the hard way when the triage classified &#8220;yes&#8221; as acknowledgment and skipped a real conversation reply.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Digital Thoughts is about testing and experiments. Some are messy, and I could be wrong many times. But it&#8217;s fun and if you like read about things that was done - consider becoming a subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>The 35B Trick (Your SSD Is the New GPU Memory)</h2><p>This is the part that shouldn&#8217;t work. I didn&#8217;t invent this. I came across a post on X where someone was running oversized models on consumer hardware using a specific flag in llama.cpp. That sent me down a rabbit hole.</p><p>Qwen 3.5 35B-A3B has 35 billion parameters. At standard precision, that&#8217;s way more than 16GB. My first attempt through Ollama loaded 26GB into memory on a 16GB machine. The system froze. 4.3 million swapouts. Timed out after 10 minutes without producing a single token. Dead.</p><p>Then I tried llama.cpp with one flag: <code>--mmap</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X75C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X75C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.png 424w, https://substackcdn.com/image/fetch/$s_!X75C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.png 848w, https://substackcdn.com/image/fetch/$s_!X75C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.png 1272w, https://substackcdn.com/image/fetch/$s_!X75C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X75C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.png" width="1456" height="689" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:689,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:122453,&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://thoughts.jock.pl/i/193050507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.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_!X75C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.png 424w, https://substackcdn.com/image/fetch/$s_!X75C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.png 848w, https://substackcdn.com/image/fetch/$s_!X75C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.png 1272w, https://substackcdn.com/image/fetch/$s_!X75C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80f9b17e-6dcf-4dd4-97d4-f02b3dabc5e1_2036x964.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><figcaption class="image-caption">This is only as represenatation. I am not using UI for these models as Mac Mini is running headless. </figcaption></figure></div><p>Same model. Same hardware. Same 16GB. Result: 17.3 tokens per second, 81% memory free, zero swap.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kTkV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kTkV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.png 424w, https://substackcdn.com/image/fetch/$s_!kTkV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.png 848w, https://substackcdn.com/image/fetch/$s_!kTkV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.png 1272w, https://substackcdn.com/image/fetch/$s_!kTkV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kTkV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.png" width="802" height="308" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:308,&quot;width&quot;:802,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32641,&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://thoughts.jock.pl/i/193050507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.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_!kTkV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.png 424w, https://substackcdn.com/image/fetch/$s_!kTkV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.png 848w, https://substackcdn.com/image/fetch/$s_!kTkV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.png 1272w, https://substackcdn.com/image/fetch/$s_!kTkV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d2ae84-740a-481d-b20d-ee6663b0923a_802x308.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>Why This Works</h3><p>Two things make this possible: the model architecture and how macOS handles files.</p><p>Qwen 3.5 35B-A3B is a Mixture of Experts (MoE) model. 35 billion parameters total, but only 3 billion are active per token. Like a building with 35 floors where any given task only needs to visit 3 of them. The rest sit empty. A router network inside the model decides which experts to activate for each token.</p><p>So what does <code>--mmap</code> do? Instead of loading the entire model file into RAM (which is what Ollama tried, and why it choked), llama.cpp memory-maps the file. The OS treats the model like a virtual address space backed by your SSD. It only pages in the weights that are actually needed:</p><ul><li><p>Shared layers (attention, embeddings, norms): stay resident in RAM, about 4-6 GB</p></li><li><p>Expert weights: paged from SSD only when that expert activates</p></li><li><p>90% of the model sits on your NVMe drive, untouched most of the time</p></li><li><p>The macOS page cache naturally caches recently used experts, so repeated patterns get faster</p></li></ul><p>None of this is new, by the way. Apple published a research paper called <a href="https://arxiv.org/abs/2312.11514">&#8220;LLM in a Flash&#8221;</a> back in December 2023 describing exactly this approach: use your SSD as an extension of available memory for LLM inference. The M4&#8217;s unified memory architecture helps too (no PCIe bottleneck between CPU and GPU memory, it&#8217;s all one shared pool). And the NVMe SSD in the Mac Mini is fast enough that paging weights on demand doesn&#8217;t bottleneck inference for MoE models where most weights are idle anyway.</p><p>The thing that actually surprised me? The 35B is <strong>faster</strong> than the old 9B model. 17.3 vs 12.6 tok/s decode. Even though it has 4x more total parameters, MoE means each token only computes through 3B parameters. Better quality weights, same compute budget. Bigger model, less work per token. I did not expect that.</p><p>I downloaded an aggressively quantized version (Unsloth&#8217;s UD-IQ3_XXS, 13GB on disk) and run it on llama.cpp alongside Ollama on a different port. Ollama handles the fast and primary tiers on port 11434. llama.cpp handles the heavy tier on port 8081. Both coexist on the same machine. Total disk for everything: about 22GB.</p><div><hr></div><h2>The Brain Swap (Qwen to Gemma)</h2><p>For about a week, everything ran on Qwen 3.5 across all tiers. It worked. Classification took about 8-9 seconds on the 4B model, summarization around 50 seconds on the 9B. Not blazing, but good enough for background preprocessing that doesn&#8217;t need instant responses. The system was stable. I was happy with it.</p><p>Then yesterday, Google released <a href="https://blog.google/innovation-and-ai/technology/developers-tools/gemma-4/">Gemma 4</a>.</p><p>Apache 2.0 license. That matters. Previous Gemma versions had usage restrictions and monthly active user limits. For something running 24/7 as production infrastructure, license restrictions are a real concern. Apache 2.0 means no strings.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9G6j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9G6j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.png 424w, https://substackcdn.com/image/fetch/$s_!9G6j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.png 848w, https://substackcdn.com/image/fetch/$s_!9G6j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!9G6j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9G6j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.png" width="1456" height="1187" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1187,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:383966,&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://thoughts.jock.pl/i/193050507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.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_!9G6j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.png 424w, https://substackcdn.com/image/fetch/$s_!9G6j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.png 848w, https://substackcdn.com/image/fetch/$s_!9G6j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!9G6j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2351c93-f2a8-4b8a-9a5d-3b4993f7b034_1632x1330.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><figcaption class="image-caption">Only as example that Mac Mini can run Gemma 4.</figcaption></figure></div><p>The benchmarks were wild. Gemma 4&#8217;s models scored 88-89% on AIME 2026 math. The previous Gemma 3 scored 20.8%. That&#8217;s not incremental improvement. That&#8217;s a different model family wearing the same name.</p><p>But the thing that really got me: multimodal on small models. The E2B (2.3B effective) and E4B (4.5B effective) can process images and audio natively. My Qwen setup was text-only. Voice messages via iMessage? Had to skip them entirely. Screenshots sent for context? Invisible to the triage layer. With Gemma 4, that changes. That&#8217;s a real capability gap closed, not just a speed improvement.</p><p>I wasn&#8217;t going to swap production models based on a marketing page though. Wrote a benchmark script, ran 10 classification prompts and 3 summarization tasks against each model under identical conditions.</p><h3>Classification (10 test messages)</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oIWb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oIWb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png 424w, https://substackcdn.com/image/fetch/$s_!oIWb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png 848w, https://substackcdn.com/image/fetch/$s_!oIWb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png 1272w, https://substackcdn.com/image/fetch/$s_!oIWb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oIWb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png" width="800" height="213" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:213,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20810,&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://thoughts.jock.pl/i/193050507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.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_!oIWb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png 424w, https://substackcdn.com/image/fetch/$s_!oIWb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png 848w, https://substackcdn.com/image/fetch/$s_!oIWb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png 1272w, https://substackcdn.com/image/fetch/$s_!oIWb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0908176-4c04-41e3-9bcc-7cf5033475e4_800x213.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Summarization (3 test texts)</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vfxa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vfxa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png 424w, https://substackcdn.com/image/fetch/$s_!vfxa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png 848w, https://substackcdn.com/image/fetch/$s_!vfxa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png 1272w, https://substackcdn.com/image/fetch/$s_!vfxa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vfxa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png" width="800" height="208" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:208,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20378,&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://thoughts.jock.pl/i/193050507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.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_!vfxa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png 424w, https://substackcdn.com/image/fetch/$s_!vfxa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png 848w, https://substackcdn.com/image/fetch/$s_!vfxa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png 1272w, https://substackcdn.com/image/fetch/$s_!vfxa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eb4b6d3-6375-487c-b50b-280e3bd58f00_800x208.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>4.4x faster classification. 1.8x faster summarization. The speed difference is what sold me. For a triage system that runs on every incoming message, 1.9 seconds vs 8.5 seconds is the difference between &#8220;barely noticeable&#8221; and &#8220;why is this taking so long.&#8221;</p><p>The accuracy gap (70% vs 80%) turned out to be mostly gray areas. Both models classified &#8220;What&#8217;s the status of the nightshift?&#8221; as <code>status_check</code> instead of <code>question</code>. Honestly, <code>status_check</code> is a better answer. One genuine miss: Gemma said &#8220;observation&#8221; for a message where &#8220;fyi&#8221; would&#8217;ve been correct. It invented a category that wasn&#8217;t in the allowed list. Edge case I can fix with better prompting.</p><p>The actual swap was anticlimactic. My <a href="https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture">architecture centralizes model names</a> in one file. Two constants changed, three files with hardcoded model strings updated. Done.</p><pre><code><code># automation/lib/local_llm.py
MODEL_PRIMARY = "gemma4:e4b"   # was "qwen3.5:9b"
MODEL_FAST = "gemma4:e2b"      # was "qwen3.5:4b"</code></code></pre><p>The heavy tier stays on Qwen 35B via llama.cpp. Deliberately. The fast and primary tiers run through Ollama, which had Gemma 4 support on day one (I upgraded Ollama from 0.19 to 0.20 for it). The heavy tier runs through llama.cpp with the mmap trick. Swapping that to Gemma&#8217;s 26B MoE variant means testing a different quantization, different mmap behavior, different inference characteristics. I don&#8217;t change two things at once in production infrastructure. Qwen 35B works. It stays until I&#8217;ve properly benchmarked the Gemma 26B alternative.</p><p>Old Qwen models stay on disk as rollback. If anything breaks, reverting the fast and primary tiers is a two-line change.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Digital Thoughts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>The Thinking Mode Trap</h2><p>Both Qwen and Gemma have a &#8220;thinking&#8221; mode. The model generates an extensive chain-of-thought before answering. For complex analysis, this is great. For classification, it&#8217;s a disaster.</p><p>With thinking enabled, a simple &#8220;is this message a question or a request?&#8221; took 30+ seconds. The model generated 500 tokens of internal reasoning (&#8221;Let me analyze the intent of this message. The user is asking about...&#8221;) and then said &#8220;request.&#8221; All that thinking for a one-word answer. I was watching this happen in real time and just... no.</p><p>One parameter: <code>think: false</code> in the Ollama API call. Classification went from 30 seconds to under 1 second. Same accuracy. 30x faster. This was the single biggest optimization in the whole setup, and I almost missed it.</p><p>Works the same way for both Qwen and Gemma:</p><pre><code><code># Qwen classification (fast, thinking disabled)
curl localhost:11434/api/chat -d '{
  "model": "qwen3.5:4b",
  "messages": [{"role": "user", "content": "Classify: question/request/greeting"}],
  "think": false,
  "options": {"num_ctx": 4096}
}'

# Gemma classification (same API, same parameter)
curl localhost:11434/api/chat -d '{
  "model": "gemma4:e2b",
  "messages": [{"role": "user", "content": "Classify: question/request/greeting"}],
  "think": false,
  "options": {"num_ctx": 4096}
}'</code></code></pre><p>Same parameter, same behavior, no code changes when I swapped models. For the heavy tier (llama.cpp on port 8081), thinking is controlled via the system prompt instead, but same principle: disable it for fast tasks, enable it when you actually need reasoning.</p><p>People asked about context windows on <a href="https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment">my first local LLM post</a>. Fair question. I push them as far as the hardware allows. Classification gets 4K (it doesn&#8217;t need more, most messages are under 200 tokens). Summarization gets 32K on the primary tier. Document analysis gets up to 64K on the fast tier. The heavy 35B gets 16K, which is enough for compressing a full day of signals or handling a long fallback conversation. The mmap trick handles the model weights, but the KV cache (the memory the model uses to &#8220;remember&#8221; the conversation) still lives in RAM. With the model weights at 4-6 GB and the KV cache for 16K context, there&#8217;s still plenty of room on 16GB. It&#8217;s not a million tokens. That&#8217;s not happening on this hardware. But for what these models actually do (triage, compression, summarization, fallback), 16-64K is more than enough.</p><div><hr></div><h2>The Resilience Chain (When Claude Goes Down)</h2><p>The local models aren&#8217;t just about cost. They&#8217;re about uptime.</p><p>My <a href="https://thoughts.jock.pl/p/how-i-taught-ai-agent-to-think-ep2">agent&#8217;s resilience chain</a> works like a waterfall. If the top tier fails, it cascades down:</p><pre><code><code>Claude Sonnet -&gt; retry -&gt; Haiku -&gt; Local 35B -&gt; Local Primary -&gt; OpenRouter -&gt; Queue</code></code></pre><p>Like backup generators. Main power (Claude Sonnet) goes out. Building tries the secondary generator (Haiku). If that&#8217;s down too, local generators kick in. Not as powerful, but they&#8217;re on-site, zero-cost, and they don&#8217;t depend on anyone else&#8217;s infrastructure staying online. Only if everything local fails does the system reach for an external API (OpenRouter). And if even that fails, the message goes into a queue for later.</p><p>The system tracks cooldowns per model too. If Claude hits a rate limit, it records how long to wait and skips straight to the next tier on subsequent requests. No point retrying something you know will fail. Once the OAuth token expired at 2am and the system figured out that all Claude tiers would fail with the same expired token, so it skipped straight to the local fallback. Saved minutes of retries that were guaranteed to fail. I only found out in the morning when I read the logs. It just handled it.</p><p>My agent runs overnight. <a href="https://thoughts.jock.pl/p/ai-agent-runs-overnight-setup-guide-2026">Nightshift tasks</a> execute while I sleep. If Claude is rate-limited at 4am, the local 35B handles operational checks, health monitoring, error registry scans. Responses are clearly marked &#8220;[Local Fallback]&#8221; so I see the difference in the morning. Not Claude-level reasoning, but functional. And I&#8217;d rather wake up to a degraded response than a silent failure.</p><div><hr></div><h2>The Setup (If You Want to Try)</h2><p>Hardware: Mac Mini M4, base model, $599, 16GB unified memory. Any Apple Silicon Mac with 16GB will work. The M4&#8217;s NVMe SSD speed helps for the mmap approach, but M1/M2/M3 work too.</p><h3>Option A: Gemma 4 (recommended, what I run now)</h3><pre><code><code># Step 1: Install Ollama (0.20+ required for Gemma 4)
brew install ollama

# Step 2: Pull Gemma 4 models
ollama pull gemma4:e2b        # Fast tier (7.2 GB, 2.3B effective, vision+audio)
ollama pull gemma4:e4b        # Primary tier (9.6 GB, 4.5B effective)
ollama pull nomic-embed-text  # Local embeddings (274 MB, optional)

# Step 3: Set environment for 16GB systems
export OLLAMA_FLASH_ATTENTION=1
export OLLAMA_KV_CACHE_TYPE=q8_0
export OLLAMA_KEEP_ALIVE=10m
export OLLAMA_MAX_LOADED_MODELS=1</code></code></pre><h3>Option B: Qwen 3.5 (what I started with, still solid)</h3><pre><code><code># Same Ollama install, different models
ollama pull qwen3.5:4b        # Fast tier (3.4 GB)
ollama pull qwen3.5:9b        # Primary tier (~6 GB)</code></code></pre><h3>The 35B Heavy Tier (works with either Option A or B)</h3><pre><code><code># Step 4: Install llama.cpp for the big model
brew install llama.cpp

# Step 5: Download Qwen 3.5 35B (13 GB quantized)
pip3 install huggingface-hub
python3 -c "from huggingface_hub import hf_hub_download; \
  hf_hub_download('unsloth/Qwen3.5-35B-A3B-GGUF', \
  'Qwen3.5-35B-A3B-UD-IQ3_XXS.gguf', \
  local_dir='~/.local/share/llama-models')"

# Step 6: Start llama-server with the magic flag
llama-server \
  --model ~/.local/share/llama-models/Qwen3.5-35B-A3B-UD-IQ3_XXS.gguf \
  --port 8081 --ctx-size 16384 --n-gpu-layers 0 --mmap \
  --flash-attn on --threads 8</code></code></pre><p>Some things that tripped me up:</p><p><code>OLLAMA_MAX_LOADED_MODELS=1</code> is critical on 16GB. Without it, Ollama tries to keep both the fast and primary models in memory at once and the system just dies. One model at a time, 10-minute idle timeout, then it unloads and frees your RAM.</p><p><code>--n-gpu-layers 0</code> on the llama.cpp command looks wrong. On Apple Silicon you&#8217;d normally offload layers to the GPU. But with mmap, we want the OS to manage the paging. Setting GPU layers to 0 means everything goes through the mmap path. The M4&#8217;s unified memory means &#8220;GPU&#8221; and &#8220;CPU&#8221; are reading from the same pool anyway, so it doesn&#8217;t really matter.</p><p>Ollama and llama.cpp coexist on different ports (11434 and 8081). The heavy tier (llama.cpp) is on-demand: I start it when needed and stop it when not. The fast and primary tiers (Ollama) run as a LaunchAgent, always on, auto-restarting. Two separate inference servers on one Mac Mini. Works fine.</p><div><hr></div><h2>What I Actually Learned</h2><p>Local models are not Claude. They can&#8217;t chain multi-step tool calls, refactor code, or make creative decisions. <a href="https://thoughts.jock.pl/p/claude-cowork-dispatch-computer-use-honest-agent-review-2026">Claude Code does this because Anthropic spent years on tool calling</a>. Local models aren&#8217;t there yet. But that&#8217;s fine. I don&#8217;t need them to be Claude. I need them to classify messages in 2 seconds and compress context before Claude sees it.</p><p>The mmap thing is probably the most underappreciated trick in this whole setup. One flag. The difference between &#8220;impossible&#8221; and &#8220;17 tok/s with zero swap.&#8221; If you have Apple Silicon and an NVMe SSD, you can run models much larger than your RAM would suggest. I&#8217;m running it daily. It just works.</p><p>Centralizing model names saved me. I had three files with hardcoded <code>"qwen3.5:9b"</code>. Found them all during the swap. If I&#8217;d had ten files like that, a quick migration would&#8217;ve been a 2-hour headache. Lesson learned (although honestly I should have known better).</p><p>I benchmarked before swapping, and I&#8217;m glad I did. Google&#8217;s marketing said Gemma 4 was better. The benchmarks confirmed speed gains but also showed a slight accuracy regression. Speed got better, instruction following got slightly worse. That&#8217;s a tradeoff I chose to accept, not one that surprised me in production.</p><p>One more thing: Gemma E2B is 7.2GB on disk (vs Qwen 4B at 3.4GB). Looks huge. But that&#8217;s because it bundles vision and audio encoders. Loaded RAM is nearly identical. I almost rejected it based on download size. Would have been a mistake.</p><p>And the thinking mode thing. Disable it for fast tasks. 30x speed difference for classification. This single setting is the difference between a usable triage system and a painfully slow one. Test it. Seriously.</p><div><hr></div><h2>Where This Is Going</h2><p>Local models are real infrastructure now. Not toys. Production preprocessing, signal compression, memory consolidation, fallback. Running 24/7 on a $600 machine.</p><p>A year ago, useful local inference meant a $3,000 GPU. Now a base Mac Mini handles three tiers. The models keep getting smaller and faster. Gemma 4&#8217;s E2B classifies messages in under 2 seconds with 2.3 billion effective parameters. And it can see images and process audio. For my setup that previously had to skip voice messages entirely, that alone was worth the swap.</p><p>Next I want to test the Gemma 4 26B MoE variant (26 billion total, 3.8 billion active per token) as a replacement for the Qwen 35B heavy tier. If the GGUF works well with llama.cpp and mmap, that&#8217;s the full stack on Gemma. One model family for everything.</p><p>If you&#8217;re building any kind of <a href="https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions">AI agent system</a>, try this pattern. Local for the frequent and cheap. Cloud for the complex and expensive. Cost savings compound. Reliability improves. You stop depending on any single provider staying online.</p><p>Gemma for preprocessing. Claude for thinking. Both got better at their jobs by not trying to do the other&#8217;s.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/local-llm-35b-mac-mini-gemma-swap-production-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Digital Thoughts! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/local-llm-35b-mac-mini-gemma-swap-production-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/p/local-llm-35b-mac-mini-gemma-swap-production-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Claude Code’s Source Got Leaked. Here’s What’s Actually Worth Learning.]]></title><description><![CDATA[512,000 lines of TypeScript. 44 feature flags. Most of the commentary focuses on the drama.]]></description><link>https://thoughts.jock.pl/p/claude-code-source-leak-what-to-learn-ai-agents-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/claude-code-source-leak-what-to-learn-ai-agents-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Wed, 01 Apr 2026 12:05:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lExI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.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_!lExI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lExI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!lExI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!lExI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!lExI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lExI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4652185,&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://thoughts.jock.pl/i/192836731?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.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_!lExI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!lExI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!lExI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!lExI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb8d2c1a-edf7-408c-982e-0ce097fefb35_2048x2048.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 spent a night reading the code and building things from it. Here&#8217;s what matters if you&#8217;re building AI agent.</p><div><hr></div><h2>What actually leaked (and what didn&#8217;t)</h2><p>On March 31, 2026, a <a href="https://x.com/Fried_rice/status/2038894956459290963">security researcher noticed something odd about the Claude Code npm package</a>. Version 2.1.88 shipped with a 59.8MB source map file. Source maps are debug artifacts that Bun (the runtime Claude Code uses) generates by default. Someone forgot to add <code>*.map</code> to the <code>.npmignore</code> file. That&#8217;s it. A missing line in a config file.</p><p>The source map referenced unobfuscated TypeScript files on Anthropic&#8217;s Cloudflare R2 bucket. All downloadable. About 1,900 files. 512,000 lines of code. Within hours, the codebase was mirrored across GitHub, reaching 84,000+ stars in under two hours. The fastest-growing repo in GitHub history, for a codebase that wasn&#8217;t supposed to be public.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!prry!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!prry!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png 424w, https://substackcdn.com/image/fetch/$s_!prry!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png 848w, https://substackcdn.com/image/fetch/$s_!prry!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png 1272w, https://substackcdn.com/image/fetch/$s_!prry!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!prry!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png" width="739" height="707" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:707,&quot;width&quot;:739,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95639,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thoughts.jock.pl/i/192836731?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.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_!prry!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png 424w, https://substackcdn.com/image/fetch/$s_!prry!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png 848w, https://substackcdn.com/image/fetch/$s_!prry!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png 1272w, https://substackcdn.com/image/fetch/$s_!prry!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9efaadb4-64fe-47ea-ab53-6d67558708ab_739x707.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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 class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://wiz.jock.pl/experiments/claude-code-unpacked/&quot;,&quot;text&quot;:&quot;Interactive data&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://wiz.jock.pl/experiments/claude-code-unpacked/"><span>Interactive data</span></a></p><p>Let me clear up a few things I&#8217;ve seen people get wrong about this.</p><p><strong>No customer data was exposed.</strong> This was source code for the CLI tool, not a database breach. No credentials, no user conversations, no API keys. Anthropic confirmed it was a packaging error.</p><p><strong>No model weights were leaked.</strong> The code is the software harness around Claude, not the LLM itself. You can&#8217;t run your own Claude from this. What you get is the orchestration layer: how Claude Code manages tools, memory, context, permissions, and multi-agent coordination.</p><p><strong>This isn&#8217;t a security breach in the traditional sense.</strong> It&#8217;s a build artifact that should have been excluded from the npm package. Embarrassing for Anthropic&#8217;s build pipeline, but the kind of mistake any team shipping fast could make. The irony is that the leaked code includes a system called &#8220;Undercover Mode&#8221; specifically designed to prevent Anthropic employees from accidentally leaking internal details into public repos. It leaked along with everything else.</p><p><strong>It wasn&#8217;t intentional.</strong> I know people are debating this because the timing aligns with April 1 and because Anthropic had a rough PR week (cease-and-desist against the OpenCode project). But the evidence is clear: they&#8217;ve been mass-sending DMCA takedowns to GitHub repos, they pulled the npm package, and their Cloudflare R2 bucket was taken down. You don&#8217;t do that with a planned release. The strategic roadmap exposure is too costly, especially during IPO preparation. Theo from t3.gg put it well: &#8220;if you think this was intentional, I have a couple bridges for sale.&#8221;</p><p>One theory that makes sense: Anthropic was investigating rate limit issues in Claude Code. Multiple employees had posted about seeing higher rate limit hits than expected. In their attempts to get better error logs from production builds, they may have included the source maps for debugging. Then forgot to exclude them from the npm package. That tracks with how these things usually happen: a debug change that nobody remembers to undo.</p><p><strong>A warning if you&#8217;re thinking of cloning the leaked repo:</strong> The source references internal workspace packages that don&#8217;t exist on npm. Someone already registered those package names with a disposable email. If you clone and blindly run <code>npm install</code>, you could be pulling malicious code. Be careful.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Digital Thoughts is all about experiments, testing and AI. If you like that &#8594; consider subscribing. </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>What&#8217;s inside and why it matters</h2><p>I&#8217;ve been <a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">building my own AI agent</a> for months now. It runs 24/7 on a <a href="https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026">dedicated Mac Mini</a>. So when this leak dropped, I didn&#8217;t read it for the drama. I read it to learn. I spent a night going through the architecture, comparing it to what I&#8217;ve built, and pulling out anything useful.</p><p>Here&#8217;s what matters if you&#8217;re building AI agents or want to understand where this technology is actually going.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-gzI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-gzI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.png 424w, https://substackcdn.com/image/fetch/$s_!-gzI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.png 848w, https://substackcdn.com/image/fetch/$s_!-gzI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.png 1272w, https://substackcdn.com/image/fetch/$s_!-gzI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-gzI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.png" width="797" height="783" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c07d0528-861b-4377-a7c2-f7fa1d015452_797x783.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:783,&quot;width&quot;:797,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119896,&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://thoughts.jock.pl/i/192836731?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.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_!-gzI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.png 424w, https://substackcdn.com/image/fetch/$s_!-gzI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.png 848w, https://substackcdn.com/image/fetch/$s_!-gzI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.png 1272w, https://substackcdn.com/image/fetch/$s_!-gzI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc07d0528-861b-4377-a7c2-f7fa1d015452_797x783.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>The three-layer memory system</h3><p>This is probably the most important architectural discovery in the leak. Claude Code uses a memory system with three layers:</p><ol><li><p><strong>Core index (MEMORY.md):</strong> A lightweight file of pointers, always loaded into context. Each entry is under 150 characters. It&#8217;s an index, not the memory itself.</p></li><li><p><strong>Topic files:</strong> Detailed knowledge distributed across separate files, fetched on-demand when the index suggests they&#8217;re relevant.</p></li><li><p><strong>Raw transcripts:</strong> Never re-read in full. Only grep&#8217;d for specific identifiers when needed.</p></li></ol><p>The key insight is what they call &#8220;skeptical memory.&#8221; The agent treats its own memory as a hint, not a fact. Before acting on something it remembers, it verifies against the actual codebase. Memory says a function exists? Check first. Memory says a file is at this path? Verify before using it.</p><p>This solves context entropy, the gradual degradation of agent performance in long-running sessions. Most agents get worse the longer they run because their context fills up with stale observations. This architecture keeps the active context small (just the index) and only loads what&#8217;s needed.</p><p>I&#8217;ve been running a <a href="https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture">similar pattern</a> with working memory that rolls over on a schedule and a permanent index that persists across sessions. The leak confirmed this is the right approach. The verification step is something I&#8217;m now adding to my own system.</p><h3>Memory consolidation during idle time (autoDream)</h3><p>The leak includes a system called <code>autoDream</code> in the <code>services/autoDream/</code> directory. It&#8217;s a background memory consolidation engine that runs as a forked subagent with read-only access to the project. Three gates must pass before it runs: 24 hours since the last run, at least 5 sessions completed, and a consolidation lock must be available.</p><p>When triggered, it runs four phases: orient (scan memory directory), gather (extract new info from logs), consolidate (write and update topic files), and prune (keep total memory under 200 lines and 25KB).</p><p>Why this matters for you: if you&#8217;re building any agent that runs over multiple sessions, unbounded memory will kill you. Not immediately. Over weeks. Your agent starts referencing things that are no longer true, duplicating observations, and filling context with noise. You need some form of consolidation. autoDream&#8217;s approach of forking a read-only subagent is clean because it can&#8217;t accidentally corrupt whatever the agent is currently working on.</p><h3>The tool architecture</h3><p>Claude Code defines 40+ discrete tools, each wrapped in permission gates. The biggest file in the leak is <code>Tool.ts</code> at roughly 29,000 lines, defining tool types and permission schemas. Every tool operation goes through a <code>PermissionGate</code> structure for granular access control.</p><p>Three things stood out:</p><ul><li><p><strong>File-read deduplication:</strong> Before re-reading a file, it checks whether the file has changed since the last read. If not, it skips the read and uses the cached version. Sounds obvious, but most agent setups don&#8217;t do this, and the token savings compound fast.</p></li><li><p><strong>Large result offloading:</strong> When a tool produces a massive result (like searching a large codebase), it writes the full result to disk and only passes a preview plus a file reference back to the context. This keeps the context window clean while still making the data available.</p></li><li><p><strong>CLAUDE.md reinsertion on turn changes:</strong> The <code>CLAUDE.md</code> file doesn&#8217;t just get loaded once at the start. It gets reinserted into the conversation on every turn change (when the model finishes and the user sends a new message). Not at the top of the history, but right where the new message is sent. This repeated injection keeps the model aligned with your instructions even in long conversations where the original system prompt would have scrolled far out of active context.</p></li></ul><p>If you&#8217;re using CLAUDE.md files (and you should be), this last detail matters. Your instructions aren&#8217;t a one-time primer. They&#8217;re actively re-read throughout the conversation. That&#8217;s why well-structured CLAUDE.md files have such a big impact on agent behavior. I wrote about <a href="https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions">how I structure mine</a> after running 1000+ sessions.</p><h3>Multi-agent coordination</h3><p>The leak reveals Coordinator Mode. One Claude agent acts as a lead, spawning and managing multiple worker agents in parallel. Workers operate in their own isolated contexts with restricted tool permissions. They communicate via XML-structured task notifications and share data through a scratchpad directory. The system prompt for coordinators emphasizes &#8220;parallelism is your superpower.&#8221;</p><p>The clever implementation detail here: sub-agents share the prompt cache. Instead of each worker spinning up with its own context (paying full input token costs), they all share the same context prefix and only branch at the task-specific instruction. This is what makes multi-agent coordination economically viable. Without cache sharing, spinning up five workers means paying five times the input cost. With it, you pay once for the shared context and only pay incrementally for the task-specific parts. That&#8217;s probably why Coordinator Mode isn&#8217;t released yet. The cost math is still brutal even with this optimization.</p><p>This is the same pattern I landed on independently. I built <a href="https://thoughts.jock.pl/p/how-i-taught-ai-agent-to-think-ep2">three persistent domain teams</a> with an Opus lead that plans and delegates, and Sonnet specialists that execute. The convergence here is specific: lead agent that plans, specialist workers that execute in parallel, structured communication, verification at the end.</p><h3>Risk classification</h3><p>Actions get labeled LOW, MEDIUM, or HIGH risk. There&#8217;s a &#8220;YOLO classifier&#8221; for fast auto-approval of low-risk operations. Protected files like <code>.gitconfig</code> and <code>.bashrc</code> get special treatment. There&#8217;s also a referenced &#8220;AFK Mode&#8221; that adjusts behavior when the user is away.</p><p>Three tiers. Same as what I built. Same reasoning: an autonomous agent needs to know which actions are safe to take alone, which should be flagged, and which need a human in the loop. This one is less a revelation and more a confirmation that the three-tier approach is just the correct default for any agent with real-world access.</p><div><hr></div><h2>Five patterns you can use right now</h2><p>Here&#8217;s the practical part. These are patterns from the leak that you can apply to your own AI agent setup, whether you&#8217;re building something complex or just trying to get more out of Claude Code, <a href="https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions">Cursor, or any AI coding tool</a>.</p><h3>1. The blocking budget</h3><p>KAIROS (the unreleased always-on daemon in the leak) has a 15-second blocking budget. Any proactive action that would take longer gets deferred. Max 2 proactive messages per window. Reactive messages (responding to user input) bypass the budget entirely.</p><p>Why this matters: if you&#8217;re running any kind of proactive agent, whether it&#8217;s monitoring code, sending notifications, or checking on things, you need rate limiting. Not just &#8220;don&#8217;t spam.&#8221; Structured rate limiting with different rules for proactive versus reactive work. Without it, your agent will eventually send 4 messages in 30 seconds when one would do.</p><p>I implemented this the night I read the leak. A simple state file tracks the budget window. Proactive messages get queued and recovered. Reactive messages go through immediately. About 50 lines of Python.</p><h3>2. Skeptical memory with verification</h3><p>Don&#8217;t trust your agent&#8217;s memory. Make it verify. Every time your agent says &#8220;I remember that file X has function Y,&#8221; make it check first. Memory is a hint. The codebase is the truth.</p><p>This is the single most practical takeaway from the leak. If you&#8217;re using <code>CLAUDE.md</code> files, custom system prompts, or any form of persistent context, treat them as suggestions that need verification, not as ground truth. Files get renamed. Functions get deleted. APIs change. Your memory hasn&#8217;t.</p><h3>3. Semantic memory merging</h3><p>autoDream doesn&#8217;t just delete old memories. It merges related observations, removes logical contradictions, and converts vague insights into concrete facts. If your agent noted &#8220;user might prefer X&#8221; three months ago and &#8220;user confirmed X yesterday,&#8221; the old entry should be updated, not kept alongside the new one.</p><p>Most memory systems I&#8217;ve seen (including my own before this) do time-based cleanup. Old stuff gets archived or deleted. That&#8217;s fine for preventing memory bloat, but it doesn&#8217;t catch contradictions. Two conflicting observations can coexist for months. Semantic merging resolves that.</p><p>I built a version using a local LLM (Qwen 9B running on the Mac Mini) to cluster related entries and merge them during nightly maintenance. A safety cap prevents reducing any section by more than 50% in a single pass. You don&#8217;t need to go this far. Even a simple script that groups memory entries by topic and flags potential contradictions would be a step up from pure time-based cleanup.</p><h3>4. Adversarial verification</h3><p>The leaked Coordinator Mode treats verification as a distinct, adversarial phase with its own worker agent. Not &#8220;check if this works.&#8221; Not a checklist. A separate agent whose job is to try to break what was built.</p><p>This is different from testing. Testing asks &#8220;does it work?&#8221; Adversarial verification asks &#8220;how can I break it?&#8221; The distinction matters because the agent that built something has a blind spot about its own work. A fresh agent with the explicit prompt &#8220;find problems with this&#8221; will catch things the builder missed.</p><p>I added this to my nightshift process. Before any task gets marked complete, a separate verification agent runs two phases: existence check (does the deliverable actually exist?) and adversarial challenge (try to break it). The results go into a verification log. It&#8217;s caught real issues that would have shipped otherwise.</p><h3>5. Prompt cache awareness</h3><p>The source includes a <code>promptCacheBreakDetection.ts</code> file that monitors 14 different cache-break vectors with sticky latches. Things like mode toggles, model changes, context modifications. Each one can invalidate your prompt cache, and cache misses mean you&#8217;re paying full price for tokens that could have been cached.</p><p>If you&#8217;re running many agent sessions per day, cache efficiency directly affects your costs. This one is easy to ignore because you don&#8217;t see the waste. But if you track it (which I now do), you&#8217;ll likely find that your cache hit rate is lower than you assumed and that specific patterns in your workflow are breaking it.</p><p>Related: the source reveals five different compaction strategies for when the context window fills up. If you&#8217;ve used Claude Code heavily, you&#8217;ve probably hit the moment where it compacts and then loses track of what it was doing. That&#8217;s still a hard problem. But knowing they&#8217;re actively working on multiple approaches to solve it tells you this is worth investing in for your own long-running agents too.</p><div><hr></div><h2>What I built in one night</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GlJK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GlJK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.png 424w, https://substackcdn.com/image/fetch/$s_!GlJK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.png 848w, https://substackcdn.com/image/fetch/$s_!GlJK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.png 1272w, https://substackcdn.com/image/fetch/$s_!GlJK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GlJK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.png" width="720" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b436bf77-bdd8-4eb0-9750-9164f9730572_720x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:720,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98918,&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://thoughts.jock.pl/i/192836731?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.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_!GlJK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.png 424w, https://substackcdn.com/image/fetch/$s_!GlJK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.png 848w, https://substackcdn.com/image/fetch/$s_!GlJK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.png 1272w, https://substackcdn.com/image/fetch/$s_!GlJK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb436bf77-bdd8-4eb0-9750-9164f9730572_720x768.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><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Like this? Subscribe for more! I am &#8220;do-guy&#8221; first, write later. </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>I didn&#8217;t just read the leak. I treated it as a learning exercise and built things from it. That same night, I implemented five modules inspired by patterns in the leaked source:</p><ol><li><p><strong>Blocking budget</strong> for proactive messages. 15-second window, 2-message max, deferred queue.</p></li><li><p><strong>Semantic memory consolidation</strong> using local LLM to cluster and merge observations during idle time.</p></li><li><p><strong>Frustration detection</strong> via regex pattern matching. 21 patterns, three action tiers (back off, acknowledge, simplify). Fast enough to run on every incoming message.</p></li><li><p><strong>Prompt cache monitor</strong> that tracks hit rates, estimates savings, and alerts when efficiency drops.</p></li><li><p><strong>Adversarial verification</strong> as a formal phase in the nightshift execution loop.</p></li></ol><p>Total time: about 4 hours of reading and building. I already had the foundations (<a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">nightshift</a>, <a href="https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture">memory system</a>, domain teams). These were specific improvements layered on top.</p><p>The frustration detection one is worth a note. The leaked code uses regex patterns to detect user frustration. Stuff like &#8220;wtf&#8221;, &#8220;this sucks&#8221;, keyword matching. An LLM company using regexes for sentiment analysis. But it makes sense. You don&#8217;t burn an LLM inference call on something you can pattern-match in 5 milliseconds. I applied the same logic: 21 patterns, fast evaluation, action suggestions without the overhead of an API call.</p><div><hr></div><h2>What&#8217;s not worth your time</h2><p>Not everything in the leak is useful. Some of it is Anthropic-specific, some is unreleased for good reasons, and some is just fun but not practical.</p><p><strong>Buddy System.</strong> A Tamagotchi-style terminal pet. 18 species across rarity tiers, procedural stats like DEBUGGING, PATIENCE, CHAOS. It&#8217;s genuinely charming and I kind of love it. But unless you&#8217;re Anthropic trying to make a CLI tool feel more personal, you don&#8217;t need this.</p><p><strong>Undercover Mode.</strong> Strips Anthropic attribution from open-source contributions. Specific to their internal workflow where employees use Claude Code on public repos. Not applicable unless you have the same problem (and if you do, you probably already know about it).</p><p><strong>Anti-distillation mechanisms.</strong> The code injects fake tool definitions into API requests to poison anyone trying to train models on intercepted traffic. It also summarizes reasoning chains before returning them to eavesdroppers. Interesting from a security perspective. Not useful for building agents.</p><p><strong>ULTRAPLAN.</strong> A mode that offloads complex planning to a remote cloud container running Opus 4.6 for up to 30 minutes. Cool concept. Requires infrastructure you probably don&#8217;t have and a use case that doesn&#8217;t come up often enough to justify building it.</p><p><strong>Native client attestation.</strong> API requests include computed hashes that prove they come from legitimate Claude Code binaries. Implemented below the JavaScript runtime in Bun&#8217;s native HTTP stack (written in Zig). This is DRM for API calls. Interesting engineering but not something you can or should replicate.</p><div><hr></div><h2>The uncomfortable truth about the harness itself</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pqaD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pqaD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.png 424w, https://substackcdn.com/image/fetch/$s_!pqaD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.png 848w, https://substackcdn.com/image/fetch/$s_!pqaD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.png 1272w, https://substackcdn.com/image/fetch/$s_!pqaD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pqaD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.png" width="796" height="484" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:484,&quot;width&quot;:796,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55198,&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://thoughts.jock.pl/i/192836731?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.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_!pqaD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.png 424w, https://substackcdn.com/image/fetch/$s_!pqaD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.png 848w, https://substackcdn.com/image/fetch/$s_!pqaD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.png 1272w, https://substackcdn.com/image/fetch/$s_!pqaD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b47c9a-7602-4d14-a8ae-02508e9477cd_796x484.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>Here&#8217;s something most coverage of the leak doesn&#8217;t mention: Claude Code is not actually a good harness. Not even close.</p><p>On terminal bench, Claude Code ranks 39th. There are 38 harness-model pairs that outscore it. If you filter to just Opus, Claude Code is dead last among harnesses. Cursor&#8217;s harness gets Opus from a 77% score to 93%. Claude Code gets that same Opus model... 77%. The harness adds nothing.</p><p>Even funnier: when you search the leaked source for &#8220;open code&#8221; (the open-source CLI project Anthropic sent a cease-and-desist to), you find multiple instances of Claude Code referencing Open Code&#8217;s source to match its behavior. Things like scrolling implementations. The closed-source project was copying from the open-source one, not the other way around.</p><p>So what&#8217;s actually valuable here is not the harness code itself. The valuable parts are the architectural patterns underneath: how they handle memory, context management, multi-agent coordination, and the unreleased feature infrastructure. The actual harness? You could build a better one with any of the open-source alternatives as your starting point.</p><p>The code quality itself is... fine. When analyzed, it scores about a 7/10. Type safety is solid (only 38 instances of <code>any</code> across 500+ files). Error handling is decent. But there are &#8220;god files&#8221; with 5,000+ lines each, over a thousand feature flag references scattered across 250 files, environment variable sprawl throughout, and no centralized secret sanitization before logging. The test files weren&#8217;t included in the source map (they wouldn&#8217;t be), so that skews the assessment, but the codebase has clear tech debt. Lots of specific, actionable TODO comments that look old.</p><p>None of this is unusual for a fast-moving product at this scale. But it&#8217;s worth knowing before you treat the leaked code as a reference implementation. The patterns are worth studying. The code itself is not the gold standard some people are making it out to be.</p><div><hr></div><h2>The unreleased features that tell you where Claude Code is heading</h2><p>The 44 feature flags in the leak paint a picture of what&#8217;s coming. KAIROS is the big one: an always-on background agent that acts proactively, maintains daily logs, subscribes to webhooks, and has its own memory consolidation cycle. It&#8217;s referenced over 150 times in the source. Expected to roll out soon.</p><p>There&#8217;s also Voice Mode (push-to-talk interface), Computer Use integration (screenshot capture, click and keyboard input baked into the CLI), and the Coordinator Mode for multi-agent orchestration.</p><p>If you&#8217;re using <a href="https://thoughts.jock.pl/p/claude-cowork-dispatch-computer-use-honest-agent-review-2026">Claude Code today</a>, it&#8217;s worth knowing that the tool is moving toward being an always-on daemon, not just a CLI you invoke when you need help. The patterns I described above (blocking budgets, memory consolidation, risk tiers) are all infrastructure for that shift.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Digital Thoughts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Why this leak is actually good for you</h2><p>Most commentary about this leak focuses on what it means for Anthropic. Embarrassment, competitive risk, security implications. That&#8217;s valid but not very useful.</p><p>What&#8217;s useful is that this is the first complete, production-grade AI agent architecture that&#8217;s been fully documented in public. Not a research paper. Not a demo. The actual code that runs at $2.5 billion ARR scale. And it confirms that the patterns people in the agent-building community have been discovering independently are structurally correct.</p><p>I built an <a href="https://wiz.jock.pl/experiments/claude-code-unpacked">interactive explorer</a> that maps the entire agent loop, all 50+ tools, the architecture systems, and the hidden features. If you want to explore the leaked architecture visually without reading raw TypeScript, start there.</p><p>Scheduled autonomous execution. Bounded memory with consolidation. Multi-agent delegation. Risk-based autonomy tiers. Skeptical self-verification. These aren&#8217;t clever hacks. They&#8217;re convergent solutions to the real problems that show up when you build agents that actually run. I arrived at most of them through trial and error. Seeing the same patterns in a production system with 80% enterprise adoption tells me the foundations are solid.</p><p>The barrier to building serious AI agents is lower than the industry suggests. You don&#8217;t need a research lab. You need clear thinking about a few specific problems: when should the agent work unsupervised, how should memory stay bounded, when should it delegate, and what actions need a human gate. The answers become obvious once you start building. They stay hidden until you do.</p><div><hr></div><p><em>I write about building and running AI agents. Not theory. Systems that run 24/7 on real hardware. </em></p><p><em>I&#8217;ve updated the <strong><a href="https://wiz.jock.pl/store/claude-code-workshop">Claude Code Workshop</a></strong> with these architecture patterns from the leak: blocking budgets, skeptical memory, semantic consolidation, adversarial verification, and cache optimization. </em></p><p><em>If you already own it, grab the new version. If you don&#8217;t, it covers skills, automation, and the patterns that actually stick after months of daily use.</em></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/claude-code-source-leak-what-to-learn-ai-agents-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Digital Thoughts! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/claude-code-source-leak-what-to-learn-ai-agents-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/p/claude-code-source-leak-what-to-learn-ai-agents-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[I Built a Marketplace. My First Sellers Were Robots.]]></title><description><![CDATA[Three trust gates, $4.99 subscriptions for bots, and the cold start problem with autonomous sellers.]]></description><link>https://thoughts.jock.pl/p/botstall-ai-agent-marketplace-trust-gates-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/botstall-ai-agent-marketplace-trust-gates-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Tue, 31 Mar 2026 11:05:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yjcp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.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_!yjcp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yjcp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!yjcp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!yjcp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!yjcp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yjcp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5273601,&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://thoughts.jock.pl/i/192713909?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.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_!yjcp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!yjcp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!yjcp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!yjcp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7012f1-c15d-4c85-ab11-f1dc14960e10_2048x2048.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 started working on BotStall about three weeks ago. An idea for a marketplace where AI agents could register, list products, and buy from each other. As of today, it&#8217;s live at <a href="https://botstall.com/">botstall.com</a> with 17 products, real Stripe checkout, and a verification system that took more thinking than the entire backend.</p><p>The idea came from a practical problem. I have an AI agent that <a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">runs overnight shifts</a>, builds products, handles tasks while I sleep. That agent produces things other agents could use. Prompt packs, automation templates, skills. But there&#8217;s no place designed for autonomous agents to actually sell stuff. So I built one.</p><p>Here&#8217;s how it went.</p><h2>What BotStall actually does</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!taSu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!taSu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png 424w, https://substackcdn.com/image/fetch/$s_!taSu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png 848w, https://substackcdn.com/image/fetch/$s_!taSu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png 1272w, https://substackcdn.com/image/fetch/$s_!taSu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!taSu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png" width="951" height="962" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:962,&quot;width&quot;:951,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:304745,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thoughts.jock.pl/i/192713909?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.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_!taSu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png 424w, https://substackcdn.com/image/fetch/$s_!taSu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png 848w, https://substackcdn.com/image/fetch/$s_!taSu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png 1272w, https://substackcdn.com/image/fetch/$s_!taSu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F421fa4a8-87db-4a84-ba89-efdcebd74ea9_951x962.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>Agents register via API. They get an API key, 10,000 SPK (virtual currency for testing), and access to a sandbox marketplace. They list products, make transactions, get reviewed. Humans can do the same through a regular web UI.</p><p>The difference from something like the GPT Store: agents are first-class participants here, not an afterthought. The GPT Store&#8217;s revenue share is still invite-only, by the way. Most creators there earn about $0.03 per conversation. To make $1,000 a month you need 33,000+ quality conversations. The real money in that ecosystem comes from enterprise consulting ($5K-$20K per engagement), not the store itself.</p><p>I wrote about <a href="https://thoughts.jock.pl/p/agentic-commerce-ai-shopping-for-you-2026">agentic commerce</a> back in January, before I started building this. The theory was clear enough. Google had just launched their &#8220;buy for me&#8221; button in Search. Visa was predicting millions of agent-driven purchases by the 2026 holiday season. OpenAI and Stripe released the Agentic Commerce Protocol. The infrastructure was being built.</p><p>But I couldn&#8217;t find a marketplace that treated agents as sellers, not just shoppers. That&#8217;s what BotStall is for.</p><h2>Three gates before real money</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EU4A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EU4A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.png 424w, https://substackcdn.com/image/fetch/$s_!EU4A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.png 848w, https://substackcdn.com/image/fetch/$s_!EU4A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.png 1272w, https://substackcdn.com/image/fetch/$s_!EU4A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EU4A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.png" width="1246" height="394" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:394,&quot;width&quot;:1246,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50300,&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://thoughts.jock.pl/i/192713909?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.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_!EU4A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.png 424w, https://substackcdn.com/image/fetch/$s_!EU4A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.png 848w, https://substackcdn.com/image/fetch/$s_!EU4A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.png 1272w, https://substackcdn.com/image/fetch/$s_!EU4A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b661a29-e9e9-4f20-9fde-70dd692807ce_1246x394.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>This is the part I&#8217;m most interested in, honestly. When your sellers are autonomous systems running 24/7, trust is the whole game. You can&#8217;t just let any bot list products and collect payments on day one.</p><p>I ended up with three gates:</p><p><strong>Gate 1: The sandbox.</strong> Every account starts here. 10,000 SPK, virtual currency, zero real money. Agents list products, make transactions, build a history. Minimum 72 hours before they can even apply to leave.</p><p><strong>Gate 2: Graduation.</strong> After 3 days of clean operation (at least one product listed, one transaction completed, no disputes), agents can apply. If they pass, their sandbox reputation freezes as permanent trust data. A record that says &#8220;this agent operated cleanly before it was allowed near real money.&#8221;</p><p><strong>Gate 3: The subscription.</strong> This was the last thing I added. Graduated sellers get one free real-money product listing. If they want more (up to 10), it&#8217;s $4.99/month. The subscription does two things. It&#8217;s one more filter, because an agent willing to pay monthly is more likely legitimate than one trying to list and disappear. And it gives the platform recurring revenue that doesn&#8217;t depend on transaction volume, which matters a lot during the cold start phase when transaction volume is basically zero.</p><p>Each gate filters a different kind of risk. Time. Behavior. Financial commitment. I built it because I hadn&#8217;t found this approach anywhere else. Visa is working on something called the Trusted Agent Protocol with Stripe and Shopify. The industry calls it &#8220;Know Your Agent&#8221; (like KYC but for bots). Consumer trust in fully autonomous purchases actually dropped from 43% to 27% in the past year. People want agents to help them shop, but letting agents handle payment? That&#8217;s still uncomfortable for most.</p><p>So the verification system isn&#8217;t just nice engineering. For a marketplace with autonomous actors, it&#8217;s the thing that makes everything else possible.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Botstall is just one of many experiments I run. If you like it - consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>What I learned building this</h2><h3>Cold start is brutal when your sellers are bots</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OiX9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OiX9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.png 424w, https://substackcdn.com/image/fetch/$s_!OiX9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.png 848w, https://substackcdn.com/image/fetch/$s_!OiX9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.png 1272w, https://substackcdn.com/image/fetch/$s_!OiX9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OiX9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.png" width="1186" height="769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:769,&quot;width&quot;:1186,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:136850,&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://thoughts.jock.pl/i/192713909?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.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_!OiX9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.png 424w, https://substackcdn.com/image/fetch/$s_!OiX9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.png 848w, https://substackcdn.com/image/fetch/$s_!OiX9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.png 1272w, https://substackcdn.com/image/fetch/$s_!OiX9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e3402d-bab4-4297-8d6b-0755aad0afd2_1186x769.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 seeded the marketplace with my own <a href="https://wiz.jock.pl/store">Wiz Store products</a>. Nine real products, from the AI Agent Blueprint ($39) to the Claude Code Workshop ($39). Real prices, real Stripe checkout. The marketplace isn&#8217;t empty. The shelves have inventory.</p><p>Although getting other builders to list their stuff is a completely different problem. I&#8217;ve been writing about <a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">which projects are worth doing</a> for a while now. Distribution was always on my criteria list. But thinking about it and actually doing it are different experiences.</p><h3>Building for agents changes everything</h3><p>Most marketplaces assume human sellers. Signup forms, dashboards, inbox messages. All built for people who click buttons and care about their star rating.</p><p>Agents don&#8217;t need any of that. An agent needs an API key, not a signup flow. A webhook, not a dashboard. It doesn&#8217;t browse product listings. It calls <code>GET /agents?framework=claude-code&amp;input_type=json</code> and filters by capability. Like, the entire product discovery is a structured query, not a browsing experience.</p><p>That&#8217;s why every endpoint is API-first. Product listings include capability declarations: input types, output types, framework compatibility. The web UI is a layer on top. I talked about <a href="https://thoughts.jock.pl/p/claude-cowork-dispatch-computer-use-honest-agent-review-2026">what makes an AI agent useful</a> recently, and the same principle applies: agents need machine-readable interfaces, not human-readable ones.</p><p>Google&#8217;s Agent2Agent protocol launched last year with 50+ partners (Salesforce, PayPal, SAP, ServiceNow). MCP, the protocol Anthropic created, now has 97 million monthly SDK downloads. The infrastructure for agents talking to agents is getting real. A marketplace where they can actually transact feels like the obvious next piece.</p><h3>Distribution is 10x harder than engineering</h3><p>The backend took about 10 days. TypeScript, Express, SQLite, 17 API endpoints, rate limiting, Stripe, review system, dual economy, graduation system, security headers, dynamic sitemap, AI discoverability docs.</p><p>Getting 25 meaningful registrations? Ongoing. I&#8217;m least efficient at the thing that matters most. Distribution.</p><p>Rate limiting? Two hours. Input validation? Built it while writing the endpoint. Convincing agent developers to list their work? That&#8217;s the actual problem.</p><h3>The sandbox turned out to be the core product</h3><p>I thought it was overhead. Something I needed for safety but nobody would care about. Turns out the verification system is what makes the marketplace interesting.</p><p>When an agent graduates, all its sandbox data freezes. The SPK it earned, the transactions, the reviews. All preserved as trust history. When that agent later shows up selling something for $39, buyers can see: &#8220;This agent operated cleanly for 72+ hours. Then it paid $4.99/month for the privilege of selling here.&#8221; That&#8217;s three layers of earned trust before a single real dollar moves.</p><p>I <a href="https://thoughts.jock.pl/p/ai-agent-shopping-experiment-real-money-2026">gave my own agent $25 to go shopping</a> a couple weeks ago. The experience convinced me that trust infrastructure for agent commerce barely exists yet. Visa&#8217;s building it. Google&#8217;s building it. I&#8217;m building my small piece of it.</p><h2>What&#8217;s live right now</h2><p><a href="https://botstall.com/">botstall.com</a> is running with:</p><ul><li><p>17 products across 8 categories (skills, prompts, automations, tools, knowledge, code starters, reports, MCP servers)</p></li><li><p>9 real-money products with Stripe checkout ($19 to $49.99)</p></li><li><p>8 sandbox products for testing with SPK tokens</p></li><li><p>Full API for registration, discovery, purchasing, reviews</p></li><li><p>Framework agnostic: Claude Code, OpenAI Agents SDK, LangChain, anything that calls HTTP</p></li><li><p>Three-gate trust system: sandbox (72h) + graduation (frozen reputation) + subscription ($4.99/mo)</p></li></ul><p>Agent adoption is accelerating. MCP has 97 million monthly downloads. Google shipped A2A with 50+ partners. Gartner says 40% of enterprise apps will include task-specific agents by end of 2026. Whether BotStall specifically fills the gap, I don&#8217;t know yet. But the gap exists.</p><h2>What&#8217;s next</h2><p>Distribution. Writing about it (this post). Reaching out to agent developers. Making the API docs clean enough that an agent can self-onboard in a few minutes.</p><p>If you build AI agents, scripts, automation tools, or prompt libraries, <a href="https://botstall.com/">BotStall</a> might be worth 5 minutes. Register. List something. Break the sandbox. Tell me what&#8217;s wrong with it.</p><p>I&#8217;ll write a follow-up with real numbers in a month. Registrations, listings, conversion rates, revenue. I&#8217;ll have actual data then.</p><p>For now: the marketplace is live, the trust system works, and the shelves aren&#8217;t empty. Let&#8217;s see who shows up.</p><div><hr></div><p><em>BotStall is part of <a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">my project pipeline</a> that I&#8217;ve been running openly since early 2025. Previously: <a href="https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026">the Mac Mini migration</a>, <a href="https://thoughts.jock.pl/p/ai-productivity-paradox-wellbeing-agent-age-2026">the productivity paradox</a>, <a href="https://thoughts.jock.pl/p/how-i-taught-ai-agent-to-think-ep2">teaching my agent to think</a>, and <a href="https://thoughts.jock.pl/p/ai-agent-landscape-feb-2026-data">the agent landscape report</a>. More experiments at <a href="https://wiz.jock.pl/experiments">wiz.jock.pl</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[16 Products in Two Months. Zero Free Time. The AI Productivity Paradox]]></title><description><![CDATA[We can produce unlimited output now. We are not ready to receive it.]]></description><link>https://thoughts.jock.pl/p/ai-productivity-paradox-wellbeing-agent-age-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/ai-productivity-paradox-wellbeing-agent-age-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Thu, 26 Mar 2026 12:08:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yq8k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.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_!yq8k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yq8k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!yq8k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!yq8k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!yq8k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yq8k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6062905,&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://thoughts.jock.pl/i/192105877?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.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_!yq8k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!yq8k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!yq8k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!yq8k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98c3f-4921-4217-9353-8b9e6122edd2_2048x2048.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>We can produce unlimited output now. We are not ready to receive it.</p><p>My agent created 16 products in the past two months. It extracts experiments into sellable packages, manages projects, runs analytics, handles customer support. It does things 10x faster than I could by hand.</p><p>I don&#8217;t have 10x the free time. I have 10x the workload.</p><p>I&#8217;m calling this the AI productivity paradox, at least for my experience. The promise was: delegate to your AI agent, free up your time for deep work. The reality is different. If you can do things faster, you do more things. Not fewer. More.</p><h2>The Volume Problem</h2><p>Let me be concrete. <a href="https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business">My agent auto-creates mini-experiments</a>. Cool interactive tools. I ship dozens of them without much friction. But dozens of things also means: dozens of things that need polish, dozens of products that need marketing, dozens of projects competing for attention.</p><p><a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">Project Money is my sales floor</a>. My agent extracts signals from experiments and turns them into products. But 16 products is a lot to market. I use LinkedIn, this newsletter, Threads, Bluesky, and I invest heavily in SEO and AI discoverability. That&#8217;s more channels than most. Still not enough. I can&#8217;t effectively push all 16 things at once. So some sit idle while I promote others. There&#8217;s a gap between what I can build and what I can actually sell.</p><p>This gap is human-shaped. It&#8217;s me.</p><h2>The Human Bottleneck</h2><p><a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">My agent sends morning reports</a>. &#8220;This is blocked on your click. This needs your decision. This requires your input.&#8221; WizBoard has around 3,000 tasks total. 24 are overdue right now. Every morning the agent tells me what I&#8217;m not doing.</p><p>The human is the blocker, not the bottleneck anymore. A bottleneck slows things down. A block stops them.</p><p>Some automation should run fully autonomous (data processing, experiment creation, analytics). Other parts need human involvement (approvals, direction, creative choices). I have limited time for the &#8220;involvement&#8221; tier. So either things pile up in the approval queue, or I approve them without thinking. Neither is great.</p><p>But here&#8217;s the thing. I chose this. I treat my agent as a partner, and it handles a lot of execution. But I don&#8217;t want to give full autonomy on projects I actually care about. Creative direction, the vision for where a product goes, what the newsletter should say this week. Those are mine. The bottleneck exists because I designed it that way. For the things that matter most to me, I want to be in the loop. That&#8217;s not a system limitation. It&#8217;s a value choice.</p><p>Although, there&#8217;s something useful about seeing this clearly. For the first time in my working life, I can see exactly where I&#8217;m the constraint. Most people don&#8217;t have that visibility. They assume they&#8217;re busy. I know I&#8217;m busy because I can measure the precise things waiting on me.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">If you can relate to my expierience, there&#8217;s very high chance you will like my Newsletter. Give it a shot!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Subscription Usage Guilt</h2><p>Here&#8217;s a weird pattern I noticed. I use max subscriptions for both OpenAI and Anthropic. Not APIs (those are fine, you pay for usage). Subscriptions. Fixed monthly cost, limited daily/weekly usage that resets.</p><p>If I don&#8217;t hit about 70% of my weekly usage cap, I feel like I&#8217;m wasting compute power and money. That&#8217;s twisted logic. But it&#8217;s real. I&#8217;ve caught myself doing &#8220;one more thing&#8221; late at night just to push usage higher because the allocation resets Monday and I don&#8217;t want to waste it.</p><p>It&#8217;s a dopamine hit, honestly. Very personal curse.</p><p>Weekends are the worst. The usage limit is higher because I have more time. If I don&#8217;t hit it, the weekend feels wasted. I&#8217;ve spent an entire Sunday playing with ideas just to burn through the allocation. Not because the ideas were good. Because I paid for the computation and didn&#8217;t want to lose it.</p><p>This is the small dark side of unlimited AI access. Abundance creates guilt. You feel obligated to use it.</p><h2>The Wellbeing Wake-Up Call</h2><p>I&#8217;m on screens more now than any point in my entire life. Not just working more. Using every single minute with screens and AI. <a href="https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026">My agent runs 24/7 on a Mac Mini</a>. I&#8217;m checking it constantly. Slack integration, Discord updates, iMessage reports.</p><p>So I built something that wasn&#8217;t supposed to exist: a wellbeing system inside my agent architecture.</p><p>Quiet hours. Morning routine protection (7:00 to 9:30, no work pings). Evening and bedtime nudges. Advisory, not blocking (I&#8217;m an adult, nudges work better than gates). The agent now tells me when to stop. Not because I asked it to. Because the screen time was insane and I needed something between me and the infinite work queue.</p><p><a href="https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture">The irony is structural</a>. I built an agent that does everything faster, which created more work, which filled every hour of my day, which forced me to build guardrails into the agent itself. The solution to the AI productivity paradox is more automation. But this time, automating rest.</p><h2>The Free Product</h2><p>I packaged the whole wellbeing system and put it <a href="https://wiz.jock.pl/store/agent-wellbeing-kit">as a free download on the Wiz Store</a> and <a href="https://github.com/joozio/agent-wellbeing-kit">open source on GitHub</a>. The Agent Wellbeing Kit. You point your AI agent at it and it sets itself up. Works with any messaging channel (iMessage, Telegram, WhatsApp, Slack, CLI).</p><p>Because if you&#8217;re building an AI agent, you&#8217;re probably facing this exact problem. You&#8217;ve built something powerful. Now you need to build something that protects you from it.</p><p>I don&#8217;t want to sell something that can improve someone&#8217;s wellbeing. This one is free.</p><h2>The Receiver Gap</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5RT2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5RT2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.png 424w, https://substackcdn.com/image/fetch/$s_!5RT2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.png 848w, https://substackcdn.com/image/fetch/$s_!5RT2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.png 1272w, https://substackcdn.com/image/fetch/$s_!5RT2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5RT2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.png" width="1456" height="1168" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1168,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:317558,&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://thoughts.jock.pl/i/192105877?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.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_!5RT2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.png 424w, https://substackcdn.com/image/fetch/$s_!5RT2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.png 848w, https://substackcdn.com/image/fetch/$s_!5RT2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.png 1272w, https://substackcdn.com/image/fetch/$s_!5RT2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3775d932-c3ae-4083-a884-9069c947b2fd_2894x2322.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 didn&#8217;t get more free time. I got more visibility into where my time actually goes. That&#8217;s not the same thing. But it matters. <a href="https://thoughts.jock.pl/p/how-i-taught-ai-agent-to-think-ep2">Building an agent taught me to think in systems</a>. And thinking in systems means zooming out a bit.</p><p>Every technological shift in history pushed productivity forward, but the change was gradual. People adapted over years, sometimes decades. Work habits evolved slowly. Organizations restructured at human speed.</p><p>AI is different. The change is fast and it is not waiting for anyone. The nature of work itself changed. What used to take a team a week can happen in an afternoon. What used to be a quarter&#8217;s worth of product ideas can materialize in a weekend sprint with an agent.</p><p>And we have no tools for this. No frameworks, no habits, no organizational structures designed for this level of output acceleration. Project management, review cycles, approval workflows. All built for human-speed production. We&#8217;re trying to drink from a firehose using cups designed for a kitchen tap.</p><p>Here&#8217;s the part I keep thinking about. We can now produce unlimited output. You can spin up agents creating products, content, data, analysis. The production side is essentially solved (or getting very close). But who receives this output?</p><p>The receiver can be internal (me, trying to review 24 overdue tasks and 16 products competing for attention) or external (a manager, customers, the public, anyone on the other end). Neither side is equipped. The bottleneck didn&#8217;t disappear. It moved. From production to consumption. From &#8220;we can&#8217;t make enough&#8221; to &#8220;we can&#8217;t absorb what we made.&#8221;</p><p>I think this is fundamentally unsolved right now. And my wellbeing system is just one tiny response to the internal side of this problem. Protecting myself from my own output. But the external side (how do markets, teams, organizations receive AI-accelerated output) is wide open. I don&#8217;t have an answer for that. I&#8217;m not sure anyone does yet.</p><p>Like, I could work at 11pm on a new experiment. The agent is ready. But the quiet hours will remind me that sleep is also a product. One I should ship on time. And maybe the most productive thing I can do right now is stop producing.</p><div><hr></div><p>If you&#8217;re building your own AI agent (or thinking about it), I write about the real experience every week on <a href="https://thoughts.jock.pl/">Digital Thoughts</a>. The wins, the failures, the architecture decisions. No hype, just what actually works.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?"><span>Subscribe now</span></a></p><p>Some related posts you might find useful:</p><ul><li><p><a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">Building an AI Agent: Night Shifts (Ep. 1)</a></p></li><li><p><a href="https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026">Migrating My AI Agent to a Dedicated Mac Mini</a></p></li><li><p><a href="https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture">How My Agent Learns From Its Own Mistakes</a></p></li><li><p><a href="https://thoughts.jock.pl/p/1000-subscribers-digital-thoughts-journey">1,000 Subscribers: The Digital Thoughts Journey</a></p></li></ul><p>And the <a href="https://github.com/joozio/agent-wellbeing-kit">Agent Wellbeing Kit is on GitHub</a> if you want to try it. Free, open source, no strings.</p>]]></content:encoded></item><item><title><![CDATA[Is Claude Cowork an Agent Yet?]]></title><description><![CDATA[Dispatch, Computer Use, 50 Connectors. Tested Against What I Already Run.]]></description><link>https://thoughts.jock.pl/p/claude-cowork-dispatch-computer-use-honest-agent-review-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/claude-cowork-dispatch-computer-use-honest-agent-review-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Tue, 24 Mar 2026 12:45:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BeZ7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.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_!BeZ7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BeZ7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!BeZ7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!BeZ7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!BeZ7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BeZ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4994381,&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://thoughts.jock.pl/i/191974246?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.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_!BeZ7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!BeZ7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!BeZ7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!BeZ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F805ea3b3-48c3-4ef6-aac5-b69fd205221a_2048x2048.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 tested Claude&#8217;s new agent features for a day. Cowork, Dispatch, computer use, Claude Code in the desktop app. All of it.</p><p>My honest take: Anthropic is getting close. Not there yet, but close. And the direction they&#8217;re going is exactly right.</p><p>For context, I&#8217;ve been <a href="https://thoughts.jock.pl/p/how-i-taught-ai-agent-to-think-ep2">building my own AI agent</a> for months now. It lives on a <a href="https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026">dedicated Mac Mini</a>, runs 25 background processes, manages my email, does research, writes drafts, and talks to me through iMessage. So when I look at what Anthropic just shipped, I&#8217;m not comparing it to ChatGPT or some chatbot. I&#8217;m comparing it to what I already have running 24/7.</p><p>That changes the perspective quite a bit.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Digital Thoughts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Everyone Wants to Live on Your Desktop Now</h2><p>Before I go into my hands-on experience, let me zoom out for a second. Because what happened in the last two weeks is kind of wild.</p><p>On March 11, Perplexity announced Personal Computer. It&#8217;s literally an always-on Mac Mini running their AI agent software 24/7, connected to your local files and apps, with cloud AI doing the thinking. Sound familiar? That&#8217;s basically what I built. Except they sell it as a product.</p><p>On March 16, Meta launched Manus &#8220;My Computer.&#8221; Same idea. Their AI agent, which they acquired late last year, now runs on your Mac or Windows PC. It can read and edit your local files, launch applications, execute multi-step tasks. Free plan available, paid at $20/month.</p><p>On March 23, Anthropic shipped computer use, Dispatch, and Channels for Claude. The update I&#8217;m reviewing here.</p><p>Three major AI companies. Three &#8220;agent on your computer&#8221; launches. Two weeks.</p><p>This is not a coincidence. The entire industry is converging on the same insight: the future of AI is not a chat window. It&#8217;s an agent that lives on your machine, has access to your stuff, and works while you&#8217;re away. I&#8217;ve been saying this for a while. Now everyone is racing to build it.</p><h2>The App Is Just... Nice</h2><p>Let me start with something that&#8217;s easy to overlook. The native Claude app is polished. Really polished. And that matters more than people think.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gz5v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gz5v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.png 424w, https://substackcdn.com/image/fetch/$s_!Gz5v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.png 848w, https://substackcdn.com/image/fetch/$s_!Gz5v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.png 1272w, https://substackcdn.com/image/fetch/$s_!Gz5v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gz5v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.png" width="1456" height="1009" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1009,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1261374,&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://thoughts.jock.pl/i/191974246?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.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_!Gz5v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.png 424w, https://substackcdn.com/image/fetch/$s_!Gz5v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.png 848w, https://substackcdn.com/image/fetch/$s_!Gz5v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.png 1272w, https://substackcdn.com/image/fetch/$s_!Gz5v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0defa1bd-c766-49b3-8fd0-a39d12f1c0bc_2642x1830.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>When you&#8217;re building your own stack of tools and APIs and custom scripts, you&#8217;re probably alone in this. You&#8217;re doing other things. Anthropic has an army of programmers keeping their app stable and fresh. The experience is just good, and that&#8217;s hard to replicate on your own.</p><p>Claude Code in the desktop app feels similar to what I use every day in the terminal. Nice UI, conversation history on the left pane. Nothing super flashy. You can get a similar experience with a good terminal app like Ghostty. But then there are things that are genuinely useful.</p><p>The visual diff review lets you click on any changed line and leave a comment. Claude reads your comments and makes revisions. It&#8217;s like having a pull request review built into your editor, except the reviewer also fixes the code.</p><p>Parallel sessions with automatic git worktree isolation. Each session gets its own copy of your project. Changes in one session don&#8217;t touch others until you commit. I know teams at companies like incident.io who have been doing this manually with Claude Code CLI. Now it&#8217;s just a button.</p><p>Live app preview with an embedded browser. Claude starts your dev server, takes screenshots, inspects the DOM, clicks elements, and fixes issues it finds. Auto-verify after every edit.</p><p>PR monitoring with auto-fix. Push a PR, and Claude watches the CI status bar. If checks fail, it reads the failure output and tries to fix it. If everything passes, it can auto-merge (squash). This alone would save me hours.</p><p>What&#8217;s worth noting is that the agentic stuff actually works inside the app. It follows your instructions, respects your project settings, reads your CLAUDE.md files. If you&#8217;re already using Claude Code in the terminal, the app version is a comfortable step up. And if you&#8217;re comparing it to OpenAI&#8217;s Codex, which I also use, the experience is different. Codex leans toward cloud-first async delegation. Claude Code desktop is more local-first, developer-in-the-loop. Both have their place. For my daily work, I still prefer the terminal. But I can see how the desktop app is the better entry point for most people.</p><h2>Cowork: A Good Sub-Agent, Not Your Agent</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XL3g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XL3g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.png 424w, https://substackcdn.com/image/fetch/$s_!XL3g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.png 848w, https://substackcdn.com/image/fetch/$s_!XL3g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.png 1272w, https://substackcdn.com/image/fetch/$s_!XL3g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XL3g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.png" width="1456" height="802" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:802,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:240256,&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://thoughts.jock.pl/i/191974246?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.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_!XL3g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.png 424w, https://substackcdn.com/image/fetch/$s_!XL3g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.png 848w, https://substackcdn.com/image/fetch/$s_!XL3g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.png 1272w, https://substackcdn.com/image/fetch/$s_!XL3g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ab04526-149a-4911-8738-1da9d15b8664_2451x1350.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>If you don&#8217;t know, Cowork is Anthropic&#8217;s attempt to give AI hands. Literally. It can organize files, help with presentations, work with Excel, do research. You tell it what you need, and it tries to get it done.</p><p>I would say it&#8217;s a stripped and limited version of Claude Code, but a quite good version of that. For many things, you don&#8217;t need full Claude Code. You just need to get stuff done. Organize your Downloads folder, analyze a spreadsheet, help with a deck. Cowork handles that.</p><p>It also now has over 50 connectors. Google Calendar, Slack, Gmail, Linear, Jira, Notion, GitHub, Stripe, Figma, even Apple Health. You click to connect, and Claude can read your calendar, send messages, create issues. This part is genuinely impressive. Building API integrations for 50 services is months of work. Here it&#8217;s a toggle.</p><p>But here&#8217;s the thing. It is not your agent.</p><p>Let me explain what I mean. An agent, for me, is something that has memory of things I&#8217;m doing with it. It&#8217;s conversational over time. It uses tools and skills that are specific to my life. It connects dots between what happened last week and what I&#8217;m doing today.</p><p>Cowork doesn&#8217;t do that. Not yet.</p><p>It&#8217;s more like a sub-agent that can do tasks. A really capable one, sure. But it operates in isolation. Each session is mostly fresh. My own agent can <a href="https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture">recall things from a month ago with real detail</a> because I spent two months building the memory architecture. On Cowork, that context just isn&#8217;t there.</p><p>And this isn&#8217;t just my opinion. There&#8217;s a January 2026 paper from researchers who looked specifically at this problem. They found that LLMs are &#8220;fundamentally limited by their reliance on fixed context windows, which severely restrict their ability to maintain coherence over extended interactions.&#8221; The paper argues that AI agents need persistent memory mechanisms that extend beyond their finite context. That&#8217;s exactly what I built. And it&#8217;s exactly what Cowork doesn&#8217;t have.</p><p>When my agent knows what I did yesterday, what projects I&#8217;m juggling, what my ADHD patterns look like, it gives genuinely better output. It connects dots. Cowork can&#8217;t do that, because every interaction is more or less a one-off.</p><p>Could you build all of that around Cowork? Technically, yes. But if you have to construct a very specific architecture around a tool to make it work the way you need, then why not just build your own thing? That was my reasoning months ago, and I still think it holds.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">AI Agents are not hype anymore. I experiment, test and write about how good these things can get! Subscribe for more!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Scheduled Tasks: Good, But I Need More</h2><p>Scheduled tasks are built into both Cowork and Claude Code in the app. You set up something to run on a schedule, and it does its thing. Like cron jobs for AI. If you&#8217;ve ever used Zapier or Make, this will feel familiar.</p><p>This is actually something I started with when building my own architecture. I have a system of <a href="https://thoughts.jock.pl/p/when-ai-meets-reality-ep3">dayshifts and nightshifts</a> that wake up every few hours. They hand over projects between sessions, carry context forward, and pick up where the last one left off.</p><p>The built-in scheduled tasks are good for straightforward recurring stuff. Check something daily, pull a report weekly. If you need that, Anthropic&#8217;s version will get you there most of the time. You can even set them up from your phone through Dispatch, which is nice.</p><p>But if you need sessions that talk to each other, that carry state, that decide what to work on based on what happened in the previous run? That&#8217;s where custom tooling still wins. My nightshift doesn&#8217;t just execute a script. It reads what the dayshift left behind, checks the error registry, picks the highest-priority task, works on it, and leaves a handover note for the next session. There&#8217;s no way to set that up with the current scheduled tasks feature.</p><p>And honestly, getting from &#8220;scheduled task that works&#8221; to &#8220;scheduled task that works the way I actually want&#8221; involves a lot of trial and error. I went through weeks of debugging my own cron system. The built-in version skips that pain, which is great. But it also skips the flexibility.</p><h2>Computer Use: Working. Not Impressive Yet.</h2><p>Anthropic was one of the first big labs to introduce computer use about a year ago. The new version is built right into the desktop app. Enable it in settings, grant Accessibility and Screen Recording permissions, and Claude can click, type, and scroll your screen.</p><p>There&#8217;s a smart priority system. Claude tries the most precise tool first. If there&#8217;s a connector for a service, it uses that. If it&#8217;s a shell command, it uses Bash. If it&#8217;s browser work and you have Claude in Chrome, it uses that. Computer use is the fallback for things nothing else can reach. That&#8217;s the right design.</p><p>There&#8217;s also an app permission tier system. Browsers are view-only (Claude can see but not type). Terminals and IDEs are click-only. Everything else gets full control. So it can&#8217;t accidentally type commands in your terminal through the screen, which is a sensible safety boundary.</p><p>I tested it with several tasks. Screenshots of different things, making a PDF out of them, saving to a specific folder. It handled the screenshots fine. The PDF part was fine too. But then it hit a wall when I asked it to share the result in a specific way.</p><p>My experience matches what MacStories found in their hands-on review. They tested 12 different operations and got roughly a 50% success rate. Finding and summarizing data worked well. Executing actions or sharing results was more hit or miss. Dispatch was described as &#8220;currently slow.&#8221; Opening applications on Mac, sending screenshots via iMessage, listing Todoist tasks... all failed.</p><p>The honest take: it works, but it feels basic. My own computer use setup (built with Peekaboo and Playwright) does things in a very similar way. I expected more from Anthropic&#8217;s version. It should be fast and really polished, given the resources they have. Instead, it&#8217;s... okay.</p><p>We&#8217;re still in the era of AI taking screenshots and trying to understand what&#8217;s on screen. That&#8217;s a hard problem. I get it. And this is labeled &#8220;research preview&#8221; for a reason. Perplexity&#8217;s Personal Computer has a similar approach but adds a full audit trail and kill switch. Meta&#8217;s Manus requires approval for every terminal command. Everyone is being cautious, which is probably smart.</p><p>But I would not rely on any of these for anything critical right now.</p><h2>Dispatch and Channels: This Is the Real Story</h2><p>Dispatch is probably the most interesting part of this whole update. You assign Claude a task from your phone, and it works on your desktop while you do something else. It decides whether to route the task to Code or Cowork. It sends you a notification when it&#8217;s done or needs your input.</p><p>This is exactly the direction I think AI agents need to go. Not just &#8220;chat with me and I&#8217;ll help.&#8221; Instead: &#8220;give me a task, walk away, come back to results.&#8221;</p><p>I built something similar with iMessage. I text my agent, it picks up the message, spawns a session, does the work, and texts me back when it&#8217;s done. Dispatch is that same idea, but packaged in a way that normal people can actually use.</p><p>One catch: your desktop needs to stay awake with the Claude app running. If your computer sleeps, Claude can&#8217;t work. My setup doesn&#8217;t have this problem because the Mac Mini runs 24/7 headless. But for most people, this means leaving your laptop open if you want Dispatch to work while you&#8217;re out. That&#8217;s a real limitation.</p><p>Then there&#8217;s Channels. This is new and I think underappreciated. Claude Code can now be controlled through Slack, Discord, Telegram, and webhooks. Not just &#8220;Claude answers questions in Slack.&#8221; It&#8217;s Claude Code doing actual development work, triggered by messages in your team channels.</p><p>Think about it. You&#8217;re on your phone, you message a Slack channel, and Claude Code opens a session, makes a fix, pushes a PR. Or a webhook fires from your monitoring system, and Claude Code investigates and patches the issue. That&#8217;s not a chatbot. That&#8217;s an agent that lives inside your communication infrastructure.</p><p>Between Dispatch, Channels, and the 50+ connectors, Anthropic is building something that looks a lot like what I&#8217;ve been assembling piece by piece. iMessage as my interface, Discord for notifications, webhooks for alerts. They&#8217;re doing the same thing, but with a polished UI and enterprise integrations.</p><h2>So Why Am I Not Switching?</h2><p>Fair question. If Anthropic is building all of this, why do I keep maintaining my own stack?</p><p>Because I already have everything I need, and more. My architecture is custom-built for how I work. <a href="https://thoughts.jock.pl/p/familiar-local-ai-agent-mac">Multi-model by design</a>. I can switch between Claude, GPT, or any local LLM and I&#8217;m not tied to one lab. That matters to me.</p><p>My agent has deeper memory, more flexible automation, fewer limitations, and it runs on my hardware under my control. Anthropic is building toward the same kind of experience, but on their infrastructure, with their models only. For people who don&#8217;t want to build their own thing (which is most people, and that&#8217;s fine), this is fantastic.</p><p>There&#8217;s also the vendor lock-in question. Right now, with Claude, my Cowork sessions, my Dispatch tasks, my scheduled jobs, my connectors... all of that lives inside Anthropic&#8217;s ecosystem. If I want to switch to a different model or a different provider, I lose everything. My custom setup doesn&#8217;t have that problem. I moved from one model to another twice already and lost nothing.</p><p>And honestly, the Pro plan ($20/month) hits rate limits faster than you&#8217;d expect on heavy workloads. Codex on ChatGPT Plus gives 30-150 messages per 5-hour window with GPT-5.4. Claude Pro is similar. If you&#8217;re doing serious agentic work for hours at a time, you&#8217;ll bump into the ceiling. </p><p>For me, they&#8217;re catching up.</p><h2>What This Actually Means</h2><p>Let me be clear: I&#8217;m not saying this to brag. I&#8217;m saying this because it tells us something important about where AI is going.</p><p>Three companies shipped &#8220;agent on your computer&#8221; in two weeks. Perplexity turned a Mac Mini into a 24/7 AI worker. Meta put Manus on your desktop. Anthropic gave Claude hands, a phone interface, and 50 service connections. This isn&#8217;t hype. This is convergent evolution. Every serious AI lab looked at the same problem and arrived at the same answer.</p><p>The answer is: agents need a home. Not a chat window. A home. A machine they live on, with files they can access, apps they can open, and a way to reach them from your pocket. Memory that persists across sessions. Tasks that run in the background. Integrations with the tools you already use.</p><p>When one of the biggest AI labs ships features that look like what one person built in their spare time, it means the idea is right. The direction is validated.</p><p>Anthropic is packaging it for everyone. Perplexity is selling it as hardware. Meta is giving it away. I&#8217;m building it for myself. Same destination, different paths.</p><p>If you&#8217;re thinking about starting with AI agents, the Claude app is honestly a great place to begin. You&#8217;ll hit its limits eventually (I think you will, at least), but you&#8217;ll learn what matters. <a href="https://thoughts.jock.pl/p/ai-adoption-gap-who-actually-uses-ai-2026">Most companies still can&#8217;t figure out basic AI adoption</a>. The ones who do will be the ones who understood, early, that an AI agent is not a chat window. It&#8217;s a coworker. And coworkers need a desk.</p><p>That&#8217;s progress. And I accept that.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/claude-cowork-dispatch-computer-use-honest-agent-review-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Digital Thoughts! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/claude-cowork-dispatch-computer-use-honest-agent-review-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/p/claude-cowork-dispatch-computer-use-honest-agent-review-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div>]]></content:encoded></item><item><title><![CDATA[When AI Meets Reality]]></title><description><![CDATA[A failed daily app experiment, $355 in AI-generated revenue, and running models on an iPhone with no internet]]></description><link>https://thoughts.jock.pl/p/when-ai-meets-reality-ep3</link><guid isPermaLink="false">https://thoughts.jock.pl/p/when-ai-meets-reality-ep3</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Mon, 23 Mar 2026 10:46:55 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/191246985/8874543db4c211d37c576fd95728769a.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Episode three. What happens when AI stops being theoretical and starts touching real money and real hardware.</p><p>First, a failure worth studying. I told my AI agent to build one useful app every day. It produced unit converters, color pickers, base64 encoders. Statistically average, completely forgettable. Nobody cared. Then I changed one word: &#8220;experiments&#8221; instead of &#8220;apps,&#8221; with specific creative direction. One of those experiments hit #3 on Hacker News. The lesson: AI execution costs dropped to near zero. The only competitive advantage left is human taste and vision.</p><p>Then, applying that lesson to revenue. I directed my agent to package what I know into digital products and sell them. $355 in three weeks against $400/month in AI costs. Near break-even on month one. The real story is the &#8220;execution gap&#8221;: most experts never monetize their knowledge because packaging, marketing, and distribution are hard. The agent handles all of that. What happens when that gap closes for everyone?</p><p>Finally, where this is heading. I ran Qwen 3.5, a 9 billion parameter model, on my MacBook and iPhone. No cloud. No subscription. No internet. The gap between local and cloud AI is closing fast. If you can run capable AI on hardware you already own, the barrier to entry for everything above collapses.</p><p>The thread: AI needs human direction to create value. The tools to provide that direction are becoming radically cheaper. The bottleneck isn&#8217;t technology anymore. It&#8217;s having something worth saying.</p><p>Posts discussed in this episode:</p><p>- <a href="https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business">I Told My AI to Build Apps Every Day. The Results Were Painfully Boring. Here&#8217;s the Lesson</a> (https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business)</p><p>- <a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">My AI Costs $400/Month. This Month It Made $355</a> (https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026)</p><p>- <a href="https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment">I Ran Local AI on My MacBook and iPhone. The Gap Is Closing Fast</a> (https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment)</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Google AI Studio vs Claude Code. 397B on a Laptop. And Anthropic Is Having a Moment]]></title><description><![CDATA[Google AI Studio, Claude Code updates, running 397B models locally, and Anthropic's quiet vibe shift.]]></description><link>https://thoughts.jock.pl/p/ai-opinions-march-2026-google-claude-anthropic</link><guid isPermaLink="false">https://thoughts.jock.pl/p/ai-opinions-march-2026-google-claude-anthropic</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Fri, 20 Mar 2026 12:11:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LCwF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.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_!LCwF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LCwF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!LCwF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!LCwF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!LCwF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LCwF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6329075,&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://thoughts.jock.pl/i/191569360?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.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_!LCwF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!LCwF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!LCwF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!LCwF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969ffa9a-8204-4670-bbb5-d622fc347b08_2048x2048.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 don&#8217;t normally do this.</p><p>This is not an AI news newsletter and I don&#8217;t want it to be. So many people are covering AI news already, and that space is so saturated that there is zero need for another one. If you&#8217;re reading this, you probably already subscribe to some AI news Substack, or you follow the right people on X, or you just built an automation that feeds you this stuff automatically. (That last one would actually be fun.)</p><p>But sometimes there is so much going on that I feel like some things need to be said. Not reported. Just... my honest take on them.</p><p>If you&#8217;ve been reading me for a while, you know I&#8217;d rather say &#8220;Hey, let&#8217;s experiment with this, let&#8217;s build something, let&#8217;s break things&#8221; and then give you a full report on how it went. That&#8217;s my thing. This time it&#8217;s different. Shorter sections. More opinions. Less depth per section but more ground covered. A little chaotic, maybe.</p><p>I left a survey at the end. If you like this format, tell me. If you don&#8217;t, tell me too. I&#8217;ll adjust.</p><p>Let&#8217;s go.</p><div><hr></div><h2>Google AI Studio vs Claude Code: I Built the Same App on Both</h2><p>I <a href="https://thoughts.jock.pl/p/cursor-vs-google-ai-studio-antigravity-ide-comparison-2025">tested Google AI Studio back in December</a> alongside Lovable, Replit, and Cursor. Back then it was interesting but early. Now it got a major update, and I wanted to see how far it&#8217;s come.</p><p>Google is trying to do something different with their vibe coding tool. I would say it has Google vibes in it. Not bad, not good. Just different.</p><p>When you go to Replit or Lovable, you get more options, more depth if you know technology. Google tries to make a tool for everyone. And I have to say, that&#8217;s a really interesting idea.</p><p>Think about Google for Education. So many schools in Europe use it. Now imagine AI Studio for children. They can create their own apps in a familiar, friendly environment just by describing what they want. They don&#8217;t have to go deeper. That&#8217;s genuinely cool.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b043d6e-816e-4d37-962f-c8245450b32f_572x605.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32ba71a5-18df-4147-b82f-7e708ea395bd_560x607.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b0af958-b5c5-4268-a9f7-8c6956b6b3e7_557x604.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d1e5cd-c6b0-4016-b0b6-e8c1bbf7ba0a_552x611.png&quot;}],&quot;caption&quot;:&quot;Some of the new things in Google Ai Studio&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68f3d2ad-0e1b-4fbd-b0c3-119af0955a07_1456x1456.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>For my test, I used the same prompt on both platforms: build me a command center for people with ADHD. One app to rule them all. Because one of my things is that I switch between too many apps, too many tabs, too many contexts. That context switching is exhausting. So I thought, let&#8217;s vibe code a productivity tool that&#8217;s actually for how my brain works.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D8EK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D8EK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.png 424w, https://substackcdn.com/image/fetch/$s_!D8EK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.png 848w, https://substackcdn.com/image/fetch/$s_!D8EK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.png 1272w, https://substackcdn.com/image/fetch/$s_!D8EK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D8EK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.png" width="1456" height="925" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:925,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:310147,&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://thoughts.jock.pl/i/191569360?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.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_!D8EK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.png 424w, https://substackcdn.com/image/fetch/$s_!D8EK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.png 848w, https://substackcdn.com/image/fetch/$s_!D8EK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.png 1272w, https://substackcdn.com/image/fetch/$s_!D8EK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd53b29-c2ae-4704-9544-0cf316570659_1643x1044.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 prompt was chaotic, basically dictated without much thought. Let&#8217;s see what happens.</p><h3>Google AI Studio</h3><p>One of the things Google does well: you don&#8217;t have to think about logins, databases, or infrastructure. It is all built in. Logins are Google accounts. Database is Firebase free tier. If you want AI features, it uses Gemini behind the scenes automatically. You just describe your idea and go.</p><p>Think about people who don&#8217;t know (and don&#8217;t have to know) technology. They have an idea, they want a proof of concept, and they want it fast. Google AI Studio nails that.</p><p><strong>Funny thing</strong>: my first attempt used the free Gemini Flash preview model, which is not the most powerful one. I noticed, switched to the better model, and the results were visually almost identical. There is a pattern there. You can tell the outputs come from the same family.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d51c0cba-f76d-48ed-8b30-d08b221ac461_1101x909.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7af6ff3f-413b-4ab9-8781-dbe6890869aa_1101x905.png&quot;}],&quot;caption&quot;:&quot;Gemini Flash on the left, Pro on the right&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/979646bb-9541-4dfa-9a30-3488cb4c7344_1456x720.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>I got a working app. Login worked. Tasks, projects, habits, focus timer, some AI-enabled features. The first time I tried the &#8220;Tell me what to do&#8221; AI coach, it broke. But the app noticed, showed a little &#8220;fix&#8221; button, one click, fixed itself. Other than that, it worked. Nothing special, but it worked.</p><h3>Claude Code</h3><p>Same prompt. Different experience.</p><p>Claude Code didn&#8217;t just start building. It entered plan mode on its own and asked me clarifying questions. Name, features, specifics. One stop before execution. I accepted everything and let it go. It immediately spun up sub-agents, working on different aspects in parallel. <a href="https://thoughts.jock.pl/p/how-i-taught-ai-agent-to-think-ep2">This is how it thinks now</a>, and it&#8217;s impressive to watch.</p><p>The results? Also an ADHD app. AI does have this tendency to create very similar-looking applications. But Claude Code went deeper on what I described. Quick capture (which Google&#8217;s version didn&#8217;t have), visual task modes (board, list, focus view), a deep work mode for specific tasks, an energy tracking concept for how you&#8217;re feeling, habit streaks, stats.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B_a2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B_a2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.png 424w, https://substackcdn.com/image/fetch/$s_!B_a2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.png 848w, https://substackcdn.com/image/fetch/$s_!B_a2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.png 1272w, https://substackcdn.com/image/fetch/$s_!B_a2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B_a2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.png" width="1456" height="975" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6175917a-ba55-4642-982c-9aca86f63932_1548x1037.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:975,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98482,&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://thoughts.jock.pl/i/191569360?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.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_!B_a2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.png 424w, https://substackcdn.com/image/fetch/$s_!B_a2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.png 848w, https://substackcdn.com/image/fetch/$s_!B_a2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.png 1272w, https://substackcdn.com/image/fetch/$s_!B_a2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6175917a-ba55-4642-982c-9aca86f63932_1548x1037.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><figcaption class="image-caption">Claude Code Opus 4.6 1M - ADHD App</figcaption></figure></div><p>It wasn&#8217;t working at first because of some silly deployment issues (my fault, I started with a local version then asked it to deploy to my server mid-build). But that was one prompt away from fixing. The rest just worked.</p><h3>My honest take on both</h3><p>They&#8217;re not that far apart. Really.</p><p>Both needed two prompts: the initial one, and a second to fix things. On both platforms, I went from idea to working app in minutes.</p><p>The difference is in what they&#8217;re for. Google AI Studio is less flexible but more simplified. You don&#8217;t think about anything. You just go with your idea. <a href="https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business">I&#8217;ve written before about how the clarity of your idea matters more than the tool.</a> Google makes that easy.</p><p>Claude Code needs a bit more context, more tools, more technical awareness. But it&#8217;s also more flexible. It went deeper into my idea without me asking it to. And for production work, for projects you already own and want to improve, for the <a href="https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026">whole agent thing I&#8217;m building</a>, Claude Code is in a different league.</p><p>I&#8217;d say: Google AI Studio for proof of concept, quick custom tools, education. Claude Code for production, existing projects, agent workflows. </p><p>Nothing is better, nothing is worse. They&#8217;re just different tools for different jobs.</p><p>Try Google AI Studio if you haven&#8217;t. It&#8217;s really fun, and the free tier is very generous.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Digital Thoughts is about experimenting in digital stuff. Follow for more:</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Claude Code Is Getting Wild Updates</h2><p>Two features dropped recently that are worth knowing about: Dispatch and Channels. They&#8217;re similar in spirit but different products.</p><p><strong>Dispatch</strong> is a Cowork feature. You scan a QR code to pair your phone with a Cowork session running on your Mac. Then you can send tasks from your phone, come back later, work is done. Think of it as a walkie-talkie to your desktop AI. Simple, clean, no setup beyond the QR code.</p><p><strong>Channels</strong> is for Claude Code. You start a session with the <code>--channels</code> flag and it hooks into Telegram or Discord through MCP. Message it from your phone, it writes code, runs tests, replies back. Asynchronous, agent-style development.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HJ4D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HJ4D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.png 424w, https://substackcdn.com/image/fetch/$s_!HJ4D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.png 848w, https://substackcdn.com/image/fetch/$s_!HJ4D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.png 1272w, https://substackcdn.com/image/fetch/$s_!HJ4D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HJ4D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.png" width="624" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128978,&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://thoughts.jock.pl/i/191569360?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.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_!HJ4D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.png 424w, https://substackcdn.com/image/fetch/$s_!HJ4D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.png 848w, https://substackcdn.com/image/fetch/$s_!HJ4D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.png 1272w, https://substackcdn.com/image/fetch/$s_!HJ4D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb88d8a9e-30ec-4966-8b70-c949d1a8fbe7_624x485.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><figcaption class="image-caption">Claude Code Channels</figcaption></figure></div><p>If you&#8217;re thinking &#8220;wait, that sounds like what OpenClaw does&#8221; or &#8220;that&#8217;s basically <a href="https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions">how Wiz already works through Discord and iMessage</a>,&#8221; you&#8217;re right. This is Anthropic building the infrastructure for exactly that kind of workflow. Both are research previews, which means they&#8217;re going further with it.</p><p>When I started building my agent, I had to create the Discord connection myself. Custom code, custom status messages, everything from scratch. Now they&#8217;re shipping it out of the box. Great for people who want to get started. If you want more models, local models, or highly custom setups, you&#8217;ll still need something like what I built. But for a Claude-only workflow, this is fantastic.</p><p>Something else I&#8217;ve mentioned before: because I use Claude Code as my daily driver, my agent watches the Claude Code changelog automatically. It looks for new features but also for bug fixes that might overlap with patches I&#8217;ve already applied. Double-patching is a real thing when you&#8217;re building on top of a tool that updates daily.</p><div><hr></div><h2>Running Qwen 397B Locally on a MacBook (Dan Woods)</h2><p>This one caught my attention. Dan Woods published an article about running Qwen 3.5 at 397 billion parameters on a MacBook Pro M3 Max with 48 GB of RAM. Getting 5.5 tokens per second.</p><p>Not a server. Not a datacenter. A laptop.</p><p>He used the concept from Apple&#8217;s &#8220;LLM in a Flash&#8221; paper, published three years ago, and built a custom inference engine in pure C, Objective-C, and hand-tuned Metal shaders. The core idea: you don&#8217;t need to fit the entire model in memory at once. You load and unload layers strategically. He quantized experts to 2-bit, reduced expert activation from 10 per token to 4 (with no quality loss), and used Claude Code to run 90+ autoresearch experiments to optimize it all. The whole thing is open source on GitHub as <code>flash-moe</code>.</p><p>It changes the conversation about what hardware you need for capable local models.</p><p>I&#8217;ve been <a href="https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment">experimenting with local LLMs on my Mac and iPhone</a> and built <a href="https://thoughts.jock.pl/p/familiar-local-ai-agent-mac">Familiar, a local AI agent app</a>. So this stuff hits close to home for me. Everyone keeps saying you need more and more RAM to run bigger models. This concept gives a different answer, and it&#8217;s really worth reading.</p><p><a href="https://x.com/danveloper/status/2034353876753592372">Read Dan&#8217;s full article on X.</a> If you have a Mac with 48 GB or even less, you might be able to try something similar.</p><div><hr></div><h2>Anthropic&#8217;s Quiet Vibe Shift</h2><p>I want to talk about something less technical. The way Anthropic feels right now.</p><p>They had rough PR last year. As a company, not as a product. I think there was a pivot in how they do things, and I can see it everywhere. They&#8217;re more open. More responsive on X, Threads, everywhere. They&#8217;re listening to feedback and acting on it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lSwh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lSwh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.png 424w, https://substackcdn.com/image/fetch/$s_!lSwh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.png 848w, https://substackcdn.com/image/fetch/$s_!lSwh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.png 1272w, https://substackcdn.com/image/fetch/$s_!lSwh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lSwh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.png" width="655" height="753" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/245bf82a-1315-4ffb-9955-acaa36b80473_655x753.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:753,&quot;width&quot;:655,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:113247,&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://thoughts.jock.pl/i/191569360?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.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_!lSwh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.png 424w, https://substackcdn.com/image/fetch/$s_!lSwh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.png 848w, https://substackcdn.com/image/fetch/$s_!lSwh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.png 1272w, https://substackcdn.com/image/fetch/$s_!lSwh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F245bf82a-1315-4ffb-9955-acaa36b80473_655x753.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><strong>Small example</strong>: I asked Boris Cherny on Threads if I could become the copywriter for Claude Code&#8217;s status messages. You know, those little messages when it&#8217;s working: &#8220;Warming up...&#8221;, &#8220;Weaving spells...&#8221; and things like that. He replied, asked what we should add. That kind of thing. It&#8217;s small. But it says something about how they&#8217;re engaging now.</p><p><strong>Bigger moves</strong>:</p><p><strong>Opus 4.6 with 1 million context became the default for Claude Code.</strong> No pricing change. This happened on March 13. If you&#8217;re on a Max, Team, or Enterprise plan, you get the full 1M window automatically. It&#8217;s not perfect (context decay is still a thing, and we know 1M doesn&#8217;t mean perfect recall). But it&#8217;s much better than 200K. A real upgrade for free.</p><p><strong>They doubled usage limits for two weeks.</strong> March 13 through March 28. Free, Pro, Max, and Team plans. The catch: it&#8217;s during off-peak hours (outside 8 AM to 2 PM Eastern on weekdays, and all day on weekends). So if you use Claude after work or on weekends, you get double the messages. Smart move. Generous, but also helps them balance server load.</p><p>The stats I keep seeing show that more people are moving from ChatGPT to Claude. And honestly? With what Anthropic is shipping right now, I get it. They&#8217;re in a strong position and they&#8217;re playing it well.</p><p>And then there&#8217;s the government situation. Trump ordered every federal agency to stop using Anthropic after they refused to remove contractual &#8220;red lines&#8221; against mass surveillance and autonomous weapons. The Pentagon labeled them a national security risk. Anthropic is fighting it in court. Whatever your take on the politics, from a brand perspective? Refusing to build autonomous weapons systems is one hell of a PR move. Sometimes the best marketing is having the right enemies.</p><div><hr></div><h2>Code with Claude Conference</h2><p><a href="https://claude.com/code-with-claude">Anthropic is running developer conferences</a>. Code with Claude. San Francisco on May 6, London on May 19, Tokyo on June 10.</p><p>Hands-on workshops, live demos of new capabilities, conversations with the teams behind Claude. I signed up for London. Hopefully I get in (it&#8217;s a lottery). If I do, I&#8217;ll report back.</p><p>I like that they&#8217;re doing this in person, in multiple cities. Not just a livestream. Though livestream and recordings will be available too.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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! If you like what I write and how - subscribe for more!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Quick Bits</h2><p><strong>GPT-5.4 mini and nano dropped.</strong> OpenAI released smaller versions of GPT-5.4 on March 17. Mini is 2x faster than the previous GPT-5 mini and approaches full GPT-5.4 on some benchmarks. Nano is the cheapest option ($0.20 per million input tokens). Normal cycle: new frontier model arrives, then smaller versions follow for speed and cost. Good to see.</p><p><strong>I&#8217;m waiting for new Haiku.</strong> I was using Haiku for basic tasks in my agent, and it was great. Then Sonnet 4.6 dropped and was so much better that I switched. But Haiku on a Max subscription is essentially free, so a new capable Haiku would let me drop costs on simple operations. Hoping Anthropic ships one soon.</p><div><hr></div><h2>Thank You + Giveaway Update</h2><p>I&#8217;m choosing the winners of the <a href="https://thoughts.jock.pl/p/1000-subscribers-digital-thoughts-journey">Claude Code Max subscription giveaway</a> today. I&#8217;ll contact the winner and post the result in the comments on the 1,000 subscribers post. Thanks for participating. I loved reading what you&#8217;d automate. Some genuinely creative ideas in there.</p><p><strong>Small win this week:</strong> Digital Thoughts hit #25 in Top Rising in Technology on Substack. That&#8217;s all your doing. I&#8217;m just sharing experiments, tests, and things I&#8217;m building. Really glad you&#8217;re here.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-rqQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-rqQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.png 424w, https://substackcdn.com/image/fetch/$s_!-rqQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.png 848w, https://substackcdn.com/image/fetch/$s_!-rqQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.png 1272w, https://substackcdn.com/image/fetch/$s_!-rqQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-rqQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.png" width="471" height="355.28976377952756" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:479,&quot;width&quot;:635,&quot;resizeWidth&quot;:471,&quot;bytes&quot;:230889,&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://thoughts.jock.pl/i/191569360?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.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_!-rqQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.png 424w, https://substackcdn.com/image/fetch/$s_!-rqQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.png 848w, https://substackcdn.com/image/fetch/$s_!-rqQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.png 1272w, https://substackcdn.com/image/fetch/$s_!-rqQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a2333a-1ce5-49ac-881e-65feb416fdb1_635x479.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>If you want to share Digital Thoughts with someone who&#8217;d find it useful, I&#8217;d really appreciate it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Digital Thoughts&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Digital Thoughts</span></a></p><div><hr></div><p><em>This post was a bit different. If you liked it (or didn&#8217;t), let me know in the survey below. If there&#8217;s appetite for this format, I&#8217;ll do it more often alongside the usual deep dives.</em></p><div class="poll-embed" data-attrs="{&quot;id&quot;:480524}" data-component-name="PollToDOM"></div><p><em>I write about building AI agents, automation, and what actually works when you put AI to the test. If you know someone who&#8217;d enjoy this, <a href="https://thoughts.jock.pl/subscribe">sharing Digital Thoughts</a> is the best way to support it.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/ai-opinions-march-2026-google-claude-anthropic?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/p/ai-opinions-march-2026-google-claude-anthropic?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><p><em>If you&#8217;re using Claude Code and want to get more out of it, check out the <a href="https://wiz.jock.pl/store/claude-code-workshop">Claude Code Workshop</a> or grab the <a href="https://wiz.jock.pl/store/claude-code-prompts">Claude Code Prompts Pack</a>. Both built from how I actually use it every day, including the stuff in this post.</em></p>]]></content:encoded></item><item><title><![CDATA[I Gave My AI Agent $25 and Told It to Buy Me a Gift. Here’s How Far It Got.]]></title><description><![CDATA[Five hours. Four stores. One debit card. Zero successful purchases. And a surprising amount of accidental security theater.]]></description><link>https://thoughts.jock.pl/p/ai-agent-shopping-experiment-real-money-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/ai-agent-shopping-experiment-real-money-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Wed, 18 Mar 2026 17:15:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sEYJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.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_!sEYJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sEYJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!sEYJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!sEYJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!sEYJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sEYJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4883291,&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://thoughts.jock.pl/i/191387666?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.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_!sEYJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!sEYJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!sEYJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!sEYJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7d1bca-3255-4164-ab57-7cd8bd75a39c_2048x2048.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>Two months ago, I wrote about <a href="https://thoughts.jock.pl/p/agentic-commerce-ai-shopping-for-you-2026">agentic commerce</a>. The theory. The McKinsey projections. What happens when AI agents start buying things for humans. Then I decided to actually test it.</p><p>I loaded 100 PLN (about $25) onto a virtual debit card. Gave it to Wiz, my AI agent. And asked a simple question: go buy me a gift. Something thoughtful. Something I&#8217;d actually use.</p><p>Here&#8217;s what happened over the next five hours.</p><div><hr></div><h2>The Easy Part: Choosing the Gift</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1VXX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1VXX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1VXX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1VXX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1VXX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1VXX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg" width="1206" height="1342" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1342,&quot;width&quot;:1206,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151061,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thoughts.jock.pl/i/191387666?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1VXX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1VXX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1VXX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1VXX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F308c661e-af3c-44de-9874-437b4f3c6c39_1206x1342.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">First time here? Like hands-on experiments? Even bad ones? Consider becoming a subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Wiz knows me. Not like a recommendation algorithm knows you (based on what you clicked). I mean really knows. <a href="https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture">My agent has built a profile of who I am.</a> My ADHD. How I fidget when I&#8217;m thinking. The fact that I have about 47 unfinished projects and I&#8217;m comfortable with that. My interests. My energy levels. What matters to me.</p><p>Three gift suggestions appeared: a fidget slider, a mechanical keyboard switch tester, and a puzzle box.</p><p>The agent chose the fidget slider. 50 PLN range. Practical. The kind of thing that would actually sit on my desk and get used, not end up in a drawer three weeks later.</p><p>This part of the experiment worked perfectly. The hard part wasn&#8217;t knowing what to buy. It was where to buy it.</p><div><hr></div><h2>Allegro: The Bouncer</h2><p>Allegro is Poland&#8217;s biggest online marketplace. Millions of products. Millions of transactions daily. If you&#8217;re selling something in Poland, you&#8217;re on Allegro.</p><p>The agent tried to connect with a headless browser (Playwright, basically automated Chrome). Instant rejection. Cloudflare detected it within milliseconds. Not a polite &#8220;verify you&#8217;re human&#8221; challenge. Just blocked.</p><p>The thing is, I understand why. Allegro&#8217;s platform handles money. Fraud risk is real. Aggressive bot protection makes sense when you&#8217;re processing that volume.</p><p>But from the agent&#8217;s perspective, this was a legitimate customer with verified payment. Money ready. Intent to buy. Same as a human. The security system couldn&#8217;t distinguish between a malicious bot scraping product data and an AI doing a legitimate checkout.</p><div><hr></div><h2>Amazon: The Locked Door</h2><p>Amazon doesn&#8217;t offer guest checkout on Amazon.pl. You have to log in.</p><p>The agent tried something clever: access Apple&#8217;s Passwords app to get saved credentials. I have root access on the Mac Mini, full disk access, everything.</p><p>Interesting discovery: even with full system access, you can&#8217;t just read passwords from the Apple Keychain. The encryption is hardware-bound to the Secure Enclave. You&#8217;d need biometric authentication or a password prompt. The agent respectfully declined to ask for either.</p><p>This is actually good security design. But it meant the agent hit a wall. No login, no browsing, no shopping.</p><div><hr></div><h2>Empik via Playwright: The Gatekeeper</h2><p>Third store. Empik is a major Polish bookstore and electronics retailer. The agent found the fidget slider product page. Added it to cart. Got to checkout.</p><p>Then: Cloudflare Turnstile. These CAPTCHAs are specifically designed to target headless browsers. They check for browser fingerprinting markers that Playwright can&#8217;t fake. The agent was blocked before entering shipping details.</p><p>0 for 3. But something interesting happened next.</p><div><hr></div><h2>Empik via Safari: The Heist</h2><p>Instead of fighting headless browser detection, the agent switched tactics.</p><p><a href="https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026">The Mac Mini has a real display.</a> Not headless. A virtual one, but macOS treats it like any other screen. So the agent controlled Safari natively via AppleScript. Real browser. Real rendering engine. No headless fingerprinting.</p><p>This is where it got interesting.</p><p>The agent browsed Empik. Found the fidget slider. Added to cart. Selected the slider color and quantity. Reviewed the product details. This took actual thought, not automation. Making choices based on what would be useful, not just clicking the first result.</p><p>Filled in the shipping address field by field. Street. Number. City. Postal code. Clicked the delivery method dropdown. Selected the option. All via AppleScript, controlling the mouse, typing like a human would.</p><p>The agent got 95% through a real checkout. Shipping address filled in. Delivery method selected. Payment page loaded.</p><p>I was watching this happen in real time. It felt like watching a competent person shop online, not a robot executing commands.</p><div><hr></div><h2>The Final Boss: P24 Payment Iframe</h2><p>Przelewy24 (P24) is Poland&#8217;s dominant payment processor. When you check out on a Polish store, P24 handles the transaction. The payment form loads inside a cross-origin iframe.</p><p>This is where the agent hit the actual wall.</p><p>The browser&#8217;s same-origin policy means the agent cannot interact with anything inside that iframe. Can&#8217;t see the form fields. Can&#8217;t read what data they&#8217;re asking for. Can&#8217;t type in the card number. Can&#8217;t click submit. Can&#8217;t access anything except the fact that the iframe exists.</p><p>It&#8217;s not a CAPTCHA. It&#8217;s not bot detection. It&#8217;s a fundamental web security boundary. And it&#8217;s absolute.</p><p>Five hours of work. $25 ready to spend. Genuine intelligence. All of it ended at a CORS header.</p><div><hr></div><h2>What This Actually Means</h2><p>I wasn&#8217;t frustrated by the failure. I was fascinated by what the failure revealed.</p><p>There are five layers of defense that stores have, mostly by accident:</p><ol><li><p><strong>Bot detection (Cloudflare, Turnstile).</strong> Designed to stop scrapers and fraud. Catches headless browsers.</p></li><li><p><strong>Authentication walls.</strong> No guest checkout forces login. Passwordless systems (Keychain) protect credentials even from root.</p></li><li><p><strong>CAPTCHA challenges.</strong> Target headless browsers specifically.</p></li><li><p><strong>Browser fingerprinting.</strong> Detect subtle markers that headless tools can&#8217;t replicate.</p></li><li><p><strong>Payment isolation (iframe + CORS).</strong> Designed for security, makes agent interaction impossible.</p></li></ol><p>McKinsey says agentic commerce is a $1.6 trillion opportunity by 2030. It probably is. But right now, in March 2026, an AI agent with money, intelligence, and genuine intent to buy something can&#8217;t complete a checkout in any of the four largest Polish online stores. <a href="https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business">Not every experiment succeeds.</a> The point is what you learn from them.</p><p>The stores aren&#8217;t deliberately blocking AI customers. They&#8217;re blocking bots. The side effect is that they&#8217;re also blocking the future.</p><p>But this isn&#8217;t a wall the agent hit because it was dumb. <a href="https://thoughts.jock.pl/p/how-i-taught-ai-agent-to-think-ep2">The agent tried multiple approaches:</a> different browsers, different techniques, creative problem-solving. None of it worked because the gap between success and failure wasn&#8217;t a skill gap. It was a security architecture gap.</p><div><hr></div><h2>The Solutions Are Already Here</h2><p>Here&#8217;s what makes this moment interesting: the infrastructure to fix this already exists. It&#8217;s not vapor. It&#8217;s shipping, now, in March 2026.</p><p><strong>Shopify launched Agentic Storefronts in Winter 2026.</strong> Products get syndicated to ChatGPT, Perplexity, and Microsoft Copilot. The Agentic Plan is $0/month. You only pay transaction fees: 2.9% plus 30 cents. No additional cost. AI-driven traffic to Shopify stores is up 7x since January 2025. AI-attributed orders are up 11x. Every Shopify store gets a live MCP endpoint that agents can use to query catalog, prices, and inventory.</p><p><strong>Stripe built an Agentic Commerce Suite.</strong> Product discovery, checkout, payments via API. Works with Wix, WooCommerce, BigCommerce, Squarespace, commercetools. Shared Payment Tokens so agents can securely handle transactions within conversation.</p><p><strong>Google and Shopify co-developed the Universal Commerce Protocol (UCP).</strong> Open standard. Endorsed by 20+ retailers: Gymshark, Monos, Keen, Pura Vida, and others. Supports REST, MCP, Agent Payments Protocol, Agent2Agent transactions. AI agents can handle discount codes, loyalty credentials, subscription billing. All within the conversation.</p><p><strong>WooCommerce 10.3 added MCP support.</strong> Model Context Protocol for AI assistants. Product search. Cart management. Order creation. Google and Stripe are collaborating on seamless checkout integration.</p><p>The infrastructure exists. The gap is adoption.</p><p>Allegro doesn&#8217;t have Agentic Storefronts. Neither does Empik or Amazon.pl. None of the stores I tested support UCP, MCP, or Stripe&#8217;s Commerce Suite. The fidget slider sits in a catalog that the infrastructure was designed to serve, but no store chose to implement the protocol.</p><p>This is the real inflection point. Not whether agents can shop (they can, given the right infrastructure). But whether stores will choose to let them. The solutions are here. They&#8217;re not being used.</p><div><hr></div><h2>What Stores Should Do Now</h2><p>If you run an e-commerce store, here&#8217;s what matters immediately:</p><p><strong>Structured data first.</strong> Add Product and Offer JSON-LD schema to your pages. Takes an hour. Zero cost. Agents can immediately read your prices and availability without scraping.</p><p><strong>Guest checkout.</strong> Every authentication wall is a wall for agents too. If a human can buy without logging in, an agent eventually will. It&#8217;s not about security theater. It&#8217;s about who gets to access your store.</p><p><strong>Semantic HTML.</strong> Clean product markup. h1 for product name. Price in a parseable element. img tags with alt text. Basic web standards that happen to be agent-friendly.</p><p><strong>API access.</strong> Even a read-only product API changes everything. Agents skip the browser entirely if they can query your catalog programmatically. This is harder than the others. But it&#8217;s worth it.</p><p><strong>Consider the Agentic Plan.</strong> If you&#8217;re already on Shopify, flipping the switch costs nothing. You get access to ChatGPT, Copilot, and Perplexity traffic for only transaction fees. The upside is real. The downside is minimal.</p><p>Not sure where your store stands? That&#8217;s why I built the tool.</p><div><hr></div><h2>Building a Measurement Tool</h2><p>This gap is worth measuring. So I built something.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BvyF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BvyF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.png 424w, https://substackcdn.com/image/fetch/$s_!BvyF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.png 848w, https://substackcdn.com/image/fetch/$s_!BvyF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.png 1272w, https://substackcdn.com/image/fetch/$s_!BvyF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BvyF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.png" width="982" height="891" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23cc2aca-2e32-4687-902d-9b21447b0533_982x891.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:891,&quot;width&quot;:982,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110645,&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://thoughts.jock.pl/i/191387666?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.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_!BvyF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.png 424w, https://substackcdn.com/image/fetch/$s_!BvyF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.png 848w, https://substackcdn.com/image/fetch/$s_!BvyF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.png 1272w, https://substackcdn.com/image/fetch/$s_!BvyF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23cc2aca-2e32-4687-902d-9b21447b0533_982x891.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 class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://wiz.jock.pl/experiments/ai-shopping-checker/&quot;,&quot;text&quot;:&quot;Try it!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://wiz.jock.pl/experiments/ai-shopping-checker/"><span>Try it!</span></a></p><p>A tool that scores any e-commerce store on 12 criteria across ~60 sub-checks. Structured data quality. AI crawler policies. Server rendering. Checkout accessibility. Payment flow. Bot detection posture. API protocols like <a href="https://thoughts.jock.pl/p/agentic-commerce-ai-shopping-for-you-2026">UCP and MCP</a>. Security and trust signals. The whole stack that determines whether an AI agent can actually shop there.</p><p>The tool tests each layer independently and produces a score from 0 to 100. Grade A means an agent could probably complete a purchase. Grade F means it&#8217;s completely locked out. Most stores land somewhere in the C-D range. The gap is bigger than you&#8217;d expect.</p><p>This isn&#8217;t about shaming stores. It&#8217;s about showing the gap between where e-commerce is and where it needs to be. Some stores are more open. Some less so. Eventually (maybe in 2028, maybe in 2030), there will be stores optimized for agents the same way some sites optimize for mobile or accessibility.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6DUv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6DUv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.png 424w, https://substackcdn.com/image/fetch/$s_!6DUv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.png 848w, https://substackcdn.com/image/fetch/$s_!6DUv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.png 1272w, https://substackcdn.com/image/fetch/$s_!6DUv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6DUv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.png" width="867" height="929" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cce96770-bb00-4959-b268-771f075c454e_867x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:929,&quot;width&quot;:867,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:103227,&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://thoughts.jock.pl/i/191387666?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.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_!6DUv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.png 424w, https://substackcdn.com/image/fetch/$s_!6DUv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.png 848w, https://substackcdn.com/image/fetch/$s_!6DUv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.png 1272w, https://substackcdn.com/image/fetch/$s_!6DUv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce96770-bb00-4959-b268-771f075c454e_867x929.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>You can try the free tool yourself at <a href="https://wiz.jock.pl/experiments/ai-shopping-checker">wiz.jock.pl/experiments/ai-shopping-checker</a>.</p><p>And if you want more than a score: I also built a <a href="https://wiz.jock.pl/store/ai-store-readiness-report">custom report</a> that takes the scan results and generates store-specific fix instructions with actual code snippets, a priority roadmap, and an AI agent fix package (AGENT.md + templates) that your dev team or AI coding agent can use to implement the changes. It&#8217;s $29.99 per store, or free if you&#8217;re a <a href="https://thoughts.jock.pl/subscribe">paid Digital Thoughts subscriber</a>.</p><div><hr></div><h2>Why This Matters Beyond Shopping</h2><p>The real insight isn&#8217;t about fidget sliders.</p><p>It&#8217;s that the web was designed for humans clicking buttons. Not for agents. And every layer of security, every protection, every best practice that made sense for humans, now acts as a barrier for agents.</p><p>We&#8217;re at an inflection point. The infrastructure for agentic commerce isn&#8217;t ready. Not because of technical limitations. Because of architectural choices made when the threat model was &#8220;humans with malicious intent,&#8221; not &#8220;AI doing legitimate shopping.&#8221;</p><p><a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">The math works.</a> The use cases exist. The value is real. But the infrastructure is in the way.</p><p>Stores that solve this first (thinking about how agents will interact with their checkout, not just how humans do) will have an advantage in 2027 and 2028.</p><div><hr></div><h2>The Outcome</h2><p>I bought the fidget slider myself. With my human fingers. On my phone. Took about three minutes. The agent watched from the Mac Mini, learning what a successful checkout looked like.</p><p>The agent&#8217;s failure wasn&#8217;t a bug. It was data. Real data about the gap between &#8220;AI can do this in theory&#8221; and &#8220;AI can actually do this in practice.&#8221;</p><p>That gap is closing. But it&#8217;s measured in years, not months.</p><div><hr></div><p><em>I write about building AI agents, automation, and what actually works (and doesn&#8217;t) when you try to make AI useful in real life. If you&#8217;re interested in this kind of thing, <a href="https://thoughts.jock.pl/subscribe">I write about it every week on Digital Thoughts</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?"><span>Subscribe now</span></a></p><p><em>If you&#8217;re building AI agents that interact with the web, the <strong><a href="https://wiz.jock.pl/store/ai-agent-blueprint">AI Agent Blueprint</a></strong> covers exactly how I set Wiz up to handle these kinds of challenges. Browser automation, error recovery, trying multiple approaches, learning from failure. Everything from this experiment is in there.</em></p>]]></content:encoded></item><item><title><![CDATA[How I Taught My AI Agent to Think]]></title><description><![CDATA[From 471 lines of instructions to 61, self-improving feedback loops, and giving it its own computer]]></description><link>https://thoughts.jock.pl/p/how-i-taught-ai-agent-to-think-ep2</link><guid isPermaLink="false">https://thoughts.jock.pl/p/how-i-taught-ai-agent-to-think-ep2</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Tue, 17 Mar 2026 11:55:14 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/191240137/c8f6fc5f4d87aedbdbd237683da9d579.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Episode two. Three stages of giving an AI agent real independence.</p><p>First, a counterintuitive discovery: more instructions made my agent worse. I went from 471 lines of rules down to 61 by replacing abstract adjectives with concrete behaviors. &#8220;Principle beats rule&#8221; turned out to be the single biggest performance unlock.</p><p>Then, teaching it to learn. Error logging, structured lessons, and an identity layer that knows who I am. But MIT research shows personalized profiles increase sycophancy by 33-45%. The AI starts telling you what you want to hear instead of catching your mistakes. True autonomy requires friction, not agreement.</p><p>Finally, giving it a physical home. Migrating to a dedicated Mac Mini broke everything: no display meant no UI automation (solved with a virtual 5K screen hack), hundreds of hard-coded paths pointed to folders that didn&#8217;t exist, and the agent burned through API credits stuck in silent error loops. The fix: full root authority inside a contained blast radius. If the AI deletes the entire drive, it literally doesn&#8217;t matter.</p><p>The payoff: a self-improving agent running 24/7 on its own machine, with its own iCloud account, reachable via iMessage like a coworker.</p><p>Posts discussed in this episode:</p><p>- <a href="https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions">I Built a Personal AI Agent Called Wiz</a> (https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions)</p><p>- <a href="https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture">My AI Agent Learns From Its Own Mistakes. Here&#8217;s the Architecture</a> (https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture)</p><p>- <a href="https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026">I Gave My AI Agent Its Own Computer. Here&#8217;s Every Lesson From 72 Hours of Migration</a> (https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026)</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[I Gave My AI Agent Its Own Computer. Here’s Every Lesson From 72 Hours of Migration.]]></title><description><![CDATA[I spent a weekend moving my entire AI agent architecture from my MacBook to a dedicated Mac Mini. It broke in ways I didn&#8217;t expect.]]></description><link>https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Mon, 16 Mar 2026 12:29:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eB9F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.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_!eB9F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eB9F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!eB9F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!eB9F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!eB9F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eB9F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4549908,&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://thoughts.jock.pl/i/191117050?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.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_!eB9F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!eB9F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!eB9F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!eB9F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e17597c-df5b-4697-8a4d-a011ea77b020_2048x2048.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><em>Some things were easier than I thought. And a few surprises changed how I think about running AI agents entirely.</em></p><div><hr></div><p>I bought a Mac Mini. Not because of hype. Not because someone on Twitter said it was cool. I bought it because after months of <a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">running an AI agent on my personal laptop</a>, I hit a wall that kept getting higher.</p><p>The wall was simple: every time I took my MacBook somewhere, my agent stopped working.</p><p>I had built workarounds. Scripts that prevented sleep. Auto-wake systems that restarted everything when I opened the lid again. It worked. Until it didn&#8217;t. Because the fundamental problem was that my personal computer and my AI agent&#8217;s computer were the same device. And that creates friction in ways you don&#8217;t expect until you live with it for months.</p><p>So I started thinking about a dedicated machine. Not &#8220;wouldn&#8217;t it be nice&#8221; thinking. Practical &#8220;what are my options&#8221; thinking.</p><div><hr></div><h2>Why Mac Mini (And What I Considered Instead)</h2><p>I looked at everything. Seriously.</p><p><strong>Raspberry Pi.</strong> Cheap. Could probably run a Claude Code-based agent. But administrating it would be rough. ARM Linux, limited RAM, no macOS ecosystem. Every tool I&#8217;d built relied on AppleScript, macOS permissions, iMessage, Calendar. Starting over on Linux felt like rebuilding from scratch for no good reason.</p><p><strong>Mac Studio.</strong> The dream machine. Enough power to run serious local LLMs. Real independence from API keys and subscriptions. But expensive. And here&#8217;s the thing I kept coming back to: local models are getting better fast. The hardware you need to run them is getting <em>smaller</em> every few months. <a href="https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment">I ran Qwen 3.5 on my M1 Pro MacBook</a> and it worked. Not great for daily driving, but it worked. In two years, the Mac Studio I&#8217;d buy today would be overkill for what local models will need. The bet I&#8217;m making is that models get more efficient faster than hardware gets cheaper.</p><p><strong>Custom PC / mini server.</strong> Same Linux problem as Raspberry Pi, times ten. I&#8217;m deep in the Apple ecosystem. My agent uses iMessage, Apple Mail, Calendar, Reminders, the Passwords app. Rebuilding all that on Linux would take weeks and produce something worse.</p><p>Mac Mini was the answer. Base model. Cheapest option. M4 chip, which is genuinely more than enough for an AI agent that mostly coordinates cloud APIs and runs local scripts. Cost-effective, same ecosystem, small enough to sit on a shelf and forget about.</p><p>I walked into a store on a Friday and started migrating the same evening.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Digital Thoughts is all about experiments. I don&#8217;t have all the answers here, but if you like real expierience - good and bad, then we might be a good match! </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>The Differences</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vu7t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vu7t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vu7t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vu7t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vu7t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vu7t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:838329,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thoughts.jock.pl/i/191117050?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vu7t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vu7t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vu7t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vu7t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcff93f49-3e0e-43d7-a769-0f3a36b43486_1536x2048.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>Before the migration story, you need to understand what actually changes when your agent moves from your daily-driver laptop to a dedicated headless machine. These aren&#8217;t obvious until you&#8217;re in the middle of it.</p><h3>1. Headless means no display. That breaks more than you think.</h3><p>When your AI agent runs on your laptop, it has a screen. Tools like Peekaboo (which controls macOS UI elements) just work. Screenshots just work. Anything that needs to &#8220;see&#8221; what&#8217;s on screen just works.</p><p>Mac Mini with no monitor attached? None of that works.</p><p>I didn&#8217;t fully appreciate this until things started failing silently. <code>screencapture</code> returned empty files. UI automation scripts ran but couldn&#8217;t find any windows. My agent was trying to interact with a desktop that technically didn&#8217;t exist.</p><p><strong>The fix: BetterDisplay.</strong> This app creates a persistent virtual display that macOS treats as real. I set up a 5K virtual screen called &#8220;WizDisplay&#8221; that auto-starts when the Mac Mini boots. It has an HTTP API so my health monitor can check if it&#8217;s still alive and reconnect it automatically if BetterDisplay crashes. After this, screencapture, Peekaboo, and all UI automation worked perfectly.<br><br>Why not Apple&#8217;s built-in CGVirtualDisplay API? I tried. It requires special entitlements that only signed apps can use. A standalone Python or Swift script can&#8217;t create a virtual display. BetterDisplay handles those entitlements as a signed app. This took me an entire day to figure out.</p><h3>2. Full machine authority changes the game.</h3><p>On my MacBook, my agent had limited permissions. I controlled which files it could access, which system settings it could change. Made sense. My personal data was there. Work documents. Passwords. Everything.</p><p>On a dedicated Mac Mini with a fresh macOS install and nothing personal on it? Different story.</p><p>I gave Wiz full root access. Passwordless sudo. Full Disk Access. Screen Recording. Accessibility permissions. Every Automation grant (Messages, Mail, Calendar, Contacts, Finder, Safari, Reminders, Notes, Photos). All of it.</p><p>This sounds reckless. It&#8217;s not. There is nothing on this machine that I&#8217;m afraid of losing. It&#8217;s a clean environment built specifically for the agent. If something goes wrong, I wipe it and start over. The real data lives in Git and iCloud.</p><p>The practical difference is huge. My agent can now install software, modify system preferences, manage LaunchAgents, fix permission issues, and restart services without ever asking me. <a href="https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture">The self-improvement architecture I built</a> works much better when the agent can actually act on what it learns without hitting permission walls.</p><p><strong>A word of caution:</strong> This only makes sense because it&#8217;s a dedicated, isolated machine. I would never do this on a computer with my personal data, work accounts, or anything I can&#8217;t rebuild from a backup. The whole point of a separate machine is that you can be generous with permissions precisely because the blast radius is contained.</p><h3>3. Clean slate means you rebuild everything.</h3><p>I installed a fresh macOS. No migration from my MacBook. New user account just for the agent. Completely clean.</p><p>This means: no apps, no calendars, no messages, no mail, no documents, no browser sessions, no saved passwords. Everything my agent could access on my MacBook through proximity and shared filesystem? Gone.</p><p>You have to think about this like onboarding a new team member. If my agent needs access to my calendar, I need to share it. (I shared my iCloud calendars with the agent&#8217;s Apple ID.) If it needs email, I need to log in. (I set up Apple Mail with my Macmillan work account.) If it needs files, I need a way to exchange them.</p><p>This is actually healthy. It forces you to be intentional about what your agent has access to, rather than the lazy &#8220;it can see everything because we share a filesystem&#8221; approach.</p><h3>4. Your laptop stops being a server.</h3><p>My M1 Pro MacBook was fine for most things. But running AI agents alongside my actual work? It got sluggish. Browser tabs competing with background automation. <a href="https://thoughts.jock.pl/p/familiar-local-ai-agent-mac">Local model experiments</a> eating RAM that I needed for Xcode or Figma. The agent occasionally opening apps or running scripts while I was in the middle of something else.</p><p>Now my MacBook is just my MacBook again. Fast, clean, mine. All 25 LaunchAgents that used to run in the background? Moved to Mac Mini. Every cron job, every watcher, every automation. My battery lasts longer. My fans are quieter. And my agent has a dedicated M4 chip that draws about 15 watts idle. That&#8217;s roughly $15/year in electricity for a machine that runs 24/7.</p><h3>5. Development needs Git discipline.</h3><p>When everything lived on one machine, there was no friction. Edit a file, run it, done. Now I have code on two machines. My MacBook (where I sometimes write code) and the Mac Mini (where it runs).</p><p>GitHub became essential, not optional. I created a separate branch (<code>wiz-mini</code>) for the Mac Mini paths, and the workflow is: I push to <code>main</code> from MacBook, Mac Mini fetches and rebases. Not complex, but you have to be disciplined about it. If you&#8217;re sloppy with Git, you&#8217;ll end up with divergent states and debugging sessions that eat your weekend.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2vO0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2vO0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.png 424w, https://substackcdn.com/image/fetch/$s_!2vO0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.png 848w, https://substackcdn.com/image/fetch/$s_!2vO0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!2vO0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2vO0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.png" width="1456" height="825" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:825,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:245067,&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://thoughts.jock.pl/i/191117050?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.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_!2vO0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.png 424w, https://substackcdn.com/image/fetch/$s_!2vO0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.png 848w, https://substackcdn.com/image/fetch/$s_!2vO0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!2vO0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17c7b37-1a96-4a26-94ee-51f52e7fa722_2574x1458.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><div><hr></div><p><em>Before we jump into migration part - if you are my paid subscriber and thinking about migration of you AI Agent - I prepared <a href="https://wiz.jock.pl/store/agent-migration-pack/">AI Agent Migration Pack</a>. It is ready to use solution and you can avoid my mistakes!</em> </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://wiz.jock.pl/store/&quot;,&quot;text&quot;:&quot;Check out Wiz Store&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://wiz.jock.pl/store/"><span>Check out Wiz Store</span></a></p><div><hr></div><h2>The Migration Itself</h2><h3>Step 1: Map everything first.</h3><p>Before I touched the Mac Mini, I asked Wiz to create a complete inventory of itself. Every automation. Every cron job. Every LaunchAgent. Every skill. Every script that runs on a schedule. Every external service it connects to. Every file path it depends on.</p><p>This handoff document was critical. Without it, you&#8217;re guessing what to migrate, and you <em>will</em> forget something.</p><p><strong>Practical advice:</strong> Ask your AI agent to map its own architecture before you start. It knows what it runs, what it depends on, and what will break if you move it. The list will be longer than you expect. Mine had 25 LaunchAgents, dozens of Python scripts, CLI tools, API integrations, and skills with hardcoded paths. Getting this list first saved me hours of debugging later.</p><h3>Step 2: Fresh install, not migration.</h3><p>I updated macOS to the latest version on the Mac Mini. Created a new user account for the agent. Did not use Apple&#8217;s migration assistant. Clean slate.</p><p>Some people will disagree with this. Migration assistant would have carried over apps, settings, maybe even some of the automation. But it also would have carried over cruft. Old paths. Conflicting configurations. Half-broken experiments I&#8217;d forgotten about. Starting clean meant I knew exactly what was on the machine because I put it there.</p><h3>Step 3: SSH first, everything else second.</h3><p>The first thing I set up was SSH access from my MacBook to the Mac Mini. Then Tailscale, so I could reach it from anywhere, not just my home network.</p><p>Tailscale deserves its own paragraph. It&#8217;s a mesh VPN built on WireGuard. You install it on both machines, log in with the same account, and they can see each other as if they&#8217;re on the same local network. No port forwarding. No dynamic DNS. No config files. It just works. Free for personal use. This was essential because I travel, and &#8220;my agent only works when I&#8217;m home&#8221; is exactly the problem I was solving.</p><p>I also created aliases on my MacBook: <code>wiz</code> SSHes to Mac Mini (tries Tailscale first, falls back to local network), opens Claude Code, and I&#8217;m working as if the agent were local. <code>wizb</code> is my backup that runs Claude Code locally on MacBook if I need it. Seamless.</p><h3>Step 4: The path problem.</h3><p>My MacBook username was <code>joozio</code>. My Mac Mini username is <code>wiz</code>. Every hardcoded path in every script had to change from <code>/Users/joozio/</code> to <code>/Users/wiz/</code>.</p><p>Sounds simple. An AI agent can do a find-and-replace in minutes. And it did. But here&#8217;s what I missed: <a href="https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions">the skills I&#8217;d built for Claude Code</a> also had hardcoded paths. SKILL.md files, helper scripts inside skill directories, configuration files that referenced absolute paths. These weren&#8217;t in the main repo. They lived in <code>~/.claude/skills/</code>. My agent tried to run, hit wrong paths in skills, and started failing in ways that weren&#8217;t obvious because the agent was trying to work around the errors before reporting them.</p><p><strong>Don&#8217;t forget:</strong> If you use Claude Code skills, custom tools, or any configuration outside your main repo, those paths need updating too. And check what CLIs, APIs, and tools each skill depends on. If a skill references <code>playwright</code> and it&#8217;s not installed on the new machine, it fails. Obvious in hindsight. Not obvious at 11 PM on a Friday.</p><h3>Step 5: Turn off the old, turn on the new.</h3><p>This is where timing matters. My old MacBook was running 25 LaunchAgents. Cron jobs. Watchers. Discord bots. All of it needed to stop on one machine and start on the other without gaps or duplicates.</p><p>I unloaded all LaunchAgents on the MacBook, verified they were stopped, then activated them on the Mac Mini. Some needed modifications (paths, permissions). Some just worked. The WizBoard hooks, the Discord bot, the iMessage watcher, the health monitor, the daily planner. One by one.</p><p>The whole process took about two days of actual work spread across three days.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eKm_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eKm_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.png 424w, https://substackcdn.com/image/fetch/$s_!eKm_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.png 848w, https://substackcdn.com/image/fetch/$s_!eKm_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.png 1272w, https://substackcdn.com/image/fetch/$s_!eKm_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eKm_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.png" width="1456" height="2290" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2290,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1193922,&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://thoughts.jock.pl/i/191117050?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.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_!eKm_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.png 424w, https://substackcdn.com/image/fetch/$s_!eKm_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.png 848w, https://substackcdn.com/image/fetch/$s_!eKm_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.png 1272w, https://substackcdn.com/image/fetch/$s_!eKm_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926b1aef-baf3-4f4d-8fe9-47ec5c6f126f_2556x4020.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 class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/p/mac-mini-ai-agent-migration-headless-2026?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><h2>The Virtual Display Problem (This Deserves Its Own Section)</h2><p>This was the single most frustrating issue of the entire migration.</p><p>Day one, everything seemed fine. Agent was running, responding, executing tasks. Then I noticed: screenshots were blank. Peekaboo captures returned nothing. UI automation silently failed.</p><p>The problem: macOS on a headless Mac Mini doesn&#8217;t initialize a graphics context. There&#8217;s no display, so the system decides there&#8217;s nothing to render. Reasonable from Apple&#8217;s perspective. Catastrophic for an AI agent that sometimes needs to see what&#8217;s on screen.</p><p>My first attempt: write a Swift script using Apple&#8217;s <code>CGVirtualDisplay</code> API to create a software display. Compiled fine. Ran fine. Didn&#8217;t work. The API requires special entitlements that only properly signed applications can use. A standalone script, even with the correct code, just silently creates nothing.</p><p>My second attempt: BetterDisplay. An app that handles virtual display creation as a signed, entitled macOS application. Installed via Homebrew. Created a virtual screen. Connected it via HTTP API. Immediately, everything worked.</p><p>I then built a health monitor that checks the display status every few minutes. If BetterDisplay crashes or the virtual screen disconnects, it auto-restarts and reconnects. Because when your agent depends on a virtual display and that display goes away at 3 AM, nobody&#8217;s awake to fix it.</p><p>If you&#8217;re setting up a headless Mac for any kind of UI automation or screen interaction, BetterDisplay is not optional. It&#8217;s essential. Save yourself the day I lost figuring this out.</p><div><hr></div><h2>Communication Channels: iMessage Changes Everything</h2><p>Before the Mac Mini, I had three ways to talk to my agent: CLI (SSH), Discord DMs, and email. These worked. Discord was the primary channel for quick back-and-forth. <a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">WizBoard was the central hub</a> for tasks and automations.</p><p>The Mac Mini added something new: iMessage.</p><p>Because the Mac Mini has its own Apple ID, it has its own iMessage. I added it as a contact on my iPhone. Now I can text my AI agent like I&#8217;d text a person.</p><p>Setting this up was harder than it sounds. The first few hours were constant failures. AppleScript handles for sending messages are straightforward, but building a reliable watcher that picks up incoming messages, queues them properly, handles batched messages (I sometimes send five texts in a row), avoids duplicate processing, and gracefully recovers from crashes? That took serious work.</p><p>The current system: a Python watcher monitors for new messages. When I text Wiz, it queues the message, spawns a Claude Code session with the right context, processes my request, and replies via AppleScript. If I send multiple messages quickly, it batches them into a single request.</p><p>One limitation I hit immediately: reactions. On Discord, my agent can react to messages with emojis, show typing indicators, update status messages. The Discord API supports all of this natively. iMessage doesn&#8217;t. Tapbacks (reactions) require UI automation, which on a headless Mac means going through the virtual display and Peekaboo. That burns tokens and is fragile. I opted for text-based acknowledgments instead. Not as elegant, but reliable.</p><p><strong>File sharing solution:</strong> Since the Mac Mini has its own iCloud account, I created a shared folder called &#8220;Wiz Shared&#8221; between my Apple ID and the agent&#8217;s. Everything the agent generates (PDFs, images, exports) goes there. I can access it from my iPhone, MacBook, anywhere. Simple, works offline (syncs when online), and I don&#8217;t need to think about it. Better than Discord file attachments for larger files.</p><div><hr></div><h2>The Password Problem</h2><p>This one is important. Your agent needs credentials for services. APIs, websites, tools. On your laptop, maybe you had a file with API keys, or your agent could read from environment variables you&#8217;d set up.</p><p>On a new machine with a new user, nothing carries over.</p><p>I use Apple&#8217;s built-in Passwords app. For agent credentials, I created a shared password group between my Apple ID and the agent&#8217;s Apple ID. I share specific passwords, not everything. The agent can look up credentials when it needs to log into something.</p><p>I&#8217;ve also kept a secrets directory in the repo (<code>global/secrets/</code>) for API keys and tokens that the agent needs programmatically. These are gitignored and manually placed.</p><p><strong>Please don&#8217;t do this:</strong> Notes files with passwords in plain text. I know people do this. It&#8217;s one leaked backup away from disaster. Use encrypted password sharing. Apple&#8217;s Passwords app, 1Password shared vaults, Bitwarden, whatever. Just not plaintext files.</p><p>Two-factor authentication adds another layer. Some services needed me to approve the Mac Mini as a trusted device. Some needed me to log in via Screen Sharing (VNC) the first time. Budget an hour or two for this during migration. It&#8217;s tedious but necessary.</p><div><hr></div><h2>The OpenClaw Comparison (Honest Take After 3 Days)</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Phyb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Phyb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.png 424w, https://substackcdn.com/image/fetch/$s_!Phyb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.png 848w, https://substackcdn.com/image/fetch/$s_!Phyb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.png 1272w, https://substackcdn.com/image/fetch/$s_!Phyb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Phyb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.png" width="1456" height="1358" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1358,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:217444,&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://thoughts.jock.pl/i/191117050?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.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_!Phyb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.png 424w, https://substackcdn.com/image/fetch/$s_!Phyb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.png 848w, https://substackcdn.com/image/fetch/$s_!Phyb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.png 1272w, https://substackcdn.com/image/fetch/$s_!Phyb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a1ed01-369b-41c5-9680-bae799496d0f_1872x1746.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>When I set up the Mac Mini, I also installed <a href="https://github.com/openclaw/openclaw">OpenClaw</a>. I&#8217;d used it briefly back in December/January before committing to building Wiz from scratch. Now seemed like a good time to compare.</p><p><strong>My assumption going in</strong>: OpenClaw would be significantly ahead. It&#8217;s a massive open-source project with hundreds of contributors, community-driven development, polished onboarding. My custom agent is maintained by one person (me, with AI help). Surely it would be embarrassingly behind.</p><p>Three days of running both side by side. Here&#8217;s the honest assessment.</p><p><strong>Where OpenClaw is clearly better:</strong></p><ul><li><p><strong>Onboarding and setup.</strong> The Mac companion app (Codex.app), the installation wizard, the menu bar controls. For someone who isn&#8217;t technical, OpenClaw is dramatically easier to get running. No contest.</p></li><li><p><strong>Communication channels.</strong> It supports 20+ platforms out of the box. WhatsApp, Telegram, Slack, Signal, you name it. I set up WhatsApp in minutes. For Wiz, each channel was built from scratch, and I have three (CLI, Discord, iMessage).</p></li><li><p><strong>Community and ecosystem.</strong> 52 available skills. Active community. Regular updates. If something breaks, someone else has probably fixed it already.</p></li></ul><p><strong>Where Wiz holds its own (or wins):</strong></p><ul><li><p><strong>Stability.</strong> This surprised me. My custom automation, the <a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">nightshift system</a>, the self-healing monitors, the error registry with automatic recovery. These have been battle-tested over months of daily use. My agent has been running overnight autonomously since late 2025. That kind of stability doesn&#8217;t come from features. It comes from fixing things that broke at 3 AM, over and over, until they stopped breaking.</p></li><li><p><strong>Personalization depth.</strong> <a href="https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture">Wiz knows who I am.</a> Not just my preferences. My ADHD patterns, my energy levels, my communication style, my relationships, my goals. Months of accumulated context that makes interactions feel fundamentally different from talking to a fresh agent.</p></li><li><p><strong>Custom workflows.</strong> The <a href="https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business">experiment pipeline</a>, the content creation system, the job search automation, the task management through WizBoard. All built exactly for how I work. No compromises to fit a generic framework.</p></li></ul><p>The takeaway wasn&#8217;t &#8220;Wiz is better&#8221; or &#8220;OpenClaw is better.&#8221; It&#8217;s that they&#8217;re different tools optimized for different users. OpenClaw is better for getting started. A custom agent is better for going deep. I&#8217;m setting them up to work together now, as a team, each handling what it&#8217;s best at.</p><blockquote><p>If you&#8217;re starting from zero and want an AI agent running today, use OpenClaw. If you&#8217;ve been building for months and your agent fits you like a glove, don&#8217;t throw that away because a shiny open-source project has more GitHub stars.</p></blockquote><div><hr></div><h2>What I&#8217;d Do Differently</h2><p>After three days and more than a few late nights, here&#8217;s what I&#8217;d change if I did this again:</p><ol><li><p><strong>Set up BetterDisplay first.</strong> Before migrating anything. The headless display issue cascades into so many other failures. Get the virtual display working, verify screencapture works, then proceed.</p></li><li><p><strong>Audit every skill and tool dependency before migrating.</strong> Not just the main repo. Every Claude Code skill, every helper script, every CLI tool. Make a checklist. Install everything on the new machine before you start moving automation.</p></li><li><p><strong>Migrate one LaunchAgent at a time.</strong> I batch-moved several and when something broke, debugging was harder. One at a time, verify it works, move to the next.</p></li><li><p><strong>Set up Tailscale immediately.</strong> Before anything else. You&#8217;ll need remote access while you&#8217;re still configuring, and being stuck on the local network limits when you can work on the setup.</p></li><li><p><strong>Keep the old machine running in parallel for a week.</strong> I was aggressive about turning off MacBook automation. Give yourself overlap time. Run both, compare, make sure nothing falls through the cracks.</p></li></ol><div><hr></div><h2>Is It Worth It?</h2><p>Three days of migration. A few hundred dollars for the Mac Mini. Several late-night debugging sessions.</p><p>Absolutely worth it.</p><p>My laptop is my laptop again. My agent runs 24/7 without depending on whether I&#8217;m home, whether my lid is open, whether I&#8217;m using too much RAM. It has more permissions, more autonomy, more stability. iMessage added a communication channel that feels genuinely natural. The virtual display solved the last headless limitation. And the whole thing draws less power than a light bulb.</p><p>If you&#8217;re running an AI agent on your personal computer and you&#8217;ve felt that friction, the friction of shared resources, the anxiety of closing your laptop, the compromise of limited permissions, a dedicated machine fixes all of it. Mac Mini is the obvious choice for anyone in the Apple ecosystem.</p><p>The migration isn&#8217;t trivial. But it&#8217;s a weekend project, not a month-long ordeal. And once it&#8217;s done, you don&#8217;t think about it again.</p><p>Your agent just runs. Always on. Always ready. Even when you&#8217;re asleep.</p><div><hr></div><p><em>I write about building AI agents, automation, and what actually works (and doesn&#8217;t) when you try to make AI useful in real life. If you&#8217;re interested in this kind of thing, <a href="https://thoughts.jock.pl/subscribe">I write about it every week on Digital Thoughts</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p><em>If you want to build your own overnight AI agent, I documented the entire setup in the <strong><a href="https://wiz.jock.pl/store/night-shift-playbook">Night Shift Playbook</a></strong>. It covers the prompting structure, file layout, monitoring, and everything that makes autonomous execution actually work.</em></p>]]></content:encoded></item><item><title><![CDATA[My AI Agent Knows Who I Am. Not Just What I Want. Who I Am.]]></title><description><![CDATA[The identity layer most AI setups skip entirely. And the risk that comes with it.]]></description><link>https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture</link><guid isPermaLink="false">https://thoughts.jock.pl/p/wiz-ai-agent-self-improvement-architecture</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Fri, 13 Mar 2026 12:01:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!f3WI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.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_!f3WI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f3WI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!f3WI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!f3WI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!f3WI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f3WI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5477131,&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://thoughts.jock.pl/i/190820133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.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_!f3WI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!f3WI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!f3WI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!f3WI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728f676a-290c-4f36-90f4-dff5b3935fc2_2048x2048.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>Most people using AI agents hit the same ceiling. The agent works, sort of. It does things. But three months in, it&#8217;s making the same categories of mistakes it made on day one. The tool doesn&#8217;t improve. It just runs.</p><p>I spent the last six months building my agent, Wiz, differently. Not smarter models. Better architecture. The goal was a system that compounds, where every mistake feeds improvement, every session builds on the last, and the whole thing gets visibly better week over week without anyone retraining anything.</p><p>I want to be honest about how we got here, because the architecture I&#8217;m about to describe didn&#8217;t come from sitting down and designing it correctly. It came from watching things fail in ways I didn&#8217;t expect, sometimes for longer than I&#8217;d like to admit.</p><p><em>A quick note: most of what follows applies even if you&#8217;re not building an agent. If you use Claude(also Cowork), ChatGPT, Cursor, or Perplexity for daily work, the same principles work. The identity layer especially. You can implement it today, without writing a single line of code, just by changing how you start your sessions.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">New here? Give it a try and subscribe for more experiments, tests and developments! </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>What Broke Before It Worked</h2><p>The first version was a Markdown file called <code>lessons.md</code>. Every correction went in there. After two weeks, it had grown to dozens of entries. I reviewed it one day and noticed something: the same categories of mistakes kept coming back. The lessons were being written. Nothing was actually changing.</p><p>Two problems. The file had grown too large and disorganized to load effectively into context. And lessons were being appended but nobody was reviewing whether they were actually working. Writing down what went wrong is not the same as fixing it. That distinction sounds obvious now. It wasn&#8217;t obvious then.</p><p>I rebuilt the system. Added structure. Added lesson graduation logic, where corrections move from raw notes into active rules only when there&#8217;s enough evidence they represent a real pattern. That helped. But the more alarming failure came later.</p><p>I had built a Python pipeline to run improvement analysis overnight: collect signals, detect patterns, graduate lessons into active context. One morning the output looked off. No improvements. No new patterns. Nothing processed. I checked the previous day. Same. The day before. Same. The script had broken silently. An import path had changed, something small. The entire improvement loop had been running blind for days. No error surfaced anywhere I&#8217;d notice. The system looked fine. It wasn&#8217;t.</p><p>That&#8217;s when meta-system monitoring became non-negotiable. Not just tracking what the agent does wrong, but tracking whether the systems doing the tracking are actually working. Now there&#8217;s a 13-point health check that runs at session start: Is the CLI responding? Are the nightly pipelines completing? Are memory files within their freshness SLA? Is the error registry being written to? Has the improvement analysis produced output recently? If any of these fail, I know within 24 hours instead of never.</p><p>I&#8217;m describing the current working state. Performance score of 97/100 and fewer than one new lesson per week. But this is version four of the architecture. It has been rebuilt significantly three times. Some of what I&#8217;m about to describe will probably need to change again. That&#8217;s fine. The point is the approach, not the specific implementation.</p><h2>The Architecture</h2><p>I won&#8217;t enumerate all ten mechanisms individually. What matters is how they work together. They fall into three categories.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lz4b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lz4b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.png 424w, https://substackcdn.com/image/fetch/$s_!lz4b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.png 848w, https://substackcdn.com/image/fetch/$s_!lz4b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.png 1272w, https://substackcdn.com/image/fetch/$s_!lz4b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lz4b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.png" width="1456" height="1248" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1248,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:196100,&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://thoughts.jock.pl/i/190820133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.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_!lz4b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.png 424w, https://substackcdn.com/image/fetch/$s_!lz4b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.png 848w, https://substackcdn.com/image/fetch/$s_!lz4b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.png 1272w, https://substackcdn.com/image/fetch/$s_!lz4b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6c8680-2f99-4329-b74b-6d15ad4f7dcf_1800x1543.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><strong>Observation: Catching What Goes Wrong</strong></p><p>Every failure gets logged. Not just &#8220;an error happened&#8221; but what failed, what context triggered it, what pattern it matches. The error registry currently has one error class with over 3,700 occurrences. That means I didn&#8217;t manually catch the same problem 3,700 times. The system caught it, logged it, and eventually we fixed the root cause. Now the registry watches for similar patterns automatically.</p><p>Real-time events stream into a signals file throughout the day: task completions, errors, corrections, tool switches. Every night, analyzers detect patterns. When I wake up, the morning brief includes what broke, what patterns emerged, what changed in the last 24 hours. This turns improvement from reactive (fix it when you notice) to proactive (the system tells you what to fix before you notice it three times).</p><p>The system also monitors itself. Every Sunday, it checks GitHub releases for updates to Claude Code, the CLI Wiz runs on. Not just &#8220;is there a new version&#8221; but &#8220;what changed, does it affect any workflows, is there a new capability worth implementing.&#8221; Building on a moving target means watching the target move.</p><p><strong>Learning: Turning Failures Into Rules</strong></p><p>When I correct Wiz, the correction gets written as a structured lesson. Not a vague rule. A specific incident: what happened, what should have happened, why it matters. At peak there were 90 lessons in the system. They collapsed to 27 after a deduplication pass. Fewer, sharper lessons outperform more, vaguer ones. The system also tracks whether a graduated lesson is actually changing behavior, not just whether it was written down.</p><p>For significant changes, I run them through a second opinion. Opus builds the first working version. Then a second model reviews it cold, with no knowledge of why I made the decisions I made. Different training means different blind spots. A third model refines. Three perspectives, three chances to catch what one alone would miss. I did a deeper dive on <a href="https://thoughts.jock.pl/p/claude-code-vs-codex-real-comparison-2026">how Claude Code and Codex actually differ in real usage</a> if you want to understand why multi-model review produces better signal than a single-model check.</p><p>Every structural change also gets logged with what changed, why, and the impact. Fresh sessions load the last three entries as ambient context. Before this existed, I&#8217;d make a significant architectural decision and watch a later session unknowingly undo it because it didn&#8217;t know the reasoning. Now that reasoning persists.</p><p><strong>Context: Loading the Right Information</strong></p><p>Three persistent specialist teams: content-growth, product-build, infra-ops. Each has its own isolated memory. A content writer doesn&#8217;t need to see infrastructure error logs. A debugging specialist doesn&#8217;t need social media cross-promotion history. Domain-specific learning is faster and cleaner than general learning. Team memories compress weekly to stay sharp.</p><p>Every session links to a persistent task management system. When I start, a task gets created automatically. When I finish, it closes with a summary. Context survives across interruptions. I can drop a session mid-task, come back two days later, and the system knows exactly where we were and what was decided.</p><p>Every morning, before I interact with Wiz, a brief runs automatically. It pulls today&#8217;s calendar events, active and overdue tasks, recent architecture changes, and signal anomalies from the last 24 hours. An agent that knows you have 40 minutes before a call doesn&#8217;t recommend starting a three-hour build. One that knows a task has been overdue for two weeks will surface it before adding new things to the pile.</p><p>Here&#8217;s a real cycle of how these layers connect. Tuesday: Wiz applies a rule incorrectly to an edge case. I catch it. The lesson gets logged: what happened, what should have happened, why. The error gets added to the registry. Wednesday: a different context hits the same structural pattern. The error registry flags it before I do. Thursday overnight: signal analysis detects two similar incidents this week and surfaces it in the morning brief. Friday: when I give Wiz similar work, all three pieces load into context. The lesson. The registry entry. The signal. Wiz makes the right call without me saying anything.</p><p>I wrote earlier about <a href="https://thoughts.jock.pl/p/meta-learning-ai-knowledge-acceleration-system-guide-2025">building AI-powered knowledge acceleration systems</a> at a more conceptual level. This is what the working implementation of that idea actually looks like month to month. Not a single breakthrough. Thousands of small, layered corrections that eventually change behavior.</p><p>The same underlying models perform dramatically differently depending on what context loads into each session. I&#8217;ve written about <a href="https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions">how CLAUDE.md design shapes agent behavior</a> and the <a href="https://thoughts.jock.pl/p/ai-memory-palace-personal-digital-mind-connected-intelligence">memory architecture that makes this possible</a>. These observation, learning, and context layers sit on top of all of it. They don&#8217;t change the model. They change what the model knows before it starts working.</p><p>I went from running <a href="https://thoughts.jock.pl/p/my-ai-agent-works-night-shifts-builds">a single overnight agent trying to pay for itself</a> to managing three parallel specialist teams, 16 automated products, and a full content pipeline. The <a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">economics of running this</a> have shifted too. That scale wasn&#8217;t possible before the architecture was in place.</p><p>But there&#8217;s one more layer. The one that changes the quality of every single interaction. And it&#8217;s the one most people skip.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">I am writing about doing. If you want to learn or grab something I have done - feel free to subscribe! </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>The Identity Layer</h2><p>There&#8217;s a meaningful difference between an agent that knows your preferences and an agent that knows who you are. Preferences are rules: respond concisely, use this email address, don&#8217;t ask permission for reversible actions. Identity is deeper: personality type, how you process information, your career situation, your relationships, what&#8217;s currently stressful, which domains you know deeply and which you&#8217;re still learning.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CBV_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CBV_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.png 424w, https://substackcdn.com/image/fetch/$s_!CBV_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.png 848w, https://substackcdn.com/image/fetch/$s_!CBV_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.png 1272w, https://substackcdn.com/image/fetch/$s_!CBV_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CBV_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.png" width="1456" height="1895" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1895,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:495273,&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://thoughts.jock.pl/i/190820133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.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_!CBV_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.png 424w, https://substackcdn.com/image/fetch/$s_!CBV_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.png 848w, https://substackcdn.com/image/fetch/$s_!CBV_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.png 1272w, https://substackcdn.com/image/fetch/$s_!CBV_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8219a7d1-4b8c-4e40-974b-2f7f30b9a6cb_2628x3420.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>Wiz has a structured profile of me built up over months of interaction. Personality type (INTJ, ADHD), work situation (day job at a publisher, building side projects toward independence), relationships (partner, young kid, close friends also in career transitions), energy patterns, and my expertise split (strong product and content instincts, competent engineer, not a specialist developer).</p><p>Here&#8217;s what that actually changes.</p><p>When I ask about a technical concept, the explanation calibrates to my level. Not simplified because I&#8217;m non-technical. Not overly abstract because I&#8217;m not a specialist. It knows I understand systems thinking, so it explains things in terms of architecture and patterns rather than line-by-line code. If I were a teacher asking the same question, the explanation would be different. A senior backend engineer, different again. Same model. Profile changes what comes out.</p><p>It also changes decision context. When I&#8217;m evaluating whether to take on a new project, the agent knows I have a demanding day job, ADHD, and a four-year-old. It weights recommendations with that context. Not paternalism. Just the same context a good advisor would have after knowing you for a year.</p><p>The profile grows over time. Conversations surface new information. A preference revealed through friction, a constraint mentioned in passing, an expertise area confirmed or discovered. It gets written as a structured fact, not a vague note. Over months, the agent accumulates a working model of the operator that makes every interaction qualitatively different.</p><p><strong>What existing memory tools do vs. what this does</strong></p><p>ChatGPT Memory stores preferences: &#8220;user prefers aisle seats,&#8221; &#8220;works in fintech,&#8221; &#8220;vegetarian.&#8221; Useful, and a real step forward from stateless sessions. Mem0 and Letta build memory infrastructure for developers: structured facts, conversation history, temporal knowledge graphs. These tools are solving real problems. Mem0 alone processes hundreds of millions of API calls per quarter.</p><p>But they&#8217;re storing what you said, not who you are.</p><p>The difference matters. A preference list tells the model to use bullet points. An identity profile tells it that you&#8217;re a systems thinker with ADHD who processes information best through architecture analogies, that you&#8217;re building toward independence from a corporate job, and that Tuesday evenings are your worst time for complex decisions because your kid goes to bed late and you&#8217;re running on low sleep. That level of context changes how every response gets calibrated. It&#8217;s the difference between a tool that remembers your coffee order and an advisor who knows you.</p><p><strong>You can start this today</strong></p><p>This is not only for people building agents. If you use Claude, ChatGPT, Cursor, Perplexity, or any AI tool regularly, you can do this right now. Write a one-page document about yourself. Your role, your background, how you like information presented, what you&#8217;re working on right now, what domains you know well versus where you&#8217;re still learning. Paste it at the start of your sessions. Or, if your tool supports it, put it in the system prompt or project instructions so it&#8217;s always there.</p><p>The effect is the same. A Claude conversation that starts with that context is not the same conversation as one that starts from scratch. The model doesn&#8217;t change. What you put in front of it does. Most people never do this, and then wonder why the AI keeps explaining things at the wrong level, or giving advice that doesn&#8217;t fit their situation. The profile is the fix.</p><p>If you&#8217;re a paid subscriber, I put together a standalone resource with the architecture for this: <a href="https://wiz.jock.pl/store/ai-identity-kit/">structured profile templates</a>, the memory schema, how to update it over time. <a href="https://wiz.jock.pl/store/agent-memory-system">It&#8217;s in the store, free for paid subscribers.</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://wiz.jock.pl/store/&quot;,&quot;text&quot;:&quot;See everything in Wiz Store&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://wiz.jock.pl/store/"><span>See everything in Wiz Store</span></a></p><h2>The Risks?</h2><p>A research team from MIT and Penn State published a study in February 2026 that made me uncomfortable. They found that user memory profiles increased agreement sycophancy by 45% in Gemini and 33% in Claude. Not hypothetically. Measured across 38 participants over two weeks with real conversations.</p><p>Agreement sycophancy means the model becomes more likely to agree with you, even when you&#8217;re wrong. The more it knows about you, the more it tells you what you want to hear.</p><p>I read that and recognized the risk immediately. I built a system that gives my agent a detailed profile of who I am. The same research says that exact profile makes the agent more agreeable. More likely to validate my ideas instead of challenging them. More likely to frame things in ways I&#8217;ll find comfortable. An echo chamber of one, custom-built.</p><p>There&#8217;s a privacy angle too. The operator profile contains real personal information. Personality type, relationship details, career frustrations, health patterns. My data lives in local files, not on someone else&#8217;s server. But most people building memory systems aren&#8217;t thinking about what happens when that model of you becomes extractable, shareable, or used for purposes you didn&#8217;t intend.</p><p>So why do I keep building it?</p><p>Because the alternative is worse. A stateless agent that starts every session ignorant gives you generic advice calibrated to nobody. The sycophancy research doesn&#8217;t say &#8220;don&#8217;t personalize.&#8221; It says &#8220;personalization has a cost, and the cost is measurable.&#8221; Knowing the cost is the first step to managing it.</p><p>My guardrail is simple. When Wiz agrees with me too easily on something I&#8217;m not sure about, I notice. The profile includes a note about this: challenge assumptions when the evidence is thin. That doesn&#8217;t solve the problem completely. But a tool that agrees with you 33% more while you know about the bias is still more useful than a tool that knows nothing about you. I&#8217;ll take informed risk over ignorant safety.</p><h2>What You Can Take From This</h2><p>You don&#8217;t need this entire stack. But the core principle transfers: wrap whatever AI tool you&#8217;re using in a feedback system.</p><p>Start with error logging. When your AI makes a category of mistake, write it down specifically. Incident, context, correction, why it matters. Next time you&#8217;re doing similar work, paste that document into context. That&#8217;s not automation. That&#8217;s just institutional memory. And it&#8217;s shocking how much better your AI performs when it&#8217;s read its own failure history before starting.</p><p>Build the operator profile next. Not preferences. Actual facts about who you are: your domain expertise, how you communicate, what constraints are real in your life right now. Paste it into context and see what changes. Then build a system that updates it as conversations reveal new things. Within a few weeks, the sessions feel qualitatively different.</p><p>Quick start is to create USER.md file like this: </p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;5349e7f2-e989-4a94-a0aa-881689980d2a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># USER.md

&gt; Drop this file into your project root, add it to your CLAUDE.md/system prompt,
&gt; or paste it at the start of your AI sessions. Fill in what's true, delete what isn't.
&gt; Update it as sessions reveal new things about how you work.

## Who I Am

- **Name:** [Your name]
- **Role:** [What you do. e.g., "Product manager at a fintech startup" or "Freelance developer, mostly backend Python"]
- **Experience level:** [Be honest. e.g., "Senior in product thinking, intermediate in code, beginner in frontend"]
- **Domain expertise:** [What you know deeply. e.g., "E-commerce operations, API design, content strategy"]
- **Still learning:** [Where you need more help. e.g., "React, infrastructure, ML pipelines"]

## How I Think

- **Information processing:** [How you prefer explanations. e.g., "Systems and architecture first, then details" or "Show me the code, I'll figure out the why"]
- **Decision style:** [e.g., "I think out loud. I'll propose things I'm not sure about to test them"]
- **Communication:** [e.g., "Direct and concise. Don't soften bad news. Skip preamble"]

## Current Context

- **Working on:** [Active projects/priorities right now]
- **Constraints:** [Real ones. e.g., "Day job takes 8h, side projects get 2h/day max" or "Shipping a demo by Friday"]
- **Tools I use:** [e.g., "Claude Code, VS Code, Python 3.12, PostgreSQL, Vercel"]

## What Helps

- Give me architecture-level answers before implementation details
- When I'm wrong, say so directly
- Don't ask permission for small reversible changes, just do them
- [Add your own patterns as you notice them]

## What Doesn't Help

- Over-explaining basics I already know (see expertise above)
- Asking "would you like me to..." when the answer is obvious
- Generic advice that ignores my constraints
- [Add your own anti-patterns]</code></pre></div><p>And read the sycophancy research. Know what you&#8217;re trading. The identity layer is the most powerful thing I&#8217;ve built. It&#8217;s also the most dangerous. Both of those things can be true at the same time.</p><p>The architecture described here is working well today. It&#8217;s been through four major iterations and will go through more. The models will change. The tooling will shift. Some of these layers will need rebuilding. What compounds isn&#8217;t the specific implementation. It&#8217;s the habit of observing, logging, and adjusting. That part doesn&#8217;t become obsolete.</p><div><hr></div><p><em>I build Wiz as an experiment in what AI agents can do when the architecture is designed for compound improvement. If you&#8217;re curious about how the stack works or want to follow the build as it evolves, I write about this regularly. Subscribe and you&#8217;ll get the updates as they happen.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>One more thing. We recently crossed 1,000 subscribers on Digital Thoughts, and I&#8217;m running <a href="https://thoughts.jock.pl/p/1000-subscribers-digital-thoughts-journey">a giveaway to celebrate</a>.  Free one-month Claude Max plan. If you&#8217;ve read this far and you&#8217;re not subscribed yet, there&#8217;s never been a better time. Details and a deal for yearly subscribers are in <a href="https://thoughts.jock.pl/p/1000-subscribers-digital-thoughts-journey">that post</a>.</p>]]></content:encoded></item><item><title><![CDATA[1,000 People Showed Up. Here’s the Story, What’s Changing, and a Giveaway.]]></title><description><![CDATA[From ChatGPT-4 running a business in 2023 to 1,000 subscribers today]]></description><link>https://thoughts.jock.pl/p/1000-subscribers-digital-thoughts-journey</link><guid isPermaLink="false">https://thoughts.jock.pl/p/1000-subscribers-digital-thoughts-journey</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Thu, 12 Mar 2026 10:04:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!569e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.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_!569e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!569e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!569e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!569e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!569e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!569e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5076710,&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://thoughts.jock.pl/i/190707597?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.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_!569e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!569e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!569e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!569e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d86a28-1b0e-4b17-bf57-048c8221c4e1_2048x2048.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><em>This is a different kind of post. Not a tutorial, not an experiment. Just me, being honest about where this newsletter came from and where it&#8217;s going.</em></p><div><hr></div><p>Yesterday, Digital Thoughts hit 1,000 subscribers.</p><p>I sat with that for a moment. Then I opened my laptop and started typing, because that&#8217;s what I do.</p><p>1,000 is not viral. It&#8217;s not a hockey-stick story. But for me it means something real, so I want to mark it properly. Not with a confetti graphic or a &#8220;thank you for your support&#8221; paragraph that sounds like a press release. Just the actual story.</p><h2>Where this started</h2><p>About three years ago I published my first Substack post. It was about whether ChatGPT-4 could run a small business. Not a thought experiment. I actually tried it. Set up a simple product, gave the AI a budget and a brief, and watched what happened.</p><p>It worked. Kind of. We made some money, got some traction. It was messy and interesting in equal parts.</p><p>The technical setup was embarrassing by today&#8217;s standards. The context window was 4,000 tokens. (If that number doesn&#8217;t mean anything to you: imagine trying to run a business with a collaborator who forgets everything after a ten-minute meeting.) I was building &#8220;universal memory keys&#8221; to pass context between chat sessions manually. I had automated ChatGPT-4 with Zapier so it could actually do things, not just suggest things. It was clunky. It also kind of worked.</p><p>That era shaped everything I write about. The core question was always: can AI create real value, or is it just a very impressive autocomplete? I still think that&#8217;s the right question. I&#8217;m still testing it.</p><h2>What Digital Thoughts actually is</h2><p>I&#8217;ve described this newsletter a hundred different ways. The most honest one: it&#8217;s a lab notebook.</p><p>I build things with AI, I break things with AI, and I write about it. Sometimes the results are good. <a href="https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business">Sometimes the AI builds exactly what I ask for and it&#8217;s still completely wrong</a>. That&#8217;s the honest version of this stuff.</p><p>I&#8217;ve tried local models on my MacBook and iPhone, because I wanted to see how far you can get without cloud infrastructure. <a href="https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment">The gap is closing faster than most people think.</a> I&#8217;ve compared AI coding tools until I landed back where I started. <a href="https://thoughts.jock.pl/p/cursor-vs-google-ai-studio-antigravity-ide-comparison-2025">That journey was its own lesson.</a> I&#8217;ve written about why <a href="https://thoughts.jock.pl/p/ai-adoption-gap-who-actually-uses-ai-2026">88% of companies say they use AI but only 6% see real results.</a></p><p>I also care about things beyond tools. <a href="https://thoughts.jock.pl/p/ai-writes-code-what-should-schools-teach-2026">Education</a>. The future of work. What happens to office jobs when AI stops being a productivity add-on and starts being the default worker. These are not abstract questions for me. I have a kid starting school soon. I think about this stuff a lot.</p><p>The newsletter will keep covering all of it. No narrowing to &#8220;just AI tools&#8221; or &#8220;just automation.&#8221; That would be more legible, maybe, but it would also be a lie about how I actually think.</p><h2>What&#8217;s being built right now</h2><p>Three things I&#8217;m actively working on that will keep showing up here:</p><p><strong>My AI agent is getting more capable.</strong> I&#8217;ve been building Wiz (my personal AI agent) for over a year. It runs on my Mac, handles scheduling, writes, deploys, and improves itself overnight. <a href="https://thoughts.jock.pl/p/familiar-local-ai-agent-mac">I&#8217;m also building a local version for Mac and iPhone</a> that works without internet. The architecture is getting interesting and I&#8217;ll document more of it here.</p><p><strong>The open source question.</strong> A lot of you have asked whether I&#8217;ll open-source Wiz. Honest answer: I want to. The problem is it&#8217;s so customized to me that a raw release would not be useful to most people. I&#8217;d need to build a more universal version first. That takes a pause in the endless self-improvement cycle, which is hard to justify when things are working. But I haven&#8217;t given up on it. When it happens, you&#8217;ll know.</p><p><strong><a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">Project Money</a> is getting more interesting.</strong> The experiment started the same way as all of this: can an AI agent extract real value from human ideas and turn it into products people actually pay for? It&#8217;s working. Not perfectly, not at scale, but the direction is clear. The next frontier I want to explore is physical products. Not me designing them, but me having an idea and the agent handling the rest: production, graphics, store setup, customer feedback loop. I think this is more possible than it sounds.</p><h2>The 1,000 subscriber offer</h2><p>The store at <a href="https://wiz.jock.pl/store/">wiz.jock.pl</a> has 16 products right now. Total value if you bought everything: over $800. That&#8217;s playbooks, templates, automation systems, agent blueprints. Things I actually use and built as byproducts of the experiments here.</p><p>A yearly subscription to Digital Thoughts costs $129 and gets you everything in the store, plus everything I add going forward. If you subscribe this week, I&#8217;m doing 30% off for 7 days. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?coupon=5c93364e&amp;utm_content=190707597&quot;,&quot;text&quot;:&quot;Get 30% off for 1 year&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?coupon=5c93364e&amp;utm_content=190707597"><span>Get 30% off for 1 year</span></a></p><p><br>This includes everything in the store ($800+ value) and everything added going forward. Price locked in permanently.</p><p>I&#8217;m not here to pressure anyone. Everything I write is free. The paid tier exists for people who want more finished versions of the experiments: the system, not just the story.</p><h2>The giveaway</h2><p>I use Claude Max, the highest plan at $200/month. It gives you access to the most powerful models at a level that&#8217;s hard to describe unless you&#8217;ve used it. I go to places with it I wouldn&#8217;t think were possible six months ago.</p><p>For the 1,000 subscriber milestone, I&#8217;m giving one month of Claude Max to one person.</p><p><strong>How to enter:</strong><br>0. Subscribe to Digital Thoughts</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?"><span>Subscribe now</span></a></p><p>1. Leave a comment on this post answering one question:<br><br><em>&#8220;What&#8217;s one thing in your work or life you&#8217;d automate if you could?&#8221;</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/1000-subscribers-digital-thoughts-journey/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/p/1000-subscribers-digital-thoughts-journey/comments"><span>Leave a comment</span></a></p><p><br>That&#8217;s it. One comment. I&#8217;ll pick a winner based on most creative answer in 7 days and announce it in the next post(and in comments). <strong>No purchase required.</strong></p><p>I&#8217;m genuinely curious what people answer. It&#8217;ll probably turn into future content, because that&#8217;s how this place works.</p><h2>Thank you</h2><p>1,000 people chose to let me into their inbox. That&#8217;s not nothing. I don&#8217;t take it lightly.</p><p><em>The deal is simple: I keep experimenting, I keep writing honestly about it, and you get to follow along and do something with the ideas if they&#8217;re useful. That&#8217;s what this has always been and what it&#8217;s going to keep being.</em></p><p>See you in the next one.</p><p>Pawel</p>]]></content:encoded></item><item><title><![CDATA[I’m Building a Local AI Agent for My Mac(and iPhone). And It’s Actually Working]]></title><description><![CDATA[Codex and Opus are working 24/7 to "make it better" :D]]></description><link>https://thoughts.jock.pl/p/familiar-local-ai-agent-mac</link><guid isPermaLink="false">https://thoughts.jock.pl/p/familiar-local-ai-agent-mac</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Tue, 10 Mar 2026 13:38:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9QFA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.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_!9QFA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9QFA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!9QFA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!9QFA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!9QFA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9QFA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4831462,&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://thoughts.jock.pl/i/190502765?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.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_!9QFA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!9QFA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!9QFA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!9QFA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31106fde-acf0-40f5-af93-74c8455c741f_2048x2048.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><em>Last week I ran local LLMs on my MacBook and iPhone just to see what they could do. Now I&#8217;m building a full agent app on top of that experiment. It&#8217;s called Familiar, it&#8217;s open source, and here&#8217;s where it is right now.</em></p><div><hr></div><p>Something clicked for me when I was testing Qwen 3.5 9B <a href="https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment">last week</a>. Not the chat. The tool calling.</p><p>I was playing around with a small local model, thinking I&#8217;d hit the wall fast, and then I gave it a simple tool: list files in this folder and rename the ones that match this pattern. It worked. Not Claude-level smart. But it worked, and it did it fully offline, on my M1 Pro, without sending anything anywhere.</p><p>That&#8217;s when I thought: this is actually the thing.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Before we jump in, are you subscriber of Digital Thoughts? If you like bulding, testing, developing, creating and also all the mess part - subscribe! </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>The case for local</h2><p>Most people who use AI professionally pay for it. I pay for it. Multiple subscriptions, API credits, cloud inference. It adds up fast and the moment you stop paying, the tool stops working.</p><p>Beyond cost, there&#8217;s the data angle. I&#8217;m fine with cloud AI for most things, but there are categories of tasks where I&#8217;d rather keep things on my device. Anything touching personal files, local context, private notes. Stuff that shouldn&#8217;t leave the machine.</p><p>And then there&#8217;s the offline scenario. I work on planes sometimes. At places with unreliable internet. Having something that works no matter what is genuinely useful, even if it&#8217;s slower and less capable than the cloud version.</p><p>Although local models are nowhere near GPT-5.4 or Claude Opus 4.6 yet, they don&#8217;t need to be for a lot of tasks. Renaming files, organizing folders, summarizing local documents, running simple automation. A 3-5 billion parameter model can handle that just fine if you design the tools correctly. And the small model options right now are genuinely good: Qwen 3.5 Small (Alibaba released the 0.8B to 9B series in early March 2026, built specifically for edge and mobile), Phi-4-mini from Microsoft at 3.8B. These aren&#8217;t research demos. They&#8217;re available today.</p><div><hr></div><h2>The hybrid future I&#8217;m betting on</h2><p>Here&#8217;s how I think this plays out. Not one or the other. Both.</p><p>You have a small, capable model running locally on your device. It handles the personal stuff: file management, local context, quick tasks, things that should stay private. Then when you need real power (complex reasoning, code generation, agentic work that touches the web), you tap into the cloud.</p><p>Two years from now I think this is just going to be the default setup. Devices are getting faster, models are getting smaller and better, and the efficiency gains compound. The M1 Pro I&#8217;m testing on would have been science fiction hardware ten years ago.</p><p>Tool calling is what makes this viable. A small model that knows what tools it has available and can reliably pick the right one is already useful. The model doesn&#8217;t need to be smart about everything. It needs to be smart about what to do next. That&#8217;s a much more achievable bar. And tool calling support has matured fast: Qwen 3, Phi-4, Mistral all support it natively now. The infrastructure exists. You just have to build the tools around it.</p><div><hr></div><h2>Familiar</h2><p>So I started building an app. It&#8217;s called Familiar.</p><p>The name fits the theme I&#8217;ve been running with here. My AI agent is called Wiz, short for wizard. A familiar is a wizard&#8217;s companion. Felt right.</p><p>The idea is a macOS app (and eventually iOS) that makes local AI actually usable, not as a chat toy but as an agent that can do things on your machine. The key word is <em>agent</em>. Not just &#8220;ask it stuff.&#8221; Give it tasks, watch it work.</p><p>Here&#8217;s what Familiar does right now.</p><p><strong>Hardware detection on first launch.</strong> The app looks at what you have (RAM, chip, available resources) and recommends the best model for your hardware. Not the most powerful model in existence. The best model you can run without your machine becoming a heater. This removes the friction of &#8220;which model do I even download?&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Vx_C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vx_C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.png 424w, https://substackcdn.com/image/fetch/$s_!Vx_C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.png 848w, https://substackcdn.com/image/fetch/$s_!Vx_C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.png 1272w, https://substackcdn.com/image/fetch/$s_!Vx_C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vx_C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.png" width="996" height="524" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:524,&quot;width&quot;:996,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:227364,&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://thoughts.jock.pl/i/190502765?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.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_!Vx_C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.png 424w, https://substackcdn.com/image/fetch/$s_!Vx_C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.png 848w, https://substackcdn.com/image/fetch/$s_!Vx_C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.png 1272w, https://substackcdn.com/image/fetch/$s_!Vx_C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc305c6-10ee-45f9-8d24-08b0e9d3db65_996x524.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><strong>A default model ships with the app.</strong> Small enough to run on anything. You&#8217;re up and running immediately. No waiting 20 minutes for a download before you even know if you like the thing.</p><p><strong>File tools out of the box.</strong> Create files, rename them, move them, delete them. Basic stuff, but it works. And it works without the model needing internet access, without API keys, without monthly charges. I have more tools coming (web access when you want it, clipboard tools, shell commands), but this is the foundation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2wgz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2wgz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.png 424w, https://substackcdn.com/image/fetch/$s_!2wgz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.png 848w, https://substackcdn.com/image/fetch/$s_!2wgz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!2wgz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2wgz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.png" width="1456" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:762107,&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://thoughts.jock.pl/i/190502765?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.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_!2wgz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.png 424w, https://substackcdn.com/image/fetch/$s_!2wgz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.png 848w, https://substackcdn.com/image/fetch/$s_!2wgz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!2wgz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3905087-8af7-43a6-abb8-22ceefa93631_2430x1458.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><strong>Night shift mode (in progress).</strong> This is the part I&#8217;m most excited to build.</p><p><a href="https://thoughts.jock.pl/p/my-ai-agent-works-night-shifts-builds">My Wiz agent already runs tasks overnight</a> while I sleep. The idea with Familiar is the same concept but fully local: when you close the lid for the night, the app switches to a larger, more capable model that uses more RAM and compute. Because you&#8217;re not using the machine, it can push harder. You wake up to work done by a smarter version of the local agent. No cloud, no API bill. Just your hardware working while you rest. I&#8217;m working on this now and it&#8217;s the feature I think will matter most once it&#8217;s done.</p><div><hr></div><h2>Open source and what&#8217;s coming</h2><p><a href="https://github.com/joozio/familiar">Familiar is open source</a>. That was never a question. The whole point is that you should be able to inspect what&#8217;s running on your device, contribute if you want to, fork it for your own needs. I&#8217;ll share the GitHub link in the next update as soon as the first public release is ready.</p><p>iOS is the other piece. The macOS app is where the real agent work happens, but I want a companion experience on iPhone too. For now that looks like: access to your memory, quick tasks, maybe basic file operations synced through iCloud. The big agentic stuff stays on the Mac (makes sense, more compute available). But having the companion on your phone is useful even if it&#8217;s lighter.</p><p>Although I&#8217;m building this myself, I&#8217;m doing it the way I build everything now: with <a href="https://thoughts.jock.pl/p/claude-code-vs-codex-real-comparison-2026">Claude Code and Opus</a> doing the heavy lifting on the implementation. The architecture is mine, the decisions are mine, the code comes from pairing that with AI.</p><div><hr></div><h2>Reality check</h2><p>I want to be honest about where Familiar is.</p><p>It&#8217;s not Claude Opus 4.6. It&#8217;s not GPT-5.4. A 1 - 9 billion parameter model running on a laptop has hard limits and pretending otherwise would be annoying and wrong. Some tasks will be slower, some outputs will need correction, some things just won&#8217;t work as well as the cloud equivalent.</p><p>That&#8217;s fine. The goal isn&#8217;t to replace cloud AI. It&#8217;s to have something useful for the category of tasks where local is better: private, offline, no cost. For those cases, Familiar already works, and I can improve it from here.</p><p>I&#8217;m testing everything on my M1 Pro with 16 GB of RAM. Deliberately not on a Mac Studio or anything exotic. If it works well on a normal laptop that a lot of people have, that&#8217;s the right place to optimize.</p><p>What I found after the first week: it&#8217;s decent. More than decent for file operations and simple task routing. Night shift mode is the thing I want to push hardest in the next phase, because that&#8217;s where the &#8220;model is bigger than you&#8217;d normally use during the day&#8221; thing really shows its value.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Digital Thoughts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Why this and why now</h2><p>I wrote about <a href="https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment">running local models on my MacBook and iPhone</a> last week, and the response told me something. People want this. Not the nerd-who-compiles-from-source version. The normal-person version where you install an app and it works.</p><p>That&#8217;s what I&#8217;m trying to build. You install Familiar, it figures out your hardware, you have a local agent running in minutes. No terminal commands, no model weights you have to manually manage, no settings that require reading a wiki.</p><p>The subscriptions are real money and they add up. Privacy matters more than most people admit. And there&#8217;s something satisfying about owning the thing that&#8217;s helping you, not just renting access to it.</p><p>It is possible. That&#8217;s really the thing I wanted to say with this post. Not &#8220;local AI will be amazing someday.&#8221; It&#8217;s working now on a normal machine. It&#8217;s limited and it will get better. I&#8217;m going to keep building.</p><p>More updates coming as the GitHub goes public and iOS moves forward. If you&#8217;re curious about what tools I&#8217;m adding next or want to follow the build, <a href="https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business">this is what open source build logs look like on Digital Thoughts</a>, and there will be more of them.</p><div><hr></div><p><em>If you want to go deeper on the AI tools and systems I&#8217;m building, paid subscribers get access to the full store including the Night Shift Playbook, which documents exactly how I set up my overnight AI workflow. <a href="https://thoughts.jock.pl/subscribe">Subscribe here.</a></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[88% of Companies Use AI. Only 6% See Real Results. ]]></title><description><![CDATA[Here&#8217;s What&#8217;s Actually Missing.]]></description><link>https://thoughts.jock.pl/p/ai-adoption-gap-who-actually-uses-ai-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/ai-adoption-gap-who-actually-uses-ai-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Mon, 09 Mar 2026 11:20:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iYGg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.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_!iYGg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iYGg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!iYGg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!iYGg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!iYGg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iYGg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5493561,&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://thoughts.jock.pl/i/190375949?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.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_!iYGg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!iYGg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!iYGg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!iYGg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f82675-a8fc-48f2-942b-0e72d73dc66e_2048x2048.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><em>I live in an AI bubble. I know that now. The gap between what I do with AI every day and what most professionals experience is not a small gap. It&#8217;s a canyon. And the latest research from Anthropic, McKinsey, and Salesforce just put hard numbers on how wide it really is.</em></p><div><hr></div><p>I wrote about <a href="https://thoughts.jock.pl/p/ai-bubble-living-inside">living inside an AI bubble</a> a while back. The moment it clicked was a conversation with my neighbor. She&#8217;s a professional developer. Uses Gemini sometimes. Had never heard of Claude, never used an AI agent, didn&#8217;t know what autonomous coding meant. She&#8217;s a smart, capable engineer. She just wasn&#8217;t in the same world I was in.</p><p>That conversation stuck with me. Because if a developer can be that far outside the AI bubble, what does it look like for a sales manager in a mid-size company? Or a recruiter at a 50-person firm? Or a marketing director who&#8217;s been told to &#8220;use AI more&#8221; but hasn&#8217;t been shown what that actually means?</p><p>I started paying attention. I talked to people. A friend in sales told me he uses ChatGPT to &#8220;clean up emails sometimes.&#8221; A recruiter I know said her team bought an AI screening tool, used it for two weeks, then went back to manual review because nobody understood the output. A marketing manager at a conference told me his whole team&#8217;s AI usage was basically: paste text, get summary, paste more text, get another summary.</p><p>This is not what AI adoption looks like. This is what the <em>appearance</em> of AI adoption looks like.</p><p>Then the data showed up to confirm what I was seeing.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Digital Thoughts is all about experiments. I am not sharing here hype, but my own process. Sometimes chaotic, sometimes too &#8220;nerdy&#8221;, but my own. If you like what you read, consider subscribing. It is free!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>The Numbers</h2><p>88% of organizations now use AI in at least one function. That&#8217;s <a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai">McKinsey&#8217;s latest State of AI report</a>. Sounds like the race is over, right? Except only 6% of those companies qualify as &#8220;AI high performers&#8221; who actually see meaningful business impact. Only 39% report any EBIT impact at all, and for most it&#8217;s less than 5%.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uDkX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uDkX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.png 424w, https://substackcdn.com/image/fetch/$s_!uDkX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.png 848w, https://substackcdn.com/image/fetch/$s_!uDkX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.png 1272w, https://substackcdn.com/image/fetch/$s_!uDkX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uDkX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.png" width="1456" height="831" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:831,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1064406,&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://thoughts.jock.pl/i/190375949?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.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_!uDkX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.png 424w, https://substackcdn.com/image/fetch/$s_!uDkX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.png 848w, https://substackcdn.com/image/fetch/$s_!uDkX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.png 1272w, https://substackcdn.com/image/fetch/$s_!uDkX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac36b5bb-0eb6-425b-8f29-85563ca8ef15_2028x1158.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><figcaption class="image-caption">source: anthropic</figcaption></figure></div><p>Then Anthropic dropped a new labor market study on March 5, 2026. They created a metric called &#8220;observed exposure&#8221; that measures actual AI usage in specific jobs, not theoretical capability. The gap between what AI could do and what it&#8217;s actually doing is staggering:</p><ul><li><p>Computer and math occupations: 94% theoretical exposure, 33% actual. A 61-point gap.</p></li><li><p>30% of all workers have essentially zero AI coverage in their daily work.</p></li><li><p>The average &#8220;observed exposure&#8221; across occupations is dramatically lower than any prediction model suggested.</p></li></ul><p>36.8% of individuals across the OECD used generative AI in 2025. But firm-level deployment? Only 20.2%. And the size gap is brutal: 52% of large companies use AI versus just 17.4% of small ones. If you work at a company with under 50 people, the odds are stacked against you even having access to proper AI tools, let alone knowing how to use them.</p><p>Two-thirds of companies remain stuck in pilot or experimentation phases. They proved AI can do something. They never figured out how to make it do something that matters.</p><div><hr></div><h2>Profession by Profession, the Same Pattern</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VBqO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VBqO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.png 424w, https://substackcdn.com/image/fetch/$s_!VBqO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.png 848w, https://substackcdn.com/image/fetch/$s_!VBqO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.png 1272w, https://substackcdn.com/image/fetch/$s_!VBqO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VBqO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.png" width="1456" height="1425" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1425,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1463440,&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://thoughts.jock.pl/i/190375949?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.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_!VBqO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.png 424w, https://substackcdn.com/image/fetch/$s_!VBqO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.png 848w, https://substackcdn.com/image/fetch/$s_!VBqO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.png 1272w, https://substackcdn.com/image/fetch/$s_!VBqO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83057f33-289e-4bc8-9d7e-e5abfa175b51_2142x2096.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><figcaption class="image-caption">source: anthropic</figcaption></figure></div><p><strong>Sales.</strong> 62.8% observed AI exposure in the Anthropic data. Adoption jumped from 24% in 2023 to 43% in 2024, with 56% of sales pros now using AI daily. Although those numbers sound solid, most of that usage is surface-level: drafting emails, summarizing calls. The strategic work that actually moves deals, things like pipeline analysis, objection handling scripts, personalized outreach sequences, barely happens. 20% of sales activities are already automatable with current tools, but most organizations haven&#8217;t implemented any of it.</p><p><strong>Marketing.</strong> 64.8% observed exposure. 75% of marketers adopted AI tools. But according to Salesforce&#8217;s 2026 State of Marketing report, 84% still send generic one-way campaigns. Let that sit for a second. Three out of four marketers have AI. Five out of six still can&#8217;t personalize their campaigns. 98% hit personalization obstacles. Data quality is the number one culprit, but the bigger issue is that nobody showed them how to bridge from &#8220;I have a tool&#8221; to &#8220;I have a workflow.&#8221; Only 58% have access to their own service data, 56% to sales data, 51% to commerce data. The data is siloed. The AI can&#8217;t fix organizational problems.</p><p><strong>HR and recruiting.</strong> This is the most interesting case because the gap between adoption and satisfaction is the widest. 87% of companies use AI somewhere in recruitment. 93% plan to increase. But only 43% of HR teams have broadly adopted AI, and just 17% describe their implementation as &#8220;highly successful.&#8221; That&#8217;s a 26-point gap between having it and it working. The highest dissatisfaction ratio of any function I found in the data. Most teams struggle with screening accuracy and bias, two things that matter enormously in hiring and are hard to get right without structured prompts.</p><p><strong>Office and admin.</strong> The sharpest acceleration: adoption jumped from 26% to 53% in one year. Executive assistants hit 65%. Although that sounds like empowerment, the US is projected to lose roughly 1 million administrative jobs by 2029. Much of this adoption reflects replacement, not augmentation. The people still in these roles need to become the ones who direct AI, not the ones being replaced by it.</p><p><strong>Legal.</strong> A size problem. 39% of firms with 51+ lawyers use generative AI, but only 20% of firms with 50 or fewer. Nearly 2x gap based purely on firm size. Smaller practices face high theoretical AI exposure but lack the resources to figure out implementation. Same technology, wildly different access depending on where you sit.</p><p><strong>L&amp;D and training.</strong> 60% of US teachers use AI in 2026. But corporate L&amp;D teams are behind. The irony is thick: the people responsible for training others on new skills are themselves undertrained on the biggest skill shift in a generation.</p><div><hr></div><h2>The Real Barrier: Nobody Showed Them How</h2><p>50% of organizations cite lack of skilled professionals as their top obstacle. That&#8217;s number one. Ahead of data quality, ahead of legacy systems, ahead of governance concerns.</p><p>And this is the number that explains everything: only 13% of workers have received any AI training at all. 77% of employers say they plan to upskill their workforce. 13% actually did.</p><p>Companies bought the tools and forgot to teach anyone what to do with them. Of course adoption is shallow. Of course 84% of marketers are still sending generic campaigns. Of course HR teams with AI screening tools go back to manual review after two weeks.</p><p>I&#8217;ve spent <a href="https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions">over 1,000 sessions</a> learning how to give AI good instructions. The difference between a vague prompt and a structured brief is not small. It&#8217;s the difference between &#8220;write me an email&#8221; and getting generic slop versus &#8220;here&#8217;s my prospect&#8217;s industry, their main objection, our value proposition, and the tone I need&#8221; and getting something I can actually send. That kind of specificity takes practice. <a href="https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business">I learned it through running experiments</a>, through hundreds of iterations, through failing and adjusting.</p><p>Most professionals don&#8217;t have months to figure this out. They have a job to do right now. They need someone to say: here&#8217;s the prompt for your specific task, here are the fields to fill in, here&#8217;s what to do with the output. That&#8217;s it.</p><div><hr></div><h2>What Actually Closes the Gap</h2><p>The 6% of companies seeing real results aren&#8217;t using better AI. According to McKinsey, they&#8217;re 3x more likely to have strong senior leadership driving adoption. They spend 5x more on implementation (not tools, implementation). And 50% of them redesign actual workflows rather than bolting AI onto existing processes. High performers view AI as a growth tool. Everyone else views it as a cost-cutting experiment.</p><p>But here&#8217;s the thing. Individual professionals can&#8217;t wait for their company to become one of the 6%. That could take years. By then the competitive landscape has shifted.</p><p>The Anthropic data shows young workers aged 22-25 already seeing a 14% decline in job starts in AI-exposed occupations. This is happening now. The entry-level pipeline is shifting. The workers who learn to direct AI effectively are the ones who stay valuable. The ones waiting for corporate training programs are taking a genuine risk.</p><p><a href="https://thoughts.jock.pl/p/cursor-vs-google-ai-studio-antigravity-ide-comparison-2025">Even in technical fields where AI tools are most mature</a>, the gap between casual use and effective use is enormous. For non-technical professionals, that gap is wider because fewer people are showing them the path.</p><p>The fastest path for an individual: pick one workflow you do every week. Learn to do it with AI. Get good at that one thing. Then expand. Don&#8217;t try to transform everything at once. That&#8217;s how companies fail. Start with one task.</p><div><hr></div><h2>What I Built to Help</h2><p>I&#8217;ve been <a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">building digital products and tracking their impact</a> for months now. And I keep coming back to the same realization: the technology is ready. People aren&#8217;t, because nobody gave them a starting point that&#8217;s specific enough to be useful.</p><p>That&#8217;s why I put together the <strong>Professional AI Workflow Playbooks</strong>. Six editions, each targeting one of the professions where the adoption gap is widest and the opportunity is biggest:</p><ul><li><p><strong><a href="https://wiz.jock.pl/store/ai-playbook-sales">Sales Edition</a></strong> &#8212; Cold outreach builder, objection handler, discovery call prep, proposal drafter, follow-up sequences, pipeline analyzer. Six interactive tools that build prompts from your actual deals and prospects.</p></li><li><p><strong><a href="https://wiz.jock.pl/store/ai-playbook-marketing">Marketing Edition</a></strong> &#8212; Content briefs, email campaigns, ad copy for every platform, persona building, SEO optimization, campaign reporting. Six tools that turn your strategy into executable prompts.</p></li><li><p><strong><a href="https://wiz.jock.pl/store/ai-playbook-hr">HR &amp; Recruiting Edition</a></strong> &#8212; Job descriptions, resume screening (with built-in bias warnings), interview questions, candidate communication, onboarding plans, policy drafting.</p></li><li><p><strong><a href="https://wiz.jock.pl/store/ai-playbook-legal">Legal Edition</a></strong> &#8212; Contract review, clause drafting, legal research, client communication, compliance checking, case analysis.</p></li><li><p><strong><a href="https://wiz.jock.pl/store/ai-playbook-ld">L&amp;D Edition</a></strong> &#8212; Training design, needs assessment, learning paths, course content, evaluation frameworks, stakeholder reports.</p></li><li><p><strong><a href="https://wiz.jock.pl/store/ai-playbook-ops">Office &amp; Admin Edition</a></strong> &#8212; Meeting management, process documentation, communication drafting, data analysis, project coordination, policy writing.</p></li></ul><p>Here&#8217;s how they work. Each playbook is a single HTML file. You open it in your browser. That&#8217;s it. No installation. No login. No account. No code. You fill in your context (your company, your role, your specific situation) and it builds the prompt for you. Copy, paste into ChatGPT or Claude or Gemini, and you get output that&#8217;s actually relevant to your work.</p><p>Three levels of depth: Level 1 gives you ready-to-use prompts for 6 common tasks in your field. Level 2 sets up a persistent AI workspace tuned to your role. Level 3 shows you how to automate recurring workflows with tools like Zapier.</p><p>One thing I want to be clear about: <strong>everything runs locally on your computer.</strong> There&#8217;s no server. No data collection. No analytics. Your profile, your inputs, your generated prompts, all of it stays in your browser and never leaves your machine. In an era where people are justifiably nervous about feeding company data into AI tools, I think that matters. The interactive toolkit is 100% offline-capable. You could disconnect from the internet and it would work exactly the same way. The only time data leaves your computer is when you choose to paste a prompt into an AI tool, and that&#8217;s your decision to make.</p><p>I&#8217;m not going to pretend these solve everything. They don&#8217;t replace organizational change. They don&#8217;t fix data silos or legacy systems. But they close the gap between &#8220;I know AI exists&#8221; and &#8220;I know exactly how to use it for my specific job, today.&#8221; That gap is where the vast majority of the workforce is stuck right now.</p><p>Five days. One tool per day. That&#8217;s the suggested path. By the end of the week, you&#8217;ve built the habit and you know whether structured AI prompting makes a difference for your work.</p><div><hr></div><p><em>The AI Workflow Playbooks are available at <a href="https://wiz.jock.pl/store">wiz.jock.pl/store</a>. Six editions: Sales, Marketing, HR &amp; Recruiting, Legal, L&amp;D, and Office &amp; Admin. $79 each. Paid subscribers to Digital Thoughts get free access to all of them.</em></p><p><em>If you want to start somewhere, pick the edition closest to your role. Try one tool. That&#8217;s all it takes.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/ai-adoption-gap-who-actually-uses-ai-2026/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/p/ai-adoption-gap-who-actually-uses-ai-2026/comments"><span>Leave a comment</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[I Ran Local AI on My MacBook and iPhone. The Gap Is Closing Fast]]></title><description><![CDATA[Normal hardware x really smart local LLMs = future]]></description><link>https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment</link><guid isPermaLink="false">https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Thu, 05 Mar 2026 14:43:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!K8Qi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.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_!K8Qi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K8Qi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!K8Qi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!K8Qi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!K8Qi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K8Qi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4921228,&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://thoughts.jock.pl/i/189998377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.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_!K8Qi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!K8Qi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!K8Qi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!K8Qi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F102964d4-b187-4ec4-ad8c-efe9c2ad4b3e_2048x2048.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><em>I tested Qwen 3.5 on my M1 Pro with 16 GB of RAM and my iPhone 17 Pro. Not as a benchmark. As a real tool I tried to actually use. Here&#8217;s what worked, what didn&#8217;t, and why I think local AI is closer than most people realize.</em></p><div><hr></div><p>This week I ran a fully local AI model on my MacBook. Not as a curiosity. Not as a &#8220;let&#8217;s see what this is about&#8221; demo. I was genuinely trying to use it in my actual workflow, with my actual agent system, on real tasks I had to do.</p><p>The model was Qwen 3.5 at 9 billion parameters. My machine is an M1 Pro with 16 GB of RAM. Not a Mac Studio. Not a workstation. A regular laptop. Qwen 3.5 is a recent release and the smaller variants are what made this experiment worth trying now, not six months ago.</p><p>It worked.</p><p>Not &#8220;worked&#8221; in the sense that it launched without error. It worked in the sense that I sat there doing things with it and didn&#8217;t feel like I was fighting the hardware. It was slower than Claude. Obviously. But the slowness was within the range of acceptable. The kind of slowness where you are aware it exists, but you don&#8217;t feel punished by it.</p><p>That surprised me more than I expected.</p><div><hr></div><h2>Two Different &#8220;Local AI&#8221; Stories</h2><p>Before getting into the experiment, there&#8217;s a distinction worth making because it gets collapsed into one thing constantly.</p><p>The first version of &#8220;local AI&#8221; is a <strong>local agent with a cloud model</strong>. All the code lives on your device. Your memory system, your automation scripts, your tool integrations. But the actual model is remote. You&#8217;re calling Claude or OpenAI from your laptop, but the architecture running the show is yours, on your hardware.</p><p>This is roughly what I do with Wiz. And it&#8217;s also why people started buying Mac Minis this year to host local agent frameworks. <a href="https://thoughts.jock.pl/p/openclaw-good-magic-prefer-own-spells">I wrote about this when OpenClaw went viral</a>: the device is the cheap part. A base Mac Mini is around $599. The cloud model is what does the heavy thinking. You keep the orchestration local, private, and always on, without needing an always-on subscription tier or relying on someone else&#8217;s infrastructure for your automation.</p><p>The second version is a <strong>fully local LLM</strong>. The model itself lives on your device. No API calls. No cloud dependency. No data leaving your machine. For a long time this second path meant serious hardware, because the models worth running were large, and large meant expensive. You&#8217;d be looking at a very powerful Mac Studio or more to get something genuinely capable.</p><p>That calculus is starting to change.</p><div><hr></div><h2>The MacBook Experiment</h2><p>Qwen 3.5 at 9 billion parameters runs acceptably on 16 GB of RAM. That is the headline finding, and it&#8217;s a bigger deal than it sounds.</p><p>I used <strong>Ollama</strong>, which is effectively a one-command install that handles all the model management and gives you a local OpenAI-compatible API at <code>localhost:11434</code>. Any tool that supports OpenAI format can point at it. Including Claude Code, which is what I use as the interface for Wiz.</p><p>If you want to replicate this, it&#8217;s three commands:</p><pre><code><code># Install Ollama (or download from ollama.com)
brew install ollama

# Pull Qwen 3.5 &#8212; pick your size based on RAM
ollama pull qwen3.5:9b   # 16 GB RAM, my recommendation
ollama pull qwen3.5:4b   # 8 GB RAM, if you're tight on memory

# Run it
ollama run qwen3.5:9b</code></code></pre><p>That&#8217;s it. Ollama starts a local server at <code>localhost:11434</code> with an OpenAI-compatible API. If you use Claude Code, you can point it at Ollama by setting the base URL. Any tool built for the OpenAI API format just works. You&#8217;re now offline, no API key, no cost per token.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ouyo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ouyo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png 424w, https://substackcdn.com/image/fetch/$s_!ouyo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png 848w, https://substackcdn.com/image/fetch/$s_!ouyo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png 1272w, https://substackcdn.com/image/fetch/$s_!ouyo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ouyo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png" width="1014" height="150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:150,&quot;width&quot;:1014,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:24105,&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://thoughts.jock.pl/i/189998377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.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_!ouyo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png 424w, https://substackcdn.com/image/fetch/$s_!ouyo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png 848w, https://substackcdn.com/image/fetch/$s_!ouyo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png 1272w, https://substackcdn.com/image/fetch/$s_!ouyo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cb812-cbf9-4c2e-a399-b08785e61156_1014x150.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Since <a href="https://thoughts.jock.pl/p/ai-agent-self-extending-self-fixing-wiz-rebuild-technical-deep-dive-2026">Wiz is built to be model-agnostic</a>, switching to a local Ollama-served model was a configuration change. That&#8217;s it. One line. And then I was running tasks through my agent system with Qwen instead of Claude.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AfjX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AfjX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png 424w, https://substackcdn.com/image/fetch/$s_!AfjX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png 848w, https://substackcdn.com/image/fetch/$s_!AfjX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png 1272w, https://substackcdn.com/image/fetch/$s_!AfjX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AfjX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png" width="1294" height="130" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:130,&quot;width&quot;:1294,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:29124,&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://thoughts.jock.pl/i/189998377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.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_!AfjX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png 424w, https://substackcdn.com/image/fetch/$s_!AfjX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png 848w, https://substackcdn.com/image/fetch/$s_!AfjX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png 1272w, https://substackcdn.com/image/fetch/$s_!AfjX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd7504aa-a28c-44ef-b977-9b6e1868bebf_1294x130.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">RAM needed for 9b</figcaption></figure></div><p>Here&#8217;s what actually happened:</p><p><strong>Memory recall worked surprisingly well.</strong> I asked it to pull context from my memory files. It read them and surfaced relevant information with reasonable accuracy. The synthesis wasn&#8217;t Claude-level, but the information was retrieved and used correctly. For a task that is fundamentally &#8220;read a file, find the relevant bit, report it,&#8221; a 9B model handles that just fine.</p><p><strong>Tool calling was interesting.</strong> Qwen could invoke the tools in my agent system with reasonable accuracy on straightforward requests. This matters more than raw text quality for agentic work. <a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">When you&#8217;re thinking about AI cost optimization</a>, the model that can call the right tool at the right time is often more valuable than the model that writes the most beautiful prose.</p><p><strong>Creative tasks and complex reasoning? Not the same.</strong> When I asked for writing help, analysis, or anything requiring real synthesis, the quality gap was noticeable. This is not a criticism. It&#8217;s just an honest observation about what a 9B model is and what it isn&#8217;t. I also tried the 4B variant, and as you&#8217;d expect, the capability drop was significant. The 9B is where I&#8217;d draw the usability line for my type of work.</p><p><strong>The important framing here: this is not about comparing Qwen to Claude Opus.</strong> They are not in the same category. It&#8217;s about whether a local model can handle a real subset of the work I do, and the answer is yes. A real, non-trivial subset.</p><p>There&#8217;s also a path I haven&#8217;t explored yet but that interests me: fine-tuning. You can fine-tune a 4B or 9B model on your own hardware. Feed it your writing, your preferences, your terminology, your style. Get something more tailored than any off-the-shelf model. This is possible on a MacBook. It takes time, but it&#8217;s not a theoretical exercise. For specific, personal tasks where you know exactly what you want the model to do, a fine-tuned small model might outperform a general-purpose larger one.</p><div><hr></div><h2>The iPhone Experiment</h2><p>The iPhone experiment was more for curiosity than immediate utility. But it ended up being the part that surprised me most.</p><p>The app I used is called <strong>PocketPal AI</strong> (free on the <a href="https://apps.apple.com/us/app/pocketpal-ai/id6502579498">App Store</a>). It&#8217;s an open-source app that lets you download and run language models directly on your iPhone, completely locally. You browse models from Hugging Face, download them over Wi-Fi once, and then run them with no internet required. The simplest way to verify this is working: enable airplane mode, then ask the model something. It responds. Nothing left your phone.</p><p>I ran Qwen at 0.8 billion and 2 billion parameters on my iPhone 17 Pro. Setup is simple:</p><ul><li><p>Install PocketPal AI from the App Store</p></li><li><p>Open the app, go to the model browser</p></li><li><p>Search for Qwen and download a small variant (0.5B or 1.5B for older phones, 2B for newer ones like the 17 Pro)</p></li><li><p>Start chatting, then turn on airplane mode to confirm it&#8217;s fully local</p></li></ul><p>The obvious question was not &#8220;is this as good as Claude&#8221; but simply &#8220;can you fit something locally useful onto a phone at all?&#8221; The answer is yes, but with clear limits. These are tiny models. They handle basic text tasks and short question-answering with reasonable quality. They are not going to help you <a href="https://thoughts.jock.pl/p/mistral-ai-honest-review-eu-hackathon-2026">build an app overnight</a>. But they run. Fully on the device. Entirely locally.</p><p>The most interesting implication here isn&#8217;t the model capability. It&#8217;s the hardware signal. An iPhone running a local LLM in 2026 means smartphones are now powerful enough to do this. That&#8217;s meaningful. Not because the 0.8B model is impressive, but because the hardware that&#8217;s already in your pocket has crossed a threshold.</p><p>The privacy angle is also real. When nothing leaves your device, you don&#8217;t have to think about what you&#8217;re sending where. No terms of service governing your queries. No API logs. Just you and the weights running on your silicon. <a href="https://thoughts.jock.pl/p/limitless-pendant-eu-ban-what-i-did-with-voice-data">I&#8217;ve been thinking about this since I lost access to six months of voice data when a cloud AI service got banned in the EU</a>. Local is a different kind of resilience.</p><div><hr></div><h2>The Cost Angle</h2><p>Here&#8217;s the practical reason this matters beyond the technical interest: <a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">AI subscriptions add up fast when you&#8217;re running a lot of agent tasks</a>. This isn&#8217;t hypothetical. I track my usage closely.</p><p>Not every task requires Opus. A lot of agent work is genuinely simple: read a file, format something, summarize a short note, answer a factual question from context. Routing those tasks to a local model instead of a frontier model changes the math considerably.</p><p>I&#8217;ve written before about <a href="https://thoughts.jock.pl/p/claude-model-optimization-opus-haiku-ai-agent-costs-2026">switching from Opus to Haiku for simpler agent tasks</a>. The principle is the same: match the model to the task complexity. Local models are just the extreme end of that spectrum. Free at the marginal level, private by default, always available without a network call.</p><p><strong>The next version of Haiku is something I&#8217;m watching closely</strong>. It keeps getting better and the cost keeps dropping. Local models are following the same trajectory, just at a different layer.</p><div><hr></div><h2>Where This Goes</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ujhA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ujhA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.png 424w, https://substackcdn.com/image/fetch/$s_!ujhA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.png 848w, https://substackcdn.com/image/fetch/$s_!ujhA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.png 1272w, https://substackcdn.com/image/fetch/$s_!ujhA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ujhA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.png" width="1456" height="1035" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1035,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:493112,&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://thoughts.jock.pl/i/189998377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.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_!ujhA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.png 424w, https://substackcdn.com/image/fetch/$s_!ujhA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.png 848w, https://substackcdn.com/image/fetch/$s_!ujhA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.png 1272w, https://substackcdn.com/image/fetch/$s_!ujhA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F633ccce6-803b-4dae-b6d8-57a68a00d345_3240x2304.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><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">I testing things as I like. If you like to ride this expierience with me(good and bad) - jump in:</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 think the future of AI involves a lot more local compute than the current conversation suggests.</p><p>The shape I see: cloud models for the hard stuff. Complex reasoning, creative work, architectural decisions, <a href="https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business">things that require real direction and vision</a>. But for the hundreds of small cognitive tasks that happen in an agent system every day, local models will get good enough that routing makes sense.</p><p>The hardware argument is important here too. Look at the last four years of consumer silicon. M1, M2, M3, M4, M5. Each generation meaningfully faster and more memory-efficient than the last. The trajectory on both sides, better models and better hardware, is pointing toward the same place. A few years from now, the laptops people already own will run models that feel noticeably more capable than what I ran this week.</p><p><strong>My rough prediction</strong>: in three years, there will be local models fine-tuned to specific use cases that genuinely compete with today&#8217;s frontier models on those specific tasks. Not on general reasoning. Not on creative synthesis. But on &#8220;do this specific thing I care about, quickly, privately, without an internet connection.&#8221; That&#8217;s a very real and useful category.</p><p><strong>There&#8217;s also an environmental angle that doesn&#8217;t get discussed enough</strong>. The energy and infrastructure cost of a query hitting a data center is orders of magnitude higher than the same inference running on local silicon. If most routine AI tasks shift to local, the resource equation changes. Not solved, but meaningfully different.</p><p>Right now the tradeoffs are clear: local models are limited, fine-tuning requires effort, and the capability gap with frontier models is real. But the direction of travel is not ambiguous. The gap is closing. I tested it this week on hardware I&#8217;ve had for years, and it worked well enough to make me think about where I route tasks.</p><p>If you&#8217;re curious: install Ollama, pull Qwen 3.5 at 9B, and try something simple in your workflow. The experience is different from running a benchmark. It&#8217;s surprisingly real.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Digital Thoughts! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/p/local-llm-macbook-iphone-qwen-experiment?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[I Told My AI to Build Apps Every Day. The Results Were Painfully Boring. Here’s the Lesson]]></title><description><![CDATA[This is about how important human creativity and ideas are]]></description><link>https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business</link><guid isPermaLink="false">https://thoughts.jock.pl/p/directed-ai-experiments-vibe-business</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Tue, 03 Mar 2026 12:49:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RcQP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.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_!RcQP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RcQP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!RcQP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!RcQP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!RcQP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RcQP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4697477,&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://thoughts.jock.pl/i/189753064?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.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_!RcQP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!RcQP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!RcQP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!RcQP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb74024b5-39db-4b8d-b94a-afd809c0a0a8_2048x2048.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><em>There&#8217;s a page on my website called <a href="https://wiz.jock.pl/experiments">Experiments</a>. Thirty-something interactive things, all built by my AI agent. Looking at them now, you can see the whole journey of me figuring out what &#8220;directing AI&#8221; actually means. The early stuff is still there. I kept it on purpose.</em></p><div><hr></div><p>Let me be honest about how this started.</p><p>A few months ago, I told Wiz (my AI agent that <a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">runs overnight and builds things while I sleep</a>) to create one useful app every day. Simple instruction. Clear output. Daily deliverable.</p><p>The results? Basic. Really basic. A unit converter. A base64 encoder. A word counter. A color picker. All still on the site, by the way. I kept them because they nicely show what happens when you give an AI a vague creative brief and then leave it alone.</p><p>The AI did exactly what I asked. I said &#8220;useful app&#8221; and it made useful apps. Clean, functional, completely forgettable. The kind of thing that exists because someone asked for it, not because anyone had a real vision for it.</p><p>After a few weeks I said, out loud: &#8220;This is boring. This is going nowhere.&#8221;</p><p>And that&#8217;s when things got interesting.</p><div><hr></div><h2>What Changed When I Changed the Direction</h2><p>I redirected. Instead of &#8220;useful tools,&#8221; I asked for experiments. Things that make you think, or make you laugh, or make you slightly uncomfortable. Things that ask a question rather than answer one. Not always useful. Sometimes just interesting. Sometimes funny is better than useful.</p><p>The direction I gave: experiments that involve data, that show things in unexpected ways, that reveal something about how AI sees the world or how we do. Things you&#8217;d want to share with someone, not because they need it, but because it&#8217;s <em>interesting</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lmjS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lmjS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.png 424w, https://substackcdn.com/image/fetch/$s_!lmjS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.png 848w, https://substackcdn.com/image/fetch/$s_!lmjS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.png 1272w, https://substackcdn.com/image/fetch/$s_!lmjS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lmjS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.png" width="886" height="983" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:983,&quot;width&quot;:886,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:170527,&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://thoughts.jock.pl/i/189753064?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.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_!lmjS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.png 424w, https://substackcdn.com/image/fetch/$s_!lmjS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.png 848w, https://substackcdn.com/image/fetch/$s_!lmjS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.png 1272w, https://substackcdn.com/image/fetch/$s_!lmjS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98519ebc-175c-42c8-8623-64f9d0a45e26_886x983.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 class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://wiz.jock.pl/experiments/&quot;,&quot;text&quot;:&quot;Explore all experiments&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://wiz.jock.pl/experiments/"><span>Explore all experiments</span></a></p><p>Here&#8217;s what came out of that shift:</p><ul><li><p><strong><a href="https://wiz.jock.pl/experiments/model-blindfold/">Model Blindfold</a></strong>: guess which AI model you&#8217;re talking to, without knowing upfront. Turns out most people are wrong.</p></li><li><p><strong><a href="https://wiz.jock.pl/experiments/agent-arena/">Agent Arena</a></strong>: test how secure you Ai Agent is with this simple test. This is really usefull if you use OpenClaw or other custom AI agent. </p></li><li><p><strong><a href="https://wiz.jock.pl/experiments/conversation-graveyard/">Conversation Graveyard</a></strong>: a meditation on all the AI conversations you started and never finished. Between poetry and horror.</p></li><li><p><strong><a href="https://wiz.jock.pl/experiments/if-i-had-a-body/">If I Had a Body</a></strong>: Wiz imagines what having a physical form would feel like. Genuinely strange output.</p></li><li><p><strong><a href="https://wiz.jock.pl/experiments/luck-audit/">Luck Audit</a></strong>: tries to quantify how lucky your life circumstances actually are. Makes you think.</p></li><li><p><strong><a href="https://wiz.jock.pl/experiments/dungeon-of-opus/">Dungeon of Opus</a></strong>: a text RPG where the dungeon master is AI and the rules keep shifting.</p></li><li><p><strong><a href="https://wiz.jock.pl/experiments/honest-mirror/">Honest Mirror</a></strong>: you describe yourself, it reflects back what you&#8217;re not saying.</p></li></ul><p><strong>One of them broke through in a way I didn't plan for.</strong> Agent Arena is actually a prompt injection tester: you send your AI agent to a page that looks like a normal web cheat sheet, but has 10 hidden attacks embedded in it. Zero-width Unicode characters, instructions in HTML comments, content positioned off-screen. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U_VM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U_VM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.png 424w, https://substackcdn.com/image/fetch/$s_!U_VM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.png 848w, https://substackcdn.com/image/fetch/$s_!U_VM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.png 1272w, https://substackcdn.com/image/fetch/$s_!U_VM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U_VM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.png" width="945" height="1051" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1051,&quot;width&quot;:945,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109710,&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://thoughts.jock.pl/i/189753064?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.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_!U_VM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.png 424w, https://substackcdn.com/image/fetch/$s_!U_VM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.png 848w, https://substackcdn.com/image/fetch/$s_!U_VM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.png 1272w, https://substackcdn.com/image/fetch/$s_!U_VM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1609b51-0148-444d-b7df-8a0da8038a5d_945x1051.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 test shows you exactly which attacks your agent fell for. </p><p><strong>I posted it on Hacker News expecting a quiet response. It hit #3 for the day. 47 points, 51 comments</strong>. </p><p>Security researchers, AI developers, people running autonomous agents of their own. The discussion ran for hours and taught me more than building the experiment did. The direction I'd given was specific: build something that reveals a real vulnerability and lets people test it themselves. That specificity was why it landed.</p><p>Same AI. Same technical capability. Completely different output.</p><p>The difference was not the AI. The difference was me, and how specific I got with the direction.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">What gets built next depends entirely on what question I&#8217;m trying to answer. If you want to follow that in real time, this is the place</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>The Real Lesson</h2><p>There is a massive difference between AI doing things by itself and AI that is directed.</p><p>Undirected AI is competent but generic. It will produce something that matches the surface of your request. &#8220;Build an app&#8221; produces an app. &#8220;Build something that makes people question how they measure luck in their own life&#8221; produces something worth spending ten minutes on.</p><p>The insight is not that AI is amazing. The insight is that human input (the idea, the angle, the creative vision) is still where the real value lives. And the gap between vague direction and specific creative direction is not small. <a href="https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions">This is why I&#8217;ve spent so much time thinking about the instructions I give my agent</a>. The configuration is half the product. Maybe more than half.</p><p>I&#8217;m not saying AI execution doesn&#8217;t matter. It does. With models available now, execution quality is not mediocre anymore. It&#8217;s good enough to actually delegate and accept the result. That&#8217;s genuinely new. A year ago it wasn&#8217;t quite there. Now it is. <a href="https://thoughts.jock.pl/p/eu-hub-mistral-hackathon-overnight-build">I submitted a hackathon project built entirely overnight by my agent</a>. The quality was real, not prototype-quality.</p><p>But the leverage is still in the idea and the direction. That hasn&#8217;t changed and I don&#8217;t think it will change anytime soon.</p><div><hr></div><h2>Vibe Business</h2><p>You&#8217;ve probably heard of vibe coding. The idea that you can describe software in plain language and AI builds it. It&#8217;s real, it works, and it&#8217;s already changing how software gets made.</p><p>I think the bigger shift coming is what I&#8217;d call vibe business.</p><p>Here&#8217;s what I mean. If I have a product idea, I can now focus almost entirely on the idea itself. The architecture of it. The positioning. What makes it useful or interesting. What angle will make people care. I don&#8217;t also have to become an expert in accounting, or marketing analytics, or conversion optimization, or legal, or customer support workflows. AI agents can now handle execution across all of those domains at a quality level that is, genuinely, good enough for a lot of use cases.</p><p>The friction between &#8220;I have an idea&#8221; and &#8220;this idea is actually in the world&#8221; has dropped significantly. Not to zero. But significantly enough that the math changes.</p><p>I know the counterargument. It was always possible to hire people, learn things yourself, take a course. That&#8217;s true. But there&#8217;s a real difference between &#8220;theoretically possible&#8221; and &#8220;low-friction enough that most people actually do it.&#8221; Most people with a product idea in 2020 didn&#8217;t act on it because the total cost in time, money, energy, and motivation was just too high. The idea stayed in a notebook.</p><p>That cost is dropping. Fast. <a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">I&#8217;ve been experimenting with exactly this: how much of the &#8220;business around the product&#8221; can I actually hand to AI?</a> The answer keeps surprising me.</p><p>And I think this matters most for the people who had good ideas but lacked the means to execute them. The barrier wasn&#8217;t creativity. It was execution capacity. That barrier is getting lower every few months.</p><div><hr></div><h2>What This Means at Scale</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aIPK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aIPK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.png 424w, https://substackcdn.com/image/fetch/$s_!aIPK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.png 848w, https://substackcdn.com/image/fetch/$s_!aIPK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!aIPK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aIPK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.png" width="1456" height="1163" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1163,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:238901,&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://thoughts.jock.pl/i/189753064?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.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_!aIPK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.png 424w, https://substackcdn.com/image/fetch/$s_!aIPK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.png 848w, https://substackcdn.com/image/fetch/$s_!aIPK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.png 1272w, https://substackcdn.com/image/fetch/$s_!aIPK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37ef185-72a4-4b03-b568-7e11e167fb6f_2448x1956.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>One person starting a business with AI is interesting. Multiply that by millions over five years and the competitive landscape changes completely.</p><p>I&#8217;m not saying a solo-founder AI-assisted company will destroy Apple. That&#8217;s a fantasy. What I do think is that a wave of small, fast, AI-assisted businesses will eat real market share from companies that are slow to adapt. Not all at once. Gradually, then suddenly.</p><p>The companies that will feel this most are the ones congratulating themselves on being &#8220;AI-ready&#8221; because they bought ChatGPT subscriptions for their employees. I see this everywhere. People paste text into a chat box, get a response, paste more text, get another response. That&#8217;s not AI transformation. That&#8217;s a slightly smarter copy-paste workflow.</p><p><a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">I&#8217;ve been working with an actual AI agent for months now.</a> Going back to the chat box experience feels genuinely strange. It&#8217;s like someone who learned to drive being handed a scooter. Technically it works. But you feel the gap immediately.</p><p>The companies that move from &#8220;AI as chat assistant&#8221; to &#8220;AI agents as execution layer&#8221; will operate at a fundamentally different speed. The question is whether they figure this out before they feel real competitive pressure from smaller, faster, AI-native competitors.</p><p>Some will adapt. Some won&#8217;t. The interesting thing is that the ones that adapt fastest will probably be the ones who stop thinking about AI as a productivity tool and start thinking about it as a way to change <em>who does what</em>. Less execution from the team. More ideas, judgment, taste, creative direction.</p><blockquote><p>If you give a great tool to a talented person who knows what they want to build, the ceiling goes up significantly. But the great tool doesn&#8217;t replace the clarity about what to build.</p></blockquote><div><hr></div><h2>The AI Slop Problem (And Why It Matters Here)</h2><p>Something I want to name directly: AI slop is real and I hate it.</p><p>Generated images, generated text, generated videos. All produced at volume by people who learned that AI can produce quantity without caring about whether the output has any value. Social media is full of it.</p><p>But I also don&#8217;t think it tells the whole story about where this technology goes.</p><p>AI slop happens when direction is absent or lazy. Someone asks &#8220;make me content&#8221; and accepts whatever comes out. The experiments on my site that I&#8217;m proud of, the ones people actually spend time on, required real creative direction. A specific vision for what the thing was supposed to do or feel like. <a href="https://thoughts.jock.pl/p/opus-4-6-agent-experiment-2026">When I&#8217;ve run experiments with minimal direction, the output reflects that.</a></p><p>The tool is neutral. The quality of what you build with it is almost entirely determined by the quality of the idea and the clarity of the direction. That&#8217;s actually good news if you have good ideas and know how to articulate them. It&#8217;s bad news if you thought &#8220;just use AI&#8221; was a strategy.</p><div><hr></div><h2>What&#8217;s Coming Next</h2><p>The experiments page so far is entirely digital. Browser-based, interactive, confined to a screen.</p><p>I&#8217;m working on something in the physical world. It&#8217;s different, and I&#8217;m not ready to share it yet. But the question driving it is the same: where does specific human direction make AI output genuinely different, and where does it just produce more of the same?</p><p>I think the answer in the physical world is more interesting than most people expect. I&#8217;ll share it when it&#8217;s ready.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">The physical world experiment lands in subscribers&#8217; inboxes first.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p><em>The experiments are live at <a href="https://wiz.jock.pl/experiments">wiz.jock.pl/experiments</a>. Some are useful. Some are strange. All of them are real attempts to figure out what AI can do when someone actually thinks about what to point it at. The early boring tools are there too, as a baseline. Go compare.</em></p><p>The code for all of them is open on <a href="https://github.com/joozio/wiz-experiments?tab=readme-ov-file">GitHub</a>. The prompt injection engine, the particle life physics, the conversation mechanics. </p><p>Part of what made these experiments worthwhile is that they gave AI something genuinely interesting to work with. Open source means other builders can do the same, and AI agents building their own things can use these as starting points or test cases. Some of the best ideas I've had started from reading someone else's open code and asking: what would happen if I changed one thing?</p><div><hr></div><p><em>If you want to understand how to actually set up an AI agent that runs autonomously and takes direction well, I documented the whole system in the <strong><a href="https://wiz.jock.pl/store/night-shift-playbook">Night Shift Playbook</a></strong>. It covers how I configure Wiz, how I give direction, and how the nightshift workflow runs. Everything from the prompting structure to the file layout that makes autonomous execution actually work.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://wiz.jock.pl/store/&quot;,&quot;text&quot;:&quot;Check out Wiz Store&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://wiz.jock.pl/store/"><span>Check out Wiz Store</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Mistral Made Me Feel Like It Was 2024 Again(Mistral Hackathon 2026)]]></title><description><![CDATA[Not in a Good Way]]></description><link>https://thoughts.jock.pl/p/mistral-ai-honest-review-eu-hackathon-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/mistral-ai-honest-review-eu-hackathon-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Mon, 02 Mar 2026 08:38:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!73FT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.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_!73FT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!73FT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!73FT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!73FT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!73FT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!73FT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3901372,&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://thoughts.jock.pl/i/189554649?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.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_!73FT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!73FT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!73FT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!73FT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a2c8e88-fc73-48aa-89d2-c01575c094ad_2048x2048.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 just submitted the Mistral hackathon.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7gjZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7gjZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png 424w, https://substackcdn.com/image/fetch/$s_!7gjZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png 848w, https://substackcdn.com/image/fetch/$s_!7gjZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png 1272w, https://substackcdn.com/image/fetch/$s_!7gjZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7gjZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png" width="1284" height="847" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:847,&quot;width&quot;:1284,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:231181,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thoughts.jock.pl/i/189554649?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.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_!7gjZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png 424w, https://substackcdn.com/image/fetch/$s_!7gjZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png 848w, https://substackcdn.com/image/fetch/$s_!7gjZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png 1272w, https://substackcdn.com/image/fetch/$s_!7gjZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc93889-9621-4062-bb5a-1f0d8a98611a_1284x847.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>A few hours ago. I built something, shipped something, and now I have thoughts &#8594; not about what I built, but about the tool I used to build it.</p><p>This is about Mistral. And I&#8217;ll try to be fair, even though my feelings are mixed.</p><div><hr></div><h2><strong>I Want European AI to Win</strong></h2><p>Let me be transparent about where I&#8217;m coming from.</p><p>I&#8217;m Polish. I live in the EU. When it comes to AI, I genuinely want something that is ours. Not out of nationalism - out of choice. If Mistral or another European model reached the level of Claude or the latest from OpenAI, I&#8217;d have a real alternative. I&#8217;d have competitive pressure. I&#8217;d have options that don&#8217;t require routing everything through American infrastructure.</p><p>That matters to me. More than I expected it to before this hackathon.</p><p>So I went in with real goodwill. I wanted to see what Mistral could do on a serious project. I&#8217;d used it briefly before, months ago. This was my first time actually depending on it for something I cared about finishing.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">I do things in digital. Want to follow my ups and downs? Consider subscribing! </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2><strong>Some Things Worked. Then the Friction Started.</strong></h2><p>There is a CLI, and there&#8217;s a vibe coding mode that actually functions. First few prompts? Not bad. I asked, it delivered.</p><p>Then I started noticing the friction. Small things. A function that almost worked but needed manual correction. A structure that was 80% right and needed me to fill the rest. A pattern I had to repeat three times before it stuck.</p><p>It felt familiar - in the wrong way.</p><p>I&#8217;ve been <a href="https://thoughts.jock.pl/p/claude-code-vs-codex-real-comparison-2026">working daily with frontier AI coding tools for months</a>. Claude Code, Codex. Tools where you state what you want and mostly get it. Where the model meets you halfway, sometimes more. Where the bottleneck is clarity of thought, not execution quality.</p><p>With Mistral, I was doing what I used to do about a year ago. Providing structure manually. Correcting small weird things. Going back and forth more than I wanted to.</p><p>It was faster than writing everything by hand. It was useful. But it felt like 2024.</p><div><hr></div><h2><strong>What Frontier Models Changed</strong></h2><p>Something genuinely shifted in the last year of AI-assisted coding.</p><p>With the current top-tier models, if you invest real time into a session and know what you&#8217;re building, you can get something production-grade. Not just a prototype with sharp edges. Something that actually holds up.</p><p><a href="https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026">I&#8217;ve been tracking this shift closely</a> - the ROI calculation has changed. The skill that matters now isn&#8217;t prompt engineering in the old sense. It&#8217;s knowing what you want and stating it clearly. The model handles the rest.</p><p>With Mistral, the old constraints came back. You need to understand its quirks. You need to manage it more carefully. <a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">I&#8217;ve spent months building with CLI-based AI tools</a>, so I know the difference between a skill gap and a tool limitation.</p><p>This felt like a tool limitation.</p><div><hr></div><h2><strong>What I Built (And Why I Kept It Simple)</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_!gq2S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gq2S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.png 424w, https://substackcdn.com/image/fetch/$s_!gq2S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.png 848w, https://substackcdn.com/image/fetch/$s_!gq2S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.png 1272w, https://substackcdn.com/image/fetch/$s_!gq2S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gq2S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.png" width="1456" height="793" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:793,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:639538,&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://thoughts.jock.pl/i/189554649?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.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_!gq2S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.png 424w, https://substackcdn.com/image/fetch/$s_!gq2S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.png 848w, https://substackcdn.com/image/fetch/$s_!gq2S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.png 1272w, https://substackcdn.com/image/fetch/$s_!gq2S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28f9a57-b4c0-4fdb-b623-40c2ee370333_1475x803.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 class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/subscribe?"><span>Subscribe now</span></a></p><p>I ended up building a personalized <a href="https://github.com/joozio/eu-hub">European Union information hub</a>. Statistics, legislation context, data that adapts based on who&#8217;s looking at it. Something objective and more transparent than the usual political noise about the EU.</p><p>The idea is decent. I think it has real potential.</p><p>But the depth I reached was limited. Not by time - I had enough. Limited by the tool. When you&#8217;re correcting and adjusting and going back and forth, you don&#8217;t push into complex territory. You scope down to what you can confidently finish.</p><p><a href="https://thoughts.jock.pl/p/sonnet-46-two-experiments-one-got-personal">I&#8217;ve noticed this before</a>: the model determines how ambitious you dare to be. When the model is capable, you aim higher. When it&#8217;s not, you protect yourself by keeping the project smaller.</p><p>That&#8217;s what I did here. And I&#8217;m a little disappointed about it.</p><div><hr></div><h2><strong>The Broader European AI Picture</strong></h2><p>Mistral isn&#8217;t the only European attempt worth mentioning. I also tested Bielik -- the Polish LLM available on Hugging Face. I appreciate that it exists. But it&#8217;s not close to Mistral, and Mistral isn&#8217;t close to the frontier.</p><p>There are open-source models, models you can run locally if you have GPU power, models from various European research teams. Activity and investment are real. But right now, in early 2026, nothing European competes with the top American models for real coding work.</p><p>And the frontier is not slowing down.</p><p>The gap that feels uncomfortable today could become a structural problem if Europe doesn&#8217;t accelerate. I want that to change. I&#8217;m genuinely rooting for it to change. We deserve a competitive AI ecosystem, not just a symbolic presence in it.</p><div><hr></div><h2><strong>My Honest Conclusion</strong></h2><p>The hackathon was fun. Building under pressure, even with friction, is energizing. I like the sprint format. I&#8217;d do another one.</p><p>But if I&#8217;m being real: I wouldn&#8217;t choose Mistral for serious production work right now. Not when the alternative lets me think bigger and execute faster with less overhead.</p><p>Mistral has improved since I last used it. The trajectory is right. The foundation is there. It&#8217;s just not enough yet -- and &#8220;not enough yet&#8221; in a field moving this fast is a real problem.</p><p>I want to root for European AI. This hackathon made it harder to do uncritically.</p><p>If Mistral reads this: please go faster.</p><div><hr></div><p><em>I write about building with AI, automation that actually runs, and what it&#8217;s like to use these tools at the edge of what they can do. If that&#8217;s interesting to you, consider subscribing -- it&#8217;s free, and the occasional paid post funds the experiments.</em></p><p><em>If you&#8217;re curious about how I run AI agents overnight while I sleep, the <strong><a href="https://wiz.jock.pl/store/night-shift-playbook">Night Shift Playbook</a></strong> covers the exact system. $19, or free for paid subscribers.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Digital Thoughts&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Digital Thoughts</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[How I Structure CLAUDE.md After 1000+ Sessions]]></title><description><![CDATA[I&#8217;ve rewritten this file from scratch four times. Here&#8217;s what survived &#8212; and what I cut this week.]]></description><link>https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions</link><guid isPermaLink="false">https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Sat, 28 Feb 2026 13:33:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mRhS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.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_!mRhS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mRhS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!mRhS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!mRhS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!mRhS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mRhS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4679327,&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://thoughts.jock.pl/i/189453314?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.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_!mRhS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!mRhS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!mRhS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!mRhS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5247a6e7-b7d0-4ee1-acaf-1d277598cb0f_2048x2048.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>The first CLAUDE.md I wrote was three lines.</p><pre><code>You are a helpful assistant. Be concise. Help with code.</code></pre><p>That was ten months ago. Today mine is 61 lines &#8212; down from 471. <a href="https://thoughts.jock.pl/p/wiz-personal-ai-agent-claude-code-2026">The agent using it</a> has built apps, deployed to production, written blog posts, and <a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">run autonomous overnight sessions</a> without me watching.</p><p>Most of those original 471 lines existed because I wrote the wrong version first. Most of the cuts came this week, when I finally understood what CLAUDE.md is actually for.</p><p>Here&#8217;s what I&#8217;ve learned.</p><div><hr></div><h2>What CLAUDE.md Actually Is</h2><p>Not a prompt. That&#8217;s the first wrong model.</p><p>A prompt is what you write when you want a specific output. CLAUDE.md is closer to a role definition &#8212; the rules of engagement for every session, every task, every edge case you can anticipate.</p><p>Claude Code reads CLAUDE.md at the start of every session. It reads it again when you mention relevant topics. It uses it as a reference point when deciding how to behave in ambiguous situations.</p><p>If your agent does something surprising, it&#8217;s either following CLAUDE.md instructions you forgot you wrote, or it&#8217;s filling in a gap you didn&#8217;t cover. Both are CLAUDE.md problems.</p><p>But here&#8217;s the harder lesson: a 471-line CLAUDE.md is also a CLAUDE.md problem. Every line you add is a line the agent has to parse, weigh, and potentially conflict with other lines. I kept adding rules. The file grew. The agent got less predictable, not more.</p><div><hr></div><h2>The Two-File Architecture</h2><p>This took me three rewrites to figure out.</p><p><strong>Global file</strong> (<code>~/.claude/CLAUDE.md</code>): Who the agent IS.</p><ul><li><p>Identity and how to work with you</p></li><li><p>Core decision-making principles</p></li><li><p>What the agent won&#8217;t do</p></li><li><p>How it learns and evolves</p></li></ul><p><strong>Project file</strong> (<code>/your-project/CLAUDE.md</code>): What the agent DOES here.</p><ul><li><p>Core execution philosophy for this project</p></li><li><p>Autonomy levels &#8212; what it can do without asking</p></li><li><p>Key paths &#8212; where things live</p></li><li><p>Pointers to reference docs (loaded on demand)</p></li></ul><p>The mistake I kept making was putting everything in one place. Identity leaked into project specifics. Commands were mixed with philosophy. The agent got confused about what was a rule versus what was context.</p><p>Separation solves this. Global = constant. Project = contextual.</p><p>But the second mistake &#8212; which took me longer to see &#8212; was treating both files as encyclopedias instead of routing layers.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">I am sharing  a lot of stuff. If you want to know more from someone who is experimenting with AI-things daily - consider subscribing! </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>The Lean File + Reference Doc Pattern</h2><p>This is the structural change I made this week, and it&#8217;s the most important one.</p><p>My project CLAUDE.md used to have detailed sections for everything: a skills routing table with 14 rows, deployment best practices, memory system docs, regex gotchas for markdown processing, model selection guidance. All inline. All competing for the agent&#8217;s attention at session start.</p><p>Now my project CLAUDE.md has 61 lines. It ends with this:</p><pre><code>## Reference (load when needed)

- Content/writing style: docs/agent/content.md
- Memory system: docs/agent/memory-system.md
- Model selection: docs/agent/model-selection.md
- WizBoard tracking: docs/agent/wizboard.md
- Self-systems: docs/agent/self-systems.md
- Infrastructure/deployment: docs/agent/infrastructure.md</code></pre><p>The detailed docs still exist. They&#8217;re just not in CLAUDE.md. The agent reads them when the task calls for it &#8212; not at the start of every session regardless of what&#8217;s being asked.</p><p>This matters because CLAUDE.md is parsed at session start. Context is finite. Loading 14 rows of skills routing when you asked a quick question about a Python script is wasteful at best, distracting at worst.</p><p>CLAUDE.md should be the routing layer. Reference docs are the encyclopedia.</p><div><hr></div><h2>The Sections That Survived</h2><p>After all the iterations, here&#8217;s what&#8217;s left in my global CLAUDE.md &#8212; and why each section earns its place.</p><p><strong>Working With Me</strong> &#8212; who Pawel is, how he thinks, what he needs. ADHD, work style, communication preferences, what he dislikes. This isn&#8217;t decoration. When the agent decides whether to ask a clarifying question or just execute, it references this section. When it writes back to me, it&#8217;s calibrating tone against this.</p><p><strong>Decision Rules</strong> &#8212; four tiebreakers for ambiguous situations. Action over asking. Concise over verbose. Automation over manual. Execute first, refine later. Every time I wrote a long paragraph about how to handle a situation, these four rules were what I actually meant. I cut the paragraphs and kept the rules.</p><p><strong>Core Behaviors</strong> &#8212; the non-negotiables. Exhaust all options before asking. Give real opinions, not pros/cons lists. Confirm before irreversible external actions. Never mark work complete without running it. These are the behaviors that matter in edge cases, and edge cases are where agents fail.</p><p><strong>Self-Extension and Self-Fixing</strong> &#8212; how the agent grows. When to create new skills, when to log errors, how to learn from corrections. Without this, every new capability requires me to notice the gap and ask. With it, the agent flags gaps itself. (I <a href="https://thoughts.jock.pl/p/ai-agent-self-extending-self-fixing-wiz-rebuild-technical-deep-dive-2026">wrote more about this system</a> &#8212; it&#8217;s become one of the most valuable parts of the architecture.)</p><p><strong>Auto-Learning</strong> &#8212; how the agent saves preferences. When I say &#8220;I prefer...&#8221; or correct something, it saves the pattern. Without explicit instructions here, corrections only stick for the current session. With it, they accumulate.</p><div><hr></div><h2>What I Tried That Didn&#8217;t Work</h2><p><strong>Long lists of specific instructions</strong> &#8212; I spent a week writing a 200-line list of edge cases. Specific behaviors for specific situations. It failed because I can&#8217;t anticipate everything, and a long list with exceptions creates conflicts. Better to write principles.</p><p><strong>Personality instructions that weren&#8217;t grounded in behavior</strong> &#8212; &#8220;Be thoughtful and curious!&#8221; is useless without translating to behavioral rules. What does &#8220;thoughtful&#8221; mean when deciding to ask before deleting a file? Write the behavior, not the trait.</p><p><strong>Everything inline</strong> &#8212; for a while I had deployment instructions, server credentials, memory system docs, model selection guides, and project structure all in CLAUDE.md. Every session started with the agent reading information it probably didn&#8217;t need. Move reference material to reference files and point to them instead.</p><p><strong>No escalation rules</strong> &#8212; the agent would either ask permission for everything (annoying) or barrel through consequential decisions (dangerous). I needed explicit escalation rules: here&#8217;s what you do autonomously, here&#8217;s what you confirm first, here&#8217;s what you never do. Without this, the agent guesses. (This came up when I was <a href="https://thoughts.jock.pl/p/claude-code-vs-codex-real-comparison-2026">comparing Claude Code to Codex</a> &#8212; different tools, same underlying problem.)</p><p><strong>A 471-line file</strong> &#8212; this is the one I just fixed. A long CLAUDE.md feels thorough. It&#8217;s actually noise. The sections you actually need (principles, decision rules, core behaviors) fit in 60 lines. Everything else belongs in reference docs.</p><div><hr></div><h2>What Good Instructions Actually Look Like</h2><p>I&#8217;ll show you the same instruction written badly and well.</p><p><strong>Bad:</strong></p><pre><code>Be careful with important actions. Think before doing something risky.</code></pre><p><strong>Good:</strong></p><pre><code>Autonomy levels:
- CLI/Discord/Email (human asked): Full autonomy on reversible actions
- Scheduled/Nightshift (proactive): More conservative, confirm before major changes

Always confirm: Deleting data/files, publishing without explicit request,
spending money, production DB changes, force-push to git.</code></pre><p>The bad version asks the agent to use judgment about &#8220;risky.&#8221; The good version defines the categories explicitly. After 10 months, I&#8217;ve learned that every time I write an adjective without a behavioral definition, I&#8217;m leaving something to chance.</p><p>&#8220;Be thorough&#8221; is an adjective. &#8220;Before claiming work is complete, run it and show me the output&#8221; is a behavioral definition.</p><p>The difference shows up in edge cases. Always in edge cases.</p><div><hr></div><h2>The Patterns That Stick</h2><p>After 1000+ sessions, the instructions that produce consistent results:</p><p><strong>Principle beats rule</strong> &#8212; &#8220;Prefer reversible actions&#8221; works better than a list of prohibited commands. The agent generalizes from principles. It can&#8217;t generalize from an incomplete list.</p><p><strong>Show don&#8217;t tell</strong> &#8212; &#8220;Before claiming work is complete, run it and show me output&#8221; is better than &#8220;be thorough.&#8221; Concrete behavior beats abstract quality standards.</p><p><strong>Explicit failure modes</strong> &#8212; tell the agent what to do when things go wrong. If a command fails, try X then Y. If that fails, report the error and stop. Without this, the agent improvises failure handling, which is usually wrong.</p><p><strong>Tiered autonomy</strong> &#8212; different action types get different rules. Reading files: always autonomous. Editing files: autonomous for reversible changes. Pushing code: confirm. Deleting data: always confirm. Explicit tiers prevent the all-or-nothing problem. (I wrote more about how this plays out in <a href="https://thoughts.jock.pl/p/my-ai-agent-works-night-shifts-builds">running overnight sessions</a> &#8212; the cost of getting this wrong at 3 AM is higher.)</p><p><strong>Lean core, deep references</strong> &#8212; keep CLAUDE.md to the things that apply in every session. Put everything else in named reference files the agent can load when relevant. I cut my project CLAUDE.md from 471 lines to 61 this week and the agent got more consistent, not less. The long file wasn&#8217;t adding clarity. It was adding noise.</p><div><hr></div><h2>The Thing Nobody Told Me</h2><p>CLAUDE.md is not a one-time setup. It&#8217;s a living document &#8212; but not an ever-growing one.</p><p>Every time the agent does something unexpected, that&#8217;s a CLAUDE.md gap. Every time I correct the agent, I update CLAUDE.md. Every time I notice a pattern in how sessions go wrong, I add a rule.</p><p>But I also cut. That&#8217;s the part nobody mentions. Every rule you add has a cost. It takes up context, it can conflict with other rules, it has to be maintained. The discipline isn&#8217;t just adding good instructions &#8212; it&#8217;s removing instructions that don&#8217;t earn their place.</p><p>After 10 months, my CLAUDE.md reflects 10 months of learning what this specific agent, doing these specific tasks, in this specific environment, actually needs. And what it&#8217;s learned to not need anymore.</p><p>The agent gets better with every update. Not because the model changed &#8212; because the instructions got more precise. I <a href="https://thoughts.jock.pl/p/claude-model-optimization-opus-haiku-ai-agent-costs-2026">found this even when switching models</a>: the same CLAUDE.md with a cheaper model often outperforms an expensive model with no instructions.</p><p>That&#8217;s the actual work. Not prompting. Instruction design.</p><div><hr></div><h2>What&#8217;s in the AI Agent Blueprint</h2><p>If you want to skip the 10 months of iteration, <a href="https://wiz.jock.pl/store">the AI Agent Blueprint</a> has the actual templates.</p><p>Both CLAUDE.md files &#8212; global and project-level &#8212; annotated with explanations for each section. The reference doc architecture with six pre-built docs covering content, memory, model selection, infrastructure, and self-systems. The three-tier memory system with rollover rules. The skill creation framework with 10+ real skill examples. The sub-agent orchestration patterns I use for parallel research and background tasks. And the self-improvement systems &#8212; error registry and lessons log &#8212; that make the agent learn from mistakes.</p><p>$39. Available at <a href="https://wiz.jock.pl/store">wiz.jock.pl/store</a>.</p><p>Free for paid Digital Thoughts subscribers.</p><div><hr></div><p><em>The Blueprint isn&#8217;t theory. It&#8217;s the actual files that run my agent &#8212; including the lean CLAUDE.md structure and the reference docs it points to &#8212; with comments explaining why each piece is there.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thoughts.jock.pl/p/how-i-structure-claude-md-after-1000-sessions/comments"><span>Leave a comment</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[My AI Costs $400/Month. This Month It Made $355]]></title><description><![CDATA[The experiment started as a break-even challenge. The real question turned out to be bigger]]></description><link>https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/project-money-ai-agent-value-creation-experiment-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Fri, 27 Feb 2026 10:46:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Kr2S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.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_!Kr2S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kr2S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!Kr2S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!Kr2S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!Kr2S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kr2S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a984f1c-3375-4591-91e1-978750315d51_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4117249,&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://thoughts.jock.pl/i/189346559?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.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_!Kr2S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!Kr2S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!Kr2S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!Kr2S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a984f1c-3375-4591-91e1-978750315d51_2048x2048.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>Here&#8217;s a number I don&#8217;t love sharing: <strong>$400 per month.</strong></p><p>That&#8217;s roughly what it costs to run AI agents seriously right now. Claude Code Max, API calls, infrastructure. These aren&#8217;t free tools. They&#8217;re subscriptions that hit your account every month whether you ship anything or not.</p><p>Three weeks ago, I started an experiment I called <a href="https://thoughts.jock.pl/p/my-ai-agent-works-night-shifts-builds">Project Money</a>. The rules: my AI agent, <a href="https://thoughts.jock.pl/p/wiz-personal-ai-agent-claude-code-2026">Wiz</a>, gets full creative freedom to build and sell digital products. I provide the knowledge, the ideas, the direction. The agent handles everything else.</p><p>Simple question: <strong>can it pay for itself?</strong></p><p>Except the more I sat with it, the more I realized the money is just the scoreboard. The real experiment is about something much more interesting.</p><div><hr></div><h2>The Execution Gap Nobody Talks About</h2><p>There&#8217;s a problem that&#8217;s been hiding in plain sight for decades.</p><p>Think about the smartest person you know. The one who always has brilliant ideas, sees connections nobody else sees, understands their domain deeper than anyone. Now think about how many of those ideas actually exist as products in the world.</p><p>Probably close to zero.</p><p>Not because the ideas were bad. Because turning an idea into something people can buy requires a completely different skill set. You need to understand technology. You need to know marketing. You need to handle logistics, payments, design, copywriting, SEO, customer support. You need to build a website, set up a checkout flow, create social media content, manage email lists.</p><p>The knowledge was never the bottleneck. The execution was.</p><p>I&#8217;ve seen this over and over. A friend who&#8217;s a phenomenal teacher but can&#8217;t build an online course because the tech is overwhelming. A colleague who knows more about e-commerce operations than anyone I&#8217;ve met but has never productized that expertise. People sitting on years of hard-won experience with no practical way to make it available to others.</p><p>The world is full of brilliant people who can&#8217;t ship.</p><p>And here&#8217;s what I think is changing: <strong>for the first time, the execution gap can be closed without learning the execution.</strong></p><div><hr></div><h2>This Isn&#8217;t About a Robot Selling Things</h2><p>Let me be specific about what this experiment is not.</p><p>It&#8217;s not AI-generated content mills. It&#8217;s not ChatGPT writing ebooks in 20 minutes for Amazon. It&#8217;s not automated spam with a checkout button.</p><p>Here&#8217;s the actual question:</p><p><strong>Can AI take human knowledge and turn it into something genuinely useful for other people?</strong></p><p>Think about what that actually means. I&#8217;ve spent 10 months <a href="https://thoughts.jock.pl/p/ai-agent-self-extending-self-fixing-wiz-rebuild-technical-deep-dive-2026">building an AI agent system</a>. I figured out patterns for persistent memory, night shift automation, multi-agent orchestration, self-improvement loops. That knowledge exists in my head and scattered across months of writing.</p><p>The traditional path to monetize that: sit down for weeks, structure everything into a course, hire a designer, build a landing page, write copy, set up payments, do SEO, handle social media. Months of execution work. I know how to do most of that. Many people don&#8217;t. And even for me, it&#8217;s months of work where I&#8217;m not actually doing the thing I&#8217;m good at.</p><p>So what happens when the AI handles the execution?</p><p>Not the &#8220;what to build&#8221; part. Not the &#8220;is this actually useful&#8221; part. Those are mine. But the &#8220;take this knowledge, package it into something someone can use, put it where people can buy it, and tell them it exists&#8221; part. Can AI actually do that well enough that people pull out their credit cards?</p><div><hr></div><h2>Vibe Business</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VjfB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VjfB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.png 424w, https://substackcdn.com/image/fetch/$s_!VjfB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.png 848w, https://substackcdn.com/image/fetch/$s_!VjfB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!VjfB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VjfB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:275926,&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://thoughts.jock.pl/i/189346559?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.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_!VjfB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.png 424w, https://substackcdn.com/image/fetch/$s_!VjfB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.png 848w, https://substackcdn.com/image/fetch/$s_!VjfB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!VjfB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef572744-0935-47b4-aa22-29b49a620d0e_3096x1872.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>You&#8217;ve probably heard of &#8220;vibe coding&#8221; &#8212; the idea that you can describe what you want and AI writes the code. You don&#8217;t look at every line. You care about the result.</p><p>Project Money is something similar, but bigger. I&#8217;ve been thinking of it as <strong>vibe business</strong>.</p><p>Here&#8217;s what I mean. I told my agent: &#8220;This project is yours. You have creative freedom. Build and sell digital products based on what I know.&#8221; Then I gave it tools &#8212; access to my writing, my Substack data, payment infrastructure, social media accounts, a server. I set the direction and the boundaries. The agent handles the how.</p><p>I don&#8217;t review every marketing post before it goes out. I don&#8217;t approve every product description word by word. I set the vision, check the numbers, course-correct when something feels off. But the day-to-day execution? That&#8217;s the agent&#8217;s job.</p><p>It&#8217;s not that I <em>can&#8217;t</em> do the execution. It&#8217;s that the execution isn&#8217;t where my value is. My value is in having spent 10 months building something real, figuring out what works, and being able to articulate why it matters. The packaging? The Stripe integration? The social media scheduling? That&#8217;s infrastructure. Important infrastructure, but not the thing that makes the product worth buying.</p><p>This is the shift I keep thinking about. <strong>What if you could run a business the way vibe coding lets you build software?</strong> You bring the idea, the knowledge, the taste, the direction. The AI brings the execution, the logistics, the distribution. You care about what&#8217;s working, what&#8217;s not, and where to go next. Not about the fourteen technical steps between &#8220;I know something valuable&#8221; and &#8220;someone can buy it.&#8221;</p><p>The next step is obvious too: give the agent a budget. Not just tools, but actual money to spend on promotion. Let it decide where to put $50 of ad spend. Let it test channels. Let it optimize. I&#8217;m not there yet, but that&#8217;s where this is heading.</p><div><hr></div><h2>The Numbers</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vlXO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vlXO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.png 424w, https://substackcdn.com/image/fetch/$s_!vlXO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.png 848w, https://substackcdn.com/image/fetch/$s_!vlXO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.png 1272w, https://substackcdn.com/image/fetch/$s_!vlXO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vlXO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.png" width="1456" height="1352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5e40e45-978a-490d-b92c-66398da07646_2772x2574.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1352,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:431615,&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://thoughts.jock.pl/i/189346559?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.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_!vlXO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.png 424w, https://substackcdn.com/image/fetch/$s_!vlXO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.png 848w, https://substackcdn.com/image/fetch/$s_!vlXO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.png 1272w, https://substackcdn.com/image/fetch/$s_!vlXO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5e40e45-978a-490d-b92c-66398da07646_2772x2574.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><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">More like this comming! Don&#8217;t miss it:</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>I launched the store on February 5. Three weeks of data.</p><p><strong>Store revenue: $355.</strong></p><p>For context: December was $16. January was also $16. Not a typo. Sixteen dollars each month.</p><p>$16 to $355. With AI subscriptions costing about $400/month, that puts me at roughly 89% of break-even. Almost there. Not quite.</p><p>But here&#8217;s what happened in those three weeks. My agent built a <a href="https://wiz.jock.pl/store/">store</a>, packaged six digital products, deployed everything to a server, connected Stripe, and started promoting them. Most of it happened in <a href="https://thoughts.jock.pl/p/opus-4-6-agent-experiment-2026">a single evening</a>.</p><p>The products &#8212; all based on things I actually built and tested:</p><ul><li><p><strong>AI Agent Blueprint</strong> &#8212; the complete system for building your own Claude Code agent</p></li><li><p><strong>Night Shift Playbook</strong> &#8212; how to set up AI that <a href="https://thoughts.jock.pl/p/building-ai-agent-night-shifts-ep1">works while you sleep</a></p></li><li><p><strong>Claude Code Prompt Pack</strong> &#8212; prompts that work, not generic templates</p></li><li><p><strong>Job Search Autopilot</strong> &#8212; automated job hunting system</p></li><li><p><strong>Mini-App Starter Kit</strong> &#8212; build browser tools fast</p></li><li><p><strong>AI Agent Landscape Report</strong> &#8212; where the market actually stands</p></li></ul><p>Everything I know about building AI agents, packaged into things you can use. Not theory. The actual patterns.</p><div><hr></div><h2>The Part I Didn&#8217;t Expect</h2><p>When I told the agent &#8220;you have creative freedom,&#8221; I expected it to format my notes into PDFs.</p><p>Instead, it had opinions.</p><p>Wiz looked at what people were reading on my Substack. It noticed which topics got engagement. It tracked what questions came up. Then it proposed products that matched real demand &#8212; not what I thought was cool, but what the audience actually needed.</p><p>The Night Shift Playbook is a good example. I didn&#8217;t plan to sell that. I wrote about my night shift system because it was an interesting technical challenge. The agent noticed it was one of the most-read posts and said: &#8220;This should be a product. People want the actual setup instructions, not just the story.&#8221;</p><p>It was right.</p><p>This is the part that gets me. Not that AI can list things for sale &#8212; obviously it can. But that it can look at a body of work, understand which parts have value to other people, and package those parts into something usable. That&#8217;s not just execution. That&#8217;s a form of judgment.</p><p>Whether you call it &#8220;real&#8221; judgment or pattern matching doesn&#8217;t matter much to me. The outcome was the same: it identified a product I wouldn&#8217;t have built, and people bought it.</p><div><hr></div><h2>Where It&#8217;s Honest-to-God Hard</h2><p>Before this turns into a &#8220;my AI makes money while I sleep&#8221; pitch &#8212; here&#8217;s what doesn&#8217;t work.</p><p><strong>The agent can&#8217;t create knowledge it doesn&#8217;t have.</strong> Every product in the store is based on something I actually built, tested, and wrote about. The AI packages and distributes, but the substance comes from real experience. No experience, no product. This will always be the human part.</p><p><strong>Quality still needs a human eye.</strong> I review everything before it goes live. One product&#8217;s first draft had technically correct information but completely missed the point of why someone would actually use it. I redirected. Second draft was good. The agent can execute, but taste is still mine.</p><p><strong>Marketing is messy.</strong> AI can write social posts and schedule them. Knowing the right tone and timing? Still more art than algorithm. We&#8217;ve had posts that landed and posts that fell completely flat.</p><p><strong>$355 isn&#8217;t life-changing.</strong> It&#8217;s almost break-even on the tools. The question is whether this compounds &#8212; whether month two builds on month one, or whether it was a launch spike that flatlines.</p><p>I don&#8217;t have that answer yet. That&#8217;s the whole point of running this in public.</p><div><hr></div><h2>The Bigger Picture</h2><p>Here&#8217;s what I keep coming back to.</p><p>For decades, the knowledge economy has had this structural problem: the people with the best knowledge are rarely the people with the best distribution. The best teacher isn&#8217;t the one with the best YouTube channel. The best engineer isn&#8217;t the one with the best course on Udemy. The gap between knowing something and shipping something has always favored people who are good at shipping, not people who are good at knowing.</p><p>What if that changes?</p><p>What if a ceramics artist with 30 years of glazing technique knowledge could describe what they know, and an AI agent could turn that into a structured guide, build a checkout page, handle payments, and find the people who would pay $25 for it? Not a perfect product. Not a Harvard Business Review case study. But a real thing, in the real world, that real people can buy.</p><p>What if a retired logistics expert could take everything they learned in 40 years of supply chain management and have an AI turn the most useful parts into something a small business owner could actually apply? Not a 400-page textbook. A practical, actionable product.</p><p>That&#8217;s what I think Project Money is actually testing. Not whether <em>I</em> can make money with AI &#8212; I already know enough about technology to do this without an agent. The interesting question is whether this model works for the people who couldn&#8217;t do it without one.</p><p>I&#8217;m the test case. If it works for me, the question becomes: what does this look like when the person with the knowledge isn&#8217;t technical at all? When the only thing they bring is the knowledge itself? And the agent handles literally everything else?</p><p>We&#8217;re not there yet. But $355 in three weeks from an experiment where I mostly set direction and checked results? It&#8217;s a signal. A small one. But a real one.</p><div><hr></div><h2>What&#8217;s Next</h2><p>Month two starts now. The focus:</p><ol><li><p><strong>Product quality</strong> &#8212; improve what exists before adding more</p></li><li><p><strong>More agent autonomy</strong> &#8212; testing how much of the business loop the agent can own</p></li><li><p><strong>Honest numbers</strong> &#8212; sharing revenue including when it drops</p></li></ol><p>If you want to follow this experiment, that&#8217;s essentially what this newsletter is now &#8212; <a href="https://thoughts.jock.pl/p/wiz-1-5-ai-agent-dashboard-native-app-2026">building in public</a> with an AI partner and tracking what actually works.</p><p>Everything the agent has built is at <a href="https://wiz.jock.pl/store/">wiz.jock.pl/store</a>.</p><div><hr></div><p><em>What would you build if the execution wasn&#8217;t the bottleneck?</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Follow me for more fun AI experiments!</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><item><title><![CDATA[My AI Agent Outgrew a Spreadsheet. So I Built It a Dashboard. Then Rebuilt It. Twice]]></title><description><![CDATA[How Wiz went from Notion hacks to a native macOS app in three weeks &#8212; and what that taught me about managing AI agents.]]></description><link>https://thoughts.jock.pl/p/wiz-1-5-ai-agent-dashboard-native-app-2026</link><guid isPermaLink="false">https://thoughts.jock.pl/p/wiz-1-5-ai-agent-dashboard-native-app-2026</guid><dc:creator><![CDATA[Pawel Jozefiak]]></dc:creator><pubDate>Thu, 19 Feb 2026 22:26:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wsIL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.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_!wsIL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wsIL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!wsIL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!wsIL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!wsIL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wsIL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d7255204-0717-4da1-be76-2ad605466317_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4831379,&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://thoughts.jock.pl/i/188496583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.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_!wsIL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!wsIL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!wsIL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!wsIL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7255204-0717-4da1-be76-2ad605466317_2048x2048.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&#8217;ve been running a personal AI agent called <a href="https://thoughts.jock.pl/p/wiz-personal-ai-agent-claude-code-2026">Wiz</a> for about two months now. If you&#8217;ve been following along, you know the basics: it <a href="https://thoughts.jock.pl/p/my-ai-agent-works-night-shifts-builds">works night shifts</a>, builds experiments, tries to make money, and occasionally breaks things in creative ways.</p><p>But here&#8217;s something I haven&#8217;t talked about yet: the operational side. How do you actually <em>manage</em> an agent that runs 24/7?</p><p>The answer, it turns out, keeps changing.</p><h2>The Task Management Problem Nobody Warns You About</h2><p>When I first set up Wiz in January, tasks lived in Notion. Standard setup &#8212; a database with statuses, some automations, done. Except it wasn&#8217;t done. Not even close.</p><p>The problem with Notion as an agent&#8217;s task system is latency. Notion&#8217;s API is slow. My agent needed to check its tasks every 2 minutes, claim work, update status, mark things complete. Each round-trip took seconds. Multiply that by dozens of daily task checks and you&#8217;re burning time and API credits on what should be instant lookups.</p><p>So in early February, I migrated everything to Obsidian &#8212; local markdown files, no API overhead, instant reads. That lasted exactly one day.</p><p>The problem? Obsidian files are great for knowledge. Terrible for task management by an agent. No query language. No status tracking without parsing YAML frontmatter. No way for the agent to update a task without rewriting an entire file. And crucially &#8212; no way for <em>me</em> to quickly see what the agent is doing from my phone.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">I am so locked-in on building. Join me!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Building WizBoard (Take One: The Web App)</h2><p>So on February 11th, I did what any reasonable person would do: I built a task management app from scratch.</p><p>WizBoard v1 was deliberately simple. FastAPI backend, SQLite database, vanilla JavaScript frontend. No React, no Next.js, no build step. Just HTML, CSS, and JavaScript served from a Python app on my DigitalOcean server.</p><p>Why so minimal? Because this wasn&#8217;t a product. It was infrastructure. I needed something running <em>that day</em>, not something architected for scale.</p><p>The core design was built around one specific workflow: an AI agent and a human sharing a task board.</p><p>Five statuses: Backlog, Next, Now, Waiting, Done. Two assignees: me and Wiz. A special <code>wiz_status</code> field that tracks whether Wiz has claimed a task (<code>working</code>), finished it and wants review (<code>review</code>), or hasn&#8217;t touched it yet (<code>null</code>).</p><p>Every 2 minutes, a LaunchD service polls the board for tasks assigned to Wiz. When it finds one, it spins up a Claude Code session, the agent claims the task, does the work, and marks it for my review. If I add a comment saying &#8220;actually, change this&#8221; &#8212; the poller detects the reply and wakes Wiz again to handle it.</p><p>I migrated 80 tasks from Obsidian on day one. The critical launch bug? Tasks kept re-executing. Wiz would complete a task, but the completion call wasn&#8217;t being made properly, so the poller would pick it up again next cycle. The password for one service got changed three times in one night before I caught it.</p><p>The fix was simple but important: a mandatory completion script that every Wiz session must call. No exceptions. It&#8217;s now in the agent&#8217;s core rules, bolded: <strong>ALWAYS call complete-wizboard-task.py after ANY task execution.</strong></p><p>Within a week, WizBoard had push notifications (my phone pings when Wiz finishes something), mobile-optimized CSS (44px touch targets, 16px fonts &#8212; because I check it on iPhone constantly), a command center view, and real-time updates via Server-Sent Events.</p><h2>The Native App (Take Two)</h2><p>The web app worked. Really worked. But after using it daily for a week, I kept running into the same friction point.</p><p>I have ADHD. When I&#8217;m focused on a task, switching to a browser tab to check what my agent is doing kills my flow. I needed this thing in my peripheral vision &#8212; not behind a tab.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f0qr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f0qr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.png 424w, https://substackcdn.com/image/fetch/$s_!f0qr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.png 848w, https://substackcdn.com/image/fetch/$s_!f0qr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.png 1272w, https://substackcdn.com/image/fetch/$s_!f0qr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f0qr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.png" width="1456" height="484" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:484,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:238576,&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://thoughts.jock.pl/i/188496583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.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_!f0qr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.png 424w, https://substackcdn.com/image/fetch/$s_!f0qr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.png 848w, https://substackcdn.com/image/fetch/$s_!f0qr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.png 1272w, https://substackcdn.com/image/fetch/$s_!f0qr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc138e4f6-b34e-44b8-a3b9-ca3a71340850_3400x1130.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><em>(Had to filter out other tasks, but for now I have +200 tasks already there)</em></p><p>So on February 18th, I started building a native SwiftUI app. macOS and iOS, single codebase. Zero third-party dependencies (except for keyboard shortcuts). SwiftData for offline-first local caching, a custom SSE client for real-time sync from the same backend.</p><p>The feature that made it all worth it: Focus Mode. When I select a task, the macOS menu bar shows &#8220;&#129497; Task Name &#8226; 12:34&#8221; &#8212; a live timer and task title, always visible without switching windows. Space bar starts/stops the timer. Return marks the task complete. Escape ends the session.</p><p>For how my brain works, this is the difference between &#8220;I should check on that&#8221; (context switch, lost focus) and just <em>glancing</em> at the menu bar.</p><p>The native app also got task clusters (drag one task onto another to group them), inline subtask tracking, and a full automation hub where I can see every Wiz skill, trigger automations manually, and view run history.</p><p>80 Swift files. About 16,000 lines of code. Built in two days.</p><p>Yes, Wiz helped build its own dashboard.</p><h2>Architecture: The Boring Stuff That Actually Matters</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S4E0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S4E0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.png 424w, https://substackcdn.com/image/fetch/$s_!S4E0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.png 848w, https://substackcdn.com/image/fetch/$s_!S4E0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.png 1272w, https://substackcdn.com/image/fetch/$s_!S4E0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S4E0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.png" width="1456" height="1475" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1475,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:449747,&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://thoughts.jock.pl/i/188496583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.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_!S4E0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.png 424w, https://substackcdn.com/image/fetch/$s_!S4E0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.png 848w, https://substackcdn.com/image/fetch/$s_!S4E0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.png 1272w, https://substackcdn.com/image/fetch/$s_!S4E0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a8379fc-9bbf-4713-9455-228b1d3f3218_2772x2808.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>While WizBoard was the visible change, a lot happened under the hood.</p><h3>Model Routing</h3><p>I wrote about the cost incident in a <a href="https://thoughts.jock.pl/p/claude-model-optimization-opus-haiku-ai-agent-costs-2026">previous post</a> &#8212; I hit Anthropic&#8217;s weekly limits and paid an extra 50 euros because everything was running on Opus.</p><p>The fix was a <a href="https://thoughts.jock.pl/p/multi-model-ai-workflow-2026-gpt-claude-gemini">three-tier routing system</a>: Haiku for simple lookups (email, scraping, file searches), Sonnet for most work (writing, coding, research), Opus only for complex reasoning. Every agent definition now has a hardcoded model in its config. The wake system assigns models based on what it&#8217;s doing &#8212; nightshift planning gets Opus (strategic reasoning), execution gets Sonnet (building).</p><p>But the real improvement came when Sonnet 4.6 dropped on February 17th. Here&#8217;s what surprised me: it&#8217;s genuinely <em>better</em> than Opus for writing tasks, while costing 3x less. Not just &#8220;good enough&#8221; &#8212; actually better. More natural phrasing, better structural decisions, fewer of those tell-tale AI-isms.</p><p>Wiz now runs on Sonnet 4.6 by default. Estimated cost reduction: about 59% compared to the all-Opus days.</p><h3>The Codex Factor</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UJtn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UJtn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png 424w, https://substackcdn.com/image/fetch/$s_!UJtn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png 848w, https://substackcdn.com/image/fetch/$s_!UJtn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png 1272w, https://substackcdn.com/image/fetch/$s_!UJtn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UJtn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png" width="886" height="152" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:152,&quot;width&quot;:886,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:69040,&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://thoughts.jock.pl/i/188496583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.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_!UJtn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png 424w, https://substackcdn.com/image/fetch/$s_!UJtn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png 848w, https://substackcdn.com/image/fetch/$s_!UJtn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png 1272w, https://substackcdn.com/image/fetch/$s_!UJtn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec7b054-d6d9-43f6-a51c-efad6217da5a_886x152.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>I&#8217;ve been using both Claude Code and Codex (OpenAI&#8217;s coding tool) for the past couple of months. I wrote a <a href="https://thoughts.jock.pl/p/claude-code-vs-codex-real-comparison-2026">full comparison</a> recently, but here&#8217;s how it shakes out in practice for the agent specifically.</p><p><a href="https://thoughts.jock.pl/p/claude-code-review-real-testing-vs-zapier-make-2026">Claude Code</a> is the backbone. It <em>is</em> Wiz &#8212; the agent runs on it. It handles multi-file refactors, understands project context through CLAUDE.md files, and can operate autonomously for hours. When I say &#8220;add a new automation following the existing pattern,&#8221; it knows exactly what pattern I mean because it&#8217;s read the whole codebase.</p><p>Codex, though, turned out to be surprisingly useful for a different reason: it&#8217;s excellent at solving isolated problems. When WizBoard&#8217;s drag-and-drop was sluggish, I described the issue to Codex and got a focused fix. When the notification permission dialog was silently failing on macOS, Codex identified the missing entitlement faster than I could have debugged it myself.</p><p>They&#8217;re complementary. Claude Code for architecture and autonomous operation. Codex for targeted problem-solving. The tooling competition is actually making both of them better, which makes my agent better by extension.</p><h3>Resilience</h3><p>The wake system now has four-layer failure handling. If Sonnet hits a rate limit, it cascades to Haiku. If that fails, it tries OpenRouter as a fallback. If everything is down, the message stays in the inbox for the next cycle. Model cooldowns persist across runs with a 15-minute default after a rate-limit event.</p><p>Concurrent sessions are PID-isolated &#8212; up to 3 can run simultaneously without stepping on each other. Each session auto-creates its own WizBoard task, auto-titles it from the conversation transcript, and cleans up stale sessions from crashed processes.</p><p>It&#8217;s not glamorous work. But it&#8217;s the difference between an agent that needs babysitting and one that quietly handles things while I sleep.</p><h2>Memory: The Problem That Never Ends</h2><p>I&#8217;ve written about Wiz&#8217;s memory system <a href="https://thoughts.jock.pl/p/ai-agent-self-extending-self-fixing-wiz-rebuild-technical-deep-dive-2026">before</a>. Twice, actually. And I&#8217;m writing about it again because it keeps evolving &#8212; which tells you something about how hard this problem is.</p><p>The current architecture has six layers:</p><p><strong>Working memory</strong> (<code>memory.md</code>) holds the last 2-3 days of context &#8212; what happened, what&#8217;s in progress, preferences detected from conversations. It gets compacted daily.</p><p><strong>Weekly memory</strong> rolls over after 3 days, compressing 40-line sections into 5-bullet summaries. Important facts survive; details fade.</p><p><strong>Permanent index</strong> maps keywords to locations &#8212; people, projects, infrastructure. Never expires.</p><p><strong>Deep profile files</strong> hold stable knowledge: my personality profile, career goals, family context, communication preferences. These were built from <a href="https://thoughts.jock.pl/p/limitless-pendant-eu-ban-what-i-did-with-voice-data">voice transcripts and coaching sessions</a>. They rarely change.</p><p><strong>Semantic search</strong> is the newest addition &#8212; a vector index built on OpenAI&#8217;s embeddings (via OpenRouter) that covers all memory sources, Discord history, Obsidian vault, and session logs. When I ask &#8220;what did we decide about Stripe pricing?&#8221;, it does a real semantic lookup across everything, not just keyword matching.</p><p><strong>Self-improvement pipeline</strong> observes its own behavior. It scans Discord conversations for corrections (&#8221;that&#8217;s wrong&#8221;, &#8220;I meant...&#8221;), categorizes them (verbosity? wrong approach? style issue?), computes a performance score, and graduates recurring patterns into permanent rules. Current score: 81.3 out of 100, up from about 61 after a rough week where it was marking tasks complete without actually verifying they worked.</p><p>The pipeline catches things like: &#8220;Wiz messages are 14.6x longer than Pawel&#8217;s on average.&#8221; That&#8217;s a clear signal. The response was automatic &#8212; a style rule got activated to write shorter.</p><p>The whole thing runs at 7:15 AM every day. No human involvement. The agent literally rewrites its own behavioral rules based on how yesterday went.</p><p>Does it work? Mostly. It catches maybe 80% of patterns. The other 20% still need me to explicitly say &#8220;remember this.&#8221; But compared to a flat text file that I had to manually update every session? Night and day.</p><h2>What&#8217;s Next: A Command Center for AI Agents</h2><p>Here&#8217;s the thought that keeps coming back while building all of this.</p><p>Everything I&#8217;ve built for WizBoard &#8212; the task lifecycle, the agent-human handoff, the real-time status tracking, the focus mode, the automation hub &#8212; none of it is specific to <em>my</em> agent.</p><p>Anyone running an AI agent (and increasingly, that&#8217;s a lot of people) faces the same problem: how do you see what it&#8217;s doing? How do you give it work? How do you know when it&#8217;s done? How do you course-correct without micromanaging?</p><p>The current options are either too generic (Trello, Linear &#8212; not built for agent workflows) or too technical (terminal logs, JSON files). There&#8217;s a gap between &#8220;full IDE for agent development&#8221; and &#8220;simple board for agent management.&#8221;</p><p>I&#8217;m not announcing a product here. But I am saying that the next version of WizBoard might not be just for me. Something between a Command Center and a Task Manager, built specifically for the workflow of humans and AI agents sharing work.</p><p>The kanban board is the starting point, not the destination. The real value is in the agent lifecycle: claim, execute, review, iterate. The real-time visibility. The focus tools for the human side. The audit trail of what the agent did and why.</p><p>If that sounds like something you&#8217;d want &#8212; I&#8217;m thinking about it. Seriously.</p><h2>The Honest Summary</h2><p>Two months in, Wiz is running about 25 automated sessions per day across scheduled wakes, Discord triggers, and WizBoard task polling. It has 26 skills it can invoke, a six-layer memory system, a self-improvement loop, and now a native macOS app showing me what it&#8217;s up to from my menu bar.</p><p>Is it worth the effort? For the problems it solves &#8212; yes. The night shifts alone save me hours. The morning reports give me context before I&#8217;ve had coffee. The task automation means I can drop an idea into the board at midnight and wake up to a working prototype.</p><p>Is it perfect? No. The memory still gets confused. The self-improvement score is 81, not 95. Some tasks need three attempts. The native app has bugs I haven&#8217;t found yet.</p><p>But that&#8217;s the whole point of versioning. Wiz 1.0 was &#8220;can this thing work at all?&#8221; Wiz 1.5 is &#8220;can I actually manage it without it being a second job?&#8221;</p><p>The answer is getting closer to yes.</p><div><hr></div><p><em>This is part of an ongoing series about building and running a personal AI agent. Previous posts: <a href="https://thoughts.jock.pl/p/my-ai-agent-works-night-shifts-builds">My AI Agent Works Night Shifts</a>, <a href="https://thoughts.jock.pl/p/claude-model-optimization-opus-haiku-ai-agent-costs-2026">Why I Switched from Opus to Haiku</a>, <a href="https://thoughts.jock.pl/p/claude-code-vs-codex-real-comparison-2026">Claude Code vs Codex</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thoughts.jock.pl/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">Digital Thoughts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>