<?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[As The Geek Learns]]></title><description><![CDATA[Tools and training for IT professionals. PowerCLI courses, productivity apps, and 25 years of lessons learned.]]></description><link>https://astgl.com</link><image><url>https://substackcdn.com/image/fetch/$s_!hfS3!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7b53b6e-8c71-473a-be58-79403cf36d59_256x256.png</url><title>As The Geek Learns</title><link>https://astgl.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 28 Apr 2026 19:29:36 GMT</lastBuildDate><atom:link href="https://astgl.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[James Cruce]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[astgl@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[astgl@substack.com]]></itunes:email><itunes:name><![CDATA[James Cruce]]></itunes:name></itunes:owner><itunes:author><![CDATA[James Cruce]]></itunes:author><googleplay:owner><![CDATA[astgl@substack.com]]></googleplay:owner><googleplay:email><![CDATA[astgl@substack.com]]></googleplay:email><googleplay:author><![CDATA[James Cruce]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Nightshift: I Went to Sleep and My Mac Ran 118 Experiments]]></title><description><![CDATA[What I learned about disciplined iteration from Karpathy's autoresearch loop running overnight on an M3 Ultra.]]></description><link>https://astgl.com/p/nightshift-mac-studio-overnight-autoresearch</link><guid isPermaLink="false">https://astgl.com/p/nightshift-mac-studio-overnight-autoresearch</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Wed, 22 Apr 2026 19:00:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QI8z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I went to sleep. My Mac ran 118 experiments. When I woke up, a small GPT had trained itself from `val_bpb` 1.563 down to 1.289, beating every documented Apple Silicon overnight run in the project's public README. I wrote no code overnight. I just left a Claude Code session running against a markdown file named `program.md`, and the agent did the rest.</p><p>This is the first morning I've ever genuinely understood why people talk about AI agents with something other than skepticism.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QI8z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QI8z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!QI8z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!QI8z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!QI8z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QI8z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36781,&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://astgl.com/i/195033133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.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_!QI8z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!QI8z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!QI8z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!QI8z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1cde9-fdb7-42ac-98a9-ec7c21d1f914_1200x675.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>What autoresearch is</h2><p>The idea, which is Karpathy's not mine, goes like this. You give an AI agent a real-but-small LLM training setup. One Python file (`train.py`) contains the model, optimizer, and training loop. A second file (`prepare.py`) contains the data pipeline and evaluation, and the agent isn't allowed to touch it. A third file (`program.md`) is a plain markdown document telling the agent what the experiment rules are.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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>The agent edits `train.py`, runs a training experiment with a fixed 5-minute wall-clock budget, checks `val_bpb` (validation bits per byte, a loss metric where lower is better), and either keeps the change with a git commit or does `git reset --hard` and tries something else. Then it does it again. And again. Indefinitely, until you stop it.</p><p><a href="https://github.com/karpathy/autoresearch">Karpathy's original repo</a> is NVIDIA and CUDA only. A developer named <a href="https://github.com/trevin-creator/autoresearch-mlx">trevin-creator</a> ported it to Apple Silicon using MLX, no PyTorch required. It runs natively on the M-series chips, eating unified memory instead of GPU VRAM. Which is why I could run it on a Mac Studio sitting on my desk.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H3hB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H3hB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.png 424w, https://substackcdn.com/image/fetch/$s_!H3hB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.png 848w, https://substackcdn.com/image/fetch/$s_!H3hB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.png 1272w, https://substackcdn.com/image/fetch/$s_!H3hB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H3hB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.png" width="1028" height="321" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:321,&quot;width&quot;:1028,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32192,&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://astgl.com/i/195033133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.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_!H3hB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.png 424w, https://substackcdn.com/image/fetch/$s_!H3hB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.png 848w, https://substackcdn.com/image/fetch/$s_!H3hB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.png 1272w, https://substackcdn.com/image/fetch/$s_!H3hB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe91889-82f9-4f2e-88af-f3671b5dbb10_1028x321.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><h2>Setup and the surprise baseline</h2><p>Install took about three minutes. `uv sync` pulled MLX and six other small dependencies. `uv run prepare.py` downloaded eleven training shards from the public HuggingFace dataset and trained a BPE tokenizer in 41 seconds.</p><p>Then I did one manual run, as the setup instructions said to: a single 5-minute training experiment to establish a hardware baseline, no modifications.</p><p>The first surprise: `val_bpb 1.563`. The public README documents a manual walk on older Apple Silicon that bottomed out at `1.807` after four experiments. My first run, before the AI agent had done anything, was already 13% better than that published best. I didn't tune anything. I pulled the repo and ran it.</p><p>The reason is in how the loop is constructed. The training budget is fixed at 5 minutes of wall clock. The M3 Ultra throughput is high enough that it fits 555 optimizer steps into that window, while the older hardware fits fewer. Same code. Different step count. Different result.</p><p><strong>The hardware is a parameter, not a constant.</strong></p><blockquote><p>Specs for replication</p><p>- Hardware: Mac Studio M3 Ultra, 128 GB unified memory</p><p>- OS and runtime: macOS 15, Python 3.12, `uv` 0.10</p><p>- Framework: MLX 0.31 with Metal backend (no PyTorch, no CUDA)</p><p>- Agent runner: Claude Code (Anthropic)</p><p>- Fork used: `github.com/trevin-creator/autoresearch-mlx`</p><p>- Per-experiment budget: 5 minutes training, ~90 seconds compile and eval overhead</p><p>- Peak unified memory during training: 21.2 GB</p></blockquote><h2>Launching the agent overnight</h2><p>Here's where you have to decide. Karpathy's default advice is to "disable all permissions" and let the agent go. That's the fastest path and it works. But it's also a permission-free Claude Code session running unattended on your Mac for eight hours, with the ability to execute arbitrary shell commands. If the agent hallucinates a destructive action at 3 AM, you won't be there to interrupt it.</p><p>I went with a scoped allowlist instead. A `.claude/settings.local.json` file listing exactly the commands the loop actually needs: `uv run train.py`, `git add train.py`, `git commit`, `git reset --hard`, `grep`, `tail`, a few others. Everything else prompts. The agent can't `rm`, can't `git push`, can't install packages, can't touch any file outside the repo.</p><p>Then I pointed a fresh Claude Code session at `program.md`, pasted "start the experimentation loop, don't stop," and went to bed.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share As The Geek Learns&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://astgl.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share As The Geek Learns</span></a></p><h2>The morning, by the numbers</h2><p>The morning log:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xMX3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xMX3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.png 424w, https://substackcdn.com/image/fetch/$s_!xMX3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.png 848w, https://substackcdn.com/image/fetch/$s_!xMX3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.png 1272w, https://substackcdn.com/image/fetch/$s_!xMX3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xMX3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.png" width="1223" height="684" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:684,&quot;width&quot;:1223,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79702,&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://astgl.com/i/195033133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.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_!xMX3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.png 424w, https://substackcdn.com/image/fetch/$s_!xMX3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.png 848w, https://substackcdn.com/image/fetch/$s_!xMX3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.png 1272w, https://substackcdn.com/image/fetch/$s_!xMX3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936faec0-1a88-4c04-a869-bb14a3f63dc7_1223x684.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>Comparison to the three overnight runs documented in the public README:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-4t_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-4t_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.png 424w, https://substackcdn.com/image/fetch/$s_!-4t_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.png 848w, https://substackcdn.com/image/fetch/$s_!-4t_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.png 1272w, https://substackcdn.com/image/fetch/$s_!-4t_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-4t_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.png" width="1223" height="684" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:684,&quot;width&quot;:1223,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60114,&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://astgl.com/i/195033133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.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_!-4t_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.png 424w, https://substackcdn.com/image/fetch/$s_!-4t_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.png 848w, https://substackcdn.com/image/fetch/$s_!-4t_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.png 1272w, https://substackcdn.com/image/fetch/$s_!-4t_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c045a6a-bdf4-4d72-b2c8-28011405ed12_1223x684.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>Final `val_bpb` of 1.289 lands below the best documented Apple Silicon overnight result. New territory for the public log.</p><h2>What the agent actually did</h2><p>Five phases overnight. Each tells you something.</p><p><strong>Phase one: find the big axis.</strong> Four experiments in, the agent had halved the batch size three times (1.56, 1.40, 1.39, 1.38), then tried a fourth halving that bounced back to 1.44. The annotation on the discard: <strong>"gradient noise."</strong> Correct diagnosis. Below a threshold, batch becomes too small for the optimizer to converge inside 5 minutes.</p><p><strong>Phase two: schedule tuning, six keeps in a row.</strong> The learning-rate schedule was undertuned. The agent walked `WARMDOWN_RATIO` from 0.7 to 1.0, then `WARMUP_RATIO` from 0.02 to 0.2. Every step dropped `val_bpb`. Floor went from 1.38 to 1.34. Biggest easy win of the night, and it was entirely in the schedule.</p><p><strong>Phase three: the moment that mattered most.</strong> After schedule tuning, the agent retried `TOTAL_BATCH_SIZE = 2^14`. The same configuration it had rejected in phase one. This time it won.</p><p>The agent had discovered the thing most humans miss in hyperparameter tuning: the optimal value of one knob depends on the values of all the other knobs. You don't find N independent settings; you find a consistent N-tuple. The only way to find it is to retry earlier-rejected values after each structural change. I've watched human researchers lock in early wins and never revisit them. The agent didn't. It revisited `EMBEDDING_LR` three times over the night, landing at 1.0, then 1.5, then 1.75 across different phases. Each retry, a small win.</p><p><strong>Phase four: two structural wins, one line each.</strong> `has_ve()` went from alternating-layers-get-Value-Embeddings to all-layers-get-Value-Embeddings, one `return True` replacing a modular-arithmetic expression. `MLP.__call__()` swapped `ReLU&#178;` for `SiLU`, one function call for another. Both character-count-sized changes. Each dropped `val_bpb` by about 0.01.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xKMK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xKMK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!xKMK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!xKMK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!xKMK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xKMK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50371,&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://astgl.com/i/195033133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.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_!xKMK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!xKMK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!xKMK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!xKMK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc0ba62d-fbb8-4dbe-bb72-3b13fa46563b_1200x675.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>Phase five: the 37-experiment grind.</strong> The agent spent 37 consecutive experiments without a single keep, testing every nearby hyperparameter against the current local minimum. Most humans would have quit and tried a wild leap. The agent didn't. It finished the neighborhood, then found the next structural win. Disciplined exhaustion.</p><p>And two catastrophes, both correctly reverted. Tied embeddings came back at `val_bpb 4.29`, three times worse than anything else. The agent annotated it <strong>"LR mismatch destroys."</strong> Tied embeddings is actually a good idea in general, but incompatible with the differential layer-wise learning rates the architecture uses. The agent reverted in seconds. On another experiment, removing QK-norm after RoPE spiked `val_bpb` to 1.67. Annotation: <strong>"massive regression."</strong> Reverted. A human would have spent an hour trying to salvage tied embeddings. The agent spent ten seconds on the revert. <em>The revert discipline is the whole game.</em></p><h2>What it taught me</h2><p>Two things crystallized overnight.</p><p><strong>Disciplined exhaustion beats creative leaps.</strong> Humans get bored. After a few hours on the same hyperparameter axis, we start reaching for something new because the exploration stops feeling productive. The agent doesn't have that pressure. It spent 37 experiments without a win because that's what the local search called for, and then it found the next jump. Most humans couldn't do that. Not because we lack the ability, but because we lack the emotional neutrality. The agent's advantage isn't intelligence. It's the absence of boredom, ego, and social pressure. That isn't a 20&#215; productivity gap. It's a categorical one.</p><p><strong>Generation is cheap, evaluation is sacred.</strong> Every one of the agent's wins was a one-line diff. So was every catastrophe. The "research" wasn't in writing the code. The research was in the metric's ability to rank one-line diffs instantly and unambiguously. Karpathy's genius isn't the agent. It's `val_bpb` plus a 5-minute budget plus `git reset --hard`. That design slots the agent into exactly what AI is magnitudes better at (generating variants, executing at volume) and leaves the hard part (what to measure) to the human who built the loop.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tRNX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tRNX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!tRNX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!tRNX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!tRNX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tRNX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72691,&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://astgl.com/i/195033133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.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_!tRNX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!tRNX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!tRNX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!tRNX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda1ee18c-7d61-4e56-b9eb-a78c297894a6_1200x675.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The loop runs on me too</h2><p>Here's the thing I can't stop thinking about. The loop the agent ran overnight is structurally identical to the one I'm building for my Stoic practice on the same machine.</p><p>Morning intention. Five-minute run. Evening review. Keep or discard. Iterate.</p><p>Marcus Aurelius wasn't optimizing `val_bpb`. He was optimizing a harder metric with no closed form. But the shape of the loop is the same. Karpathy designed an overnight research org. Epictetus designed an overnight self. Both are the same thing running in different mediums.</p><p>The 118-experiment loop ran on a machine on my desk. The second loop runs on me.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4HZk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4HZk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!4HZk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!4HZk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!4HZk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4HZk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42498,&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://astgl.com/i/195033133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.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_!4HZk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!4HZk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!4HZk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!4HZk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c5a44e-9ead-40ef-9b6c-2301c95a0a52_1200x675.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 have a Mac Studio and a spare evening, the repo is at `github.com/trevin-creator/autoresearch-mlx`. Clone it, run `prepare.py`, point a Claude Code session at `program.md`, go to sleep. You wake up to a log of experiments and a better model. And if you're anything like me, you also wake up thinking about which of your own loops could run this way.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/nightshift-mac-studio-overnight-autoresearch/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://astgl.com/p/nightshift-mac-studio-overnight-autoresearch/comments"><span>Leave a comment</span></a></p><p></p><h3>A Quick AI Glossary For This Article</h3><p>Because not everyone speaks ML fluently, here&#8217;s a plain-English guide to the terms in this post. I&#8217;m still learning too, so these are &#8220;practitioner&#8221; definitions&#8212;enough to follow what&#8217;s happening, not academic deep-dives.</p><h4>The Big Picture</h4><p><strong>GPT.</strong> A type of language model. Stands for &#8220;Generative Pre-trained Transformer.&#8221; In this article I&#8217;m training a tiny one from scratch, not using the big ones like ChatGPT. Same architecture family, just much smaller.</p><p><strong>Pre-training</strong>. The step where a model learns to predict the next word (or &#8220;token&#8221;) across a huge pile of text. This is what `train.py` is doing. It happens before any of the fine-tuning that turns a base model into a chatbot.</p><p><strong>val_bpb (validation bits per byte).</strong> The score the agent is optimizing. Lower is better. It&#8217;s a measure of how surprised the model is by held-out text it hasn&#8217;t seen during training. A model that predicts well has low surprise. Bits per byte is a way of measuring that surprise that works across different tokenizers, so you can compare different architectures fairly.</p><p><strong>Loss metric. </strong>Any number that tells you how wrong a model is on a given task. Training is the process of making that number go down. `val_bpb` is a loss metric.</p><h4>The Stack</h4><p><strong>Apple Silicon.</strong> Apple&#8217;s own CPU/GPU chip family (M1, M2, M3, M4). Uses <strong>unified memory</strong>, which means the CPU and GPU share the same pool of RAM instead of having separate memory pools. For AI workloads this is a big deal because you don&#8217;t have to copy data between CPU RAM and GPU VRAM.</p><p><strong>MLX</strong>. Apple&#8217;s open-source machine learning framework, built specifically for Apple Silicon. Think of it as Apple&#8217;s answer to PyTorch but native to Metal (Apple&#8217;s GPU API). No PyTorch, no CUDA, no NVIDIA drivers needed.</p><p><strong>PyTorch.</strong> The dominant open-source ML framework. Most research code you see online assumes PyTorch. It runs on NVIDIA GPUs (via CUDA) and, with caveats, on Apple GPUs (via MPS). MLX is an alternative that sidesteps PyTorch entirely.</p><p><strong>CUDA.</strong> NVIDIA&#8217;s API for running general-purpose compute on their GPUs. If you&#8217;ve ever seen a blog post say &#8220;requires a CUDA-capable GPU,&#8221; they mean an NVIDIA card.</p><p><strong>GPU VRAM.</strong> The memory that lives on a GPU card, is separate from your computer&#8217;s main RAM. On Apple Silicon, VRAM and main RAM are the same pool (that&#8217;s the &#8220;unified memory&#8221; thing).</p><h4>Tokenization &amp; Data</h4><p><strong>Tokenizer.</strong> The thing that turns text into numbers the model can actually work with. &#8220;Hello world&#8221; might become `[15496, 995]`. The model only ever sees the numbers.</p><p><strong>BPE (Byte-Pair Encoding).</strong> The most common algorithm for building a tokenizer. It starts with individual characters and iteratively merges the most common pairs until you have a vocabulary of &#8220;tokens&#8221; that balance common words (one token) and rare words (split into pieces).</p><p><strong>Shards. </strong>Chunks of a large dataset, split into files for parallel download and loading. Our setup uses 11 shards from a public text dataset.</p><h4>Training Mechanics</h4><p><strong>Optimizer.</strong> The algorithm that actually updates the model&#8217;s weights during training. AdamW is the one used here. Every &#8220;optimizer step&#8221; is one update.</p><p><strong>Batch size.</strong> How many training examples the model looks at before making one weight update. Bigger batches give smoother gradient estimates but use more memory. Smaller batches fit more weight updates into a fixed time budget.</p><p><strong>Gradient accumulation.</strong> A trick for getting large effective batch sizes on limited hardware. Process smaller mini-batches sequentially, add up their gradients, then apply one update. `TOTAL_BATCH_SIZE / DEVICE_BATCH_SIZE` tells you how many mini-batches per update.</p><p><strong>Gradient noise.</strong> When your batch is so small that the gradient estimate becomes statistically unreliable. The optimizer starts jerking around instead of smoothly descending, and training slows or stalls. The agent correctly identified this as the failure mode at batch 2^12.</p><p><strong>Learning rate (LR).</strong> How big a step the optimizer takes each update. Too high, and training blows up. Too low, and it barely progresses. The sweet spot depends on everything else.</p><p><strong>Learning rate schedule.</strong> How the learning rate changes over time. Typically: warm up from zero to peak, cruise, then warm down to zero. `WARMUP_RATIO = 0.3` means the first 30% of training is the warm-up.</p><p><strong>Differential / layer-wise learning rates.</strong> Using different learning rates for different parts of the model. In the nightshift setup, the embedding layer gets LR 1.75, but the output projection (`lm_head`) gets 0.006 &#8212; a 290&#215; difference. This matters because different parameter types have very different sensitivities.</p><h4>Architecture Pieces</h4><p><strong>Attention (or attention layer)</strong>. The core mechanism that lets a transformer model &#8220;pay attention to&#8221; relevant earlier tokens when predicting the next one. Modern LLMs are mostly stacks of attention layers alternating with MLPs.</p><p><strong>MLP (multi-layer perceptron).</strong> A simple feed-forward neural network with one or two hidden layers. In a transformer, an MLP sits between each pair of attention layers and does the &#8220;thinking&#8221; on the representations attention produced.</p><p><strong>Activation function.</strong> A nonlinear function applied inside a neural net. Without activations, no matter how many layers you stack, the whole thing collapses mathematically into one linear transformation. Examples in this article: `ReLU&#178;` and `SiLU`.</p><p><strong>SiLU (Sigmoid Linear Unit).</strong> `x * sigmoid(x)`. A smooth, differentiable activation function. Also called Swish. Used in many modern models because it plays nicely with optimizers.</p><p><strong>ReLU&#178; (squared ReLU).</strong> `max(x, 0) ** 2`. The piece that nanoGPT-speedrun and some research codebases use. Produces sparse, squared activations. Theoretically expressive but less numerically stable than SiLU for short training runs &#8212; which is why SiLU won overnight.</p><p><strong>Embedding.</strong> The lookup table that converts each input token (a number) into a vector of real numbers. The model learns what each vector should be during training. `wte` = word token embedding.</p><p><strong>Value Embeddings (VE).</strong> An additional set of embeddings injected into attention layers as the &#8220;value&#8221; vectors. Think of them as a skip connection from the raw input that every attention layer can consult, on top of what the previous layer produced. Helps information flow when the network is deep.</p><p><strong>Tied embeddings.</strong> Sharing the input embedding weights with the output projection weights (the thing that produces final logits). Saves millions of parameters. Commonly used in GPT-2 and many others. Broke catastrophically in our run because the differential learning rate setup couldn&#8217;t handle the shared weight.</p><p><strong>QK-norm (Query-Key normalization).</strong> A stabilization trick: normalize the query and key vectors inside attention before computing attention scores. Without it, score magnitudes can spike, saturating the softmax. The agent tried removing QK-norm and `val_bpb` jumped 28% worse.</p><p><strong>RoPE (Rotary Position Embedding).</strong> How the model knows the order of tokens. Rotates the query and key vectors by an angle that depends on the token&#8217;s position. Standard in modern transformers.</p><p><strong>Softmax.</strong> The function that turns raw attention scores into a probability distribution over the tokens you might attend to. Highly peaked inputs cause &#8220;softmax saturation&#8221; &#8212; most of the weight collapses onto one token and gradients downstream get weak. That&#8217;s why QK-norm matters.</p><h4>Methodology</h4><p><strong>Hyperparameter.</strong> Any configuration value you set *before* training, as opposed to weights the model learns *during* training. Batch size, learning rate, WARMUP_RATIO, depth&#8212;all hyperparameters.</p><p><strong>Hyperparameter tuning.</strong> The art (and mostly the grind) of finding good hyperparameter values. Most of what the agent did overnight was hyperparameter tuning.</p><p><strong>Interaction effect.</strong> When the optimal value of hyperparameter A changes depending on what hyperparameter B is set to. A consistent set of hyperparameters is not N independent optima &#8212; it&#8217;s one N-tuple.</p><p><strong>Local search.</strong> A research strategy: after finding an improvement, test every nearby variation of your current best before venturing somewhere completely different. Tedious for humans. Perfect for agents that don&#8217;t get bored.</p><p><em><strong>If I missed a term you&#8217;d have liked defined, please let me know in the comments and I&#8217;ll add it.</strong></em></p>]]></content:encoded></item><item><title><![CDATA[Hosted RAG vs. Self-Hosted RAG for MCP Servers—When Does Paying Actually Win?]]></title><description><![CDATA[A practical comparison of Cloudflare AI Search, Bedrock Knowledge Bases, Pinecone Assistants, LlamaCloud, and self-hosted sqlite-vec for powering MCP servers. Real pricing, real trade-offs, and when each one makes sense.]]></description><link>https://astgl.com/p/hosted-rag-vs-self-hosted-rag</link><guid isPermaLink="false">https://astgl.com/p/hosted-rag-vs-self-hosted-rag</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Tue, 21 Apr 2026 00:42:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jj99!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I shipped <a href="https://astgl.ai/projects#mcp-astgl-knowledge">an MCP knowledge server</a> in a weekend with sqlite-vec and Ollama. It answers questions about my own articles. It runs on a laptop. It costs $0/month.</p><p>Then someone asked the obvious next question: "Can you point it at our Confluence? And Notion? And the Google Drive?"</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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>Suddenly self-hosted isn't free anymore. It's a part-time job&#8212;PDF parsing, OCR, re-indexing schedules, dealing with 50-page slide decks where the first 20 pages are a title card. The embedding pipeline that was elegant for 20 markdown articles starts to sweat when you throw a 400-page SOC 2 audit at it.</p><p>So here's the question I had to actually answer for myself: <strong>when does paying Cloudflare, AWS, or Pinecone actually beat running your own stack?</strong></p><p>I spent a research pass comparing the live services. Here's what I found.</p><h2>TL;DR</h2><p><strong>Self-host</strong> when content is static, under about a thousand docs, single source, you control ingestion cadence, and privacy or cost-per-query matters more than your time.</p><p><strong>Hosted</strong> when: multiple unstructured sources, frequent re-indexing, non-engineers uploading docs, you need SLAs, or you're shipping this to customers.</p><p><strong>Hybrid</strong> is increasingly common: hosted RAG for the customer-facing product, self-hosted for internal dogfooding and dev. The two aren't mutually exclusive.</p><p></p><h2>The Contenders</h2><p>Five options worth your attention. One paragraph each.</p><h3>Cloudflare AI Search (AutoRAG)</h3><p>The newest entrant, currently in open beta. Cloudflare stitched together R2 for storage, Vectorize for embeddings, and Workers AI for inference, then wrapped the whole thing in a management API. Strongest pitch: near-zero config, pay-as-you-go, and an <a href="https://github.com/cloudflare/mcp-server-cloudflare">official MCP server</a> ships with it. Weakest point: retrieval is vector-first. Cloudflare added optional reranking in October 2025, but there's still no published BM25 or hybrid-search path as of this writing. If your corpus is well-structured, you probably won't notice. If you're indexing messy enterprise content, you will.</p><h3>AWS Bedrock Knowledge Bases</h3><p>The enterprise default if you're already on AWS. Hybrid search (vector + BM25) is built in, Cohere reranking is available, and chunking modes range from fixed-size to semantic to custom Lambda. Titan V2 embeddings run at $0.02 per million tokens. There's an official <a href="https://awslabs.github.io/mcp/servers/bedrock-kb-retrieval-mcp-server">AWS Labs MCP server</a> for retrieval. And then there's the OCU landmine&#8212;which I'll get to in a minute, because it deserves its own sidebar.</p><h3>Pinecone Assistants</h3><p>Best-in-class retrieval, managed. Hybrid sparse-dense search with automatic reranking, configurable alpha weighting, managed embeddings abstracted away from you, and an official remote MCP server. Pricing is fully usage-based&#8212;$5 per million context retrieval tokens, plus input/output token, storage, and ingestion charges on top. The Standard plan has a $50/month minimum; the old $0.05/assistant-hour fee was removed. Free tier is real but tight&#8212;5 assistants per project, 1 GB storage, 500k input tokens, and 500k context retrieval tokens per month. Past that you're paying, but the retrieval quality is noticeably better than anything else on this list.</p><h3>LlamaCloud</h3><p>Managed LlamaIndex. Multimodal parsing that actually handles diagrams, configurable chunking modes, hybrid retrieval, reranking. The free tier gives you 10,000 credits a month&#8212;about a thousand pages. Paid tiers start at $50/month (Starter, 40K credits) and scale to $500/month (Pro, 400K credits). For a LlamaIndex-native team, the Starter tier is genuinely cheap; Pro is where the platform pays off. LlamaIndex ships `run-llama/llamacloud-mcp` (Python) and `run-llama/mcp-server-llamacloud` (TypeScript), plus a hosted gat<code>way at mcp.llamaindex.ai</code>the MCP story is actually stronger here than I initially realized.</p><h3>Self-Hosted (sqlite-vec + Ollama)</h3><p>This is what <a href="https://astgl.ai/projects#mcp-astgl-knowledge">the ASTGL Knowledge MCP server</a> actually runs on. sqlite-vec for vectors, FTS5 for keyword search (that's your hybrid search right there, no cloud required), and Ollama serving nomic-embed-text for embeddings, all of it on a $10/month Hetzner VPS or a Mac mini on my desk. Works well for up to around a million vectors in my testing. Real cost: infrastructure plus your time. The second one is the variable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jj99!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jj99!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png 424w, https://substackcdn.com/image/fetch/$s_!jj99!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png 848w, https://substackcdn.com/image/fetch/$s_!jj99!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png 1272w, https://substackcdn.com/image/fetch/$s_!jj99!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jj99!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png" width="895" height="565" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:565,&quot;width&quot;:895,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:496636,&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://astgl.com/i/194365100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.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_!jj99!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png 424w, https://substackcdn.com/image/fetch/$s_!jj99!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png 848w, https://substackcdn.com/image/fetch/$s_!jj99!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png 1272w, https://substackcdn.com/image/fetch/$s_!jj99!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6549eef1-4e51-40ba-b500-2f9b3abe015f_895x565.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>The Six Axes That Actually Matter</h2><p>Pricing gets the attention, but it&#8217;s rarely the deciding factor. Here&#8217;s what I look at:</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dpe0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dpe0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png 424w, https://substackcdn.com/image/fetch/$s_!Dpe0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png 848w, https://substackcdn.com/image/fetch/$s_!Dpe0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png 1272w, https://substackcdn.com/image/fetch/$s_!Dpe0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dpe0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png" width="1207" height="723" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:723,&quot;width&quot;:1207,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133778,&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://astgl.com/i/194365100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.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_!Dpe0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png 424w, https://substackcdn.com/image/fetch/$s_!Dpe0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png 848w, https://substackcdn.com/image/fetch/$s_!Dpe0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png 1272w, https://substackcdn.com/image/fetch/$s_!Dpe0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e186b69-6884-4b80-b780-6c0e0d8eb34f_1207x723.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/hosted-rag-vs-self-hosted-rag?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://astgl.com/p/hosted-rag-vs-self-hosted-rag?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p><h3>Setup cost</h3><p>Time-to-first-query is where hosted services actually earn their money. Pinecone Assistants and Cloudflare AI Search will have you chatting with your docs in under a minute after signup&#8212;upload and go. Bedrock is the outlier on the hosted side: AWS documentation puts CloudFormation infrastructure deployment at 7&#8211;10 minutes, with a full hand-wired setup typically landing at 20&#8211;30 minutes. That's hosted pricing with self-hosted-ish friction.</p><p>Self-hosted with sqlite-vec and Ollama is about 30 minutes from `apt install` to first working query if you know what you're doing, longer if you're learning. For me it's fast because I've done it. For someone new to local LLMs it's a weekend.</p><h3>Ongoing cost</h3><p>This is where the story flips. For a small corpus with low query volume&#8212;think a few hundred docs and a few thousand queries a month&#8212;Cloudflare AI Search is genuinely cheap, maybe $5&#8211;15/month in storage and API costs. Pinecone Assistants sits at $20&#8211;50 in that range. Bedrock KB looks innocent until you hit the OCU minimum (more on that below). LlamaCloud's $50/month Starter floor is reasonable; the $500/month Pro tier is where the platform pays off at real scale.</p><p>Self-hosted is $10/month for a Hetzner VPS, flat. Mac mini on your desk? $0/month plus electricity. The per-query cost of hosted RAG is the thing that compounds when you scale&#8212;or when someone builds something that hammers it.</p><h3>Ingestion complexity</h3><p>This is the axis where hosted services earn their keep without argument. Bedrock KB and LlamaCloud both handle PDFs with embedded tables, Word docs, and (in LlamaCloud's case) actual diagrams, not just the text around them. Bedrock's Data Automation service charges $0.010 per page for parsing&#8212;not free, but a lot cheaper than writing your own PDF extractor.</p><p>Self-hosted with Ollama and sqlite-vec doesn't ship with any of that. If your corpus is markdown, you're fine. If it's a pile of PDFs from your legal team, you're either writing parsers or paying someone to.</p><h3>Retrieval quality</h3><p>All four hosted services offer hybrid retrieval except Cloudflare AI Search, which is vector-only as of this writing. Pinecone Assistants has automatic reranking baked in. Bedrock KB has optional Cohere reranking. Self-hosted with sqlite-vec can do hybrid via FTS5 for keyword matching combined with vector similarity, which is genuinely good&#8212;but you're the one writing the ranking logic.</p><p>For most queries on well-structured content, vector-only is fine. For ambiguous queries over messy content, reranking earns its cost.</p><h3>Data residency</h3><p>Self-hosted wins this one by default. The data never leaves your machine.</p><p>On the hosted side: Pinecone has US and EU regions with a DPA, and LlamaCloud has SOC 2 Type II and HIPAA. Bedrock's EU region support has been inconsistent in 2026 documentation&#8212;verify before you commit. Cloudflare's Data Localization Suite handles this at the platform level.</p><p>If you're in a regulated industry, audit the provider before you pick. Don't trust the marketing page.</p><h3>Ops burden</h3><p>This is the one nobody advertises. Self-hosted means you're responsible for:</p><ul><li><p>Keeping Ollama updated</p></li><li><p>Monitoring embedding drift when you upgrade models</p></li><li><p>Backing up knowledge.db</p></li><li><p>Scheduling re-indexing when source content changes</p></li><li><p>Debugging why sqlite-vec suddenly returns zero results (hint: usually the embedding model changed dimensions)</p></li></ul><p>Hosted services handle all of that. That's most of what you're paying for.</p><p></p><h2>Sidebar: The Bedrock OCU Landmine</h2><p>Bedrock Knowledge Bases advertises "no charge for the Knowledge Bases feature itself." Technically true. What they don't mention on the pricing page is that the vector storage layer requires a minimum of 2 OCUs&#8212;OpenSearch Compute Units&#8212;at roughly $0.24/hour each.</p><p>Do the math: 2 OCUs &#215; $0.24/hour &#215; 730 hours/month = <strong>about $350 per month</strong> whether your knowledge base has 10 documents or 10 million.</p><p>Nobody else on this list has a fixed cost floor like that. Cloudflare AI Search scales down to pennies. Pinecone Assistants has a real free tier. Self-hosted is $10.</p><p>If you're building something small and you're not already deep in AWS&#8212;Bedrock KB is the wrong answer. If you're running enterprise-scale search over millions of docs, that $350 becomes a rounding error, and the hybrid+rerank features earn their keep.</p><p>Know where you sit before you commit.</p><h2>The MCP Angle</h2><p>Here's the thing I didn't expect to find: <strong>every production RAG service on this list ships an official MCP server.</strong> Cloudflare, Bedrock, Pinecone, LlamaCloud&#8212;all of them. This went from "experimental" to "table stakes" over the past year.</p><ul><li><p>Cloudflare AI Search &#8594; The official Cloudflare MCP server exposes AI Search endpoints</p></li><li><p>Bedrock KB &#8594; AWS Labs ships `bedrock-kb-retrieval-mcp-server`</p></li><li><p>Pinecone Assistants &#8594; Each assistant gets its own remote MCP endpoint, plus a local Docker option</p></li><li><p>LlamaCloud &#8594; `run-llama/llamacloud-mcp` plus the hosted MCP Gateway at mcp.llamaindex.ai</p></li></ul><p>This wasn't true a year ago. The MCP ecosystem has absorbed the big RAG providers fast enough that "hosted RAG you can query from Claude Desktop" is now a checkbox feature.</p><p>Self-hosted doesn't ship with an MCP server&#8212;but wrapping one around your sqlite-vec database is a weekend of TypeScript. That's what <a href="https://astgl.ai/projects#mcp-astgl-knowledge">the ASTGL Knowledge MCP server</a> actually is: an MCP wrapper around vector search and Q&amp;A retrieval over a SQLite database. The MCP part is trivial. The content curation and ingestion pipeline is 90% of the work.</p><p>The real insight: <strong>hosted RAG plus MCP wrapper is the modern middle path.</strong> You don't have to pick pure self-hosted or pure managed. Point a custom MCP server at Pinecone Assistants or Bedrock KB, and you get the retrieval quality of managed services with the MCP-native interface your agents expect. The `cloudflare/ai-search` MCP server does exactly this.</p><p>That changes the decision. It's not "hosted vs. self-hosted RAG" anymore. It's "Whose retrieval layer do I want behind my MCP server?"</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DUoA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DUoA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png 424w, https://substackcdn.com/image/fetch/$s_!DUoA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png 848w, https://substackcdn.com/image/fetch/$s_!DUoA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png 1272w, https://substackcdn.com/image/fetch/$s_!DUoA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DUoA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png" width="1215" height="618" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:618,&quot;width&quot;:1215,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:139869,&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://astgl.com/i/194365100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.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_!DUoA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png 424w, https://substackcdn.com/image/fetch/$s_!DUoA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png 848w, https://substackcdn.com/image/fetch/$s_!DUoA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png 1272w, https://substackcdn.com/image/fetch/$s_!DUoA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df6b1a6-bec2-484c-bad1-5f17c2c2fd4d_1215x618.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Decision Framework</h2><p>Enough philosophy. Here's the checklist I use.</p><p>1. <strong>Is your corpus under 500 docs and mostly static?</strong> Self-host. You'll spend more time reading hosted RAG docs than it would take to `npm install sqlite-vec`.</p><p>2. <strong>Do you have under 20 hours to ship this?</strong> Hosted. Pinecone Assistants or Cloudflare AI Search will get you to a demo faster than you can read the Bedrock IAM setup guide.</p><p>3. <strong>Are you charging money for this?</strong> Either hosted (you need the SLA) or self-hosted with a real infra budget and a pager rotation. Don't split the difference on production.</p><p>4. <strong>Is any of this data regulated&#8212;PHI, PII under GDPR, or financial?</strong> Self-host, or audit the hosted provider's compliance posture before you upload anything. Don't trust the marketing page. Ask for the SOC 2 report.</p><p>5. <strong>Are you already in AWS?</strong> Bedrock KB makes sense <em>if</em> your scale justifies the OCU floor. Otherwise, Pinecone.</p><p>6. <strong>Everything else?</strong> Prototype self-hosted with sqlite-vec. Migrate to hosted when a specific pain point forces the move. "We keep hitting embedding model drift" is a real reason. "It seems complicated" isn't.</p><p>The rule of thumb I use: <strong>pay for what hurts, self-host what you enjoy.</strong> If PDF parsing makes you want to quit, pay Bedrock or LlamaCloud. If SQL and vector search are fun, keep sqlite-vec.</p><p></p><h2>What I'd Actually Build in 2026</h2><p>If you asked me right now, for real scenarios:</p><p><strong>Weekend side project.</strong> sqlite-vec plus Ollama plus nomic-embed-text. Runs on a laptop, costs nothing, and teaches you how RAG actually works. This is where I'd start every time.</p><p><strong>Customer-facing SaaS feature.</strong> Cloudflare AI Search. Pay-per-query pricing means your costs track your usage. Official MCP server means Claude Desktop users can plug in directly. The open-beta caveat is real&#8212;verify the SLA matches your product's uptime needs before launch.</p><p><strong>Enterprise RAG over thousands of internal docs.</strong> Bedrock Knowledge Bases if you're already in AWS and you'll comfortably exceed the OCU floor. Pinecone Assistants if you're not. LlamaCloud if your team is already deep in LlamaIndex and the multimodal parsing earns its cost. All three have hybrid search; all three ship MCP servers. Pick based on where your infrastructure&#8212;and your team's existing expertise&#8212;already lives.</p><p><strong>Team knowledge base.</strong> Self-hosted if it's under five people and you've got one engineer who cares about it. Hosted the moment it crosses twenty users or someone non-technical needs to upload docs. The threshold isn't the document count&#8212;it's the human factor.</p><p>The sqlite-vec era isn't ending. It's just not the only answer anymore. A year ago, self-hosted was the serious choice, and hosted was for people who didn't want to learn. In 2026, that framing doesn't hold. Hosted RAG is production-ready, MCP-native, and sometimes cheaper than your own ops time.</p><p>Pick the tool that matches the job. That's it.</p><h2>FAQ</h2><h3>What is Cloudflare AI Search?</h3><p>Cloudflare AI Search (formerly AutoRAG) is a managed Retrieval-Augmented Generation service built on Cloudflare's platform. It combines R2 storage, Vectorize for embeddings, and Workers AI for inference into a single API. It's currently in open beta with vector-first retrieval and optional reranking, and ships with an official MCP server that lets Claude and other AI assistants query your indexed documents directly.</p><h3>When should I use hosted RAG instead of sqlite-vec for an MCP server?</h3><p>Use hosted RAG when your corpus exceeds a few thousand documents, you're ingesting multiple source types like PDFs or Word docs, non-engineers need to upload content, or you need a production SLA. Stick with sqlite-vec when the corpus is static markdown under about 1,000 documents, you control ingestion, and cost-per-query matters more than ops time.</p><h3>Can I use the Cloudflare AI Search MCP with Claude Desktop?</h3><p>Yes. Cloudflare ships an official MCP server that exposes AI Search endpoints as MCP tools. Add the Cloudflare MCP server to your Claude Desktop config, provide your API token, and Claude can query your indexed documents through the same interface it uses for any other MCP tool. The setup is documented in the Cloudflare MCP repository.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/hosted-rag-vs-self-hosted-rag/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://astgl.com/p/hosted-rag-vs-self-hosted-rag/comments"><span>Leave a comment</span></a></p><p></p><ul><li><p>Related reading:*</p></li><li><p><a href="https://astgl.com/p/shipping-mcp-knowledge-server-weekend">How I Shipped an MCP Knowledge Server in a Weekend</a>: the self-hosted case study this article references</p></li><li><p><a href="https://astgl.ai/answers/how-mcp-registries-work">How Do MCP Registries Work (Smithery, mcpt)?</a>: finding MCP servers, including the ones in this article</p></li><li><p><a href="https://astgl.com/p/cortex-event-sourced-memory-ai-coding-assistants">Cortex: An Event-Sourced Memory Architecture for AI Coding Assistants</a>: related exploration of the memory/retrieval landscape</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[What's the Future of MCP Servers in 2026-2027?]]></title><description><![CDATA[MCP servers have gone from a niche protocol announcement to the backbone of AI tool integration in under two years.]]></description><link>https://astgl.com/p/whats-the-future-of-mcp-servers-in</link><guid isPermaLink="false">https://astgl.com/p/whats-the-future-of-mcp-servers-in</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 13 Apr 2026 04:21:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kvtc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>MCP servers have gone from a niche protocol announcement to the backbone of AI tool integration in under two years. But we're still early.</p><p>Here's where the ecosystem is heading, what's changing, and what it means for anyone building with AI tools today.</p><h2>The Short Answer</h2><p>MCP is becoming the standard way AI connects to tools. The next 18 months will bring better security, larger registries, enterprise adoption, and a shift toward local-first AI architectures. If you're building skills in this space now, you're ahead of the curve.</p><p>| Trend | 2025 | 2026 (Now) | 2027 (Projected) |</p><p>|-------|------|------------|-------------------|</p><p>| <strong>Registry size</strong> | ~500 servers | 5,000+ servers | 20,000+ servers |</p><p>| <strong>Enterprise adoption</strong> | Early experiments | Production pilots | Standard infrastructure |</p><p>| <strong>Local AI quality</strong> | Usable for simple tasks | Competitive for most tasks | Near-parity for 90% of use cases |</p><p>| <strong>Protocol maturity</strong> | v1 basics | Auth, streaming, security | Full enterprise feature set |</p><p>| <strong>Developer tooling</strong> | Manual, rough | SDKs in multiple languages | IDE-integrated, visual builders |</p><h2>Trend 1: The Local-First AI Shift</h2><p>The most significant trend in AI infrastructure isn't a new model&#8212;it's where models run.</p><h3>What's Happening</h3><p>Open-source models are improving at a staggering pace. Gemma 4, Qwen 3, Llama 3.3, and their successors close the gap with cloud models every quarter. A 26B parameter model running on a Mac Studio today outperforms cloud GPT-4 from 18 months ago.</p><p>This changes the economics. When local models handle 90% of tasks at zero marginal cost, the question shifts from "should I use AI?" to "should I pay for cloud AI when local works?"</p><h3>What This Means for MCP</h3><p>Local AI + MCP servers = fully autonomous local automation. No cloud dependency. No API costs. No data leaving your machine. The stack is:</p><ul><li><p><strong>Ollama</strong> &#8594; Local model serving</p></li><li><p><strong>MCP servers</strong> &#8594; Tool integration</p></li><li><p><strong>Gateway (OpenClaw, n8n)</strong> &#8594; Orchestration</p></li><li><p><strong>Local storage</strong> &#8594; Data and knowledge</p></li></ul><p>This stack runs on consumer hardware. A Mac Mini with 32 GB handles it. This is enterprise-grade automation on a consumer budget.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kvtc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kvtc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kvtc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kvtc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kvtc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kvtc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kvtc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kvtc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kvtc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kvtc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2da0142-bdc8-40dd-927a-1fc7915a96aa_1126x908.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><h3>The Prediction</h3><p>By 2027, running a personal AI stack locally will be as common as running a home media server is today. The early adopters are doing it now. The mainstream follows when setup becomes one-click.</p><h2>Trend 2: Registry Maturation</h2><h3>From Wild West to App Store</h3><p>Current MCP registries are like the early npm ecosystem&#8212;anyone can publish anything, quality varies wildly, and discovery is hit-or-miss. That's changing.</p><p><strong>What's coming:</strong></p><ul><li><p><strong>Verified publishers</strong>&#8212;Registries will distinguish between official, verified, and community servers</p></li><li><p><strong>Security scanning</strong>&#8212;Automated analysis of server code for vulnerabilities and suspicious behavior</p></li><li><p><strong>Dependency management</strong>&#8212;Tools to manage, update, and audit all installed MCP servers</p></li><li><p><strong>Usage analytics</strong>&#8212;Data on which servers are most used, most reliable, most maintained</p></li><li><p><strong>Compatibility testing</strong>&#8212;Verified compatibility with specific AI clients (Claude, VS Code, etc.)</p></li></ul><h3>The Consolidation Question</h3><p>Will one registry dominate? Probably not in the npm-monopoly sense. More likely:</p><ul><li><p><strong>Smithery</strong> stays the largest general-purpose registry</p></li><li><p><strong>mcpt</strong> establishes the quality-curated niche</p></li><li><p><strong>Platform-specific registries</strong> emerge (VS Code marketplace, Claude's built-in catalog)</p></li><li><p><strong>Enterprise registries</strong> appear for internal MCP server management</p></li></ul><h3>The Prediction</h3><p>By 2027, installing an MCP server will feel like installing a browser extension. Browse, click install, authenticate, done. The manual JSON editing of today will be a historical footnote.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h2>Trend 3: Protocol Evolution</h2><h3>What MCP Gets Right Today</h3><ul><li><p><strong>Simplicity</strong>&#8212;The client-server model is easy to understand and implement</p></li><li><p><strong>Language agnostic</strong>&#8212;Servers can be built in any language</p></li><li><p><strong>Tool abstraction</strong>&#8212;AI sees tools, not implementation details</p></li><li><p><strong>Local-first</strong>&#8212;Servers run on your machine by default</p></li></ul><h3>What's Coming</h3><p><strong>Authentication and Security</strong></p><p>Current MCP servers handle auth inconsistently. The protocol will standardize:</p><ul><li><p>OAuth 2.0 integration for services that need it</p></li><li><p>Fine-grained permission scoping (read vs. write, specific resources)</p></li><li><p>Credential management (secure storage, rotation)</p></li><li><p>Audit logging (who accessed what, when)</p></li></ul><p><strong>Streaming and Real-Time Data</strong></p><p>Today's MCP is mostly request-response. Future versions will support:</p><ul><li><p>Event streams (new email arrives, calendar changes, file modified)</p></li><li><p>WebSocket-based persistent connections</p></li><li><p>Real-time monitoring and dashboards</p></li></ul><p><strong>Multi-Modal Support</strong></p><p>Current MCP tools primarily handle text. Expanding to:</p><ul><li><p>Vision tools (analyze images, screenshots, documents)</p></li><li><p>Audio tools (transcription, speech synthesis)</p></li><li><p>Video tools (clip extraction, analysis)</p></li><li><p>Document tools (PDF processing, spreadsheet manipulation)</p></li></ul><p><strong>Server-to-Server Communication</strong></p><p>Enabling MCP servers to call each other:</p><ul><li><p>A calendar server queries a contacts server to enrich meeting attendee data</p></li><li><p>A research server calls a web search server to fetch sources</p></li><li><p>Composable server chains without client involvement</p></li></ul><h3>The Prediction</h3><p>MCP 2.0 (or equivalent major version) will land by mid-2027 with standardized auth, streaming, and multi-modal support. The protocol will feel complete rather than minimal.</p><h2>Trend 4: Enterprise Adoption</h2><h3>The Enterprise AI Problem</h3><p>Large organizations want AI automation but face:</p><ul><li><p><strong>Security concerns</strong>&#8212;Data can't leave the corporate network</p></li><li><p><strong>Compliance requirements</strong>&#8212;audit trails, access controls, data residency</p></li><li><p><strong>Integration complexity</strong>&#8212;Hundreds of internal tools, custom APIs, legacy systems</p></li><li><p><strong>Governance</strong>&#8212;Who approves which AI can access what?</p></li></ul><h3>How MCP Solves This</h3><p>MCP's local-first architecture is inherently enterprise-friendly:</p><ul><li><p><strong>Servers run inside the network</strong>&#8212;data stays on-premises</p></li><li><p><strong>Per-server permissions</strong>&#8212;Each server accesses only what's allowed</p></li><li><p><strong>Standard protocol</strong>&#8212;one integration pattern for all tools</p></li><li><p><strong>Audit capability</strong> &#8212; All tool calls are loggable</p></li></ul><h3>What's Coming</h3><ul><li><p><strong>Enterprise MCP platforms</strong>&#8212;Companies like Cloudflare, AWS, and Azure offering managed MCP infrastructure</p></li><li><p><strong>Internal MCP registries</strong>&#8212;Corporate app stores for approved MCP servers</p></li><li><p><strong>Policy engines</strong>&#8212;Centralized rules for which AI can use which tools, when, with what data</p></li><li><p><strong>SOC 2 / HIPAA compliant servers</strong>&#8212;Certified MCP servers for regulated industries</p></li></ul><h3>The Prediction</h3><p>By late 2027, enterprise MCP infrastructure will be a recognized market category, similar to how API gateways became standard enterprise infrastructure.</p><h2>Trend 5: The Knowledge Server 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_!WXi9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WXi9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WXi9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WXi9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WXi9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WXi9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WXi9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WXi9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WXi9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WXi9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bed9d7c-89f8-4346-a899-f26a1a7c5e32_552x1484.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><h3>Beyond Tool Servers</h3><p>Most MCP servers today are tool servers&#8212;they do things (send email, search web, manage files). A growing pattern is knowledge servers&#8212;they know things.</p><p>A knowledge server exposes structured information that AI can query:</p><ul><li><p>Company knowledge base</p></li><li><p>Product documentation</p></li><li><p>FAQ databases</p></li><li><p>Research libraries</p></li><li><p>Personal notes and archives</p></li></ul><h3>Why This Matters</h3><p>When AI can query your knowledge directly, it answers from your data&#8212;not its training data. This means:</p><ul><li><p>Answers grounded in your actual documentation</p></li><li><p>No hallucination about your specific products or processes</p></li><li><p>Always current (the knowledge server reads live data)</p></li><li><p>Personalized to your context</p></li></ul><h3>The Example: mcp-astgl-knowledge</h3><p>This is what I'm building&#8212;an MCP server that indexes all 20 articles in this series and makes them queryable by any AI client.</p><p><strong>Tools it will expose:</strong></p><ul><li><p>`search_answers` &#8212; Semantic search across all articles</p></li><li><p>`get_answer` &#8212; Retrieve a specific article by topic</p></li><li><p>`list_topics` &#8212; Browse all available topics</p></li><li><p>`get_faq` &#8212; Pull FAQ entries for specific questions</p></li></ul><p><strong>How it works:</strong></p><ul><li><p>Articles parsed from markdown (frontmatter + body)</p></li><li><p>Embeddings generated via local Ollama (nomic-embed-text)</p></li><li><p>Stored in SQLite with sqlite-vss for vector search</p></li><li><p>Served as an MCP server that any AI client can connect to</p></li></ul><p>When someone asks Claude "What's the best local LLM for coding?" and this server is connected, Claude queries the knowledge base and answers with information from article 12&#8212;not from its training data, which might be outdated.</p><h3>The Prediction</h3><p>Knowledge servers will be the fastest-growing MCP server category in 2027. Every company with documentation, every creator with a content library, every expert with a knowledge base will want one.</p><h2>What This Means for You</h2><h3>If You're a Developer</h3><p><strong>Now:</strong> Learn the MCP SDK, build a server, publish it. The ecosystem rewards early builders&#8212;servers published now accumulate installs and reputation.</p><p><strong>Next 12 months:</strong> Expect demand for custom MCP servers at companies integrating AI. MCP development will become a marketable skill alongside API development.</p><p><strong>Key skill:</strong> Understanding how AI agents use tools. The protocol is simple&#8212;the design of good tools is the hard part.</p><h3>If You're a Business Owner</h3><p><strong>Now:</strong> Connect MCP servers to Claude for immediate productivity gains. Start with email, calendar, and file access. Automate one workflow.</p><p><strong>Next 12 months:</strong> Evaluate local AI infrastructure for privacy and cost benefits. Budget for hardware that pays for itself in reduced API costs.</p><p><strong>Key opportunity:</strong> Businesses that adopt AI automation now will have 12-18 months of compounding efficiency gains over competitors who wait.</p><h3>If You're an Individual User</h3><p><strong>Now:</strong> Set up Claude Desktop with 2-3 MCP servers. Experience the difference between chatbot AI and tool-connected AI.</p><p><strong>Next 12 months:</strong> Consider a local AI setup (Ollama on existing hardware or a Mac Mini). Automate your most repetitive tasks.</p><p><strong>Key realization:</strong> AI connected to your tools is dramatically more useful than AI in a chat window. MCP servers are what make that connection possible.</p><h2>How I Actually Do This</h2><p>I've been building in this ecosystem for over a year. Here's what the trajectory looks like from the inside:</p><h3>What I'm Building Next</h3><p><strong>mcp-astgl-knowledge</strong>&#8212;The knowledge server I mentioned above. It's the capstone of this article series: 20 articles become a queryable knowledge base that any AI can access.</p><p><strong>The plan:</strong></p><p>1. Build with TypeScript + @modelcontextprotocol/sdk</p><p>2. Index all 20 articles with local embeddings</p><p>3. Publish to npm</p><p>4. Register on Smithery and mcpt</p><p>5. Share the build process as an ASTGL tutorial</p><p>This is the pattern I believe will explode: experts building knowledge servers that make their expertise available to AI systems.</p><h3>What I've Observed</h3><p>1. <strong>The tooling is getting better fast.</strong> Building an MCP server in early 2025 required reading the spec and figuring things out. In 2026, the SDK handles most of the boilerplate and registries provide distribution.</p><p>2. <strong>Local model quality jumped significantly.</strong> Gemma 4 was a step change. Tasks that needed cloud models a year ago now run locally at comparable quality. The gap keeps narrowing.</p><p>3. <strong>The automation compound effect is real.</strong> My first automation saved 30 minutes per day. Twenty-six automations save hours. Each new automation builds on the infrastructure of previous ones. The marginal cost of the 27th automation is near zero.</p><p>4. <strong>Community momentum is accelerating.</strong> The number of MCP servers, tools, and tutorials appearing weekly is orders of magnitude higher than a year ago. This is the network effect in action.</p><p>5. <strong>The biggest barrier is awareness, not technology.</strong> Most people who would benefit enormously from MCP servers don't know they exist. That's why I wrote this series&#8212;and why I'm building a knowledge server to make the information accessible.</p><h2>The 18-Month Outlook</h2><p>| Quarter | What to Expect |</p><p>|---------|---------------|</p><p>| <strong>Q2 2026</strong> (now) | Local models competitive for 85% of tasks. MCP registries at 5,000+ servers. |</p><p>| <strong>Q3 2026</strong> | Enterprise MCP pilots at major companies. Visual workflow builders support MCP natively. |</p><p>| <strong>Q4 2026</strong> | MCP auth standardization lands. Knowledge servers emerge as a category. |</p><p>| <strong>Q1 2027</strong> | Local models reach 90%+ parity for common tasks. MCP registries pass 15,000 servers. |</p><p>| <strong>Q2 2027</strong> | Enterprise MCP platforms from major cloud providers. One-click server installation standard. |</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/whats-the-future-of-mcp-servers-in?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/whats-the-future-of-mcp-servers-in?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://astgl.com/p/whats-the-future-of-mcp-servers-in?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>Frequently Asked Questions</h2><h3>Will MCP be replaced by a competing standard?</h3><p>Unlikely in the near term. MCP has strong momentum, broad adoption, and backing from Anthropic with buy-in from Microsoft and Google. Standards wars are possible, but MCP's open protocol design and existing ecosystem make it the safe bet for building today.</p><h3>What if I invest in MCP and it becomes obsolete?</h3><p>The skills transfer. Understanding tool integration, agent patterns, and local AI architecture is valuable regardless of the specific protocol. If a successor to MCP emerges, it will solve the same problems in a similar way, and your experience will translate directly.</p><h3>Are local models improving fast enough to matter?</h3><p>Yes. The improvement curve for open-source models is steep. Every 6-12 months brings a significant quality jump. Hardware you buy today runs better models next year&#8212;your investment appreciates in capability over time.</p><h3>When should I start building with MCP?</h3><p>Now. The ecosystem is mature enough for production use but early enough that builders and early adopters have significant advantages. Every month you wait is a month of compounding automation benefits you don't capture.</p><h3>What's the single most important thing to do today?</h3><p>Connect one MCP server to Claude and use it for one real task. That first experience&#8212;seeing AI interact with your actual tools instead of just your text&#8212;changes how you think about what AI can do. Everything else follows from that realization.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/whats-the-future-of-mcp-servers-in/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://astgl.com/p/whats-the-future-of-mcp-servers-in/comments"><span>Leave a comment</span></a></p><p></p><p>*This is part of the <strong><a href="https://astgl.ai/answers/">ASTGL Definitive Answers</a></strong> series&#8212;structured, practical answers to the questions people actually ask about AI automation, MCP servers, and local AI infrastructure.*</p>]]></content:encoded></item><item><title><![CDATA[How Do I Automate Workflows with AI Agents?]]></title><description><![CDATA[Agent workflows combine AI reasoning with tool access and scheduling to complete multi-step tasks autonomously. The architecture ranges from simple (one agent, one task) to complex (multiple agents coordinating on a pipeline).]]></description><link>https://astgl.com/p/how-do-i-automate-workflows-with</link><guid isPermaLink="false">https://astgl.com/p/how-do-i-automate-workflows-with</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 13 Apr 2026 04:01:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!D4kg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Article 13 in this series introduced what AI agents are. This article goes deeper: how to design, build, and operate agent workflows that handle real work&#8212;from simple scheduled tasks to multi-agent orchestration.</p><p>If you've already automated a few tasks and want to level up, this is your guide.</p><h2>The Short Answer</h2><p>Agent workflows combine AI reasoning with tool access and scheduling to complete multi-step tasks autonomously. The architecture ranges from simple (one agent, one task) to complex (multiple agents coordinating on a pipeline).</p><p>| Complexity | Architecture | Example |</p><p>|-----------|-------------|---------|</p><p>| <strong>Simple</strong> | One agent, one task, scheduled | Morning briefing at 6:30 AM |</p><p>| <strong>Chained</strong> | Multiple steps, sequential | Research &#8594; Draft &#8594; Edit &#8594; Publish |</p><p>| <strong>Parallel</strong> | Multiple agents, simultaneous | 5 news sources searched concurrently |</p><p>| <strong>Orchestrated</strong> | Coordinator + specialist agents | Content council with 5 roles |</p><h2>Workflow Patterns</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D4kg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D4kg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg 424w, https://substackcdn.com/image/fetch/$s_!D4kg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg 848w, https://substackcdn.com/image/fetch/$s_!D4kg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!D4kg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D4kg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!D4kg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg 424w, https://substackcdn.com/image/fetch/$s_!D4kg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg 848w, https://substackcdn.com/image/fetch/$s_!D4kg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!D4kg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83468ba3-619a-4f5f-8c99-ec207287d5ca_2368x472.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><h3>Pattern 1: Scheduled Single-Agent</h3><p>The simplest useful workflow. One agent runs one task on a schedule.</p><pre><code>[Schedule] &#8594; [Agent + Tools] &#8594; [Output + Delivery]</code></pre><p><strong>Example:</strong> Daily security audit</p><ul><li><p><strong>Schedule:</strong> Saturday 8:00 AM</p></li><li><p><strong>Agent:</strong> Gemma 4 31B with filesystem MCP</p></li><li><p><strong>Task:</strong> Read all config files, check for common misconfigurations, compare against best practices</p></li><li><p><strong>Output:</strong> Audit report delivered to Discord</p></li></ul><p><strong>When to use:</strong> Any standalone task that repeats on a schedule and benefits from AI reasoning.</p><h3>Pattern 2: Sequential Chain</h3><p>Multiple steps execute in order, each feeding into the next.</p><pre><code>[Step 1: Research] &#8594; [Step 2: Draft] &#8594; [Step 3: Edit] &#8594; [Step 4: Publish]</code></pre><p><strong>Example:</strong> Content creation pipeline</p><ul><li><p>Step 1: SCOUT agent searches for trending topics, produces research brief</p></li><li><p>Step 2: QUILL agent writes article from research brief</p></li><li><p>Step 3: LEDGER agent fact-checks article against sources</p></li><li><p>Step 4: MAVEN agent generates distribution pieces</p></li></ul><p><strong>When to use:</strong> Tasks with natural stages where each stage's output becomes the next stage's input.</p><h3>Pattern 3: Fan-Out / Fan-In</h3><p>One task spawns multiple parallel tasks, results are collected and synthesized.</p><pre><code>&#8594; [Agent A: Source 1] &#8594;
[Dispatch] &#8594; [Agent B: Source 2] &#8594; [Collect + Synthesize]
            &#8594; [Agent C: Source 3] &#8594;</code></pre><p><strong>Example:</strong> Competitive research</p><ul><li><p>Dispatch: "Research these 5 competitors"</p></li><li><p>5 parallel agents each research one competitor</p></li><li><p>Collector synthesizes all 5 reports into a single competitive brief</p></li></ul><p><strong>When to use:</strong> Tasks that can be decomposed into independent subtasks, where parallelism saves time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6xzE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6xzE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6xzE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6xzE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6xzE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6xzE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6xzE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6xzE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6xzE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6xzE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8a0107-ee91-4aee-b8d4-ab86d8df9f32_1354x764.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><h3>Pattern 4: Router + Specialists</h3><p>A lightweight router examines each incoming task and dispatches it to the best specialist.</p><pre><code>[Input] &#8594; [Router] &#8594; [Specialist A (code)]
                   &#8594; [Specialist B (writing)]
                   &#8594; [Specialist C (research)]
                   &#8594; [Specialist D (triage)]</code></pre><p><strong>Example:</strong> Notification processing</p><ul><li><p>Router: Gemma 4 e4B classifies incoming notifications (fast, cheap)</p></li><li><p>Critical &#8594; Immediate Discord alert</p></li><li><p>Important &#8594; Queue for hourly batch</p></li><li><p>Routine &#8594; Queue for 3-hour digest</p></li><li><p>Spam &#8594; Discard and log</p></li></ul><p><strong>When to use:</strong> High-volume inputs that need different handling based on content or urgency.</p><h3>Pattern 5: Multi-Agent Council</h3><p>Multiple specialized agents collaborate on a complex task, each contributing their expertise.</p><pre><code>[SCOUT] &#8594; findings &#8594; [FORGE] &#8594; outline &#8594; [QUILL] &#8594; draft &#8594; [LEDGER] &#8594; verified &#8594; [MAVEN] &#8594; published
                                                         &#8593;                              |
                                                         &#9492;&#9472;&#9472;&#9472;&#9472; revision request &#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;</code></pre><p><strong>Example:</strong> Content production council (my actual setup)</p><ul><li><p>SCOUT: Research and topic discovery</p></li><li><p>FORGE: Structure and outlining</p></li><li><p>QUILL: Drafting with voice profile</p></li><li><p>LEDGER: Fact-checking and validation</p></li><li><p>MAVEN: SEO, distribution, and publishing</p></li></ul><p>Agents can request revisions from earlier agents&#8212;LEDGER can send a draft back to QUILL if facts don't check out.</p><p><strong>When to use:</strong> Complex, multi-faceted work where specialized expertise improves quality.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h2>Building a Workflow: Step by Step</h2><p>Let's build a real workflow from scratch&#8212;a weekly competitive intelligence report.</p><h3>Step 1: Define the Goal</h3><blockquote><p>"Every Monday at 7 AM, research the top 5 competitors in my space, summarize their recent activity, identify notable changes, and deliver a structured report to Discord."</p></blockquote><h3>Step 2: Choose the Architecture</h3><p>This is a fan-out/fan-in pattern:</p><ul><li><p>Fan-out: Research 5 competitors in parallel</p></li><li><p>Fan-in: Synthesize into one report</p></li></ul><h3>Step 3: Design the Agents</h3><p><strong>Research Agent (runs 5 times, once per competitor):</strong></p><ul><li><p>Model: Gemma 4 26B</p></li><li><p>Tools: Web search MCP server</p></li><li><p>Input: Competitor name + website</p></li><li><p>Output: Structured findings (recent blog posts, product changes, social mentions, job postings)</p></li></ul><p><strong>Synthesis Agent (runs once):</strong></p><ul><li><p>Model: Gemma 4 26B</p></li><li><p>Tools: Filesystem MCP (to save the report)</p></li><li><p>Input: All 5 research outputs</p></li><li><p>Output: Formatted competitive brief with highlights, threats, and opportunities</p></li></ul><p><strong>Delivery Agent:</strong></p><ul><li><p>Input: Final report</p></li><li><p>Output: Discord message with report content</p></li></ul><h3>Step 4: Define the Schedule</h3><pre><code># Cron expression: Every Monday at 7:00 AM
