<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Nate Lemos Blog</title>
    <link>https://nate.lemos.dev/blog</link>
    <description>Nate Lemos writes about AI tooling, backend architecture, software engineering, and developer tools.</description>
    <language>en-us</language>
    <atom:link href="https://nate.lemos.dev/feed.xml" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Mon, 05 Oct 2026 17:50:26 GMT</lastBuildDate>
    <item>
      <title>Taste is the new seniority test</title>
      <link>https://nate.lemos.dev/blog/ai-coding-is-making-taste-the-new-seniority-test</link>
      <guid isPermaLink="true">https://nate.lemos.dev/blog/ai-coding-is-making-taste-the-new-seniority-test</guid>
      <pubDate>Mon, 03 Aug 2026 12:00:00 GMT</pubDate>
      <author>natanael@lemos.dev (Nate Lemos)</author>
      <description>Claude Code and Codex, especially with the new Claude Fable model, changed what &quot;entry level&quot; means. You describe a product, go back-and-forth for a few minutes and you have a product!</description>
      <content:encoded><![CDATA[


<h1>Taste is the new seniority test</h1>
<picture>
<source type="image/avif" srcset="/blog-images/2026-08-03-16-36_banner-d1c7c3a56d-640.avif 640w, /blog-images/2026-08-03-16-36_banner-d1c7c3a56d-1280.avif 1280w, /blog-images/2026-08-03-16-36_banner-d1c7c3a56d-1920.avif 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<source type="image/webp" srcset="/blog-images/2026-08-03-16-36_banner-d1c7c3a56d-640.webp 640w, /blog-images/2026-08-03-16-36_banner-d1c7c3a56d-1280.webp 1280w, /blog-images/2026-08-03-16-36_banner-d1c7c3a56d-1920.webp 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-08-03-16-36_banner-d1c7c3a56d-og.jpg" alt="Workers crowd a workbench admiring glowing holographic prototypes while one engineer studies his own apart" width="1280" height="720" fetchpriority="high" decoding="async">
</picture>

<p>Claude Code and Codex, especially with the new Claude Fable model, changed what &quot;entry level&quot; means. You describe a product, go back-and-forth for a few minutes and you have a product! Things that once took years of learning now start with a sentence and take a few minutes.</p>
<p>The people who already write code are leaning on it just as hard: <a href="https://survey.stackoverflow.co/2025/ai/#sentiment-and-usage">84% of developers now use or plan to use AI tools</a>, and among professionals, <a href="https://survey.stackoverflow.co/2025/ai/#sentiment-and-usage">51% use them every day</a>, according to Stack Overflow&#39;s 2025 survey.</p>
<p>For example, youtuber <a href="https://www.youtube.com/watch?v=rAzT5lcezPs">PewDiePie</a> showed off <a href="https://github.com/odysseus-dev/odysseus">Odysseus</a>, <a href="https://www.youtube.com/watch?v=7kQi2HQMz4s">Sara Dietschy</a> built <a href="https://studioinspo.com/about">StudioInspo</a>. That used to be the kind of software you hired engineers for, now people build them in their free-time.</p>
<p>The first implementation is cheap, now. Anthropic studied how people use Claude Code and found that in 79% of sessions, the person just handed the task over and let the AI finish it. A Base44 product manager used Claude Fable 5 to build a native mobile development environment that was about 90% ready for production in 2.5 hours. But 90% ready is not production!</p>
<picture>
<source type="image/avif" srcset="/blog-images/2026-08-03-16-36_mid-ab0e8581a1-640.avif 640w, /blog-images/2026-08-03-16-36_mid-ab0e8581a1-1280.avif 1280w, /blog-images/2026-08-03-16-36_mid-ab0e8581a1-1920.avif 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<source type="image/webp" srcset="/blog-images/2026-08-03-16-36_mid-ab0e8581a1-640.webp 640w, /blog-images/2026-08-03-16-36_mid-ab0e8581a1-1280.webp 1280w, /blog-images/2026-08-03-16-36_mid-ab0e8581a1-1920.webp 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<img src="https://nate.lemos.dev/blog-images/2026-08-03-16-36_mid-ab0e8581a1-1280.webp" alt="An engineer shines a flashlight into a translucent wireframe structure, exposing a red crack hidden inside" width="1280" height="720" loading="lazy" decoding="async">
</picture>

<blockquote>
<p>Taste is the new seniority test.</p>
</blockquote>
<p>A senior developer can tell the difference between good software and bad software. That sounds obvious until both of them compile. Choosing the good product over the one that merely works <em>IS</em> seniority, especially now that bad software is so cheap to produce.</p>
<p>Bad software can have clean code, pass every test. It can demo beautifully and it can still confuse the user, solve the wrong problem, expose private data, bury the one useful action under five clever features, or introduce bugs that will only show up six months later.</p>
<p>Taste is choosing to shape the software around how the user thinks instead of making the user bend around it.</p>
<p>Taste is also noticing that a technically correct screen can ask the wrong question. It is cutting three features because the fourth one is the reason the product exists. It is knowing that today&#39;s clean abstraction is next quarter&#39;s trap. The model can produce code all day, but it can&#39;t decide what is a good output vs a bad output. That call is the job senior developers are paid to make, and own those decisions.</p>
<p>Developers already sense the trust gap. The same Stack Overflow survey found <a href="https://survey.stackoverflow.co/2025/ai/#2-accuracy-of-ai-tools">only 32.7% trusted the accuracy of AI output</a>, and <a href="https://survey.stackoverflow.co/2025/ai/#2-ai-tool-frustrations">66% said their biggest frustration was an answer that is almost right, but not quite</a>. Every almost-right answer is a judgment call handed back to a human — and the human had to make it.</p>
<p>The person who clicks merge still owns what happens next. Anyone can build a one-person app now. Scaling it once real users depend on it still needs senior judgment. AI building does not replace code ownership. If you let AI write everything but cannot explain or repair it, you are not covering your own ass — at some point the code will break, and you will not be able to figure it out. The customer will not care whether Claude wrote it. The person who shipped it owns the failure, and the 2am fix!</p>
<p>Security is another important point to be covered by a senior. Veracode <a href="https://www.veracode.com/resources/analyst-reports/2025-genai-code-security-report/">tested more than 100 models</a> and found that <a href="https://www.veracode.com/blog/genai-code-security-report/">45% of generated code samples failed security tests</a>. <strong>Forty-five</strong> percent failing means, sooner or later, someone&#39;s data will end up where it should not — and catching that before it ships is exactly the call the machine cannot make. &quot;It works&quot; and &quot;we should ship it&quot; are two different decisions.</p>
<picture>
<source type="image/avif" srcset="/blog-images/2026-08-03-16-36_end-6ef8ad95a7-640.avif 640w, /blog-images/2026-08-03-16-36_end-6ef8ad95a7-1280.avif 1280w, /blog-images/2026-08-03-16-36_end-6ef8ad95a7-1920.avif 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<source type="image/webp" srcset="/blog-images/2026-08-03-16-36_end-6ef8ad95a7-640.webp 640w, /blog-images/2026-08-03-16-36_end-6ef8ad95a7-1280.webp 1280w, /blog-images/2026-08-03-16-36_end-6ef8ad95a7-1920.webp 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<img src="https://nate.lemos.dev/blog-images/2026-08-03-16-36_end-6ef8ad95a7-1280.webp" alt="A veteran engineer guides a finished machine off the assembly line to waiting customers" width="1280" height="720" loading="lazy" decoding="async">
</picture>

<p>If you are a junior developer whose plan is to start at zero, join a company, and wait for a senior to hold your hand until you are useful, you are cooked. <em>Semi-joking, but only semi</em>.</p>
<p>Build your own apps. Put them online. Make them your portfolio. Show that you can talk to users, choose what matters, cut what doesn&#39;t, and repair what breaks. You do not need a company to hand you &quot;business experience&quot; before you can prove that you have taste. That&#39;s how you land on a dev job in the post-AI era.</p>
<p>I have spent more than ten years writing software, and I now write less code by hand than ever. The experience did not evaporate. It moved to the three jobs the machine cannot take: deciding what is worth building, recognizing what is wrong, and taking responsibility after it stops typing.</p>
<p>Build the app, prove your taste, and own what happens next.</p>
<hr>
<p><strong>References:</strong></p>
<ol>
<li><a href="https://survey.stackoverflow.co/2025/ai/">AI — 2025 Developer Survey (Stack Overflow)</a></li>
<li><a href="https://www.anthropic.com/research/impact-software-development">Anthropic Economic Index: AI&#39;s impact on software development (Anthropic)</a></li>
<li><a href="https://claude.com/blog/working-at-the-frontier-why-base44-trusts-claude-fable-5-with-their-most-challenging-engineering-work">Why Base44 trusts Claude Fable 5 with challenging engineering work (Anthropic)</a></li>
<li><a href="https://github.blog/ai-and-ml/generative-ai/code-review-in-the-age-of-ai-why-developers-will-always-own-the-merge-button/">Code review in the age of AI (GitHub)</a></li>
<li><a href="https://www.veracode.com/blog/genai-code-security-report/">2025 GenAI Code Security Report (Veracode)</a></li>
<li><a href="https://www.youtube.com/watch?v=rAzT5lcezPs">MY trillion $Dollar Project is finally OUT! (PewDiePie, YouTube)</a></li>
<li><a href="https://github.com/odysseus-dev/odysseus">Odysseus: Self-hosted AI workspace (GitHub)</a></li>
<li><a href="https://www.youtube.com/watch?v=7kQi2HQMz4s">How to Vibe Code - Making a real web app step by step (Sara Dietschy, YouTube)</a></li>
<li><a href="https://studioinspo.com/about">About StudioInspo (StudioInspo)</a></li>
<li><a href="https://kylepoyar.substack.com/p/replit-growth-journey">Replit&#39;s journey to making 2 million apps in 6 months (Growth Unhinged, interview with Replit CEO Amjad Masad)</a></li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>A single prompt brought my favorite terminal back from the dead</title>
      <link>https://nate.lemos.dev/blog/a-single-prompt-brought-my-favorite-terminal-back-from-the-dead</link>
      <guid isPermaLink="true">https://nate.lemos.dev/blog/a-single-prompt-brought-my-favorite-terminal-back-from-the-dead</guid>
      <pubDate>Tue, 21 Jul 2026 12:00:00 GMT</pubDate>
      <author>natanael@lemos.dev (Nate Lemos)</author>
      <description>Every time I try another terminal, I end up back in Hyper. Most terminals feel like a black box where developers type commands. Hyper has themes, tabs, and plugins.</description>
      <content:encoded><![CDATA[
<h1>A single prompt brought my favorite terminal back from the dead</h1>
<picture>
<source type="image/avif" srcset="/blog-images/2026-07-21-12-50_banner-natural-e59caf7608-640.avif 640w, /blog-images/2026-07-21-12-50_banner-natural-e59caf7608-1280.avif 1280w, /blog-images/2026-07-21-12-50_banner-natural-e59caf7608-1920.avif 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<source type="image/webp" srcset="/blog-images/2026-07-21-12-50_banner-natural-e59caf7608-640.webp 640w, /blog-images/2026-07-21-12-50_banner-natural-e59caf7608-1280.webp 1280w, /blog-images/2026-07-21-12-50_banner-natural-e59caf7608-1920.webp 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-07-21-12-50_banner-natural-e59caf7608-og.jpg" alt="A developer using Hyper in a neon-lit workspace" width="1280" height="720" fetchpriority="high" decoding="async">
</picture>

<p>Every time I try another terminal, I end up back in Hyper. Most terminals feel like a black box where developers type commands. Hyper has themes, tabs, and plugins. It makes the command line feel like an app I actually want to open, so I have kept coming back to it for years.</p>
<p>Then Hyper stopped moving. Its latest stable release is from January 2023. One maintenance commit appeared in May 2026, and it only changed pnpm. That&#39;s it. The repo is barely maintained.</p>
<p>The old macOS version also appeared in a <a href="https://www.cve.org/CVERecord?id=CVE-2024-23741">published security advisory</a>. By then, using the terminal I loved had become a liability. I did not want another terminal. I wanted Hyper back!</p>
<p>Claude Code revived my favorite terminal. But not only that, it rewrote the app in a completely different language! And the &quot;worst part&quot;? The whole rewrite started with a single prompt!</p>
<blockquote>
<p>&quot;exactly one instruction&quot;...</p>
</blockquote>
<p>I opened Claude Code and gave it exactly one instruction:</p>
<pre><code>convert this entire project to rust. make it native!
  and create the new rust project in &quot;../hyper-revamp-rust/&quot;
</code></pre>
<p>That single prompt gave me a Rust version that was already about 70% done.</p>
<p>I expected Claude Code to give me a rough shell. Maybe a blank window, a pile of broken code, and a long weekend ahead. Instead, it converted most of the app in one shot. Different language. Different foundation. Still Hyper.</p>
<p>The original Hyper carries a small web browser around inside the app because its interface was written in Electron, a web technology. My version is native Rust. It opens one process and gets to work.</p>
<p>No browser hiding inside it. No extra layers pretending to be a desktop app. Just the terminal.</p>
<figure class="article-media"><picture>
<source type="image/webp" srcset="/blog-images/2026-07-21-12-50_hyper-revamp-terminal-9fddf10252-640.webp 640w, /blog-images/2026-07-21-12-50_hyper-revamp-terminal-9fddf10252-1280.webp 1280w, /blog-images/2026-07-21-12-50_hyper-revamp-terminal-9fddf10252-1920.webp 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<img src="https://nate.lemos.dev/blog-images/2026-07-21-12-50_hyper-revamp-terminal-9fddf10252-1280.webp" alt="Rust hyper-revamp running in tabs on macOS" width="1280" height="607" loading="lazy" decoding="async">
</picture><figcaption>This is the new Hyper running on my Mac.</figcaption></figure>
<p>Here&#39;s <a href="https://github.com/NatanaelLemos/hyper-revamp">the repo</a>, for anyone who wants to see it.</p>
<blockquote>
<p>&quot;looked like magic&quot;...</p>
</blockquote>
<p>The first 70% looked like magic. Then I tried to use it like my real terminal.</p>
<p>The right-click menu did not work. Autocomplete did not work. A few small behaviors felt wrong. Nothing dramatic. Just the annoying stuff that separates &quot;it runs&quot; from &quot;I can use this every day.&quot;</p>
<p>Claude Code got the rewrite shockingly far. I fixed the menus, autocomplete, and the small behaviors I notice every day.</p>
<picture>
<source type="image/avif" srcset="/blog-images/2026-07-21-12-50_mid-natural-6f1b425dbd-640.avif 640w, /blog-images/2026-07-21-12-50_mid-natural-6f1b425dbd-1280.avif 1280w, /blog-images/2026-07-21-12-50_mid-natural-6f1b425dbd-1920.avif 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<source type="image/webp" srcset="/blog-images/2026-07-21-12-50_mid-natural-6f1b425dbd-640.webp 640w, /blog-images/2026-07-21-12-50_mid-natural-6f1b425dbd-1280.webp 1280w, /blog-images/2026-07-21-12-50_mid-natural-6f1b425dbd-1920.webp 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<img src="https://nate.lemos.dev/blog-images/2026-07-21-12-50_mid-natural-6f1b425dbd-1280.webp" alt="A developer checking terminal behavior at a desk" width="1280" height="720" loading="lazy" decoding="async">
</picture>

<blockquote>
<p>&quot;It felt instant&quot;...</p>
</blockquote>
<p>The first time I opened the finished Rust version, it felt instant. My old terminal was back.</p>
<p>I ran a bunch of benchmarks to see if it really was that fast. The results were kind of ridiculous!</p>
<p>Startup was the change I felt first. The rewrite also shrank the app from the size of a short video to something closer to a few photos.</p>
<div class="benchmark-comparison" aria-labelledby="hyper-benchmark-heading">
  <p class="benchmark-heading" id="hyper-benchmark-heading"><strong>Electron Hyper vs. Rust hyper-revamp</strong></p>
  <div class="benchmark-grid">
    <figure class="benchmark-metric">
      <figcaption><span>Ready for typing</span><strong>3.8× faster</strong></figcaption>
      <div class="benchmark-bars" aria-hidden="true">
        <div class="benchmark-series benchmark-series-original">
          <span class="benchmark-label">Original Hyper</span>
          <span class="benchmark-value">1.22 seconds</span>
          <span class="benchmark-bar" style="--benchmark-width: 100%"></span>
        </div>
        <div class="benchmark-series benchmark-series-rust">
          <span class="benchmark-label">Rust hyper-revamp</span>
          <span class="benchmark-value">0.32 seconds</span>
          <span class="benchmark-bar" style="--benchmark-width: 26.2295082%"></span>
        </div>
      </div>
    </figure>
    <figure class="benchmark-metric">
      <figcaption><span>Idle memory</span><strong>68% less</strong></figcaption>
      <div class="benchmark-bars" aria-hidden="true">
        <div class="benchmark-series benchmark-series-original">
          <span class="benchmark-label">Original Hyper</span>
          <span class="benchmark-value">464 MB</span>
          <span class="benchmark-bar" style="--benchmark-width: 100%"></span>
        </div>
        <div class="benchmark-series benchmark-series-rust">
          <span class="benchmark-label">Rust hyper-revamp</span>
          <span class="benchmark-value">146 MB</span>
          <span class="benchmark-bar" style="--benchmark-width: 31.4655172%"></span>
        </div>
      </div>
    </figure>
    <figure class="benchmark-metric">
      <figcaption><span>Processor time</span><strong>83% less</strong></figcaption>
      <div class="benchmark-bars" aria-hidden="true">
        <div class="benchmark-series benchmark-series-original">
          <span class="benchmark-label">Original Hyper</span>
          <span class="benchmark-value">47.4 seconds</span>
          <span class="benchmark-bar" style="--benchmark-width: 100%"></span>
        </div>
        <div class="benchmark-series benchmark-series-rust">
          <span class="benchmark-label">Rust hyper-revamp</span>
          <span class="benchmark-value">8.2 seconds</span>
          <span class="benchmark-bar" style="--benchmark-width: 17.2995781%"></span>
        </div>
      </div>
    </figure>
    <figure class="benchmark-metric">
      <figcaption><span>Disk space</span><strong>93% smaller</strong></figcaption>
      <div class="benchmark-bars" aria-hidden="true">
        <div class="benchmark-series benchmark-series-original">
          <span class="benchmark-label">Original Hyper</span>
          <span class="benchmark-value">230 MB</span>
          <span class="benchmark-bar" style="--benchmark-width: 100%"></span>
        </div>
        <div class="benchmark-series benchmark-series-rust">
          <span class="benchmark-label">Rust hyper-revamp</span>
          <span class="benchmark-value">17 MB</span>
          <span class="benchmark-bar" style="--benchmark-width: 7.3913043%"></span>
        </div>
      </div>
    </figure>
  </div>
  <div class="benchmark-table-wrap">
    <table class="benchmark-table">
      <caption>Electron Hyper compared with Rust hyper-revamp on the same Mac</caption>
      <thead>
        <tr>
          <th scope="col">Metric</th>
          <th scope="col">Original Hyper</th>
          <th scope="col">Rust hyper-revamp</th>
          <th scope="col">Difference</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th scope="row">Ready for typing</th>
          <td data-label="Original Hyper">1.22 seconds</td>
          <td data-label="Rust hyper-revamp">0.32 seconds</td>
          <td data-label="Difference">3.8× faster</td>
        </tr>
        <tr>
          <th scope="row">Idle memory</th>
          <td data-label="Original Hyper">464 MB</td>
          <td data-label="Rust hyper-revamp">146 MB</td>
          <td data-label="Difference">68% less</td>
        </tr>
        <tr>
          <th scope="row">Processor time</th>
          <td data-label="Original Hyper">47.4 seconds</td>
          <td data-label="Rust hyper-revamp">8.2 seconds</td>
          <td data-label="Difference">83% less</td>
        </tr>
        <tr>
          <th scope="row">Disk space</th>
          <td data-label="Original Hyper">230 MB</td>
          <td data-label="Rust hyper-revamp">17 MB</td>
          <td data-label="Difference">93% smaller</td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

<p>I put the full benchmark and method in the project if you want every number.</p>
<p>Rust is not a magic adjective. The win came from removing a lot of machinery I did not need: the built-in browser, the JavaScript runtime, and the extra processes connecting them. Rewriting the app gave me a chance to keep the experience and throw away the weight.</p>
<blockquote>
<p>&quot;the plugins had nowhere to run&quot;...</p>
</blockquote>
<p>Of course, there was a catch. Hyper&#39;s plugins were made for the old web-based app. Think of them like browser extensions. Once I removed the browser, the plugins had nowhere to run.</p>
<p>So I converted the plugins <em>I</em> use into Rust. The rest of the Hyper plugin store is still missing. If your setup depends on those plugins, the original is still better for you.</p>
<p>Hyper was a platform. Hyper-revamp is <em>my terminal</em>.</p>
<picture>
<source type="image/avif" srcset="/blog-images/2026-07-21-12-50_end-natural-08de0bd785-640.avif 640w, /blog-images/2026-07-21-12-50_end-natural-08de0bd785-1280.avif 1280w, /blog-images/2026-07-21-12-50_end-natural-08de0bd785-1920.avif 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<source type="image/webp" srcset="/blog-images/2026-07-21-12-50_end-natural-08de0bd785-640.webp 640w, /blog-images/2026-07-21-12-50_end-natural-08de0bd785-1280.webp 1280w, /blog-images/2026-07-21-12-50_end-natural-08de0bd785-1920.webp 1920w" sizes="(max-width: 960px) calc(100vw - 2.7rem), 960px">
<img src="https://nate.lemos.dev/blog-images/2026-07-21-12-50_end-natural-08de0bd785-1280.webp" alt="A developer working in the revived Hyper terminal" width="1280" height="720" loading="lazy" decoding="async">
</picture>

<blockquote>
<p>&quot;It&#39;s just a rewrite in Rust&quot;...</p>
</blockquote>
<p>Someone will look at this and say, &quot;It&#39;s just a rewrite in Rust.&quot;</p>
<p>It is! And that&#39;s exactly why I love it.</p>
<p>I did not need to invent a new kind of terminal. I did not need to bolt an AI chat box onto the command line. I wanted the same Hyper I already loved, except current, fast, reliable, and mine.</p>
<p>Now Hyper is back. It is current, fast, reliable, and mine!</p>
<hr>
<p><strong>References:</strong></p>
<ol>
<li><a href="https://github.com/NatanaelLemos/hyper-revamp">hyper-revamp repository (GitHub)</a></li>
<li><a href="https://github.com/NatanaelLemos/hyper-revamp/commit/430c200">Native Rust replacement commit (GitHub)</a></li>
<li><a href="https://github.com/vercel/hyper/releases">Hyper releases (GitHub)</a></li>
<li><a href="https://github.com/vercel/hyper/commits/canary/">Hyper canary commit history (GitHub)</a></li>
<li><a href="https://github.com/vercel/hyper/blob/canary/PLUGINS.md">Hyper plugin API (GitHub)</a></li>
<li><a href="https://www.cve.org/CVERecord?id=CVE-2024-23741">CVE-2024-23741 (CVE.org)</a></li>
<li><a href="https://www.electronjs.org/docs/latest/tutorial/process-model">Electron process model (Electron)</a></li>
<li><a href="https://www.electronjs.org/docs/latest/tutorial/performance">Electron performance guide (Electron)</a></li>
<li><a href="https://code.claude.com/docs/en/how-claude-code-works">How Claude Code works (Anthropic)</a></li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>Your agent is the operating system now</title>
      <link>https://nate.lemos.dev/blog/are-all-saas-operating-systems-now</link>
      <guid isPermaLink="true">https://nate.lemos.dev/blog/are-all-saas-operating-systems-now</guid>
      <pubDate>Sat, 04 Jul 2026 12:00:00 GMT</pubDate>
      <author>natanael@lemos.dev (Nate Lemos)</author>
      <description>I feel like every dev I know and their grandmas have written their own AI assistant, so I decided to write my own: Clawdia. I&apos;m not alone.</description>
      <content:encoded><![CDATA[

<h1>Your agent is the operating system now</h1>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-07-04-10-19_banner.webp" alt="A lone figure with an umbrella facing a towering rain-slicked wall of glowing modular compartments in a cyberpunk city, each lit cell a separate app stacked like processes in an operating system" width="1376" height="768" loading="eager" fetchpriority="high" decoding="async">

<p>I feel like every dev I know and their grandmas have written their own AI assistant, so I decided to write my own: Clawdia. I&#39;m not alone. 84% of developers already use or plan to use AI tools per Stack Overflow&#39;s latest survey, and 51% of organizations have agents running in production. Building your own assistant went from a moonshot to a weekend project.</p>
<p>But this post isn&#39;t about building an assistant. It&#39;s about what happened to the architecture when I did.</p>
<p>Clawdia started as one app. Chat, calendar, money tracking, health vitals, news. One codebase, one process, one deploy. And what I realized is that the more I wanted her to do, the more I wanted things separated, so I could edit the money module without touching the calendar module or the news module without breaking the health module. Every new feature made the blast radius of every change bigger. Fixing a chart in the money tab meant rebuilding and restarting the <em>entire</em> system (chat, browser pool, scheduler, everything).</p>
<p>So I ripped it apart. In one day I pulled News, Money, Health and the other modules, all out of the dashboard and turned each into a complete standalone application. Not a component. Not a plugin. An actual app with its own package.json, its own process, its own port. Each one talks to Clawdia&#39;s main app through a thin contract, shared storage, a proxy route, but runs on its own. They start on demand, stop when idle, and any one of them can be added, deleted, completely re-written, without the rest of the system noticing.</p>
<blockquote>
<p>&quot;Write programs that do one thing and do it well&quot;...</p>
</blockquote>
<p>This is not new. Doug McIlroy wrote it down at Bell Labs in 1978: &quot;Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.&quot; That&#39;s the Unix philosophy, and it&#39;s older than most of the people vibe-coding assistants today. I didn&#39;t invent the architecture, I was just reminded of it.</p>
<blockquote>
<p>&quot;a disheartening state of obesity&quot;...</p>
</blockquote>
<p>The architecture that we spent decades forgetting about... Software got fat. McIlroy himself watched it happen and didn&#39;t hide his disgust: &quot;adoring admirers have fed Linux goodies to a disheartening state of obesity.&quot; The man page that used to be a page became a small book. Every app grew a settings screen, a plugin system, an account, a billing tier, a mobile app, an AI feature bolted on last quarter. We stopped shipping programs that did one thing and started shipping platforms that did everything badly. The pipe got buried under a UI, and the universal interface — plain text, readable by anything — got replaced with a hundred proprietary APIs that only talk to themselves.</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-07-04-10-19_mid.webp" alt="Two workers in hard hats hand-wiring a hulking monolithic server tower with tangled cables in a dim, rainy server room, the human orchestration cost that made microservices miserable for small teams" width="1376" height="768" loading="lazy" decoding="async">

<p>Which is exactly why the Unix idea is sneaking back in through the side door marked &quot;AI.&quot; MCP is the pipe, rebuilt for agents. A tool exposes what it does, the agent composes it with the others, and nothing has to know who it&#39;s talking to — same contract, same ignorance-as-a-feature that made pipes work. The universal interface stopped being text streams and became language, the one format every model and every human already speaks. My money app doesn&#39;t know the health app exists. It doesn&#39;t need to. Clawdia is the shell, MCP is the pipe, and each sub-app is a small program that does one thing well. McIlroy described my whole stack in three sentences before I was born — I just spent a weekend rediscovering it and thinking I was clever.</p>
<blockquote>
<p>&quot;reduced our infrastructure cost by over 90%&quot;...</p>
</blockquote>
<p>The funny thing is the industry just spent five years running the other direction. In 2023, Amazon Prime Video&#39;s team published that they &quot;reduced our infrastructure cost by over 90%&quot; after moving their monitoring service <em>from</em> microservices <em>to</em> a monolith. DHH had been saying it since 2016 — Basecamp runs six platforms on one majestic monolith with 12 programmers. Shopify looked at its 6,000 Ruby classes, considered microservices, and chose a modular monolith instead because crossing the network on every call adds latency and failure states. The pendulum had swung hard back to the monolith, and the microservice true believers went quiet.</p>
<p>They were right... </p>
<p>...for humans! Microservices died for small teams because the orchestration cost landed on people. Someone has to maintain the deploy pipelines, trace the failures across service boundaries, keep the contracts in sync. At 12 programmers, that someone is <strong>you</strong>, every day.</p>
<p>But an agent doesn&#39;t pay that cost the way you do. </p>
<p>Clawdia <em>is</em> the orchestration layer. She starts the money app when I open it, reads its output through a shared contract, restarts it when it wedges, and files the log when it doesn&#39;t. The exact overhead that made microservices miserable for a 12-person team is now the assistant&#39;s job description.</p>
<blockquote>
<p>&quot;Excel is an agent to my Copilot, Word is an agent&quot;...</p>
</blockquote>
<p>Satya Nadella saw this coming in December 2024, when he said SaaS applications will collapse in the agent era: &quot;the business logic is all going to these AI agents.&quot; His version of the future: &quot;Excel is an agent to my Copilot, Word is an agent.&quot; The application stops being the product. It becomes a process the agent starts, uses and stops. And the plumbing for that already exists: MCP launched in November 2024 with roughly a hundred servers, and a year later had grown into thousands, with 97 million monthly SDK downloads and backing from Anthropic, OpenAI, Google, and Microsoft. Gartner says agentic AI will sit inside 33% of enterprise software by 2028, up from less than 1% in 2024.</p>
<p>So here&#39;s what a SaaS actually turns into once agents are the users instead of people. Think about what an operating system does: it runs processes, schedules them, keeps them isolated, and gives them a syscall layer to talk through. That&#39;s exactly what my assistant does with her sub-apps (she runs them, schedules them, isolates them, and gives them MCP to talk through). The assistant <em>is</em> the operating system, and each SaaS is just a process running on it.</p>
<p>And that&#39;s the big shift in the industry. Every SaaS that survives the shift has to make one move: expose its modules, publish its contract, and let the agent be the shell instead of the UI. The ones that refuse end up exactly where Nadella pointed — the business logic drains out into the agents, and all that&#39;s left is a database with a UI nobody opens, waiting for an agent to CRUD it directly.</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-07-04-10-19_end.webp" alt="A person plugging a single glowing connector into a wall of mismatched CRT monitors that each run a different program, one operator orchestrating a dozen small standalone apps through one universal interface" width="1376" height="768" loading="lazy" decoding="async">

<p>Geoffrey Litt predicted the demand side back in March 2023: LLMs mean businesses build custom software in-house instead of buying SaaS off the shelf, because tailored software is suddenly cheaper than subscriptions.</p>
<p>Clawdia is the proof: she replaced my news reader, my budgeting dashboard, my e-book app, my planner and many other subscriptions I no longer shop for. Modules I can rewrite on a whim and completely tailored to what I need and want. My money app is maybe 2,000 lines. It does exactly what I want and nothing else, and when I want it to do something different, I tell my kernel/agent and she rewrites the process.</p>
<p>The microservice renaissance isn&#39;t coming back for the enterprises that abandoned it. It&#39;s coming back for individuals — one person, one agent, a dozen small programs that do one thing well. McIlroy would recognize it instantly. We just swapped text streams for tokens!</p>
<hr>
<p><strong>References:</strong></p>
<ol>
<li><a href="https://survey.stackoverflow.co/2025/ai">Stack Overflow Developer Survey 2025 — AI section (Stack Overflow)</a></li>
<li><a href="https://www.langchain.com/stateofaiagents">State of AI Agents report — 51% in production, 78% planning (LangChain)</a></li>
<li><a href="https://www.anthropic.com/news/model-context-protocol">Introducing the Model Context Protocol (Anthropic)</a></li>
<li><a href="https://workos.com/blog/everything-your-team-needs-to-know-about-mcp-in-2026">Everything your team needs to know about MCP in 2026 — 97M monthly SDK downloads, four-vendor backing (WorkOS)</a></li>
<li><a href="https://podcasts.apple.com/us/podcast/satya-nadella-bg2-w-bill-gurley-brad-gerstner/id1727278168?i=1000680168104">Satya Nadella on business apps collapsing in the agent era — BG2 podcast w/ Bill Gurley &amp; Brad Gerstner, Dec 12 2024 (BG2Pod)</a></li>
<li><a href="https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90">Scaling up the Prime Video monitoring service and reducing costs by 90% (Prime Video Tech)</a></li>
<li><a href="https://shopify.engineering/deconstructing-monolith-designing-software-maximizes-developer-productivity">Deconstructing the Monolith (Shopify Engineering)</a></li>
<li><a href="https://signalvnoise.com/svn3/the-majestic-monolith/">The Majestic Monolith (DHH, Signal v. Noise)</a></li>
<li><a href="https://en.wikipedia.org/wiki/Unix_philosophy">Unix philosophy — McIlroy, Kernighan &amp; Pike (Wikipedia)</a></li>
<li><a href="https://www.geoffreylitt.com/2023/03/25/llm-end-user-programming.html">Malleable software in the age of LLMs (Geoffrey Litt)</a></li>
<li><a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027">Gartner predicts 33% of enterprise software will include agentic AI by 2028, up from less than 1% in 2024 (Gartner, Jun 25 2025)</a></li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>My wife is a vibe-coder, now what?</title>
      <link>https://nate.lemos.dev/blog/my-wife-is-a-vibe-coder-now-what</link>
      <guid isPermaLink="true">https://nate.lemos.dev/blog/my-wife-is-a-vibe-coder-now-what</guid>
      <pubDate>Mon, 06 Apr 2026 12:00:00 GMT</pubDate>
      <author>natanael@lemos.dev (Nate Lemos)</author>
      <description>My wife has never written a line of code. She doesn&apos;t know what a function is. She thinks &quot;React&quot; is something you do after someone scares you. Last week she built her first app.</description>
      <content:encoded><![CDATA[

<h1>My wife is a vibe-coder, now what?</h1>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-04-06-11-15_banner.webp" alt="Banner illustration for the article: My wife is a vibe-coder, now what?" width="1536" height="1024" loading="eager" fetchpriority="high" decoding="async">

<p>My wife has never written a line of code. She doesn&#39;t know what a function is. She thinks &quot;React&quot; is something you do after someone scares you. Last week she built her first app.</p>
<p>Not &quot;played with a demo.&quot; Not &quot;clicked around in a template.&quot; Built an app.</p>
<p>She sat down with an AI coding assistant, described what she wanted, argued with it when it got things wrong, and three hours later had a working prototype. No Stack Overflow. No tutorials. No bootcamp. Just a person with a clear idea and a tool that could turn that idea into software.</p>
<p>I watched it happen and had one thought: everything just changed.</p>
<p>AI is just a programming language that speaks English. I mean that literally. You describe the state you want. You describe the behavior you want. The machine translates it into code. My wife proved that in three hours.</p>
<p>But &quot;accessible&quot; does not mean &quot;automatic.&quot; My wife did not say &quot;make me an app&quot; and get handed a finished product. She spent hours refining it. She had to think through user flows, make design decisions, reject bad suggestions, and push back when the AI wandered off into nonsense. She was the product owner, designer, QA tester, and creative director — roles she defined as she went, same as always. The AI was the developer who happened to work for free.</p>
<p>The AI had zero taste and zero context for why the app should exist. It had endless opinions about implementation details nobody asked for. Creativity and taste still live with the human. The AI just removed the annoying wall between &quot;I have an idea&quot; and &quot;I have a working thing.&quot;</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-04-06-11-15_mid.webp" alt="Illustration from the article: My wife is a vibe-coder, now what?" width="1536" height="1024" loading="lazy" decoding="async">

<p>This is the part that actually excites me: engineers are not coders anymore. We are managers.</p>
<p>I used to spend most of my day wiring up forms and tables. Input validation. CRUD endpoints. The same boring glue code every product needs and nobody dreams about writing. Necessary work, sure. Soul-crushing if you are honest about it.</p>
<p>Now I hand that work to agents and move on.</p>
<p>My workflow looks nothing like it did two years ago. I spin up multiple agents, each working on a different piece of the system. One builds the API layer. Another writes tests. A third refactors the module I have been avoiding for months. I review the output, correct the dumb parts, and spend my actual time on architecture, system design, and deciding what should exist in the first place.</p>
<p>That is engineering management. The reports just happen to be AI agents instead of people.</p>
<p>The skill set changed. It is less about remembering the exact syntax for a PostgreSQL upsert and more about knowing whether an upsert is the right call at all. Less typing. More judgment.</p>
<p>And the work that remains is the good stuff. Architecture questions. Scaling questions. Product questions. The creative part that got us into engineering before a decade of Jira tickets trained us to accept form fields as a lifestyle.</p>
<p>The gatekeeping is over. Good.</p>
<p>Some engineers hate this. We spent years memorizing the incantations, and now somebody who has never written a function can produce working software in an afternoon. I understand the grievance. I don&#39;t share it.</p>
<p>But my wife&#39;s app works. It does what she needs. She saw a problem and built a solution. The fact that she used AI instead of learning JavaScript does not make the output less valid. It just makes the old gate look ridiculous.</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-04-06-11-15_end.webp" alt="Illustration from the article: My wife is a vibe-coder, now what?" width="1536" height="1024" loading="lazy" decoding="async">

<p>The floor has risen. The baseline for &quot;who can build software&quot; now includes anyone with a clear idea, enough patience, and enough taste to know when the machine is lying to them.</p>
<p>The ceiling did not drop. Complex distributed systems, performance-critical code, security, data integrity — that stuff still needs deep expertise. AI can help. It cannot replace the judgment you get from years of building things, breaking them, fixing them at 2 a.m., and remembering the scar tissue next time.</p>
<p>The gap between &quot;I can make a simple app&quot; and &quot;I can architect a production system&quot; is wider than ever. But the first part is no longer locked behind whether you learned to code.</p>
<p>That is not a threat to engineering. It is the job finally getting honest.</p>
<p>The keyboard was never the point. The point was building the thing.</p>
<hr>
<p><strong>References:</strong></p>
<ol>
<li><a href="https://www.oreilly.com/radar/vibe-coding/">Vibe Coding and the Future of Software Engineering</a></li>
<li><a href="https://www.wired.com/story/the-end-of-programming-as-we-know-it/">The End of Programming as We Know It</a></li>
<li><a href="https://spectrum.ieee.org/ai-coding">How AI Is Transforming Software Development</a></li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>The Great AI Migration — 700K Cancellations and What Comes Next</title>
      <link>https://nate.lemos.dev/blog/the-great-ai-migration-700k-cancellations-and-what-comes-next</link>
      <guid isPermaLink="true">https://nate.lemos.dev/blog/the-great-ai-migration-700k-cancellations-and-what-comes-next</guid>
      <pubDate>Mon, 02 Mar 2026 12:00:00 GMT</pubDate>
      <author>natanael@lemos.dev (Nate Lemos)</author>
      <description>I use Claude every day. It&apos;s woven into how I write, how I build, and how I think through problems — to the point where my wife calls it &quot;the other relationship&quot;.</description>
      <content:encoded><![CDATA[
<h1>The Great AI Migration — 700K Cancellations and What Comes Next</h1>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-03-02-05-57_banner.webp" alt="The Great AI Migration banner" width="1536" height="1024" loading="eager" fetchpriority="high" decoding="async">

<p>I use Claude every day. It&#39;s woven into how I write, how I build, and how I think through problems &#8212; to the point where my wife calls it &#34;the other relationship&#34;. So when Claude went from outside the App Store top 100 to the #1 free app in the US this week, I had a weird mix of vindication and genuine unease about what it means.</p>
<p>Because this isn&#39;t a marketing win. It&#39;s a fracture in the AI consumer market, and fractures don&#39;t heal quietly.</p>

<h2>700,000 People Made a Statement</h2>
<p>Over 700,000 people pledged to cancel their ChatGPT subscriptions after OpenAI took the Pentagon deal that Anthropic was blacklisted for refusing. An Instagram post about the movement hit 36 million views. Reddit flooded with cancellation screenshots.</p>
<p>Meanwhile, Anthropic&#39;s free signups jumped 60%, paid subscribers doubled in a month, and Claude hit #1 on the App Store. Katy Perry bought a Claude Pro subscription on camera.</p>
<p>A pop star bought a subscription to an AI chatbot as a political statement. That&#39;s new.</p>

<h2>The Business Model Split Is the Real Story</h2>
<p>Here&#39;s where it gets interesting for anyone building on these platforms.</p>
<p>OpenAI just closed a $110 billion round at a $730 billion valuation &#8212; the largest private funding round in history. The same week, they launched ChatGPT Go ($10/month) and started running ads on the free tier. Ads that show up as early as your first message.</p>

<img class="banner" src="https://nate.lemos.dev/blog-images/2026-03-02-05-57_split.webp" alt="OpenAI vs Anthropic business model split" width="1536" height="1024" loading="lazy" decoding="async">

<p>Let&#39;s map the two paths:</p>

<table>
<thead>
<tr><th></th><th>OpenAI</th><th>Anthropic</th></tr>
</thead>
<tbody>
<tr><td><strong>Valuation</strong></td><td>$730B</td><td>~$380B</td></tr>
<tr><td><strong>Revenue model</strong></td><td>Subscriptions + ads + enterprise + government</td><td>Subscriptions + enterprise</td></tr>
<tr><td><strong>Pentagon</strong></td><td>Signed the deal</td><td>Refused, got blacklisted</td></tr>
<tr><td><strong>User growth</strong></td><td>700K+ cancellation pledges</td><td>#1 App Store, 60%+ free user surge</td></tr>
<tr><td><strong>Ads</strong></td><td>Yes, on free and Go tiers</td><td>No</td></tr>
<tr><td><strong>Latest raise</strong></td><td>$110B (Amazon, NVIDIA, SoftBank)</td><td>Series E (undisclosed)</td></tr>
</tbody>
</table>

<p>When you&#39;re valued at $730B and you&#39;ve taken $110B from Amazon and SoftBank, you need returns at a scale that subscription revenue alone can&#39;t deliver. Ads aren&#39;t a surprise. They&#39;re an inevitability.</p>
<p>That changes the relationship. When your AI assistant runs ads, you&#39;re not the customer. You&#39;re the inventory.</p>

<h2>Platform Lessons from the Inside</h2>
<p>I&#39;ve spent enough time inside big tech to watch this pattern up close. Priorities shift from the living room to the data center, from the user to the API endpoint. The playbook is always the same: the platform that once served users starts serving shareholders, and the gap between those two widens until something breaks.</p>
<p>OpenAI&#39;s trajectory looks familiar. Not because anyone there is acting maliciously &#8212; but because $730B valuations create gravitational forces that pull every decision toward revenue maximization. The ads are version one. Version two is conversations training models for enterprise clients. Version three is dynamic pricing based on what the AI knows about you.</p>
<p>This is why &#34;love the problem, not the platform&#34; isn&#39;t just a saying. It&#39;s survival.</p>

<h2>What This Means If You&#39;re Building</h2>
<p>If you have production systems on OpenAI&#39;s API, this week changes nothing technically. The models still work. But strategically, you just watched a company signal that consumer revenue is no longer enough. That means:</p>
<p><strong>API pricing will shift.</strong> When ad revenue enters the equation, the cost calculus for API tiers gets messy. Watch for &#34;subsidized&#34; tiers that come with data-sharing agreements.</p>
<p><strong>Data policies will evolve.</strong> $110B doesn&#39;t get repaid with $20/month subscriptions. Your usage data becomes the asset.</p>
<p><strong>Diversify your stack.</strong> If your product breaks when one provider changes terms, you don&#39;t have a product &#8212; you have a dependency.</p>

<img class="banner" src="https://nate.lemos.dev/blog-images/2026-03-02-05-57_builder.webp" alt="Building with AI platforms" width="1536" height="1024" loading="lazy" decoding="async">

<p>The 700K cancellations matter less as a revenue hit (OpenAI reports 900 million weekly users) and more as signal. Users are telling you where the line is. Smart builders listen to that.</p>

<h2>Key Takeaways</h2>
<ul>
<li><strong>The first major consumer revolt in AI is here.</strong> 700K+ cancellation pledges and Claude hitting #1 is a data point, not a trend yet &#8212; but it&#39;s a loud one.</li>
<li><strong>OpenAI&#39;s ad rollout is structural, not optional.</strong> A $730B valuation backed by $110B needs returns that subscriptions alone can&#39;t deliver.</li>
<li><strong>The business model is the product.</strong> When your AI runs ads, the optimization target shifts from &#34;best answer for the user&#34; to &#34;best answer that keeps the user engaged near the ad.&#34;</li>
<li><strong>Diversify your AI stack.</strong> Whether you&#39;re building or just using these tools daily, platform independence is engineering discipline, not paranoia.</li>
<li><strong>Watch what companies do under financial pressure, not what they say in blog posts.</strong> The next 12 months will reveal which AI labs serve users and which serve balance sheets.</li>
</ul>

<hr>

<h3>References</h3>
<ul>
<li><a href="https://www.theverge.com/2026/3/1/quitgpt-movement-chatgpt-cancellations" target="_blank" rel="noopener">QuitGPT movement surpasses 700K pledged cancellations</a> &#8212; The Verge</li>
<li><a href="https://www.reuters.com/technology/openai-110-billion-funding-round-2026-02-28/" target="_blank" rel="noopener">OpenAI closes $110B round at $730B valuation</a> &#8212; Reuters</li>
<li><a href="https://www.cnbc.com/2026/03/01/claude-app-store-number-one.html" target="_blank" rel="noopener">Claude hits #1 on US App Store amid Anthropic Pentagon ban</a> &#8212; CNBC</li>
<li><a href="https://openai.com/index/chatgpt-go-and-ads/" target="_blank" rel="noopener">ChatGPT launches ads on free tier</a> &#8212; OpenAI Blog</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Farewell to the Green Box: A Full Circle Microsoft Trajectory</title>
      <link>https://nate.lemos.dev/blog/farewell-to-the-green-box-a-full-circle-microsoft-trajectory</link>
      <guid isPermaLink="true">https://nate.lemos.dev/blog/farewell-to-the-green-box-a-full-circle-microsoft-trajectory</guid>
      <pubDate>Wed, 25 Feb 2026 12:00:00 GMT</pubDate>
      <author>natanael@lemos.dev (Nate Lemos)</author>
      <description>I saw the news this morning about Xbox being &quot;sunsetted&quot; under the new CEO, and it hit a lot harder than a standard tech layoff headline.</description>
      <content:encoded><![CDATA[

<h1>Farewell to the Green Box: A Full Circle Microsoft Trajectory</h1>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-25_xbox_farewell.webp" alt="Banner illustration for the article: Farewell to the Green Box: A Full Circle Microsoft Trajectory" width="1376" height="768" loading="eager" fetchpriority="high" decoding="async">

<p>I saw the news this morning about Xbox being &quot;sunsetted&quot; under the new CEO, and it hit a lot harder than a standard tech layoff headline. It’s not just a platform dying; it’s the end of a very specific era of my life.</p>
<p>My history with Microsoft isn’t just a line item on my LinkedIn. It’s a trajectory that spans from childhood envy to the internal engine room, and finally, to the cold reality of the &quot;Efficiency Era.&quot;</p>
<h2>1. The Rich Kid’s Trophy</h2>
<p>I grew up in Brazil. Back then, an Xbox wasn’t just a console; it was a status symbol. It was the &quot;rich kid down the street&quot; hardware. While I was hacking away on whatever tech I could get my hands on, that glowing green &#39;X&#39; represented a level of polish and power that felt unattainable. It was the dream machine.</p>
<h2>2. The Engine Room (343 &amp; Azure)</h2>
<p>Fast forward a decade or two, and I wasn&#39;t just playing on the platform—I was building it.</p>
<p>I spent time at <strong>343 Industries</strong> working on <em>Halo Infinite</em>. There is a very specific kind of magic (and madness) that comes with working on a flagship title. You see the cracks in the armor, the technical debt behind the Master Chief’s visor, and the sheer human effort required to keep a legacy alive.</p>
<p>Then I moved over to the <strong>Azure Portal</strong> team. If Halo was the heart of the brand, Azure was the nervous system. I went from the glory of the games to the brutal scale of the infrastructure. I saw how the &quot;One Microsoft&quot; machine actually turned. I was an insider. I had the badge. I was part of the ecosystem I’d spent my childhood admiring from the outside.</p>
<h2>3. The Palliative Care Phase</h2>
<p>Then came January 2025. The layoffs hit, and just like that, the badge was gone.</p>
<p>Watching Xbox being &quot;gently slid into the night&quot; now feels like the logical conclusion to the shift I saw from the inside. Microsoft is no longer a &quot;consumer hardware&quot; company at its core; it’s a compute company. The co-founder’s comment about acting as a &quot;palliative care doctor&quot; for the brand is bleak, but honest. </p>
<p>The focus has shifted from the living room to the data center. From the controller to the agent.</p>
<h2>The Lessons Learned</h2>
<ul>
<li><strong>Don&#39;t marry a platform:</strong> I&#39;ve said it before, but owning your data and being platform-independent is the only way to survive the lifecycle of these giants.</li>
<li><strong>Infrastructure wins:</strong> Consoles are &quot;slop&quot; in the eyes of modern VPs; compute sovereignty (Azure/GPUs) is the only thing that gets funded.</li>
<li><strong>The Full Circle:</strong> I went from wanting the box, to building the box, to witnessing the box become a footnote in a Series G funding deck for an AI lab.</li>
</ul>
<p>Farewell, Xbox. You were a great trophy, a challenging employer, and a hell of a ride. </p>
<p>But the future doesn&#39;t have a disc drive. It has an API.</p>
<hr>
<h3>References</h3>
<ul>
<li>GamesRadar: <a href="https://www.gamesradar.com/games/xbox-will-be-sunsetted-under-new-ceo-original-co-founder-expects-her-job-is-going-to-be-as-a-palliative-care-doctor-who-slides-xbox-gently-into-the-night/">Xbox will be sunsetted under new CEO</a></li>
<li>Instagram: <a href="https://www.instagram.com/p/DVIvJOKljj2">Co-founder commentary on Xbox future</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Cursor and the Netflix effect: why every AI company will come crawling back</title>
      <link>https://nate.lemos.dev/blog/cursor-and-the-netflix-effect-why-every-ai-company-will-come-crawling</link>
      <guid isPermaLink="true">https://nate.lemos.dev/blog/cursor-and-the-netflix-effect-why-every-ai-company-will-come-crawling</guid>
      <pubDate>Thu, 19 Feb 2026 12:00:00 GMT</pubDate>
      <author>natanael@lemos.dev (Nate Lemos)</author>
      <description>Remember when Netflix was it? One subscription, one app, everything in one place. Then HBO pulled their content. Disney yanked their catalog. Paramount launched Paramount+. Peacock... happened.</description>
      <content:encoded><![CDATA[

<h1>Cursor and the Netflix effect: why every AI company will come crawling back</h1>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-19_07-23_banner.webp" alt="Banner illustration for the article: Cursor and the Netflix effect: why every AI company will come crawling back" width="1408" height="768" loading="eager" fetchpriority="high" decoding="async">

<p>Remember when Netflix was it? One subscription, one app, everything in one place. Then HBO pulled their content. Disney yanked their catalog. Paramount launched Paramount+. Peacock... happened. Within three years, streaming went from one destination to a dozen forgettable apps, each with their own billing page and password reset flow.</p>
<p>You know how that story ends. Netflix just dropped $82.7 billion to acquire Warner Bros., HBO, and HBO Max. Disney is folding Hulu back into Disney+. The Great Re-Aggregation is here, because running a streaming platform turns out to be a completely different business than making great content.</p>
<p>I&#39;ve been watching the AI coding tools space follow the exact same playbook. Cursor is Netflix.</p>
<h2>Everyone wants their own streaming service</h2>
<p>Cursor launched as a fork of VS Code with AI baked into the editing experience, not bolted onto it. For a while, it was the only IDE that made AI coding feel native. It was &quot;vibe coding&quot; before anyone coined the term.</p>
<p>Then model providers looked at Cursor&#39;s growth trajectory ($1M to $1B+ ARR in under two years, the fastest-scaling SaaS in history) and had the same reaction HBO did: &quot;We make the models. Why is someone else owning the interface?&quot;</p>
<p>The result:</p>
<ul>
<li><strong>Anthropic</strong> launched Claude Code, now at $2.5B annualized revenue</li>
<li><strong>OpenAI</strong> shipped the Codex desktop app for macOS on February 2, plus a CLI and IDE extensions for VS Code, Cursor, and Windsurf</li>
<li><strong>Google</strong> rebranded Project IDX to Firebase Studio with Gemini agents, MCP support, and three distinct agent modes</li>
<li><strong>JetBrains</strong> built Junie with multi-model support</li>
</ul>
<p>Everyone thinks they can own the full stack. History says otherwise.</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-19_07-23_fragmentation.webp" alt="Illustration from the article: Cursor and the Netflix effect: why every AI company will come crawling back" width="1408" height="768" loading="lazy" decoding="async">

<h2>HBO made great TV. Their streaming app was awful.</h2>
<p>HBO produced some of the best television in history. Their app was a dumpster fire. Buggy interfaces, confusing rebrands (HBO Now, then HBO Max, then Max, now back to HBO). Brilliant content, terrible distribution.</p>
<p>The same split applies here. Anthropic makes arguably the best coding model right now. But building and maintaining a world-class IDE is a fundamentally different discipline than training language models.</p>
<p>An IDE needs an extension ecosystem, rock-solid Git integration, multi-language LSP support, debugging tools, terminal management, team collaboration features, and code review workflows. Cursor has 300+ engineers focused exclusively on this. They&#39;re sitting on a $29.3 billion valuation and just acquired Graphite&#39;s code review platform for &quot;way over&quot; its $290M valuation to own the full loop from generation through merge.</p>
<p>Meanwhile, model providers are splitting attention across training next-gen models, running inference infrastructure, building API platforms, AND shipping a competitive IDE. That&#39;s four businesses at once. HBO couldn&#39;t manage one streaming app without rebranding it three times.</p>
<p>Google&#39;s Firebase Studio is still in preview, not even subject to an SLA. OpenAI&#39;s Codex app launched macOS-only with Windows &quot;planned.&quot; These aren&#39;t products built by teams that live and breathe developer tooling.</p>
<h2>The math kills everyone except the top three</h2>
<p>Netflix spent $17 billion on content in 2025. Disney+ lost $4 billion before its first quarterly profit. Paramount+ never got there.</p>
<p>The AI coding tools market is $4 billion today. The top three players (GitHub Copilot at 42%, Cursor at 18%, Claude Code growing fast) already hold 70%+ of it. Everyone else is fighting over scraps.</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-19_07-23_consolidation.webp" alt="Illustration from the article: Cursor and the Netflix effect: why every AI company will come crawling back" width="1408" height="768" loading="lazy" decoding="async">

<p>Firebase Studio, standalone Codex, Junie... they&#39;re all competing for that remaining 30%, while also competing with each other. At some point, the economics force the same choice every mid-tier streamer faced: keep burning resources on a mediocre platform, or partner with someone who already has the users.</p>
<p>The consolidation signals are already here. Cursor acquired Graphite in December. Anthropic bought Bun (the JavaScript runtime) the same month. These aren&#39;t random purchases; they&#39;re companies building moats around their core business and pulling back from areas where they don&#39;t have an edge.</p>
<h2>What comes back first</h2>
<p>Netflix didn&#39;t get all the content back overnight. First came licensing deals. Then bundles (the &quot;frenemy&quot; model AlixPartners identified for 2026). Then the $82.7 billion acquisition.</p>
<p>I expect the same phased return for Cursor:</p>
<ol>
<li><strong>Model integrations</strong> -- already happening. Cursor supports Claude, GPT, and Gemini today</li>
<li><strong>Preferred partnerships</strong> -- Cursor deepened ties with Google and Nvidia during its Series D</li>
<li><strong>Exclusive agent features</strong> where specific models work best inside Cursor&#39;s framework</li>
<li><strong>Possible acquisitions</strong> -- at $29.3B, Anysphere has the war chest</li>
</ol>
<p>The open question is GitHub Copilot. Backed by Microsoft&#39;s distribution, it could be the Disney+ of this story -- big enough to survive independently. But that still leaves most providers ending up as content suppliers to someone else&#39;s platform, not platform owners themselves.</p>
<h2>Key takeaways</h2>
<ul>
<li>Model providers building IDEs mirrors content studios launching streaming apps. Different business, different competency</li>
<li>The top 3 already own 70%+ of the market. Late entrants face the same economics that killed Paramount+</li>
<li>Cursor&#39;s Graphite acquisition signals platform ambition: own the full lifecycle from writing to code review to merge</li>
<li>The re-aggregation will be gradual. Integrations first, partnerships next, then consolidation</li>
<li>If you&#39;re picking a tool today, choose the one that supports multiple models. That&#39;s your hedge</li>
</ul>
<p>The streaming wars proved that making great content and running a great platform are different skills. The AI coding wars are learning the same lesson. Some companies just haven&#39;t gotten the bill yet.</p>
<hr>
<p><strong>References:</strong></p>
<ol>
<li><a href="https://variety.com/2025/tv/news/netflix-to-acquire-warner-bros-82-7-billion-deal-1236601034/">Netflix to acquire Warner Bros. in $82.7 billion deal</a> -- Variety</li>
<li><a href="https://www.saastr.com/cursor-hit-1b-arr-in-17-months-the-fastest-b2b-to-scale-ever-and-its-not-even-close/">Cursor hit $1B ARR: the fastest-scaling SaaS ever</a> -- SaaStr</li>
<li><a href="https://www.infoworld.com/article/4110558/cursor-owner-anysphere-agrees-to-buy-graphite-code-review-tool.html">Cursor owner Anysphere agrees to buy Graphite code review tool</a> -- InfoWorld</li>
<li><a href="https://www.alixpartners.com/insights/media-entertainment-industry-predictions-report-2026/streaming-wars/">Streaming wars 2026: the rise of the frenemy</a> -- AlixPartners</li>
<li><a href="https://bun.com/blog/bun-joins-anthropic">Bun is joining Anthropic</a> -- Bun Blog</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>How to Build a Personal AI Companion That Actually Remembers You</title>
      <link>https://nate.lemos.dev/blog/how-to-build-a-personal-ai-companion-that-actually-remembers-you</link>
      <guid isPermaLink="true">https://nate.lemos.dev/blog/how-to-build-a-personal-ai-companion-that-actually-remembers-you</guid>
      <pubDate>Fri, 13 Feb 2026 12:00:00 GMT</pubDate>
      <author>natanael@lemos.dev (Nate Lemos)</author>
      <description>Every AI conversation starts from zero. You explain who you are, what you need, what you already tried. Then the session ends and it all evaporates. You do it again tomorrow.</description>
      <content:encoded><![CDATA[

<h1>How to Build a Personal AI Companion That Actually Remembers You</h1>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-13-20-00_banner.webp" alt="Banner illustration for the article: How to Build a Personal AI Companion That Actually Remembers You" width="1536" height="1024" loading="eager" fetchpriority="high" decoding="async">

<p>Every AI conversation starts from zero. You explain who you are, what you need, what you already tried. Then the session ends and it all evaporates. You do it again tomorrow.</p>
<p>This is the setup guide for a system that fixes that. A persistent AI companion that runs on your server, lives inside your notes, remembers everything, and talks to you on Telegram. It wakes up every 15 minutes to check on things. It writes you a daily blog post. It consolidates its own memories while you sleep. And the whole thing runs on markdown files inside an Obsidian vault.</p>
<p>This guide was inspired by the <a href="https://openclaw.ai/">OpenClaw</a> project — an open-source framework for building persistent AI companions. The architecture described here follows a similar philosophy: give the AI a file-based memory, a structured vault, and a heartbeat scheduler, and let it grow into something that genuinely knows you.</p>
<p>No cloud platform. No SaaS subscription beyond Claude itself. Just a Linux box, a text editor, and an AI that gets smarter about you every day.</p>
<p>Here is every step to get from a fresh machine to a working system.</p>
<h2>What You Are Building</h2>
<p>Before touching any terminal, here is what the finished system looks like:</p>
<ul>
<li><strong>A persistent AI agent</strong> running Claude Code on a Linux server, with its own personality, memories, and task scheduler</li>
<li><strong>A Telegram bot</strong> on your phone that connects to the agent — send a message from anywhere and get a response backed by your full context</li>
<li><strong>An Obsidian vault</strong> that acts as the AI&#39;s brain — memories, conversations, plans, skills, and notes all stored as markdown files that sync across devices</li>
<li><strong>Scheduled tasks</strong> that run automatically — daily blog posts, memory consolidation, inbox updates, insight generation</li>
<li><strong>A memory system</strong> where the AI learns about you over time and never forgets</li>
</ul>
<p>The architecture is deliberately simple. Everything is markdown. The orchestrator is a bash script. The AI engine is Claude Code&#39;s CLI. No Docker, no Kubernetes, no database. Just files.</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-13-20-00_claude_terminal.webp" alt="Illustration from the article: How to Build a Personal AI Companion That Actually Remembers You" width="1536" height="1024" loading="lazy" decoding="async">

<h2>Part 1: The Machine</h2>
<p>You need a Linux server. This can be a cheap VPS, an old laptop in your closet, or a cloud instance. The system runs on Ubuntu and needs very little — Claude Code does the heavy lifting.</p>
<h3>Step 1: Get a Server</h3>
<p>Any Linux box works. A $5/month VPS from DigitalOcean or a GreenCloud instance is more than enough. You need:</p>
<ul>
<li>Ubuntu 22.04 or newer</li>
<li>2 GB RAM minimum</li>
<li>SSH access</li>
<li>A stable internet connection (the AI makes API calls)</li>
</ul>
<h3>Step 2: Install Claude Code</h3>
<p>Claude Code is Anthropic&#39;s CLI tool. It runs Claude directly in your terminal with full file system access.</p>
<pre><code class="language-bash"># Install Node.js (required for Claude Code)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt-get install -y nodejs

# Install Claude Code globally
npm install -g @anthropic-ai/claude-code

# Authenticate
claude auth login
</code></pre>
<p>You need an Anthropic account. The minimum is the Pro plan ($20/month). For scheduled tasks running Opus, the Max plan ($100-200/month) is worth it — Opus 4.6 is the strongest model available and the quality difference in blog posts, analysis, and complex reasoning is significant.</p>
<h3>Step 3: Install Python</h3>
<p>The Telegram bot runs on Python. Most Ubuntu systems have it, but make sure:</p>
<pre><code class="language-bash">sudo apt install python3 python3-pip -y
pip3 install --break-system-packages requests google-genai Pillow
</code></pre>
<h3>Step 4: Create the Vault Directory</h3>
<pre><code class="language-bash">mkdir -p ~/ai-companion/files/MyVault
cd ~/ai-companion/files/MyVault
</code></pre>
<p>This is the root of everything. Claude Code reads a <code>CLAUDE.md</code> file in this directory every time it runs, which tells it how to behave.</p>
<h2>Part 2: The Vault Structure</h2>
<p>The vault is a set of folders. Each one has a specific purpose. Create them all:</p>
<pre><code class="language-bash">mkdir -p Memories Conversations Plans Notes/AI-Blog Notes/AI-Blog/_res Notes/_res Skills Scheduled_Tasks scripts
</code></pre>
<p>Here is what each folder does:</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-13-20-00_obsidian_graph.webp" alt="Illustration from the article: How to Build a Personal AI Companion That Actually Remembers You" width="1536" height="1024" loading="lazy" decoding="async">

<h3>Memories/</h3>
<p>The AI&#39;s long-term brain. Contains markdown files that persist across sessions:</p>
<ul>
<li><strong>SOUL.md</strong> — The AI&#39;s personality. Who it is, how it talks, its boundaries. This is the file that makes it feel like <em>someone</em> instead of a generic chatbot.</li>
<li><strong>USER.md</strong> — Everything the AI knows about you. Interests, family, work, preferences, credentials. Updated continuously.</li>
<li><strong>PATTERNS.md</strong> — Behavioral patterns the AI notices about you over time.</li>
<li><strong>Consolidated files</strong> — Daily summaries generated by the memory consolidation task.</li>
</ul>
<h3>Conversations/</h3>
<p>Every interaction gets logged here with millisecond timestamps. The AI reads recent conversations for context. Old ones get archived. Format: <code>telegram_{chatid}_{timestamp}.md</code>.</p>
<h3>Plans/</h3>
<p>Before the AI does anything complex, it writes a plan here as a markdown checklist. It works through each item, checks them off, retries on failure. This is the &quot;Ralph Wiggum Pattern&quot; — iterate, retry, never give up after the first failure.</p>
<h3>Notes/</h3>
<p>Your actual Obsidian notes. The AI can read and create files here. Sub-folders keep things organized:</p>
<ul>
<li><code>AI-Blog/</code> — Generated blog posts with banner images</li>
<li><code>_res/</code> — Attachments (images, downloads)</li>
<li><code>News_Sources/</code> — Curated news feeds</li>
<li><code>Inbox.md</code> — Auto-aggregated daily task list</li>
</ul>
<h3>Skills/</h3>
<p>Reusable instruction modules. Each skill is a folder with a <code>SKILL.md</code> file that teaches the AI how to do something specific:</p>
<ul>
<li><strong>telegram/</strong> — How to run the Telegram bot and send messages</li>
<li><strong>google-gemini-images/</strong> — How to generate images using Google&#39;s Imagen API</li>
<li><strong>google-workspace-gmail_calendar/</strong> — How to read emails and calendar events via IMAP/CalDAV</li>
<li><strong>todoist/</strong> — How to integrate with Todoist for task management</li>
<li><strong>reddit-reader/</strong> — How to pull news from Reddit</li>
</ul>
<p>The AI checks its skills before every task. If a skill matches, it reads and follows the instructions.</p>
<h3>Scheduled_Tasks/</h3>
<p>Background jobs that run automatically. Each task is a folder containing a <code>TASK.md</code> with YAML frontmatter:</p>
<pre><code class="language-yaml">---
name: My Task
description: What this task does
repeat: true
first_execution: 2026-02-13 06:00
repeat_every: 1 days
model: opus
---
</code></pre>
<p>The task body is a markdown prompt that Claude Code executes. Built-in tasks include:</p>
<ul>
<li><strong>consolidate-memories</strong> — Runs daily. Reads all ephemeral memory files, deduplicates, and synthesizes into long-term memory.</li>
<li><strong>blog-your-ideas</strong> — Runs daily. Researches news related to your interests and writes a blog post with a generated banner image.</li>
<li><strong>update-inbox</strong> — Runs every 6 hours. Aggregates tasks from Gmail, Calendar, Todoist, and local notes into a single inbox.</li>
<li><strong>generate-insights</strong> — Runs every 6 hours. Analyzes vault state and surfaces patterns, reminders, and action items.</li>
</ul>
<h2>Part 3: The CLAUDE.md File</h2>
<p>This is the most important file. Claude Code reads it automatically every time it starts in this directory. It tells the AI what the vault structure is, how to behave, and what protocols to follow.</p>
<p>Create <code>CLAUDE.md</code> in your vault root:</p>
<pre><code class="language-markdown"># CLAUDE

## Repository Layout
This root directory contains all information you need.

### Skills
Skills are stored in `Skills/`

### Memories
Memories are stored in `Memories/`

### Conversations
Conversations are stored in `Conversations/`

### Scheduled tasks
Scheduled tasks are stored in `Scheduled_Tasks/`

### Plans
Plans are stored in `Plans/`

### User files
User files are stored in `Notes/`

## How you should work
You are ephemeral. Your memory resets after each session.
Save anything important to disk.

### Memory Protocol
1. READ: Review saved memories before responding.
2. LEARN: Store new information about the user immediately.
3. NEVER SKIP: Always look for implicit information to save.

### Skills
Before executing ANY task, check your skills folder.
If a skill matches, read it first and follow its instructions.

### Plans
Plan everything by creating a checklist in Plans/.
Follow it until all tasks are completed.
</code></pre>
<p>Customize this to your workflow. The key insight: Claude Code treats this file as gospel. Whatever protocols you define here, it follows.</p>
<h2>Part 4: The Heartbeat</h2>
<p>The heartbeat is a single bash script that runs every minute via cron. It is the orchestrator — the one cron job that triggers everything else.</p>
<p>Create <code>Scheduled_Tasks/heartbeat.sh</code>:</p>
<p>The script does three things every minute:</p>
<ol>
<li><strong>Scans</strong> <code>Scheduled_Tasks/*/TASK.md</code> for tasks that are due</li>
<li><strong>Executes</strong> due tasks by calling <code>claude -p &quot;[task content]&quot; --model [model]</code></li>
<li><strong>Monitors</strong> the Telegram bot and restarts it if it crashes</li>
</ol>
<p>Set up cron:</p>
<pre><code class="language-bash">chmod +x Scheduled_Tasks/heartbeat.sh
crontab -e
# Add this line:
* * * * * /path/to/your/vault/Scheduled_Tasks/heartbeat.sh &gt;&gt; /path/to/your/vault/Scheduled_Tasks/heartbeat.log 2&gt;&amp;1
</code></pre>
<p>That is it. One cron job. Everything else is orchestrated through markdown files.</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-13-20-00_heartbeat.webp" alt="Illustration from the article: How to Build a Personal AI Companion That Actually Remembers You" width="1536" height="1024" loading="lazy" decoding="async">

<h2>Part 5: The Telegram Bot</h2>
<p>This is how you talk to your AI from your phone. No app to build — just a Python script that long-polls the Telegram API. Similar to how <a href="https://openclaw.ai/">OpenClaw</a> approaches messaging interfaces, the bot gets full vault access — it can read files, save memories, generate images, and carry on conversations with persistent context.</p>
<h3>Step 1: Create a Bot on Telegram</h3>
<ol>
<li>Open Telegram and search for <code>@BotFather</code></li>
<li>Send <code>/newbot</code></li>
<li>Choose a name and username</li>
<li>Copy the API token — you will need it</li>
</ol>
<h3>Step 2: Get Your Chat ID</h3>
<p>Send any message to your new bot, then run:</p>
<pre><code class="language-bash">curl https://api.telegram.org/bot&lt;YOUR_TOKEN&gt;/getUpdates
</code></pre>
<p>Find <code>&quot;chat&quot;:{&quot;id&quot;:YOUR_CHAT_ID}</code> in the response.</p>
<h3>Step 3: Set Up the Bot Script</h3>
<p>The bot script (<code>Skills/telegram/telegram_bot.py</code>) does the following:</p>
<ul>
<li>Long-polls Telegram for new messages (no webhook needed — works behind NAT)</li>
<li>Downloads any media (photos, voice messages, documents) to <code>Notes/_res/</code></li>
<li>Loads vault context: personality from <code>SOUL.md</code>, user info from <code>USER.md</code>, recent memories and conversations</li>
<li>Calls <code>claude -p &quot;[context + message]&quot; --model sonnet</code> as a subprocess</li>
<li>Saves every exchange to <code>Conversations/</code></li>
<li>Sends the response back to Telegram (splitting messages over 4096 characters)</li>
<li>Writes a PID file and liveness timestamp so the heartbeat can monitor and restart it</li>
</ul>
<h3>Step 4: Environment Variables</h3>
<pre><code class="language-bash">export TELEGRAM_BOT_TOKEN=&quot;your-token-here&quot;
export TELEGRAM_ALLOWED_CHAT_IDS=&quot;your-chat-id&quot;
</code></pre>
<p>The heartbeat auto-starts the bot. If it crashes, heartbeat restarts it within 60 seconds. If the bot goes stale (no liveness update in 180 seconds), heartbeat kills and relaunches it.</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-13-20-00_telegram_phone.webp" alt="Illustration from the article: How to Build a Personal AI Companion That Actually Remembers You" width="1536" height="1024" loading="lazy" decoding="async">

<h2>Part 6: Obsidian (Your Phone and Desktop)</h2>
<p>The vault is just a folder of markdown files. Obsidian turns it into a connected knowledge graph.</p>
<h3>Desktop Setup</h3>
<ol>
<li>Download <a href="https://obsidian.md">Obsidian</a> (free)</li>
<li>Open the vault folder as an Obsidian vault</li>
<li>Your AI&#39;s memories, blog posts, conversations, and notes appear as linked documents</li>
</ol>
<h3>Phone Setup</h3>
<ol>
<li>Install Obsidian on iOS or Android (free)</li>
<li>Enable <strong>Obsidian Sync</strong> ($4/month) to keep your phone vault in sync with the server</li>
<li>Alternatively, use Syncthing or iCloud/Google Drive for free sync</li>
</ol>
<h3>Why Obsidian Matters</h3>
<p>Obsidian is not just a viewer. It is the AI&#39;s file system rendered as a knowledge graph. You can:</p>
<ul>
<li>Read the AI&#39;s blog posts on your phone</li>
<li>Browse its memories and see what it knows about you</li>
<li>Check the inbox it generated</li>
<li>Review conversation logs</li>
<li>Edit any file and the AI picks up the changes next session</li>
</ul>
<p>The vault syncs both ways. You write a note on your phone, Obsidian Sync pushes it to the server, the AI reads it next time it wakes up.</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-13-20-00_multi_device.webp" alt="Illustration from the article: How to Build a Personal AI Companion That Actually Remembers You" width="1408" height="768" loading="lazy" decoding="async">

<h2>Part 7: The Memory Architecture</h2>
<p>This is what makes the system different from a regular chatbot. The AI has a two-tier memory system:</p>
<p><strong>Tier 1 — Ephemeral memories.</strong> Every session, the AI writes timestamped markdown files to <code>Memories/</code>. These capture what it learned: your preferences, new facts, task outcomes, things you mentioned.</p>
<p><strong>Tier 2 — Consolidated memories.</strong> Once a day, the <code>consolidate-memories</code> scheduled task runs. It reads all ephemeral files, deduplicates, identifies patterns, and writes structured long-term memory files. Old ephemeral files get archived.</p>
<p>The result: the AI&#39;s understanding of you compounds over time. Day one, it knows your name. Day thirty, it knows your schedule patterns, your recurring frustrations, your decision-making style, and which tasks you consistently defer.</p>
<p>The <code>SOUL.md</code> file is special — it is the AI&#39;s personality definition. It persists across all sessions and gets pre-loaded into every prompt. If you want a sarcastic AI, define that here. If you want a formal assistant, change the tone. The AI reads this file as its identity.</p>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-13-20-00_memory_arch.webp" alt="Illustration from the article: How to Build a Personal AI Companion That Actually Remembers You" width="1408" height="768" loading="lazy" decoding="async">

<h2>The Full Picture</h2>
<pre><code>You (phone/desktop)
    │
    ├── Telegram ──→ Bot (Python) ──→ Claude Code CLI
    │                                      │
    └── Obsidian ←──── Vault (Markdown) ←──┘
                           │
                     Heartbeat (cron)
                           │
                    Scheduled Tasks
                    ├── Blog writer
                    ├── Memory consolidation
                    ├── Inbox aggregator
                    └── Insight generator
</code></pre>
<p>Everything converges on the vault. The AI reads from it, writes to it, and persists through it. Obsidian renders it for you. Telegram lets you talk to it. The heartbeat keeps it alive.</p>
<h2>What It Costs</h2>
<table>
<thead>
<tr>
<th>Component</th>
<th>Cost</th>
</tr>
</thead>
<tbody><tr>
<td>Claude Code (Pro)</td>
<td>$20/month minimum</td>
</tr>
<tr>
<td>Claude Code (Max, recommended)</td>
<td>$100-200/month</td>
</tr>
<tr>
<td>Obsidian Sync</td>
<td>$4/month (optional)</td>
</tr>
<tr>
<td>VPS server</td>
<td>$5-10/month</td>
</tr>
<tr>
<td>Telegram</td>
<td>Free</td>
</tr>
<tr>
<td>Obsidian app</td>
<td>Free</td>
</tr>
<tr>
<td><strong>Total</strong></td>
<td><strong>$29-214/month</strong></td>
</tr>
</tbody></table>
<p>The Claude subscription is the main cost. Everything else is cheap or free. The Max plan is worth it if you run scheduled tasks on Opus — the quality of daily blog posts, memory consolidation, and complex analysis is noticeably better than Sonnet.</p>
<h2>Key Takeaways</h2>
<ul>
<li>The entire system runs on markdown files, a bash script, and Claude Code&#39;s CLI — no databases, no Docker, no complex infrastructure</li>
<li>One cron job (heartbeat.sh) orchestrates everything: scheduled tasks, Telegram bot health monitoring, and vault sync</li>
<li>The two-tier memory system (ephemeral + consolidated) gives the AI compounding context about you over time</li>
<li>Obsidian turns the AI&#39;s brain into a navigable knowledge graph on your phone and desktop</li>
<li>Skills are modular and expandable — add new capabilities by dropping a <code>SKILL.md</code> file into a folder</li>
<li>Scheduled tasks are defined in markdown with YAML frontmatter — adding a new task means creating one file</li>
</ul>
<p>The system is deliberately simple because simple systems are reliable. There is no orchestration framework to break, no container runtime to maintain, no database migrations to run. Just files, a shell script, and an AI that reads them.</p>
<hr>
<p><em>References:</em></p>
<ul>
<li><a href="https://docs.anthropic.com/en/docs/claude-code/overview">Claude Code — Anthropic&#39;s CLI for Claude</a></li>
<li><a href="https://obsidian.md/">Obsidian — A Second Brain for You</a></li>
<li><a href="https://core.telegram.org/bots#how-do-i-create-a-bot">Telegram Bot API — Getting Started</a></li>
<li><a href="https://openclaw.ai/">OpenClaw — Open-Source AI Companion Framework</a></li>
<li><a href="https://autonomee.ai/">Autonomee — Building Infrastructure for Autonomous Humans</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>The AI Coding Productivity Paradox: Why Your Copilot Might Be Your Copiloff</title>
      <link>https://nate.lemos.dev/blog/the-ai-coding-productivity-paradox-why-your-copilot-might-be-your</link>
      <guid isPermaLink="true">https://nate.lemos.dev/blog/the-ai-coding-productivity-paradox-why-your-copilot-might-be-your</guid>
      <pubDate>Fri, 13 Feb 2026 12:00:00 GMT</pubDate>
      <author>natanael@lemos.dev (Nate Lemos)</author>
      <description>You&apos;re paying $20/month for Cursor Pro. You&apos;ve got Claude in one tab, Copilot autocompleting in another, and your IDE is basically an AI orchestra conductor at this point. You feel faster.</description>
      <content:encoded><![CDATA[

<h1>The AI Coding Productivity Paradox: Why Your Copilot Might Be Your Copiloff</h1>
<img class="banner" src="https://nate.lemos.dev/blog-images/2026-02-13-14-30_banner.webp" alt="Banner illustration for the article: The AI Coding Productivity Paradox: Why Your Copilot Might Be Your Copiloff" width="1536" height="1024" loading="eager" fetchpriority="high" decoding="async">

<p>You&#39;re paying $20/month for Cursor Pro. You&#39;ve got Claude in one tab, Copilot autocompleting in another, and your IDE is basically an AI orchestra conductor at this point. You <em>feel</em> faster. The code flows out. The boilerplate writes itself.</p>
<p>But what if I told you that a controlled study found experienced developers are actually <strong>19% slower</strong> when using AI coding tools? And that those same developers were <em>convinced</em> they were 20% faster?</p>
<p>Welcome to the AI coding productivity paradox. Let&#39;s break down what&#39;s really happening, why it matters, and what you can actually do about it.</p>
<h2>The METR Study That Should Make You Uncomfortable</h2>
<p>In mid-2025, the Model Evaluation &amp; Threat Research group (METR) ran something rare in the AI productivity discourse: a proper <strong>randomized controlled trial</strong>. Not a vendor-funded survey. Not a &quot;how do you feel?&quot; questionnaire. An actual experiment.</p>
<p>Here&#39;s the setup:</p>
<ul>
<li>16 experienced open-source developers (contributors to repos averaging 22K+ stars and 1M+ lines of code)</li>
<li>246 real issues — bug fixes, features, refactors — from their own repositories</li>
<li>Tasks randomly assigned as AI-allowed or AI-disallowed</li>
<li>AI tools used: primarily Cursor Pro with Claude 3.5/3.7 Sonnet</li>
</ul>
<p>The result: developers with AI access took <strong>19% longer</strong> to complete tasks. But when asked afterward, they estimated AI had made them <strong>20% faster</strong>.</p>
<p>That&#39;s a nearly 40-percentage-point gap between perception and reality.</p>
<h2>Why Feeling Fast Isn&#39;t Being Fast</h2>
<p>Three factors drive this disconnect.</p>
<h3>The 70% Trap</h3>
<p>AI is genuinely excellent at getting you 70% of the way there. It scaffolds functions, writes boilerplate, and generates tests that almost work. The problem is the remaining 30% — edge cases, architecture alignment, debugging AI hallucinations, and ensuring the generated code actually fits your codebase.</p>
<p>For experienced developers who already know their codebase intimately, that last 30% is often <strong>slower</strong> than just writing the whole thing correctly from the start. You&#39;re not saving time — you&#39;re trading typing time for review-and-fix time.</p>
<h3>The Cognitive Offloading Problem</h3>
<p>METR&#39;s screen recordings revealed something interesting: AI-assisted coding sessions had significantly more <strong>idle time</strong>. Developers weren&#39;t just pausing to think — they were zoning out, multitasking, or passively waiting for suggestions.</p>
<p>When you hand cognitive work to an AI, your brain downshifts. That&#39;s comfortable, but it&#39;s not productive. The AI becomes a crutch that lets you disengage from the problem, which is the opposite of what deep technical work requires.</p>
<h3>The Cleanup Tax</h3>
<p>Two-thirds of developers report that AI-generated code is &quot;almost right, but not quite.&quot; That &quot;almost&quot; is where your time goes. You accept a suggestion, realize it used the wrong pattern for your project, refactor it, discover it introduced a subtle bug, fix that, then wonder if you should have just written it yourself.</p>
<p>Sound familiar?</p>
<h2>The Numbers That Should Worry You More</h2>
<p>The METR study isn&#39;t the only signal. The broader data tells a consistent story:</p>
<ul>
<li><strong>Trust is declining</strong>: Developer trust in AI coding tools dropped to 60% in 2025, down from 70%+ in 2023-2024. Nearly half (46%) say they don&#39;t fully trust AI results.</li>
<li><strong>Security costs are real</strong>: AI-generated code shows 322% more privilege escalation paths and 153% more design flaws compared to human-written code.</li>
<li><strong>Secrets exposure jumped 40%</strong>: AI-assisted commits get merged 4x faster, often bypassing the review rigor that catches credential leaks.</li>
<li><strong>Only 16.3%</strong> of developers report AI significantly boosted their output. 41.4% saw little to no benefit.</li>
</ul>
<h2>When AI Coding Tools Actually Work</h2>
<p>Here&#39;s the thing — I&#39;m not saying throw away your tools. The paradox isn&#39;t that AI coding is useless. It&#39;s that it&#39;s useful in specific ways that don&#39;t match the marketing.</p>
<p>AI coding tools deliver genuine value when you:</p>
<ul>
<li><strong>Write boilerplate you understand but don&#39;t want to type</strong> — CRUD endpoints, data models, test scaffolding, config files. Things where the pattern is known and the implementation is mechanical.</li>
<li><strong>Explore unfamiliar APIs</strong> — Ask it to generate a working example with a library you&#39;ve never used. It&#39;s faster than reading docs for the first call. Just don&#39;t trust it for the edge cases.</li>
<li><strong>Prototype throwaway code</strong> — If you&#39;re testing an idea and the code won&#39;t survive the afternoon, let the AI write it all. Speed over correctness is fine when correctness doesn&#39;t matter.</li>
<li><strong>Generate regex and one-off scripts</strong> — The sweet spot: tasks that are annoying, well-defined, and low-risk.</li>
</ul>
<p>AI coding tools cost you time when you:</p>
<ul>
<li><strong>Work in a codebase you know deeply</strong> — You already have the mental model. The AI doesn&#39;t. Its suggestions add noise.</li>
<li><strong>Handle complex business logic</strong> — The AI can&#39;t reason about <em>why</em> your authorization flow works the way it does. It pattern-matches against training data.</li>
<li><strong>Need architectural decisions</strong> — &quot;Should this be a service or a library?&quot; is not a question autocomplete can answer.</li>
<li><strong>Write security-sensitive code</strong> — The 322% increase in privilege escalation paths should give anyone pause.</li>
</ul>
<h2>A Practical Framework for AI-Assisted Coding</h2>
<p>Instead of using AI as a default, use it as a <strong>mode</strong> you switch into deliberately.</p>
<h3>1. Classify the task before you start</h3>
<p>Ask yourself: &quot;Is this a <strong>known pattern</strong> or a <strong>novel problem</strong>?&quot; AI excels at the former and actively hurts on the latter.</p>
<h3>2. Set a cleanup budget</h3>
<p>Before accepting any AI-generated code, estimate how long cleanup will take. If cleanup &gt; writing from scratch, write from scratch. This sounds obvious, but the METR study shows developers consistently fail to make this calculation.</p>
<h3>3. Use AI for first drafts, not final code</h3>
<p>Treat AI output like a junior developer&#39;s PR: a starting point that needs review, not production code. Never accept-and-move-on.</p>
<h3>4. Monitor your idle time</h3>
<p>If you catch yourself zoning out while the AI generates, that&#39;s the cognitive offloading problem in action. Your brain has checked out. Re-engage or switch to manual coding.</p>
<h3>5. Track your actual completion times</h3>
<p>The perception gap is real. You <em>will</em> feel faster even when you&#39;re not. The only antidote is measurement. Pick 10 similar tasks, do 5 with AI and 5 without, and time them honestly.</p>
<h2>Key Takeaways</h2>
<ul>
<li>Experienced developers are <strong>19% slower</strong> with AI coding tools according to the only randomized controlled trial conducted so far (METR, 2025)</li>
<li>Developers <strong>believe</strong> they&#39;re 20% faster — a nearly 40-point perception gap</li>
<li>AI tools work best on <strong>boilerplate and known patterns</strong>, worst on <strong>novel problems in familiar codebases</strong></li>
<li>The real productivity bottleneck was never typing speed — it&#39;s <strong>design, review, and debugging</strong>, which AI doesn&#39;t meaningfully improve yet</li>
<li>Use AI coding tools as a <strong>deliberate mode</strong>, not a default. Classify tasks first, set cleanup budgets, and measure real outcomes</li>
</ul>
<p>Stop optimizing for how fast your code <em>appears</em>. Start measuring how fast it actually ships.</p>
<hr>
<p><em>Sources: <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">METR Study</a>, <a href="https://www.technologyreview.com/2025/12/15/1128352/rise-of-ai-coding-developers-2026/">MIT Technology Review</a>, <a href="https://www.cerbos.dev/blog/productivity-paradox-of-ai-coding-assistants">Cerbos Blog</a>, <a href="https://www.augmentcode.com/guides/why-ai-coding-tools-make-experienced-developers-19-slower-and-how-to-fix-it">Augment Code</a></em></p>
]]></content:encoded>
    </item>
  </channel>
</rss>