0 7 * * 1</code></pre><h3>Step 5: Build Error Handling</h3><p>| Failure | Handling |</p><p>|---------|---------|</p><p>| Web search fails for one competitor | Skip that competitor, note in report |</p><p>| Model times out | Retry once, then use smaller model as fallback |</p><p>| All searches fail | Alert human, skip this week's report |</p><p>| Discord delivery fails | Save report to file, alert via email |</p><h3>Step 6: Add Logging</h3><p>Every agent execution logs:</p><ul><li><p>Timestamp</p></li><li><p>Input received</p></li><li><p>Tools called and their responses</p></li><li><p>Output generated</p></li><li><p>Execution time</p></li><li><p>Any errors or retries</p></li></ul><h3>Step 7: Test and Iterate</h3><p>Run the workflow manually first. Review the output. Adjust prompts, model choice, and error handling based on real results. Only schedule it after 3 successful manual runs.</p><h2>Orchestration Tools</h2><h3>OpenClaw (Local Gateway)</h3><p>OpenClaw is a local AI gateway that manages model routing, task scheduling, and tool execution.</p><p><strong>Strengths:</strong></p><ul><li><p>Runs entirely locally&#8212;no cloud dependency</p></li><li><p>Routes tasks to appropriate models based on complexity</p></li><li><p>Manages MCP server connections</p></li><li><p>Built-in scheduling and delivery (Discord, Slack, email)</p></li><li><p>Logging and monitoring</p></li></ul><p><strong>Best for:</strong> Users who want full local control over their agent workflows.</p><h3>n8n (Visual Workflow Builder)</h3><p>n8n provides a visual drag-and-drop interface for building workflows.</p><p><strong>Strengths:</strong></p><ul><li><p>No-code visual builder</p></li><li><p>Hundreds of pre-built integrations</p></li><li><p>Self-hostable (runs on your machine)</p></li><li><p>Supports webhooks, schedules, and event triggers</p></li></ul><p><strong>Best for:</strong> Non-developers who want automation without writing code.</p><h3>Cron + Scripts (DIY)</h3><p>The simplest orchestration: cron jobs that run scripts calling the Ollama API.</p><p><strong>Strengths:</strong></p><ul><li><p>Zero additional software</p></li><li><p>Works on any Unix system</p></li><li><p>Complete control</p></li><li><p>No abstraction overhead</p></li></ul><p><strong>Best for:</strong> Developers comfortable with bash scripting who want minimal dependencies.</p><h3>Claude Agent SDK (Custom Code)</h3><p>Anthropic's SDK for building custom agent logic in Python or TypeScript.</p><p><strong>Strengths:</strong></p><ul><li><p>Full programmatic control</p></li><li><p>Access to Claude's tool-use capabilities</p></li><li><p>Complex agent logic (loops, conditionals, multi-turn)</p></li><li><p>Production-grade error handling</p></li></ul><p><strong>Best for:</strong> Developers building sophisticated custom agents.</p><h2>How I Actually Do This</h2><p>My workflow orchestration runs through OpenClaw on a Mac Studio. Here's the production architecture:</p><h3>The Orchestration Layer</h3><pre><code>OpenClaw Gateway
&#9500;&#9472;&#9472; Schedule Manager (cron-like)
&#9500;&#9472;&#9472; Model Router (triage &#8594; specialist)
&#9500;&#9472;&#9472; MCP Connector (15+ servers)
&#9500;&#9472;&#9472; Delivery Manager (Discord, file system)
&#9492;&#9472;&#9472; Log Aggregator</code></pre><h3>Daily Workflow Map</h3><p>| Time | Workflow | Pattern | Agents |</p><p>|------|---------|---------|--------|</p><p>| 6:00 AM | Research pipeline | Fan-out/fan-in | 5 source agents + 1 synthesizer |</p><p>| 6:15 AM | Log review | Single agent | 1 analyst agent |</p><p>| 6:30 AM | Morning briefing | Sequential chain | Calendar &#8594; Email &#8594; Tasks &#8594; News &#8594; Synthesizer |</p><p>| 7:00 AM | Content research | Fan-out/fan-in | 3 niche agents + 1 trend analyzer |</p><p>| Every 5 min | Critical alerts | Router + specialist | Router &#8594; Discord delivery |</p><p>| Every hour | Notification batch | Router + collector | Router &#8594; Batch &#8594; Discord |</p><p>| 8:00 PM | Evening summary | Sequential chain | Activity log &#8594; Synthesizer &#8594; Discord |</p><p>| 8:30 PM | KB builder | Single agent | Knowledge base agent |</p><h3>Multi-Agent Council Integration</h3><p>The ACA Council (SCOUT/FORGE/QUILL/LEDGER/MAVEN) runs as an orchestrated multi-agent workflow:</p><p>1. <strong>Morning meeting (7 AM):</strong> SCOUT presents topic research, council prioritizes</p><p>2. <strong>Production cycle:</strong> Sequential chain through all 5 agents</p><p>3. <strong>Evening meeting (8 PM):</strong> Review completed articles, queue for publishing</p><p>4. <strong>Publishing:</strong> Automated sync to site, Substack, and social channels</p><h3>Paperclip Integration</h3><p>Paperclip (a separate agent management platform) provides additional orchestration for agents that need web-based interfaces and team collaboration. It runs alongside OpenClaw&#8212;some workflows use OpenClaw's local scheduling, others use Paperclip's cloud features.</p><p>The key insight: <strong>you don't need one orchestration tool.</strong> Different workflows have different needs. Simple schedules use cron. Complex pipelines use OpenClaw. Team-visible workflows use Paperclip.</p><h3>Lessons from Production</h3><p>1. <strong>Start with single-agent workflows.</strong> Get one agent reliable before adding coordination complexity. My first 10 workflows were all single-agent scheduled tasks.</p><p>2. <strong>The router pattern is the highest-leverage addition.</strong> Adding a triage router that classifies incoming work and dispatches to the right model immediately improved quality and speed across all workflows.</p><p>3. <strong>Logging saved me dozens of hours.</strong> When an agent produces bad output, logs show exactly what happened. Without logs, you're guessing. I log every tool call, every model response, every delivery.</p><p>4. <strong>Agents need guardrails, not just goals.</strong> "Research competitors" is too vague. "Search for blog posts published in the last 7 days from these 5 domains, extract titles and summaries, skip anything older than 7 days" &#8212; that produces reliable results.</p><p>5. <strong>Schedule slack prevents cascading failures.</strong> My 6:00 AM research pipeline sometimes takes 25 minutes. The 6:30 AM briefing doesn't depend on it&#8212;theyf run independently. Dependent workflows have explicit wait conditions, not just time offsets.</p><h2>Monitoring and Maintenance</h2><h3>What to Monitor</h3><p>| Metric | Why It Matters | Alert Threshold |</p><p>|--------|---------------|----------------|</p><p>| <strong>Execution time</strong> | Detect slowdowns before they cascade | &gt;2x normal duration |</p><p>| <strong>Error rate</strong> | Catch model or tool failures | &gt;10% of executions |</p><p>| <strong>Output quality</strong> | Detect model drift or prompt degradation | Spot-check weekly |</p><p>| <strong>Token usage</strong> | Track resource consumption | Unexpected spikes |</p><p>| <strong>Tool call failures</strong> | MCP server or API issues | Any persistent failure |</p><h3>Weekly Maintenance</h3><ul><li><p>Review error logs&#8212;fix recurring issues</p></li><li><p>Spot-check 2-3 outputs per workflow for quality</p></li><li><p>Update models if new versions improve quality</p></li><li><p>Review and trim logs (they grow fast)</p></li><li><p>Check MCP server updates</p></li></ul><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-i-automate-workflows-with?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-i-automate-workflows-with?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://astgl.com/p/how-do-i-automate-workflows-with?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>Frequently Asked Questions</h2><h3>How many agent workflows can I run simultaneously?</h3><p>Depends on your hardware and model sizes. A Mac Mini with 32 GB comfortably runs 3-5 concurrent lightweight workflows. A Mac Studio with 192+ GB runs 20+ concurrent workflows across multiple models. The bottleneck is usually model memory, not CPU.</p><h3>Can agent workflows interact with each other?</h3><p>Yes&#8212;through shared data. One workflow writes results to a file or database; another reads them. For direct coordination, use a message queue or orchestration layer. Keep interactions simple to maintain debuggability.</p><h3>What's the failure rate for agent workflows?</h3><p>Well-designed workflows with proper error handling run at 95%+ success rates. The remaining failures are usually transient (API timeouts, network issues) that resolve on retry. Poorly designed workflows (vague goals, no error handling) fail 20-40% of the time.</p><h3>Should I use local or cloud models for agent workflows?</h3><p>Local for volume, cloud for quality. If a workflow runs 50+ times per day, local models save significant money. If a workflow runs once per week and quality is critical, cloud models may be worth the cost. Most production setups use both.</p><h3>How do I debug a failing agent workflow?</h3><p>Logs are everything. Check: (1) What input did the agent receive? (2) What tools did it call? (3) What did the tools return? (4) What output did the agent produce? The failure is usually in step 2 or 3&#8212;a tool returned unexpected data, or the model misinterpreted the tool response.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-i-automate-workflows-with/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://astgl.com/p/how-do-i-automate-workflows-with/comments"><span>Leave a comment</span></a></p><p></p><p>*This is part of the <strong><a href="https://astgl.ai/answers/">ASTGL Definitive Answers</a></strong> series&#8212;structured, practical answers to the questions people actually ask about AI automation, MCP servers, and local AI infrastructure.*</p>]]></content:encoded></item><item><title><![CDATA[How Do MCP Registries Work (Smithery, mcpt)?]]></title><description><![CDATA[MCP registries are directories of MCP servers&#8212;searchable, categorized, and installable. They solve the discovery problem: "Which MCP server does X, and how do I install it?"]]></description><link>https://astgl.com/p/how-do-mcp-registries-work-smithery</link><guid isPermaLink="false">https://astgl.com/p/how-do-mcp-registries-work-smithery</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 13 Apr 2026 03:43:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mlU0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There are thousands of MCP servers available. Finding the right one, evaluating whether it's trustworthy, and installing it correctly&#8212;that's where registries come in.</p><p>Here's how MCP registries work, which ones matter, and how to use them effectively.</p><h2>The Short Answer</h2><p>MCP registries are directories of MCP servers&#8212;searchable, categorized, and installable. They solve the discovery problem: "Which MCP server does X, and how do I install it?"</p><p>| Registry | Size | Strength | Best For |</p><p>|----------|------|----------|----------|</p><p>| <strong>Smithery</strong> | Largest (5,000+) | Breadth, install commands, reviews | Finding any MCP server |</p><p>| <strong>mcpt</strong> | Curated (500+) | Quality focus, CLI tool, auto-updates | Reliable production servers |</p><p>| <strong>OpenTools</strong> | Growing (1,000+) | Search, categories | Alternative discovery |</p><p>| <strong>npm</strong> | Everything | Raw package access | Developers building custom setups |</p><h2>How Discovery Works</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mlU0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mlU0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mlU0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mlU0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mlU0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mlU0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mlU0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mlU0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mlU0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mlU0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d485df-09f5-4cc8-a56f-cc7c7cf71115_798x2688.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><h3>The Problem Registries Solve</h3><p>Without registries, finding an MCP server means:</p><p>1. Searching GitHub for "mcp-server-[thing you want]"</p><p>2. Hoping the README has install instructions</p><p>3. Guessing if it's maintained, secure, and compatible</p><p>4. Manually configuring everything</p><p>With registries:</p><p>1. Search or browse by category</p><p>2. Read description, reviews, and install command</p><p>3. Copy-paste the command</p><p>4. Done</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h3>Search Patterns</h3><p>Most registries support these discovery methods:</p><p><strong>Category browsing:</strong> Productivity, Development, Data, Communication, Creative, Business</p><p><strong>Keyword search:</strong> "gmail", "database", "web scraping", "calendar"</p><p><strong>Tag filtering:</strong> "official", "verified", "popular", "new"</p><p><strong>Sort options:</strong> Most installed, highest rated, recently updated</p><h2>Smithery: The Largest Registry</h2><p>Smithery is the de facto standard for MCP server discovery. Here's how to use it effectively.</p><h3>Browsing Smithery</h3><p>Visit <a href="https://smithery.ai">smithery.ai</a> and you'll see:</p><ul><li><p><strong>Featured servers</strong>&#8212;editorially curated highlights</p></li><li><p><strong>Categories</strong>&#8212;organized by use case</p></li><li><p><strong>Search</strong>&#8212;keyword search across all servers</p></li><li><p><strong>Trending</strong>&#8212;most popular servers this week</p></li></ul><h3>Reading a Server Listing</h3><p>Each server page shows:</p><p>| Section | What It Tells You |</p><p>|---------|------------------|</p><p>| <strong>Description</strong> | What the server does and its capabilities |</p><p>| <strong>Tools</strong> | Specific tools the server exposes (e.g., `list_events`, `create_event`) |</p><p>| <strong>Install command</strong> | Copy-paste for Claude Desktop or Claude Code |</p><p>| <strong>Configuration</strong> | Required API keys or settings |</p><p>| <strong>Author</strong> | Who built it&#8212;official orgs vs. community |</p><p>| <strong>Stats</strong> | Install count, last updated, GitHub stars |</p><p>| <strong>Reviews</strong> | User feedback on reliability and quality |</p><h3>Installing from Smithery</h3><p><strong>For Claude Desktop:</strong></p><p>Smithery provides the exact JSON block to add to your config file:</p><pre><code>{
  "mcpServers": {
    "server-name": {
      "command": "npx",
      "args": ["-y", "@scope/mcp-server-name"],
      "env": {
        "API_KEY": "your-key"
      }
    }
  }
}</code></pre><p>Copy it, paste it into `claude_desktop_config.json`, add your API key, restart Claude.</p><p><strong>For Claude Code:</strong></p><p>Smithery often shows the CLI command:</p><pre><code>claude mcp add server-name -- npx -y @scope/mcp-server-name</code></pre><h3>Evaluating Quality on Smithery</h3><p>Not all servers are equal. Here's how to assess quality:</p><p>| Signal | Good Sign | Warning Sign |</p><p>|--------|-----------|-------------|</p><p>| <strong>Author</strong> | Official org or verified developer | Anonymous, no GitHub link |</p><p>| <strong>Last updated</strong> | Within the past 3 months | Over 6 months ago |</p><p>| <strong>Install count</strong> | Hundreds or thousands | Single digits |</p><p>| <strong>GitHub stars</strong> | Active community | No repository linked |</p><p>| <strong>Reviews</strong> | Specific positive feedback | No reviews or vague complaints |</p><p>| <strong>Tools listed</strong> | Clear, well-documented tools | Vague or missing tool descriptions |</p><h2>mcpt: The Curated Alternative</h2><p>mcpt takes a quality-first approach. Fewer servers, but higher average reliability.</p><h3>The mcpt CLI</h3><p>mcpt provides a command-line tool for managing MCP servers:</p><pre><code># Install the CLI
npm install -g mcpt

# Search for servers
mcpt search calendar

# Install a server
mcpt install google-calendar

# List installed servers
mcpt list

# Update all servers
mcpt update</code></pre><h3>Advantages of mcpt</h3><p>| Feature | Smithery | mcpt |</p><p>|---------|----------|------|</p><p>| <strong>Curation</strong> | Community-driven | Editorially reviewed |</p><p>| <strong>Install method</strong> | Manual config editing | CLI tool handles everything |</p><p>| <strong>Updates</strong> | Manual | `mcpt update` handles all |</p><p>| <strong>Quality bar</strong> | Low (anyone can list) | Higher (review process) |</p><p>| <strong>Size</strong> | Largest selection | Smaller, more reliable |</p><h3>When to Use mcpt vs. Smithery</h3><ul><li><p><strong>Use Smithery</strong> when you need a server for an obscure tool or want maximum choice</p></li><li><p><strong>Use mcpt</strong> when you want reliable, well-maintained servers with easy management</p></li></ul><h2>OpenTools and Other Registries</h2><h3>OpenTools</h3><p>OpenTools is a growing registry with a clean search interface. It focuses on categorization and discoverability. Worth checking if you don't find what you need on Smithery.</p><h3>npm Direct</h3><p>Every Node.js-based MCP server is published to npm. You can search npm directly:</p><pre><code>npm search mcp-server</code></pre><p>This gives you access to everything, including servers not yet listed on any registry. But there's no curation, reviews, or quality signals&#8212;you're on your own to evaluate.</p><h3>GitHub</h3><p>Many MCP servers live on GitHub before they're registered anywhere. Search GitHub for:</p><ul><li><p>`mcp-server` (general)</p></li><li><p>`modelcontextprotocol` (official repos)</p></li><li><p>`mcp-server-[tool-name]` (specific tools)</p></li></ul><p>GitHub gives you access to source code, issues, commit history, and contributor activity&#8212;the deepest quality signals available.</p><h2>Security Considerations</h2><p>MCP servers run code on your machine. Take security seriously.</p><h3>Before Installing Any Server</h3><p>1. <strong>Check the source.</strong> Is the GitHub repo linked? Can you see the code?</p><p>2. <strong>Check the author.</strong> Is it an organization you recognize? A developer with a history?</p><p>3. <strong>Read the permissions.</strong> What tools does it expose? What data can it access?</p><p>4. <strong>Check for credentials.</strong> Does it need API keys? Where does it send data?</p><p>5. <strong>Check freshness.</strong> When was it last updated? Are dependencies current?</p><h3>Red Flags</h3><p>| Red Flag | Risk |</p><p>|----------|------|</p><p>| No source code available | Can't verify what the code does |</p><p>| Requests unusual permissions | May access more than needed |</p><p>| No clear author or organization | Harder to trust, no accountability |</p><p>| Hasn't been updated in 12+ months | May have unpatched vulnerabilities |</p><p>| Very few installs, no reviews | Unvalidated by the community |</p><h3>Best Practices</h3><ul><li><p><strong>Start with official servers</strong> from Anthropic, Google, Microsoft, and established organizations</p></li><li><p><strong>Read the code</strong> if you're installing a community server that handles sensitive data</p></li><li><p><strong>Scope permissions</strong>&#8212;only give file system access to directories you actually need</p></li><li><p><strong>Monitor behavior</strong>&#8212;check logs if a server seems to be making unexpected network calls</p></li></ul><h2>How I Actually Do This</h2><p>I use a mix of Smithery, npm, and direct GitHub sources for my MCP server setup.</p><h3>My Discovery Workflow</h3><p>1. <strong>Need a server</strong> &#8594; Search Smithery first (broadest selection)</p><p>2. <strong>Found candidates</strong> &#8594; Check GitHub repo for each (code quality, maintenance)</p><p>3. <strong>Evaluate</strong> &#8594; Look at install count, last update, and whether tools match my needs</p><p>4. <strong>Test</strong> &#8594; Install and test with a simple prompt before adding to automation</p><p>5. <strong>Production</strong> &#8594; Only servers that pass testing go into my daily workflow</p><h3>Building for Registries</h3><p>I'm building `mcp-astgl-knowledge` &#8212; an MCP server that exposes all 20 articles in this series as searchable knowledge. The plan:</p><p>1. <strong>Build</strong> with TypeScript and the `@modelcontextprotocol/sdk`</p><p>2. <strong>Publish</strong> to npm (`npm publish`)</p><p>3. <strong>Register</strong> on Smithery (submit listing with description, tools, install command)</p><p>4. <strong>Register</strong> on mcpt (submit for review)</p><p>5. <strong>Maintain</strong>&#8212;update when new articles are added, respond to issues</p><p>This will be a real example of the full lifecycle: build &#8594; publish &#8594; register &#8594; maintain. I'll update this article with the actual experience once it's done.</p><h3>What I've Learned</h3><p>1. <strong>Smithery is the starting point for everyone.</strong> It has the most servers and the most familiar interface. Start there.</p><p>2. <strong>mcpt's CLI is underrated.</strong> Managing updates across 15 servers manually is tedious. `mcpt update` handles it.</p><p>3. <strong>Official servers are worth the premium.</strong> Anthropic's official MCP servers for filesystem, web search, and databases are rock-solid. Community servers vary widely in quality.</p><p>4. <strong>Read the tools list carefully.</strong> A "Gmail MCP server" might only support reading emails, not sending them. The tools list tells you exactly what's possible.</p><p>5. <strong>The ecosystem is young and growing fast.</strong> New servers appear daily. Check registries monthly&#8212;the server you wished existed last month might exist now.</p><h2>Publishing Your Own MCP Server</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NIVN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NIVN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NIVN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NIVN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NIVN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NIVN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NIVN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NIVN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NIVN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NIVN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0127aff5-ca9e-44f5-a7d8-6f8153e94133_1014x1388.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>If you've built something useful, publishing it helps the community and builds your reputation.</p><h3>The Publishing Process</h3><p>1. <strong>Build</strong> your server using the MCP SDK</p><p>2. <strong>Test</strong> it locally with Claude Desktop or Claude Code</p><p>3. <strong>Publish</strong> the npm package: `npm publish`</p><p>4. <strong>Register</strong> on Smithery: Submit your listing with description, install command, and documentation</p><p>5. <strong>Register</strong> on mcpt: Submit for editorial review</p><p>6. <strong>Maintain</strong>: Respond to issues, update dependencies, improve based on feedback</p><h3>What Makes a Good MCP Server Listing</h3><p>| Element | Why It Matters |</p><p>|---------|---------------|</p><p>| <strong>Clear description</strong> | Users need to know what it does in 2 sentences |</p><p>| <strong>Tool documentation</strong> | Every tool should have a name, description, and example |</p><p>| <strong>Install command</strong> | Copy-paste ready for Claude Desktop and Claude Code |</p><p>| <strong>Configuration guide</strong> | What API keys or settings are needed |</p><p>| <strong>Source code link</strong> | Transparency builds trust |</p><p>| <strong>Changelog</strong> | Shows the server is actively maintained |</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-mcp-registries-work-smithery?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-mcp-registries-work-smithery?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://astgl.com/p/how-do-mcp-registries-work-smithery?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>Frequently Asked Questions</h2><h3>Are MCP registries safe?</h3><p>Registries are directories, not security guarantees. They make discovery easier but don't audit every server's code. Treat registry listings like npm packages&#8212;check the source, author, and community signals before installing. Official and popular servers are generally safe. Obscure, unreviewed servers deserve more scrutiny.</p><h3>Can I use MCP servers not listed on any registry?</h3><p>Yes. Any MCP server can be installed manually by pointing your config to the npm package or local path. Registries are for discovery&#8212;they're not gatekeepers. You can even build private MCP servers that never appear on any registry.</p><h3>How often should I update my MCP servers?</h3><p>Monthly is a good cadence. Security patches, bug fixes, and new features arrive regularly. If you use mcpt, `mcpt update` handles everything. For manual installs via `npx`, you always get the latest version automatically.</p><h3>Will there be one dominant MCP registry?</h3><p>Probably not&#8212;the ecosystem benefits from multiple registries with different strengths. Smithery for breadth, mcpt for quality, npm for raw access. This mirrors how package managers work: npm, GitHub, and specialized registries coexist.</p><h3>Can I run my own private MCP registry?</h3><p>Yes, for organizations that want to share internal MCP servers. The MCP protocol doesn't require public registries&#8212;any discoverable endpoint works. Some companies run internal registries for proprietary servers that access internal systems.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-mcp-registries-work-smithery/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://astgl.com/p/how-do-mcp-registries-work-smithery/comments"><span>Leave a comment</span></a></p><p></p><p>*This is part of the <strong><a href="https://astgl.ai/answers/">ASTGL Definitive Answers</a></strong> series&#8212;structured, practical answers to the questions people actually ask about AI automation, MCP servers, and local AI infrastructure.*</p>]]></content:encoded></item><item><title><![CDATA[What's the ROI of Local AI Infrastructure?]]></title><description><![CDATA[The question isn't whether local AI saves money&#8212;it does. Local AI has high upfront cost and near-zero ongoing cost. Cloud AI has zero upfront cost and scales linearly forever.]]></description><link>https://astgl.com/p/whats-the-roi-of-local-ai-infrastructure</link><guid isPermaLink="false">https://astgl.com/p/whats-the-roi-of-local-ai-infrastructure</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 13 Apr 2026 03:29:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZKWP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The question isn't whether local AI saves money&#8212;it does. The question is how fast and how much, based on your specific usage pattern.</p><p>Here's the real math, with actual hardware costs, cloud API pricing, and the breakeven points where local infrastructure pays for itself.</p><h2>The Short Answer</h2><p>Local AI has high upfront cost and near-zero ongoing cost. Cloud AI has zero upfront cost and scales linearly forever. The crossover point depends on your usage volume.</p><p>| | Local AI | Cloud AI |</p><p>|--|----------|----------|</p><p>| <strong>Upfront cost</strong> | $600-8,000 (hardware) | $0 |</p><p>| <strong>Monthly cost</strong> | $5-15 (electricity) | $50-5,000+ (API fees) |</p><p>| <strong>Per-call cost</strong> | $0 | $0.001-0.10 per call |</p><p>| <strong>Scales with usage</strong> | No&#8212;flat cost | Yes&#8212;more usage = more cost |</p><p>| <strong>Quality ceiling</strong> | Very good (not frontier) | Frontier models available |</p><p>| <strong>Privacy</strong> | Complete&#8212;data stays local | Data sent to provider |</p><p><strong>Rule of thumb:</strong> If you'd spend more than $100/month on API calls, local AI probably pays for itself within a year.</p><h2>The Cloud Cost Reality</h2><p>Cloud AI pricing is per-token. Here's what real usage patterns cost:</p><h3>Typical Monthly Cloud Costs</h3><p>| Usage Pattern | Calls/Day | Model | Monthly Cost |</p><p>|--------------|-----------|-------|-------------|</p><p>| <strong>Casual user</strong> | 10-20 | Claude Sonnet | $10-30 |</p><p>| <strong>Power user</strong> | 50-100 | Claude Sonnet | $50-200 |</p><p>| <strong>Developer with AI tools</strong> | 200-500 | Mixed models | $200-800 |</p><p>| <strong>Automated workflows</strong> | 500-1,000 | Claude Haiku + Sonnet | $500-2,000 |</p><p>| <strong>Full automation pipeline</strong> | 2,000-5,000 | Mixed models | $2,000-8,000 |</p><p>| <strong>Enterprise scale</strong> | 10,000+ | Mixed models | $10,000+ |</p><p>The jump from casual to automated is where costs explode. A morning briefing that runs daily, a content pipeline that generates articles, and notification routing that processes hundreds of messages&#8212;these add up fast.</p><h3>The Subscription Alternative</h3><p>Claude Pro ($20/month) and Claude Max ($100-200/month) offer high-volume access at flat rates. These are excellent value for interactive use. But they have rate limits that don't work well for automated pipelines running 24/7.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h2>The Local Cost Reality</h2><h3>Hardware Options</h3><p>| Device | RAM | Price | Best For |</p><p>|--------|-----|-------|----------|</p><p>| <strong>Mac Mini M4</strong> | 32 GB | ~$800 | Entry-level: runs 7-12B models comfortably |</p><p>| <strong>Mac Mini M4 Pro</strong> | 48 GB | ~$1,400 | Mid-range: runs 26B models, 2-3 concurrent |</p><p>| <strong>Mac Studio M3 Max</strong> | 96 GB | ~$3,000 | Serious: runs 70B models, full automation |</p><p>| <strong>Mac Studio M3 Ultra</strong> | 192 GB | ~$5,000 | Professional: multiple large models simultaneously |</p><p>| <strong>Mac Studio M3 Ultra</strong> | 512 GB | ~$8,000 | Maximum: every model, every size, all at once |</p><p>| <strong>Linux + RTX 4090</strong> | 24 GB VRAM | ~$2,500 | Fast inference, limited to one large model |</p><p>| <strong>Linux + 2x RTX 4090</strong> | 48 GB VRAM | ~$4,500 | High throughput, parallel inference |</p><p><strong>Apple Silicon advantage:</strong> Unified memory means the GPU can access all system RAM. A 192 GB Mac Studio can run models that would require multiple $2,000 GPUs on Linux.</p><h3>Ongoing Costs</h3><p>| Cost | Monthly | Annual |</p><p>|------|---------|--------|</p><p>| <strong>Electricity</strong> (always-on Mac Studio) | $10-15 | $120-180 |</p><p>| <strong>Internet</strong> (already have it) | $0 incremental | $0 |</p><p>| <strong>Software</strong> (Ollama, open-source models) | $0 | $0 |</p><p>| <strong>Maintenance time</strong> (~2 hours/month) | Time cost | Time cost |</p><p>| <strong>Total cash cost</strong> | <strong>$10-15</strong> | <strong>$120-180</strong> |</p><h2>Breakeven Analysis</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZKWP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZKWP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZKWP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZKWP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZKWP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZKWP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZKWP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZKWP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZKWP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZKWP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb842fc-cddf-4f54-888d-f94ff055070b_1172x1548.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><h3>Scenario 1: Light Automation</h3><p><strong>Setup:</strong> Mac Mini 32 GB ($800) running morning briefings and email triage.</p><p><strong>Cloud alternative:</strong> ~$150/month in API calls (500 calls/day, mixed models).</p><p><strong>Breakeven:</strong> $800 &#247; $150/month = <strong>5.3 months</strong></p><p><strong>Year 1 savings:</strong> ($150 &#215; 12) - $800 - $150 electricity = <strong>$850</strong></p><h3>Scenario 2: Content Creator</h3><p><strong>Setup:</strong> Mac Mini 48 GB ($1,400) running content pipeline, research, and repurposing.</p><p><strong>Cloud alternative:</strong> ~$400/month in API calls (content generation is token-heavy).</p><p><strong>Breakeven:</strong> $1,400 &#247; $400/month = <strong>3.5 months</strong></p><p><strong>Year 1 savings:</strong> ($400 &#215; 12) - $1,400 - $150 = <strong>$3,250</strong></p><h3>Scenario 3: Full Automation</h3><p><strong>Setup:</strong> Mac Studio 192 GB ($5,000) running 26 daily tasks, content pipeline, multi-agent council.</p><p><strong>Cloud alternative:</strong> ~$2,000/month in API calls (thousands of daily calls across multiple agents).</p><p><strong>Breakeven:</strong> $5,000 &#247; $2,000/month = <strong>2.5 months</strong></p><p><strong>Year 1 savings:</strong> ($2,000 &#215; 12) - $5,000 - $180 = <strong>$18,820</strong></p><h3>The Pattern</h3><p>The more you automate, the faster local infrastructure pays for itself. Light users might take a year to break even. Heavy automation users break even in months.</p><h2>Beyond Dollar Savings: Hidden ROI</h2><p>The financial math is compelling, but the less obvious benefits matter too.</p><h3>Privacy ROI</h3><p>With local AI, sensitive business data never leaves your machine. No data processing agreements. No compliance concerns about which country your data is processed in. No risk of training data leakage.</p><p><strong>For regulated industries</strong> (healthcare, legal, finance), this alone can justify the hardware cost&#8212;the alternative is expensive enterprise AI contracts with compliance guarantees.</p><h3>Availability ROI</h3><p>Cloud APIs have outages. Rate limits. Capacity constraints during peak hours. Your automated pipeline at 6 AM shouldn't depend on whether a cloud provider's servers are congested.</p><p>Local AI is available whenever your computer is on. No rate limits. No outages (except your own hardware). No "please try again later."</p><h3>Latency ROI</h3><p>Local inference is fast&#8212;especially on Apple Silicon. A Gemma 4 26B running locally generates tokens faster than most cloud APIs deliver them, because there's no network round trip.</p><p>For interactive use, this means snappier responses. For automation, this means faster pipeline throughput.</p><h3>Experimentation ROI</h3><p>When every API call costs money, you hesitate to experiment. With local models, experimentation is free. Try 50 different prompt variations. Run A/B tests on voice profiles. Process your entire email archive to build training data. The marginal cost is zero.</p><p>This freedom to experiment accelerates learning and leads to better automation designs.</p><h2>How I Actually Do This</h2><p>I run a Mac Studio M3 Ultra with 256 GB unified memory. Here's the real financial picture:</p><h3>My Costs</h3><p>| Item | Cost |</p><p>|------|------|</p><p>| Mac Studio M3 Ultra 256 GB | $7,000 (one-time) |</p><p>| Electricity (~120W average, 24/7) | ~$12/month |</p><p>| Cloud Claude (10% of tasks) | ~$20/month (Pro subscription) |</p><p>| <strong>Total monthly ongoing</strong> | <strong>~$32/month</strong> |</p><h3>What I'd Pay With Cloud APIs</h3><p>| Workload | Estimated Monthly Cloud Cost |</p><p>|----------|----------------------------|</p><p>| 26 scheduled agent tasks | $800-1,200 |</p><p>| Content pipeline (ACA Council) | $400-600 |</p><p>| Ad-hoc development assistance | $200-400 |</p><p>| Research and analysis | $100-200 |</p><p>| <strong>Total estimated</strong> | <strong>$1,500-2,400/month</strong> |</p><h3>My Breakeven</h3><p>$7,000 &#247; $1,500/month = <strong>4.7 months</strong></p><p>I passed breakeven months ago. Every month now is pure savings.</p><h3>The Honest Caveats</h3><p>1. <strong>Cloud Claude is still better for some tasks.</strong> Complex architectural decisions, nuanced code review, novel problem-solving&#8212;I still reach for cloud Claude. Local models handle 90% of the volume but not 100% of the difficulty.</p><p>2. <strong>Setup time is real.</strong> I spent about 40 hours over several weeks getting the full automation stack running. That's an investment of time that wouldn't exist with cloud APIs.</p><p>3. <strong>Hardware depreciates.</strong> In 3-4 years, I'll want newer hardware. The Mac Studio will still work, but newer models will be faster and more capable. Budget for replacement cycles.</p><p>4. <strong>Not everyone needs this.</strong> If you make 20 AI calls a day interactively, a Claude Pro subscription ($20/month) is the right answer. Local infrastructure makes sense when you're automating at volume.</p><h2>Decision Framework</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CEXT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CEXT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CEXT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CEXT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CEXT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CEXT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CEXT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CEXT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CEXT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CEXT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d99dc3-355c-41aa-9e62-a2c7390b32e7_2368x1138.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><h4><strong>Choose Cloud When:</strong></h4><p><br>- You're just starting with AI (explore before investing)<br>- Your usage is primarily interactive (chatting, not automating)<br>- You need frontier model quality for every task<br>- You want zero hardware management<br>- Monthly API costs stay under $100</p><p></p><h4><strong>Choose Local When:</strong></h4><p><br>- You're automating workflows that run daily/hourly<br>- Privacy is a requirement (regulated industry, sensitive data)<br>- You'd spend $200+/month on cloud APIs<br>- You want unlimited experimentation without cost anxiety<br>- You're running multiple concurrent AI tasks</p><p></p><h4><strong>Choose Hybrid (Best for Most):</strong></h4><p><br>- Local models for volume tasks (triage, automation, content generation)<br>- Cloud models for high-value tasks (complex reasoning, frontier quality)<br>- Result: 90% of compute is free, 10% is cloud-quality</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/whats-the-roi-of-local-ai-infrastructure?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/whats-the-roi-of-local-ai-infrastructure?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://astgl.com/p/whats-the-roi-of-local-ai-infrastructure?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>Frequently Asked Questions</h2><h3>Can I start with a cheaper machine and upgrade later?</h3><p>Absolutely. A Mac Mini with 32 GB ($800) runs a solid automation stack. If you outgrow it, sell it (Macs hold resale value well) and upgrade. You don't need to start with the most expensive option.</p><h3>What about Linux with NVIDIA GPUs?</h3><p>Competitive for raw inference speed&#8212;an RTX 4090 (24 GB VRAM) is fast. But limited VRAM means you can only run one large model at a time. For multi-model architectures (triage + workhorse + specialist), Apple Silicon's unified memory is more flexible. Linux rigs are better for single-model, high-throughput workloads.</p><h3>Does model quality improve fast enough to justify local hardware?</h3><p>Yes. Open-source models improve dramatically every 6-12 months. A 26B model today outperforms a 70B model from two years ago. Your hardware runs better models over time without any additional cost&#8212;just download the new model.</p><h3>What if I already have a powerful gaming PC?</h3><p>If it has an NVIDIA GPU with 12+ GB VRAM, you can run local AI today at zero additional cost. Install Ollama, pull a model, and start experimenting. This is the cheapest possible entry point.</p><h3>Is the electricity cost significant?</h3><p>No. A Mac Studio draws about 40-120W depending on load. At US average electricity rates (~$0.15/kWh), that's $4-13/month running 24/7. An RTX 4090 draws more (300-450W under load) but idles much lower. Electricity is a rounding error compared to API costs.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/whats-the-roi-of-local-ai-infrastructure/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://astgl.com/p/whats-the-roi-of-local-ai-infrastructure/comments"><span>Leave a comment</span></a></p><p></p><p>*This is part of the <strong><a href="https://astgl.ai/answers/">ASTGL Definitive Answers</a></strong> series&#8212;structured, practical answers to the questions people actually ask about AI automation, MCP servers, and local AI infrastructure.*</p>]]></content:encoded></item><item><title><![CDATA[How Do I Build an AI Pipeline for Content Creation?]]></title><description><![CDATA[The Short Answer
An AI content pipeline takes raw ideas and produces finished, distributed content through automated stages.]]></description><link>https://astgl.com/p/how-do-i-build-an-ai-pipeline-for</link><guid isPermaLink="false">https://astgl.com/p/how-do-i-build-an-ai-pipeline-for</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 13 Apr 2026 03:11:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Pa23!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Writing one blog post is straightforward. Turning that post into a newsletter, social threads, SEO metadata, and platform-specific variations&#8212;that's where the hours disappear.</p><p>A content pipeline automates the repetitive parts so you focus on ideas, not formatting. Here's how to build one, from simple to fully autonomous.</p><h2>The Short Answer</h2><p>An AI content pipeline takes raw ideas and produces finished, distributed content through automated stages. The simplest pipeline has 3 stages. A production pipeline has 7 or more.</p><p>| Pipeline Level | Stages | Human Involvement | Output |</p><p>|---------------|--------|-------------------|--------|</p><p>| <strong>Basic</strong> | Write &#8594; Format &#8594; Publish | High&#8212;you drive every step | 1 article |</p><p>| <strong>Intermediate</strong> | Research &#8594; Write &#8594; Repurpose &#8594; Publish | Medium&#8212;review at checkpoints | 1 article + 10 derivatives |</p><p>| <strong>Advanced</strong> | Discover &#8594; Research &#8594; Write &#8594; Edit &#8594; Fact-check &#8594; Repurpose &#8594; Publish | Low&#8212;review final output | 1 article + 25+ derivatives |</p><h2>Pipeline Architecture: The 7 Stages</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Pa23!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pa23!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Pa23!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Pa23!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Pa23!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pa23!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Pa23!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Pa23!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Pa23!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Pa23!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b8721c-d559-4523-b74e-366f9594e32a_2368x164.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>Every content pipeline, regardless of complexity, follows the same logical stages. You can automate as many or as few as you want.</p><h3>Stage 1: Discovery</h3><p><strong>What:</strong> Find topics worth writing about.</p><p><strong>How:</strong> AI monitors news feeds, social media trends, competitor content, and search queries in your niche. It surfaces topics with high interest and low competition.</p><p><strong>Manual version:</strong> You browse industry sites and note ideas.</p><p><strong>Automated version:</strong> A scheduled agent searches 10+ sources daily and delivers a ranked topic list every morning.</p><h3>Stage 2: Research</h3><p><strong>What:</strong> Gather information, data, and sources for the chosen topic.</p><p><strong>How:</strong> AI searches the web, reads relevant articles, extracts key facts, and compiles a structured research brief.</p><p><strong>Output:</strong> A 1-2 page brief with key points, statistics, source URLs, and suggested angles.</p><h3>Stage 3: Drafting</h3><p><strong>What:</strong> Write the first draft.</p><p><strong>How:</strong> AI takes the research brief, applies your voice profile and article template, and generates a full draft.</p><p><strong>Critical input:</strong> A voice profile&#8212;a document that describes your writing style, preferred vocabulary, sentence patterns, and tone. Without this, AI output sounds generic. With it, the draft sounds like you.</p><h3>Stage 4: Editing</h3><p><strong>What:</strong> Improve the draft's quality, flow, and accuracy.</p><p><strong>How:</strong> AI reviews for clarity, removes filler, tightens sentences, checks structure against the template, and verifies the voice matches your profile.</p><p>This is best done as a separate pass with a different prompt than the drafting stage. A fresh "editor" perspective catches issues the "writer" misses.</p><h3>Stage 5: Fact-Checking</h3><p><strong>What:</strong> Verify claims, statistics, and technical accuracy.</p><p><strong>How:</strong> AI identifies every factual claim in the article, searches for supporting sources, flags anything unverified, and provides confidence ratings.</p><p><strong>Two-phase approach:</strong></p><p>1. <strong>Extraction:</strong> Pull every claim from the article</p><p>2. <strong>Verification:</strong> Check each claim against web sources and known data</p><p>This step catches hallucinations before they reach your audience.</p><h3>Stage 6: Repurposing</h3><p><strong>What:</strong> Transform the article into platform-specific content pieces.</p><p><strong>How:</strong> AI reads the finished article and generates variations for every distribution channel.</p><p>| Derivative | Platform | Format |</p><p>|-----------|----------|--------|</p><p>| 5 social posts | LinkedIn, X, Facebook, Instagram, Threads | Platform-native length and style |</p><p>| 5 short-form notes | Substack Notes | Teaser + link |</p><p>| 1 newsletter intro | Email | Hook paragraph + article link |</p><p>| 1 SEO document | Search engines | Meta description, keywords, schema markup |</p><p>| 1 voiceover script | Podcast / video | Conversational spoken version |</p><p>| 5 graphic suggestions | Design tools | Visual concepts with text overlays |</p><p>| 3 pull quotes | Social graphics | Shareable quote cards |</p><p><strong>One article &#8594; 25+ content pieces.</strong> The marginal cost of each derivative is near zero.</p><h3>Stage 7: Publishing</h3><p><strong>What:</strong> Distribute content to all channels.</p><p><strong>How:</strong> Automated posting through APIs, MCP servers, or scheduling tools.</p><p><strong>Current best practice:</strong> Publish to your own site first (canonical URL), then syndicate to Substack, social platforms, and newsletters. This is POSSE&#8212;Publish Own Site, Syndicate Everywhere.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h2>Building Your First Pipeline</h2><p>Start simple. You can always add stages.</p><h3>Level 1: Manual Pipeline (30 Minutes)</h3><p><strong>Tools needed:</strong> Claude with filesystem MCP server.</p><p>1. Write an article (or paste an existing one)</p><p>2. Ask Claude: "Read this article and generate 5 LinkedIn posts, 5 tweets, a newsletter intro, and SEO metadata."</p><p>3. Review and publish manually</p><p><strong>Time investment:</strong> 30 minutes per article cycle.</p><p><strong>Output:</strong> 1 article + ~15 derivatives.</p><h3>Level 2: Template Pipeline (15 Minutes)</h3><p><strong>Tools needed:</strong> Claude Code with custom commands.</p><p>Create a slash command (`.claude/commands/repurpose.md`) that contains your repurposing prompt with voice profile, platform specs, and output format. Then:</p><pre><code>/repurpose path/to/article.md</code></pre><p>One command generates all derivatives. You review and publish.</p><p><strong>Time investment:</strong> 15 minutes per article cycle.</p><p><strong>Output:</strong> 1 article + 25+ derivatives.</p><h3>Level 3: Automated Pipeline (5 Minutes of Review)</h3><p><strong>Tools needed:</strong> Local AI (Ollama), scheduling (OpenClaw/cron/n8n), MCP servers.</p><p>The pipeline runs on schedule:</p><p>1. Discovery agent finds a topic (or you assign one)</p><p>2. Research agent compiles a brief</p><p>3. Draft agent writes the article</p><p>4. Edit agent polishes it</p><p>5. Fact-check agent verifies claims</p><p>6. Repurpose agent generates derivatives</p><p>7. Draft appears in your review queue</p><p><strong>Your only job:</strong> Read the final output, approve or request changes, hit publish.</p><p><strong>Time investment:</strong> 5 minutes per article cycle (review only).</p><p><strong>Output:</strong> 1 article + 25+ derivatives, fully automated.</p><h2>Voice Profiles: The Secret to Human-Sounding AI Content</h2><p>The #1 differentiator between generic AI content and content that sounds like you is the voice profile.</p><h3>What a Voice Profile Contains</h3><pre><code>## Writing Voice: [Your Name]

### Tone
- Conversational but authoritative
- Direct &#8212; lead with the answer, not the preamble
- Practical over theoretical

### Sentence Structure
- Short sentences (10-15 words average)
- Active voice (95%+)
- Start paragraphs with statements, not questions

### Vocabulary
- Plain language &#8212; "use" not "utilize", "help" not "facilitate"
- Technical terms only when the audience expects them
- No corporate jargon: avoid "leverage", "synergy", "paradigm"

### Patterns to Follow
- Open with a hook that acknowledges the reader's problem
- Use tables for comparisons
- Include "How I Actually Do This" sections with real examples
- End FAQ sections with practical answers, not theory

### Patterns to Avoid
- Never use "In today's fast-paced world..."
- Never start with a definition from Wikipedia
- No filler paragraphs that don't add information
- Don't hedge excessively &#8212; state positions clearly</code></pre><h3>How to Build Your Voice Profile</h3><p>1. <strong>Gather 5-10 pieces of your best writing</strong>&#8212;articles, emails, presentations</p><p>2. <strong>Ask AI to analyze your voice:</strong> "Read these writing samples and describe my writing style&#8212;tone, sentence structure, vocabulary choices, recurring patterns."</p><p>3. <strong>Edit the analysis</strong>&#8212;AI will capture 80%, you refine the rest</p><p>4. <strong>Include it in every content prompt</strong>&#8212;either inline or as a system prompt</p><h2>How I Actually Do This</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CziU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CziU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CziU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CziU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CziU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CziU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CziU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CziU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CziU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CziU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519d6c25-aecf-4215-9aab-11b29aa0fedb_2130x1088.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>I run a multi-agent content pipeline called the ACA Council. Five specialized agents handle different stages:</p><h3>The ACA Council</h3><p>| Agent | Role | What It Does |</p><p>|-------|------|-------------|</p><p>| <strong>SCOUT</strong> | Discovery &amp; Research | Monitors 15+ sources, surfaces trending topics, compiles research briefs |</p><p>| <strong>FORGE</strong> | Outlining &amp; Structure | Takes research briefs and generates structured article outlines |</p><p>| <strong>QUILL</strong> | Drafting | Writes full articles following voice profile and article templates |</p><p>| <strong>LEDGER</strong> | Fact-Checking &amp; Validation | Two-phase verification of every claim, flags uncertainties |</p><p>| <strong>MAVEN</strong> | SEO &amp; Distribution | Generates all derivative content, optimizes for search and social |</p><h3>The Daily Schedule</h3><p>The Council meets twice daily:</p><ul><li><p><strong>Morning session (7 AM):</strong> SCOUT presents research, team prioritizes topics</p></li><li><p><strong>Evening session (8 PM):</strong> Review completed articles, queue for publishing</p></li></ul><h3>The 7-Step Build Pipeline</h3><p>For each article:</p><p>1. SCOUT delivers a research brief</p><p>2. FORGE generates the outline</p><p>3. QUILL writes the draft using voice profile</p><p>4. LEDGER fact-checks (two-phase: extract claims &#8594; verify sources)</p><p>5. Human review checkpoint (me&#8212;5 minutes)</p><p>6. MAVEN generates 25+ derivatives</p><p>7. Auto-publish to site, sync to Substack, queue social posts</p><h3>Results</h3><ul><li><p><strong>Output:</strong> 3-5 articles per week with full distribution packages</p></li><li><p><strong>My time per article:</strong> ~10 minutes (topic approval + final review)</p></li><li><p><strong>AI time per article:</strong> ~20 minutes of model compute</p></li><li><p><strong>Cloud API cost:</strong> $0/month&#8212;everything runs on local Ollama models</p></li><li><p><strong>Quality:</strong> Consistent voice, verified facts, platform-optimized distribution</p></li></ul><h2>Common Pipeline Mistakes</h2><p>| Mistake | Why It Fails | Fix |</p><p>|---------|-------------|-----|</p><p>| No voice profile | Content sounds generic and robotic | Build a voice profile from your existing writing |</p><p>| Skipping fact-check | AI hallucinates statistics and quotes | Always run a verification pass before publishing |</p><p>| One-shot generation | Single prompt produces mediocre results | Split into stages&#8212;research, draft, edit are separate steps |</p><p>| No human review | Errors slip through, voice drifts | Always scan final output before publishing |</p><p>| Over-automating too early | Complex pipeline before simple one is proven | Start manual, automate one stage at a time |</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-i-build-an-ai-pipeline-for?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-i-build-an-ai-pipeline-for?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://astgl.com/p/how-do-i-build-an-ai-pipeline-for?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>Frequently Asked Questions</h2><h3>How long does it take to build a content pipeline?</h3><p>A basic manual pipeline (Level 1) takes 30 minutes to set up. A template pipeline (Level 2) takes 1-2 hours. A fully automated pipeline (Level 3) takes 1-2 weeks of iterating on prompts, voice profiles, and scheduling. Start at Level 1 and upgrade when you feel the friction.</p><h3>Will Google penalize AI-generated content?</h3><p>Google penalizes low-quality content, regardless of how it's created. AI content that's well-researched, accurate, and genuinely useful ranks well. The key factors: original insights (your "How I Actually Do This" sections), verified facts, and genuine expertise. A pipeline that produces generic AI slop will be penalized. One that produces expert-informed, fact-checked content won't.</p><h3>Can I use this for client work?</h3><p>Yes, with transparency. Many agencies use AI pipelines to increase throughput. The ethical approach: AI handles research, drafting, and repurposing; humans provide expertise, review, and final approval. Disclose AI assistance if your clients expect it.</p><h3>How do I handle topics the AI gets wrong?</h3><p>This is why the fact-checking stage exists. For technical topics, include authoritative sources in the research brief so the AI has correct information to work from. For evolving topics, always include a web search step to get current data. And always review&#8212;the pipeline produces drafts, not published pieces.</p><h3>What's the best AI model for content pipelines?</h3><p>For drafting: Gemma 4 26B or 31B (best voice quality at the local tier). For fact-checking: a model with web search access. For repurposing: Gemma 4 26B (handles format transformation well). For the full pipeline on a budget: a single Gemma 4 26B handles all stages adequately.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-i-build-an-ai-pipeline-for/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://astgl.com/p/how-do-i-build-an-ai-pipeline-for/comments"><span>Leave a comment</span></a></p><p></p><p>*This is part of the <strong><a href="https://astgl.ai/answers/">ASTGL Definitive Answers</a></strong> series&#8212;structured, practical answers to the questions people actually ask about AI automation, MCP servers, and local AI infrastructure.*</p>]]></content:encoded></item><item><title><![CDATA[Can Small Businesses Benefit from MCP Servers?]]></title><description><![CDATA[Small businesses run on limited time and limited people. 
MCP servers change that math. They let AI handle the repetitive work using the tools you already have.]]></description><link>https://astgl.com/p/can-small-businesses-benefit-from</link><guid isPermaLink="false">https://astgl.com/p/can-small-businesses-benefit-from</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 13 Apr 2026 03:02:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!52Vx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Small businesses run on limited time and limited people. Every hour spent on repetitive tasks&#8212;reformatting content, sorting email, prepping for meetings&#8212;is an hour not spent growing the business.</p><p>MCP servers change that math. They let AI handle the repetitive work using the tools you already have. No enterprise budget. No IT department. No coding.</p><h2>The Short Answer</h2><p>Yes. MCP servers give small businesses access to the same AI automation capabilities that enterprises are spending millions on&#8212;at a fraction of the cost. The ROI is immediate and measurable.</p><p>| Business Size | Without MCP | With MCP |</p><p>|--------------|-------------|----------|</p><p>| <strong>Solo operator</strong> | You do everything manually | AI handles content, email, research while you focus on clients |</p><p>| <strong>Small team (2-10)</strong> | Everyone wears multiple hats | AI automates shared workflows &#8212; briefings, reports, scheduling |</p><p>| <strong>Growing business (10-50)</strong> | Processes are inconsistent, tribal knowledge | AI standardizes workflows and makes knowledge accessible |</p><h2>The Five Highest-ROI Automations for Small 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_!52Vx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!52Vx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg 424w, https://substackcdn.com/image/fetch/$s_!52Vx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg 848w, https://substackcdn.com/image/fetch/$s_!52Vx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!52Vx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!52Vx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!52Vx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg 424w, https://substackcdn.com/image/fetch/$s_!52Vx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg 848w, https://substackcdn.com/image/fetch/$s_!52Vx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!52Vx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19df8af4-f16d-4a2a-8e94-c23eb8791204_2368x372.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>These five automations deliver the most time savings for the least setup effort. Start with one, prove the value, then add more.</p><h3>1. Content Repurposing (Save 2-4 Hours Per Article)</h3><p>You write one blog post. MCP-connected AI turns it into:</p><p>| Output | Platform | Time to Create Manually |</p><p>|--------|----------|------------------------|</p><p>| 5 social media posts | LinkedIn, X, Facebook, Instagram, Threads | 45 min |</p><p>| 1 newsletter intro | Email / Substack | 20 min |</p><p>| 1 SEO summary | Google / site meta | 15 min |</p><p>| 3 pull quotes | Social graphics | 15 min |</p><p>| 1 thread/carousel | X or LinkedIn | 30 min |</p><p>| 5 Substack Notes | Substack | 25 min |</p><p>| 1 voiceover script | Podcast / video | 20 min |</p><p>| 5 alt-angle headlines | A/B testing | 15 min |</p><p><strong>Total manual time: ~3 hours. With AI: ~15 minutes</strong> (review and approve drafts).</p><p>The AI reads your original article through the filesystem MCP server, generates all the variations, and saves them as files. You review, tweak if needed, and publish.</p><p><strong>One article &#8594; 25+ content pieces.</strong> For a small business publishing weekly, that's 12+ hours saved per month.</p><h3>2. Morning Briefing (Save 30 Minutes Per Day)</h3><p>Instead of checking email, calendar, tasks, and news manually each morning:</p><p><strong>Setup:</strong> Connect Calendar + Email + Task Manager + Web Search MCP servers.</p><p><strong>What AI delivers at 6:30 AM:</strong></p><ul><li><p>Today's meetings with prep notes</p></li><li><p>Important emails that need attention (prioritized)</p></li><li><p>Overdue tasks</p></li><li><p>Relevant industry news</p></li></ul><p><strong>Monthly time saved:</strong> ~10 hours</p><p>This one automation pays for a Claude Pro subscription ($20/month) in the first week.</p><h3>3. Email Triage and Draft Responses (Save 30-60 Minutes Per Day)</h3><p><strong>Setup:</strong> Connect Gmail MCP server.</p><p><strong>How it works:</strong></p><ul><li><p>AI reads incoming emails</p></li><li><p>Classifies by priority (urgent, important, routine, spam)</p></li><li><p>Drafts responses for routine emails</p></li><li><p>Flags emails that need your personal attention</p></li></ul><p>You review the drafts, hit send on the good ones, and personally handle only the ones that matter. Instead of reading 50 emails, you review 10 drafts and write 5 personal responses.</p><p><strong>Monthly time saved:</strong> 10-20 hours</p><h3>4. Meeting Prep and Follow-Up (Save 20-30 Minutes Per Meeting)</h3><p><strong>Setup:</strong> Connect Calendar + Email + CRM MCP servers.</p><p><strong>Before the meeting, AI generates:</strong></p><ul><li><p>Attendee background (from CRM and recent emails)</p></li><li><p>Last interaction summary</p></li><li><p>Suggested talking points</p></li><li><p>Relevant documents or proposals</p></li></ul><p><strong>After the meeting, AI generates:</strong></p><ul><li><p>Action item list</p></li><li><p>Follow-up email drafts</p></li><li><p>Updated CRM notes</p></li><li><p>Calendar entries for follow-ups</p></li></ul><p>For a business with 5 meetings per week, that's 8-12 hours saved per month.</p><h3>5. Competitive Research (Save 1-2 Hours Per Week)</h3><p><strong>Setup:</strong> Connect Web Search MCP server.</p><p><strong>Weekly automated research:</strong></p><ul><li><p>Competitor website changes</p></li><li><p>New product announcements in your space</p></li><li><p>Industry news and trends</p></li><li><p>Social media mentions of competitors</p></li></ul><p>AI summarizes everything into a structured brief. You read a 2-page summary instead of spending hours browsing websites and social feeds.</p><p><strong>Monthly time saved:</strong> 4-8 hours</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h2>The ROI Math</h2><p>Let's make this concrete. Assume a small business owner's time is worth $75/hour (conservatively).</p><p>| Automation | Monthly Hours Saved | Monthly Value |</p><p>|-----------|-------------------|---------------|</p><p>| Content repurposing | 12 hours | $900 |</p><p>| Morning briefing | 10 hours | $750 |</p><p>| Email triage | 15 hours | $1,125 |</p><p>| Meeting prep/follow-up | 10 hours | $750 |</p><p>| Competitive research | 6 hours | $450 |</p><p>| <strong>Total</strong> | <strong>53 hours</strong> | <strong>$3,975</strong> |</p><p><strong>Monthly cost:</strong></p><ul><li><p>Claude Pro: $20/month</p></li><li><p>Or local models (Ollama on a Mac Mini): ~$600 one-time, $0/month ongoing</p></li></ul><p>Even with just one or two of these automations, the ROI is overwhelming.</p><h2>Getting Started: The 30-Minute Setup</h2><p>Here's the fastest path from zero to your first useful automation.</p><h3>Minute 0-5: Install Claude Desktop</h3><p>Download from <a href="https://claude.ai">claude.ai</a>, install, and log in. A Claude Pro subscription ($20/month) includes MCP server support.</p><h3>Minute 5-10: Install Node.js</h3><p>This is the one-time prerequisite. Download from <a href="https://nodejs.org">nodejs.org</a> (LTS version), install, done.</p><h3>Minute 10-20: Add Your First MCP Servers</h3><p>Open Claude Desktop settings and add two servers:</p><p><strong>Filesystem</strong> (access your business documents):</p><pre><code>{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem",
               "/path/to/your/business/documents"]
    }
  }
}</code></pre><p><strong>Web Search</strong> (research capabilities):</p><pre><code>{
  "mcpServers": {
    "filesystem": { "..." },
    "web-search": {
      "command": "npx",
      "args": ["-y", "@anthropic/mcp-server-web-search"],
      "env": {
        "BRAVE_API_KEY": "your-free-api-key"
      }
    }
  }
}</code></pre><h3>Minute 20-30: Run Your First Automation</h3><p>Restart Claude Desktop. Then try:</p><blockquote><p>"Read my latest blog post from Documents/blog/ and create 5 LinkedIn posts, 3 tweet-length posts, and a newsletter introduction from it."</p></blockquote><p>Claude reads the file through the filesystem server, generates all the content variations, and presents them. Copy, review, publish.</p><p>You just saved 2 hours of work in 10 minutes.</p><h2>Scaling Up: Month-by-Month Plan</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nH7i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nH7i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nH7i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nH7i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nH7i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nH7i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nH7i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nH7i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nH7i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nH7i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b4f337-74ab-4f19-adc1-162f22642b87_2072x700.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><h3>Month 1: Foundation</h3><ul><li><p>Set up filesystem + web search MCP servers</p></li><li><p>Use Claude for content repurposing (manual&#8212;you ask each time)</p></li><li><p>Track time saved vs. time spent</p></li></ul><h3>Month 2: Communication</h3><ul><li><p>Add Gmail MCP server</p></li><li><p>Start using email triage and draft responses</p></li><li><p>Add Google Calendar server for meeting prep</p></li></ul><h3>Month 3: Automation</h3><ul><li><p>Set up scheduled tasks (morning briefing via OpenClaw or n8n)</p></li><li><p>Create templates for recurring workflows</p></li><li><p>Add CRM or project management MCP server</p></li></ul><h3>Month 4+: Optimization</h3><ul><li><p>Refine prompts based on output quality</p></li><li><p>Add specialized servers for your industry</p></li><li><p>Consider local models (Ollama) to eliminate API costs</p></li></ul><h2>How I Actually Do This</h2><p>I use MCP servers to run a content-first small business. Here's the actual pipeline:</p><h3>Content Pipeline (1 Article &#8594; 25+ Pieces)</h3><p>My ACA Council&#8212;five specialized AI agents&#8212;handles the full content lifecycle:</p><p>1. <strong>SCOUT</strong> finds trending topics and research material</p><p>2. <strong>FORGE</strong> generates structured outlines</p><p>3. <strong>QUILL</strong> writes the draft</p><p>4. <strong>LEDGER</strong> fact-checks and validates claims</p><p>5. <strong>MAVEN</strong> optimizes for SEO and generates distribution pieces</p><p>One article generates: the full blog post, SEO metadata, social posts for 5 platforms, a newsletter version, Substack Notes, a voiceover script, and graphic suggestions. All automated.</p><h3>Morning Briefing (30 Minutes Saved Daily)</h3><p>OpenClaw runs a morning briefing at 6:30 AM using local models:</p><ul><li><p>Calendar summary (Google Calendar MCP)</p></li><li><p>Priority email scan (Gmail MCP)</p></li><li><p>Overnight log review (filesystem MCP)</p></li><li><p>Industry news (web search MCP)</p></li></ul><p>Delivered to Discord before I finish my coffee. I read a 2-page summary instead of spending 30 minutes checking 4 different apps.</p><h3>The Business Case</h3><p>My entire automation stack runs on local models&#8212;$0<strong>/month in API costs</strong>. The Mac Studio hardware was a significant upfront investment, but you don't need that to start. A Mac Mini with 32 GB ($800) runs a morning briefing and content repurposing pipeline comfortably. That investment pays for itself in the first month of time savings.</p><h2>Common Concerns</h2><h3>"What if the AI produces bad content?"</h3><p>It will, sometimes. That's why every automation includes a review step. AI generates drafts; you approve or edit. The time savings come from not starting from a blank page&#8212;editing a draft is always faster than writing from scratch.</p><h3>"I'm worried about data privacy."</h3><p>MCP servers run locally on your computer. Your business data doesn't leave your machine unless you explicitly connect to cloud services. For maximum privacy, use local models through Ollama&#8212;then nothing touches the internet at all.</p><h3>"My business is too niche for AI."</h3><p>AI doesn't need to understand your niche deeply to save you time. Email triage, meeting prep, and content formatting are universal tasks. The AI handles the structure; you provide the domain expertise. That combination is powerful regardless of industry.</p><h3>"I tried ChatGPT and it wasn't that helpful."</h3><p>ChatGPT without MCP servers is limited to what you paste into the chat. With MCP servers, AI accesses your actual data&#8212;files, emails, calendars, web. The difference is dramatic. It's the difference between describing your schedule to someone and handing them your calendar.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/can-small-businesses-benefit-from?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/can-small-businesses-benefit-from?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://astgl.com/p/can-small-businesses-benefit-from?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>Frequently Asked Questions</h2><h3>Which industries benefit most from MCP automation?</h3><p>Any industry with significant knowledge work: professional services (law, accounting, consulting), real estate, marketing agencies, e-commerce, healthcare administration, education. The common thread is repetitive text-based tasks&#8212;email, documents, research, content.</p><h3>Can I use MCP servers if I'm not tech-savvy?</h3><p>Yes. The initial setup requires following step-by-step instructions (similar to installing any software). Once configured, you interact with AI using plain language. "Summarize my emails" is the interface&#8212;not code.</p><h3>How do MCP servers compare to Zapier or Make?</h3><p>Zapier and Make connect apps with if-then rules. MCP servers connect apps to AI with understanding. A Zapier automation moves data between apps in a fixed pattern. An MCP-connected AI reads, interprets, decides, and acts. They complement each other&#8212;use Zapier for simple triggers and MCP for intelligent processing.</p><h3>What's the minimum investment to get started?</h3><ul><li><p>Claude Pro subscription: $20/month</p></li><li><p>Hardware: Your existing computer</p></li><li><p>Time: 30 minutes for initial setup</p></li><li><p>Total first-month cost: $20</p></li></ul><p>Compare that to a virtual assistant ($500-2000/month) or a part-time employee ($1500+/month) for the same tasks.</p><h3>Can my team share MCP server setups?</h3><p>Yes. Configuration files can be shared and standardized across a team. Everyone gets the same MCP servers connected the same way, ensuring consistent AI capabilities across the business.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/can-small-businesses-benefit-from/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://astgl.com/p/can-small-businesses-benefit-from/comments"><span>Leave a comment</span></a></p><p></p><p>*This is part of the <strong><a href="https://astgl.ai/answers/">ASTGL Definitive Answers</a></strong> series&#8212;structured, practical answers to the questions people actually ask about AI automation, MCP servers, and local AI infrastructure.*</p>]]></content:encoded></item><item><title><![CDATA[Can I Use MCP Servers Without Being a Developer?]]></title><description><![CDATA[The Short Answer

Yes, you can use MCP servers without being a developer.]]></description><link>https://astgl.com/p/can-i-use-mcp-servers-without-being</link><guid isPermaLink="false">https://astgl.com/p/can-i-use-mcp-servers-without-being</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 13 Apr 2026 02:51:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bTZ3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You don't need to write code to use MCP servers. You don't need to understand APIs, protocols, or SDKs. If you can edit a text file and follow instructions, you can connect AI to your real tools in minutes.</p><p>Here's exactly how&#8212;three methods, zero coding required.</p><h2>The Short Answer</h2><p>Yes, you can use MCP servers without being a developer. The setup involves editing a configuration file or running a single command. No programming skills needed.</p><p>| Method | Difficulty | Time to Set Up | Best For |</p><p>|--------|-----------|----------------|----------|</p><p>| <strong>Claude Desktop</strong> | Copy-paste a config block | 5-10 minutes | Non-technical users who want a GUI |</p><p>| <strong>Claude Code CLI</strong> | Run one command per server | 2-3 minutes | Anyone comfortable with a terminal |</p><p>| <strong>VS Code</strong> | GUI settings panel | 5-10 minutes | People already using VS Code |</p><h2>Prerequisites (One-Time Setup)</h2><p>Before installing MCP servers, you need two things on your computer. If you already have them, skip ahead.</p><h3>Node.js</h3><p>Most MCP servers are built with Node.js. Install it once and forget about it.</p><p><strong>Mac:</strong></p><pre><code># Open Terminal and run:
brew install node</code></pre><p><strong>Windows:</strong></p><p>Download from <a href="https://nodejs.org">nodejs.org</a> and run the installer. Choose the LTS version.</p><p><strong>Verify it's installed:</strong></p><pre><code>node --version
# Should show something like: v22.x.x</code></pre><h3>Python (Optional)</h3><p>Some MCP servers use Python instead of Node.js. Install it if you encounter a Python-based server.</p><p><strong>Mac:</strong></p><pre><code>brew install python</code></pre><p><strong>Windows:</strong></p><p>Download from <a href="https://python.org">python.org</a>. Check "Add to PATH" during installation.</p><p>That's it for prerequisites. You won't need to write any JavaScript or Python&#8212;these are just runtimes that MCP servers need to execute.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h2>Method 1: Claude Desktop (GUI)</h2><p>Claude Desktop is the easiest starting point. You edit one configuration file, restart Claude, and your MCP servers appear as tools.</p><h3>Step 1: Find the Config File</h3><p>Open Claude Desktop, then:</p><ul><li><p><strong>Mac:</strong> Claude menu &#8594; Settings &#8594; Developer &#8594; Edit Config</p></li><li><p><strong>Windows:</strong> File &#8594; Settings &#8594; Developer &#8594; Edit Config</p></li></ul><p>This opens `claude_desktop_config.json` in your text editor.</p><h3>Step 2: Add an MCP Server</h3><p>The config file has a `mcpServers` section. Each server gets a block. Here's an example adding a web search server:</p><pre><code>{
  "mcpServers": {
    "web-search": {
      "command": "npx",
      "args": ["-y", "@anthropic/mcp-server-web-search"],
      "env": {
        "BRAVE_API_KEY": "your-api-key-here"
      }
    }
  }
}</code></pre><p><strong>What each part means:</strong></p><ul><li><p>`"web-search"` &#8212; A name you choose (anything you want)</p></li><li><p>`"command"` &#8212; How to run the server (`npx` for Node.js servers)</p></li><li><p>`"args"` &#8212; The server package name</p></li><li><p>`"env"` &#8212; API keys or settings the server needs</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bTZ3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bTZ3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bTZ3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bTZ3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bTZ3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bTZ3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bTZ3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bTZ3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bTZ3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bTZ3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02012229-0076-4759-a5a1-b8bb9462c904_584x1880.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><h3>Step 3: Add Multiple Servers</h3><p>Stack them in the same config file:</p><pre><code>{
  "mcpServers": {
    "web-search": {
      "command": "npx",
      "args": ["-y", "@anthropic/mcp-server-web-search"],
      "env": {
        "BRAVE_API_KEY": "your-key"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/Documents"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your-token"
      }
    }
  }
}</code></pre><h3>Step 4: Restart Claude Desktop</h3><p>Close and reopen Claude Desktop. You should see a hammer icon showing your connected tools. Click it to see which tools each server provides.</p><h3>Step 5: Use Them</h3><p>Just talk to Claude normally:</p><ul><li><p>"Search the web for MCP server tutorials"</p></li><li><p>"List the files in my Documents folder"</p></li><li><p>"Show me my recent GitHub pull requests"</p></li></ul><p>Claude automatically decides which MCP server tools to use based on your request.</p><h2>Method 2: Claude Code CLI (Fastest)</h2><p>If you use Claude Code (the terminal version), adding MCP servers is a single command.</p><h3>Add a Server</h3><pre><code>claude mcp add web-search -- npx -y @anthropic/mcp-server-web-search</code></pre><p>That's it. One command. The server is immediately available in your next Claude Code session.</p><h3>Add With Environment Variables</h3><pre><code>claude mcp add github -- npx -y @modelcontextprotocol/server-github \
  --env GITHUB_PERSONAL_ACCESS_TOKEN=your-token</code></pre><h3>List Connected Servers</h3><pre><code>claude mcp list</code></pre><h3>Remove a Server</h3><pre><code>claude mcp remove web-search</code></pre><h3>Scoping</h3><p>Claude Code lets you scope servers to specific projects:</p><pre><code># Available in all projects (global)
claude mcp add --scope global web-search -- npx -y @anthropic/mcp-server-web-search

# Available only in the current project
claude mcp add --scope project web-search -- npx -y @anthropic/mcp-server-web-search</code></pre><h2>Method 3: VS Code (GUI)</h2><p>If you use VS Code with the Claude extension, MCP servers can be configured through the settings GUI.</p><h3>Step 1: Open Settings</h3><p>`Cmd+,` (Mac) or `Ctrl+,` (Windows) &#8594; Search for "MCP"</p><h3>Step 2: Add Server Configuration</h3><p>VS Code's settings UI lets you add MCP server entries with fields for command, arguments, and environment variables. Same information as the JSON config, just in a form.</p><h3>Step 3: Reload Window</h3><p>`Cmd+Shift+P` &#8594; "Reload Window" to activate the new servers.</p><h2>Finding MCP Servers to Install</h2><h3>Public Registries</h3><p>| Registry | URL | Notes |</p><p>|----------|-----|-------|</p><p>| <strong>Smithery</strong> | smithery.ai | Largest registry, reviews, install commands |</p><p>| <strong>mcpt</strong> | mcpt.ai | Curated, quality-focused |</p><p>| <strong>OpenTools</strong> | opentools.ai | Growing collection, search by category |</p><p>| <strong>npm</strong> | npmjs.com (search "mcp-server") | Raw package listings |</p><h3>How to Browse</h3><p>1. Go to a registry (start with Smithery)</p><p>2. Browse categories: Productivity, Development, Data, Communication</p><p>3. Click a server to see: description, required config, install command</p><p>4. Copy the install command into your config file or CLI</p><h3>Popular Servers for Non-Developers</h3><p>| Server | What It Does | Config Complexity |</p><p>|--------|-------------|-------------------|</p><p>| <strong>Filesystem</strong> | Read/write files on your computer | Simple&#8212;just specify allowed directories |</p><p>| <strong>Web Search</strong> | Search the internet | Needs one API key (Brave) |</p><p>| <strong>Gmail</strong> | Read and draft emails | OAuth setup (guided) |</p><p>| <strong>Google Calendar</strong> | Check and create events | OAuth setup (guided) |</p><p>| <strong>Slack</strong> | Read and send messages | Bot token from Slack |</p><p>| <strong>Notion</strong> | Read and edit Notion pages | API key from Notion |</p><p>| <strong>GitHub</strong> | Manage repos, PRs, issues | Personal access token |</p><h2>Real Setup Walkthrough: 3 Servers in 15 Minutes</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gP8a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gP8a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gP8a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gP8a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gP8a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gP8a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gP8a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gP8a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gP8a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gP8a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f2fb2f-e1a6-4595-8970-c1b155a67630_1668x556.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>Let's set up three useful MCP servers from scratch using Claude Code.</p><h3>Server 1: Filesystem (2 minutes)</h3><pre><code>claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem ~/Documents ~/Desktop</code></pre><p>Now Claude can read and write files in your Documents and Desktop folders. Try:</p><ul><li><p>"List the files on my Desktop"</p></li><li><p>"Read the contents of Documents/notes.txt"</p></li><li><p>"Create a file called todo.txt on my Desktop with today's tasks"</p></li></ul><h3>Server 2: Web Search (3 minutes)</h3><p>1. Get a free API key from <a href="https://brave.com/search/api/">brave.com/search/api</a></p><p>2. Run:</p><pre><code>claude mcp add web-search -- npx -y @anthropic/mcp-server-web-search \
  --env BRAVE_API_KEY=your-key-here</code></pre><p>Now Claude can search the internet. Try:</p><ul><li><p>"Search for the latest news about MCP servers"</p></li><li><p>"Find tutorials on Ollama setup"</p></li></ul><h3>Server 3: GitHub (5 minutes)</h3><p>1. Go to GitHub &#8594; Settings &#8594; Developer settings &#8594; Personal access tokens &#8594; Generate new token</p><p>2. Select scopes: `repo`, `read:org`</p><p>3. Run:</p><pre><code>claude mcp add github -- npx -y @modelcontextprotocol/server-github \
  --env GITHUB_PERSONAL_ACCESS_TOKEN=your-token</code></pre><p>Now Claude can interact with your GitHub repos. Try:</p><ul><li><p>"Show my open pull requests"</p></li><li><p>"List issues in my project repo"</p></li></ul><h2>How I Actually Do This</h2><p>I run about 15 MCP servers connected to Claude Code for daily work. Here's my philosophy:</p><h3>The Config File Approach</h3><p>For Claude Desktop, I keep a curated config file that I've refined over months. New servers get tested individually before joining the main config&#8212;one bad server config can prevent Claude Desktop from loading any of them.</p><h3>The CLI Approach</h3><p>For Claude Code, I use `claude mcp add` for project-specific servers and global scope for universal ones:</p><pre><code># Global &#8212; available everywhere
claude mcp add --scope global web-search -- npx -y @anthropic/mcp-server-web-search
claude mcp add --scope global filesystem -- npx -y @modelcontextprotocol/server-filesystem ~

# Project-specific &#8212; only in this repo
claude mcp add github -- npx -y @modelcontextprotocol/server-github</code></pre><h3>What I've Learned</h3><p>1. <strong>Start with 2-3 servers.</strong> File system + web search covers most needs. Add more only when you feel the gap.</p><p>2. <strong>Test one at a time.</strong> If you add 5 servers at once and something breaks, you won't know which one caused it. Add one, verify it works, then add the next.</p><p>3. <strong>Keep API keys in environment variables.</strong> Never paste keys directly in config files that might be synced or shared. Use `.env` files or your system's keychain.</p><p>4. <strong>Read the server docs.</strong> Each server has specific capabilities and limitations. A filesystem server configured with `~/Documents` can only acce<code>s Documents</code>it can't read your whole drive. That's a feature, not a bug.</p><p>5. <strong>The MCP ecosystem is growing fast.</strong> When I started, there were maybe 100 servers available. Now there are thousands. Check registries periodically&#8212;there might be a server for that tool you've been wishing Claude could access.</p><h2>Troubleshooting</h2><p>| Problem | Likely Cause | Fix |</p><p>|---------|-------------|-----|</p><p>| Server doesn't appear in Claude | Config syntax error | Validate your JSON at jsonlint.com |</p><p>| "Command not found" error | Node.js not installed | Install Node.js (see Prerequisites) |</p><p>| Server connects but tools don't work | Missing API key or wrong permissions | Check the server's documentation for required env variables |</p><p>| All servers stopped working | One server config is broken | Remove servers one at a time to find the broken one |</p><p>| Slow responses | Too many servers loaded | Remove servers you don't use regularly |</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/can-i-use-mcp-servers-without-being?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/can-i-use-mcp-servers-without-being?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://astgl.com/p/can-i-use-mcp-servers-without-being?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>Frequently Asked Questions</h2><h3>Is it safe to give MCP servers access to my files?</h3><p>MCP servers only access what you explicitly allow. A filesystem server configured with `~/Documents` cannot read your email, browser history, or other folders. Always scope access to the minimum needed directories.</p><h3>Do MCP servers send my data to the cloud?</h3><p>Not by default. MCP servers run locally on your machine. Data only leaves your computer if the server explicitly calls an external API (like web search or Gmail). Local-only servers like filesystem never send data anywhere.</p><h3>Can I use MCP servers on my phone?</h3><p>Not directly&#8212;MCP servers currently run on desktop/laptop computers. However, if you set up servers on a home computer, you can access them remotely through tools like Claude Code over SSH or a web-based interface like Open WebUI.</p><h3>What happens if an MCP server crashes?</h3><p>Claude continues working&#8212;it just loses access to that server's tools. Other servers remain connected. Restart the crashed server by restarting Claude Desktop or running `claude mcp restart` in Claude Code.</p><h3>Do I need to update MCP servers?</h3><p>Occasionally. Servers installed via `npx` automatically use the latest version. Servers installed globally with `npm install -g` need manual updates with `npm update -g`. Check for updates monthly.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/can-i-use-mcp-servers-without-being/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://astgl.com/p/can-i-use-mcp-servers-without-being/comments"><span>Leave a comment</span></a></p><p></p><p>*This is part of the <strong><a href="https://astgl.ai/answers/">ASTGL Definitive Answers</a></strong> series&#8212;structured, practical answers to the questions people actually ask about AI automation, MCP servers, and local AI infrastructure.*</p>]]></content:encoded></item><item><title><![CDATA[What Is AI Agent Automation and How Do I Start?]]></title><description><![CDATA[n AI agent is an AI system that works autonomously&#8212;it receives a goal, makes a plan, uses tools to execute that plan, and delivers results without you supervising each step.]]></description><link>https://astgl.com/p/what-is-ai-agent-automation-and-how</link><guid isPermaLink="false">https://astgl.com/p/what-is-ai-agent-automation-and-how</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 13 Apr 2026 02:32:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!F2zj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You've probably used AI to answer questions or draft emails. But what if AI could handle entire workflows&#8212;research, decide, act, report&#8212;while you focus on something else?</p><p>That's what AI agents do. And you can start building them today with tools you already have.</p><h2>The Short Answer</h2><p>An <strong>AI agent</strong> is an AI system that works autonomously&#8212;it receives a goal, makes a plan, uses tools to execute that plan, and delivers results without you supervising each step. Unlike chatbots that wait for your next message, agents take initiative.</p><p>| Chatbot | AI Agent |</p><p>|---------|----------|</p><p>| Responds to one message at a time | Executes multi-step workflows |</p><p>| Waits for your next input | Works independently until done |</p><p>| Uses knowledge only | Uses knowledge AND tools |</p><p>| "Here's what I think" | "Here's what I did" |</p><p>| You drive the conversation | You define the goal, agent drives execution |</p><h2>The Agent Spectrum</h2><p>Not all automation is agent automation. Understanding the spectrum helps you pick the right level for each task.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F2zj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F2zj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg 424w, https://substackcdn.com/image/fetch/$s_!F2zj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg 848w, https://substackcdn.com/image/fetch/$s_!F2zj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!F2zj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F2zj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!F2zj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg 424w, https://substackcdn.com/image/fetch/$s_!F2zj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg 848w, https://substackcdn.com/image/fetch/$s_!F2zj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!F2zj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc81e9d7-fe7e-43cd-83ba-b1a0ee439929_2042x188.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><h3>Level 1: Simple Automation (Scripts)</h3><p>Traditional automation. A script runs predefined steps in a fixed order. No AI involved.</p><pre><code>If new_email &#8594; forward to team &#8594; done</code></pre><p><strong>Strengths:</strong> Predictable, fast, zero AI cost.</p><p><strong>Limits:</strong> Can't handle exceptions, can't adapt, brittle.</p><h3>Level 2: AI-Assisted (Chat + Tools)</h3><p>You prompt an AI with MCP servers connected. The AI uses tools when you ask, but you direct every step.</p><pre><code>You: "Check my calendar for tomorrow"
AI: [calls calendar tool] &#8594; "You have 3 meetings..."
You: "Draft prep notes for each"
AI: [drafts notes] &#8594; "Here are your prep notes..."</code></pre><p><strong>Strengths:</strong> Flexible, handles ambiguity, easy to start.</p><p><strong>Limits:</strong> Requires your attention. Doesn't run without you.</p><h3>Level 3: Autonomous Agent</h3><p>The AI receives a goal and handles the entire workflow. It decides which tools to use, in what order, and handles errors along the way.</p><pre><code>Goal: "Every morning at 6:30 AM, deliver a briefing with my calendar, important emails, overdue tasks, and relevant news."
Agent: [checks calendar] &#8594; [scans email] &#8594; [queries task manager] &#8594; [searches news] &#8594; [synthesizes briefing] &#8594; [delivers to Discord]</code></pre><p><strong>Strengths:</strong> Runs without you, handles variations, scales.</p><p><strong>Limits:</strong> Needs well-defined boundaries. Can fail on truly novel situations.</p><h3>Level 4: Multi-Agent Systems</h3><p>Multiple agents coordinate. One agent researches, another writes, another edits, another publishes. They pass work between them.</p><pre><code>SCOUT agent: [finds trending topics] &#8594; passes to
FORGE agent: [generates article outline] &#8594; passes to
QUILL agent: [writes draft] &#8594; passes to
LEDGER agent: [fact-checks and validates] &#8594; passes to
MAVEN agent: [optimizes for SEO and publishing]</code></pre><p><strong>Strengths:</strong> Specialized agents outperform generalists. Parallel execution.</p><p><strong>Limits:</strong> Complex to build and debug. Coordination overhead.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h2>Building Your First Agent</h2><p>You don't need a framework or custom code to start. Here's the progression from simple to sophisticated.</p><h3>Method 1: Scheduled Prompts (Easiest)</h3><p>The simplest agent is a prompt that runs on a schedule. No framework needed.</p><p><strong>Tools:</strong> Ollama + cron (or n8n, Make, Zapier)</p><pre><code># A cron job that runs at 6:30 AM
30 6 * * * curl -s http://localhost:11434/api/chat -d '{
  "model": "gemma4:26b",
  "messages": [{"role": "user", "content": "Generate a morning briefing..."}]
}' | jq -r '.message.content' | send-to-discord</code></pre><p>This is technically an agent&#8212;it runs autonomously, uses a model, and delivers results. It just can't use tools or handle multi-step logic.</p><h3>Method 2: AI Gateway (Recommended Starting Point)</h3><p>An AI gateway like OpenClaw sits between your scheduled tasks and your models. It adds tool calling, model routing, and error handling.</p><p><strong>What a gateway provides:</strong></p><ul><li><p>Schedule management (cron-like)</p></li><li><p>Model selection per task</p></li><li><p>MCP server connections (tools)</p></li><li><p>Output delivery (Discord, Slack, email)</p></li><li><p>Error handling and retries</p></li><li><p>Logging and monitoring</p></li></ul><p>This is where most people should start for real agent automation. You get 80% of the power with 20% of the complexity.</p><h3>Method 3: Agent Frameworks (For Developers)</h3><p>If you want full control, frameworks like LangChain, CrewAI, or the Claude Agent SDK let you build custom agent logic in code.</p><pre><code># Conceptual example
agent = Agent(
    model="gemma4:26b",
    tools=[calendar, email, web_search, task_manager],
    goal="Generate a morning briefing"
)
result = agent.run()</code></pre><p><strong>Use frameworks when:</strong> You need custom logic, complex coordination between agents, or integration with specific systems that don't have MCP servers.</p><h2>Designing Reliable Agent Workflows</h2><p>Agents fail when their scope is unclear. Here's how to design workflows that actually work in production.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LL-Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LL-Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LL-Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LL-Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LL-Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LL-Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LL-Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LL-Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LL-Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LL-Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91dabc1-1726-4b4c-a56f-9fda1873a91f_1898x1254.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><h3>The Three Constraints</h3><p>Every reliable agent workflow defines:</p><p>1. <strong>Goal</strong>&#8212;What does "done" look like? Be specific. "Research AI trends" is vague. "Find 5 news articles from the past week about MCP servers and summarize each in 2 sentences" is actionable.</p><p>2. <strong>Tools</strong>&#8212;What can the agent access? Only give it the tools it needs. An agent that can search the web, read email, and post to social media has a larger blast radius than one that can only search and summarize.</p><p>3. <strong>Boundaries</strong>&#8212;What should the agent NOT do? "Never send messages directly&#8212;always save as draft for review." "Never delete files." "If uncertain, log the uncertainty and skip."</p><h3>Error Handling Patterns</h3><p>| Pattern | How It Works | When to Use |</p><p>|---------|-------------|-------------|</p><p>| <strong>Retry with backoff</strong> | Try again after a delay | Transient failures (API timeouts, rate limits) |</p><p>| <strong>Fallback model</strong> | Switch to a different model | Model-specific failures |</p><p>| <strong>Human escalation</strong> | Alert a human and pause | High-stakes decisions, ambiguous situations |</p><p>| <strong>Skip and log</strong> | Log the failure, continue with remaining tasks | Non-critical subtasks in a batch |</p><p>| <strong>Circuit breaker</strong> | Stop after N consecutive failures | Prevent cascading failures |</p><h3>The Review Step</h3><p>For any agent workflow that produces output seen by others, add a review step:</p><ul><li><p><strong>Draft mode:</strong> Agent creates drafts, human approves before sending</p></li><li><p><strong>Threshold mode:</strong> Agent acts autonomously below a confidence threshold, escalates above it</p></li><li><p><strong>Audit log:</strong> Agent acts freely but logs everything for post-hoc review</p></li></ul><p>Start with draft mode. Move to threshold mode once you trust the workflow. Keep audit logs always.</p><h2>How I Actually Do This</h2><p>I run 26 automated agent tasks on a Mac Studio through OpenClaw. Here's the architecture:</p><h3>The Task Schedule</h3><p>| Time | Agent Task | Model | Output |</p><p>|------|-----------|-------|--------|</p><p>| 6:00 AM | Research pipeline | Gemma 4 26B | Research summaries &#8594; knowledge base |</p><p>| 6:15 AM | System log review | Gemma 4 26B | Anomaly alerts &#8594; Discord |</p><p>| 6:30 AM | Morning briefing | Gemma 4 26B | Daily brief &#8594; Discord |</p><p>| 7:00 AM | Content research | Gemma 4 26B | Topic ideas &#8594; content queue |</p><p>| Every 5 min | Critical notification check | Gemma 4 e4B | Urgent alerts &#8594; Discord |</p><p>| Every hour | Important notification batch | Gemma 4 e4B | Batched notifications &#8594; Discord |</p><p>| Every 3 hours | Low-priority batch | Gemma 4 e4B | Digests &#8594; Discord |</p><p>| 8:00 PM | Evening summary | Gemma 4 26B | Day recap &#8594; Discord |</p><p>| 8:30 PM | Knowledge base builder | Gemma 4 26B | KB articles &#8594; local knowledge base |</p><p>| Saturday 8 AM | Deep system scan | Gemma 4 31B | Security + config audit &#8594; Discord |</p><p>| Sunday 9 AM | Weekly pipeline report | Gemma 4 26B | Metrics + status &#8594; Discord |</p><h3>Routing Architecture</h3><p>Every incoming task hits a router first:</p><pre><code>Task arrives &#8594; Triage model classifies complexity &#8594;
  Simple &#8594; Gemma 4 e4B (fast, cheap)
  Standard &#8594; Gemma 4 26B (quality)
  Code &#8594; Qwen 3 Coder (specialized)
  Complex &#8594; Gemma 4 31B (deep reasoning)</code></pre><p>The triage classification takes under 100ms. The right model gets the right task.</p><h3>What I've Learned Running Agents Daily</h3><p>1. <strong>Scope tight, iterate wide.</strong> Start each agent with a narrow, well-defined task. Expand scope only after it's been reliable for weeks.</p><p>2. <strong>Logs are everything.</strong> When an agent produces bad output, you need to know what prompt it received, what tools it called, and what each tool returned. Without logs, debugging is guesswork.</p><p>3. <strong>Models narrate instead of acting.</strong> Some models&#8212;particularly smaller ones&#8212;will describe what they would do rather than actually calling tools. This was the single most frustrating failure mode. Solution: test every model with actual tool-calling prompts before deploying it.</p><p>4. <strong>Schedule slack matters.</strong> If your 6:00 AM research pipeline occasionally takes 20 minutes, don't schedule the next task at 6:05 AM. Build buffer between dependent tasks.</p><p>5. <strong>$0/month is real.</strong> All 26 tasks run on local models through Ollama. The total cloud API cost is zero. Hardware paid for itself within two months of not paying for API calls.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/what-is-ai-agent-automation-and-how?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/what-is-ai-agent-automation-and-how?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://astgl.com/p/what-is-ai-agent-automation-and-how?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>Frequently Asked Questions</h2><h3>Can AI agents make mistakes?</h3><p>Yes. Agents can misinterpret goals, use tools incorrectly, or produce low-quality output. The mitigation is constraint design&#8212;narrow scope, clear boundaries, human review for high-stakes outputs. Well-constrained agents on well-defined tasks are remarkably reliable.</p><h3>How much does it cost to run AI agents?</h3><p>If you run local models: hardware cost only ($0/month in API fees). A Mac Mini with 32 GB runs several agent tasks. A Mac Studio with 64+ GB runs dozens. Cloud-based agents using API calls typically cost $0.01-0.10 per task execution, depending on model and complexity.</p><h3>What's the difference between AI agents and RPA (Robotic Process Automation)?</h3><p>RPA automates UI clicks&#8212;it literally moves the mouse and types. AI agents understand context, make decisions, and use APIs directly. RPA is brittle (breaks when a UI changes). AI agents are flexible (adapt to variations in input). They solve different problems, though AI agents are increasingly replacing RPA for knowledge work.</p><h3>Can agents work with my existing tools?</h3><p>Yes, through MCP servers. If your tool has an MCP server (or an API), agents can use it. Calendar, email, databases, file systems, web search, Slack, GitHub&#8212;all connectable. The MCP ecosystem covers most common business tools.</p><h3>How do I monitor agents in production?</h3><p>Log every execution: timestamp, prompt, tool calls, responses, and final output. Set up alerts for failures, timeouts, and anomalous output. Review logs weekly to catch quality drift. This is the same principle as monitoring any automated system&#8212;visibility is everything.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/what-is-ai-agent-automation-and-how/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://astgl.com/p/what-is-ai-agent-automation-and-how/comments"><span>Leave a comment</span></a></p><p></p><p>*This is part of the <strong><a href="https://astgl.ai/answers/">ASTGL Definitive Answers</a></strong> series&#8212;structured, practical answers to the questions people actually ask about AI automation, MCP servers, and local AI infrastructure.*</p>]]></content:encoded></item><item><title><![CDATA[What's the Best Local LLM for Your Specific Task?]]></title><description><![CDATA[Not every task needs the biggest model. The Short Answer

There is no single best local LLM. The best model depends on your task, your hardware, and your tolerance for slower responses.]]></description><link>https://astgl.com/p/whats-the-best-local-llm-for-your</link><guid isPermaLink="false">https://astgl.com/p/whats-the-best-local-llm-for-your</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 13 Apr 2026 02:16:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!POvV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Not every task needs the biggest model. A 4-billion parameter model can sort your notifications just as well as a 70-billion parameter one&#8212;and it'll do it 10x faster.</p><p>The trick isn't finding one "best" model. It's matching the right model to each job. Here's how to think about it, with specific recommendations for every common use case.</p><h2>The Short Answer</h2><p>There is no single best local LLM. The best model depends on your task, your hardware, and your tolerance for slower responses. Here's the quick decision matrix:</p><p>| Task | Best Model | Minimum Memory | Why |</p><p>|------|-----------|---------------|-----|</p><p>| <strong>General daily use</strong> | Gemma 4 26B | 32 GB | Best quality-per-GB for mixed workloads |</p><p>| <strong>Coding</strong> | Qwen 3 Coder 32B | 48 GB | Strongest code generation and tool calling |</p><p>| <strong>Quick triage/routing</strong> | Gemma 4 e4B | 8 GB | Fast, cheap, good enough for classification |</p><p>| <strong>Long documents</strong> | Gemma 4 26B (16K ctx) | 48 GB | Strong comprehension with extended context |</p><p>| <strong>Creative writing</strong> | Gemma 4 31B | 48 GB | Better voice and nuance at larger sizes |</p><p>| <strong>Research/analysis</strong> | Llama 3.3 70B | 96 GB | Maximum reasoning depth |</p><p>| <strong>Structured output</strong> | Qwen 3 8B | 16 GB | Reliable JSON/tool calling at small size |</p><h2>Understanding Model Tiers</h2><p>Local LLMs come in rough capability tiers. Knowing where each tier sits helps you avoid overspending memory on simple tasks&#8212;or underpowering complex ones.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!POvV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!POvV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg 424w, https://substackcdn.com/image/fetch/$s_!POvV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg 848w, https://substackcdn.com/image/fetch/$s_!POvV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!POvV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!POvV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!POvV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg 424w, https://substackcdn.com/image/fetch/$s_!POvV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg 848w, https://substackcdn.com/image/fetch/$s_!POvV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!POvV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d123bd-13cc-4d2b-90c3-6a17464b681e_2368x642.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><h3>Tier 1: Micro (1-4B parameters)</h3><p><strong>Models:</strong> Gemma 4 e4B, Phi-3 Mini, Qwen 3 1.7B</p><p><strong>Good for:</strong> Classification, routing, keyword extraction, simple formatting, notification triage, yes/no decisions.</p><p><strong>Not good for:</strong> Complex reasoning, nuanced writing, multi-step analysis, coding beyond snippets.</p><p><strong>Memory:</strong> 4-8 GB</p><p>These models are fast and cheap. Use them for high-volume, low-complexity tasks where speed matters more than depth. If you're processing hundreds of notifications per day, a micro model handles the sorting while your bigger models handle the interesting work.</p><h3>Tier 2: Small (7-14B parameters)</h3><p><strong>Models:</strong> Gemma 3 12B, Qwen 3 8B, Llama 3.2 11B</p><p><strong>Good for:</strong> General conversation, basic coding, summarization, email drafting, structured output, moderate reasoning.</p><p><strong>Not good for:</strong> Complex multi-step reasoning, long document analysis, production-grade code generation.</p><p><strong>Memory:</strong> 12-20 GB</p><p>The sweet spot for most people starting out. A Gemma 3 12B on a 16 GB MacBook handles daily tasks surprisingly well. These models punch above their weight on focused tasks.</p><h3>Tier 3: Medium (26-34B parameters)</h3><p><strong>Models:</strong> Gemma 4 26B, Gemma 4 31B, Qwen 3 Coder 32B, Qwen 3 32B</p><p><strong>Good for:</strong> Almost everything&#8212;coding, writing, research, complex analysis, tool calling, agent tasks.</p><p><strong>Not good for:</strong> Tasks requiring frontier-model reasoning (use cloud Claude for those).</p><p><strong>Memory:</strong> 32-64 GB</p><p>This is where local models become genuinely competitive with cloud APIs for most tasks. Gemma 4 26B is my daily workhorse&#8212;it handles 80% of everything I throw at it.</p><h3>Tier 4: Large (65-70B+ parameters)</h3><p><strong>Models:</strong> Llama 3.3 70B, Qwen 3 72B, DeepSeek V3</p><p><strong>Good for:</strong> Maximum local quality, deep reasoning, complex research, academic analysis.</p><p><strong>Not good for:</strong> Anything where speed matters&#8212;these are slow without enterprise hardware.</p><p><strong>Memory:</strong> 96-128+ GB</p><p>Impressive quality, but the hardware requirements limit accessibility. If you have a Mac Studio with 192+ GB or a multi-GPU server, these are worth exploring. Otherwise, use cloud models for tasks that need this level.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h2>Task-Specific Recommendations</h2><h3>Coding</h3><p><strong>Best:</strong> Qwen 3 Coder 32B</p><p><strong>Runner-up:</strong> Gemma 4 26B</p><p><strong>Budget:</strong> Qwen 3 8B</p><p>Coding requires strong structured output, function understanding, and the ability to follow precise instructions. Qwen 3 Coder is purpose-built for this. It handles:</p><ul><li><p>Code generation across languages</p></li><li><p>Tool calling and function signatures</p></li><li><p>Debugging and refactoring</p></li><li><p>Test generation</p></li><li><p>Structured JSON output</p></li></ul><p><strong>Important finding:</strong> Some models narrate what they would do instead of actually executing tool calls. Qwen 3 8B sometimes exhibits this behavior&#8212;it describes the function call rather than producing the structured output. Qwen 3 32B (and the Coder variant) follows tool-call instructions reliably. Test your chosen model with actual tool-calling prompts before committing to it for automation.</p><h3>Writing and Content</h3><p><strong>Best:</strong> Gemma 4 31B</p><p><strong>Runner-up:</strong> Gemma 4 26B</p><p><strong>Budget:</strong> Gemma 3 12B</p><p>Writing quality improves noticeably with model size. Larger models produce more natural voice, better paragraph flow, and more nuanced tone. For blog posts, documentation, and professional writing, the jump from 12B to 26B is significant.</p><p>For content pipelines where you're generating dozens of pieces, 26B offers the best throughput-to-quality ratio. Save 31B for final drafts or pieces where voice really matters.</p><h3>Research and Analysis</h3><p><strong>Best:</strong> Llama 3.3 70B</p><p><strong>Runner-up:</strong> Gemma 4 26B</p><p><strong>Budget:</strong> Gemma 3 12B</p><p>Deep research tasks benefit from maximum reasoning capability. A 70B model catches connections and nuances that smaller models miss. But for daily research briefs and competitive monitoring, 26B is more than sufficient.</p><h3>Automation and Agent Tasks</h3><p><strong>Best:</strong> Gemma 4 26B (general) + Qwen 3 8B (structured output)</p><p><strong>Budget:</strong> Gemma 4 e4B (triage) + Gemma 3 12B (execution)</p><p>Agent automation needs reliable tool calling, consistent structured output, and the ability to follow multi-step instructions. You don't always need the smartest model &#8212; you need the most reliable one.</p><p>For triage tasks (sorting, routing, classification), micro models are perfectly reliable and run 10x faster. Route the complex work to bigger models.</p><h2>The Multi-Model Architecture</h2><p>Running a single model for everything is like using a sledgehammer for every nail. The smart approach is a tiered architecture where each model handles the tasks it's best at.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!klW7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!klW7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.jpeg 424w, https://substackcdn.com/image/fetch/$s_!klW7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.jpeg 848w, https://substackcdn.com/image/fetch/$s_!klW7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!klW7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!klW7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!klW7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.jpeg 424w, https://substackcdn.com/image/fetch/$s_!klW7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.jpeg 848w, https://substackcdn.com/image/fetch/$s_!klW7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!klW7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce8256b-2f93-40fc-b591-fa77c81806b9_1784x860.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><h3>My 4-Tier Setup</h3><p>| Tier | Model | Tasks | Daily Volume |</p><p>|------|-------|-------|-------------|</p><p>| <strong>Triage</strong> | Gemma 4 e4B | Notification sorting, priority classification, routing decisions | ~500 calls |</p><p>| <strong>Daily</strong> | Gemma 4 26B | Research, drafting, analysis, briefings, content generation | ~100 calls |</p><p>| <strong>Code</strong> | Qwen 3 Coder (fast) | Code generation, tool calling, structured output, MCP interactions | ~50 calls |</p><p>| <strong>Heavy</strong> | Gemma 4 31B | Complex reasoning, long documents, multi-step analysis | ~10 calls |</p><p>A routing layer (itself running on the triage model) examines each incoming task and sends it to the appropriate tier. Simple tasks go fast. Complex tasks get the power they need.</p><h3>Why Not Just Use the Biggest Model?</h3><p>Three reasons:</p><p>1. <strong>Speed.</strong> A 4B model responds in milliseconds. A 31B model takes seconds. For 500 daily triage operations, that's the difference between instant and painfully slow.</p><p>2. <strong>Concurrency.</strong> Smaller models use less memory, so you can run more models simultaneously. Four small models serving different task types beats one large model handling a queue.</p><p>3. <strong>Cost-efficiency.</strong> Even though local models are "free," memory is finite. Using a 31B model for notification sorting wastes 17 GB of memory that could serve other workloads.</p><h2>How I Actually Do This</h2><p>My Mac Studio M3 Ultra with 256 GB unified memory runs all four tiers simultaneously through Ollama:</p><pre><code># All models pinned permanently &#8212; no cold starts
export OLLAMA_KEEP_ALIVE=-1
export OLLAMA_MAX_LOADED_MODELS=4</code></pre><p>OpenClaw (my local AI gateway) routes tasks to the appropriate model based on a classification prompt:</p><pre><code>Given this task: [task description]
Which tier should handle it?
- TRIAGE: Simple classification, yes/no, sorting
- DAILY: Research, drafting, analysis, summarization
- CODE: Code generation, tool calling, structured output
- HEAVY: Complex reasoning, long documents, multi-step logic
Reply with only the tier name.</code></pre><p>The triage model runs this classification in under 100ms. The task then goes to the right model. This architecture has been running 26 automated tasks daily for months with zero model-related failures.</p><h3>When I Still Use Cloud Claude</h3><p>Local models have a ceiling. For tasks that need frontier reasoning&#8212;complex architectural decisions, nuanced code review across large codebases, novel problem-solving&#8212;I reach for cloud Claude. It's not about local vs. cloud. It's about using the right tool.</p><p>My split: <strong>~90% local, ~10% cloud.</strong> The 10% is high-value work where the quality difference justifies the cost.</p><h2>Picking Your Starting Model</h2><p>Don't overthink it. Here's the decision tree:</p><p>1. <strong>How much memory do you have?</strong></p><ul><li><p>8-16 GB &#8594; Start with Gemma 3 12B</p></li><li><p>32-64 GB &#8594; Start with Gemma 4 26B</p></li><li><p>96+ GB &#8594; Start with Gemma 4 26B + Qwen 3 Coder 32B</p></li></ul><p>2. <strong>What's your primary use?</strong></p><ul><li><p>General &#8594; Gemma 4 26B</p></li><li><p>Coding &#8594; Qwen 3 Coder 32B</p></li><li><p>Writing &#8594; Gemma 4 26B (or 31B if you have memory)</p></li></ul><p>3. <strong>Run it for a week.</strong> If quality falls short on specific tasks, add a specialist model for those tasks. If it handles everything, you're done.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/whats-the-best-local-llm-for-your?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/whats-the-best-local-llm-for-your?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://astgl.com/p/whats-the-best-local-llm-for-your?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>Frequently Asked Questions</h2><h3>How often do new models come out?</h3><p>Major model releases happen every few months. Ollama makes upgrading easy &#8212; `ollama pull model:latest` downloads the new version. You don't need to chase every release. Upgrade when a new model offers clear improvements for your specific tasks.</p><h3>Should I use quantized models?</h3><p>Quantization shrinks models by reducing numerical precision. A Q4 quantized 70B model fits in roughly the same memory as a full-precision 26B model. The quality trade-off is usually small&#8212;Q4 and Q5 quantizations preserve most capability. For memory-constrained systems, quantized larger models often outperform full-precision smaller ones.</p><h3>Can I fine-tune local models?</h3><p>Yes, but you probably shouldn't&#8212;at least not yet. Fine-tuning requires significant expertise and compute. For most use cases, prompt engineering and Modelfiles (custom system prompts) get you 90% of the way there. Save fine-tuning for when you've exhausted prompt-based approaches.</p><h3>Do model benchmarks matter?</h3><p>Benchmarks measure synthetic tasks that may not reflect your workload. A model that scores highest on HumanEval might not be the best at drafting your emails. Use benchmarks as rough filters, then test with your actual tasks. Five real-world test runs tell you more than any leaderboard.</p><h3>What about multimodal models (vision, audio)?</h3><p>Ollama supports multimodal models like LLaVA and Gemma 4 with vision. These can analyze images, screenshots, and documents. Useful for automation tasks like reading invoices, analyzing charts, or processing visual data. The vision capabilities are still maturing but improving rapidly.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/whats-the-best-local-llm-for-your/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://astgl.com/p/whats-the-best-local-llm-for-your/comments"><span>Leave a comment</span></a></p><p></p><p>*This is part of the <strong><a href="https://astgl.ai/answers/">ASTGL Definitive Answers</a></strong> series&#8212;structured, practical answers to the questions people actually ask about AI automation, MCP servers, and local AI infrastructure.*</p>]]></content:encoded></item><item><title><![CDATA[How Do I Set Up Ollama on Mac, Windows, and Linux?]]></title><description><![CDATA[Running AI locally means no API bills, no data leaving your machine, and no rate limits.]]></description><link>https://astgl.com/p/how-do-i-set-up-ollama-on-mac-windows</link><guid isPermaLink="false">https://astgl.com/p/how-do-i-set-up-ollama-on-mac-windows</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 13 Apr 2026 02:05:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2TRu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Running AI locally means no API bills, no data leaving your machine, and no rate limits. Ollama makes that possible in under 10 minutes on any platform.</p><p>Here's how to install, configure, and optimize Ollama on Mac, Windows, and Linux&#8212;plus the configuration I use to run 26 automated AI tasks daily on a Mac Studio.</p><h2>The Short Answer</h2><p>Ollama is a free tool that runs large language models locally. Install it, pull a model, and you have a fully functional AI running on your hardware with zero cloud dependencies.</p><p>| Platform | Install Method | GPU Support | Best For |</p><p>|----------|---------------|-------------|----------|</p><p>| <strong>macOS</strong> | .dmg or Homebrew | Apple Silicon (unified memory) | Best overall experience&#8212;Metal acceleration, huge memory ceilings |</p><p>| <strong>Windows</strong> | .exe installer | NVIDIA CUDA | Good for gaming rigs with big GPUs |</p><p>| <strong>Linux</strong> | curl one-liner | NVIDIA CUDA, AMD ROCm | Best for servers, headless setups, Docker |</p><h2>Installation: Platform by Platform</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2TRu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2TRu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2TRu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2TRu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2TRu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2TRu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2TRu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2TRu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2TRu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2TRu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8734656-d2b1-4d65-97c4-286808fa762e_2220x1462.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><h3>macOS</h3><p><strong>Option A: Direct download</strong></p><p>1. Go to <a href="https://ollama.com">ollama.com</a> and download the macOS installer</p><p>2. Open the `.dmg` and drag Ollama to Applications</p><p>3. Launch Ollama&#8212;a menu bar icon appears</p><p><strong>Option B: Homebrew</strong></p><pre><code>brew install ollama
ollama serve   # Start the server</code></pre><p><strong>Pull your first model:</strong></p><pre><code>ollama pull gemma3
ollama run gemma3</code></pre><p>That's it. You're running a local AI.</p><p><strong>Apple Silicon note:</strong> If you have an M1/M2/M3/M4 Mac, Ollama automatically uses Metal acceleration and unified memory. A MacBook Air with 16 GB can comfortably run 7-8B parameter models. A Mac Studio with 192-512 GB can run the largest open models available.</p><h3>Windows</h3><p>1. Download the Windows installer from <a href="https://ollama.com">ollama.com</a></p><p>2. Run the installer&#8212;Ollama installs as a Windows service</p><p>3. Open PowerShell or Command Prompt:</p><pre><code>ollama pull gemma3
ollama run gemma3</code></pre><p><strong>NVIDIA GPU:</strong> Detected automatically if CUDA drivers are installed. Check with `nvidia-smi` in a terminal. If your GPU shows up there, Ollama will use it.</p><p><strong>No GPU?</strong> Ollama falls back to CPU. It works, but responses will be slower. Stick to smaller models (3-7B parameters) on CPU-only systems.</p><h3>Linux</h3><p><strong>One-line install:</strong></p><pre><code>curl -fsSL https://ollama.com/install.sh | sh</code></pre><p>This installs Ollama and creates a `systemd` service that starts automatically.</p><pre><code>ollama pull gemma3
ollama run gemma3</code></pre><p><strong>GPU setup:</strong></p><ul><li><p><strong>NVIDIA:</strong> Install CUDA drivers first (`nvidia-driver-xxx` package), then install Ollama. It detects the GPU automatically.</p></li><li><p><strong>AMD:</strong> ROCm support is available. Install ROCm drivers, then Ollama picks them up.</p></li></ul><p><strong>Headless/server:</strong> Ollama runs perfectly without a desktop environment. The API listens on `localhost:11<code>34` by default.</code></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h2>Choosing Your First Models</h2><p>Don't overthink this. Start with one general-purpose model and add specialized ones later.</p><p>| Model | Size | Good For | Memory Needed |</p><p>|-------|------|----------|--------------|</p><p>| `gemma3:4b` | 2.8 GB | Quick tasks, low-memory systems | 8 GB RAM |</p><p>| `gemma3` (12b) | 8 GB | General purpose, good quality | 16 GB RAM |</p><p>| `gemma4:26b` | 17 GB | High quality, complex reasoning | 32 GB RAM |</p><p>| `qwen3:8b` | 5 GB | Coding, tool calling | 16 GB RAM |</p><p>| `qwen3-coder:32b` | 20 GB | Serious coding tasks | 48 GB RAM |</p><p>| `llama3.3:70b` | 43 GB | Maximum quality, research | 96+ GB RAM |</p><p><strong>Rule of thumb:</strong> You need roughly 1.2x the model file size in available memory. If a model is 17 GB, you need at least 20 GB free.</p><pre><code># Pull a model
ollama pull gemma4:26b

# List installed models
ollama list

# Remove a model
ollama rm gemma3:4b</code></pre><h2>Configuration for Real Use</h2><p>The defaults work fine for casual use. For daily automation or development, tune these settings.</p><h3>Environment Variables</h3><p>Set these in your shell profile (`.zshrc`, `.bashrc`) or systemd service file:</p><pre><code># Where models are stored (default: ~/.ollama/models)
export OLLAMA_MODELS="/path/to/models"

# Listen on all interfaces (for network access)
export OLLAMA_HOST="0.0.0.0:11434"

# Keep models in memory longer (default: 5m)
export OLLAMA_KEEP_ALIVE="24h"

# Max models loaded simultaneously
export OLLAMA_MAX_LOADED_MODELS=3

# GPU layers (0 = CPU only, -1 = all GPU)
export OLLAMA_NUM_GPU=-1</code></pre><h3>The API</h3><p>Ollama serves a REST API on `localhost:11434`. Every tool that supports Ollama &#8212; Claude Desktop, Open WebUI, Continu<code>, LangChain&#8212;c</code>onnects through this API.</p><pre><code># Quick test
curl http://localhost:11434/api/generate -d '{
  "model": "gemma4:26b",
  "prompt": "What is MCP?",
  "stream": false
}'

# Chat format (most common)
curl http://localhost:11434/api/chat -d '{
  "model": "gemma4:26b",
  "messages": [{"role": "user", "content": "What is MCP?"}],
  "stream": false
}'</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C9dD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c49987-b130-4bff-817a-efdd711ae48a_1652x694.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C9dD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c49987-b130-4bff-817a-efdd711ae48a_1652x694.jpeg 424w, https://substackcdn.com/image/fetch/$s_!C9dD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c49987-b130-4bff-817a-efdd711ae48a_1652x694.jpeg 848w, https://substackcdn.com/image/fetch/$s_!C9dD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c49987-b130-4bff-817a-efdd711ae48a_1652x694.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!C9dD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c49987-b130-4bff-817a-efdd711ae48a_1652x694.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C9dD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c49987-b130-4bff-817a-efdd711ae48a_1652x694.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53c49987-b130-4bff-817a-efdd711ae48a_1652x694.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;captionedImage&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C9dD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c49987-b130-4bff-817a-efdd711ae48a_1652x694.jpeg 424w, https://substackcdn.com/image/fetch/$s_!C9dD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c49987-b130-4bff-817a-efdd711ae48a_1652x694.jpeg 848w, https://substackcdn.com/image/fetch/$s_!C9dD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c49987-b130-4bff-817a-efdd711ae48a_1652x694.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!C9dD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53c49987-b130-4bff-817a-efdd711ae48a_1652x694.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><h3>Modelfiles (Custom Configurations)</h3><p>Create a `Modelfile` to customize model behavior:</p><pre><code>FROM gemma4:26b

PARAMETER temperature 0.3
PARAMETER num_ctx 8192

SYSTEM """You are a technical writing assistant. Write clearly and concisely. Use active voice. Avoid jargon unless the audience is technical."""</code></pre><pre><code>ollama create my-writer -f Modelfile
ollama run my-writer</code></pre><p>This lets you create task-specific variants without downloading the same model multiple times.</p><h2>How I Actually Do This</h2><p>I run Ollama on a Mac Studio M3 Ultra with 256 GB of unified memory. Here's what my production setup looks like:</p><h3>Models Pinned in VRAM</h3><p>I keep multiple models loaded permanently &#8212; no cold starts, instant responses:</p><pre><code># Keep models alive indefinitely
export OLLAMA_KEEP_ALIVE=-1
export OLLAMA_MAX_LOADED_MODELS=4</code></pre><p>| Model | Role | Why This One |</p><p>|-------|------|-------------|</p><p>| `gemma4:e4b` | Triage/routing | Fast, cheap, handles notification sorting and simple classification |</p><p>| `gemma4:26b` | Daily workhorse | Balanced quality &#8212; handles 80% of tasks including research, drafting, analysis |</p><p>| `qwen3-coder:fast` | Code tasks | Optimized for code generation, tool calling, structured output |</p><p>| `gemma4:31b` | Heavy reasoning | Complex analysis, long documents, multi-step reasoning |</p><h3>Automated Task Runner</h3><p>OpenClaw (my local AI gateway) connects to Ollama's API and runs 26 scheduled tasks:</p><ul><li><p><strong>6:00 AM</strong> &#8212; Research pipeline hits web sources, summarizes findings</p></li><li><p><strong>6:15 AM</strong> &#8212; Log review scans overnight system logs for anomalies</p></li><li><p><strong>6:30 AM</strong> &#8212; Morning briefing synthesizes calendar + priorities + news</p></li><li><p><strong>Every hour</strong> &#8212; Notification batching across all channels</p></li></ul><p>Total cloud API cost: <strong>$0/month</strong>. Everything runs locally.</p><h3>Performance Tuning</h3><p>For Apple Silicon specifically:</p><ul><li><p>Set `num_gpu` to `-1` (all layers on GPU) &#8212; Apple's unified memory means the GPU can access all 256 GB</p></li><li><p>Set `num_ctx` based on task &#8212; 4096 for quick tasks, 16384 for long documents, 32768 for code analysis</p></li><li><p>Monitor with `ollama ps` to see which models are loaded and how much memory they use</p></li></ul><pre><code># Check what's running
ollama ps

# Example output:
# NAME              SIZE    PROCESSOR  UNTIL
# gemma4:26b        17 GB   100% GPU   Forever
# gemma4:e4b        3 GB    100% GPU   Forever
# qwen3-coder:fast  5 GB    100% GPU   Forever</code></pre><h2>Troubleshooting Common Issues</h2><p>| Problem | Cause | Fix |</p><p>|---------|-------|-----|</p><p>| Model runs slowly | Not enough GPU memory, layers on CPU | Check `ollama ps` &#8212; if PROCESSOR shows "CPU", you need a smaller model or more memory |</p><p>| "Out of memory" error | Model too large for your system | Try a smaller quantization (`q4_0` instead of `q8_0`) or a smaller model |</p><p>| API connection refused | Ollama not running | Run `ollama serve` or start the desktop app |</p><p>| Model download stuck | Network issue | Ctrl+C and re-run `ollama pull` &#8212; it resumes from where it stopped |</p><p>| GPU not detected (Linux) | Missing CUDA/ROCm drivers | Install drivers first, then reinstall Ollama |</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-i-set-up-ollama-on-mac-windows?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-i-set-up-ollama-on-mac-windows?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://astgl.com/p/how-do-i-set-up-ollama-on-mac-windows?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>Frequently Asked Questions</h2><h3>Is Ollama free?</h3><p>Yes, completely free and open source. The models are also free. There are no subscriptions, API fees, or usage limits.</p><h3>Can I use Ollama with Claude Desktop?</h3><p>Not directly &#8212; Claude Desktop uses cloud Claude. But you can connect Ollama to tools like Open WebUI, Continue (VS Code), or any application that supports the OpenAI-compatible API format. Many MCP servers can also route to local Ollama models.</p><h3>How much disk space do models need?</h3><p>Models range from 2 GB (small 3-4B models) to 45+ GB (large 70B models). Budget 5-20 GB for a typical setup with 2-3 models. Ollama stores them in `~/.ollama/models` by default.</p><h3>Can I run Ollama on a Raspberry Pi?</h3><p>Technically yes, but practically no for anything useful. Even a Raspberry Pi 5 with 8 GB RAM can only run tiny models (1-3B) very slowly. A mini PC with 32 GB RAM is a much better entry point for local AI.</p><h3>Does Ollama support tool calling / function calling?</h3><p>Yes. Models like Qwen 3, Gemma 4, and Llama 3.3 support structured tool calling through Ollama's API. This is essential for MCP server integration and agent automation.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/how-do-i-set-up-ollama-on-mac-windows/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://astgl.com/p/how-do-i-set-up-ollama-on-mac-windows/comments"><span>Leave a comment</span></a></p><p></p><p>This is part of the <strong><a href="https://astgl.ai/answers/">ASTGL Definitive Answers</a></strong> series&#8212;structured, practical answers to the questions people actually ask about AI automation, MCP servers, and local AI infrastructure.*</p>]]></content:encoded></item><item><title><![CDATA[How I Shipped an MCP Knowledge Server in a Weekend]]></title><description><![CDATA[Turning static content into an AI-citable knowledge base via npm]]></description><link>https://astgl.com/p/shipping-mcp-knowledge-server-weekend</link><guid isPermaLink="false">https://astgl.com/p/shipping-mcp-knowledge-server-weekend</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Sun, 12 Apr 2026 11:30:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lsa6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Turning static content into an AI-citable knowledge base via npm</em></p><p>You have likely used Claude or Cursor to write code, but you have also probably noticed them hallucinating or missing the specific nuances of niche technical topics. I wanted my AI assistant to actually know what I write about, so I built a way to give it a direct line to my content.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h2>The Setup</h2><p>I spend most of my time writing about MCP servers, local LLMs, and AI automation. The problem is that while my articles are great for humans, LLMs often rely on outdated training data or generic web crawls. I needed a way to inject my specific, up-to-date knowledge into the context window of an AI assistant without the manual friction of copying and pasting links every time I had a question.</p><p>I decided to build a <a href="https://astgl.ai/answers/what-is-an-mcp-server/">Model Context Protocol (MCP) server</a> that acts as a specialized, searchable knowledge base for my writing. The goal was simple: when I ask an AI about a topic I have covered, it should be able to query this server, find the relevant article, and cite the source URL back to astgl.ai.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lsa6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lsa6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png 424w, https://substackcdn.com/image/fetch/$s_!lsa6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png 848w, https://substackcdn.com/image/fetch/$s_!lsa6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!lsa6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lsa6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png" width="1456" height="1068" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1068,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:126912,&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://astgl.com/i/193926838?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.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_!lsa6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png 424w, https://substackcdn.com/image/fetch/$s_!lsa6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png 848w, https://substackcdn.com/image/fetch/$s_!lsa6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!lsa6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b16700f-ee65-4b6e-a12e-90ca7ad29eb4_1600x1174.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>What I Built</h2><p>The architecture is designed to be zero-config for the end user. I built a TypeScript-based MCP server using the @modelcontextprotocol/sdk (v1.12.1). Instead of requiring the user to run a heavy vector database or even have Ollama installed, I pre-computed the embeddings at build time.</p><p>I used nomic-embed-text (768 dimensions) via Ollama to turn my articles into vectors. These are stored in a single SQLite database using sqlite-vec. Because the vectors are baked into the package, the server is incredibly lightweight.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wkUc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wkUc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png 424w, https://substackcdn.com/image/fetch/$s_!wkUc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png 848w, https://substackcdn.com/image/fetch/$s_!wkUc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png 1272w, https://substackcdn.com/image/fetch/$s_!wkUc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wkUc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png" width="1456" height="582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:582,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:96279,&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://astgl.com/i/193926838?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.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_!wkUc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png 424w, https://substackcdn.com/image/fetch/$s_!wkUc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png 848w, https://substackcdn.com/image/fetch/$s_!wkUc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png 1272w, https://substackcdn.com/image/fetch/$s_!wkUc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6fbbf8e-4951-4a6e-babe-385b3153dcf0_1536x614.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>The server provides three main tools: 1. search_articles: This performs a vector similarity search and returns ranked results with relevance scores (from 0 to 1). 2. get_answer: This is a direct Q&amp;A tool. It has a preference for FAQ entries and returns a direct answer, the source URL, and related articles. 3. list_topics: This simply lists all ingested articles with their descriptions, URLs, and section headings.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CKAZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CKAZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png 424w, https://substackcdn.com/image/fetch/$s_!CKAZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png 848w, https://substackcdn.com/image/fetch/$s_!CKAZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png 1272w, https://substackcdn.com/image/fetch/$s_!CKAZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CKAZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png" width="870" height="2430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2430,&quot;width&quot;:870,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134894,&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://astgl.com/i/193926838?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.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_!CKAZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png 424w, https://substackcdn.com/image/fetch/$s_!CKAZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png 848w, https://substackcdn.com/image/fetch/$s_!CKAZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png 1272w, https://substackcdn.com/image/fetch/$s_!CKAZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efcb785-12c9-4629-928e-a542c323ee0c_870x2430.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The Build Steps</h2><p>Building this was less about complex coding and more about making smart decisions regarding data structure and portability.</p><p>First, I had to figure out how to chunk the data. I did not just dump whole articles into the database. Instead, I used a per-H2 chunking strategy. Since my technical sections are usually self-contained (typically between 300 and 800 tokens), this keeps the context clean and prevents the AI from getting overwhelmed by irrelevant text. I also treated FAQ entries as their own individual chunks so the get_answer tool could hit them directly for high-precision queries.</p><p>Next, I chose the storage engine. I opted for sqlite-vec over an external vector database like Pinecone or Weaviate. I wanted the entire server to be a single, portable npm package. There is no infrastructure to manage and no API keys to handle. The resulting database is about 3.2MB, which compresses down to just 450KB inside the npm package. It is small enough to ship anywhere.</p><p>I also made a specific choice regarding the math. I used cosine distance instead of L2 (Euclidean) distance. Since the embeddings are normalized, cosine distance provides much better semantic separation for text. During testing, I saw on-topic relevance scores around 0.89, while off-topic noise stayed around 0.73. That gap is wide enough for the AI to clearly distinguish between a &#8220;good&#8221; match and a &#8220;maybe&#8221; match.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gu5f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gu5f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.png 424w, https://substackcdn.com/image/fetch/$s_!gu5f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.png 848w, https://substackcdn.com/image/fetch/$s_!gu5f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.png 1272w, https://substackcdn.com/image/fetch/$s_!gu5f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gu5f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.png" width="1456" height="1108" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1108,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89696,&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://astgl.com/i/193926838?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.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_!gu5f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.png 424w, https://substackcdn.com/image/fetch/$s_!gu5f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.png 848w, https://substackcdn.com/image/fetch/$s_!gu5f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.png 1272w, https://substackcdn.com/image/fetch/$s_!gu5f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dfaf4f4-67aa-4d14-b101-df356b177fbc_1600x1218.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>Finally, I kept this project in its own separate Git repository rather than burying it inside my larger openclaw-localllm monorepo. It makes the versioning much cleaner and allows me to publish updates to the knowledge base without touching my main codebase.</p><h2>Publishing It</h2><p>The goal was to make this &#8220;install and forget.&#8221; I published the package as mcp-astgl-knowledge@1.0.0 on npm, and I also listed it on Smithery under @jmeg8r/mcp-astgl-knowledge.</p><p>However, publishing wasn&#8217;t entirely seamless. I ran into a classic npm 2FA (Two-Factor Authentication) nightmare. When trying to automate the publish process, a standard Automation token and the --auth-type=web flag both failed with an E403 error. I eventually realized the fix: I had to create a Granular Access Token in npm and specifically enable the &#8220;Bypass 2FA for automation&#8221; option. Once I updated my local config with that new token, npm publish worked perfectly</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QWJj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QWJj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.png 424w, https://substackcdn.com/image/fetch/$s_!QWJj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.png 848w, https://substackcdn.com/image/fetch/$s_!QWJj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!QWJj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QWJj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.png" width="1456" height="1068" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8630160-f313-4f98-825f-eafecff453f1_1600x1174.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1068,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:138230,&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://astgl.com/i/193926838?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.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_!QWJj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.png 424w, https://substackcdn.com/image/fetch/$s_!QWJj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.png 848w, https://substackcdn.com/image/fetch/$s_!QWJj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!QWJj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8630160-f313-4f98-825f-eafecff453f1_1600x1174.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 end result is that anyone can add my knowledge base to their Claude Desktop or Cursor setup with a single JSON snippet. There is no need to install Ollama or set up a local database. You just run it via npx.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/shipping-mcp-knowledge-server-weekend?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://astgl.com/p/shipping-mcp-knowledge-server-weekend?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p><h2>Why This Pattern Matters</h2><p>This project taught me a valuable lesson about the future of content. We often think of MCP servers as bridges to live APIs, like a way to query GitHub or Google Search. But an MCP server can also be a way to ship pre-computed knowledge.</p><p>This is a new way to think about content strategy. By shipping an MCP server, you are making your writing &#8220;AI-citable.&#8221; When an AI assistant uses this tool, it is not just answering a question; it is actively citing your URL. This creates a technical loop where the AI&#8217;s answer drives referral traffic back to your site. It turns your technical documentation into a programmable asset that lives directly inside the user&#8217;s development environment.</p><h2>Quick Reference</h2><p>To use the server, add this to your mcpServers configuration in Claude Desktop or Cursor:</p><p>{<br> &#8220;mcpServers&#8221;: {<br> &#8220;astgl-knowledge&#8221;: {<br> &#8220;command&#8221;: &#8220;npx&#8221;,<br> &#8220;args&#8221;: [&#8221;-y&#8221;, &#8220;mcp-astgl-knowledge&#8221;]<br> }<br> }<br>}</p><p>You can find the source code and the full history of the build on GitHub: <a href="https://github.com/Jmeg8r/mcp-astgl-knowledge">https://github.com/Jmeg8r/mcp-astgl-knowledge</a></p><p><em>Found this useful? I share practical lessons from my systems engineering journey at <a href="https://astgl.com">As The Geek Learns</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/shipping-mcp-knowledge-server-weekend/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://astgl.com/p/shipping-mcp-knowledge-server-weekend/comments"><span>Leave a comment</span></a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Behind ASTGL: How I Built an Autonomous AI Product Team That Ships Without Me]]></title><description><![CDATA[A technical case study on running a 5-agent AI council]]></description><link>https://astgl.com/p/behind-astgl-how-i-built-an-autonomous-ai-product-team</link><guid isPermaLink="false">https://astgl.com/p/behind-astgl-how-i-built-an-autonomous-ai-product-team</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Fri, 03 Apr 2026 16:27:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XoAN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p><strong>A technical case study on running a 5-agent AI council that researches, debates, builds, and publishes digital products&#8212;entirely on local hardware.</strong></p><h3>The Problem I Was Trying to Solve</h3><p>I run a tech blog called As The Geek Learns. I also work full-time as a systems engineer. I also maintain two newsletters. I don&#8217;t have time to research product ideas, validate markets, write content, build deliverables, create marketing copy, and publish to a storefront.</p><p>But I had a Mac Studio M3 Ultra sitting on my desk with 256 GB of unified memory, and I kept thinking: what if I could build a team that does most of this for me?</p><p>Not a chatbot. Not a single prompt chain. An actual team&#8212;with specializations, disagreements, voting, and accountability.</p><p>This is what I built. Here&#8217;s how it works, where it breaks, and what I&#8217;ve learned.</p><p></p><h3>The Architecture: Five Agents, One Pipeline</h3><p>The system runs on OpenClaw, an open-source AI agent framework. The &#8220;team&#8221; is a council of five agents, each with a distinct role and scoring rubric. They share a single pipeline&#8212;one product at a time, from idea to published storefront listing.</p><h4>The Agents</h4><p><strong>SCOUT</strong>&#8212;Market Intelligence</p><p>Scans for demand signals, competitor gaps, and audience fit. Scores ideas on: demand evidence, pain severity, competitor gap, ASTGL brand fit, and freshness. SCOUT&#8217;s job is to make sure we&#8217;re not building something nobody wants.</p><p><strong>FORGE</strong>&#8212;Feasibility &amp; Build</p><p>Estimates build time, assesses toolchain requirements, and defines scope ceilings. Scores on: build time, tool availability, format clarity, scope containment, and reusability. FORGE is the one who says, &#8220;That's a 40-hour build, not a weekend project,&#8221; and gets outvoted anyway. (More on that later.)</p><p><strong>QUILL</strong>&#8212;Sellability &amp; Messaging</p><p>Tests headlines, evaluates audience clarity, and writes all marketing copy. Scores on: headline test, audience clarity, urgency, differentiation, and shareability. If QUILL can&#8217;t write a compelling one-liner, the product doesn&#8217;t move forward.</p><p><strong>LEDGER</strong>&#8212;Revenue &amp; Pricing</p><p>Analyzes price points, margin viability, market size, and willingness to pay. Scores on: price point, addressable market, willingness to pay, recurring potential, and margin. LEDGER killed our first micro-eBook idea at $1.99&#8212;&#8220;below the $19 floor individually; bundle pricing required for margin viability.&#8221;</p><p><strong>MAVEN</strong>&#8212;Customer Value &amp; Quality</p><p>The quality gate. MAVEN scores on pain severity, solution completeness, time to value, trust signals, and predicted satisfaction. Nothing ships without MAVEN&#8217;s approval. MAVEN also runs the final quality review, fact-checking deliverables against their own constraints.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XoAN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XoAN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png 424w, https://substackcdn.com/image/fetch/$s_!XoAN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png 848w, https://substackcdn.com/image/fetch/$s_!XoAN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png 1272w, https://substackcdn.com/image/fetch/$s_!XoAN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XoAN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png" width="1230" height="962" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61e72337-e081-4d90-aaae-9d1087c1fdc2_1230x962.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:962,&quot;width&quot;:1230,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:296645,&quot;alt&quot;:&quot;\&quot;Architecture diagram of the ASTGL autonomous AI product team. Five specialized agents &#8212; SCOUT (Market Intel), FORGE (Feasibility), QUILL (Sellability), LEDGER (Revenue), and MAVEN (Quality Gate) &#8212; connect via arrows to a central COUNCIL Consensus diamond. Below, a dashed arrow feeds into a 7-step pipeline: Research, Pricing, Brief, Build, QA Review, Marketing, and Publish. The bottom bar shows the infrastructure: Mac Studio M3 Ultra, 256 GB, llama.cpp, 26 Cron Jobs, 100% Local. An 80/125 scoring threshold badge sits on the left, and a 4 Products Shipped badge on the right. Dark navy background with color-coded agents: blue for SCOUT, amber for FORGE, green for QUILL, red for LEDGER, and pink for MAVEN.\&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://astgl.com/i/193066003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61e72337-e081-4d90-aaae-9d1087c1fdc2_1230x962.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&quot;Architecture diagram of the ASTGL autonomous AI product team. Five specialized agents &#8212; SCOUT (Market Intel), FORGE (Feasibility), QUILL (Sellability), LEDGER (Revenue), and MAVEN (Quality Gate) &#8212; connect via arrows to a central COUNCIL Consensus diamond. Below, a dashed arrow feeds into a 7-step pipeline: Research, Pricing, Brief, Build, QA Review, Marketing, and Publish. The bottom bar shows the infrastructure: Mac Studio M3 Ultra, 256 GB, llama.cpp, 26 Cron Jobs, 100% Local. An 80/125 scoring threshold badge sits on the left, and a 4 Products Shipped badge on the right. Dark navy background with color-coded agents: blue for SCOUT, amber for FORGE, green for QUILL, red for LEDGER, and pink for MAVEN.&quot;" title="&quot;Architecture diagram of the ASTGL autonomous AI product team. Five specialized agents &#8212; SCOUT (Market Intel), FORGE (Feasibility), QUILL (Sellability), LEDGER (Revenue), and MAVEN (Quality Gate) &#8212; connect via arrows to a central COUNCIL Consensus diamond. Below, a dashed arrow feeds into a 7-step pipeline: Research, Pricing, Brief, Build, QA Review, Marketing, and Publish. The bottom bar shows the infrastructure: Mac Studio M3 Ultra, 256 GB, llama.cpp, 26 Cron Jobs, 100% Local. An 80/125 scoring threshold badge sits on the left, and a 4 Products Shipped badge on the right. Dark navy background with color-coded agents: blue for SCOUT, amber for FORGE, green for QUILL, red for LEDGER, and pink for MAVEN.&quot;" srcset="https://substackcdn.com/image/fetch/$s_!XoAN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png 424w, https://substackcdn.com/image/fetch/$s_!XoAN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png 848w, https://substackcdn.com/image/fetch/$s_!XoAN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.png 1272w, https://substackcdn.com/image/fetch/$s_!XoAN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b16781-40bb-4ff9-93d8-054961662e10_1230x962.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">Five Agents - One Pipeline</figcaption></figure></div><p></p><h4>How They Score</h4><p>Each agent scores every product idea on their 5 criteria, 1-5 points each. Maximum: 25 per agent, 125 total. The pipeline threshold is 80% (100/125). Below that, the idea goes back to the backlog.</p><p>This isn&#8217;t a formality. I&#8217;ve watched LEDGER tank a product the other four loved because the margin math didn&#8217;t work. I&#8217;ve watched FORGE dissent on sequencing even when the vote went against them. The scoring rubric creates genuine tension, and that tension produces better decisions.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><h4>The Pipeline: Seven Steps</h4><p>When the council reaches consensus on a product, it enters a sequential pipeline:</p><p>1. <strong>Market Research</strong>&#8212;SCOUT deep-dives demand signals, competitor analysis, pricing benchmarks</p><p>2. <strong>Pricing</strong>&#8212;LEDGER sets price point with live competitor data</p><p>3. <strong>Creative Brief</strong>&#8212;QUILL writes the brief: audience, tone, format, constraints</p><p>4. <strong>Build</strong>&#8212;FORGE constructs the deliverables (PDFs, templates, code bundles, worksheets)</p><p>5. <strong>Quality Review</strong>&#8212;MAVEN fact-checks, verifies constraints, scores 1-10 (must be &#8805;7 to pass)</p><p>6. <strong>Marketing</strong>&#8212;QUILL produces product descriptions, social posts, email sequences</p><p>7. <strong>Package &amp; Publish</strong>&#8212;Final ZIP assembly, Stripe product creation, storefront listing</p><p>Each step runs as a cron job on a 30-minute cycle. The pipeline runner checks for the active product, determines which step is next, and executes it. A full product can go from consensus to published in under 24 hours&#8212;though in practice it usually takes 2-3 days because of quality gates and my own review bottlenecks.</p><h3>The Governance: How Five Agents Make Decisions</h3><p>This is the part I&#8217;m most proud of and the part that surprised me the most.</p><h4>Voting</h4><p>The council uses ranked-choice instant-runoff voting. Each agent ranks their preferred ideas. If no idea gets &gt;60% of the weighted score in Round 1, the lowest-scoring idea is eliminated and votes redistribute. This continues until consensus or deadlock.</p><p>In practice, most decisions resolve in 2-3 rounds. The debates are real&#8212;FORGE might argue for a faster build while SCOUT pushes for a higher-signal market. LEDGER might prefer a premium product, while QUILL argues the audience can&#8217;t bear that price point.</p><h4>Deadlock Protocol</h4><p>If the evening session can&#8217;t reach &gt;60% consensus, it escalates to a frontier model (Claude Sonnet) for a tie-breaking analysis. This has happened twice. Both times, the frontier model sided with the minority agent, which I found interesting.</p><h4>Kill Switches and Stall Prevention</h4><p>The system has several circuit breakers:</p><p><strong>3 consecutive no-consensus meetings</strong> &#8594; Alert sent to me via Discord</p><p><strong>7 days with no active build</strong> &#8594; Next morning meeting must activate the highest-scored backlog item</p><p><strong>48+ hours stalled on one pipeline step</strong> &#8594; Council votes to hold or shelve</p><p><strong>Global kill switch</strong>&#8212;I can halt everything with a single signal file</p><p>The stall prevention matters because I learned early that without it, the council will endlessly debate scoring refinements instead of building products. The 48-hour timer forces decisions.</p><p><strong>SOUL.md: The Operating Constitution</strong></p><p>Every agent operates under a shared SOUL.md&#8212;a set of principles that override everything else:</p><p>Be genuinely helpful (no filler content)</p><p>Have opinions (agents must take positions, not hedge)</p><p>Be resourceful before asking (try to solve problems before escalating to me)</p><p>Earn trust through competence</p><p>When SOUL.md conflicts with a protocol decision, SOUL.md wins. This has saved me from shipping mediocre products more than once&#8212;MAVEN has invoked SOUL principles to block a product that technically passed all numeric thresholds but didn&#8217;t meet the &#8220;genuinely helpful&#8221; standard.</p><p></p><h3>The Infrastructure: Running It Locally</h3><p>Everything runs on a single Mac Studio. No cloud APIs for the pipeline work&#8212;just local models.</p><h4>Models</h4><p><strong>Primary:</strong> Qwen3 32B (served via llama.cpp, not Ollama&#8212;4x faster wall time)</p><p><strong>Code tasks:</strong> Qwen 2.5 Coder 32B</p><p><strong>Heavy reasoning:</strong> Qwen 2.5 72B (for consolidation and ideation tasks)</p><p><strong>Light tasks: </strong>Qwen3 8B (monitoring, notifications, briefings)</p><p>The 32B model handles all pipeline steps. llama.cpp serves it on port 8081 with flash attention, 3 parallel slots, and 128K total context. I migrated from Ollama after benchmarking showed 3.7 seconds vs 14.4 seconds on the same prompt.</p><h4>Cron Fleet</h4><p>26 cron jobs run the system:</p><p>Pipeline runner every 30 minutes during business hours</p><p>Morning briefing at 6:30 AM</p><p>Evening summary at 8:00 PM</p><p>Market scans daily</p><p>Council meetings (morning standup + evening strategy session)</p><p>Notification triage every 5 minutes (critical), hourly (important), every 3 hours (low)</p><p>Weekly deep scan, docs audit, test suite, security audits</p><p>All delivery goes through Discord with a Slack mirror. The system has its own Discord server with dedicated channels for ops alerts, council meetings, pipeline status, product reviews, and market intelligence.</p><h3>The Numbers That Matter</h3><p><strong>VRAM usage:</strong> ~97 GB pinned across 4 models (out of 256 GB available)</p><p><strong>Pipeline throughput: </strong>Consensus to published in 12-48 hours depending on product complexity</p><p><strong>Quality scores:</strong> Averaging 8-8.5/10 on MAVEN reviews</p><p><strong>Council consensus rate: </strong>&gt;80% of votes resolve without escalation</p><h4>What I&#8217;ve Shipped</h4><p>Since the council went live in late March 2026:</p><p>I<strong>ncident Response Runbook &amp; Playbook Toolkit</strong>&#8212;112/125, $19-24, targeting DevOps/SRE teams</p><p><strong>Sysadmin Documentation Toolkit</strong>&#8212;113/125, $24, Markdown + Notion + Obsidian formats</p><p><strong>Server Security Hardening Checklist Kit</strong>&#8212;119/125 (highest score), $24, Linux + Windows</p><p><strong>Homelab Disaster Recovery Kit</strong>&#8212;116/125, $29 (premium tier), Proxmox + TrueNAS focused</p><p>Each product went through all seven pipeline steps, MAVEN quality review, and full marketing asset generation. The marketing copy, product descriptions, and email sequences were all council-produced.</p><p>I review everything before it goes live. The council builds it; I sanity-check it. So far I&#8217;ve shipped every product MAVEN approved&#8212;their quality bar has been higher than mine in several cases.</p><h3>Where It Breaks</h3><p>I&#8217;d be dishonest if I didn&#8217;t cover the failure modes. There are several.</p><h4>The Approval Bottleneck</h4><p>The biggest problem has been me. The system is designed to be autonomous, but exec permissions&#8212;the ability for agents to run shell commands&#8212;require approval policies. When those policies are too restrictive, the pipeline stalls waiting for me to approve a command I would have approved anyway. One product sat blocked for 30+ hours because the agent couldn&#8217;t run a script to rebuild a ZIP file.</p><p>The fix was widening exec permissions for the pipeline agent. The tradeoff is real: more autonomy means more trust in the model not to do something destructive. I&#8217;m comfortable with it because everything runs locally and I have kill switches, but it&#8217;s a genuine tension.</p><h4>Model Limitations</h4><p>32B parameter models are not frontier models. They occasionally:</p><p>Lose track of multi-step instructions across long pipeline runs</p><p>Generate marketing copy that&#8217;s technically correct but tonally flat</p><p>Miss nuanced quality issues that a larger model would catch</p><p>The council structure mitigates this&#8212;five agents checking each other catches most issues. But I&#8217;ve had to add explicit constraints (like MAVEN&#8217;s &#8220;interface-agnostic instructions&#8221; rule) after catching problems the models didn&#8217;t flag.</p><h4>The Constant Infrastructure Churn</h4><p>OpenClaw ships updates frequently. Each update can break config schemas, change entry points, invalidate auth tokens, or require new mandatory config keys. I&#8217;ve turned off auto-updates and moved to manual, controlled upgrades&#8212;the same approach I use for enterprise infrastructure at my day job.</p><h4>Stale Sessions</h4><p>When an agent session accumulates enough failed attempts, the model sometimes learns the wrong patterns from its own conversation history. The fix is clearing the session, but diagnosing when this is happening versus a legitimate configuration issue takes time.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share As The Geek Learns&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://astgl.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share As The Geek Learns</span></a></p><p></p><h3>What I&#8217;ve Learned</h3><p><strong>Governance matters more than model quality.</strong> The scoring rubric, voting mechanics, and kill switches produce better outcomes than throwing a more powerful model at an unstructured problem. Five constrained agents outperform one unconstrained agent.</p><p><strong>Autonomy is a spectrum, not a switch. </strong>The right level of autonomy depends on the task, the blast radius, and your comfort level. I give the pipeline agent full exec access. I keep the notification agent on a tight allowlist. Both are correct.</p><p><strong>Local inference is viable for production work. </strong>A 32B model on good hardware, served properly (llama.cpp, not Ollama, with enough context per slot), handles pipeline tasks reliably. You don&#8217;t need cloud APIs for everything.</p><p><strong>Your AI team will reflect your engineering discipline. </strong>If you don&#8217;t build in stall prevention, it won&#8217;t prevent stalls. If you don&#8217;t define quality gates, quality will drift. If you don&#8217;t document your governance, your agents will improvise governance&#8212;poorly.</p><p><strong>The hardest part isn&#8217;t the AI. It&#8217;s the ops. </strong>Model selection, prompt engineering, and agent design are maybe 30% of the work. The other 70% is cron scheduling, delivery routing, auth management, monitoring, and debugging why the Discord webhook stopped working at 3 AM.</p><h3>What&#8217;s Next</h3><p>The council is evaluating enterprise-tier products (an <strong>AI Agent Readiness Guide targeting IT leaders</strong>) and exploring whether the pipeline can handle longer-form content like courses. I&#8217;m also working on making the council&#8217;s own meeting transcripts and decision logs available as a teaching resource&#8212;because the most interesting thing about this system isn&#8217;t the products it ships, but the way five AI agents argue about what to build next.</p><p>If you want to build something like this, start smaller than I did. One agent, one cron job, one delivery channel. Get that working reliably before you add governance. The infrastructure complexity compounds fast.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/behind-astgl-how-i-built-an-autonomous-ai-product-team/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://astgl.com/p/behind-astgl-how-i-built-an-autonomous-ai-product-team/comments"><span>Leave a comment</span></a></p><p></p><p>James Cruce is a systems engineer and the human behind As The Geek Learns. He runs an autonomous AI product team on a Mac Studio in his home office. <strong>The council has not yet voted to replace him, but LEDGER has noted the margin improvement if they did.</strong></p><p>Technical Stack: OpenClaw v2026.4.2 &#183; Qwen3 32B (llama.cpp) &#183; Mac Studio M3 Ultra (256 GB) &#183; Discord + Slack delivery &#183; 26 cron jobs &#183; 5-agent council with IRV voting</p><p><strong>Published on As The Geek Learns&#8212;astgl.com</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[From Notion Export to Local Knowledge Base in One Afternoon]]></title><description><![CDATA[I hit the Export button in Notion and got a zip file.]]></description><link>https://astgl.com/p/notion-export-local-knowledge-base</link><guid isPermaLink="false">https://astgl.com/p/notion-export-local-knowledge-base</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 30 Mar 2026 01:01:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Vfxs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I hit the Export button in Notion and got a zip file. Three megabytes. Years of notes, content calendars, CRM records, meeting summaries, and project tracking&#8212;all flattened into Markdown and CSV files with garbled names.</p><p>Turning that export into a structured local knowledge base for an AI agent wasn&#8217;t hard. But it was full of the kind of small surprises that make you appreciate why Notion charges a subscription.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Vfxs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vfxs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!Vfxs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!Vfxs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!Vfxs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vfxs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/214408a4-e25c-403d-a625-250930972663_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Vfxs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!Vfxs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!Vfxs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!Vfxs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F214408a4-e25c-403d-a625-250930972663_1024x608.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><figcaption class="image-caption">Knowledge Word Cloud</figcaption></figure></div><div><hr></div><h2>The Export</h2><p>Notion&#8217;s export is a zip file. Or rather, it&#8217;s a zip inside a zip. The outer archive contains an inner archive, and the inner archive contains your data. This is apparently normal. It&#8217;s also apparently undocumented.</p><p>The files inside follow Notion&#8217;s internal naming convention: every file has a 32-character hex ID appended to its name. Content Calendar 1a2b3c4d5e6f.csv instead of just Content Calendar.csv. The directory structure mirrors your Notion workspace, but the folder names have IDs too.</p><p>For 47 files, this was manageable. I organized them into a workspace structure that made sense for both me and Tars:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AEeN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AEeN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png 424w, https://substackcdn.com/image/fetch/$s_!AEeN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png 848w, https://substackcdn.com/image/fetch/$s_!AEeN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png 1272w, https://substackcdn.com/image/fetch/$s_!AEeN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AEeN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png" width="615" height="229" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:229,&quot;width&quot;:615,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39997,&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://astgl.com/i/192031332?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.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_!AEeN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png 424w, https://substackcdn.com/image/fetch/$s_!AEeN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png 848w, https://substackcdn.com/image/fetch/$s_!AEeN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png 1272w, https://substackcdn.com/image/fetch/$s_!AEeN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed7e7e2-39f4-42a1-b458-ff464516d3ce_615x229.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Every file is Markdown or CSV. Every file lives on my SSD. Every file is readable by both ClawPad (the editor) and Tars (the agent). No database. No API. Just files.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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 CSV Gotcha</h2><p>The content calendar was the most important import. Thirty articles in various stages&#8212;ideas, drafts, ready to publish. Notion exports these as CSV with all the metadata: title, status, publish date, and tags.</p><p>My first attempt to parse it produced rows titled &#8220;Untitled&#8221; for every entry. The data was there, but the title column wasn&#8217;t matching.</p><p>The culprit: <strong>BOM (<a href="https://en.wikipedia.org/wiki/Byte_order_mark">Byte Order Mark</a>) characters.</strong> Notion&#8217;s CSV export prepends \ufeff to the beginning of the file. This invisible character attaches itself to the first column header, so Title becomes \ufeffTitle. Your code reads the header, doesn&#8217;t find a match for Title, and returns empty strings.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;b44f332b-54d0-4c78-a4c6-00384b8524b1&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml"># Wrong
with open(&#8217;calendar.csv&#8217;) as f:
 reader = csv.DictReader(f)

# Right
with open(&#8217;calendar.csv&#8217;, encoding=&#8217;utf-8-sig&#8217;) as f:
 reader = csv.DictReader(f)</code></pre></div><p>The utf-8-sig encoding strips the BOM automatically. This is a Python-specific fix&#8212;other languages have their own BOM handling. But the universal lesson is <strong>always inspect the actual bytes of imported data before writing parsing code.</strong> A head -c 20 file.csv | xxd would have shown me the BOM in seconds.</p><h2>Building the Content Pipeline</h2><p>The raw CSV became pages/astgl/pipeline.md&#8212;a living document Tars checks during every heartbeat cycle:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9cu3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9cu3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.png 424w, https://substackcdn.com/image/fetch/$s_!9cu3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.png 848w, https://substackcdn.com/image/fetch/$s_!9cu3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.png 1272w, https://substackcdn.com/image/fetch/$s_!9cu3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9cu3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.png" width="521" height="147" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/692f4792-0775-4bdf-936d-47f2420e289f_521x147.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:147,&quot;width&quot;:521,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21624,&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://astgl.com/i/192031332?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.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_!9cu3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.png 424w, https://substackcdn.com/image/fetch/$s_!9cu3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.png 848w, https://substackcdn.com/image/fetch/$s_!9cu3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.png 1272w, https://substackcdn.com/image/fetch/$s_!9cu3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692f4792-0775-4bdf-936d-47f2420e289f_521x147.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p>
      <p>
          <a href="https://astgl.com/p/notion-export-local-knowledge-base">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[I Gave My AI Agent Hands. It Immediately Started Texting My Wife.]]></title><description><![CDATA[My local AI agent, Tars, could talk.]]></description><link>https://astgl.com/p/ai-agent-hands-texting-wife</link><guid isPermaLink="false">https://astgl.com/p/ai-agent-hands-texting-wife</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Tue, 24 Mar 2026 22:31:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rNj2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My local AI agent, <strong>Tars</strong>, could talk. It could answer questions via iMessage and Slack. But it couldn&#8217;t actually <em>do</em> anything&#8212;couldn't create files, couldn&#8217;t read my calendar, couldn&#8217;t manage tasks. It was a chatbot trapped behind glass.</p><p>Phase 2 of the Notion replacement project was about giving Tars hands. Phases 3 and 4 were about teaching it what to do with them. Phase &#8220;oh no&#8221; was when it started doing things I didn&#8217;t ask for.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rNj2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rNj2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png 424w, https://substackcdn.com/image/fetch/$s_!rNj2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png 848w, https://substackcdn.com/image/fetch/$s_!rNj2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png 1272w, https://substackcdn.com/image/fetch/$s_!rNj2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rNj2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png" width="693" height="871" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:871,&quot;width&quot;:693,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184934,&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://astgl.com/i/191878983?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.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_!rNj2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png 424w, https://substackcdn.com/image/fetch/$s_!rNj2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png 848w, https://substackcdn.com/image/fetch/$s_!rNj2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.png 1272w, https://substackcdn.com/image/fetch/$s_!rNj2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70caa001-0cd2-41ed-afc7-0034f0e14432_693x871.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><div><hr></div><h2>From Chatbot to Agent</h2><p><a href="https://github.com/openclaw/openclaw">OpenClaw</a> ships with something called &#8220;tool profiles&#8221;&#8212;presets that control what an agent can and can&#8217;t do. Out of the box, Tars was running the messaging profile. Sounds reasonable. Here&#8217;s what that actually means:</p><p>Messaging profile: sessions_list, sessions_history, sessions_send, message</p><p>Four tools. All it could do was read and write messages. It couldn&#8217;t touch the filesystem, run commands, or use any of the skills I was about to install. I needed the full profile.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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><p>I found this by reading OpenClaw&#8217;s bundled JavaScript source code. The tool profiles aren&#8217;t documented anywhere obvious&#8212;they're defined in a minified file called tool-catalog-CDe8aNjS.js. The full profile is literally an empty object: {}. No restrictions.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;c11341b2-eea7-4ccc-a03b-cb962f69ec59&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">{
 &#8220;tools&#8221;: {
 &#8220;profile&#8221;: &#8220;full&#8221;
 }
}</code></pre></div><p>One config change, gateway restart, and Tars went from a chatbot to an autonomous agent with read, write, edit, and execute permissions on my machine.</p><p>This is the moment where self-hosting gets real. You&#8217;re not toggling a feature in a SaaS dashboard with guardrails someone else built. You&#8217;re handing your local AI unrestricted shell access. The power is exhilarating. The implications are sobering. We&#8217;ll come back to that.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Sxe2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sxe2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.png 424w, https://substackcdn.com/image/fetch/$s_!Sxe2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.png 848w, https://substackcdn.com/image/fetch/$s_!Sxe2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.png 1272w, https://substackcdn.com/image/fetch/$s_!Sxe2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sxe2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.png" width="662" height="919" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd053339-8504-4a35-9429-386b1eb2527d_662x919.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:919,&quot;width&quot;:662,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35571,&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://astgl.com/i/191878983?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.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_!Sxe2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.png 424w, https://substackcdn.com/image/fetch/$s_!Sxe2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.png 848w, https://substackcdn.com/image/fetch/$s_!Sxe2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.png 1272w, https://substackcdn.com/image/fetch/$s_!Sxe2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd053339-8504-4a35-9429-386b1eb2527d_662x919.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><h2>ClawPad: The Editor That Sees What The Agent Writes</h2><p><a href="https://clawpad.io/">ClawPad</a> is a Notion-style document editor that connects to the same workspace Tars uses. When Tars creates a file at <em><strong>~/.openclaw/workspace/pages/daily-notes/2026-03-07.md</strong></em>, it shows up in ClawPad instantly. When I edit a page in ClawPad, Tars can read the changes.</p>
      <p>
          <a href="https://astgl.com/p/ai-agent-hands-texting-wife">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[I Gave My Mac Studio an AI OpenClaw Brain Upgrade. Here’s Every Wall I Hit.]]></title><description><![CDATA[Replacing Notion with a self-hosted AI agent running on a Mac Studio. Today I actually did it. The install took six hours, not the two I planned]]></description><link>https://astgl.com/p/i-gave-my-mac-studio-an-ai-openclaw</link><guid isPermaLink="false">https://astgl.com/p/i-gave-my-mac-studio-an-ai-openclaw</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Mon, 09 Mar 2026 11:32:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!w7x2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Last week I said I was replacing Notion with a self-hosted AI agent running on a Mac Studio. Today I actually did it. <strong>The install took six hours, not the two I planned</strong>, and it included three problems that no documentation warned me about. The result is a working AI assistant named <strong>TARS</strong> that responds to both Slack and iMessage. <strong>All local. Zero cloud dependency.</strong></p><p>Here&#8217;s how it actually went.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w7x2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w7x2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!w7x2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!w7x2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!w7x2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w7x2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25f8ad73-9a47-46ae-bb84-ab4def86ba67_1408x768.jpeg&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:377854,&quot;alt&quot;:&quot;\&quot;Monopoly-style game card illustration titled 'Technology Upgrade or Intellectual Leap' showing a cartoon      tycoon in a top hat and tuxedo holding a glowing brain above a robotic lobster. The scene includes gears, circuit        boards, flying birds with briefcases, a city skyline, and toy trains. The card reads 'Your robotic lobster gets a head    start! Collect Tech Bonus +$200' with the tagline 'OpenClaw Now With Brain' at the bottom.\&quot;   &quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://astgl.com/i/190225782?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f8ad73-9a47-46ae-bb84-ab4def86ba67_1408x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&quot;Monopoly-style game card illustration titled 'Technology Upgrade or Intellectual Leap' showing a cartoon      tycoon in a top hat and tuxedo holding a glowing brain above a robotic lobster. The scene includes gears, circuit        boards, flying birds with briefcases, a city skyline, and toy trains. The card reads 'Your robotic lobster gets a head    start! Collect Tech Bonus +$200' with the tagline 'OpenClaw Now With Brain' at the bottom.&quot;   " title="&quot;Monopoly-style game card illustration titled 'Technology Upgrade or Intellectual Leap' showing a cartoon      tycoon in a top hat and tuxedo holding a glowing brain above a robotic lobster. The scene includes gears, circuit        boards, flying birds with briefcases, a city skyline, and toy trains. The card reads 'Your robotic lobster gets a head    start! Collect Tech Bonus +$200' with the tagline 'OpenClaw Now With Brain' at the bottom.&quot;   " srcset="https://substackcdn.com/image/fetch/$s_!w7x2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!w7x2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!w7x2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!w7x2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b394b29-24bf-4d1a-8f57-9b768221c61f_1408x768.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><figcaption class="image-caption">Collect $200 and a Brain</figcaption></figure></div><div><hr></div><h2>The Setup</h2><p>The plan was straightforward. Install Ollama for local LLM inference, install OpenClaw as the agent framework, and wire up messaging channels, done. I&#8217;ve got a Mac Studio M3 Ultra with 256 GB of unified memory. Plenty of horsepower.</p><p>Should have been a two-hour job. It wasn&#8217;t.</p><p>Not because the tools are bad. They&#8217;re actually solid. But self-hosting AI means you&#8217;re the sysadmin, the DevOps team, and the QA department all at once. Every integration has its own auth model, its own quirks, and its own way of failing without telling you.</p><div><hr></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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>Three Problems Nobody Warned Me About</h2><p>Three problems ate most of my afternoon, and none of them were in the documentation.</p><p><strong>Problem 1: OpenClaw couldn&#8217;t authenticate with Ollama.</strong> The onboarding wizard created a config file, but the gateway runs as a macOS LaunchAgent. That&#8217;s a background service with its own environment. The API key I set in the config never reached the running process. I spent two hours reading bundled JavaScript source code before I figured it out. OpenClaw checks for an OLLAMA_API_KEY environment variable, and the LaunchAgent plist needed it injected directly.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;6cdac4a8-a7cb-4f89-8e20-12d2ea206f7f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">&lt;!-- The fix: add to ~/Library/LaunchAgents/ai.openclaw.gateway.plist --&gt;
&lt;key&gt;OLLAMA_API_KEY&lt;/key&gt;
&lt;string&gt;ollama-local&lt;/string&gt;</code></pre></div><p>The auth resolution chain goes: auth profiles.json first, then environment variables, then config apiKey. You won&#8217;t need to know that until you do.</p><div class="paywall-jump" data-component-name="PaywallToDOM"></div><p><strong>Problem 2: iMessage needs two separate permissions.</strong> OpenClaw uses imsg, a CLI tool that reads the macOS Messages database. Granting Full-Disk Access to the node binary seems like it should be enough. It&#8217;s not. The imsg binary needs its own Full-Disk Access entry too. Two binaries, two permission grants. Miss one, and you get a cryptic &#8220;permissionDenied&#8221; on chat.db with no hint about which binary is the problem.</p><p><strong>Problem 3: Slack&#8217;s event delivery broke silently.</strong> Socket Mode connected fine. The status page said everything worked. But zero messages came through. Turns out the first Slack app I created had corrupted internal state from toggling event subscriptions after initial setup. I deleted the entire app and recreated it from a YAML manifest with everything preconfigured. The second app worked immediately.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;75c8d2fb-4026-4eb4-96ab-51260f63f6e8&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml"># The manifest that actually works
settings:
 event_subscriptions:
 bot_events:
 - app_mention
 - message.im
 socket_mode_enabled: true</code></pre></div><h2>The Sequence That Actually Works</h2><p>Distilled from my trial and error so you don&#8217;t have to repeat it.</p><p><strong><a href="https://ollama.com/">Ollama</a>:</strong> Skip the install script. It needs sudo. Download Ollama.app, drag it to Applications, launch it. The CLI sets itself up automatically. Then pull your models. I&#8217;m running qwen3:32b as the primary (20 GB) with qwen3:8b as the fallback.</p><p><strong><a href="https://openclaw.ai/">OpenClaw</a>:</strong> Install via npm, run the onboarding wizard, then immediately edit the LaunchAgent plist to inject OLLAMA_API_KEY. Set contextWindow to 65536 in the config. The default 16K will break OpenClaw&#8217;s tool use, and you&#8217;ll get weird truncation errors with no obvious cause. Restart the gateway after every config change.</p><p><strong>iMessage:</strong> Grant Full Disk Access to both /path/to/node and /path/to/imsg. Add allowed senders to channels.imessage.allowFrom in E.164 format (+1XXXXXXXXXX). Don&#8217;t try messaging yourself. Messages on the same device and Apple ID don&#8217;t trigger inbound events. Use a different phone to test.</p><p><strong>Slack:</strong> Create your app from a manifest with Socket Mode and event subscriptions already configured. Don&#8217;t enable features one at a time through the UI. Generate the App-Level Token (xapp-...) with connections:write scope. Your messages arrive through the App&#8217;s Messages tab, not regular Slack DMs.</p><div><hr></div><p></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/i-gave-my-mac-studio-an-ai-openclaw?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/i-gave-my-mac-studio-an-ai-openclaw?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://astgl.com/p/i-gave-my-mac-studio-an-ai-openclaw?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><h2>Why This Matters</h2><p>Every one of these problems has the same root cause. Self-hosted tools don&#8217;t have managed infrastructure hiding the complexity from you. Notion works because someone else handles the auth, the message routing, and the permission grants. <strong>When you self-host, that someone is you.</strong></p><div class="pullquote"><p>Here&#8217;s what you get in return: a 32-billion-parameter language model running entirely on your hardware, responding in seconds, with zero data leaving your network. My wife texted my number, and TARS replied. I messaged it from Slack and got an answer. No API costs. No token limits. No third party reading my business documents.</p></div><p>(For the curious out there, TARS was named after the famous Interstellar TARS Marine robot and has the sarcasm as well)</p><p>First model load took 36 seconds. After that, responses come back fast. With 256 GB of unified memory, I could run models four times this size if I needed to.</p><h2>Quick Reference</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sKq3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94bb3e26-d632-4294-a942-07d562cf2410_1200x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sKq3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94bb3e26-d632-4294-a942-07d562cf2410_1200x900.png 424w, https://substackcdn.com/image/fetch/$s_!sKq3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94bb3e26-d632-4294-a942-07d562cf2410_1200x900.png 848w, https://substackcdn.com/image/fetch/$s_!sKq3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94bb3e26-d632-4294-a942-07d562cf2410_1200x900.png 1272w, https://substackcdn.com/image/fetch/$s_!sKq3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94bb3e26-d632-4294-a942-07d562cf2410_1200x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sKq3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94bb3e26-d632-4294-a942-07d562cf2410_1200x900.png" width="1200" height="900" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94bb3e26-d632-4294-a942-07d562cf2410_1200x900.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba819493-f35b-4113-867a-87ab0b6286bd_1200x900.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:900,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:68765,&quot;alt&quot;:&quot;A Quick Reference Chart for Task and Key Details for each task. Aquamarine and white letters on a black background.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://astgl.com/i/190225782?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba819493-f35b-4113-867a-87ab0b6286bd_1200x900.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A Quick Reference Chart for Task and Key Details for each task. Aquamarine and white letters on a black background." title="A Quick Reference Chart for Task and Key Details for each task. Aquamarine and white letters on a black background." srcset="https://substackcdn.com/image/fetch/$s_!sKq3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94bb3e26-d632-4294-a942-07d562cf2410_1200x900.png 424w, https://substackcdn.com/image/fetch/$s_!sKq3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94bb3e26-d632-4294-a942-07d562cf2410_1200x900.png 848w, https://substackcdn.com/image/fetch/$s_!sKq3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94bb3e26-d632-4294-a942-07d562cf2410_1200x900.png 1272w, https://substackcdn.com/image/fetch/$s_!sKq3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94bb3e26-d632-4294-a942-07d562cf2410_1200x900.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://astgl.com/p/i-gave-my-mac-studio-an-ai-openclaw/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://astgl.com/p/i-gave-my-mac-studio-an-ai-openclaw/comments"><span>Leave a comment</span></a></p><p></p><p>This is Part 2 of the Notion Replacement series. <a href="https://astgl.com/p/replacing-notion-openclaw-self-hosted-ai">Part 1</a> covered why I&#8217;m making the switch.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;283343de-de91-4007-9027-73f6b66fe9ec&quot;,&quot;caption&quot;:&quot;Today I&#8217;m starting a project I&#8217;ve been thinking about for weeks: ripping Notion out of my workflow and replacing it with OpenClaw, a self-hosted AI agent framework running entirely on my Mac Studio. No cloud. No subscription. No black box.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;I&#8217;m Replacing Notion With a Self-Hosted AI Agent. Here&#8217;s Why.&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:421133477,&quot;name&quot;:&quot;James Cruce&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!T5FD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6a6400-f0cd-4ff3-8541-f6cccf4d9a87_400x400.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-06T19:01:12.665Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!zPhv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://astgl.com/p/replacing-notion-openclaw-self-hosted-ai&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:190114952,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7173322,&quot;publication_name&quot;:&quot;As The Geek Learns&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfS3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7b53b6e-8c71-473a-be58-79403cf36d59_256x256.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p> Next up: Part 3, installing the document editor. Follow along at As The Geek Learns.</p>]]></content:encoded></item><item><title><![CDATA[I’m Replacing Notion With a Self-Hosted AI Agent. Here’s Why.]]></title><description><![CDATA[Episode 007]]></description><link>https://astgl.com/p/im-replacing-notion-with-a-self-hosted</link><guid isPermaLink="false">https://astgl.com/p/im-replacing-notion-with-a-self-hosted</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Fri, 06 Mar 2026 19:06:55 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/190135284/6ebc0d00689b0a816345aaa108e3f286.mp3" length="0" type="audio/mpeg"/><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_!ieWQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ieWQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.png 424w, https://substackcdn.com/image/fetch/$s_!ieWQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.png 848w, https://substackcdn.com/image/fetch/$s_!ieWQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.png 1272w, https://substackcdn.com/image/fetch/$s_!ieWQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ieWQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.png" width="201" height="251" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/277f0718-12de-4c14-80cb-0d2b764d7772_201x251.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:251,&quot;width&quot;:201,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8446,&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://astgl.com/i/190135284?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.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_!ieWQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.png 424w, https://substackcdn.com/image/fetch/$s_!ieWQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.png 848w, https://substackcdn.com/image/fetch/$s_!ieWQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.png 1272w, https://substackcdn.com/image/fetch/$s_!ieWQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F277f0718-12de-4c14-80cb-0d2b764d7772_201x251.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>Today I&#8217;m starting a project I&#8217;ve been thinking about for weeks: ripping Notion out of my workflow and replacing it with <a href="https://openclaw.ai/">OpenClaw</a>, a self-hosted AI agent framework running entirely on my Mac Studio. No cloud. No subscription. No black box.</p><p>This sounds dramatic. It kind of is. But the reasons are practical.</p>]]></content:encoded></item><item><title><![CDATA[I’m Replacing Notion With a Self-Hosted AI Agent. Here’s Why.]]></title><description><![CDATA[Today I&#8217;m starting a project I&#8217;ve been thinking about for weeks: ripping Notion out of my workflow and replacing it with OpenClaw, a self-hosted AI agent framework running entirely on my Mac Studio.]]></description><link>https://astgl.com/p/replacing-notion-openclaw-self-hosted-ai</link><guid isPermaLink="false">https://astgl.com/p/replacing-notion-openclaw-self-hosted-ai</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Fri, 06 Mar 2026 19:01:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zPhv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today I&#8217;m starting a project I&#8217;ve been thinking about for weeks: ripping Notion out of my workflow and replacing it with <a href="https://openclaw.ai/">OpenClaw</a>, a self-hosted AI agent framework running entirely on my Mac Studio. No cloud. No subscription. No black box.</p><p>This sounds dramatic. It kind of is. But the reasons are practical.</p><h2>The Setup</h2><p>Notion is good software. I&#8217;ve used it for years for daily notes, content pipelines, project tracking, and knowledge bases. It does enough things well enough that you stop questioning the monthly charge.</p><p>But &#8220;well enough&#8221; started feeling like a ceiling.</p><p>I&#8217;m paying a recurring subscription for what amounts to a document editor with a database bolted on. The AI features cost extra. The data lives on someone else&#8217;s servers. And that charge hits every month whether I used Notion heavily or barely opened it.</p><p>When you&#8217;re building side projects and running a content platform, every recurring cost needs to justify itself. Notion stopped clearing that bar, not because it got worse, but because the alternatives got better.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zPhv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zPhv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!zPhv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!zPhv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!zPhv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zPhv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2337c62-a723-482e-a87a-f8a0cebd3cc1_1200x675.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44135,&quot;alt&quot;:&quot;A dark navy split-screen comparison image. The left side is labeled \&quot;NOTION\&quot; in red with \&quot;Cloud SaaS\&quot; underneath, showing a cloud icon and five bullet points in red: $X/month forever, data on their servers, AI with usage caps, reactive (you go to it), and vendor lock-in. The right side is labeled \&quot;OPENCLAW\&quot; in green with \&quot;Self-Hosted Local\&quot; underneath, showing a server rack icon with green status lights and five bullet points in green: $0/month (hardware owned), Markdown on your SSD, unlimited local LLMs, proactive (it comes to you), and plain files you own. An orange arrow points from left to right. The bottom reads \&quot;Going Local\&quot; in orange with As The Geek Learns branding.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://astgl.com/i/190114952?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2337c62-a723-482e-a87a-f8a0cebd3cc1_1200x675.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A dark navy split-screen comparison image. The left side is labeled &quot;NOTION&quot; in red with &quot;Cloud SaaS&quot; underneath, showing a cloud icon and five bullet points in red: $X/month forever, data on their servers, AI with usage caps, reactive (you go to it), and vendor lock-in. The right side is labeled &quot;OPENCLAW&quot; in green with &quot;Self-Hosted Local&quot; underneath, showing a server rack icon with green status lights and five bullet points in green: $0/month (hardware owned), Markdown on your SSD, unlimited local LLMs, proactive (it comes to you), and plain files you own. An orange arrow points from left to right. The bottom reads &quot;Going Local&quot; in orange with As The Geek Learns branding." title="A dark navy split-screen comparison image. The left side is labeled &quot;NOTION&quot; in red with &quot;Cloud SaaS&quot; underneath, showing a cloud icon and five bullet points in red: $X/month forever, data on their servers, AI with usage caps, reactive (you go to it), and vendor lock-in. The right side is labeled &quot;OPENCLAW&quot; in green with &quot;Self-Hosted Local&quot; underneath, showing a server rack icon with green status lights and five bullet points in green: $0/month (hardware owned), Markdown on your SSD, unlimited local LLMs, proactive (it comes to you), and plain files you own. An orange arrow points from left to right. The bottom reads &quot;Going Local&quot; in orange with As The Geek Learns branding." srcset="https://substackcdn.com/image/fetch/$s_!zPhv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!zPhv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!zPhv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!zPhv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36d1b4e6-0faf-4cbd-94ca-705a15197022_1200x675.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><figcaption class="image-caption">Going LLM Local</figcaption></figure></div><div><hr></div><h2>What&#8217;s Actually Going On</h2><p>The subscription cost is the easy argument. The real one goes deeper.</p><p>I&#8217;ve spent most of my IT career building and managing infrastructure. What I&#8217;m learning now is how to build things: software, AI workflows, and automation pipelines. Running a local AI agent isn&#8217;t just about replacing a SaaS tool. It&#8217;s about understanding how these systems work under the hood.</p><p>When you use Notion AI, you&#8217;re calling an API you can&#8217;t see, running a model you can&#8217;t inspect, with prompts you didn&#8217;t write. It works. You learn nothing.</p><p>When you run your own agent on your own hardware with your own models, every layer is visible. You see the prompts. You see the model responses. You see where tool calls succeed and where they fail. You understand why the system behaves the way it does.</p><p>For someone building AI-assisted tools and writing about the experience, that visibility isn&#8217;t optional. It&#8217;s the whole point.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">As The Geek Learns 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 Fix</h2><p>Here&#8217;s the stack I&#8217;m building:</p><p><strong><a href="https://openclaw.ai/">OpenClaw</a></strong> handles the agent framework, the brain that orchestrates everything. It runs as a background service on macOS, accepts messages via iMessage, and acts proactively on a schedule without being prompted.</p><p><strong><a href="https://ollama.com/">Ollama</a></strong> provides local LLM inference. Models run on the Mac Studio&#8217;s M3 Ultra with 256 GB of unified memory. No API calls to OpenAI. No per-token charges. No rate limits.</p><p><strong><a href="https://www.clawpad.ai/">ClawPad</a></strong> gives me a Notion-style editor that reads and writes the same Markdown files the agent uses.</p><p><strong><a href="https://anythingllm.com/">AnythingLLM</a></strong> adds RAG (Retrieval-Augmented Generation) so the agent can search and reason over my entire knowledge base locally.</p><p>Everything runs on localhost. Nothing phones home.</p><p>The piece that most exceeds Notion is <strong>HEARTBEAT.md</strong>. It is a file of standing instructions the agent executes on a schedule. </p><p>Every morning at 6:30, it creates my daily note, checks my calendar, pulls open tasks, and pushes a briefing to my iPhone via iMessage. Every evening, it summarizes the day.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hC6F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hC6F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png 424w, https://substackcdn.com/image/fetch/$s_!hC6F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png 848w, https://substackcdn.com/image/fetch/$s_!hC6F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png 1272w, https://substackcdn.com/image/fetch/$s_!hC6F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hC6F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png" width="600" height="432" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:432,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32067,&quot;alt&quot;:&quot;A side-by-side flowchart comparing two morning workflows. On the Notion side, labeled \&quot;Reactive,\&quot; the steps are: you wake up, open Notion, scroll to find tasks, check calendar separately, and organize your own day &#8212; all shown in red. On the OpenClaw side, labeled \&quot;Proactive,\&quot; the steps are: 6:30 AM heartbeat fires, agent creates daily note, agent checks calendar, agent pulls open tasks, and briefing pushed to iPhone &#8212; all shown in green. The key difference: you go to Notion, but OpenClaw comes to you.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://astgl.com/i/190114952?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A side-by-side flowchart comparing two morning workflows. On the Notion side, labeled &quot;Reactive,&quot; the steps are: you wake up, open Notion, scroll to find tasks, check calendar separately, and organize your own day &#8212; all shown in red. On the OpenClaw side, labeled &quot;Proactive,&quot; the steps are: 6:30 AM heartbeat fires, agent creates daily note, agent checks calendar, agent pulls open tasks, and briefing pushed to iPhone &#8212; all shown in green. The key difference: you go to Notion, but OpenClaw comes to you." title="A side-by-side flowchart comparing two morning workflows. On the Notion side, labeled &quot;Reactive,&quot; the steps are: you wake up, open Notion, scroll to find tasks, check calendar separately, and organize your own day &#8212; all shown in red. On the OpenClaw side, labeled &quot;Proactive,&quot; the steps are: 6:30 AM heartbeat fires, agent creates daily note, agent checks calendar, agent pulls open tasks, and briefing pushed to iPhone &#8212; all shown in green. The key difference: you go to Notion, but OpenClaw comes to you." srcset="https://substackcdn.com/image/fetch/$s_!hC6F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png 424w, https://substackcdn.com/image/fetch/$s_!hC6F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png 848w, https://substackcdn.com/image/fetch/$s_!hC6F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.png 1272w, https://substackcdn.com/image/fetch/$s_!hC6F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47e0d3f4-e69e-43b8-ae6e-ed258685febe_600x432.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">You go to Notion. OpenClaw comes to you.</figcaption></figure></div><p>I didn&#8217;t open anything. I didn&#8217;t remember to check my task list. The workspace came to me.</p><p>If you&#8217;ve heard me say, <strong>&#8220;If I do something more than twice, automate it,&#8221; </strong>this is that philosophy taken to its logical conclusion.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ea6f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ea6f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png 424w, https://substackcdn.com/image/fetch/$s_!ea6f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png 848w, https://substackcdn.com/image/fetch/$s_!ea6f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png 1272w, https://substackcdn.com/image/fetch/$s_!ea6f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ea6f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png" width="600" height="208" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:208,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19366,&quot;alt&quot;:&quot;A diagram showing how all components of the self-hosted OpenClaw stack connect on a Mac Studio. An iPhone or iPad sends messages via iMessage to the OpenClaw Gateway on port 18789. The gateway connects to three services: ClawPad editor on port 3333, Open WebUI on port 3000, and AnythingLLM on port 3001. All three services route to Ollama for local LLM inference on port 11434, which runs on the Mac Studio M3 Ultra with 256 GB of unified memory. Everything runs on localhost.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://astgl.com/i/190114952?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A diagram showing how all components of the self-hosted OpenClaw stack connect on a Mac Studio. An iPhone or iPad sends messages via iMessage to the OpenClaw Gateway on port 18789. The gateway connects to three services: ClawPad editor on port 3333, Open WebUI on port 3000, and AnythingLLM on port 3001. All three services route to Ollama for local LLM inference on port 11434, which runs on the Mac Studio M3 Ultra with 256 GB of unified memory. Everything runs on localhost." title="A diagram showing how all components of the self-hosted OpenClaw stack connect on a Mac Studio. An iPhone or iPad sends messages via iMessage to the OpenClaw Gateway on port 18789. The gateway connects to three services: ClawPad editor on port 3333, Open WebUI on port 3000, and AnythingLLM on port 3001. All three services route to Ollama for local LLM inference on port 11434, which runs on the Mac Studio M3 Ultra with 256 GB of unified memory. Everything runs on localhost." srcset="https://substackcdn.com/image/fetch/$s_!ea6f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png 424w, https://substackcdn.com/image/fetch/$s_!ea6f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png 848w, https://substackcdn.com/image/fetch/$s_!ea6f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png 1272w, https://substackcdn.com/image/fetch/$s_!ea6f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b60428d-d0e3-4f66-96b4-4e67f8c1a61a_600x208.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Everything runs on localhost. Nothing phones home.</figcaption></figure></div><div><hr></div><h2>Why This Matters</h2><p>I&#8217;d be dishonest if I skipped the security reality. OpenClaw&#8217;s track record here is horrendous.</p><p>In February 2026, researchers found over 135,000 OpenClaw instances exposed to the public internet. Over 15,000 were vulnerable to remote code execution. A coordinated attack called <strong><a href="https://cybersecuritynews.com/clawhavoc-poisoned-openclaws-clawhub/">&#8220;ClawHavoc&#8221;</a></strong> planted more than a thousand malicious plugins on the community registry. Nine CVEs have been disclosed, including one for SSH command injection on macOS specifically.</p><p>An AI agent with shell access to your machine, running 24/7, is a serious attack surface if you don&#8217;t lock it down. Running local means you own the security. That&#8217;s both the benefit and the burden.</p><p>The <strong><a href="https://github.com/openclaw/openclaw/releases/tag/v2026.3.2">latest release (v2026.3.2)</a></strong> defaults to loopback-only binding, adds credential management through macOS Keychain, and includes SSRF protection. The posture is dramatically better than a month ago. But &#8220;better&#8221; doesn&#8217;t mean &#8220;done.&#8221;</p><p>And the tradeoffs beyond security are real too. Notion&#8217;s relational databases are genuinely useful. Markdown with YAML front matter is functional but not elegant. The mobile experience goes from Notion&#8217;s polished iOS app to iMessage commands. Maintenance is on me. Sharing doesn&#8217;t exist.</p><p>For a solo practitioner building AI-assisted tools, the math works. For a team that needs collaboration, probably not.</p><div><hr></div><h2>Quick Reference</h2><h3>What I&#8217;m gaining:</h3><p>Zero recurring cost. Hardware is already paid for, and the software is open source.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IncD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IncD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!IncD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!IncD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!IncD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IncD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de6a816e-e1a5-4038-a2d2-a53d1ee7d28f_1200x675.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:29282,&quot;alt&quot;:&quot;A timeline chart titled \&quot;The Cost Equation\&quot; comparing Notion and OpenClaw costs over 12 months. Notion is represented by repeating red bars along the timeline, each marked with a dollar sign, labeled \&quot;forever\&quot; &#8212; the subscription never stops. OpenClaw shows a single green \&quot;Paid\&quot; marker for hardware already owned, then a flat green line at $0/month extending across the entire timeline. A callout box in orange reads \&quot;After 12 months: $XX saved vs $0 spent.\&quot; The horizontal axis shows months M1 through M12 with an arrow continuing into the future.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://astgl.com/i/190114952?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a816e-e1a5-4038-a2d2-a53d1ee7d28f_1200x675.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A timeline chart titled &quot;The Cost Equation&quot; comparing Notion and OpenClaw costs over 12 months. Notion is represented by repeating red bars along the timeline, each marked with a dollar sign, labeled &quot;forever&quot; &#8212; the subscription never stops. OpenClaw shows a single green &quot;Paid&quot; marker for hardware already owned, then a flat green line at $0/month extending across the entire timeline. A callout box in orange reads &quot;After 12 months: $XX saved vs $0 spent.&quot; The horizontal axis shows months M1 through M12 with an arrow continuing into the future." title="A timeline chart titled &quot;The Cost Equation&quot; comparing Notion and OpenClaw costs over 12 months. Notion is represented by repeating red bars along the timeline, each marked with a dollar sign, labeled &quot;forever&quot; &#8212; the subscription never stops. OpenClaw shows a single green &quot;Paid&quot; marker for hardware already owned, then a flat green line at $0/month extending across the entire timeline. A callout box in orange reads &quot;After 12 months: $XX saved vs $0 spent.&quot; The horizontal axis shows months M1 through M12 with an arrow continuing into the future." srcset="https://substackcdn.com/image/fetch/$s_!IncD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!IncD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!IncD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!IncD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f03899f-f5d0-418d-980a-63066aca2cf9_1200x675.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">Zero Recurring Cost</figcaption></figure></div><p></p><p>Complete data ownership. Every document is a Markdown file on my SSD.</p><p>Unlimited AI. No usage caps and no &#8220;you&#8217;ve exceeded your credits.&#8221;</p><p>Proactive workspace. Morning briefings, auto daily notes, and task reminders via iMessage.</p><p>Deep understanding. Every layer is visible, and every configuration is mine.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0IWM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0IWM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!0IWM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!0IWM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!0IWM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0IWM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c63c04f-db67-46ab-a49c-aa52499e8b22_1200x675.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60648,&quot;alt&quot;:&quot;An infographic titled \&quot;The Visibility Gap\&quot; comparing how Notion AI and a local agent handle requests. The left column, labeled \&quot;Notion AI\&quot; in red, shows a flow from \&quot;You type a prompt\&quot; through three opaque red boxes with hatching and X marks: hidden prompt engineering, unknown model, and can't see tool calls, ending at \&quot;Response appears.\&quot; The tagline reads \&quot;It works. You learn nothing.\&quot; The right column, labeled \&quot;Local Agent\&quot; in green, shows the same flow but with transparent green boxes and checkmarks: your prompt (you wrote it), your model (qwen3:32b), your tool calls (visible), your config (AGENTS.md), and response plus full trace. The tagline reads \&quot;Every layer visible. You learn everything.\&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://astgl.com/i/190114952?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c63c04f-db67-46ab-a49c-aa52499e8b22_1200x675.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="An infographic titled &quot;The Visibility Gap&quot; comparing how Notion AI and a local agent handle requests. The left column, labeled &quot;Notion AI&quot; in red, shows a flow from &quot;You type a prompt&quot; through three opaque red boxes with hatching and X marks: hidden prompt engineering, unknown model, and can't see tool calls, ending at &quot;Response appears.&quot; The tagline reads &quot;It works. You learn nothing.&quot; The right column, labeled &quot;Local Agent&quot; in green, shows the same flow but with transparent green boxes and checkmarks: your prompt (you wrote it), your model (qwen3:32b), your tool calls (visible), your config (AGENTS.md), and response plus full trace. The tagline reads &quot;Every layer visible. You learn everything.&quot;" title="An infographic titled &quot;The Visibility Gap&quot; comparing how Notion AI and a local agent handle requests. The left column, labeled &quot;Notion AI&quot; in red, shows a flow from &quot;You type a prompt&quot; through three opaque red boxes with hatching and X marks: hidden prompt engineering, unknown model, and can't see tool calls, ending at &quot;Response appears.&quot; The tagline reads &quot;It works. You learn nothing.&quot; The right column, labeled &quot;Local Agent&quot; in green, shows the same flow but with transparent green boxes and checkmarks: your prompt (you wrote it), your model (qwen3:32b), your tool calls (visible), your config (AGENTS.md), and response plus full trace. The tagline reads &quot;Every layer visible. You learn everything.&quot;" srcset="https://substackcdn.com/image/fetch/$s_!0IWM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!0IWM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!0IWM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!0IWM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F722781ee-71fe-4005-aaa9-f3776bd52d75_1200x675.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">Black Box to Visible Box</figcaption></figure></div><h3><strong>What I&#8217;m giving up:</strong></h3><p>Relational databases with filtered views.</p><p>Polished mobile app.</p><p>Zero-maintenance experience.</p><p>Team collaboration.</p><p>The plan is six weeks, phased. Each phase leaves a working system. If it fails, Notion re-imports Markdown. The escape hatch stays open.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2AyM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401ad125-967c-4f00-b687-0121e231ba7a_1200x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2AyM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401ad125-967c-4f00-b687-0121e231ba7a_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!2AyM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401ad125-967c-4f00-b687-0121e231ba7a_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!2AyM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401ad125-967c-4f00-b687-0121e231ba7a_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!2AyM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401ad125-967c-4f00-b687-0121e231ba7a_1200x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2AyM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401ad125-967c-4f00-b687-0121e231ba7a_1200x675.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/401ad125-967c-4f00-b687-0121e231ba7a_1200x675.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28a6fc89-64b2-489a-8b64-3b0be8f25261_1200x675.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44541,&quot;alt&quot;:&quot;A timeline chart titled \&quot;Notion to OpenClaw &#8212; 6-Week Migration\&quot; showing four color-coded phases as horizontal bars progressing left to right. Foundation (green) covers Ollama, OpenClaw, and security setup in three days, then ClawPad editor in three more. Core Skills (blue) adds tasks, calendar, and reminders over four days, then the heartbeat proactive agent over four more. Migration (purple) includes knowledge base and RAG setup over seven days, then pipelines and workflows over eight days. Validation (orange) runs a parallel comparison and go/no-go decision over seven days. A clean timeline at the bottom spans from March 6 to April 5 with \&quot;6 weeks\&quot; labeled in the center. Each bar shows its duration in days.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://astgl.com/i/190114952?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28a6fc89-64b2-489a-8b64-3b0be8f25261_1200x675.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A timeline chart titled &quot;Notion to OpenClaw &#8212; 6-Week Migration&quot; showing four color-coded phases as horizontal bars progressing left to right. Foundation (green) covers Ollama, OpenClaw, and security setup in three days, then ClawPad editor in three more. Core Skills (blue) adds tasks, calendar, and reminders over four days, then the heartbeat proactive agent over four more. Migration (purple) includes knowledge base and RAG setup over seven days, then pipelines and workflows over eight days. Validation (orange) runs a parallel comparison and go/no-go decision over seven days. A clean timeline at the bottom spans from March 6 to April 5 with &quot;6 weeks&quot; labeled in the center. Each bar shows its duration in days." title="A timeline chart titled &quot;Notion to OpenClaw &#8212; 6-Week Migration&quot; showing four color-coded phases as horizontal bars progressing left to right. Foundation (green) covers Ollama, OpenClaw, and security setup in three days, then ClawPad editor in three more. Core Skills (blue) adds tasks, calendar, and reminders over four days, then the heartbeat proactive agent over four more. Migration (purple) includes knowledge base and RAG setup over seven days, then pipelines and workflows over eight days. Validation (orange) runs a parallel comparison and go/no-go decision over seven days. A clean timeline at the bottom spans from March 6 to April 5 with &quot;6 weeks&quot; labeled in the center. Each bar shows its duration in days." srcset="https://substackcdn.com/image/fetch/$s_!2AyM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401ad125-967c-4f00-b687-0121e231ba7a_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!2AyM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401ad125-967c-4f00-b687-0121e231ba7a_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!2AyM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401ad125-967c-4f00-b687-0121e231ba7a_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!2AyM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401ad125-967c-4f00-b687-0121e231ba7a_1200x675.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">Each phase leaves a working system. The escape hatch stays open.</figcaption></figure></div><p></p><p>I&#8217;ll document every win, frustration, configuration gotcha, and security decision along the way. Not a polished demo, but an honest account of replacing a mature SaaS product with open-source infrastructure you run yourself.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/replacing-notion-openclaw-self-hosted-ai/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://astgl.com/p/replacing-notion-openclaw-self-hosted-ai/comments"><span>Leave a comment</span></a></p><div><hr></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/replacing-notion-openclaw-self-hosted-ai?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 As The Geek Learns! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://astgl.com/p/replacing-notion-openclaw-self-hosted-ai?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://astgl.com/p/replacing-notion-openclaw-self-hosted-ai?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><p><em>Found this useful? I share practical lessons from my systems engineering journey at <a href="https://astgl.com">As The Geek Learns</a>.</em></p>]]></content:encoded></item><item><title><![CDATA[Cortex: An Event-Sourced Memory Architecture for AI Coding Assistants]]></title><description><![CDATA[As The Geek Learns | Technical Deep Dive Author: James Cruce Date: February 2026]]></description><link>https://astgl.com/p/cortex-an-event-sourced-memory-architecture</link><guid isPermaLink="false">https://astgl.com/p/cortex-an-event-sourced-memory-architecture</guid><dc:creator><![CDATA[James Cruce]]></dc:creator><pubDate>Tue, 17 Feb 2026 23:01:09 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/188280947/f02af86af017a3815e57065a31f64a7d.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><strong>Cortex: Event-Sourced Memory for AI Coding Assistants</strong></p><p><strong>Episode Summary</strong></p><p>Every time you close a session with an AI coding assistant, it forgets everything&#8212;the architecture it mapped out, the approaches it rejected, and the plan it was halfway through executing. You become the memory system. Cortex is an event-sourced memory architecture designed to fix that. In this episode, we walk through the problem, the research process that led to the solution, how the system works across four progressive tiers, and real-world A/B testing results that show an 84% reduction in cold start time and 80% fewer decision regressions.</p><p><strong>Suggested Episode Segments</strong></p><ul><li><p>00:00&#8212;Intro: The amnesia problem with AI coding assistants</p></li><li><p>01:22&#8212;What actually gets lost between sessions (five categories)</p></li><li><p>03:26&#8212;Why event sourcing is the right foundation</p></li><li><p>05:32&#8212;Three-layer extraction: structural, semantic, and self-reporting</p></li><li><p>07:24&#8212;Projected briefings and decision immortality</p></li><li><p>08:59&#8212;Progressive tiers: from 30-second setup to full MCP server</p></li><li><p>12:13&#8212;A/B testing results and what surprised us</p></li><li><p>12:43&#8212;Implementation war stories and gotchas</p></li><li><p>13:03&#8212;The meta-irony of building this with a forgetful AI</p></li><li><p>13:40&#8212;Tier 3: MCP server, git-tracked projections, branch alignment</p></li><li><p>14:59&#8212;Getting started and what&#8217;s next</p></li></ul><p><strong>The Problem</strong></p><p>AI coding assistants like Claude lose five categories of context at session boundaries: architectural understanding built through exploration (10-30 minutes of re-exploration per session), decision history including rejected approaches and reasoning, work state like multi-step plans and progress, tool and environment state, and conversational nuance&#8212;your preferences, priorities, and communication style. The cruelest part is that the better the AI performs within a session, the more painful the loss when that session ends.</p><p><strong>The Solution</strong></p><p>Cortex applies event sourcing&#8212;an immutable, append-only pattern borrowed from distributed systems&#8212;to capture and preserve context automatically. Three innovations make it work.</p><p>First, three-layer event extraction. Layer 1 parses Claude Code hook payloads for objective structural data like file reads, commands, and code modifications&#8212;100% accuracy within its scope. Layer 2 pattern-matches response text for decision markers with confidence scoring. Layer 3 lets Claude self-report important context using <code>[MEMORY:]</code> tags, offering the highest accuracy through deliberate intent. These independent extractors compose through aggregation rather than requiring one monolithic system.</p><p>Second, projected briefings. Raw event replay would blow through token budgets, so Cortex generates compressed, token-aware briefings that default to about 2,000 tokens&#8212;roughly 0.1% of the context window. Active decisions are immortal and never decay. Current plans show progress with step status. Recent knowledge fades over sessions based on tactical relevance. This separates retention (store everything) from representation (surface what matters).</p><p>Third, progressive tiers. Tier 0 gives you basic context capture in 30 seconds. Tier 1 adds SQLite with full-text search. Tier 2 brings vector embeddings and anticipatory retrieval. Tier 3 enables an MCP server for mid-session queries, git-tracked projections, and branch-level context isolation.</p><p><strong>Results</strong></p><p>A/B testing across 18 Cortex sessions versus 11 baseline sessions showed measurable gains: an 84% reduction in cold start file re-reading, 80% fewer decision regressions where the AI re-suggested previously rejected approaches, and only 0.2% token overhead for the entire memory system. The system ships with 713 passing tests.</p><p><strong>Implementation Gotchas</strong></p><p>A few hard-won lessons from the build: every <code>.get()</code> call needs a default value, and every JSON parse needs a try/except because Claude Code hooks cannot afford to crash. Content-hash deduplication scopes to session ID to prevent over-deduplication. And the gitleaks GitHub Action requires paid licenses for org accounts, while the CLI stays free&#8212;a distinction that cost some debugging time.</p><p><strong>The Meta-Irony</strong></p><p>The entire project was designed and built using Claude Code&#8212;an AI assistant suffering from the exact problem being solved. Every session boundary during development was a visceral reminder of why this system needed to exist.</p><p><strong>Key Quotes</strong></p><ul><li><p>&#8220;The cruelest aspect: the better the AI performs within a session, the more painful the loss when the session ends. Excellence within a session amplifies the frustration at its boundary.&#8221;</p></li><li><p>&#8220;You can always trace back to &#8216;Why did the system think X?&#8217; &#8212; that&#8217;s the power of event sourcing over CRUD.&#8221;</p></li><li><p>&#8220;Confidence as a first-class field enables downstream flexibility&#8212;briefing sorting, decay functions, user-tunable thresholds.&#8221;</p></li></ul><p><strong>Links</strong></p><ul><li><p>Full article: <a href="https://astgl.com/p/cortex-event-sourced-memory-ai-coding-assistants">https://astgl.com/p/cortex-event-sourced-memory-ai-coding-assistants</a></p></li><li><p>GitHub repository: <a href="https://github.com/As-The-Geek-Learns/cortex">https://github.com/As-The-Geek-Learns/cortex</a></p></li><li><p>As The Geek Learns: <a href="https://astgl.com">https://astgl.com</a></p></li></ul>]]></content:encoded></item></channel></rss>