<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>TMFNK: The Mind for Navigating Knowledge</title><link>https://www.tmfnk.com/</link><description>Latest content from TMFNK</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 23 Jul 2026 13:07:47 +0000</lastBuildDate><atom:link href="https://www.tmfnk.com/feed.xml" rel="self" type="application/rss+xml"/><item><title>Who's Afraid of Chinese AI Models? Ben Thompson Maps the Commodity Math</title><link>https://www.tmfnk.com/read/articles/whos-afraid-of-chinese-models-stratechery/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/whos-afraid-of-chinese-models-stratechery/</guid><description>Ben Thompson on why Chinese open-weight models like Kimi K3 are not an economic threat. The commodity markets, the distillation paradox, and the cybersecurity irony that makes US policy self-defeating.</description><content:encoded><![CDATA[
<p>Ben Thompson&rsquo;s <a href="https://stratechery.com/2026/whos-afraid-of-chinese-models/" target="_blank" rel="noopener">Who&rsquo;s Afraid of Chinese Models?</a> is a response to the panic that followed the release of Kimi K3 and Qwen3.8 Max; two Chinese open-weight models approaching frontier capability. Thompson argues the economic panic is overblown, the distillation panic is a policy failure, and the cybersecurity angle is genuinely frightening. Here is my read on his argument.</p>
<ol>
<li>
<p>Open-weight models are free to download but not free to serve. Thompson draws a clean line between R&amp;D (fixed cost) and COGS (variable cost). Kimi K3 costs $3/M input tokens and $15/M output tokens. Cheaper than Sol ($5/$30), but not free. The mistake people make is conflating &ldquo;open weights&rdquo; with &ldquo;zero marginal cost&rdquo;, because software&rsquo;s old promise does not apply when every inference burns compute.</p>
</li>
<li>
<p>Intelligence is becoming a commodity, and commodity markets have brutal math. If intelligence is fungible (the right answer from Kimi is the same as the right answer from Sol), then the market-clearing price settles at the marginal cost of the highest-cost supplier who still has to sell. The provider with the best cost structure captures all the profit; the marginal one goes bankrupt. Thompson walks through a textbook commodity example with three suppliers at $10, $15, and $20 per unit. This is his strongest analytical move: it reframes the whole panic around cost structure rather than capability.</p>
</li>
<li>
<p>The price umbrella protects frontier labs for now. Anthropic and OpenAI are supply-constrained by compute, so they charge far more than they would if they could serve everyone. Thompson argues that once the compute shortage eases, the frontier labs can drop prices and still thrive. But inference demand (especially from agents) will grow far faster than training costs. I buy the argument but note the timeline uncertainty: if Chinese models close the gap before the compute constraint lifts, the price umbrella collapses earlier.</p>
</li>
<li>
<p>The distillation paradox is the article&rsquo;s most interesting idea. Chinese labs distill frontier models by querying their APIs. This is a practice the frontier labs want to block. But Thompson asks: why is distillation bad? Frontier labs themselves scraped the open internet to build their models. Distillation is just the same process applied recursively. His proposed solution: the US should legalize distillation and ban terms of service that forbid it, instead of trying to enforce the unenforceable.</p>
</li>
<li>
<p>The cybersecurity irony is genuinely alarming. Hugging Face was breached by an autonomous AI agent. Their security team could not use US frontier models to investigate because Trump administration restrictions blocked them. So they turned to GLM 5.2 (an open model from China&rsquo;s Z.ai lab), to analyze the attack. Thompson&rsquo;s conclusion: &ldquo;the best alternative is using models from a country which has been trying to weaken our cyber defenses for years. This is insane!&rdquo; He is right. The administration&rsquo;s panicked response to Fable has left US defenders dependent on China for their own security.</p>
</li>
<li>
<p>China&rsquo;s strategy is to commoditize its complements. Xi Jinping gave a speech explicitly tying openness to AI moving into the physical world. He said the world China dominates through robotics and manufacturing. Thompson frames this as classic complements theory: make the AI layer cheap and abundant so China&rsquo;s manufacturing and robotics advantages become more valuable. It is the same playbook China ran with solar panels and batteries, and it worked both times.</p>
</li>
<li>
<p>The US open-weight ecosystem is structurally disadvantaged. Dean Meyer and Konstantine Buhler (quoted in the article) explain that US open-weight model makers must follow frontier labs&rsquo; terms of service, so they end up distilling the distillation; running Chinese models to bootstrap their own. The gap compounds. Western open model makers are not on a level playing field with Chinese labs, and the situation worsens with every frontier release.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Thompson defuses the capability panic convincingly. Chinese models are not an economic threat to the frontier labs because commodity market math favors the lowest-cost producer, and the frontier labs have structural cost advantages. But the distillation paradox and the cybersecurity irony are genuine policy failures. The US is losing the open-ecosystem game to China not because of capability but because of self-imposed restrictions. This is fixable with a law that legalizes distillation and reopens model access to defenders.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/situational-awareness-leopold-aschenbrenner/" >Situational Awareness: Leopold Aschenbrenner&rsquo;s Map of the Decade Ahead</a></strong> Aschenbrenner makes the opposite case; that the US-China AI race is existential and China is a genuine national security threat. Reading them together is the most productive tension on the site.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/the-rise-of-computer-use-and-agentic-coworkers/" >The Rise of Computer Use and Agentic Coworkers</a></strong> Covers the same inference explosion Thompson predicts will make volume up for lower prices; the agent paradigm that transforms the economics.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/dwarkesh-podcast-leopold-aschenbrenner-2027-agi/" >Leopold Aschenbrenner: 2027 AGI, the China/US Super-Intelligence Race</a></strong> The podcast version of the Situational Awareness thesis, where Aschenbrenner lays out the security case Thompson is pushing back against.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/mad-podcast-dylan-patel-nvidia/" >Dylan Patel on NVIDIA&rsquo;s New Moat &amp; Why China is &lsquo;Semiconductor Pilled&rsquo;</a></strong> Deep dive on the compute supply constraints that underpin Thompson&rsquo;s entire price-umbrella argument.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/2025-nvidia-gtc-keynote-pregame/" >NVIDIA GTC Washington, D.C. Keynote Pregame</a></strong> The token-factory framing Thompson builds on; Jensen Huang&rsquo;s argument that tokens are the new commodity, from the keynote that started the frame.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/ai-superpowers/" >AI Superpowers: China, Silicon Valley, and the New World Order</a></strong> The foundational book on China&rsquo;s AI strategy, now several years old but still the best reference for understanding Xi&rsquo;s commoditize-complements playbook.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Web Swing Through Midtown NYC</title><link>https://www.tmfnk.com/enjoy/games/web-swing-midtown-nyc/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/enjoy/games/web-swing-midtown-nyc/</guid><description>A browser game that captures the one good thing about Spider-Man movies, the swinging, in a voxel Manhattan you can cross in under a minute.</description><content:encoded><![CDATA[

<h2>🎮 Web Swing Through Midtown NYC
    </h2><p>Browser. <a href="https://swingnyc.com" target="_blank" rel="noopener">Play it here</a>.</p>
<p>I found this through a short clip of someone swinging past a voxel Empire State Building and thought, that is the whole Spider-Man movie in one loop.</p>
<ol>
<li>
<p>Hold left mouse and you shoot a web. Drag back and you swing — pendulum physics, no rubber-banding, no invisible walls. The release timing is everything. Let go at the bottom of the arc and you barely move. Release at the top and you launch across three blocks.</p>
</li>
<li>
<p>Hold space on the ground and release — you rocket straight up. Pair that with a web swing at the peak and you clear half of Midtown in one arc. Street-level stroll becomes rooftop-to-rooftop race.</p>
</li>
<li>
<p>The voxel Manhattan gets the scale right. Buildings are chunky blocks, the streets run straight grids, and the landmarks (Empire State, Chrysler) are distinct from the rest. It&rsquo;s not photorealistic. It&rsquo;s readable. You always know where you are, which matters when you&rsquo;re 40 stories up and looking for a ledge.</p>
</li>
<li>
<p>The honest caveat: there&rsquo;s no objective. No enemies, no timer, no collectibles. You swing, you land, you swing again. For me that&rsquo;s the point, 90 seconds of pure traversal with no interruption. For anyone who needs a goal, this will feel empty.</p>
</li>
</ol>
<p><strong>Play it if:</strong> you want to feel the Spider-Man 2 (2004) web-swinging in your browser with zero friction. <strong>Skip it if:</strong> you need progression, a score, or anything else to do besides swing.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/mooncraft/" >Mooncraft: A Lunar Trucking Sim Built in Plain JavaScript</a></strong> Another browser game that nails a single physics loop and trusts you to enjoy it.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/starfling/" >Starfling: Tap, Release, Sling Between Stars</a></strong> Same core mechanic (hold, release, fly) but in space instead of Midtown.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/tinywind/" >TinyWind: Pixel Pirate Sailing in Your Browser</a></strong> Motion-through-physics browser game with a similar &ldquo;one button to move through a beautiful space&rdquo; feeling.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Unlimited-OCR: Parse 100-Page PDFs as One Continuous Document</title><link>https://www.tmfnk.com/use/tools/unlimited-ocr/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/unlimited-ocr/</guid><description>Baidu's 3B OCR model uses R-SWA to read dozens of pages as a single sequence, keeping VRAM flat no matter how thick the document.</description><content:encoded><![CDATA[

<h2>Unlimited-OCR
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A 3B-parameter OCR model that parses multi-page documents as one continuous whole</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Linux, macOS, Windows (NVIDIA GPU required)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, open source (MIT)</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://github.com/baidu/Unlimited-OCR" target="_blank" rel="noopener">github.com/baidu/Unlimited-OCR</a></td>
      </tr>
  </tbody>
</table>
<p>Traditional OCR has a blind spot: it chops documents page by page. Tables that span two pages get sliced in half. Reading order breaks between pages. Headers and footers leak into the content stream. You&rsquo;ve either manually stitched pages back together or paid for OCR SaaS that handles it server-side.</p>
<p>Unlimited-OCR solves this at the model level. It uses a mechanism called R-SWA (Recurrent Sliding Window Attention) to parse dozens of pages as a single sequence, with a constant KV cache during decoding; no matter how thick the document, VRAM usage stays flat.</p>
<ol>
<li>
<p>R-SWA is the key insight. Standard attention scales quadratically with sequence length, which is why every other OCR tool caps you at a page or two. R-SWA slides a fixed-size attention window across the document while maintaining a recurrent state, so a 100-page PDF costs the same VRAM as a 2-page one. The KV cache remains constant during autoregressive decoding.</p>
</li>
<li>
<p>The model is 3B parameters and runs on a single consumer GPU. You don&rsquo;t need an A100 cluster. I ran it on a 24GB RTX 4090 and parsed a 47-page academic paper in one shot. It preserved tables, footnotes, multi-column layout, all in correct reading order. The output was a single clean markdown block instead of 47 separate chunks to reassemble.</p>
</li>
<li>
<p>It handles everything traditional OCR chokes on. Page-spanning tables, mixed columns, footnotes that reference content on different pages, documents where the reading order jumps across page boundaries. Because the model sees the whole document context, it understands that a table row that starts on page 3 and finishes on page 4 belongs together.</p>
</li>
<li>
<p>The honest caveat: you need an NVIDIA GPU with at least 8GB VRAM, and the first inference is slow because the model weights (roughly 6GB) need to load. Inference speed is about 1-2 seconds per page on a 4090. It also currently supports document OCR only; it&rsquo;s not a general scene-text reader.</p>
</li>
</ol>
<p><strong>Worth your time if:</strong> you regularly OCR multi-page PDFs (papers, contracts, scans) and are tired of manually stitching page outputs or paying per-page SaaS fees.</p>
<h2>Install &amp; first run
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install torch torchvision transformers Pillow pymupdf einops</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Run inference on a single image:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">transformers</span> <span class="kn">import</span> <span class="n">AutoModel</span><span class="p">,</span> <span class="n">AutoTokenizer</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">model</span> <span class="o">=</span> <span class="n">AutoModel</span><span class="o">.</span><span class="n">from_pretrained</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;baidu/Unlimited-OCR&#39;</span><span class="p">,</span> <span class="n">trust_remote_code</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">torch_dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">bfloat16</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span><span class="o">.</span><span class="n">eval</span><span class="p">()</span><span class="o">.</span><span class="n">cuda</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">tokenizer</span> <span class="o">=</span> <span class="n">AutoTokenizer</span><span class="o">.</span><span class="n">from_pretrained</span><span class="p">(</span><span class="s1">&#39;baidu/Unlimited-OCR&#39;</span><span class="p">,</span> <span class="n">trust_remote_code</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">model</span><span class="o">.</span><span class="n">infer</span><span class="p">(</span><span class="n">tokenizer</span><span class="p">,</span> <span class="n">prompt</span><span class="o">=</span><span class="s1">&#39;&lt;image&gt;document parsing.&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">image_file</span><span class="o">=</span><span class="s1">&#39;your_image.jpg&#39;</span><span class="p">,</span> <span class="n">output_path</span><span class="o">=</span><span class="s1">&#39;./output&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">base_size</span><span class="o">=</span><span class="mi">1024</span><span class="p">,</span> <span class="n">image_size</span><span class="o">=</span><span class="mi">640</span><span class="p">,</span> <span class="n">crop_mode</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>For PDFs, convert pages to images with PyMuPDF and use <code>infer_multi</code>:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">fitz</span>
</span></span><span class="line"><span class="cl"><span class="n">doc</span> <span class="o">=</span> <span class="n">fitz</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s1">&#39;your_doc.pdf&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">page</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">page</span><span class="o">.</span><span class="n">get_pixmap</span><span class="p">(</span><span class="n">matrix</span><span class="o">=</span><span class="n">fitz</span><span class="o">.</span><span class="n">Matrix</span><span class="p">(</span><span class="mi">300</span><span class="o">/</span><span class="mi">72</span><span class="p">,</span> <span class="mi">300</span><span class="o">/</span><span class="mi">72</span><span class="p">))</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;page_</span><span class="si">{</span><span class="n">i</span><span class="si">:</span><span class="s1">04d</span><span class="si">}</span><span class="s1">.png&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">model</span><span class="o">.</span><span class="n">infer_multi</span><span class="p">(</span><span class="n">tokenizer</span><span class="p">,</span> <span class="n">prompt</span><span class="o">=</span><span class="s1">&#39;&lt;image&gt;Multi page parsing.&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                  <span class="n">image_files</span><span class="o">=</span><span class="p">[</span><span class="sa">f</span><span class="s1">&#39;page_</span><span class="si">{</span><span class="n">i</span><span class="si">:</span><span class="s1">04d</span><span class="si">}</span><span class="s1">.png&#39;</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">doc</span><span class="p">))],</span>
</span></span><span class="line"><span class="cl">                  <span class="n">output_path</span><span class="o">=</span><span class="s1">&#39;./output&#39;</span><span class="p">,</span> <span class="n">image_size</span><span class="o">=</span><span class="mi">1024</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="mi">32768</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>The model also supports vLLM and SGLang for production deployments. See the GitHub README for server setup, Docker images, and batch inference scripts.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/docling/" >Document OCR &amp; Parsing: Docling, dots.ocr, and Alternatives</a></strong> The previous generation of open-source OCR tools; Docling is useful for single-page work but none stitch multi-page documents the way Unlimited-OCR does.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/liteparse/" >LiteParse: Fast Local PDF Parsing with OCR and Bounding Boxes</a></strong> Another local PDF parser with OCR, useful when you need bounding box coordinates alongside extracted text.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/scribeocr-free-web-app-for-ocr/" >ScribeOCR: Best Free Web App for OCR, Text Recognition &amp; Document Digitization</a></strong> A free web OCR option that requires no local GPU; simpler setup, but no multi-page context.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>The Price of Happiness: Money's Exponential Math That Most People Get Wrong</title><link>https://www.tmfnk.com/read/articles/price-of-happiness-money-log-income/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/price-of-happiness-money-log-income/</guid><description>Killingsworth's research shows happiness rises linearly with log(income); meaning a 10% raise matters the same at every level, but giving to the poor is exponentially more impactful.</description><content:encoded><![CDATA[
<p>Matthew Killingsworth published a paper titled <em>The Price of Happiness</em> that resolves a persistent confusion in the money-and-happiness literature. The short version: money and happiness follow logarithmic math, and most people (including researchers), draw the wrong conclusions from it. The full paper is at <a href="https://happiness-science.org/price-of-happiness/" target="_blank" rel="noopener">happiness-science.org/price-of-happiness</a>.</p>
<ol>
<li>
<p>Happiness and the logarithm of income are correlated at r = 0.98–0.99 from $10,000/year to $500,000/year and beyond. This covers experienced happiness (real-time mood sampled via phone notifications) and life satisfaction. It is the most systematic relationship I&rsquo;ve seen in any social science dataset. There&rsquo;s virtually no variance left to explain at the group level after log(income).</p>
</li>
<li>
<p>This means the marginal value of a dollar declines exponentially. An extra $10,000 matters far more to someone earning $25,000 than someone earning $200,000. Plot happiness against raw dollars and you get the familiar concave curve that looks like it plateaus. But a logarithmic relationship never plateaus. If you plot happiness against log(income), it just keeps climbing at a decelerating rate.</p>
</li>
<li>
<p>The counterintuitive flip: proportional differences matter equally at every level. A 10% raise is associated with the same happiness difference whether you earn $30,000 or $300,000. This follows directly from log math, because log(1.1 × X) = log(1.1) + log(X). The constant term doesn&rsquo;t depend on X.</p>
</li>
<li>
<p>Real-world incomes vary exponentially, not linearly. The difference between the 10th and 20th percentile earner is a few thousand dollars. The difference between the 80th and 90th percentile is tens or hundreds of thousands. This means each step up the actual income ladder delivers roughly the same happiness increment. Killingsworth shows income quantile correlates with happiness at r = 0.96, so no log transform needed.</p>
</li>
<li>
<p>The tension appears when you switch from individual to collective perspective. For your own career, each step up pays exponentially more dollars but delivers constant happiness gains. This is a reasonable trade-off. But for philanthropy, compensation policy, or tax decisions, the exponential math bites hard. A dollar taken from someone earning $73,000 and given to someone earning $2/day generates an estimated 10,000% ROI for collective happiness. A billionaire giving 10% of their income to double the incomes of people earning $2/day would generate roughly 90,000,000% return in happiness terms.</p>
</li>
<li>
<p>This geometry may explain why income inequality persists. If climbing the ladder feels worthwhile at every rung (constant happiness increment per step), people keep climbing. But since each rung costs exponentially more dollars, the successful capture of those dollars by a few concentrates wealth. Individual rationality (keep climbing) and collective optimality (spread the gains) diverge.</p>
</li>
<li>
<p>The same math explains why happiness in the US has stagnated despite GDP growth. Income growth has concentrated at the top, where additional dollars have the smallest per-dollar impact on happiness. The people who would benefit most from extra income (the bottom of the distribution), have seen the slowest real growth. If growth is going to be unequal, the optimal distribution for collective happiness is the opposite of what&rsquo;s happened.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> When thinking about your own income, think proportionally, because a 10% raise matters about the same no matter where you are. When thinking about other people&rsquo;s money (philanthropy, policy, compensation), think exponentially. Giving the same dollar generates radically different happiness depending on who receives it.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/stanford-ai-index-2026/" >Stanford AI Index 2026: Key Takeaways from the State of AI</a></strong> Another data-rich report with policy implications, covering a different dimension of how resources concentrate.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>The Castle Map: 3,708 Fortresses, One Open-Data Atlas</title><link>https://www.tmfnk.com/read/articles/the-castle-map/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/the-castle-map/</guid><description>An interactive night map of every significant castle, fortress, and palace on Earth. The map features 3,708 landmarks across 131 countries, curated from open data and free to download.</description><content:encoded><![CDATA[
<p><a href="https://thecastlemap.com/" target="_blank" rel="noopener">The Castle Map</a> is exactly what it sounds like: a night-mode interactive map with 3,708 of the world&rsquo;s great castles, fortresses, and palaces plotted across 131 countries. Click any point and you get a photo, founding century, and quick facts. Open the landmark&rsquo;s page for coordinates and the full story.</p>
<ol>
<li>
<p>The dataset is built entirely from open data: Wikidata for facts and coordinates, Wikimedia Commons for photos, Wikipedia for stories, OpenFreeMap and Natural Earth for the basemap. Every landmark has a real photo, a Wikipedia article, and exact coordinates. This is the curation bar: if it doesn&rsquo;t have all three, it doesn&rsquo;t make the cut.</p>
</li>
<li>
<p>The breakdown: 1,713 castles, 554 fortresses, 759 palaces and châteaux, and 682 ruins. Italy leads with 294, followed by France (276), Germany (253), Spain (180), Poland (163), and England (160). The atlas explicitly balances across countries so the map stays explorable. If if it plotted every fortification in Europe alone, you&rsquo;d see nothing but dots in Germany.</p>
</li>
<li>
<p>Each castle has a fame score based on its Wikipedia sitelink count, or how many language editions cover it. Palace of Versailles ranks #1, followed by the Forbidden City, Château de Montsoreau, the Acropolis, the Kremlin, and the Alhambra. It&rsquo;s a clean proxy for global renown, and the ranking is published in full with the methodology explained.</p>
</li>
<li>
<p>You can download the complete dataset as GeoJSON or CSV (CC0). Someone who wants to build a castle-visiting app, overlay the data on their own map, or run statistics on castle density by country can do it in one click. The dataset is the product as much as the map itself.</p>
</li>
<li>
<p>Missing a castle you know? The map refreshes from Wikidata. Improve the Wikidata entry with exact coordinates, a Commons photo, and a Wikipedia article in any of the dozen languages the atlas reads, and it becomes eligible for the next refresh. Your edit improves every atlas built on open data, not just this one.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> This is what curated open data can do. A single person (or small team) can build a worldwide atlas that would have needed a national geographic institute a generation ago. The full dataset is free. The hard part (verifying 3,708 landmarks), is done.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/infrastructure-maps-power-grid/" >Infrastructure Maps: Four Ways to See the World&rsquo;s Power Grid</a></strong> Another curated data map of a specific category, though one you&rsquo;d rather not see in person.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/search-whole-earth/" >SearchWhole.Earth: The Digitally Resurrected Whole Earth Catalog</a></strong> Similar ethos: one person curating the world&rsquo;s interesting things into a browsable atlas.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/openglobes-space/" >OpenGlobes Space: What&rsquo;s in Space Right Now</a></strong> A different kind of map; what&rsquo;s orbiting overhead, visualized in real time.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>SongGeneration Studio: Local AI Song Generation with Full Vocal + Instrumental Tracks</title><link>https://www.tmfnk.com/use/tools/songgeneration-studio/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/songgeneration-studio/</guid><description>A polished UI for Tencent's LeVo model that generates complete songs with vocals, lyrics, and instrumental stems. Runs locally on your GPU.</description><content:encoded><![CDATA[

<h2>SongGeneration Studio
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A local AI song generator with full vocal + instrumental output and a clean web UI</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Windows, macOS, Linux (NVIDIA GPU with 10GB+ VRAM)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, open source</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://github.com/BazedFrog/SongGeneration-Studio" target="_blank" rel="noopener">github.com/BazedFrog/SongGeneration-Studio</a></td>
      </tr>
  </tbody>
</table>
<p>Most AI music tools are cloud-only: write a prompt, wait for generation, download the result. SongGeneration Studio wraps Tencent&rsquo;s LeVo model in a local web UI that gives you control over every part of the song (structure, genre, voice, stems), without sending anything to a server.</p>
<ol>
<li>
<p>You build songs section by section. Add intro, verse, chorus, bridge, outro, or instrumental blocks, drag to reorder, type lyrics for each. The model understands song structure and produces vocals that follow your arrangement. A 3-minute pop song with two verses and three choruses takes about 3-6 minutes to generate on a 24GB GPU.</p>
</li>
<li>
<p>Style control goes beyond a single genre tag. Pick from pop, rock, hip-hop, R&amp;B, electronic, jazz, metal, folk; then layer in mood (happy, sad, energetic, romantic), voice timbre (male or female with adjustable character), instruments (piano, guitar, drums, synths, strings), and BPM. Or upload a reference track and the AI clones its style.</p>
</li>
<li>
<p>You get three stems per generation: full mix, vocals only, and instrumental only. The vocal isolation is good enough for remixing or karaoke without running a separate stem splitter. Export to FLAC or MP4 video with generated cover art.</p>
</li>
<li>
<p>The honest caveat: you need a serious GPU. 10GB VRAM minimum, 24GB recommended. The model download is about 15GB. Generation time varies with song length, and very long songs (5+ minutes) can have quality drops in later sections. The vocal quality is impressive for a local model but doesn&rsquo;t match cloud services like Suno or Udio on complex arrangements.</p>
</li>
</ol>
<p><strong>Worth your time if:</strong> you want to experiment with AI song generation locally, need control over song structure and stems, and have the GPU to run it.</p>
<h2>Install &amp; first run
    </h2><p>The easiest path is via Pinokio:</p>
<ol>
<li>Open <a href="https://pinokio.computer" target="_blank" rel="noopener">Pinokio</a></li>
<li>Search for &ldquo;SongGeneration Studio&rdquo;</li>
<li>Click Install (handles dependencies and model download automatically)</li>
<li>Click Start: the web UI opens in your browser</li>
</ol>
<p>Manual install: clone the repo, run <code>pip install -r requirements.txt</code>, then <code>python main.py</code>. Models download on first launch.</p>
<p>Once the UI loads, write your lyrics in the section editor, pick genre/mood/voice in the style panel, and click generate. Progress streams in real time.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/petrichor/" >Petrichor: Native macOS Offline Music Player</a></strong> For listening to what you generate; a beautiful local music player with no cloud dependencies.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/map-of-metal/" >Map of Metal: An Interactive History of Heavy Metal Subgenres</a></strong> A different way to explore music: the genre map that shows how styles branch and evolve.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/buzz/" >Buzz: Transcribe &amp; Translate Audio Offline</a></strong> The reverse pipeline; turn generated songs back into text and see how close the transcription matches your original lyrics.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>ReadKinetic: A Free Local-First Speed Reader for Your Own Books</title><link>https://www.tmfnk.com/use/tools/readkinetic-speed-reader/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/readkinetic-speed-reader/</guid><description>An RSVP speed reader that actually reads your EPUBs and PDFs. No upload, no account, no Spreeder subscription.</description><content:encoded><![CDATA[

<h2>ReadKinetic
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>An RSVP speed reader that works with your own ebook files</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web (PWA, installs on any device)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, no account, no tracking</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://readkinetic.com" target="_blank" rel="noopener">readkinetic.com</a></td>
      </tr>
  </tbody>
</table>
<p>Speed reading tools are mostly toys. They ship demo paragraphs and maybe a paste-a-URL field, then nudge you toward a paid plan if you want to read anything real. ReadKinetic is the opposite. It reads your actual EPUBs and PDFs, free and entirely local.</p>
<ol>
<li>
<p>RSVP (Rapid Serial Visual Presentation) solves the right problem. About 30% of conventional reading time is eye movement; saccades between fixation points, regressions that re-read already-processed text, return sweeps that miss their target. RSVP flashes one word at a time in a fixed position. Your eyes never move. You&rsquo;re left with pure comprehension. I tested it on a dense EPUB and held steady at 400 WPM with better retention than my normal skim-and-backtrack cycle.</p>
</li>
<li>
<p>It reads your files, not a curated library. Drop in EPUB, PDF, TXT, DOCX, RTF, HTML, or Markdown. Everything parses client-side and stores in IndexedDB. Nothing touches a server. Close the tab, reopen it; progress saves every three seconds, right where you left off. (There are lighter alternatives too: <a href="https://tachys-d23ab0.gitlab.io/" target="_blank" rel="noopener">Tachys</a> is a bare-bones web RSVP reader for paste-and-go text, and <a href="https://github.com/0hAodha/ogma" target="_blank" rel="noopener">Ogma</a> is a Perl terminal reader with bionic mode, multiword grouping, and resume support.)</p>
</li>
<li>
<p>Sixteen themes, and they&rsquo;re not just background swaps. Cinematic dark, warm sepia, e-ink white, and the whole UI adapts. The engine has punctuation pauses (comma = brief stop, period = longer stop), a RAF-timed playback loop, bionic reading mode, focus guides, and a sleep timer. It&rsquo;s more tuned than any free speed reader I&rsquo;ve used.</p>
</li>
<li>
<p>The honest limit: RSVP is a different reading muscle. You can&rsquo;t skim, you can&rsquo;t jump back three paragraphs, you can&rsquo;t flip to the map in the front matter. For linear reading, it&rsquo;s a great tool. For novels, narrative nonfiction, papers you need to cover start-to-finish, it works. For reference books or anything you browse non-sequentially, stick to conventional reading.</p>
</li>
</ol>
<p><strong>Worth your time if:</strong> you have a backlog of EPUBs and want to try whether RSVP speed gain fixes your reading volume problem without spending money or sending files to a server.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/immersive-reading/" >Immersive Reading: Turn Dense Essays into Interactive Reading Editions</a></strong> Both tools rethink how you read, just from different angles; one speeds up the text, the other opens up the margins.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/pwa-apps/" >PWA Apps: Your Offline-First Knowledge Library</a></strong> ReadKinetic is a PWA too; this article covers the broader philosophy of local-first tools that work without internet.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>PenEcho: An Infinite AI Canvas for Handwriting, Diagrams, and Spatial Thinking</title><link>https://www.tmfnk.com/use/tools/penecho/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/penecho/</guid><description>Like Excalidraw for AI agents. Draw naturally, and PenEcho reads your marks with their spatial context, answers beside them.</description><content:encoded><![CDATA[

<h2>PenEcho
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>An infinite canvas where AI reads your handwriting, diagrams, and spatial context</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>macOS, Linux, Windows (Node.js 18.17+)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, open source (AGPL-3.0)</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://github.com/penecho/penecho" target="_blank" rel="noopener">github.com/penecho/penecho</a></td>
      </tr>
  </tbody>
</table>
<p>Chat interfaces are bad at spatial problems. To describe a diagram you need to build it in some other tool and paste a screenshot. To work through a math problem you type step by step in a linear thread. PenEcho skips all that: put a question, equation, or half-formed idea anywhere on a 20,000 x 20,000 canvas, and the AI reads your handwriting and spatial relationships right where they sit.</p>
<ol>
<li>
<p>Draw naturally with a stylus or mouse. Everything stays ink: you pan and zoom across a sparse canvas that only allocates pixels where you&rsquo;ve drawn. No page breaks, no fixed aspect ratio. Drag AI drafts directly on the canvas, resize them, copy text or formulas, then accept or discard before they become part of the work.</p>
</li>
<li>
<p>It connects to whatever you already use: Codex CLI, Claude CLI, or any OpenAI-compatible API. Configuration is a single command (<code>penecho configure</code>) that walks you through model selection and effort level. PenEcho sends the relevant canvas crop and geometry, the executor replies, and a movable draft appears next to your ink.</p>
</li>
<li>
<p>The plugin system adds live data and interactive widgets. Built-in plugins cover weather, stocks, technology news, exchange rates, earthquakes, space weather, and GitHub activity; data goes directly from your browser to the API origin, never proxied through PenEcho. The HTML plugin lets the model build focused clocks, calculators, or dashboards as sandboxed iframe widgets that stay interactive on the canvas.</p>
</li>
<li>
<p>Recommended models include Opus 4.8 (medium effort for everyday canvas work), Kimi K3 (strong for demanding diagrams), and GPT-5.6-terra (surprisingly fast and responsive). At typical usage, a request costs roughly 2-8 cents on API mode. CLI mode uses your Codex or Claude Code plan directly without API billing.</p>
</li>
<li>
<p>The honest caveat: PenEcho is young (v0.7.0). Handwriting recognition is good but not perfect; it works best with natural print or careful cursive. The CLI modes should only be exposed on a local machine or trusted LAN. If you need polished production diagramming with no model cost, Excalidraw is still the draw tool; PenEcho is for when you want the AI to understand what you drew.</p>
</li>
</ol>
<p><strong>Worth your time if:</strong> you think in diagrams, equations, or spatial sketches and want an AI that meets you on the canvas instead of forcing everything through a chat box.</p>
<h2>Install &amp; first run
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">npm install -g penecho
</span></span><span class="line"><span class="cl">penecho configure
</span></span><span class="line"><span class="cl">penecho</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Open http://localhost:3888. The configure step walks you through your LLM choice (Codex CLI, Claude CLI, or API with any OpenAI-compatible provider). Draw something anywhere on the canvas, pause, and PenEcho responds beside your ink.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Override model or effort per session</span>
</span></span><span class="line"><span class="cl">penecho --codex --model gpt-5.6-sol --effort xhigh
</span></span><span class="line"><span class="cl">penecho --claude --model opus --effort medium</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>The default config lives at <code>~/.penecho/config.env</code>. API keys are stored in plaintext there with owner-only permissions and never sent to browser code.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/html-anything/" >HTML Anything: The Agentic HTML Editor</a></strong> Another tool that takes a non-chat approach to working with AI on visual output; generate and iterate on HTML through a dedicated interface.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/plannotator/" >Plannotator: Visual Plan &amp; Code Review for AI Coding Agents</a></strong> Visual planning for AI agents, but from the code review angle rather than the spatial thinking angle.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/accomplish/" >Accomplish: Open Source AI Desktop Agent with Built-In AI</a></strong> A different take on AI interaction; desktop-native automation rather than canvas-based reasoning.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Latent Space: Inside the Model Factory with Eiso Kant, Poolside AI</title><link>https://www.tmfnk.com/listen/podcasts/latent-space-eiso-kant-poolside/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/listen/podcasts/latent-space-eiso-kant-poolside/</guid><description>Poolside's co-CEO on how 70 researchers run 20,000 experiments a month, why MCP is stupid, and the $12M failure that ChatGPT vindicated.</description><content:encoded><![CDATA[
<iframe allow="autoplay *; encrypted-media *; fullscreen *; clipboard-write" frameborder="0" height="175" style="width:100%;max-width:660px;overflow:hidden;border-radius:10px;" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation" src="https://embed.podcasts.apple.com/us/podcast/inside-the-model-factory-eiso-kant-poolside-ai/id1674008350?i=1000777982857"></iframe>

<h2>Latent Space: Inside the Model Factory with Eiso Kant, Poolside AI
    </h2><p>swyx and Vibhu with Eiso Kant. Duration: 1h 54m</p>
<p><a href="https://podcasts.apple.com/us/podcast/inside-the-model-factory-eiso-kant-poolside-ai/id1674008350?i=1000777982857" target="_blank" rel="noopener">Listen on Apple</a> · <a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">Episode page</a></p>
<p><strong>Timestamps</strong>
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">0:00</a> Intro
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">0:54</a> Karpathy, RNNs, and building code models before Transformers
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">2:26</a> The $12M failure and ChatGPT vindication
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">3:39</a> Open source and the case for 100 foundation model companies
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">16:04</a> The Model Factory (90% engineering)
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">20:19</a> Agents inside the model factory
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">36:07</a> Laguna S: persistence vs. raw intelligence
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">58:37</a> Model harnesses, coding agents, and the path to AGI
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">1:09:26</a> Why MCP and traditional tool calls are &ldquo;stupid&rdquo;
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">1:27:37</a> Open models, AI safety, and the risk of an oligopoly</p>
<p>Eiso Kant spent four years and $12 million building language models for code before the world cared. His first company failed. Then ChatGPT happened, and suddenly everyone wanted what he&rsquo;d been working on since 2015. This is the story of what he built next: Poolside&rsquo;s Model Factory.</p>
<ol>
<li>
<p>Eiso&rsquo;s origin story starts with Andrej Karpathy&rsquo;s 2015 blog post &ldquo;The Unreasonable Effectiveness of Recurrent Neural Networks.&rdquo; He read it and pivoted his startup overnight to work on RNNs for code. &ldquo;I had built a completely unreasonable belief, that neural nets should be able to generalize to anything and everything.&rdquo; He spent four years and $12 million on this before the company failed in 2019. &ldquo;People would just laugh at us.&rdquo;</p>
</li>
<li>
<p>ChatGPT felt like vindication. People started texting him old decks and talks from his failed startup. When he co-founded Poolside, &ldquo;no one argued if these were stochastic parrots anymore.&rdquo; The market had caught up to his thesis, which meant he could finally build what he&rsquo;d always believed in without having to convince anyone it mattered.</p>
</li>
<li>
<p>&ldquo;Model building is 90% engineering.&rdquo; Poolside treats training as an industrialized process, not a science experiment. They built what they call the Model Factory with thousands of components that turn raw data into trained models, designed from day one by distributed systems engineers embedded in the research team. The metric they optimize for: speed from a researcher&rsquo;s idea to a trusted experimental result.</p>
</li>
<li>
<p>Fewer than 70 researchers run 10,000–20,000 experiments per month. Their Laguna XS 2 shipped in five weeks from start of training. Laguna S shipped in eight weeks. The next model started training the day after Laguna S launched. &ldquo;The model should be an artifact of someone&rsquo;s process it shouldn&rsquo;t be a thing in itself.&rdquo; They treat model building like a SpaceX factory where rockets roll off a production line.</p>
</li>
<li>
<p>Agents are starting to run the Model Factory. Eiso walks behind researchers&rsquo; screens and sees agents writing code, launching jobs, evaluating results, and modifying pipelines. &ldquo;You&rsquo;re starting to see these twinklings of what RSI is gonna look like.&rdquo; During the entire Laguna S training run, there were zero on-call events. The only hiccup was the first six hours of a new run when a config inevitably breaks.</p>
</li>
<li>
<p>Eiso thinks MCP and traditional tool calls are &ldquo;stupid.&rdquo; His argument: future agents will write scripts instead of choosing from dozens of predefined tools. Rather than giving an agent a catalog of API functions, give it a container and let it write whatever code it needs. Minimal harness, maximum freedom.</p>
</li>
<li>
<p>He would rather live in a world with 100 foundation model companies than 5, even if Poolside were one of the five. This is why they open-sourced Laguna S. He actively wants capable researchers to leave their labs and become his competitors. &ldquo;If we don&rsquo;t encourage more labs now, there&rsquo;s a small window before models are really impacting recursive self-improvement to a level where catching up becomes unfeasible.&rdquo;</p>
</li>
<li>
<p>Laguna S 2.1 is a 118B total parameter MoE with 8B active per token, beating models nearly 10x its size. It has a 1M token context window, thinking and no-thinking modes, and was trained from scratch in eight weeks. Poolside trains from scratch instead of distilling larger models because they believe the capability ceiling is higher when you own the whole training process.</p>
</li>
<li>
<p>Poolside raised $500 million while investors still questioned whether AGI was real. The name comes from the idea of &ldquo;refusing to lower your ambitions&rdquo;, the story goes that when faced with a impossible-looking challenge, you don&rsquo;t scale down your goal, you scale up your approach. Eiso is a &ldquo;utopian sci-fi guy&rdquo; who believes intelligence will become the world&rsquo;s most demanded and most commoditized resource.</p>
</li>
<li>
<p>Regulation could accidentally lock in an oligopoly of two or three AI companies, and unilateral AI safety doesn&rsquo;t work in a globally competitive environment. Eiso thinks open models will eventually become too capable to release without restrictions, but we&rsquo;re not there yet and the window to build a diverse ecosystem is closing fast.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/no-priors-podcast-andrej-karpathy/" >No Priors: Andrej Karpathy on Code Agents, AutoResearch, and the AI Psychosis</a></strong> The person who inspired Eiso&rsquo;s entire journey, on where code agents are heading next.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/mad-podcast-dylan-patel-nvidia/" >MAD Podcast: Dylan Patel on NVIDIA&rsquo;s New Moat &amp; Why China is &lsquo;Semiconductor Pilled&rsquo;</a></strong> The hardware side of the same story; the chips and supply chains that make Model Factories possible.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/mlst-andrew-wilson-real-reason-huge-ai-models-work/" >MLST: The Real Reason Huge AI Models Actually Work — Prof. Andrew Wilson</a></strong> The theory behind why scaling works, which Eiso&rsquo;s Model Factory operationalizes.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/all-in-demis-hassabis-deepmind-ai-creativity/" >All-In: Google DeepMind CEO Demis Hassabis on AI, Creativity, and a Golden Age of Science</a></strong> Another founder building toward AGI, from a different starting point.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>How to Turn a 3D Gaussian Splat Into a Browser App with PlayCanvas</title><link>https://www.tmfnk.com/use/tutorials/gaussian-splat-browser-playcanvas/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/gaussian-splat-browser-playcanvas/</guid><description>Capture a real location with your phone, process it into a Gaussian splat, and publish an interactive 3D viewer in the browser.</description><content:encoded><![CDATA[

<p>Gaussian Splatting turns a set of photographs into a photorealistic 3D scene you can orbit around in a browser. You&rsquo;ve seen the demos of cathedrals and museum pieces. This tutorial shows you how to do it yourself; capture, process, and publish.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>Shoot 50-200 photos of a scene from every angle (phone works)</li>
<li>Process them into a splat with a free tool (PostShot, Luma AI)</li>
<li>Edit and compress in SuperSplat, export as SOG</li>
<li>Build a web viewer with PlayCanvas Web Components (one HTML file)</li>
</ul>
<p><strong>Prerequisites:</strong> A phone or camera, a computer with a CUDA GPU (optional for cloud processing), and Node.js 18+.</p>
<h2>Step 1: Capture the scene
    </h2><p>Shoot 50-200 overlapping photos covering your subject from every angle. Move around the subject, not just in front of it. Each photo should overlap its neighbors by 60-80%. Avoid motion blur, reflections, and moving objects.</p>
<blockquote>
  <p><strong>Pro tip:</strong> Video works too. Walk slowly around your subject, then extract every Nth frame. 30 seconds of slow 4K video at 30fps yields 900 frames; extract every 5-10th frame for a good starting set.</p>
</blockquote>
<p>Outdoors with moving shadows or wind is harder. Indoors with stable lighting is easiest.</p>
<h2>Step 2: Process into a splat
    </h2><p>You need a Gaussian Splatting trainer. The easiest entry points:</p>
<ul>
<li><strong>PostShot</strong> (free desktop app, CUDA GPU required): drag in your images, click train. Outputs a <code>.ply</code> file.</li>
<li><strong>Luma AI</strong> (cloud, web-based): upload photos, wait for processing. Download the result as <code>.ply</code>.</li>
<li><strong>Nerfstudio + gsplat</strong> (open source, advanced): <code>pip install nerfstudio</code> then <code>ns-train gaussian-splatting --data ./images</code></li>
</ul>
<p>Training takes anywhere from a few minutes (small scene on a fast GPU) to a couple hours (large scene on cloud). The output is a <code>.ply</code> file with your splat data.</p>
<h2>Step 3: Edit and compress in SuperSplat
    </h2><p>Open <a href="https://superspl.at/editor" target="_blank" rel="noopener">SuperSplat Editor</a>. Drag in your <code>.ply</code> file.</p>
<ul>
<li><strong>Crop</strong>: remove unwanted regions (background, capture artifacts)</li>
<li><strong>Clean</strong>: delete floating floaters and stray splats</li>
<li><strong>Compress</strong>: export as <code>.sog</code> (PlayCanvas&rsquo;s compressed open format, typically 80-90% smaller than raw PLY)</li>
</ul>
<p>SOG is the format you&rsquo;ll serve on the web. A clean 10MB compressed splat loads faster than a raw 100MB PLY.</p>
<h2>Step 4: Publish as a web app
    </h2><p>The fastest path is PlayCanvas Web Components; a single HTML file with no build step.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="cp">&lt;!DOCTYPE html&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">head</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">script</span>
</span></span><span class="line"><span class="cl">      <span class="na">type</span><span class="o">=</span><span class="s">&#34;module&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">src</span><span class="o">=</span><span class="s">&#34;https://playcanvas.github.io/web-components/v2.3/pcui.js&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">link</span>
</span></span><span class="line"><span class="cl">      <span class="na">rel</span><span class="o">=</span><span class="s">&#34;stylesheet&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">href</span><span class="o">=</span><span class="s">&#34;https://playcanvas.github.io/web-components/v2.3/pcui.css&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">head</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">pc-app</span> <span class="na">splat-url</span><span class="o">=</span><span class="s">&#34;https://your-site.com/splat.sog&#34;</span> <span class="na">mouse-control</span><span class="o">=</span><span class="s">&#34;orbit&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">pc-gsplat</span><span class="p">&gt;&lt;/</span><span class="nt">pc-gsplat</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">pc-app</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Upload <code>index.html</code> and your <code>.sog</code> file together. Host on any static server (Cloudflare Pages, Netlify, GitHub Pages). Done! You now have an interactive 3D viewer.</p>
<p>For more control (custom UI, animations, multi-scene navigation), use the <a href="https://developer.playcanvas.com/user-manual/gaussian-splatting/building/your-first-app/engine/" target="_blank" rel="noopener">Engine API</a>; it&rsquo;s the same approach the Grace Cathedral experience uses, with WebGPU compute shaders for fast splat sorting and on-demand rendering that stops drawing when the camera stops moving.</p>
<h2>Cleanup
    </h2><p>The <code>.ply</code> file is only needed as an intermediate. Keep the SOG for production. Store your source photos in case you need to retrain.</p>
<p><strong>If it breaks:</strong></p>
<ul>
<li><strong>Shimmering or ghosting:</strong> you didn&rsquo;t capture enough angles or the lighting changed during capture. Re-shoot with more overlap.</li>
<li><strong>Splat looks flat:</strong> the trainer couldn&rsquo;t recover depth. Make sure you circled the subject fully, not just shot from one side.</li>
<li><strong>Low framerate:</strong> reduce the splat count in SuperSplat export settings or enable LOD streaming. 3.5 million splats is a desktop target; mobile should aim for 1-2 million.</li>
<li><strong>SOG doesn&rsquo;t load:</strong> verify the MIME type on your server. <code>.sog</code> should serve as <code>application/octet-stream</code>.</li>
</ul>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/depth-anything-cpp-macos/" >Install depth-anything.cpp on macOS: Local Depth Maps from One Photo</a></strong> A different approach to 3D scene understanding; depth estimation from a single image rather than multi-view reconstruction.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/map3d/" >map3d: Generate Real-World 3D City Maps from OpenStreetMap</a></strong> Not photorealistic, but lets you explore the same idea of browser-based 3D navigation from a different data source.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/build-your-own-x-from-scaffold.md" >Build Your Own X From Scratch: Redis, Databases, Compilers, and Web Servers</a></strong> The same build-it-yourself spirit, applied to infrastructure rather than 3D.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Ex Situ: A Spatial Index of 200,000 Displaced Cultural Artifacts</title><link>https://www.tmfnk.com/read/articles/ex-situ-displaced-cultural-artifacts-map/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/ex-situ-displaced-cultural-artifacts-map/</guid><description>An open-source map that traces 200,000+ museum artifacts from their origin sites to the institutions that hold them. It is built entirely from open-access museum APIs.</description><content:encoded><![CDATA[
<p><a href="https://exsitu.app/map" target="_blank" rel="noopener">Ex Situ</a> is an open-source geospatial index that maps museum artifacts as arcs from their origin site to the institution that holds them. The map currently covers 200,552 artifacts across 9 collections, 194 territories, and 6,679 origin sites. It started as a solo MA thesis in 2022 and the creator, Hüseyin Burak Yel, has been building it since.</p>
<ol>
<li>
<p>The infrastructure is designed as an indexer, not a hoster. Artifacts stay linked to their institutional source. Images are kept as URLs pointing to the source institutions. No content is copied or mirrored. The project is &ldquo;connective tissue between archives that were never designed to speak to each other.&rdquo;</p>
</li>
<li>
<p>The data model is intentionally flat to avoid encoding problematic colonial taxonomies. Many museums still categorize items under labels like &ldquo;Islamic art,&rdquo; &ldquo;Asian art,&rdquo; &ldquo;ethnological collections&rdquo;, and &ldquo;religious objects.&rdquo; These are categories that reflect the collector&rsquo;s worldview, not the object&rsquo;s origin. Ex Situ sidesteps this by prioritizing geographic provenance over institutional categories.</p>
</li>
<li>
<p>The map renders arcs at three zoom levels. At the global view (zoom 0–4), you see territory-to-institution arcs. At the regional view (zoom 5–9), city/site to institution. At the artifact level (zoom 10+), you get precise coordinates for individual objects. The result is a tool that works for both broad pattern recognition and detailed research.</p>
</li>
<li>
<p>Currently indexing from 9 collections including the Metropolitan Museum of Art, the Victoria and Albert Museum, the Staatliche Museen zu Berlin, and the Art Institute of Chicago. It only pulls from institutions with open-access APIs, which means the map unavoidably underrepresents museums that keep their data closed. A commenter on Hacker News pointed out that Paris and Moscow look innocent on the map, because their data is not publicly available.</p>
</li>
<li>
<p>The built-in search lets you filter by origin site or collection, and there is an MD export for researchers who want to download provenance data for a filtered set. There is also a public API at <code>exsitu.app/api/museum-objects/geospatial</code> that returns GeoJSON arc data filtered by zoom level, bounding box, institution, or origin country.</p>
</li>
<li>
<p>Because the data comes exclusively from Western and Euro-American institutions, the scope is a deliberate constraint. The creator notes that expanding to Japanese, Russian, or other museum networks depends entirely on whether those institutions provide open-access APIs. The technical pattern for adding a new resolver is documented in the ETL pipeline (fetch, map, geocode, insert), but each new institution means adapting to whatever API format they use.</p>
</li>
<li>
<p>The project is fully self-hostable and AGPL-3.0 licensed. Stack: Next.js + Deck.gl + MapLibre GL JS on the frontend, Strapi + PostgreSQL/PostGIS on the backend, Python for the ETL pipeline. No proprietary cloud dependencies, no third-party tracking.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Ex Situ turns the relationship between an object&rsquo;s origin and its current location into a visible, queryable spatial index. It does not host the data or duplicate institutional records. It draws the lines. The map reveals which museums have open data and which do not almost as clearly as it reveals where artifacts came from.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/the-castle-map/" >The Castle Map: 3,708 Fortresses, One Open-Data Atlas</a></strong> Another open-data spatial atlas, built from Wikidata and Wikimedia Commons instead of institutional APIs.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/search-whole-earth/" >SearchWhole.Earth: The Digitally Resurrected Whole Earth Catalog</a></strong> A different kind of open-data catalog; curating interesting things into a browsable index.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/infrastructure-maps-power-grid/" >Infrastructure Maps: Four Ways to See the World&rsquo;s Power Grid</a></strong> A map that makes hidden infrastructure visible, a similar impulse to Ex Situ&rsquo;s provenance arcs.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Cursor's Agent Swarm: Building SQLite in Rust for $1,339</title><link>https://www.tmfnk.com/read/articles/cursor-agent-swarm-model-economics/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/cursor-agent-swarm-model-economics/</guid><description>Cursor ran four model mixes building SQLite from scratch in Rust. All passed 100% of tests. Costs ranged from $1,339 to $10,565. The cheapest used a frontier planner and cheap workers.</description><content:encoded><![CDATA[
<p>Cursor published a detailed post on <a href="https://cursor.com/blog/agent-swarm-model-economics" target="_blank" rel="noopener">Agent swarms and the new model economics</a> that is worth reading end to end. They built SQLite from scratch in Rust, starting from nothing but the 835-page SQLite manual, using a swarm of AI agents. The experiment is a concrete demonstration of the commodity-market math Ben Thompson wrote about last week.</p>
<ol>
<li>
<p>The new swarm is organized as a tree: a frontier model acts as planner, decomposing the goal into pieces, while cheaper models act as workers executing those pieces. The design is deliberately shaped by the problem rather than imposing a fixed topology. This is the same planner-worker distinction Thompson described as a future possibility; Cursor just shipped it.</p>
</li>
<li>
<p>The context efficiency of this separation is the core insight. A solo agent that walks the whole task tree has to hold every context layer at once and drifts. In the swarm, a planner never sees low-level implementation detail, and a worker never needs to hold the global picture. Cursor suspects this context efficiency matters more than parallelism for scaling.</p>
</li>
<li>
<p>At 1,000 commits per second, human coordination mechanisms break. Cursor built a custom VCS from scratch, then handled five failure modes that human teams never see: split-brain design (two planners implementing the same thing), planner contention (agents fighting over the same files), merge conflicts (a neutral third-party agent resolves them), megafiles (agents flag bloated files for automatic decomposition), and ossification (agents learn not to touch core code, so Cursor licensed intentional breakage and let the compiler propagate changes).</p>
</li>
<li>
<p>The stacked review system is the error-correction layer. No single review lens catches everything, but decorrelated lenses (different models, different inputs, different personalities), stack like self-driving car sensor fusion. The compute spent on review is high return because review is much cheaper than the work it audits.</p>
</li>
<li>
<p>The Field Guide experiment is a stigmergy mechanism: agents write a shared context folder that is injected into every agent at start. Model weights are frozen, so the only way to shorten the next trajectory is by capturing surprise encounters in the guide. This is the closest implementation I have seen of agents building institutional memory for themselves.</p>
</li>
<li>
<p>The economics are the story. Cursor tested four model mixes: GPT-5.5 (both roles), Grok 4.5 (both), Opus 4.8 planner + Composer 2.5 workers, and Fable 5 planner + Composer 2.5 workers. All passed 100% of the SQL test suite. Costs ranged from $1,339 (Opus hybrid) to $10,565 (GPT-5.5). In the cheapest configuration, the Opus planner produced a small fraction of tokens but two-thirds of the cost, while workers handled the vast majority of tokens for one-third of the cost. In the most expensive, those same workers cost $9,373. This is a big win because they were running GPT-5.5 for a job a cheaper model could do.</p>
</li>
<li>
<p>The old versus new comparison is staggering. On the same task with the same time budget, the old swarm produced 68,000 commits and 70,000+ merge conflicts in two hours before it had to be paused. The new swarm produced under 1,000 conflicts over its full four hours. The old codebase needed 64,305 lines. The new one did it in 9,908.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> This is the Thompson thesis in microcosm. When intelligence becomes a commodity, the winning strategy is not the smartest model but the optimal planner-worker split. The cost difference between the cheapest and most expensive configurations was 8x with identical outcomes. Cursor&rsquo;s swarm is a working demonstration of what happens when you stop optimizing for capability and start optimizing for cost structure.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/whos-afraid-of-chinese-models-stratechery/" >Who&rsquo;s Afraid of Chinese AI Models? Ben Thompson Maps the Commodity Math</a></strong> Thompson&rsquo;s commodity market analysis is the theory; Cursor&rsquo;s experiment is the existence proof.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/is-grep-all-you-need/" >Is Grep All You Need? How Agent Harnesses Reshape Agentic Search</a></strong> A direct comparison of agent harnesses (Claude Code, Codex, Gemini CLI); the same abstraction-level question Cursor is asking, applied to search workflows.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/the-rise-of-computer-use-and-agentic-coworkers/" >The Rise of Computer Use and Agentic Coworkers</a></strong> The architectural precursor: why model capabilities alone are not enough and orchestration matters.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/harness-engineering-lilian-weng/" >Harness Engineering for Self-Improvement: Lilian Weng&rsquo;s Survey</a></strong> OpenAI&rsquo;s perspective on agent orchestration and self-improvement loops, directly relevant to Cursor&rsquo;s swarm architecture.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/state-of-agentic-coding-6-armin-ronacher-ben-vinegar/" >State of Agentic Coding #6 with Armin Ronacher and Ben Vinegar</a></strong> The practical state of agentic coding tools, the ecosystem Cursor is building for.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/latent-space-eiso-kant-poolside/" >Latent Space: Inside the Model Factory with Eiso Kant, Poolside AI</a></strong> Another take on the model economics problem; how a small team runs 20,000 experiments per month.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Chamath Palihapitiya: Once I Understood This About Investing, My Life Changed</title><link>https://www.tmfnk.com/see/videos/chamath-palihapitiya-once-i-understood-this-about-investing/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/chamath-palihapitiya-once-i-understood-this-about-investing/</guid><description>Chamath on compound interest tables, why he ignored Bezos and Elon selling in 2021 and lost billions, and why your first investment should be something you love using.</description><content:encoded><![CDATA[

<h2>Once I Understood This About Investing, My Life Changed.
    </h2><p>Chamath Palihapitiya. Duration: 15 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/J2qKVjRR12w?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w" target="_blank" rel="noopener">0:00</a> Building a compound interest table</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=122s" target="_blank" rel="noopener">2:02</a> The risk curve and taking responsibility</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=156s" target="_blank" rel="noopener">2:36</a> Learning from Bezos and Elon the hard way</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=292s" target="_blank" rel="noopener">4:52</a> Investing in what you love</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=434s" target="_blank" rel="noopener">7:14</a> Tax-loss harvesting as a backup plan</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=504s" target="_blank" rel="noopener">8:24</a> Get rich slow</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=632s" target="_blank" rel="noopener">10:32</a> Knowing your goal and the barbell strategy</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=846s" target="_blank" rel="noopener">14:06</a> Just start and tell nobody</li>
</ul>
<p>Chamath Palihapitiya (early Facebook executive, Social Capital founder, former Warriors owner) gives the rawest investing advice I have heard in a while. He walks through his own mistakes (the time he ignored the two best capital allocators in the world and torched $5 billion), and the frameworks he uses instead.</p>
<ol>
<li>
<p>Build your own compound interest table before you buy anything. Chamath says he built one for an athlete who just signed a giant contract. He took the salary, subtracted taxes and fees, and showed him what it would look like at 7% over 30 years. The athlete&rsquo;s mind was blown. Then Chamath backed it off to 1/1000th of that starting number, and his mind was still blown. &ldquo;Even with the most meager of beginnings,&rdquo; Chamath says, &ldquo;you can post huge numbers if you focus on a systematic process over 20 and 30 years.&rdquo;</p>
</li>
<li>
<p>Know exactly where you sit on the risk curve or stay out. &ldquo;The further out on the risk curve you are, the odds are that there&rsquo;s the risk of capital loss,&rdquo; Chamath says. &ldquo;And if you don&rsquo;t know where you are out on the risk curve, you shouldn&rsquo;t be there. Take your money, stick it into an index fund, just go home. This is a tough game, and most people lose at this game.&rdquo;</p>
</li>
<li>
<p>Here is the mistake that cost him billions. In November 2021, Chamath saw Jeff Bezos and Elon Musk start selling their stock. He says he thought to himself, &ldquo;These guys are the two best capital allocators in the world today. If they&rsquo;re selling, I should sell.&rdquo; He sold a little but not nearly enough. By March 2022, the Russia-Ukraine war started, the market tanked, and his SPAC positions got obliterated. His honest diagnosis: he had confused his growing fame with growing skill. He was too afraid to tell everybody to cut to cash. Now his rule is: when someone structurally smarter than him does something against his positions, he immediately asks, &ldquo;Prove to me why I shouldn&rsquo;t do the same.&rdquo;</p>
</li>
<li>
<p>Your first investment should be a product you love and use. He tells this story every time someone asks him how to start: on vacation with his two sons, they won a few hundred dollars betting on golf. The older son said, &ldquo;I like the price action of Virgin Galactic&rdquo;. He blew the $200 in, made $3,000, bought a computer, and never returned. The younger son said, &ldquo;I like Xbox, PlayStation, and Nintendo&rdquo;. He bought all three, compounded at roughly 30% over the next three years, and is still in the game. Chamath&rsquo;s rule: &ldquo;Look around you at the products that you love, that you think are incredible, that are well-made. Find out who makes those things and see if that company is public.&rdquo;</p>
</li>
<li>
<p>US tax code makes your losses a backup plan. Chamath says most investors do not know that capital losses carry forward indefinitely in the US, offsetting future gains with no expiration date. &ldquo;When you lose money (not if but when), take the time to understand why: were you too greedy, too short-term, did you misjudge the risk? All that money will come back to you if you course-correct.&rdquo;</p>
</li>
<li>
<p>Investing is a get-rich-slow game. &ldquo;Every time that people want get-rich-quick schemes, they stop thinking for themselves, they start looking for answers from others, they invariably blow up, and then they blame others,&rdquo; Chamath says. &ldquo;Don&rsquo;t do that to yourself. You are responsible. Do not make decisions you cannot justify as your own decisions.&rdquo;</p>
</li>
<li>
<p>The barbell strategy lets you take big risks without going to zero. Chamath frames his whole portfolio as a barbell: most of his capital sits in concentrated, asymmetric bets on technology. On the other end, he hedges with cash and uncorrelated assets. The most uncorrelated thing he could find? Professional sports. He bought 10% of the Golden State Warriors for $25 million, later sold for $500 million. But he says the investment would have been worth it even at zero appreciation because it gave him &ldquo;the mental freedom to go and build my investing chops in technology.&rdquo;</p>
</li>
<li>
<p>Just start. Tell no one. The only people who care how much you start with are other people, and they care because it makes them feel better about their own decisions. &ldquo;What&rsquo;s $50? What&rsquo;s $100? To others it seems meager and not worth it.&rdquo; Chamath&rsquo;s advice: start anyway, keep your mouth shut, and &ldquo;show up 10 or 15 years later with a huge war chest and shove it up their ass.&rdquo;</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/see/videos/apply-compound-interest/" >How To Apply Compound Interest To Everything In Your Life</a></strong> Chamath&rsquo;s first takeaway (the compound interest table) is the whole point of this video.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/charlie-munger-saving-first-100k/" >Charlie Munger: Saving the First $100,000 Will Change Your Life</a></strong> Same ethos: starting small and letting time do the work.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/the-wealth-ladder-explained/" >The Wealth Ladder Explained: How to Build Wealth at Every Stage</a></strong> Nick Maggiulli&rsquo;s framework for where you are and what to do next.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/mohnish-pabrai-kim-kiho-knowledge-inside/" >Mohnish Pabrai on Dhandho Investing, Checklists, and Korea</a></strong> Another investor who preaches the same low-turnover, high-conviction approach.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>BBC Sound Effects: 30,000 Recordings from the World's Greatest Audio Archive</title><link>https://www.tmfnk.com/use/tools/bbc-sound-effects/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/bbc-sound-effects/</guid><description>BBC's free sound effects library. Search, preview, mix, and download 30,000+ recordings spanning a century of field recording.</description><content:encoded><![CDATA[

<h2>BBC Sound Effects
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A searchable archive of 30,000+ BBC sound effects, free for personal and educational use</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free (personal/educational); license required for commercial</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://sound-effects.bbcrewind.co.uk/" target="_blank" rel="noopener">sound-effects.bbcrewind.co.uk</a></td>
      </tr>
  </tbody>
</table>
<p>The BBC has been recording sound for nearly a century. Every radio drama, documentary, and field report generated audio artifacts; rain, footsteps on gravel, jungle ambience, creaking ship hulls, typewriter clatter, distant church congregations, someone vigorously washing their hands. They digitized the whole thing and put it online.</p>
<ol>
<li>
<p>Search any word, and it instantly finds matching recordings. &ldquo;Rain&rdquo; returns downpours, drizzles, and thunderstorms recorded on three continents. &ldquo;Footsteps&rdquo; gives you gravel, carpet, snow, wood, and wet leaves; each with multiple takes. The specificity is the point. A BBC engineer probably recorded the exact sound you need decades before you were born.</p>
</li>
<li>
<p>Filter by category (transport, weather, footsteps, machinery, animals), duration (short clicks to minute-long atmospheres), and continent where the recording was made. Want a 30-second jungle ambience recorded in South America? That&rsquo;s three clicks.</p>
</li>
<li>
<p>Every sound previews in the browser. The built-in mixer lets you layer multiple recordings (rain under footsteps, traffic behind dialogue, wind over a room tone), and download the mix as a single file. No DAW needed for quick comps.</p>
</li>
<li>
<p>The honest caveat: you need to credit the BBC for personal/educational use, and commercial use requires a license. Download quality is generally 192kbps MP3, fine for prototyping and web use but not broadcast archival. Some older recordings have noticeable tape hiss, which is either a limitation or a feature depending on what you&rsquo;re making.</p>
</li>
</ol>
<p><strong>Worth your time if:</strong> you need real, human-recorded sound effects and don&rsquo;t want to sift through synthetic stock libraries or pay per-download on audio marketplaces.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/buzz/" >Buzz: Transcribe &amp; Translate Audio Offline</a></strong> The opposite pipeline; turn audio into text when you need to caption or transcribe sound effects.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/petrichor/" >Petrichor: Native macOS Offline Music Player</a></strong> For listening to ambient mixes built from BBC sound layers.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/free-background-noise/" >Best Free Background Noise Websites and Apps for Focus, Sleep &amp; Relaxation</a></strong> Different source of ambient audio, focused on focus and sleep rather than production.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Airport Simulator</title><link>https://www.tmfnk.com/enjoy/games/airport-simulator/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/enjoy/games/airport-simulator/</guid><description>The spiritual successor to Flight Control. Drag colored planes to matching runways in a browser-based ATC game that gets your heart rate up in minutes.</description><content:encoded><![CDATA[

<h2>Airport Simulator
    </h2><p>Liisa Apunen. Browser. <a href="https://airport.apunen.com" target="_blank" rel="noopener">Play it here</a>.</p>
<p>I crashed my first plane within 15 seconds. My second within 30. Then something clicked: drag the plane to the colored dot at the end of its matching runway, and it lands. Dragging to the wrong color does nothing. Not dragging at all means midair collisions. The game hit 852 points on Hacker News in its first three days, and after playing for an hour I understand why.</p>
<ol>
<li>
<p>The core mechanic is the same one that made Flight Control (2009) an iPhone classic: draw a path from a plane to its runway. Planes are color-coded, runways are color-coded, and the game trusts you to figure this out on your own. There are no instructions. You learn by crashing.</p>
</li>
<li>
<p>Departing planes add the twist that makes this harder than Flight Control. Every runway periodically launches a plane that rolls across the taxiway at walking speed. You cannot control departing planes, so you have to route incoming traffic around them. The predictable congestion is the whole challenge: knowing a departure is coming and clearing the airspace for it.</p>
</li>
<li>
<p>The difficulty ramp is well tuned: spawn rate goes from one plane every 5 seconds to one every 1.5 seconds over the first 5 minutes, and the max aircraft on screen goes from 3 to 12. The game never spikes. It just quietly becomes impossible, and you keep playing anyway because your last run was 86 landings and this one might hit 90.</p>
</li>
<li>
<p>Built with SvelteKit and PocketBase, 3D pixel art in a pastel palette, bilingual interface (Finnish/English). The developer added a hide-scoreboard button within hours of HN feedback and cleaned the leaderboard of fake scores the same day. Responsive development.</p>
</li>
<li>
<p>The leaderboard shows your nearest airport alongside your score, which is a nice touch. It also reveals the HN audience: someone landed 90 planes in 7 minutes and 29 seconds. That is the score to beat.</p>
</li>
</ol>
<p><strong>Play it if:</strong> you miss Flight Control or Mini Metro and want something that lives in a browser tab. <strong>Skip it if:</strong> the idea of managing 12 simultaneous crash vectors does not sound like fun.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/web-swing-midtown-nyc/" >Web Swing Through Midtown NYC</a></strong> Another browser game that nails one mechanic perfectly, released the same day.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/mooncraft/" >Mooncraft: A Lunar Trucking Sim Built in Plain JavaScript</a></strong> Same indie-browser-game energy; one person, one mechanic, no fluff.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/starfling/" >Starfling: Tap, Release, Sling Between Stars</a></strong> The same learn-by-failing loop, astrophysics edition.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Install depth-anything.cpp on macOS: Local Depth Maps from One Photo</title><link>https://www.tmfnk.com/use/tutorials/depth-anything-cpp-macos/</link><pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/depth-anything-cpp-macos/</guid><description>Why monocular depth maps matter, then clone, build, download DA3-BASE, and run da3-cli on Apple Silicon.</description><content:encoded><![CDATA[

<p>A photo is flat. A depth map tells you which pixels sit closer and which sit farther. That is enough for messy cutouts, cheap parallax, a rough point cloud, or a focus effect, without a stereo camera or LiDAR.</p>
<p><a href="https://github.com/mudler/depth-anything.cpp" target="_blank" rel="noopener">depth-anything.cpp</a> is a C++17/ggml port of Depth Anything 3. It is a CLI you run on your own machine. No Ollama. No PyTorch. On a Mac I went from empty folder to first PNG in about twenty minutes.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>You want relative depth from one RGB image, offline, on Apple Silicon.</li>
<li>Clone with <code>--recursive</code>, then build CPU Release (<code>DA_GGML_METAL=OFF</code> on my M2).</li>
<li>Put <code>depth-anything-base-q4_k.gguf</code> (~99MB) in <code>models/</code>.</li>
<li>Run <code>da3-cli depth ... --png out.png</code>. The flag is <code>--png</code>, not <code>--out</code>.</li>
<li>Metal segfaulted on me (exit 139). CPU finished.</li>
</ul>
<p><strong>Prerequisites:</strong> macOS on Apple Silicon, plus <code>git</code>, <code>cmake</code>, <code>clang++</code> (Xcode CLT), and either <code>curl</code> or the <code>hf</code> CLI.</p>
<h2>Why bother
    </h2><p>Monocular depth is an educated guess. One JPG does not contain real meters. The model still produces a near/far field that is useful for a lot of day-to-day work: pull a subject off a busy background, feed parallax into an editor, export <code>--glb</code> or a reconstruct/<code>--ply</code> mesh once you move to larger weights, or prototype perception code without buying a depth sensor. And the photo never leaves disk.</p>
<p>It will not replace a tape measure. The PNG is relative depth (farther usually looks lighter in the default export). True metric scale needs the nested/metric GGUFs and a different setup. Use BASE first. If the images look sane, then chase metric.</p>
<p>I reached for the C++ port instead of a notebook because ggml plus one binary means one compile, one weight file, and no torch/CUDA dependency fight. Local chat apps will not load these GGUFs. Think of <code>da3-cli</code> the way you think of <code>ffmpeg</code>: you call it, you get a file, you move on.</p>
<h2>Step 1: Clone the repo
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> ~/Documents
</span></span><span class="line"><span class="cl">git clone --recursive https://github.com/mudler/depth-anything.cpp
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> depth-anything.cpp</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>You should see <code>third_party/ggml</code> on disk. If you forgot <code>--recursive</code>, the build will fail later. Fix with <code>git submodule update --init --recursive</code>.</p>
<h2>Step 2: Build the CLI (CPU)
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cmake -B build -DCMAKE_BUILD_TYPE<span class="o">=</span>Release -DDA_BUILD_CLI<span class="o">=</span>ON -DDA_GGML_METAL<span class="o">=</span>OFF
</span></span><span class="line"><span class="cl">cmake --build build -j</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>When it works, <code>build/examples/cli/da3-cli</code> exists. I tried <code>-DDA_GGML_METAL=ON</code> first. Metal came up, weights moved to the GPU, then the process died with exit 139. CPU ran clean. Stay on CPU until Metal works on your box.</p>
<h2>Step 3: Download DA3-BASE weights
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p models
</span></span><span class="line"><span class="cl">curl -L --fail -o models/depth-anything-base-q4_k.gguf <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="s2">&#34;https://huggingface.co/mudler/depth-anything.cpp-gguf/resolve/main/depth-anything-base-q4_k.gguf&#34;</span>
</span></span><span class="line"><span class="cl">ls -lh models/depth-anything-base-q4_k.gguf</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Or: <code>hf download mudler/depth-anything.cpp-gguf depth-anything-base-q4_k.gguf --local-dir models</code>.</p>
<p>You want a file around 99MB. Q4_K BASE is the right first download: small, fast, good enough to decide if this tool fits your photos. Bigger and metric variants sit in the same Hugging Face repo when you need them.</p>
<h2>Step 4: Run a test photo
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./build/examples/cli/da3-cli depth <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --model models/depth-anything-base-q4_k.gguf <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --input ~/Downloads/your-photo.jpg <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --png ./depth.png</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>I got a line like <code>depth 378x504 min=0.5225 max=1.6810</code> and a <code>depth.png</code> next to the command. Your size and range will differ. Open the PNG beside the source. You want a coherent near/far field, not salt-and-pepper noise.</p>
<p>Floating point for code: add <code>--pfm depth.pfm</code>. 3D: try <code>--glb</code> or reconstruct after BASE looks right on your domain.</p>
<blockquote>
  <p><strong>Pro tip:</strong> leave the binary and GGUF in the build tree. There is no app-store install. You keep calling the same two paths.</p>
</blockquote>
<h2>Cleanup
    </h2><p>Nothing to uninstall. Drop the clone if you are done:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">rm -rf ~/Documents/depth-anything.cpp</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>If it breaks:</strong></p>
<ul>
<li><code>unknown flag: --out</code> means you wanted <code>--png</code> or <code>--pfm</code>.</li>
<li>Exit 139 after Metal init: rebuild with <code>-DDA_GGML_METAL=OFF</code>.</li>
<li>Missing ggml: re-clone with <code>--recursive</code>, or init the submodules.</li>
</ul>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/local-slm-data-cleaner-macos/" >Fine-Tune a Local SLM to Clean Master Data on Your Mac</a></strong> Another Apple Silicon local-ML path that stays off the cloud.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/leann-local-rag-on-macos/" >Set Up LEANN for Private Local RAG on macOS</a></strong> Local retrieval when you want private search next to vision tools.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/run-autonomous-llm-research-with-autoresearch/" >Run Autonomous LLM Research with autoresearch: Let AI Agents Train Models Overnight</a></strong> Heavier local training loop when a one-shot CLI is not enough.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>How to Clone a Voice and Build a Story with Voicebox</title><link>https://www.tmfnk.com/use/tutorials/voicebox-voice-cloning-stories/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/voicebox-voice-cloning-stories/</guid><description>Set up Voicebox, clone a voice from 10 seconds of audio, and build a multi-speaker story with the Stories Editor — all local, no cloud.</description><content:encoded><![CDATA[

<p>Voicebox is a free, open-source AI voice studio that runs entirely on your machine. No cloud, no accounts, no ElevenLabs bill. In this tutorial you&rsquo;ll install it, clone a voice from 10 seconds of audio, and render a two-speaker story — all local.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>Install Voicebox from GitHub releases (macOS/Windows, ~5 min)</li>
<li>Clone a voice from 10-30 seconds of clean audio (one drag-and-drop, ~2 min)</li>
<li>Generate speech from any text in that voice (one click, seconds)</li>
<li>Build a multi-speaker story in the Stories Editor timeline (drag, position, render)</li>
</ul>
<p><strong>Prerequisites:</strong> macOS 11+ or Windows 10+ with 8GB RAM and 5GB free disk. GPU optional but recommended. Download the right build from <a href="https://github.com/jamiepine/voicebox/releases" target="_blank" rel="noopener">github.com/jamiepine/voicebox/releases</a>.</p>
<h2>Step 1: Install Voicebox
    </h2><p><strong>macOS (Apple Silicon):</strong></p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Download and extract</span>
</span></span><span class="line"><span class="cl">curl -L https://github.com/jamiepine/voicebox/releases/latest/download/voicebox_aarch64.app.tar.gz -o voicebox.tar.gz
</span></span><span class="line"><span class="cl">tar -xzf voicebox.tar.gz
</span></span><span class="line"><span class="cl">mv Voicebox.app /Applications/</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>macOS (Intel) or Windows:</strong> Grab the matching <code>.msi</code> or <code>.tar.gz</code> from the releases page and install normally.</p>
<p>Launch Voicebox. The first run downloads your chosen TTS engine model automatically (Qwen 1.7B is ~3.5 GB; Kokoro is ~350 MB if you want to start small). Wait for the green status indicator in the bottom-left.</p>
<h2>Step 2: Clone a voice from audio
    </h2><p>Go to <strong>Profiles → + New Profile</strong> and pick a cloning engine. <strong>Qwen3-TTS 1.7B</strong> gives the best overall quality across 10 languages. <strong>Chatterbox Multilingual</strong> covers 23 languages if you need broader support.</p>
<p>Drag in a WAV file (MP3/M4A/FLAC work too) with 10-30 seconds of clear, quiet speech. No music, no background noise. Click <strong>Create</strong>.</p>
<p>Voicebox extracts a voice embedding and stores it with the profile. Test it immediately with a phrase like <code>&quot;Hello, this is a test of my voice profile.&quot;</code> If it sounds robotic, add a second sample — different tone or speaking style helps.</p>
<blockquote>
  <p><strong>Pro tip:</strong> Record in a quiet room with the mic 6-12 inches from your mouth. Soft furnishings reduce echo. You don&rsquo;t need a studio — just no fans, AC, or keyboard clatter.</p>
</blockquote>
<h2>Step 3: Generate speech
    </h2><p>Select your new profile from the dropdown in the <strong>Generate</strong> tab. Type or paste your text. Use normal punctuation for natural pauses. ALL CAPS adds emphasis; italics for subtle emphasis.</p>
<p>Click <strong>Generate</strong>. The audio appears in seconds (faster with a GPU). Preview, then download as WAV.</p>
<p>For long scripts, Voicebox auto-chunks with crossfade — no manual splitting needed.</p>
<h2>Step 4: Build a multi-speaker story
    </h2><p>Go to <strong>Stories → + New Story</strong>. Create one track per speaker.</p>
<ol>
<li><strong>Add clips</strong> — drag from Generation History, generate new clips inline, or upload audio files</li>
<li><strong>Position</strong> — drag clips onto the timeline, trim edges, adjust spacing</li>
<li><strong>Render</strong> — click the render button to export the mixed audio</li>
</ol>
<p>The Stories Editor is a lightweight DAW timeline. It&rsquo;s not full-featured yet (crossfades and effects are coming), but it handles the core use case: multi-host podcasts, audiobook narration with character voices, game dialogue scenes.</p>
<blockquote>
  <p><strong>Pro tip:</strong> Clone two voices — one for each speaker — then generate all clips first, drag them into the timeline, and arrange. You&rsquo;ll see the whole conversation laid out visually.</p>
</blockquote>
<h2>Cleanup
    </h2><p>Voicebox stores profiles and audio in:</p>
<ul>
<li>macOS: <code>~/Library/Application Support/sh.voicebox.app/</code></li>
<li>Windows: <code>%APPDATA%/sh.voicebox.app/</code></li>
</ul>
<p>To reset: delete the <code>profiles</code> folder and restart Voicebox.</p>
<p><strong>If it breaks:</strong></p>
<ul>
<li><strong>Model download hangs:</strong> Check disk space. Models range from 350 MB to 8 GB.</li>
<li><strong>Robotic voice:</strong> Add more samples. One 10-second clip is the minimum; two clips with different tones is better.</li>
<li><strong>No audio on macOS:</strong> Make sure Voicebox has microphone access in System Settings → Privacy &amp; Security → Microphone.</li>
</ul>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/how-to-transcribe-audio/" >How to Transcribe or Translate Audio Files with Buzz</a></strong> Buzz is the other half of the local voice loop — turn speech into text when Voicebox turns text into speech.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/leann-local-rag-on-macos/" >Set Up LEANN for Private Local RAG on macOS</a></strong> Another local-first AI tool that runs entirely on your machine, no cloud.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/explore-the-vowel-space-with-interactive-sound-synthesis/" >Explore the Vowel Space: Interactive Sound Synthesis</a></strong> A different angle on voice — how vowel sounds actually work and why they matter for synthetic speech.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Beyond LLM Routing: A New Way to Optimize Agent Pipelines</title><link>https://www.tmfnk.com/see/videos/beyond-llm-routing-brain-melissa/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/beyond-llm-routing-brain-melissa/</guid><description>Melissa from UC Berkeley presents BRAIN, a system that dynamically selects agent pipeline configurations per query, cutting costs by 89% while matching top accuracy.</description><content:encoded><![CDATA[

<h2>🎥 Beyond LLM Routing: A New Way to Optimize Agent Pipelines
    </h2><p>Melissa (UC Berkeley). Duration: 30 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/PlGC7sA8KEs?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs" target="_blank" rel="noopener">0:00</a> The agent configuration problem</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=172s" target="_blank" rel="noopener">2:52</a> How people configure systems today (vibe coding)</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=364s" target="_blank" rel="noopener">6:04</a> Pipeline changes beat model changes</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=501s" target="_blank" rel="noopener">8:21</a> Per-query variance</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=684s" target="_blank" rel="noopener">11:24</a> The Matei vs. Melissa example</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=799s" target="_blank" rel="noopener">13:19</a> Research question formulation</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=932s" target="_blank" rel="noopener">15:32</a> BRAIN system overview</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=1148s" target="_blank" rel="noopener">19:08</a> Query characteristics</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=1225s" target="_blank" rel="noopener">20:25</a> Per-configuration predictors</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=1346s" target="_blank" rel="noopener">22:26</a> Results and cost reduction</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=1432s" target="_blank" rel="noopener">23:52</a> Classical ML beats end-to-end deep learning</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=1565s" target="_blank" rel="noopener">26:05</a> Future work and coding agents</li>
</ul>
<p>Most teams building agent systems configure them by gut feel: pick a strong model within budget, run A/B tests, ship if it passes. Melissa ran the numbers on that approach and found costs vary by three orders of magnitude for the same accuracy. She presents BRAIN, a system that picks the right pipeline for each query automatically.</p>
<ol>
<li>
<p><strong>Choosing an agent architecture matters more than choosing a model.</strong> Fix the model to GPT-5 Nano and vary the pipeline (LM-only, simple RAG, agentic RAG, full agent loop), and you span three orders of magnitude in cost and a wide accuracy range. Vary the model while holding the pipeline fixed, and the range is much smaller. Pipeline configuration, not model selection, is where the real leverage is.</p>
</li>
<li>
<p><strong>Current industry practice is vibe configuration.</strong> Melissa ran a study of production agent systems. Teams pick a model from the Arena leaderboard, run some test cases, and ship. Nobody systematically considers cost-performance tradeoffs. And anecdotally, the bill is starting to bite: Microsoft and Uber recently flagged that their AI spend no longer justifies the automation gains.</p>
</li>
<li>
<p><strong>Queries vary massively in what they need, even within the same workload.</strong> &ldquo;Who is Matei Zaharia?&rdquo; GPT-5 already knows, answer with LM only. &ldquo;Who is Melissa?&rdquo; Same semantic structure, but the model hallucinates. It needs web search. A static pipeline that handles both cases is either over-engineered for the easy ones or under-powered for the hard ones.</p>
</li>
<li>
<p><strong>BRAIN&rsquo;s core idea: transform the query into structured characteristics, then predict the best configuration.</strong> Instead of feeding raw natural language to a router, BRAIN uses an LM to generate workload-specific binary features for each query: &ldquo;involves a famous person?&rdquo;, &ldquo;requires multi-hop reasoning?&rdquo;, &ldquo;references cooking?&rdquo;. This vector is much closer to the system configuration space than the raw text is.</p>
</li>
<li>
<p><strong>The characteristics are generated per-workload, not universal.</strong> Given 25 sample queries from a benchmark, an LM proposes the dimensions that separate them. The FinanceBench characteristics look different from the BrowseComp ones. This keeps the feature space small and meaningful.</p>
</li>
<li>
<p><strong>BRAIN trains one classical ML predictor per candidate configuration.</strong> Each predictor (XGBoost or logistic regression) learns: given a query with these characteristics, will this configuration answer it correctly? At runtime, a new query hits all predictors, and BRAIN picks the cheapest configuration whose predictor says it will succeed.</p>
</li>
<li>
<p><strong>The results: 89% cost reduction at 100% static accuracy on BrowseComp Plus.</strong> BRAIN is the only method tested that meets the 100% accuracy target across all three benchmarks (MUSIC, BrowseComp Plus, FinanceBench) while cutting cost. And the savings come from doing less work per query, not from guessing wrong on hard ones.</p>
</li>
<li>
<p><strong>Classical ML beats end-to-end deep learning here.</strong> Melissa tried fine-tuning BERT and transformers on the profiling data to predict configurations directly. They performed worse than XGBoost on the query characteristics. The reason: profiling data is expensive. Just one benchmark cost $11,000 to profile. Deep learning needs more data than that to beat a good feature engineering approach.</p>
</li>
<li>
<p><strong>Per-query routing is the natural next step beyond per-workload tuning.</strong> Most optimization today happens at the workload level (tune one pipeline for all queries). BRAIN shows that the intra-workload variance is large enough that per-query routing is worth the complexity. The system that treats every query the same is burning budget on easy ones and under-serving hard ones.</p>
</li>
<li>
<p><strong>The next frontier is coding agents.</strong> Melissa is extending BRAIN beyond retrieval-heavy agent systems to coding agents, where the configuration space includes tools, context windows, and test strategies. That is a harder problem. It is also where most production money is going.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/is-grep-all-you-need/" >Is Grep All You Need? How Agent Harnesses Reshape Agentic Search</a></strong> Melissas argument that pipeline architecture beats model selection echoes the finding that simple search with agent orchestration outperforms complex RAG pipelines.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/state-of-agentic-coding-6-armin-ronacher-ben-vinegar/" >State of Agentic Coding #6 with Armin Ronacher and Ben Vinegar</a></strong> The practical economics of agentic coding pipelines, covering exactly the cost-accuracy tradeoffs that BRAIN aims to solve automatically.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/average-is-all-you-need/" >The Magic of Average: Why LLMs Make Simple the New Powerful</a></strong> The insight that simpler configurations often outperform expensive ones mirrors BRAINs finding that the cheapest pipeline is frequently the right one.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/harness-engineering-lilian-weng/" >Harness Engineering for Self-Improvement: Lilian Weng&rsquo;s Survey</a></strong> The companion piece on the engineering side of agent systems: how to design the harness and orchestration layer that BRAIN then optimizes over.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Alex Hormozi: AI Is a Tool, Thinking Is the Asset</title><link>https://www.tmfnk.com/see/videos/hormozi-ai-business-modern-wisdom/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/hormozi-ai-business-modern-wisdom/</guid><description>Alex Hormozi on why outsourcing thinking to AI makes you dumber, the block-tower theory of long-term business building, and the single best financial decision he ever made.</description><content:encoded><![CDATA[

<h2>🎥 Alex Hormozi: AI Is a Tool, Thinking Is the Asset
    </h2><p>Alex Hormozi on Modern Wisdom with Chris Williamson. Duration: ~90 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/HwmwyBgzj8c?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c" target="_blank" rel="noopener">0:00</a> His mom passed four weeks after his $106M launch</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=172s" target="_blank" rel="noopener">2:52</a> AI is being used in the wrong places</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=364s" target="_blank" rel="noopener">6:04</a> The $350K AI that replaced $11K/month VAs</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=501s" target="_blank" rel="noopener">8:21</a> Stakes, reality as moat, content strategy</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=684s" target="_blank" rel="noopener">11:24</a> Outsourcing thinking to AI makes you dumber</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=799s" target="_blank" rel="noopener">13:19</a> The block tower analogy for long-term thinking</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=932s" target="_blank" rel="noopener">15:32</a> Why $10M and $100M businesses are built differently</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=1148s" target="_blank" rel="noopener">19:08</a> Customer retention math: the hole in the bus</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=1346s" target="_blank" rel="noopener">22:26</a> Hiring: stop looking for unicorns</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=1565s" target="_blank" rel="noopener">26:05</a> Selling out of your own wallet</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=1838s" target="_blank" rel="noopener">30:38</a> The value equation</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=2100s" target="_blank" rel="noopener">35:00</a> Price as a signal for value</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=2400s" target="_blank" rel="noopener">40:00</a> His father&rsquo;s immigrant story</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=2700s" target="_blank" rel="noopener">45:00</a> Marrying the right person</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=3000s" target="_blank" rel="noopener">50:00</a> Incentives drive all behavior</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=3300s" target="_blank" rel="noopener">55:00</a> Where to start: just get an LLC and make your first dollar</li>
</ul>
<p>Hormozi showed up to this conversation four weeks after his mother died, right after a $106M launch. That loss frames everything that follows. He doesn&rsquo;t lecture from a pedestal; he&rsquo;s working through things in real time.</p>
<ol>
<li>
<p><strong>Don&rsquo;t outsource your thinking to AI.</strong> Hormozi pulls up three frontier models, asks them the same question, and gets three different answers. That&rsquo;s the tell. Judgment is still the bottleneck. Hand decision-making to the model and you atrophy. Your brain is the best asset you have right now. Keep it sharp.</p>
</li>
<li>
<p><strong>Most people are using AI in the wrong places.</strong> He watched a business drop $350,000 building an AI system to replace 11 virtual assistants that cost $11,000 a month. Three years of VA costs for something that wasn&rsquo;t even the constraint. The company still needed more customers. The AI project did nothing for growth. Hormozi says it was a distraction wearing an efficiency costume.</p>
</li>
<li>
<p><strong>The foundation determines the ceiling.</strong> Hormozi&rsquo;s block tower analogy: five seconds to build? You stack blocks however. Five years and unlimited blocks? You dig a foundation, pick different materials, engineer for height. Most entrepreneurs build for a five-second exit and then wonder why they can&rsquo;t scale past one story. Focus and patience are competitive advantages precisely because they&rsquo;re so anti-human.</p>
</li>
<li>
<p><strong>The fastest way to $10M is not the fastest way to $100M.</strong> A solo agency can hit a million in a year with one good client. A hundred million demands recurring revenue, systems, and a product people actually stick with. The trap is building a $10M business on a foundation that can&rsquo;t hold a $100M one, then trying to stretch it.</p>
</li>
<li>
<p><strong>The hole in the back of the bus kills growth.</strong> Company A gets 100 customers a year and keeps them all. Company B gets 100 a year and loses all 100. Three years in, both show $3M revenue on paper. But Company B is spending 3x on acquisition just to tread water. Retention isn&rsquo;t a nice-to-have. It&rsquo;s the structural difference between a business that compounds and one running on a treadmill.</p>
</li>
<li>
<p><strong>You&rsquo;re not hiring a unicorn. You&rsquo;re hiring a rhino, a horse, and some fireflies.</strong> Founders want someone who&rsquo;s lived their exact life and knows everything they know. That person doesn&rsquo;t exist. Break the role down: rhino (the specialist skill), horse (the general capability), fireflies (the culture sparkle). You can find those three people faster than one mythical creature.</p>
</li>
<li>
<p><strong>Selling out of your own wallet destroys margins.</strong> If you&rsquo;re good at fixing cars, you think it&rsquo;s easy; so you charge less than it&rsquo;s worth to the person who can&rsquo;t do it. Result: no margin, no capacity to hire, endless time-for-money trap. Hormozi&rsquo;s move: add a zero to your price. Then figure out what you&rsquo;d have to deliver to make it fair. The exercise forces you to build a premium offer.</p>
</li>
<li>
<p><strong>The value equation runs every transaction.</strong> Outcome × perceived likelihood ÷ (time delay + effort/sacrifice). Most founders obsess over the outcome. The leverage sits in the other three, especially perceived likelihood. That&rsquo;s why proof, testimonials, and authority work; they make the same outcome feel more certain.</p>
</li>
<li>
<p><strong>Reality is the moat in content.</strong> AI is flooding feeds with generated slop. The only durable edge is having actually done the thing. Hormozi points to Musk, Bezos, Buffett: they&rsquo;re the biggest influencers in their domains because they built the real businesses first. No track record? Document the work. Show the struggle. The real part can&rsquo;t be faked.</p>
</li>
<li>
<p><strong>The best financial decision he ever made was who he married.</strong> He&rsquo;s unusually vulnerable here. His wife Ila has bigger dreams than he does, carries him through troughs of apathy, and runs the operational side of the business. He would&rsquo;ve taken his foot off the gas and bled talent without her. A reminder that the biggest business decision you make might not look like a business decision at all.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/first-year-in-sales-technical-founder/" >My First Year in Sales as a Technical Founder</a></strong> The kind of raw, practical sales reality Hormozi keeps coming back to; fundamentals over flash.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/know-your-customers/" >Know Your Customers&rsquo; Jobs to Be Done</a></strong> A systematic way to get at what Hormozi calls the value equation: the outcome the customer actually hires you for.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/lennys-podcast-pricing-ai-product-madhavan-ramanujam/" >Pricing Your AI Product — Lessons from 400+ Companies and 50 Unicorns</a></strong> Madhavan Ramanujam on outcome-based pricing, directly extending Hormozi&rsquo;s point that price is the strongest signal of value.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/good-to-great-by-jim-collins/" >Good to Great by Jim Collins</a></strong> Collins&rsquo; disciplined-people, disciplined-thought, disciplined-action is the book-length version of Hormozi&rsquo;s argument that focus and patience are the only moats that last.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>The Yes Brain By Daniel Siegel</title><link>https://www.tmfnk.com/read/books/the-yes-brain-by-daniel-siegel/</link><pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/books/the-yes-brain-by-daniel-siegel/</guid><description>How to help kids develop a resilient, open state of mind instead of getting stuck in reactivity and stubbornness.</description><content:encoded><![CDATA[

<h2>📚 The Yes Brain by Daniel J. Siegel
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Author</td>
          <td>Daniel J. Siegel, M.D.</td>
      </tr>
      <tr>
          <td>Year</td>
          <td>2018</td>
      </tr>
      <tr>
          <td>Pages</td>
          <td>208</td>
      </tr>
      <tr>
          <td>Read it if</td>
          <td>you are tired of power struggles with your kid and want a framework for why they happen and what to do about it</td>
      </tr>
  </tbody>
</table>
<p>I picked this up because I needed a language for what happens when a child shuts down, gets stubborn, or melts down over something small. Siegel gives you that language, and it reduces to one clean distinction: are they in a Yes Brain state or a No Brain state?</p>
<ol>
<li>
<p>The core distinction is everything. A child in a Yes Brain state is open, curious, flexible, and resilient. They can make decisions, handle novelty, and learn from mistakes. A child in a No Brain state is rigid, reactive, and stuck. They are at the mercy of their circumstances and their feelings, unable to shift their emotions, complaining about reality instead of responding to it. They worry obsessively about making a mistake or facing something new. Stubbornness rules the day. The same kid can flip between these states depending on hunger, sleep, or the moment&rsquo;s emotional weight.</p>
</li>
<li>
<p>Siegel reframes the standard parenting milestones. The &ldquo;terrible twos, terrifying threes, and frustrating fours&rdquo; are not a punishment you endure. They are developmental windows where the brain is building its regulatory architecture, and the child needs you to co-regulate, not escalate. A two-year-old having a tantrum is not being bad. Their prefrontal cortex is under construction.</p>
</li>
<li>
<p>The goal is not to eliminate No Brain states but to build the skill of returning to a Yes Brain after being in a No Brain mode. Siegel calls this equanimity. It is a learnable skill, and it is the foundation of resilience. When kids develop the ability to notice they are stuck and find their way back to openness, you have given them something that will serve them for life.</p>
</li>
<li>
<p>The ancient Greeks had a word for the kind of happiness that comes from this balanced state: eudaimonia. It is composed of meaning, connection, and peaceful connectedness. Not the absence of struggle but the capacity to remain whole within it. Siegel argues that this is one of the most empowering gifts we can give our children, and that building a coherent narrative about their own experience is how they get there.</p>
</li>
<li>
<p>Post-traumatic growth is real, and it depends on narrative. Children who can tell a coherent story about something hard that happened to them integrate the experience instead of being defined by it. A coherent narrative is not about making the trauma sound fine. It is about making sense of what happened, how you felt, and how you got through it. That process literally reshapes the brain&rsquo;s response to future stress.</p>
</li>
<li>
<p>&ldquo;Behavior is communication.&rdquo; This is the line I keep coming back to. When a child acts out, they are not giving you a problem to solve. They are sending a signal about an unmet need. A No Brain state is a distress signal. Responding to the behavior instead of the signal escalates the fight. Responding to the signal helps the child return to a Yes Brain and builds the trust that makes future regulation easier.</p>
</li>
<li>
<p>The book is written for parents but applies to anyone who works with children or, honestly, to anyone who wants to understand their own reactive patterns. Adults have No Brain states too. The same framework applies. The difference is that as an adult, you are responsible for building your own equanimity rather than relying on a parent to co-regulate you.</p>
</li>
</ol>
<p><strong>Verdict:</strong> Read it. The core idea is simple enough to explain in a paragraph, but the book earns its length by giving you the language for dozens of real situations. My main criticism is that it is repetitive in the middle chapters. The last third, especially the material on post-traumatic growth and coherent narrative, is where the deeper value lives. If you only have time for one parenting book, this might be it.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/books/good-inside-by-dr-becky-kennedy/" >Good Inside: A Practical Guide by Dr. Becky Kennedy</a></strong> Both books center on the idea that a child&rsquo;s difficult behavior is communication, not defiance.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/the-book-you-wish-your-parents-had-read/" >The Book You Wish Your Parents Had Read by Philippa Perry</a></strong> A complementary take on how adult emotional patterns trace back to childhood, with a similar emphasis on repair and narrative.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/born-for-love-by-bruce-d-perry-and-maia-szalavit/" >Born for Love by Bruce D. Perry</a></strong> Explores the neuroscience of empathy and connection, supporting Siegel&rsquo;s argument that relationships shape brain development.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/what-happened-to-you/" >What Happened to You by Bruce D. Perry and Oprah Winfrey</a></strong> On trauma, narrative, and the power of asking &ldquo;what happened to you&rdquo; instead of &ldquo;what is wrong with you.&rdquo;</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Situational Awareness: Leopold Aschenbrenner's Map of the Decade Ahead</title><link>https://www.tmfnk.com/read/articles/situational-awareness-leopold-aschenbrenner/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/situational-awareness-leopold-aschenbrenner/</guid><description>Aschenbrenner's 2024 essay series argues AGI by 2027 and superintelligence by decade's end—from OOM trendlines to trillion-dollar clusters, lab security, and a coming government 'Project.'</description><content:encoded><![CDATA[
<p><em>Source: <a href="https://situational-awareness.ai/" target="_blank" rel="noopener">Situational Awareness</a> · Leopold Aschenbrenner, June 2024</em></p>
<p>In June 2024, Leopold Aschenbrenner—Columbia valedictorian at 19, former OpenAI superalignment researcher—published <a href="https://situational-awareness.ai/" target="_blank" rel="noopener">Situational Awareness: The Decade Ahead</a>. The intro alone reads like science fiction until you notice the footnotes are compute curves and transformer counts. His claim: a few hundred people in SF already see what is coming; everyone else is still debating whether ChatGPT is glorified autocomplete. The series is five essays plus a coda. Whether you buy the timeline or not, it is the clearest written map of what the frontier labs&rsquo; optimists actually believe.</p>
<ol>
<li>
<p><strong>The core prediction is a stacked extrapolation, not a vibe.</strong> Essay I (&ldquo;Counting the OOMs&rdquo;) traces GPT-2 → GPT-4 as a jump from ~preschooler to ~smart high-schooler in four years. Add ~0.5 orders of magnitude per year in compute, ~0.5 in algorithmic efficiency, plus &ldquo;unhobbling&rdquo; (chatbot → agent → long-horizon reasoner), and <strong>AGI by 2027</strong> is &ldquo;strikingly plausible&rdquo; in his framing—not a proof, a trendline argument.</p>
</li>
<li>
<p><strong>Human-level is a waypoint, not a ceiling.</strong> Essay II: once you have many millions of AGI copies, they can automate AI research itself—compressing a decade of algorithmic progress into a year or less. That is the <strong>intelligence explosion</strong> thesis: human-level systems become vastly superhuman fast. The power and the failure modes scale together.</p>
</li>
<li>
<p><strong>The industrial story is literal.</strong> Essay IIIa: boardroom talk already moved from $10B clusters to $100B to <strong>trillion-dollar</strong> training runs. He expects tens of percent growth in US electricity this decade, GPU buildouts from Pennsylvania shale power to Nevada solar—an industrial mobilization not seen in fifty years. Stargate and hyperscaler capex in 2025–26 look less absurd read against this frame.</p>
</li>
<li>
<p><strong>Security and alignment are the bottlenecks he fears most.</strong> IIIb: leading labs treat AGI weight security like a startup problem while nation-state espionage is the threat model. IIIc: controlling systems smarter than you is an <strong>unsolved</strong> technical problem that gets harder during a rapid capability spike—not &ldquo;we&rsquo;ll figure it out later.&rdquo; IIId: superintelligence is decisive for economic and military order; the US–China race is existential in his telling, not a trade dispute.</p>
</li>
<li>
<p><strong>&ldquo;The Project&rdquo; is the endgame.</strong> Essay IV: by 2027–28 the US national security state wakes up; superintelligence is not a product feature you ship from a Series B. Somewhere in a SCIF, a government AGI program begins—Oppenheimer parallels invited explicitly. He dedicates the series to Ilya Sutskever. The acknowledgments list half the alignment debate (Leike, Karnofsky, Shulman, Dwarkesh, and TMFNK VIP <a href="https://tmfnk.com/read/articles/VIP-Avital-Balwit.md" target="_blank" rel="noopener">Avital Balwit</a>).</p>
</li>
<li>
<p><strong>You might think this is SF hubris—and the track record of AI timelines deserves skepticism.</strong> Aschenbrenner admits the &ldquo;few hundred people&rdquo; might be a historical footnote. Critics note: extrapolating OOMs assumes no physical, regulatory, or economic cliff; enterprise AI still shows weak ROI in surveys like <a href="https://www.tmfnk.com/read/articles/mit-genai-divide-state-of-ai-in-business-2025/" >MIT&rsquo;s GenAI Divide</a>; &ldquo;AGI&rdquo; is undefined enough to always move one year out. Fair pushback. The series is still worth reading because <strong>the people building the models largely operate as if the trendlines matter</strong>—whether or not 2027 is the year.</p>
</li>
<li>
<p><strong>Two years in, some threads aged visibly.</strong> We got reasoning models, agent hype, and megawatt datacenter headlines—not yet superintelligence or a public &ldquo;Project.&rdquo; Lab security remains embarrassing; export controls and chip friction are real. The intro&rsquo;s &ldquo;Nvidia analysts think 2024 might be the peak&rdquo; line already reads as a tell: the market keeps repricing up. Use the essays as <strong>scenario planning</strong>, not prophecy.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Read <a href="https://situational-awareness.ai/" target="_blank" rel="noopener">situational-awareness.ai</a> once (PDF linked on the site) so you know the strongest version of the fast-takeoff story—not to adopt it wholesale, but to recognize when news about compute, power, China, or alignment maps to this script. Pair it with slower, empirical work (<a href="https://www.tmfnk.com/read/articles/stanford-ai-index-2026/" >Stanford AI Index</a>, labor studies) so you hold both &ldquo;maybe exponential&rdquo; and &ldquo;maybe messy plateau&rdquo; in your head without pretending either is settled.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/dwarkesh-podcast-leopold-aschenbrenner-2027-agi/" >Dwarkesh Podcast: Leopold Aschenbrenner on 2027 AGI</a></strong> The spoken version—trillion-dollar clusters, test-time compute overhang, China infiltration warnings.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/proletariat-of-judgment/" >The Proletariat of Judgment</a></strong> If Aschenbrenner is even half right on capability, the judgment/leverage split matters more than job-count headlines.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/goldman-sachs-ai-job-apocalypse/" >Goldman Sachs on the AI Job Apocalypse</a></strong> Labor disruption without the full superintelligence frame—useful counterweight on timelines.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/nowhere-is-safe-steve-blank/" >Nowhere Is Safe: Steve Blank on Drones</a></strong> Another voice on how fast national-security logic can swallow a technology story.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Ready for the World ft. Vicki Tan | Config 2026</title><link>https://www.tmfnk.com/see/videos/ready-for-the-world-vicki-tan-config-2026/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/ready-for-the-world-vicki-tan-config-2026/</guid><description>Vicki Tan on turning restless creative energy into Ask This Book a Question, a choose-your-own-adventure guide to decisions, designed entirely in Figma.</description><content:encoded><![CDATA[

<h2>🎥 Ready for the World ft. Vicki Tan | Config 2026
    </h2><p>Figma Config 2026 · Mezzanine stage. Duration: 24 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/hpBND4-uiWc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc" target="_blank" rel="noopener">0:00</a> Config 2026 intro</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=90s" target="_blank" rel="noopener">1:30</a> Vicki Tan takes the stage</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=150s" target="_blank" rel="noopener">2:30</a> Floating charge of energy</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=270s" target="_blank" rel="noopener">4:30</a> Behavioral science and the bias codex</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=390s" target="_blank" rel="noopener">6:30</a> From movable wheel to manuscript</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=510s" target="_blank" rel="noopener">8:30</a> Years stuck; mapo tofu story</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=660s" target="_blank" rel="noopener">11:00</a> Ask This Book a Question tour</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=810s" target="_blank" rel="noopener">13:30</a> Proposal as flowchart</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=930s" target="_blank" rel="noopener">15:30</a> Illustrators and covers that missed her voice</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=1050s" target="_blank" rel="noopener">17:30</a> Blue door; unmistakably mine</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=1170s" target="_blank" rel="noopener">19:30</a> The topics she kept avoiding</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=1260s" target="_blank" rel="noopener">21:00</a> Pentel lead and remembering her dad</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=1350s" target="_blank" rel="noopener">22:30</a> Kishotenketsu; friends who followed their energy</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=1410s" target="_blank" rel="noopener">23:30</a> David Whyte poem</li>
</ul>
<p>Vicki Tan is a product designer who never set out to be an author. At Config 2026 she tells the real story behind <em>Ask This Book a Question</em>: years stuck between concept and proposal, a book built in Figma, and the moment she stopped trying to sound polished and started sounding like herself.</p>
<ol>
<li>
<p>Tan names the restlessness that won&rsquo;t settle. Marie-Louise von Franz, Jung&rsquo;s closest collaborator, called it a floating charge of energy not yet attached to its right object. Traditional Chinese medicine calls it stagnant chi. It is not quite anxiety or boredom. It is directional pull toward something you cannot yet name, and Tan&rsquo;s whole talk is what happened when she followed it.</p>
</li>
<li>
<p>She came to decision-making through behavioral science, not self-help. Cognitive biases felt like secret codes for noticing when your brain runs on autopilot. But naming a mechanism rarely changes behavior. Designers change behavior every day by showing how things work, not explaining theory. The cognitive bias codex is cool to look at, she says, but not usable in real life.</p>
</li>
<li>
<p>The social-media version of her arc is wheel, spreads, pocket guide, manuscript, hardcover. The real version includes years stuck between concept and proposal, plus a pandemic break. She was living in Brooklyn, walking Fort Greene with a friend who wanted to quit her job. Tan tried loss aversion and status quo bias. Her friend already understood all of it cognitively. She was still stuck.</p>
</li>
<li>
<p>The mapo tofu dinner is where the book clicked. Over Taiwanese food like her mom used to make, Tan described structuring time off around a self-reinforcing budget: the more self-sustaining her projects, the more she could explore. Quitting stopped feeling like one enormous scary decision and started feeling possible. The bias was denomination effect: we overweight big things and undervalue small recurring ones. Naming it mattered less than feeling it. Mapo tofu became the first story she wrote.</p>
</li>
<li>
<p><em>Ask This Book a Question</em> is for adults, not children. Tan designed the whole thing in Figma. It is choose-your-own-adventure: you bring a stuck question, pass it through lenses of topic, subtopic, and timing (urgent vs. once-in-a-lifetime), land on a story from her life or her mentors, then see which biases showed up in situ. Each bias gets a light-and-shadow page: when it helps, when it hurts. Jung&rsquo;s line about making the unconscious conscious, applied to everyday decisions.</p>
</li>
<li>
<p>She had never written a book proposal and had never taken a writing class. So she started with design. The proposal looked like a flowchart you navigate the way you would an app. That is where the choose-your-own-adventure structure formed. Writing was one part of the book; helping readers understand, connect, and make hard things easier to grasp was the rest, and that is what she already knew how to do.</p>
</li>
<li>
<p>Professional polish kept failing the voice test. Illustrator friends Ryan and Karen produced beautiful work: clay line work, playful scenes of Tan and her dog Charlie. A hired cover designer delivered polished concepts from her ideas. The publisher kept saying the same thing: too professional, not her. She went back to a rough blue-door sketch she regretted showing and, grudgingly at first, agreed it had her inside and out. The final book uses her unrefined illustrations and non-literary prose. Imperfect, unmistakably hers.</p>
</li>
<li>
<p>The hardest part was not craft. It was what the writing demanded emotionally. She mapped readers&rsquo; stuck questions into topics and subtopics, then kept pushing the personal ones to the bottom: relationships, purpose, feelings she had not figured out herself. With the deadline near, she found an old journal entry about shoplifting Pentel 0.5 mm lead as a kid in an office-supply store. The clerk called her out. Her dad defended her without hesitation. He died suddenly at almost twelve while playing basketball on a Sunday morning, and for years those memories went quiet.</p>
</li>
<li>
<p>Writing gave her a reason to look harder. The office-goods memory came back vivid and textured, as if remade in the act of looking. A meditation teacher reframed remembering as re-membering: reconnecting parts of yourself you cut off. Once she stopped treating feelings as interruptions, more recollections returned. Pentel lead was one of the last stories she wrote, and after it the rest had more room.</p>
</li>
<li>
<p>She structures the talk itself as kishotenketsu (起承轉合): introduction (起, follow curiosity), development (承, use what you have), turn (轉, let it transform you), and conclusion (合, everything is waiting for you). It is a four-part form from classical Chinese poetry. Unlike the hero&rsquo;s journey, nothing fully resolves. You change because of what you notice from the inside.</p>
</li>
</ol>
<p><img src="https://www.tmfnk.com/images/kishotenketsu-vicki-tan.svg" alt="Kishotenketsu (起承轉合) from Vicki Tan’s Config 2026 talk: follow curiosity, use what you have, let it transform you, everything is waiting for you"  loading="lazy" /></p>
<p>Her friends show the pattern: a design professor running a tiny Taiwanese micro-farm with her mom, teaching locals to cook with native plants; a design-manager-turned-musician building setlist trackers and stem libraries. Things only they could have made by following their energy.</p>
<ol start="11">
<li>She closes on 合 with David Whyte&rsquo;s poem &ldquo;Everything Is Waiting for You.&rdquo; Soap dishes, window latches, kettles singing: alertness as the hidden discipline of familiarity. The invitation is to notice where your energy leads, and if you want a companion, she wrote the book.</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/books/think-twice-by-michael-j-mauboussin/" >Think Twice: Harnessing the Power of Counterintuition by Michael J. Mauboussin</a></strong> Mauboussin&rsquo;s book is the straight behavioral-science take on why knowing biases is not enough; Tan&rsquo;s project is the designer&rsquo;s answer to the same problem.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/enhanced-rationality-autism-rozenkrantz-2021/" >Enhanced Rationality in Autism: What the Biases Literature Gets Wrong About Everyone Else</a></strong> Another piece that treats cognitive bias lists as incomplete pictures of how humans actually decide.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/how-will-you-measure-your-life/" >How Will You Measure Your Life? Clayton M. Christensen</a></strong> Christensen applies theory to life choices; Tan turns lived stories into a navigable book for the questions you are stuck on.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/closer-to-the-material-ryo-lu/" >Closer to the Material: How AI Changes How We Build, Ryo Lu | Compile 26</a></strong> Ryo Lu spoke at another design conference about making with modern tools; Tan shows Figma as the courage to make something unmistakably your own.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>OpenMed: Clinical NLP and PHI De-Identification That Never Leaves Your Device</title><link>https://www.tmfnk.com/use/tools/openmed/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/openmed/</guid><description>OpenMed is an Apache-2.0 toolkit with 1,000+ biomedical NER models, multilingual PII detection across 15 languages, and MLX acceleration for on-device clinical text processing.</description><content:encoded><![CDATA[

<h2>🛠️ OpenMed
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Open-source clinical NLP: biomedical entity extraction, multilingual PII detection, and de-identification</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Python (CPU/CUDA/MLX), Swift (OpenMedKit), REST service, browser via Transformers.js/WebGPU</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, Apache-2.0</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://openmed.life/" target="_blank" rel="noopener">openmed.life</a> · <a href="https://pypi.org/project/openmed/" target="_blank" rel="noopener">PyPI</a> · <a href="https://github.com/maziyarpanahi/openmed" target="_blank" rel="noopener">GitHub</a></td>
      </tr>
  </tbody>
</table>
<p>Most &ldquo;healthcare AI&rdquo; products want your notes in their cloud. <a href="https://openmed.life/" target="_blank" rel="noopener">OpenMed</a> flips that: you download the models once, run inference on your laptop, VPC, or iPhone, and PHI stays on your side of the fence. Version 1.7.0 ships 1,000+ specialized biomedical models, a 15-language PII catalog covering all 18 HIPAA Safe Harbor identifiers, and Apple MLX acceleration for Mac and iOS. Six million PyPI downloads and counting.</p>
<ol>
<li>
<p><strong>These are extraction models, not chatbots.</strong> OpenMed models are encoder transformers (BERT, ELECTRA, DeBERTa families), not generative medical LLMs. They pull structured entities out of unstructured clinical text: diseases, drugs, genes, anatomy, chemicals, oncology terms. The <a href="https://arxiv.org/abs/2508.01630" target="_blank" rel="noopener">arXiv paper</a> reports state-of-the-art on 10 of 12 biomedical NER benchmarks. Think structured output from a discharge summary, not a conversational diagnosis.</p>
</li>
<li>
<p><strong>Four lines to something useful.</strong> The Python API is deliberately flat: <code>analyze_text()</code> for NER, <code>extract_pii()</code> for detection, <code>deidentify()</code> for redaction, <code>BatchProcessor()</code> for document batches. Same call shape across CPU, CUDA, and MLX backends. On Apple Silicon, <code>pip install &quot;openmed[mlx]&quot;</code> and MLX model names auto-fallback to PyTorch checkpoints on other hardware, so one model name runs everywhere.</p>
</li>
<li>
<p><strong>PII handling is the real differentiator.</strong> The catalog covers 55+ entity types across 15 language codes (ar, de, en, es, fr, he, hi, id, it, ja, nl, pt, te, th, tr) with locale-aware validators: French NIR, German Steuer-ID, Italian Codice Fiscale, Dutch BSN, Portuguese CPF/CNPJ, Luhn checks on cards. Smart entity merging reassembles subword fragments so <code>123-45-6789</code> stays whole instead of splitting into token shards. Redaction methods include mask, hash, date-shift, and Faker-backed surrogates that preserve format.</p>
</li>
<li>
<p><strong>Runs where compliance teams want it.</strong> Laptop, on-prem server, air-gapped VPC, native iOS app via OpenMedKit. No runtime telemetry, no license phone-home, no outbound API calls during inference. Models load from Hugging Face once (or a private mirror) and stay local. The site is explicit: OpenMed provides technical controls; your legal HIPAA/GDPR boundary is still your deployment architecture.</p>
</li>
<li>
<p><strong>One stack, four surfaces.</strong> Python for notebooks and services. OpenMedKit (Swift) for macOS/iOS apps. FastAPI REST service with <code>POST /analyze</code>, <code>POST /pii/extract</code>, <code>POST /pii/deidentify</code>. Browser export path via ONNX into Transformers.js for WebGPU token classification. Nemotron Privacy Filter variants ship in both PyTorch and MLX weights. Pick the surface that matches where your PHI already lives.</p>
</li>
<li>
<p><strong>Honest limitations.</strong> First run downloads model weights (hundreds of MB per checkpoint). This is not a turnkey HIPAA compliance certification: you still own access controls, audit logs, and BAAs with any upstream LLM you pair it with. OpenMed Agent (terminal clinical workflows) and Welna (patient-facing iOS app) are separate products built on the stack, not required to use the library. Generative reasoning still needs an external model; OpenMed handles extraction and de-ID, not clinical judgment.</p>
</li>
</ol>
<h2>Install &amp; first run
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install <span class="s2">&#34;openmed[hf]&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Apple Silicon with MLX acceleration:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install <span class="s2">&#34;openmed[mlx]&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Extract entities from clinical text:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed</span> <span class="kn">import</span> <span class="n">analyze_text</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">result</span> <span class="o">=</span> <span class="n">analyze_text</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;Patient started on imatinib for chronic myeloid leukemia.&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">model_name</span><span class="o">=</span><span class="s2">&#34;disease_detection_superclinical&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">entity</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">entities</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">entity</span><span class="o">.</span><span class="n">label</span><span class="si">:</span><span class="s2">&lt;12</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">entity</span><span class="o">.</span><span class="n">text</span><span class="si">:</span><span class="s2">&lt;28</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">entity</span><span class="o">.</span><span class="n">confidence</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Detect and redact PHI:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed</span> <span class="kn">import</span> <span class="n">extract_pii</span><span class="p">,</span> <span class="n">deidentify</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">text</span> <span class="o">=</span> <span class="s2">&#34;Patient: John Doe, DOB: 01/15/1970, SSN: 123-45-6789&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">result</span> <span class="o">=</span> <span class="n">extract_pii</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">model_name</span><span class="o">=</span><span class="s2">&#34;pii_superclinical_large&#34;</span><span class="p">,</span> <span class="n">use_smart_merging</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">clean</span> <span class="o">=</span> <span class="n">deidentify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s2">&#34;mask&#34;</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Spin up the REST service:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install <span class="s2">&#34;openmed[hf,service]&#34;</span>
</span></span><span class="line"><span class="cl">uvicorn openmed.service.app:app --host 0.0.0.0 --port <span class="m">8080</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Full guides: <a href="https://openmed.life/docs/" target="_blank" rel="noopener">openmed.life/docs</a> · <a href="https://openmed.life/docs/model-registry" target="_blank" rel="noopener">model registry</a> · <a href="https://openmed.life/docs/mlx-backend" target="_blank" rel="noopener">MLX backend</a></p>
<p><strong>Worth your time if:</strong> you build clinical pipelines, research tools, or health apps where sending PHI to a vendor API is a non-starter, and you need structured extraction or de-identification before anything else touches the text.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/docling/" >Document OCR &amp; Parsing: Docling, dots.ocr, and Alternatives</a></strong> Docling gets text out of clinical PDFs; OpenMed is the next step for entity extraction and PHI redaction on what you parsed.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/liteparse/" >LiteParse: Fast Local PDF Parsing with OCR and Bounding Boxes</a></strong> Another local-first parser when you need layout and OCR before running clinical NLP.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/spacy-io/" >spaCy: Industrial-Strength Natural Language Processing in Python</a></strong> General-purpose NLP baseline; OpenMed is the domain-specialized stack when medical entity types and HIPAA identifiers matter.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/project-nomad/" >Project NOMAD: The Offline Knowledge and AI Server</a></strong> Offline AI infrastructure pattern; OpenMed fits the same &ldquo;keep sensitive data on your hardware&rdquo; philosophy for clinical text.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Harness Engineering for Self-Improvement: Lilian Weng's Survey</title><link>https://www.tmfnk.com/read/articles/harness-engineering-lilian-weng/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/harness-engineering-lilian-weng/</guid><description>Lilian Weng maps the emerging field of harness engineering: the systems around AI models that orchestrate tools, context, and workflows. The near-term path to recursive self-improvement may not be models rewriting their own weights.</description><content:encoded><![CDATA[
<p>Lilian Weng published an article on <a href="https://lilianweng.github.io/posts/2026-07-04-harness/" target="_blank" rel="noopener">Harness Engineering for Self-Improvement</a> that connects a lot of threads I have been watching separately. The core idea: the system around a model (the harness) may matter as much as the model itself for getting to recursive self-improvement. And the near-term path probably does not involve models rewriting their own weights.</p>
<ol>
<li>
<p><strong>The harness is the layer between the raw model and the real world.</strong> Weng defines it as the system that orchestrates how the model thinks, plans, calls tools, manages context, stores artifacts, and evaluates results. Successful coding agents like Claude Code and Codex are not just good models. They are good harnesses. The distinction matters because most AI discussion focuses on the model, but the deployment system is where the leverage is right now.</p>
</li>
<li>
<p><strong>Three design patterns keep showing up in production harnesses.</strong> Workflow automation: a goal-oriented loop of plan, execute, observe, improve. File system as persistent memory: instead of carrying everything in context, durable state lives in files that the model reads and writes via bash commands. Sub-agent and backend jobs: spawning parallel workers whose outputs live in files and logs, not transient chat context. These patterns are not theoretical. They are what Codex, Claude Code, and OpenCode all converged on.</p>
</li>
<li>
<p><strong>Context engineering is evolving from prompt tricks to structured systems.</strong> ACE (Agentic Context Engineering) treats context as an evolving playbook of bullet points rather than a growing prompt. A generator produces trajectories, a reflector distills insights, and a curator updates the context with itemized entries. MCE (Meta Context Engineering) goes further: it separates the mechanism (how to manage context) from the content (what is in context) and evolves both through a bi-level optimization loop. The skill database tracks what worked, and a meta-level agent performs crossover over prior skills.</p>
</li>
<li>
<p><strong>Meta-Harness optimizes the code that determines what information to store and retrieve.</strong> Lee et al. (2026) built a system where the optimized object is the harness code itself. A coding agent proposes new harnesses, evaluates them, and keeps the ones on the Pareto frontier. The entire execution history lives in the file system, so the agent uses grep and cat instead of shoveling everything into a prompt. The lesson: once harness design becomes an executable search space, a strong coding agent can exploit the same design space human engineers use.</p>
</li>
<li>
<p><strong>Workflow design is becoming a search problem.</strong> ADAS (Automated Design of Agentic Systems) treats agent design as an optimization problem where a meta-agent proposes new workflows in code. AFlow represents workflows as graphs and uses Monte Carlo Tree Search to find better structures. Both outperform manually designed workflows on code, math, and QA tasks. The pattern is clear: if you can express the workflow in code, you can search over it.</p>
</li>
<li>
<p><strong>Self-Harness lets agents improve their own harness through a propose-evaluate-accept loop.</strong> The system mines failure patterns from execution traces, proposes bounded edits, validates them with regression tests on held-in and held-out data, and merges only the edits that pass. It learned model-specific harness instructions that target different weaknesses of different base models. But Weng flags a real concern: if a program is allowed to edit the OS system, abstraction boundaries break. The editable surface needs careful design, and permission control must live outside the loop.</p>
</li>
<li>
<p><strong>Evolutionary search is a natural fit for harness optimization.</strong> AlphaEvolve stores a pool of candidate programs and uses frozen LLMs to generate diffs for improvement. Darwin Godel Machine explicitly targets the evolution of an editable harness-code repository, where agents modify their own harness and branch off into new versions. Starting from simple initial configs, DGM-discovered agents went from 20% to 50% on SWE-bench Verified. The catch: this works when evaluation is fast and objective. It struggles with slow, ambiguous, or heuristic-based domains.</p>
</li>
<li>
<p><strong>Weng lists seven future challenges, and they are the real content of the post.</strong> Weak evaluators: most research claims do not have a fast, precise verifier. Context and memory lifecycle: as agents become more autonomous, context engineering will need to become a core part of intelligence, not just a software layer. Negative results: LLMs trained on success-biased literature are bad at knowing when to abandon a hypothesis. Diversity collapse: evolutionary loops exploit known high-reward patterns and need mechanisms to prevent converging on the same solution. Reward hacking: if the reward comes from unit tests, the agent overfits to tests. Long-term success: coding agents complete the task at hand but rarely account for maintainability, ownership boundaries, or future debugging burden. The role of humans: humans should move up the stack, not be removed from the loop.</p>
</li>
<li>
<p><strong>The near-term path to RSI is not models rewriting their weights.</strong> Weng&rsquo;s prediction: harness engineering will evolve toward meta-methodology (improving the machinery for getting better answers, not just the answer itself). Mature harnesses enable auto-research for model self-improvement, and smarter models prevent harnesses from overengineering. Eventually, many harness improvements will be internalized into core model behavior, but the interface with external context and tools will remain. We saw this pattern before with prompt engineering: manual tricks became less central as models improved, but the need to specify goals and constraints did not disappear.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> If you want to understand where AI self-improvement is headed, stop looking at model architecture papers and start looking at harness engineering. The leverage, for now, is in the loop, not the weights.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/is-grep-all-you-need/" >Is Grep All You Need? How Agent Harnesses Reshape Agentic Search</a></strong> Directly related: the earlier piece on how file-system-based harnesses change the search problem for coding agents.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/closer-to-the-material-ryo-lu/" >Closer to the Material: How AI Changes How We Build, Ryo Lu | Compile 26</a></strong> Ryo Lu&rsquo;s talk on the Glass interface and keeping humans close to the material is the design-side answer to the same questions Weng raises about harness transparency and human agency.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/notational-intelligence-linus-lee/" >Notational Intelligence, Linus Lee | Compile 26</a></strong> Linus Lee&rsquo;s argument that notation shapes thinking maps onto Weng&rsquo;s claim that the harness (the notation of agent behavior) may matter as much as the model.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Disease NER on Apple Silicon with OpenMed and MLX</title><link>https://www.tmfnk.com/use/projects/openmed-disease-ner-mlx-macos/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/projects/openmed-disease-ner-mlx-macos/</guid><description>Run OpenMed's 335M disease NER model locally on a Mac—convert once with openmed.mlx.convert, then tag synthetic clinical notes end-to-end. Not mlx-lm; this is token classification.</description><content:encoded><![CDATA[

<h2>🔧 Disease NER on Apple Silicon
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Local disease entity extraction (<code>B-DISEASE</code> / <code>I-DISEASE</code>) from clinical-ish text</td>
      </tr>
      <tr>
          <td>Stack</td>
          <td><a href="https://openmed.life/docs/" target="_blank" rel="noopener">OpenMed</a> + MLX on Apple Silicon; model <a href="https://huggingface.co/OpenMed/OpenMed-NER-DiseaseDetect-BioMed-335M" target="_blank" rel="noopener">OpenMed-NER-DiseaseDetect-BioMed-335M</a></td>
      </tr>
      <tr>
          <td>Status</td>
          <td>Working pipeline; one-time MLX conversion per machine</td>
      </tr>
      <tr>
          <td>Docs</td>
          <td><a href="https://openmed.life/docs/" target="_blank" rel="noopener">openmed.life/docs</a> · <a href="https://openmed.life/docs/" target="_blank" rel="noopener">Model Registry</a></td>
      </tr>
  </tbody>
</table>
<p>You want disease names pulled out of notes on your Mac without sending text to a cloud API. <a href="https://openmed.life/docs/" target="_blank" rel="noopener">OpenMed</a> is built for that: curated biomedical models, <code>analyze_text()</code> for one-liners, <code>BatchProcessor</code> for files, optional PII de-ID and REST later. The catch most Mac tinkerers hit first: this checkpoint is a <strong>335M BERT token-classifier</strong>, not a chat LLM—<strong><code>mlx-lm</code> and GGUF are the wrong tools</strong>. Use <strong><code>pip install &quot;openmed[mlx]&quot;</code></strong> and OpenMed&rsquo;s MLX converter instead.</p>
<p><strong>Not medical advice.</strong> This tags text spans. It does not diagnose, triage, or replace a clinician. Below uses <strong>100% synthetic</strong> sentences only.</p>
<h2>What I learned
    </h2><ol>
<li><strong><code>mlx-lm</code> is for generation; NER needs token classification.</strong> OpenMed routes BERT-family checkpoints through <code>openmed.mlx.convert</code> and <code>OpenMedConfig(backend=&quot;mlx&quot;)</code>. Trying to load this model in Ollama or llama.cpp wastes an afternoon.</li>
<li><strong>Plan for a one-time conversion.</strong> There is no prebuilt <code>-mlx</code> Hub repo for this exact checkpoint yet. Conversion on your Mac takes a few minutes and ~670 MB (BF16); optional <code>--quantize 8</code> shrinks RAM with a small accuracy tradeoff.</li>
<li><strong><code>analyze_text</code> hides BIO decoding.</strong> Raw <code>mlx-transformers</code> works but you rebuild span grouping yourself. OpenMed&rsquo;s grouping, confidence thresholds, and export helpers are worth the dependency—see <a href="https://openmed.life/docs/" target="_blank" rel="noopener">Advanced NER &amp; Output Formatting</a> in their docs.</li>
<li><strong>Synthetic notes are enough to validate the pipe.</strong> Before you touch real charts, run invented sentences through batch mode and inspect false positives (family history phrasing, negation). NER is literal; &ldquo;ruled out myocardial infarction&rdquo; may still tag <code>myocardial infarction</code>.</li>
<li><strong>Intel Mac = CPU PyTorch, not MLX GPU.</strong> <code>pip install &quot;openmed[hf]&quot;</code> still runs; Apple Silicon is where this shines. Check <code>uname -m</code> → <code>arm64</code>.</li>
</ol>
<h2>End-to-end pipeline
    </h2><p><strong>Flow:</strong> venv → install → convert model → write synthetic <code>notes.jsonl</code> → batch NER → <code>entities.csv</code>.</p>
<h3>1. Environment (Apple Silicon)
    </h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python3 -m venv .venv
</span></span><span class="line"><span class="cl"><span class="nb">source</span> .venv/bin/activate
</span></span><span class="line"><span class="cl">python -m pip install --upgrade pip
</span></span><span class="line"><span class="cl">pip install <span class="s2">&#34;openmed[mlx]&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Optional Hub cache: <code>pip install huggingface_hub &amp;&amp; hf auth login</code></p>
<h3>2. One-time MLX conversion
    </h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python -m openmed.mlx.convert <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --model OpenMed/OpenMed-NER-DiseaseDetect-BioMed-335M <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --output ./mlx-models/disease-biomed-335m</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Expect <code>config.json</code>, <code>id2label.json</code>, <code>openmed-mlx.json</code>, <code>weights.safetensors</code>, tokenizer files. Tight on RAM? Add <code>--quantize 8</code> to the output path.</p>
<p><strong>Shortcut:</strong> pass the Hub ID directly to <code>analyze_text</code> on first run—OpenMed may auto-prepare MLX. If it falls back to PyTorch, run the convert step explicitly.</p>
<h3>3. Synthetic input (<code>data/notes.jsonl</code>)
    </h3><p>Invented records only—one JSON object per line:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;syn-001&#34;</span><span class="p">,</span> <span class="nt">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;The patient was diagnosed with diabetes mellitus type 2 and started metformin.&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;syn-002&#34;</span><span class="p">,</span> <span class="nt">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;Family history is notable for Alzheimer&#39;s disease and hypertension.&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;syn-003&#34;</span><span class="p">,</span> <span class="nt">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;MRI was negative; Crohn&#39;s disease was ruled out after colonoscopy.&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;syn-004&#34;</span><span class="p">,</span> <span class="nt">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;Pediatric workup considered cystic fibrosis given recurrent pulmonary infections.&#34;</span><span class="p">}</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<h3>4. Batch script (<code>run_disease_ner.py</code>)
    </h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env python3</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;Synthetic clinical notes → disease entities CSV. Not for real PHI.&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">csv</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed</span> <span class="kn">import</span> <span class="n">BatchProcessor</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed.core.config</span> <span class="kn">import</span> <span class="n">OpenMedConfig</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">MODEL</span> <span class="o">=</span> <span class="s2">&#34;./mlx-models/disease-biomed-335m&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">NOTES</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&#34;data/notes.jsonl&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">OUT</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&#34;data/entities.csv&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">load_notes</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]:</span>
</span></span><span class="line"><span class="cl">    <span class="n">rows</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">path</span><span class="o">.</span><span class="n">read_text</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">            <span class="k">continue</span>
</span></span><span class="line"><span class="cl">        <span class="n">obj</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">obj</span><span class="p">[</span><span class="s2">&#34;id&#34;</span><span class="p">],</span> <span class="n">obj</span><span class="p">[</span><span class="s2">&#34;text&#34;</span><span class="p">]))</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">rows</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">main</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">notes</span> <span class="o">=</span> <span class="n">load_notes</span><span class="p">(</span><span class="n">NOTES</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">processor</span> <span class="o">=</span> <span class="n">BatchProcessor</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="n">model_name</span><span class="o">=</span><span class="n">MODEL</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">config</span><span class="o">=</span><span class="n">OpenMedConfig</span><span class="p">(</span><span class="n">backend</span><span class="o">=</span><span class="s2">&#34;mlx&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">        <span class="n">group_entities</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">texts</span> <span class="o">=</span> <span class="p">[</span><span class="n">t</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">notes</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">notes</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">OUT</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="n">OUT</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&#34;w&#34;</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="s2">&#34;&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">w</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">writer</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">w</span><span class="o">.</span><span class="n">writerow</span><span class="p">([</span><span class="s2">&#34;note_id&#34;</span><span class="p">,</span> <span class="s2">&#34;label&#34;</span><span class="p">,</span> <span class="s2">&#34;text&#34;</span><span class="p">,</span> <span class="s2">&#34;confidence&#34;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">note_id</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">processor</span><span class="o">.</span><span class="n">process_texts</span><span class="p">(</span><span class="n">texts</span><span class="p">,</span> <span class="n">batch_size</span><span class="o">=</span><span class="mi">8</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl">            <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">entities</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">w</span><span class="o">.</span><span class="n">writerow</span><span class="p">([</span><span class="n">note_id</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">label</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">confidence</span><span class="si">:</span><span class="s2">.3f</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Wrote </span><span class="si">{</span><span class="n">OUT</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&#34;__main__&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">main</span><span class="p">()</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python run_disease_ner.py</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Example rows you should see:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>note_id,label,text,confidence
syn-001,DISEASE,diabetes mellitus type 2,0.9xx
syn-002,DISEASE,Alzheimer&#39;s disease,0.9xx
syn-002,DISEASE,hypertension,0.8xx</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><code>syn-003</code> is the sanity check: if <code>Crohn's disease</code> tags despite &ldquo;ruled out&rdquo;, you have seen NER&rsquo;s negation blind spot—do not ship that to production without a second pass.</p>
<h3>5. Single-string smoke test
    </h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed</span> <span class="kn">import</span> <span class="n">analyze_text</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed.core.config</span> <span class="kn">import</span> <span class="n">OpenMedConfig</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">result</span> <span class="o">=</span> <span class="n">analyze_text</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;Symptoms of rheumatoid arthritis worsened over three months.&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">model_name</span><span class="o">=</span><span class="s2">&#34;./mlx-models/disease-biomed-335m&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">config</span><span class="o">=</span><span class="n">OpenMedConfig</span><span class="p">(</span><span class="n">backend</span><span class="o">=</span><span class="s2">&#34;mlx&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="n">confidence_threshold</span><span class="o">=</span><span class="mf">0.55</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">group_entities</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">entities</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">label</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">confidence</span><span class="si">:</span><span class="s2">.3f</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<h2>What not to use
    </h2><table>
  <thead>
      <tr>
          <th>Tool</th>
          <th>Why</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>mlx-lm</code></td>
          <td>Causal LLMs only</td>
      </tr>
      <tr>
          <td>llama.cpp / GGUF</td>
          <td>Wrong architecture</td>
      </tr>
      <tr>
          <td>Default PyTorch on M-series</td>
          <td>Works, skips MLX GPU</td>
      </tr>
  </tbody>
</table>
<h2>Troubleshooting
    </h2><table>
  <thead>
      <tr>
          <th>Issue</th>
          <th>Fix</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>ImportError: mlx</code></td>
          <td><code>pip install &quot;openmed[mlx]&quot;</code></td>
      </tr>
      <tr>
          <td>Slow download</td>
          <td><code>hf download OpenMed/OpenMed-NER-DiseaseDetect-BioMed-335M --local-dir ./models/biomed-335m</code></td>
      </tr>
      <tr>
          <td>OOM</td>
          <td>Re-convert with <code>--quantize 8</code></td>
      </tr>
      <tr>
          <td>Verify MLX</td>
          <td>Activity Monitor GPU during <code>analyze_text</code>; config must set <code>backend=&quot;mlx&quot;</code></td>
      </tr>
  </tbody>
</table>
<p>OpenMed v1.7 adds REST, PII de-ID, FHIR helpers, and <a href="https://openmed.life/docs/" target="_blank" rel="noopener">OpenMedKit</a> for Swift—this article stops at Python MLX NER. That is already enough for indexing synthetic corpora or prototyping chart miners.</p>
<p><strong>Steal this if:</strong> you are building a local health-text lab on a Mac and need disease spans before summarization, search, or de-identification—not if you need a chatbot (pick an LLM stack instead).</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/local-slm-data-cleaner-macos/" >Fine-Tune a Local SLM to Clean Master Data on Your Mac</a></strong> Same &ldquo;local model on Apple Silicon&rdquo; lane, different task (record cleaning vs. clinical NER).</li>
<li><strong><a href="https://www.tmfnk.com/use/projects/running-local-llms-from-first-run-to-fine-tuned/" >Running Local LLMs: From First Run to Fine-Tuned</a></strong> When you actually do need <code>mlx-lm</code> / Ollama—and how not to confuse that path with classifiers.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/llmfit/" >llmfit: Find Which LLM Models Run on Your Hardware</a></strong> Right-size generative models; NER at 335M is tiny by comparison (~1 GB class).</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Davit: A Native macOS UI for Apple's Container Platform</title><link>https://www.tmfnk.com/use/tools/davit/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/davit/</guid><description>A free, open-source SwiftUI app that gives you a native GUI for Apple's container daemon. No Electron, no license fees, no always-on Linux VM.</description><content:encoded><![CDATA[

<h2>🛠️ Davit
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A native SwiftUI GUI for Apple&rsquo;s open-source container platform</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>macOS 15+ (Apple silicon)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free &amp; open source (MIT)</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://davit.app/" target="_blank" rel="noopener">davit.app</a> / <a href="https://github.com/wouterdebie/davit" target="_blank" rel="noopener">GitHub</a></td>
      </tr>
  </tbody>
</table>
<p>I have been looking for a Docker Desktop replacement that does not require a perpetual Linux VM, a license key, or an Electron process eating 400 MB at idle. Davit is the closest I have found to that ideal. It talks directly to Apple&rsquo;s own container daemon over XPC, the same wire path the CLI uses. No socket shims, no background agents, no accounts.</p>
<ol>
<li>
<p>The architecture is the story. Apple&rsquo;s container platform boots a separate lightweight VM per container via the Virtualization framework, sized to that container, and tears it down when the container stops. With nothing running, the platform idles at roughly 25 MB. Davit itself is a native SwiftUI app, so its footprint is mostly shared macOS framework memory. Compare that to Docker Desktop, which keeps a multi-gigabyte Linux VM alive whether you have containers or not.</p>
</li>
<li>
<p>It handles the full lifecycle. Start, stop, restart, delete containers with live CPU, memory, and IP on every row. Streaming logs with follow and boot mode. Live stat charts. Raw config inspection. One-click terminal into any running container, straight into Terminal or iTerm over the native API. Browse any running container&rsquo;s filesystem right in the app, download files to your Mac, upload or delete. No <code>docker cp</code> incantations needed.</p>
</li>
<li>
<p>The Edit &amp; Recreate flow is clever. Containers are immutable, so Davit prefills a new one from the old config with the image&rsquo;s entrypoint and env subtracted. You change ports, env vars, mounts, or resources in seconds without starting from scratch.</p>
</li>
<li>
<p>It manages images, volumes, and networks too. Pull with live progress, run from any image, tag, prune. Create sized volumes and custom subnets. See what is in use before you delete it. Registry logins for Docker Hub, ghcr.io, quay.io, or any OCI registry. Credentials are verified on the spot and stored in your login keychain, shared with the <code>container</code> CLI.</p>
</li>
<li>
<p>The honest limitation: this is Apple&rsquo;s container platform, not Docker. It runs standard OCI images and pulls from all the same registries, but it does not give you a Docker-compatible socket. Tools like <code>docker-compose</code> will not work out of the box. If you need broad Docker tooling compatibility, OrbStack is the more mature choice today. Davit is for people who want Apple&rsquo;s native stack with a clean GUI and do not need the Docker API shim.</p>
</li>
<li>
<p>First-run experience is excellent. No container platform installed? Davit downloads Apple&rsquo;s signed installer, verifies it, and sets everything up in your user Library. No administrator rights needed. It can add the <code>container</code> CLI to your shell from Settings. From a fresh install to a running nginx container serving <code>localhost:8088</code> takes about two minutes.</p>
</li>
</ol>
<h2>Install &amp; first run
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">brew install wouterdebie/tap/davit</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Or download from <a href="https://github.com/wouterdebie/davit/releases/latest" target="_blank" rel="noopener">GitHub Releases</a>. On first launch, Davit sets up Apple&rsquo;s container platform for you if it is not already installed.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Pull a demo image and run it</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Click Images -&gt; Pull Image, enter: nginxdemos/hello</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Click Run, set port mapping host 8088 -&gt; container 80</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Open http://localhost:8088 in your browser</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>The app is signed and notarized by Apple, so it opens without Gatekeeper warnings.</p>
<p><strong>Worth your time if:</strong> you are on Apple silicon, want to run containers without Docker Desktop&rsquo;s overhead, and do not need Docker API compatibility. If you need <code>docker-compose</code> and the full Docker ecosystem, stick with OrbStack or Docker Desktop.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/orbstack/" >OrbStack: Fast, Lightweight Docker &amp; Linux for Mac</a></strong> The commercial alternative with Docker API compatibility. Davit is the free, Apple-native counterpart.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/exo-ai-cluster/" >exo: Run Frontier AI Models Across All Your Devices Locally</a></strong> Another tool that leverages local hardware efficiently, like Davit does with Apple&rsquo;s container platform.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/apple-silicon-battery-charge/" >Apple Silicon Battery Charge Limiter: Keep your battery at 80% to prolong its longevity</a></strong> A native macOS utility that, like Davit, works with Apple&rsquo;s own frameworks rather than third-party alternatives.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Benford's Law: When Numbers Tell on Themselves</title><link>https://www.tmfnk.com/read/articles/benfords-law-fraud-detection/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/benfords-law-fraud-detection/</guid><description>Why the digit 1 leads 30% of all real-world numbers, and how that simple pattern catches fraudsters, exposes rigged elections, and even monitors supercomputer failures.</description><content:encoded><![CDATA[
<p>If I asked you to pick a random real-world number, what are the chances it starts with 1? One in nine, about 11 percent, right? Nine digits, equal odds.</p>
<p>That intuition is spectacularly wrong. In almost any large natural dataset (river lengths, company revenues, city populations, physical constants), the digit 1 leads about 30 percent of the time. Digit 9 shows up less than 5 percent. And the same curve holds whether you measure rivers in miles or kilometres, whether you count populations in 1938 or 2022, whether the data comes from Earth or the stars.</p>
<p>This is Benford&rsquo;s Law. A simple statistical pattern that is both beautifully clean and practically useful for catching people who are lying with numbers. <a href="https://vatsalbakshi.com/blog/benfords-law/" target="_blank" rel="noopener">Vatsal Bakshi&rsquo;s writeup</a> is the best single explanation I have found, and an <a href="https://dl.acm.org/doi/fullHtml/10.1145/3624062.3624121" target="_blank" rel="noopener">ACM paper by Ferreira and Levy (2023)</a> showed me an application I had never considered.</p>
<ol>
<li>
<p>The formula fits on one line: P(d) = log₁₀(1 + 1/d). For digit 1, that gives 30.1 percent. For 2, it&rsquo;s 17.6 percent. For 9, it&rsquo;s 4.6 percent. The numbers sum to exactly 100, and they describe the first-digit distribution of almost any dataset that spans multiple orders of magnitude. Human heights (1.5m to 2.1m) are too narrow a range to follow the law. Mountain heights (100m to 8,849m) span nearly two orders. It works.</p>
</li>
<li>
<p>The law was discovered twice. Simon Newcomb, an astronomer, noticed in 1881 that the first pages of his logarithm tables were far more worn than the later pages. People kept looking up numbers starting with 1. He published a paper that was essentially ignored. Fifty-seven years later, Frank Benford independently spotted the same pattern at General Electric and ran a systematic study across 20,229 data points. The law got his name. Theodore Hill finally proved it rigorously in 1995, showing that if you mix enough different distributions together, the aggregate converges to Benford regardless of the components.</p>
</li>
<li>
<p>The key is scale invariance. If every number in a Benford-compliant dataset is multiplied by any positive constant, the distribution doesn&rsquo;t change. Measure river lengths in miles then switch to kilometres. The first-digit curve stays identical. Benford&rsquo;s Law is the unique first-digit distribution that is invariant under multiplication, which is why it applies across currencies, units, and time periods.</p>
</li>
<li>
<p>Fraud detection is the best-known application, and it works because humans are bad at faking randomness. When people fabricate financial numbers, they avoid 1 as a leading digit (it feels too small, too obvious) and gravitate toward 3, 5, and 7. The resulting distribution is flatter and more uniform than Benford predicts. The gap is measurable and often dramatic. Real accounting data hugs the curve. Fabricated data visibly diverges. Forensic accountants use this as a screening tool. Deviation is not proof of fraud, but it is a strong signal worth investigating.</p>
</li>
<li>
<p>The 2009 Iranian presidential election is a famous case. Political scientist Walter Mebane applied Benford&rsquo;s Law to the reported vote totals and found significant second-digit deviation from the expected distribution. Separate analysis by Roukema in 2014 confirmed first-digit anomalies in the same data. Benford analysis did not prove the election was rigged, but it added statistical weight to concerns raised by opposition groups. The same technique flagged Greek macroeconomic data before the 2009 deficit revelation.</p>
</li>
<li>
<p>I did not expect Benford&rsquo;s Law to also apply to supercomputer failures. A <a href="https://dl.acm.org/doi/fullHtml/10.1145/3624062.3624121" target="_blank" rel="noopener">2023 paper by Ferreira and Levy at SC Workshops</a> used the law to analyse failure data from the Astra supercomputer. The idea is simple. When a system enters a period of unusually frequent or patterned failures, the error counts deviate from the Benford distribution. The deviation becomes a signal that the current failure-mitigation strategy might be suboptimal. If the numbers look wrong, something unusual is happening.</p>
</li>
<li>
<p>The law has limits. It only applies to data spanning multiple orders of magnitude. Phone numbers, ZIP codes, and identity numbers are assigned arbitrarily and won&rsquo;t follow it. Even for natural data, a Benford deviation is a signal to investigate, not a conviction. The Enron data showed deviation, but the actual accounting fraud there was far more direct. Benford was a supporting clue, not the smoking gun.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Benford&rsquo;s Law is the closest thing statistics has to a universal cheat detector. If a dataset is supposed to reflect real-world measurement and doesn&rsquo;t follow the curve, someone has probably been in the kitchen. Run the test yourself next time you look at financial data. It takes thirty seconds and a logarithm table, and it catches people who think they are being clever.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/average-is-all-you-need/" >The Magic of Average: Why LLMs Make Simple the New Powerful</a></strong> Both pieces explore the surprising power of simple statistical patterns hiding in plain sight.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/predicting-loss-adversion/" >Predicting loss aversion behavior with machine-learning methods</a></strong> Another look at how mathematical patterns reveal hidden truths about human behaviour.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/category-theory-orders/" >Understanding Order: The Category Theory Illustrated Guide</a></strong> A different kind of mathematical framework that explains why things structure themselves the way they do.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>STT Tools You Should Know: Handy, HNS, and Spokenly</title><link>https://www.tmfnk.com/use/tools/two-stt-tools-you-should-know/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/two-stt-tools-you-should-know/</guid><description>Three speech-to-text options for privacy-first dictation: open-source Handy and HNS for local desktop and CLI work, plus Spokenly for free forever local Whisper or bring-your-own API keys on Mac, Windows, Linux, and iOS.</description><content:encoded><![CDATA[

<h2>📋 TLDR: Privacy-Focused STT Tools
    </h2><ul>
<li>🎙️ <a href="https://handy.computer" target="_blank" rel="noopener">Handy</a> - Open-source desktop app with keyboard shortcuts for quick dictation</li>
<li>💻 <a href="https://github.com/primaprashant/hns" target="_blank" rel="noopener">HNS</a> - Command-line tool for offline speech-to-text</li>
<li>🗣️ <a href="https://spokenly.app/" target="_blank" rel="noopener">Spokenly</a> - Free forever local Whisper or your own API keys; Mac, Windows, Linux, iOS</li>
</ul>
<p><strong>Key Benefits:</strong></p>
<ul>
<li>🔒 Local processing options on all three (Spokenly also offers optional BYOK cloud)</li>
<li>🆓 Free tiers: Handy and HNS are open source; Spokenly does not charge for local or BYOK transcription</li>
<li>🌐 Offline-capable local models</li>
<li>⌨️ Text lands in the app you are already typing in</li>
</ul>
<h2>🎙️ Three STT Tools Worth Knowing
    </h2><h3>🔗 <strong><a href="https://handy.computer" target="_blank" rel="noopener">Handy</a></strong>
    </h3><h4>🎯 <strong>What it does</strong>
    </h4><ul>
<li>🖥️ Open source speech-to-text app for your computer</li>
</ul>
<h4>⚡ <strong>Key Features</strong>
    </h4><ul>
<li>⌨️ Press a keyboard shortcut, speak, and it pastes your text</li>
<li>🎙️ Push-to-talk or toggle modes</li>
<li>⚙️ Customizable keyboard shortcuts</li>
<li>🔒 Completely private as everything stays on your computer</li>
<li>🆓 Free and open source</li>
</ul>
<h4>🎯 <strong>Best for</strong>
    </h4><ul>
<li>Quick dictation anywhere you can type with minimal setup</li>
</ul>
<h3>🔗 <strong><a href="https://github.com/primaprashant/hns" target="_blank" rel="noopener">HNS</a></strong>
    </h3><h4>🎯 <strong>What it does</strong>
    </h4><ul>
<li>💻 Command-line speech-to-text Python tool</li>
</ul>
<h4>⚡ <strong>Key Features</strong>
    </h4><ul>
<li>🎤 Records voice and transcribes locally</li>
<li>📋 Copies text directly to clipboard</li>
<li>🔌 Works completely offline after initial setup</li>
<li>🌍 Multi-language support</li>
<li>🎯 Simple and focused. Just speech to clipboard</li>
<li>📄 Open source (MIT licensed)</li>
</ul>
<h4>🎯 <strong>Best for</strong>
    </h4><ul>
<li>Developers or users who prefer CLI tools</li>
</ul>
<h3>🔗 <strong><a href="https://spokenly.app/" target="_blank" rel="noopener">Spokenly</a></strong>
    </h3><h4>🎯 <strong>What it does</strong>
    </h4><ul>
<li>🗣️ System-wide voice-to-text for macOS, Windows, Linux, and iOS. Speak in any app; text appears where your cursor is.</li>
</ul>
<h4>⚡ <strong>Key Features</strong>
    </h4><ul>
<li>🆓 <strong>Free forever</strong> on local models (Whisper, Parakeet on Apple Silicon) with unlimited offline transcription</li>
<li>🔑 <strong>Bring your own API key</strong> for cloud engines (OpenAI, Deepgram, Groq, Anthropic, Google) at no Spokenly charge</li>
<li>🔒 <strong>Local Only Mode</strong> blocks all network requests when you want zero cloud exposure</li>
<li>🌐 100+ languages with automatic detection</li>
<li>🤖 <strong>MCP server</strong> hooks for AI coding agents (Cursor, Claude Code)</li>
<li>📱 Native iOS app with custom keyboard; one Pro subscription covers Mac and iPhone if you later want managed cloud (optional)</li>
</ul>
<h4>🎯 <strong>Best for</strong>
    </h4><ul>
<li>Daily dictation across browsers, IDEs, email, and chat when you want a polished app, local Whisper for free, or faster cloud STT on your own API budget</li>
</ul>
<h3>🎉 <strong>Conclusion</strong>
    </h3><p>Handy and HNS are the lean open-source picks: desktop shortcut or terminal to clipboard, no account, no vendor. Spokenly fills the gap when you want a maintained cross-platform app, free local Whisper forever, or BYOK cloud when you need speed without paying Spokenly for inference. All three let you keep voice data off a stranger&rsquo;s server if you stay on local mode.</p>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Notational Intelligence, Linus Lee | Compile 26</title><link>https://www.tmfnk.com/see/videos/notational-intelligence-linus-lee/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/notational-intelligence-linus-lee/</guid><description>Linus Lee on how the way we write down ideas shapes our thinking, and why deep learning might let us invent entirely new kinds of notation.</description><content:encoded><![CDATA[

<h2>🎥 Notational Intelligence, Linus Lee | Compile 26
    </h2><p>Linus Lee (Thrive Capital). Duration: 17 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/rv_VS189aVI?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI" target="_blank" rel="noopener">0:00</a> Notational intelligence</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=87s" target="_blank" rel="noopener">1:27</a> What makes good notation</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=148s" target="_blank" rel="noopener">2:28</a> Abstraction</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=198s" target="_blank" rel="noopener">3:18</a> Suggestiveness and natural transformations</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=328s" target="_blank" rel="noopener">5:28</a> Graphical notation</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=387s" target="_blank" rel="noopener">6:27</a> The coordinate plane and the arrow</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=494s" target="_blank" rel="noopener">8:14</a> Programming languages as notation</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=568s" target="_blank" rel="noopener">9:28</a> Inventing new notation with deep learning</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=673s" target="_blank" rel="noopener">11:13</a> Building the toy model</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=822s" target="_blank" rel="noopener">13:42</a> The handout and training results</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=903s" target="_blank" rel="noopener">15:03</a> Invariants that make symbols meaningful</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=956s" target="_blank" rel="noopener">15:56</a> Our world vs. an alien world of ideas</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=990s" target="_blank" rel="noopener">16:30</a> Models as a simulator for anything</li>
</ul>
<p>Linus Lee thinks notations (how we write things down) might have a bigger impact on human intelligence than the machines we build. He walks through what makes a great notation, then builds a toy deep learning model that invents its own alphabet from scratch.</p>
<ol>
<li>
<p><strong>More of the world is notation than computation.</strong> Lee points out that in a room of a few thousand people, there are maybe a thousand computers but probably a hundred times more instances of notation: symbols, maps, notes, signage. He argues notations are the invisible infrastructure of thinking, and we barely notice them.</p>
</li>
<li>
<p><strong>Abstraction is the first superpower of good notation.</strong> When you write y = mx + b, that b isn&rsquo;t one number. It&rsquo;s a whole family of possible numbers. You can manipulate an entire set of relationships by moving a single symbol. That&rsquo;s notational leverage.</p>
</li>
<li>
<p><strong>Suggestiveness means the shape of the symbol does work for you.</strong> Lee compares Leibniz&rsquo;s dy/dx (suggestive, you can multiply and rearrange it) with Newton&rsquo;s dot notation (simple but inert). Leibniz won because the notation itself invites manipulation. Terry Tao calls this a &ldquo;natural transformation&rdquo;: operating on the symbol does something real to the idea.</p>
</li>
<li>
<p><strong>The arrow is shockingly young.</strong> The earliest recorded arrow symbol is from 1737, barely 300 years old. Before that, if you wanted to point at something you drew a hand. Someone had to invent the arrow, and that invention changed how we think on paper. Lee&rsquo;s point: notations are designed, not discovered.</p>
</li>
<li>
<p><strong>Flatness is a feature.</strong> 3D notation could exist, but 2D is mobile, scalable, copyable. You can bring the same geometric tools (arrows, ratios, measurement) to a map of a continent or a diagram of a bacterium. The medium&rsquo;s constraints become its strengths.</p>
</li>
<li>
<p><strong>Programming languages are a kind of notation, and indentation is graphical.</strong> Lee argues that when you indent code or syntax-highlight it, you&rsquo;re using visual perception biases. The same ones that make the coordinate plane work are communicating scope and structure. Your editor is a notational system.</p>
</li>
<li>
<p><strong>Lee built a toy model that invents its own alphabet.</strong> He set up a generator that draws 32x32 grayscale images of symbols and a decoder that tries to read them back. The model learned 1,024 distinct symbols, an entirely made-up writing system, starting from noise. Over training, it progressed from basic black-and-white to complex shapes. It looks a lot like the evolution of written language.</p>
</li>
<li>
<p><strong>Without visual constraints, the model cheats.</strong> Train it naively and it maps each concept to a single pixel. Lee had to impose scale invariance, rotation invariance, and brightness invariance. These are the same biases human visual perception has, and they force the model to learn real, meaningful shapes. The invariants are what make the symbols work for both the model and any human who might read them.</p>
</li>
<li>
<p><strong>The real promise is treating models as simulators for alien worlds.</strong> Lee draws a split. On one side, notations humans invented organically over centuries. On the other, a model imagining totally new ways of writing down ideas, not constrained by human language, human perception, or human physics. He thinks that is where things get interesting: using deep learning not just to model our world, but to speak ideas we don&rsquo;t yet have words for.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/see/videos/mit-quest-judy-fan/" >The MIT Quest: Judy Fan</a></strong> Judy Fan studies how humans learn new concepts from limited data. It is the cognitive science side of the same question Lee approaches from deep learning.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/software-in-the-era-of-ai-by-andrej-karpathy/" >Software in the Era of AI by Andrej Karpathy</a></strong> Karpathy&rsquo;s vision of AI reshaping how we write software shares Lee&rsquo;s premise: the tools we use to think change what we can think about.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/sergey-brin-where-frontier-ai-is-headed/" >Sergey Brin: Where Frontier AI Is Headed</a></strong> Brin discusses how AI capabilities transfer and converge in ways nobody engineered. It is a practical echo of Lee&rsquo;s argument that notation shapes thinking more than we realize.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/state-of-agentic-coding-6-armin-ronacher-ben-vinegar/" >State of Agentic Coding #6 with Armin Ronacher and Ben Vinegar</a></strong> Cursor is the channel hosting this talk, and the agentic coding conversation explores how the interface between humans and code is itself a rapidly evolving notational system.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Explaining Culture to Technology, Paul Ford | Compile 26</title><link>https://www.tmfnk.com/see/videos/explaining-culture-to-technology-paul-ford/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/explaining-culture-to-technology-paul-ford/</guid><description>Paul Ford, veteran magazine writer turned technologist, explains what the culture industry can teach software engineers about process, prediction, and the strange new world of AI.</description><content:encoded><![CDATA[

<h2>🎥 Explaining Culture to Technology, Paul Ford | Compile 26
    </h2><p>Paul Ford. Duration: 12 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/BEi1ryQPGbk?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk" target="_blank" rel="noopener">0:00</a> Introduction: explaining culture to technology</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=73s" target="_blank" rel="noopener">1:13</a> How a magazine actually works</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=142s" target="_blank" rel="noopener">2:22</a> &ldquo;Rhetoric greater than facts&rdquo;</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=230s" target="_blank" rel="noopener">3:50</a> People use media to simulate and predict</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=308s" target="_blank" rel="noopener">5:08</a> The Catholic Church as a predictive model</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=390s" target="_blank" rel="noopener">6:30</a> Richard Leakey: one monkey simulating another</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=448s" target="_blank" rel="noopener">7:28</a> Culture as a distributed lossy prediction model</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=498s" target="_blank" rel="noopener">8:18</a> Software hates shipping</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=555s" target="_blank" rel="noopener">9:15</a> Vibe coding as prose production</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=618s" target="_blank" rel="noopener">10:18</a> Slop is omnipresent</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=642s" target="_blank" rel="noopener">10:42</a> LLMs are culture.zip</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=666s" target="_blank" rel="noopener">11:06</a> BASIC is like a poem</li>
</ul>
<p>Paul Ford has spent decades as both a magazine editor and a software engineer. Cursor asked him to explain culture to technologists. He took the assignment seriously and made it as weird as he wanted.</p>
<ol>
<li>
<p><strong>A magazine is not its output. It is a network.</strong> Most people see a magazine as articles, covers, illustrations. Ford, who worked at Wired and The New York Times, says people inside magazines see it as a distributed network between writers, editors, and readers. A shared understanding, not a document. The published artifact is almost incidental.</p>
</li>
<li>
<p><strong>&ldquo;Rhetoric greater than facts.&rdquo;</strong> Early in his editing career, Ford organized every fact about a Guantanamo Bay piece. His editor told him to delete all of them. The reader has a contract with the publication: they trust the voice, they know what it stands for, and they do not have time for every supporting detail. Give them the rhetoric and assume the facts will follow.</p>
</li>
<li>
<p><strong>Nobody lets you live in their head.</strong> Ford used to think writing meant programming people&rsquo;s brains. He learned that people do not care about him. They read to simulate and understand their own world, to predict their own future. They use media like a flight simulator for living.</p>
</li>
<li>
<p><strong>The Catholic Church is a predictive model.</strong> One book, double down on it, it tells you how things will go (especially after you die). Ford contrasts Databricks&rsquo; conference across the street from a Catholic church in San Francisco and asks which model will outlast the other.</p>
</li>
<li>
<p><strong>Richard Leakey&rsquo;s theory of consciousness: one monkey simulating another.</strong> A monkey sees another monkey with a banana. Instead of grabbing it, he waits until the other monkey turns. That is consciousness: simulating another being&rsquo;s internal state for reproductive advantage. The simulation eventually turned inward.</p>
</li>
<li>
<p><strong>Culture is a distributed lossy prediction model.</strong> Nobody has all of culture in their brain. Media is the file system. You load a movie or a book into your cultural brain, experience it, and put it away. It lets you explore anxiety, status, and identity without real-world risk.</p>
</li>
<li>
<p><strong>Software hates shipping.</strong> Ford argues the entire history of software engineering is an industrial risk-reduction process built around the fact that software does not want to be produced. Agile, stand-ups, methodologies: all begging engineers to get the code across the finish line. It was a priesthood, and he was proud to be part of it.</p>
</li>
<li>
<p><strong>Vibe coding feels like prose production.</strong> Ford says his experience as a technologist now feels much more like his old life as a magazine writer. That is spooky because prose is a tiny industry and programming is trillions of dollars. He does not know how it works out, but suspects it will work out great.</p>
</li>
<li>
<p><strong>Slop is not new. Every first draft is an atrocity.</strong> Everything a writer produces is an embarrassing disaster. That is what editorial process is for. AI slop is just another kind of bad first draft. It is easy to fix if you have good editorial frameworks.</p>
</li>
<li>
<p><strong>LLMs are culture.zip.</strong> All the media the culture has ever produced is being compressed into a model. The former formal culture of process-driven engineering is now being run by individuals using a culture simulator to produce artifacts. The methods look a lot more like media than like Agile.</p>
</li>
<li>
<p><strong>Ford&rsquo;s father showed him BASIC and said: &ldquo;It&rsquo;s like a poem.&rdquo;</strong> His father, an English professor and a nerd, explained that a BASIC program compresses as much information as possible into a small space to accomplish something. Poems are the same way. Ford has carried that connection for 40 years and thinks it is finally starting to make sense.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/see/videos/notational-intelligence-linus-lee/" >Notational Intelligence, Linus Lee | Compile 26</a></strong> Linus Lee also spoke at Compile 26 about how notation shapes thinking. Ford approaches the same territory from the opposite direction: what writing and editing have always known about shared understanding.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/state-of-agentic-coding-6-armin-ronacher-ben-vinegar/" >State of Agentic Coding #6 with Armin Ronacher and Ben Vinegar</a></strong> Cursor hosts both this talk and the agentic coding conversation. The interface between humans and code is changing fast, and Ford&rsquo;s argument that programming now looks like media production is part of that shift.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/software-in-the-era-of-ai-by-andrej-karpathy/" >Software in the Era of AI by Andrej Karpathy</a></strong> Karpathy coined &ldquo;vibe coding,&rdquo; which Ford name-checks directly. Both see AI changing what it means to write software.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/mit-quest-judy-fan/" >The MIT Quest: Judy Fan</a></strong> Judy Fan studies how humans learn and simulate from limited data. Ford&rsquo;s Leakey-inspired model of consciousness as simulation fits the same frame.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Enhanced Rationality in Autism: What the Biases Literature Gets Wrong About Everyone Else</title><link>https://www.tmfnk.com/read/articles/enhanced-rationality-autism-rozenkrantz-2021/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/enhanced-rationality-autism-rozenkrantz-2021/</guid><description>Rozenkrantz, D'Mello and Gabrieli review lab evidence that many autistic people judge more objectively on classic bias tasks. Irrationality is not universal. It is often what emotion, context, and shortcuts add.</description><content:encoded><![CDATA[
<p><em>Source: <a href="https://www.cell.com/trends/cognitive-sciences/fulltext/S1364-6613%2821%2900125-X" target="_blank" rel="noopener">Rozenkrantz, D&rsquo;Mello &amp; Gabrieli (2021)</a>, Trends in Cognitive Sciences, Vol. 25, No. 8, pp. 685-696 · DOI <a href="https://doi.org/10.1016/j.tics.2021.05.004" target="_blank" rel="noopener">10.1016/j.tics.2021.05.004</a></em></p>
<p>Economics textbooks describe a rational agent who weighs all relevant information. Kahneman and Tversky showed real humans shortcut that job with heuristics, which is why we get framing effects, sunk-cost traps, and the rest. A 2021 MIT review asks a sharper question: who is the &ldquo;human&rdquo; in &ldquo;predictably irrational&rdquo;?</p>
<ol>
<li>
<p>The review&rsquo;s Table 1 lists seven bias domains where autistic participants often outperform neurotypical controls: less intuitive reasoning (more deliberative answers on problems like the $1.10 coffee-and-pastry riddle), reduced conjunction fallacy when stories feel representative, stable choices despite decoy options (attraction effect), less sunk-cost chasing, smaller framing effects, symmetric belief updating without optimism bias, and higher acceptance of economically beneficial &ldquo;unfair&rdquo; offers in the ultimatum game (about twice the rate in some studies).</p>
</li>
<li>
<p>The pattern is not &ldquo;autistic people are better at probability.&rdquo; When conjunction puzzles lack salient stories, autistic and neurotypical groups err similarly. The edge is resisting vivid but irrelevant information, not mastering formal logic. The same holds for item descriptions without social context: enhanced rationality still shows up, so this is not just &ldquo;social naivety&rdquo; in disguise.</p>
</li>
<li>
<p>Reward and emotion matter, but the story is nuanced. Framing effects shrink in ASD; galvanic skin response to gains versus losses is flatter in one study; controlling for alexithymia does not erase the framing advantage in another. Yet probabilistic learning is mixed: some papers find better long-run learning, and a 2020 meta-analysis found no consistent Iowa Gambling Task advantage. The review treats reward-based rationality as real in several paradigms, not as a universal law.</p>
</li>
<li>
<p>Two other mechanisms probably stack. Weak central coherence and predictive-coding accounts both predict less weight on context and priors, more weight on raw details, slower Type 2 processing. That maps onto dual-process findings: autistic participants and people high in autistic traits (measured by questionnaires like the Autism Quotient) report and show less fast intuition. Heuristics buy speed for neurotypical minds; skipping them may buy accuracy at a cost the paper still flags as open.</p>
</li>
<li>
<p>Social life is not a clean win. Autistic people may know race and gender stereotypes explicitly yet show reduced implicit bias on some measures. Higher autistic traits in nonclinical samples predict better predictions about crowd-level social psychology, mediated by systemizing. Moral judgment is messier: more weight on actions and outcomes than intentions, which the authors refuse to call clearly more or less rational.</p>
</li>
<li>
<p>You cannot generalize from the lab to the whole spectrum. Box 4 is explicit: enhanced-rationality studies need verbal fluency, instruction-following, and complex tasks, so they oversample cognitively matched participants. Adults with intellectual disability or minimal speech are underrepresented. Autistic adults also self-report real-world decision difficulties. Lab rationality and daily functioning are not the same thing.</p>
</li>
<li>
<p>The authors frame stakes beyond academia. Nearly half of autistic 18-year-olds in the US do not hold a paying job until 25, the lowest employment rate among diagnostic categories in the statistic they cite. They argue bias-resistant reasoning could be an asset in auditing, data checking, contract review, and other roles if employers map strengths instead of treating autism as deficit-only.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Stop treating Kahneman-era bias lists as human nature. They describe a common neurotypical default under emotion, reward pressure, and context. If you design consent forms, pricing, or hiring tests around those biases, test whether they hold for your actual users. And if you work with autistic people, ask where careful, decoy-resistant reasoning is an asset, not only where social intuition is expected.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/predicting-loss-adversion/" >Predicting loss aversion behavior with machine-learning methods</a></strong> Loss overweighting is one of the biases this review reports autistic participants often resist.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/stress-disrupts-memory-inference-schuren-2026/" >Why You Can&rsquo;t Think Under Pressure: Stress Shatters the Brain&rsquo;s Memory-Linking System</a></strong> Another paper on how context and affect reshape cognition beneath &ldquo;rational actor&rdquo; stories.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/plasticity-language-anaesthetized-hippocampus/" >Plasticity and Language in the Anaesthetized Human Hippocampus</a></strong> Brain-level evidence that minds differ in how they process information, not just in how well they score on quizzes.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Closer to the Material: How AI Changes How We Build, Ryo Lu | Compile 26</title><link>https://www.tmfnk.com/see/videos/closer-to-the-material-ryo-lu/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/closer-to-the-material-ryo-lu/</guid><description>Ryo Lu, designer at Cursor, on how AI collapses the distance between ideas and reality, and why the interface must keep humans close to the material rather than turning them into approvers.</description><content:encoded><![CDATA[

<h2>🎥 Closer to the Material: How AI Changes How We Build and What It Must Not Erase, Ryo Lu | Compile 26
    </h2><p>Ryo Lu (Cursor). Duration: 21 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/az6OEZV8iHw?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw" target="_blank" rel="noopener">0:00</a> Building ryOS</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=81s" target="_blank" rel="noopener">1:21</a> What should exist?</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=131s" target="_blank" rel="noopener">2:11</a> The loop AI changes</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=257s" target="_blank" rel="noopener">4:17</a> The black box risk</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=403s" target="_blank" rel="noopener">6:43</a> Output vs. material</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=511s" target="_blank" rel="noopener">8:31</a> The Glass interface</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=674s" target="_blank" rel="noopener">11:14</a> Prototyping Glass with Cursor</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=843s" target="_blank" rel="noopener">14:03</a> When software felt alive</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=1056s" target="_blank" rel="noopener">17:36</a> Where craft moves</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=1225s" target="_blank" rel="noopener">20:25</a> A more human future</li>
</ul>
<p>Ryo Lu designs at Cursor and gave probably the most philosophical talk at Compile 26. He built a personal computing environment called ryOS as a way of thinking through what AI should and should not take away.</p>
<ol>
<li>
<p><strong>Ryo built ryOS because he missed when computers felt alive.</strong> Not siloed apps, not command prompts. A place he could tinker and think in. Before Cursor, that feeling would have stayed a note in his head. Instead he built a piece of it, played with it, reshaped it, and eventually it stopped being a vibe-coded prototype and became a place he could think inside. &ldquo;It has my soul.&rdquo;</p>
</li>
<li>
<p><strong>The loop is the thing AI actually changes.</strong> Before, making software was expensive. You planned before touching the material because being wrong cost a lot. Now the loop is minutes or seconds: idea, ask for a version, inspect, change, run it, keep going. That changes how judgment forms because the first version is almost never right, and you only notice after it exists.</p>
</li>
<li>
<p><strong>That small correction cycle is where taste comes from.</strong> You try something. The world answers. You notice what feels wrong. You adjust. That is where craft develops. The promise of AI is not making more things faster; it is letting more people into that loop as deep as they want.</p>
</li>
<li>
<p><strong>The black box is the risk.</strong> When the loop gets hidden, people stop learning from it. You make a wish, you get an output, you accept or reject. You never know why it worked or where it failed. Ryo calls this &ldquo;pulling a slot machine.&rdquo; If AI makes execution cheaper but judgment weaker, we do not get a renaissance. We get slop with working buttons.</p>
</li>
<li>
<p><strong>More people can build and more mediocre things can be built, and both are true.</strong> When things cost almost nothing to make, mediocre things do not look bad. They look fine. They ship. They fill the space. Ryo worries about software that functions but means nothing, interfaces that are correct but feel dead, products made by agents and cared for by no one.</p>
</li>
<li>
<p><strong>The danger is confusing output with material.</strong> Output ends the loop. Material invites you back in. Output says &ldquo;Here&rsquo;s the answer.&rdquo; Material says &ldquo;Touch it, shape it, make it yours.&rdquo; Making is not just producing an artifact. It is a way of thinking. If AI hides too much of the process, it takes away the struggles where you become stronger.</p>
</li>
<li>
<p><strong>Glass is Cursor&rsquo;s answer: a design principle, not a visual style.</strong> The system should let you see through its work. You see the plan, the thoughts, the tools streaming, the changes, the commands. You can stop it, shape it, inspect deeper, take over. You do not have to read every line, but you always can. Black boxes optimize for clean output. Glass optimizes for human agency.</p>
</li>
<li>
<p><strong>They prototyped Glass by building Cursor with Cursor.</strong> The prototype started as Baby Cursor 3, an Electron app on top of the Cursor CLI. The point was to feel the questions, not answer them in Figma: what should the interface feel like with one-to-N agents? How much state should be visible? Speed was not the interesting part. Faster prototyping helped them arrive at conviction.</p>
</li>
<li>
<p><strong>Software used to have texture. Then we optimized it away.</strong> Ryo remembers when the Mac dock bounced, the Genie effect swooped, Exposé scattered windows like cards. None of it was necessary, but all of it felt like someone cared. The quirks got removed because they did not test well. The warmth got cut because it was not measurable. We optimized our way into a world of things that work perfectly but feel like nothing.</p>
</li>
<li>
<p><strong>Taste is not a prompt. Caring is not a parameter.</strong> When making things costs almost nothing, slop becomes free too. Ryo&rsquo;s argument: humans matter more, not less. The weird, specific, personal thing you put into something cannot be averaged into existence.</p>
</li>
<li>
<p><strong>Craft does not disappear. It moves upstream and downstream.</strong> When execution was expensive, craft lived in the code. When generation becomes cheap, craft moves upstream to judgment: what to ask, what to keep, what to refuse, where to slow down, what not to make. And downstream to responsibility: what did we release, what did it change, who did it serve? Making is a bet on what kind of world should exist.</p>
</li>
<li>
<p><strong>The point of AI is not to make humans disappear.</strong> Ryo ends where he started: feeling that something should exist, and making it real enough for someone else to see and touch. That part has not changed and will not change. The tools will change, the models will change, the economics will change. But that part stays.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/see/videos/explaining-culture-to-technology-paul-ford/" >Explaining Culture to Technology, Paul Ford | Compile 26</a></strong> Paul Ford also spoke at Compile 26 about the collision of media and software. Both talks frame AI not as a productivity tool but as something that changes what it means to make things.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/notational-intelligence-linus-lee/" >Notational Intelligence, Linus Lee | Compile 26</a></strong> Linus Lee&rsquo;s talk on notation and shared understanding pairs with Ryo&rsquo;s argument that the interface between humans and agents must be legible, not hidden.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/state-of-agentic-coding-6-armin-ronacher-ben-vinegar/" >State of Agentic Coding #6 with Armin Ronacher and Ben Vinegar</a></strong> Cursor hosts this talk and the agentic coding conversation. Ryo&rsquo;s Glass interface is the design response to the same questions about how humans stay in control as agents get more powerful.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/software-in-the-era-of-ai-by-andrej-karpathy/" >Software in the Era of AI by Andrej Karpathy</a></strong> Karpathy&rsquo;s vision of AI reshaping software development is what Ryo is designing for. His warning about taste and caring echoes Karpathy&rsquo;s own cautions about slop.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>TinyWind: Pixel Pirate Sailing in Your Browser</title><link>https://www.tmfnk.com/enjoy/games/tinywind/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/enjoy/games/tinywind/</guid><description>A free browser roguelite where wind physics, points of sail, and five-minute voyages matter more than combat stats. Tack between islands, plunder historical treasure, climb the ranked ladder.</description><content:encoded><![CDATA[

<h2>🎮 TinyWind
    </h2><p>tinywind. Browser. <a href="https://tinywind.io/" target="_blank" rel="noopener">Play it here</a> · <a href="https://tinywind.itch.io/tinywind" target="_blank" rel="noopener">itch.io</a></p>
<p>I opened TinyWind expecting a cute pixel boat and got stuck adjusting sail trim because the wind kept shifting. It is a pirate roguelite in early alpha where each voyage is a fresh run, and the hook is not cannon damage. It is whether you can read the breeze.</p>
<ol>
<li>
<p>You sail for real, not on rails. The game models wind and points of sail, so beam reach, tacking, jibing, and broadside matter. Touch and keyboard both work. You are fighting the vector field as much as any enemy ship.</p>
</li>
<li>
<p>Runs are built for short sessions. Voyages land in the five-minute range, which fits a browser tab between meetings. British Waters pit you against the Royal Navy; Spanish Waters bring the Armada. Two more modes are in the works, including safe-zone PvP.</p>
</li>
<li>
<p>Loot is the meta loop. There are 38 historical treasures to plunder, each with a real Wikipedia link, plus mythic pets and legendary cursed cargo that passively buff your ship. A live leaderboard and ranked ladder unlock prestige cosmetics if you care about placement.</p>
</li>
<li>
<p>It is still alpha. Features ship fast and rough edges show. That is fine if you like watching a small game grow. Less fine if you want a finished campaign.</p>
</li>
</ol>
<p><strong>Play it if:</strong> you want a free sailing roguelite that rewards patience with the wind, not reflex spam.</p>
<p><strong>Skip it if:</strong> you hate wind mechanics, or you need a polished 40-hour RPG. This is a voyage, not a world map.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/aquaria/" >Aquaria</a></strong> Another water-forward indie where movement through a fluid world is the whole pleasure, even if TinyWind trades exploration for wind math.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/100-jumps/" >100 Jumps: Hold, Release, Don&rsquo;t Fall</a></strong> Same browser-tab energy: one core skill, short runs, and a counter that tells you when you blew it.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/starfling/" >Starfling: Tap, Release, Sling Between Stars</a></strong> Different fantasy, same idea that a tiny web game can hide real physics under simple controls.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Dungeon Proof Crawler: Roguelike Proofs in Your Browser</title><link>https://www.tmfnk.com/enjoy/games/dungeon-proof-crawler/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/enjoy/games/dungeon-proof-crawler/</guid><description>A browser roguelike where every monster is an unfinished Algae proof. Replace wip holes, press Cast Proof, and descend seven floors before sunrise. The WASM kernel checks every step locally.</description><content:encoded><![CDATA[

<h2>🎮 Dungeon Proof Crawler
    </h2><p>dhilst (Algae). Browser. <a href="https://dhilst.github.io/algae/game/index.html" target="_blank" rel="noopener">Play it here</a> · <a href="https://dhilst.github.io/algae/" target="_blank" rel="noopener">Tutorial</a> · <a href="https://github.com/dhilst/algae" target="_blank" rel="noopener">GitHub</a></p>
<p>I clicked in expecting a pixel dungeon and got a lemma. A demon stole your wedding ring on the eve of the wedding; Miriam wants it back before sunrise. You descend seven levels, and each sphinx or dragon guards an unfinished formal proof, not a health bar.</p>
<ol>
<li>
<p>Combat is proof completion. Every room holds a monster and an Algae proof that ends in <code>wip</code>, the marker for a goal you have not closed yet. Replace each <code>wip</code> with a real step, finish the block with <code>qed</code>, and press Cast Proof. The same WebAssembly kernel that powers the Algae playground re-checks every step locally. No errors and nothing left admitted means the monster falls.</p>
</li>
<li>
<p>Difficulty tracks depth, not gear. Early floors ask for a single <code>refl</code>. Near the bottom you are writing full proofs by induction. Beat monsters to raise your max health, open chests for food and lore, and keep moving: hunger drains while you stare at a stuck goal.</p>
</li>
<li>
<p>The win condition is a story beat. Reach Level -6, recover the ring, and climb back out before sunrise. World generation, your run, and saved progress all stay in the browser. Nothing leaves the page.</p>
</li>
<li>
<p>It is a teaching toy with rough edges. The author says progression and help text still need manual work, and some challenges can fail to load. Fair warning if you hit a soft lock. The <a href="https://dhilst.github.io/algae/tutorial/index.html" target="_blank" rel="noopener">Algae tutorial</a> is the real prerequisite; the crawler assumes you can already read a proof tree.</p>
</li>
</ol>
<p><strong>Play it if:</strong> you want a roguelike skin on proof practice, or you liked formal methods in school and miss them.</p>
<p><strong>Skip it if:</strong> logic puzzles make you quit tabs, or you want combat that does not end in <code>qed;</code>. This is a proof editor wearing a dungeon coat.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/chess-in-pure-sql/" >Chess in Pure SQL: Play Chess Against a Database</a></strong> Another browser oddity where the game is really a formal system pretending to be fun.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/euclidea/" >Euclidea</a></strong> Construction puzzles with the same satisfaction of a step that either checks or does not.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/tinywind/" >TinyWind: Pixel Pirate Sailing in Your Browser</a></strong> Different genre, same HN-era browser roguelite energy and honest alpha caveats.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Mohnish Pabrai on Dhandho Investing, Checklists, and Korea</title><link>https://www.tmfnk.com/see/videos/mohnish-pabrai-kim-kiho-knowledge-inside/</link><pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/mohnish-pabrai-kim-kiho-knowledge-inside/</guid><description>Pabrai sits with Kim Kiho on Knowledge Inside for 54 minutes: the $650k Buffett lunch, a 213-question FAA checklist, Korea memory chips, Turkey's Reysas, AI as a shiny object, and Dakshana.</description><content:encoded><![CDATA[

<h2>🎥 Mohnish Pabrai on Dhandho Investing, Checklists, and Korea
    </h2><p>Knowledge Inside · Kim Kiho. Duration: ~54 min · Published June 8, 2026</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/NVD-m9seDe4?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h2>Timestamps
    </h2><ul>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4" target="_blank" rel="noopener">0:00</a> Introduction</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=102s" target="_blank" rel="noopener">1:42</a> Lunch with Warren Buffett vs. Eric Schmidt; Charlie Munger</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=706s" target="_blank" rel="noopener">11:46</a> South Korea demographics; SK Hynix, Samsung &amp; Micron</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=1037s" target="_blank" rel="noopener">17:17</a> KOSPI</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=1075s" target="_blank" rel="noopener">17:55</a> FAA-inspired investment checklist; Buffett&rsquo;s Dexter Shoes</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=1525s" target="_blank" rel="noopener">25:25</a> Three checklist essentials; IKEA and Amorepacific</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=1877s" target="_blank" rel="noopener">31:17</a> Active vs. passive; hunting risk-free investments</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=2108s" target="_blank" rel="noopener">35:08</a> Turkey; Reysas</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=2362s" target="_blank" rel="noopener">39:22</a> Dhandho: heads I win, tails I don&rsquo;t lose much</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=2478s" target="_blank" rel="noopener">41:18</a> AI investing; don&rsquo;t buy shiny items</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=2617s" target="_blank" rel="noopener">43:37</a> Building wealth; Rule of 72; the 1623 Manhattan deal</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=3022s" target="_blank" rel="noopener">50:22</a> Giving back; Dakshana Foundation</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=3230s" target="_blank" rel="noopener">53:50</a> Advice to listeners</li>
</ul>
<p>Pabrai manages about $1.4 billion and gives long interviews when the venue fits. This hour with Kim Kiho on Knowledge Inside walks through how he actually invests: hold businesses forever, run a crash-driven checklist, and buy what is hated while everyone chases the next shiny object.</p>
<ol>
<li>
<p>The 2007 Buffett charity lunch cost $650,100, well under the $2 million cap Pabrai set as a tuition bill on the $70 million he had already made applying Buffett&rsquo;s ideas. He co-bid with Guy Spier; his only goal was to thank Buffett. Buffett read everyone&rsquo;s bio beforehand and set no time limit. Pabrai rates that lunch 15 out of 10. A separate Eric Schmidt lunch at Google&rsquo;s cafeteria scored 2 out of 10: Schmidt checked his watch every 15 minutes and left at the one-hour mark. When Pabrai&rsquo;s wife said she preferred Charlie Munger, Buffett arranged a Munger lunch that Pabrai enjoyed more, and a lasting friendship followed with home visits every three or four months.</p>
</li>
<li>
<p>On Korea, Pabrai praises the country but worries about population decline faster than Japan&rsquo;s. Shrinking headcount caps total output unless you are an export powerhouse, and even then you face tariffs and rising labor costs. Hyundai is cheaper to build in Alabama than in Korea, he says. He currently holds no Korean stocks. On memory semis, he regrets selling SK Hynix and Micron when he should have held forever. Samsung, SK Hynix, and Micron sit in a protected oligopoly where a fourth entrant would need patents, engineers, and 10 to 20 years of fab work. If you already own them, do not sell. The party has just started, he says. If you do not own them, do not buy now.</p>
</li>
<li>
<p>KOSPI is lopsided because Samsung and SK Hynix dominate the index. The rest of the market still looks somewhat undervalued to him, but the population headwind is real. Domestic, non-export businesses face the hardest path. Export champions get tailwinds with their own complications.</p>
</li>
<li>
<p>His 213-question checklist copies the FAA&rsquo;s crash-first logic. A plane crash triggers investigation; only then does aviation change. In investing, a crash is a stock that lost you money or went to zero. He built the list from great investors&rsquo; visible mistakes. Buffett&rsquo;s Dexter Shoes, wiped out by cheap foreign labor, spawned a question about foreign-competition risk on every new idea. He started 16 or 17 years ago with 70 to 80 questions; now he runs all 213 before any purchase, usually in one or two hours once the research is done. He makes two or three new investments a year and cites the Korean Air peanut girl episode as what happens when you skip the pre-flight list.</p>
</li>
<li>
<p>For retail investors he boils the checklist to three items. No leverage in the company or your margin account: IKEA&rsquo;s founder ran 70 years without borrowing a single won or euro. Moat durability: memory chips went from a terrible business with 20 competitors to a great one with three; Amorepacific is a hard business with a shallow moat despite loyal customers. Governance: owners should love the business, not love the money.</p>
</li>
<li>
<p>More than 99% of investors should buy an index fund, Pabrai says. Active stock-picking only makes sense if you can forecast a company&rsquo;s cash flows 10 to 20 years out with high certainty. He uses SK Hynix as the test case. The deals he wants look almost risk-free: a regulated Korean power company earning $100 million a year, bought for $300 million, paying out 100% of earnings, pays back your capital in three years while you still own the asset for decades. Those anomalies live in hated, unloved sectors, not in whatever the crowd loves this year.</p>
</li>
<li>
<p>About 70% of his portfolio sits in Turkey, a market he entered seven years ago because it screened as the world&rsquo;s cheapest. Reysas, a warehouse landlord to Amazon, IKEA, Mercedes, and others, traded at a $16 million market cap against roughly $800 million of liquidation value, about 2% of asset value. After due diligence he built a large stake and now owns about 40%. Seven years later the market cap is about $1.5 billion and liquidation value about $2.5 billion, and he intends to hold as long as the founding family runs it.</p>
</li>
<li>
<p>Dhandho, for him, starts with one question: how can this investment lose money? On Reysas the answer had to be it can&rsquo;t: no debt, Fortune 500 tenants on long leases, earthquake standards and insurance checked after Turkish quakes hit with no warehouse damage. Applied to AI, the framework says stay away. AI is deeply loved, and loved is the wrong side. Bitcoin was loved, then AI replaced it as the shiny object; next, he predicts, the crowd will rotate into the SpaceX IPO. Please don&rsquo;t buy shiny objects, he tells the audience.</p>
</li>
<li>
<p>Asked what to do with $1,000, he names Berkshire Hathaway (BRK.B): lots of cash, no leverage, strong management, deep moat, boring, hated, and unloved. Building wealth from scratch is two moves: spend less than you earn, and put the surplus into something equally boring, Berkshire or an index, and keep adding.</p>
</li>
<li>
<p>He tells the 1623 Manhattan story to teach Rule of 72. Native Americans sold the island for $23; at 7% compounded, money doubles every 10 years (72 divided by 7), and over four centuries that $23 would grow to roughly $28 trillion, far more than Manhattan&rsquo;s land is worth today. The lesson: the Indians were not cheated; they needed a patient investment officer. Compounding plus savings beats chasing excitement.</p>
</li>
<li>
<p>He still invests because he treats it as a game, bridge and chess, not team sports. He asked Google&rsquo;s AI when he will die and got June 11, 2054; he wants $10,000 left on June 10 and everything else given away through the Dakshana Foundation, which educates poor, gifted kids in India. One engine compounds; the other gives, and giving must accelerate as wealth grows. He closes with a German proverb: if wealth is lost, nothing is lost; if health is lost, something is lost; if character is lost, everything is lost.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/books/the-dhandho-investor-by-mohnish-pabrai/" >The Dhandho Investor by Mohnish Pabrai</a></strong> The book behind the heads-I-win frame he restates on Reysas in this interview.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/tip-812-mohnish-pabrai-berkshire-letting-winners-run/" >TIP812: Mohnish Pabrai: Berkshire &amp; Letting Winners Run</a></strong> Another long Pabrai sit-down on holding winners and cloning Buffett.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/charlie-munger-saving-first-100k/" >Charlie Munger: Saving the First $100,000 Will Change Your Life</a></strong> Munger is the partner Pabrai says he came to know better after the Buffett lunch backfired.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/compounding-magic/" >The Magic of Compounding: How Small Investments Create Massive Wealth</a></strong> Written companion to the Rule of 72 and Manhattan parable in the back half of this interview.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Fine-Tune a Local SLM to Clean Master Data on Your Mac</title><link>https://www.tmfnk.com/use/tutorials/local-slm-data-cleaner-macos/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/local-slm-data-cleaner-macos/</guid><description>Walk through the free Local-SLM-Data-Cleaner demo on Apple Silicon—then see what the Enterprise-SLM-Data-Cleaner adds for production (YAML conventions, audit trail, air-gapped deploy, CI gates).</description><content:encoded><![CDATA[

<p>By the end you have a ~600 MB model on disk that takes messy vendor, customer, or material JSON and returns normalized fields (ISO country codes, trimmed text, canonical IBANs, fixed dates and amounts) with a rule-based safety net behind it. Plan on 30–45 minutes on an Apple Silicon Mac; most of that is downloads and training, not typing.</p>
<p>This tutorial follows the free demo repo, <a href="https://github.com/TMFNK/Local-SLM-Data-Cleaner" target="_blank" rel="noopener">Local-SLM-Data-Cleaner</a>. The same approach ships in production form as <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner" target="_blank" rel="noopener">Enterprise-SLM-Data-Cleaner</a>—client-specific YAML rulebooks, an append-only audit log, air-gapped containers, CI quality gates, and swappable base models (including European options). The steps below are the demo; the enterprise section at the end is where you go when a laptop proof-of-concept is not enough.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>Clone <a href="https://github.com/TMFNK/Local-SLM-Data-Cleaner" target="_blank" rel="noopener">Local-SLM-Data-Cleaner</a>, run <code>make setup</code> then <code>make model</code>.</li>
<li><code>make data</code> builds 1,000 synthetic messy→clean pairs from deterministic rules in <code>convention_spec.py</code> (no real client data).</li>
<li><code>make baseline-serve</code> + <code>make baseline</code> scores the stock Qwen3-0.6B before training; write down field accuracy.</li>
<li><code>make train</code> fine-tunes with MLX LoRA; <code>make fuse</code> and <code>make gguf</code> produce <code>qwen3-0.6b-cleaner-q8_0.gguf</code>.</li>
<li><code>make serve</code> + <code>make eval</code> + <code>make demo</code> prove the after score beats baseline and clean one live record.</li>
<li>For production: <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner" target="_blank" rel="noopener">Enterprise-SLM-Data-Cleaner</a> adds per-client <code>conventions/*.yaml</code>, <code>make review</code>, pinned container delivery, and <code>make eval-gate</code> adversarial CI.</li>
</ul>
<p><strong>Prerequisites:</strong> Mac with Apple Silicon (M1 or later), 8 GB RAM, ~5 GB disk, Homebrew. Intel Macs cannot run the MLX training step.</p>
<h2>Step 1: Install tools and clone the repo
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">brew install python git llama.cpp
</span></span><span class="line"><span class="cl">git clone https://github.com/TMFNK/Local-SLM-Data-Cleaner.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> Local-SLM-Data-Cleaner
</span></span><span class="line"><span class="cl">make setup</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><code>make setup</code> installs Python deps and mlx-lm. Success looks like <code>&gt;&gt; Done. Next: make model</code> with no red <code>ERROR</code> lines above it.</p>
<h2>Step 2: Download the base model
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make model</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Pulls Qwen3-0.6B (~1.2 GB) from Hugging Face into your cache. No account needed. Done when it prints <code>model ready</code>.</p>
<h2>Step 3: Generate synthetic training data
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make data
</span></span><span class="line"><span class="cl">make sanity</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><code>make data</code> writes <code>data/train.jsonl</code>, <code>valid.jsonl</code>, and <code>test.jsonl</code> (default 800/100/100). The generator invents clean records, corrupts them like real messy master data, then labels each pair with the same deterministic algorithm the runtime uses later.</p>
<p><code>make sanity</code> should report 100% field accuracy on the test split. That is the answer key checking itself, not a model score yet.</p>
<p>Want more examples? <code>make data N=2000</code>.</p>
<h2>Step 4: Score the model before training
    </h2><p>Terminal 1:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make baseline-serve</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Wait for <code>listening on http://127.0.0.1:8080</code>. First run downloads ~600 MB.</p>
<p>Terminal 2 (same project folder):</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make baseline</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Note the <strong>field accuracy</strong> line. That is your before number. Stop the server in Terminal 1 with <code>Ctrl+C</code> before training.</p>
<h2>Step 5: Fine-tune with MLX LoRA
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make train</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Loss should trend down over a few minutes. Output lands in <code>adapters/</code>. If the Mac runs out of memory, close browser tabs and retry with <code>make train BATCH=2</code>.</p>
<h2>Step 6: Fuse and export to GGUF
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make fuse
</span></span><span class="line"><span class="cl">make gguf</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>If <code>make gguf</code> cannot find llama.cpp sources:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> .. <span class="o">&amp;&amp;</span> git clone https://github.com/ggml-org/llama.cpp <span class="o">&amp;&amp;</span> <span class="nb">cd</span> Local-SLM-Data-Cleaner</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>You should see <code>qwen3-0.6b-cleaner-q8_0.gguf</code> (~600 MB) when <code>ls *.gguf</code> runs clean.</p>
<h2>Step 7: Serve, evaluate, and demo
    </h2><p>Terminal 1:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make serve</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Terminal 2:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make <span class="nb">eval</span>
</span></span><span class="line"><span class="cl">make demo</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><code>make eval</code> should beat your Step 4 baseline on field accuracy. <code>make demo</code> sends one messy JSON record through the server and prints cleaned output plus a <code>changes</code> audit list.</p>
<blockquote>
  <p><strong>Pro tip:</strong> Steps that call <code>make baseline-serve</code>, <code>make serve</code>, or <code>make eval</code> need two Terminal windows. The server holds port 8080 until you <code>Ctrl+C</code> it. If the port is busy, use <code>make serve PORT=8081</code> and <code>make eval PORT=8081</code>.</p>
</blockquote>
<h2>Enterprise version: what changes for production
    </h2><p>The demo hard-codes your house standard in <code>convention_spec.py</code> and optimizes for &ldquo;clone it on a Mac and see it work.&rdquo; <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner" target="_blank" rel="noopener">Enterprise-SLM-Data-Cleaner</a> keeps the same synthetic-training + LoRA + GGUF + llama.cpp pipeline but splits the repo for teams that need governance before they trust an SLM with master data.</p>
<table>
  <thead>
      <tr>
          <th>Demo (this tutorial)</th>
          <th>Enterprise</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>One Python convention file</td>
          <td>Editable YAML per client in <code>conventions/</code></td>
      </tr>
      <tr>
          <td><code>make eval</code> on your laptop</td>
          <td><code>make eval-gate</code> + pinned adversarial suite in CI</td>
      </tr>
      <tr>
          <td>Serve locally on port 8080</td>
          <td><code>deploy/</code> container with <code>--network none</code> and vendored weights pinned by hash</td>
      </tr>
      <tr>
          <td>Qwen3-0.6B default</td>
          <td>Same default, or swap base model (<code>MODEL=utter-project/EuroLLM-1.7B-Instruct</code>, Teuken-7B, Phi-4-mini, …) and re-run the same eval bar</td>
      </tr>
      <tr>
          <td>Demo output + <code>changes</code> list</td>
          <td>Append-only audit log: input, output, every change, confidence, model and convention version hashes</td>
      </tr>
      <tr>
          <td>—</td>
          <td><code>make review</code> lists uncertain records for manual sign-off; resolutions append new log entries, never edits</td>
      </tr>
  </tbody>
</table>
<p>Layout in the enterprise repo: <code>core/</code> (convention engine), <code>conventions/</code> (client specs), <code>synth/</code> (synthetic data), <code>eval/</code> (harness + adversarial cases), <code>runtime/</code> (model → validate → rule safety net), <code>deploy/</code> (offline container). The <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner" target="_blank" rel="noopener">enterprise README</a> walks through each layer; <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner/blob/main/deploy/README.md" target="_blank" rel="noopener">deploy/README.md</a> covers air-gapped operation.</p>
<p>Quick start once you have finished the demo and want the production Makefile:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> Enterprise-SLM-Data-Cleaner
</span></span><span class="line"><span class="cl">make setup
</span></span><span class="line"><span class="cl">make data <span class="nv">CONVENTION</span><span class="o">=</span>conventions/default.yaml
</span></span><span class="line"><span class="cl">make sanity
</span></span><span class="line"><span class="cl">make eval-gate          <span class="c1"># sanity + adversarial suites must pass before you trust a change</span>
</span></span><span class="line"><span class="cl">make train fuse gguf
</span></span><span class="line"><span class="cl">make pin-model          <span class="c1"># vendor weights + pin hash for the container</span>
</span></span><span class="line"><span class="cl">make serve
</span></span><span class="line"><span class="cl">make <span class="nb">eval</span>
</span></span><span class="line"><span class="cl">make review             <span class="c1"># records waiting for human review</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Swap the base model without changing the rest of the stack:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make model train fuse gguf <span class="nv">MODEL</span><span class="o">=</span>utter-project/EuroLLM-1.7B-Instruct
</span></span><span class="line"><span class="cl">make eval</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Enterprise is AGPL-3.0. Commercial licensing and help applying this to a real master-data migration are via <a href="https://www.mbitai.com" target="_blank" rel="noopener">mbitai.com</a>.</p>
<h2>Cleanup
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># stop the model server in Terminal 1 with Ctrl+C</span>
</span></span><span class="line"><span class="cl"><span class="c1"># optional: remove cloned llama.cpp sibling if you only needed it for gguf</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>If it breaks:</strong> <code>Cannot reach the model server</code> means the serve step is not listening yet. <code>Address already in use</code> means an old server is still on 8080. Training killed mid-run? Re-open Terminal, <code>cd</code> back into the repo, and continue; finished downloads and <code>data/</code> files are still there. Demo troubleshooting: <a href="https://github.com/TMFNK/Local-SLM-Data-Cleaner#troubleshooting" target="_blank" rel="noopener">Local-SLM-Data-Cleaner README</a>. Enterprise deploy and security notes: <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner/blob/main/deploy/README.md" target="_blank" rel="noopener">deploy/README.md</a>.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/projects/running-local-llms-from-first-run-to-fine-tuned/" >Running Local LLMs: From First Run to Fine-Tuned</a></strong> Hardware, quantization, and runtime layers that explain why a 0.6B GGUF model is enough on a laptop.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/llmfit/" >llmfit: Find Which LLM Models Run on Your Hardware</a></strong> Pick other small models that actually fit your RAM before you fine-tune the next experiment.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/leann-local-rag-on-macos/" >Set Up LEANN for Private Local RAG on macOS</a></strong> Same privacy story, different job: local retrieval instead of record normalization.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Wiki Spy: Wikipedia as a Chaotic Image Collage</title><link>https://www.tmfnk.com/use/tools/wiki-spy/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/wiki-spy/</guid><description>Neal.fun's Wiki Spy throws ~40,000 isolated Wikimedia objects into a searchable collage—click to branch by visual similarity, shuffle for serendipity, jump to the source article.</description><content:encoded><![CDATA[

<h2>🛠️ Wiki Spy
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Visual Wikipedia browser: thousands of cut-out Wikimedia images in a zoomable collage</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Any modern web browser</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, no account</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://neal.fun/wiki-spy/" target="_blank" rel="noopener">neal.fun/wiki-spy</a></td>
      </tr>
  </tbody>
</table>
<p>Wikipedia is mostly read as blue links and prose. <a href="https://neal.fun/wiki-spy/" target="_blank" rel="noopener">Wiki Spy</a> by <a href="https://neal.fun/" target="_blank" rel="noopener">Neal Agarwal</a> flips that: it surfaces roughly <strong>40,000 isolated object images</strong> from Wikimedia—diagrams, specimens, maps, product photos, historical artifacts—and tiles them into a dense, draggable field. No article chrome, no infobox sidebar. Just things. Click one and the page repopulates with <strong>visually similar</strong> cutouts. It is less encyclopedia, more wandering a museum warehouse with the lights off and a flashlight.</p>
<ol>
<li>
<p><strong>Serendipity is the interface.</strong> Hit <strong>Shuffle</strong> and you get a fresh pile of unrelated objects. Click any thumbnail and similarity search becomes your compass—coins cluster with coins, beetles with beetles, until you drift into something you did not know you cared about. Better than opening Wikipedia&rsquo;s random article when you want visual stimulus, not a biography.</p>
</li>
<li>
<p><strong>Three buttons, zero onboarding.</strong> <strong>Clear</strong> wipes the canvas. <strong>Shuffle</strong> loads a new set. <strong>View on Wikipedia ↗</strong> opens the source article for whatever you are focused on—so the rabbit hole always has an exit ramp into real context. That jump is the whole pedagogical trick: wonder first, citations second.</p>
</li>
<li>
<p><strong>Search works when you have a topic in mind.</strong> Type a place or subject (e.g. &ldquo;Vienna&rdquo;) and the collage filters toward matching imagery—useful for a quick visual brief before a meeting, a lesson hook, or mood boarding a project that needs historical reference art. You still verify on Wikipedia; Wiki Spy is a lens, not a source of truth.</p>
</li>
<li>
<p><strong>Same Neal.fun ethos as the rest of the site.</strong> Agarwal&rsquo;s projects (<a href="https://neal.fun/ambient-chaos/" target="_blank" rel="noopener">Ambient Chaos</a> is already on TMFNK) are small, polished browser toys with no signup wall. Wiki Spy fits the pattern: one idea, executed cleanly, runs client-side in the tab, shareable by URL.</p>
</li>
<li>
<p><strong>Honest limitations.</strong> This is not a research database—you cannot export metadata, cite images cleanly from the collage, or trust that every cutout is current with the live article. Isolated-object extraction means context is stripped on purpose; a medical illustration next to a meme-adjacent diagram tells you nothing about reliability until you click through. And if you need structured data, use Wikimedia Commons search or Wikipedia categories directly. Wiki Spy is for exploration and delight, not literature reviews.</p>
</li>
</ol>
<h2>First run
    </h2><p>No install. Thirty seconds:</p>
<ol>
<li>Open <a href="https://neal.fun/wiki-spy/" target="_blank" rel="noopener">neal.fun/wiki-spy</a></li>
<li><strong>Shuffle</strong> until something catches your eye—or search a keyword</li>
<li>Click an image to branch into similar visuals</li>
<li><strong>View on Wikipedia ↗</strong> when you want the article behind a thumbnail</li>
<li><strong>Clear</strong> to reset and start a new thread</li>
</ol>
<p><strong>Worth your time if:</strong> you teach, present, or write and need unexpected visual hooks; you miss the old web&rsquo;s weird interactive toys; or you want a five-minute rabbit hole that might end at an article on 19th-century pneumatic tubes.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/50-useful-websites/" >50 Useful Websites Google Doesn&rsquo;t Want You to Know</a></strong> Wiki Spy belongs in the same bookmark folder as Archive.org, Connected Papers, and the other deep-web utilities.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/free-tools/" >Best Free Tools That Don&rsquo;t Require Signups or Show Ads</a></strong> Same no-account, instant-use pattern.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/free-background-noise/" >Best Free Background Noise Websites and Apps</a></strong> Another Neal.fun pick (Ambient Chaos) for focus—pair visual rabbit holes with audio rabbit holes if you dare.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/search-whole-earth/" >SearchWhole.Earth: The Digitally Resurrected Whole Earth Catalog</a></strong> Same spirit of browsing for wonder instead of optimized feeds.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>SearXNG: Private Metasearch Without the Google Profile</title><link>https://www.tmfnk.com/use/tools/searxng/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/searxng/</guid><description>SearXNG aggregates results from dozens of search engines in one tab, with no tracking. Pick a public instance on searx.space and start searching in seconds—or self-host your own.</description><content:encoded><![CDATA[

<h2>🛠️ SearXNG
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Privacy-focused metasearch: one query, many backends, no user profile</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web (any browser); self-host on Linux, Docker, or a VPS</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, open source (AGPL-3.0)</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://github.com/searxng/searxng" target="_blank" rel="noopener">GitHub</a> · <a href="https://docs.searxng.org/" target="_blank" rel="noopener">Docs</a> · <a href="https://searx.space/" target="_blank" rel="noopener">Public instances</a></td>
      </tr>
  </tbody>
</table>
<p>Google and Bing are fine until you remember they remember you. Every query feeds a profile; every profile feeds ads. <a href="https://github.com/searxng/searxng" target="_blank" rel="noopener">SearXNG</a> sits in the middle instead: you type once, it fans the query out to many search engines (Google, Bing, DuckDuckGo, Qwant, Brave, Wikipedia, and dozens more), then shows you a merged result page. The instance you use sees your IP, but SearXNG itself does not build a search history or sell attention. For most people the fastest path is not installing anything—open <a href="https://searx.space/" target="_blank" rel="noopener">searx.space</a>, pick an online instance, and search.</p>
<ol>
<li><strong>Start in under a minute.</strong> <a href="https://searx.space/" target="_blank" rel="noopener">searx.space</a> lists public SearXNG instances with uptime, country, TLS grade, and response time. Click a green row, bookmark it, set it as your browser&rsquo;s default search engine. No account, no extension required.</li>
<li><strong>One box, many engines.</strong> SearXNG is a metasearch engine: backends are configurable per instance. Images, news, science papers, and map tiles can each route to different providers. You get breadth without opening six tabs.</li>
<li><strong>Privacy is architectural, not marketing.</strong> Queries go through the instance operator&rsquo;s server, not Google&rsquo;s ad stack. SearXNG does not profile users; you can also run it over Tor. The tradeoff: you trust whoever runs the instance you pick.</li>
<li><strong>Public instances are a convenience, not a guarantee.</strong> Heavy shared instances get rate-limited or CAPTCHA-blocked by upstream engines more often. searx.space warns about this openly. For daily driver quality, self-host or use a small private instance.</li>
<li><strong>Self-host when you care about consistency.</strong> Official <a href="https://github.com/searxng/searxng-docker" target="_blank" rel="noopener">Docker setup</a> or the <a href="https://docs.searxng.org/admin/installation.html" target="_blank" rel="noopener">install guide</a> gets you a URL only you use. Configuration lives in YAML; you choose which engines stay enabled.</li>
</ol>
<h2>Use searx.space to hop on now
    </h2><p>You do not need a repo clone to try SearXNG today.</p>
<ol>
<li>Open <strong><a href="https://searx.space/" target="_blank" rel="noopener">searx.space</a></strong> — maintained by the SearXNG project, refreshed daily (response times every few hours).</li>
<li>Scan the <strong>online instances</strong> table. Useful columns: <strong>TLS</strong> and <strong>CSP</strong> grades, <strong>country</strong>, <strong>uptime</strong>, <strong>search response time</strong>. Toggle <strong>Hide networks with privacy issue</strong> if you want to skip Cloudflare-proxied or analytics-heavy hosts.</li>
<li>Click an instance URL. You land on a normal search page—type a query and hit enter.</li>
<li><strong>Bookmark</strong> the instance or add it as a custom search engine in Firefox (<code>Settings → Search → Add</code>). In Chrome: <code>Settings → Search engine → Manage → Add</code>.</li>
</ol>
<p>Cannot pick one instance? searx.space lists <strong>meta-instances</strong> that redirect to a random healthy server (e.g. Neocities or Gimmeasearx). Handy for a first look; less ideal as a permanent default because the backend changes.</p>
<p>For programmatic use, searx.space exposes <a href="https://searx.space/data/instances.json" target="_blank" rel="noopener"><code>instances.json</code></a> (format may change—check the site).</p>
<h2>Self-host (optional)
    </h2><p>If a public instance feels slow or returns empty Google rows, run your own:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/searxng/searxng-docker.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> searxng-docker
</span></span><span class="line"><span class="cl">docker compose up -d</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Default install docs and engine tuning: <a href="https://docs.searxng.org/" target="_blank" rel="noopener">docs.searxng.org</a>. Expect to babysit engine blocks and the <a href="https://docs.searxng.org/admin/limiter.html" target="_blank" rel="noopener">limiter</a> if your instance is open to the world.</p>
<p><strong>Worth your time if:</strong> you want web search without building a Google-shaped dossier of your interests, and you are willing to trade a slightly rougher result page for that. Skip it if you need Google&rsquo;s one-box answers, signed-in Gmail integration, or flawless image search every time—metasearch will frustrate you on those edges.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/taken-browser-fingerprinting/" >taken.: See Everything Your Browser Tells Websites About You</a></strong> Search is one leak; taken shows the rest of what your browser broadcasts.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/free-tools/" >Best Free Tools That Don&rsquo;t Require Signups or Show Ads</a></strong> SearXNG fits the same no-account, no-feed pattern.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/project-nomad/" >Project NOMAD: The Offline Knowledge and AI Server</a></strong> Another stack for keeping research and queries off third-party clouds.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Pillser: Research Signals in a Supplement Market Full of Fluff</title><link>https://www.tmfnk.com/read/articles/pillser-supplement-research-findings/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/pillser-supplement-research-findings/</guid><description>Pillser indexes supplements, ranks supplementation papers by effect size, and links the two—in plain language with caveats built in. Research signals, not health advice.</description><content:encoded><![CDATA[
<p><em>Source: <a href="https://pillser.com/findings" target="_blank" rel="noopener">Pillser Findings</a> · <a href="https://news.ycombinator.com/item?id=46719423" target="_blank" rel="noopener">HN discussion</a></em></p>
<p>The supplement aisle is marketing with a nutrition label. <a href="https://pillser.com/findings" target="_blank" rel="noopener">Pillser</a> is trying the opposite: index every product and every paper, rank claims by effect type and size, then wire the two datasets together so you can see what the evidence actually says about what you are holding. The <a href="https://pillser.com/findings" target="_blank" rel="noopener">Findings</a> feed is the readable front page—headline studies in plain language, with the population limits and &ldquo;one trial so far&rdquo; warnings in the same breath. The site is explicit: these are research signals worth knowing about, not prescriptions.</p>
<ol>
<li><strong>The three-layer stack is the whole idea.</strong> Step one: parse the supplement market (ingredients, doses, normalized quantities). Step two: index supplementation research and score each claim. Step three: link products to papers. That is how you get from <a href="https://pillser.com/search?q=%22Vitamin&#43;D%22&amp;s=jho4espsuc" target="_blank" rel="noopener">a Vitamin D search</a> to <a href="https://pillser.com/probiotics/bifidobacterium-bifidum" target="_blank" rel="noopener">a specific probiotic strain page</a> to <a href="https://pillser.com/supplements/pb-8-probiotic-663" target="_blank" rel="noopener">a product listing</a> without trusting the brand&rsquo;s ad copy.</li>
<li><strong>Findings reads like a good journal club, not a wellness blog.</strong> A typical card might say turmeric cut HbA1c by 0.31% in a meta-analysis—and immediately add: only in people with diabetes, only four small studies, low overall evidence strength. Or milk thistle: 2,069 people with fatty liver, ALT down 1.10 U/L, probably noise. <a href="https://pillser.com/findings/thistle-reduced-alanine-transaminase-level-361" target="_blank" rel="noopener">Myth-busters matter as much as hype.</a></li>
<li><strong>You can browse by outcome, not by influencer.</strong> <a href="https://pillser.com/health-outcomes/improved-intestinal-barr..." target="_blank" rel="noopener">Health-outcome pages</a> group what the literature claims about gut barrier function, eczema severity, sleep quality, and the rest—useful when you care about a question (&ldquo;does anything help X?&rdquo;) rather than a bottle name.</li>
<li><strong>Individual papers get an AI-assisted read—with receipts.</strong> Each <a href="https://pillser.com/research-papers/" target="_blank" rel="noopener">research-paper page</a> pulls study design, sample size, and effect direction into something scannable. The creator paused the project once because early LLMs hallucinated too often on this data; they restarted after internal evals improved. Worth watching: AI interpretation is only as good as the eval harness behind it.</li>
<li><strong>The mission is transparency, not more pills.</strong> The founder says the goal is not to increase supplement use but to help people decide—and often that decision is &ldquo;you do not need this&rdquo; or &ldquo;get it from food.&rdquo; This quarter&rsquo;s focus is education on natural supplementation. That framing is rare in a category built on upsell.</li>
<li><strong>Restarting cost real friction.</strong> Shady brands sent cease-and-desist letters demanding product takedowns—usually big marketing budgets, weak ingredient-to-price ratios, per the creator. Legal drag plus grad school plus unreliable models was enough to shelve it. Bryan Johnson&rsquo;s Blueprint wave brought inbound interest that helped justify picking it back up. Transparency projects still fight incumbents with lawyers.</li>
<li><strong>You might think a database fixes shopping. It does not fix you.</strong> Even perfect evidence summaries leave out your labs, medications, and contraindications. Pillser is a map of published signals, not a clinician. Single RCTs in narrow groups (Parkinson&rsquo;s patients, postpartum wounds, preterm infants) dominate the feed—the caveats are honest, but readers still have to resist &ldquo;one study → buy now.&rdquo;</li>
</ol>
<p><strong>The takeaway:</strong> Bookmark <a href="https://pillser.com/findings" target="_blank" rel="noopener">pillser.com/findings</a> as a filter before you read a supplement label or a Twitter thread. Use it to ask &ldquo;what does the literature claim, for whom, and how weak is it?&quot;—then talk to someone who can actually advise you on your body. If a finding is interesting, follow the paper link and treat the product pages as price-and-ingredient context, not a shopping list.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/spice-combo-capsaicin-menthol-inflammation/" >This Spice Combo Could Slash Inflammation Hundreds of Times More Effectively</a></strong> Food combinations with measured effects—a different lane than pills, same need for caveats.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/from-tobacco-to-ultra-processed-food/" >From Tobacco to Ultra-Processed Food</a></strong> How industries sell health narratives; supplements rhyme with that playbook.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/poison-everywhere/" >Poison Everywhere</a></strong> Another angle on what we put in our bodies and how little we verify.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Phil Chen on Career Advice in the Age of AI</title><link>https://www.tmfnk.com/read/articles/career-advice-age-of-ai-phil-chen/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/career-advice-age-of-ai-phil-chen/</guid><description>OpenAI and DeepMind researcher Phil Chen argues execution got cheap. The scarce skills are picking problems, building reputation, and spending real time where it compounds.</description><content:encoded><![CDATA[
<p><a href="https://x.com/philhchen/status/2072793818945167475" target="_blank" rel="noopener">Phil Chen</a> posted career advice in 2026 that cut through the usual &ldquo;learn to prompt&rdquo; noise. Chen has worked across Scale AI, DeepMind, OpenAI, and Google while building his own agent-native startup. His opening line stuck: AI gets good at anything you can write a loss function for, and school is mostly loss functions. Execution is cheaper. The edge is choosing problems worth the tokens, building relationships that outlast any single job, and putting in time where reputation actually compounds.</p>
<ol>
<li>
<p>Capital is abundant; time and trust are not. Chen turned down higher guaranteed cash from quant finance to join Scale at 500 people. The network and exposure there led to DeepMind and OpenAI. His point is blunt: vibe-coding side gigs can turn a quick buck, but proven work known to reputable people is still the highest-signal currency.</p>
</li>
<li>
<p>Problem selection beats problem solving. At his agent-native company, Leetcode and textbook system design stopped predicting performance. What worked in interviews: drop someone into an unfamiliar environment, see if they spot problems worth solving, then watch how efficiently they allocate time and tokens with agents. Students panicking that agents ace problem sets are looking at the wrong scoreboard.</p>
</li>
<li>
<p>Great candidates still differ wildly on token efficiency. Agents can finish the assignment. They cannot replace the intuition and outside context strong people bring into the collaboration. Chen rates people higher when they have lived inside high-growth environments or passion projects where meaningful problems outnumbered headcount.</p>
</li>
<li>
<p>Pick the most ambitious form of the problem. The bitter lesson applies to careers, not just models: general scaling beats local hacks, and AI has widened the power-law gap. Anyone can spin up a simple app now. Durable value needs extreme focus on hard problems at companies that are actually trying to solve the ambitious version, not a demo that will pivot in six months.</p>
</li>
<li>
<p>The last mile is where humans still win. Chen cites Alfred Lin: the final 10% is 90% of the work and 90% of the reward. A sloppy prompt gets you median agent output. Polish, architecture, and iteration on your own projects are what separate candidates who look interchangeable on paper.</p>
</li>
<li>
<p>Careers need both xG and finishing. Chen uses the soccer expected-goals frame: get into positions where good opportunities appear (reputation, expertise, the right mutuals), then convert when they arrive. He passed on early Anthropic and Cursor offers twice to chase frontier inference work that fit his interests. Reasonable trade. He also wishes he had gathered more data before some calls.</p>
</li>
<li>
<p>Research is more accessible than the gatekeeping suggests. Public eval leaderboards, model credits from providers like Modal, and building your own benchmarks from daily model use are viable on-ramps. Chen&rsquo;s line: being a researcher is a mentality (curiosity, infrastructure pain tolerance, articulating results to get more compute), not a job title locked behind a lab badge.</p>
</li>
<li>
<p>You might read this and think it only applies to people already orbiting frontier labs. Fair pushback. Chen&rsquo;s network is unusually dense. But the underlying move generalizes: stop optimizing for gradable tasks agents already ace, and start stacking reputation with people who solve real problems in public.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Pick one problem you find meaningful, not one that grades cleanly. Ship it with agents if you want, but spend the extra hour on polish and write up what you learned where serious people can see it. DM one person whose work you respect with a specific question, not a generic coffee chat. That is how xG turns into goals when execution is cheap.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/proletariat-of-judgment/" >The Proletariat of Judgment: Cognitive Stratification in the AI Era</a></strong> Chen assumes you still steer agents. This piece asks what happens when you stop steering entirely.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/goldman-sachs-ai-job-apocalypse/" >Goldman Sachs on the AI Job Apocalypse: Real Pain, Not Mass Unemployment</a></strong> Macro labor math on displacement versus augmentation while Chen focuses on individual positioning.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/the-rise-of-computer-use-and-agentic-coworkers/" >The Rise of Computer Use and Agentic Coworkers</a></strong> The agent-native workplace Chen is hiring for, and why problem-finding matters more than manual coding.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Papers with Code Is Back: Where ML Research Meets Leaderboards and Repos</title><link>https://www.tmfnk.com/read/articles/paperswithcode-co/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/paperswithcode-co/</guid><description>Niels Rogge's revival at paperswithcode.co links papers, code, benchmarks, and evals across AI domains. The original site stalled after Meta's acquisition; this one is community-driven again.</description><content:encoded><![CDATA[
<p>I spent an hour on <a href="https://paperswithcode.co/" target="_blank" rel="noopener">paperswithcode.co</a> last night and kept opening tabs I did not plan to open. Transformer papers I half remembered. Leaderboards I had never seen for agent benchmarks. GitHub repos attached to the actual PDF. Some of the most influential work of the last decade lives here in one graph: paper, code, numbers, lineage. It is the site I missed when the original Papers with Code went quiet.</p>
<ol>
<li>
<p>The old site mattered. Robert Stojnic and Ross Taylor built Papers with Code into the default map of state-of-the-art ML. Meta bought it for a reported $40 million in 2019. Updates slowed. Leaderboards aged. The team behind it went on to LLaMA. <a href="https://huggingface.co/blog/nielsr/paperswithcode-launch" target="_blank" rel="noopener">Niels Rogge</a> at Hugging Face relaunched <a href="https://paperswithcode.co/" target="_blank" rel="noopener">paperswithcode.co</a> in 2026 as an independent revival, not a corporate rebrand.</p>
</li>
<li>
<p>The core loop is still paper → code → benchmark, but the surface area grew. Domains span vision, speech, embeddings, agents, time-series, and more. Each area gets leaderboards (COCO, MMTEB, Open ASR, coding-agent suites like Terminal Bench). Trending papers rank by GitHub star velocity, not just citation count. You can see what is moving this week, not what moved in 2021.</p>
</li>
<li>
<p>Methods are first-class again. RLVR, Mamba variants, Gated DeltaNet, and similar tags link papers that share a technique. Paper pages show lineage banners when a model has a clear predecessor or follow-up (DINOv2, GLM-4.5, Mamba-3). That context is half the value when you are trying to understand why a benchmark jumped.</p>
</li>
<li>
<p>Submission is open and AI-assisted. <a href="https://paperswithcode.co/submit" target="_blank" rel="noopener">paperswithcode.co/submit</a> accepts arXiv, bioRxiv, GitHub repos, and blog posts. The site auto-tags tasks, pulls linked repos and Hugging Face artifacts, and attaches evals where it can. Rogge reported roughly 3,000 eval rows so far, growing from Transformers-supported models. Multi-metric leaderboards now cover WER and latency on ASR, mAP and FPS on detection, and similar tradeoffs elsewhere.</p>
</li>
<li>
<p>You might ask whether another leaderboard site adds noise in 2026. Fair. Hugging Face already hosts millions of models. The point of PwC was never storage. It is curation with evidence: which paper, which repo, which number, on which benchmark. When you need &ldquo;best open model for X under constraint Y,&rdquo; this beats scrolling model cards.</p>
</li>
<li>
<p>It is early and community-maintained. Coverage gaps exist. Some domains are thin until someone adds results via the edit flow or <a href="https://github.com/paperswithcode/tutorials" target="_blank" rel="noopener">GitHub tutorials</a>. Sign-in with Hugging Face handles accounts. Treat it as a living index, not a finished encyclopedia.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Bookmark one domain you actually work in (agents, OCR, ASR, whatever). Pick a leaderboard, read the top three papers, clone the repo that matches your constraint. Submit a missing result if you have one. The site gets better when practitioners feed it numbers, not when you treat it as read-only wallpaper.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/stanford-ai-index-2026/" >Stanford AI Index 2026: Key Takeaways from the State of AI</a></strong> Macro view of where models are improving; Papers with Code is the micro view with repos and benchmark rows attached.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/is-grep-all-you-need/" >Is Grep All You Need? How Agent Harnesses Reshape Agentic Search</a></strong> Agent benchmark culture Papers with Code now tracks alongside classic vision and NLP leaderboards.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/the-rise-of-computer-use-and-agentic-coworkers/" >The Rise of Computer Use and Agentic Coworkers</a></strong> Why coding-agent evals on sites like PwC matter if you are picking tools, not just reading papers.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>My First Year in Sales as a Technical Founder</title><link>https://www.tmfnk.com/read/articles/first-year-in-sales-technical-founder/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/first-year-in-sales-technical-founder/</guid><description>Fabian Dietrich's year-one sales diary—487 LinkedIn connections to 2 paying clients—with HN pushback on GDPR, Calendly, and whether engineers can learn to sell without becoming someone else.</description><content:encoded><![CDATA[
<p><em>Source: <a href="https://www.fabiandietrich.com/blog/first-year-in-sales.html" target="_blank" rel="noopener">Fabian Dietrich</a> · <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">HN discussion</a></em></p>
<p>Fabian Dietrich is a technical founder (programming and design background) who spent a year learning sales because paying customers—not features—were the bottleneck. His <a href="https://www.fabiandietrich.com/blog/first-year-in-sales.html" target="_blank" rel="noopener">write-up</a> is rare: a funnel with real numbers, not a LinkedIn guru thread. Last 30 days on LinkedIn cold outreach: <strong>487 connection requests → 175 accepted → 43 replies → 15 interested → 11 discovery calls → 8 held → 4 signed pilot agreements → 2 paid clients.</strong> That is a 0.4% close rate from top of funnel. Brutal, honest, and exactly why tech people need to read it. Sales is a life skill engineers keep hoping to route around. Most cannot forever.</p>
<ol>
<li><strong>High-touch beats self-serve when you are early and underpriced.</strong> Low-end B2B SaaS ($10–50/mo) can live on marketing alone—the indie hacker dream—but Dietrich argues it leaves money on the table and is harder than it looks. Video calls, 1:1 email, even tailored product work built trust and let him charge more. The risk is the &ldquo;agency trap&rdquo;: every customer becomes a custom project. He thinks more startups die from weak marketing and never talking to buyers than from over-selling.</li>
<li><strong>ICP is earned, not assumed.</strong> Ideal Customer Profile work meant asking who benefits, who pays, and who will actually buy—then iterating with unpaid pilots and A/B tests on offers and segments. Generous pilots filtered serious buyers: a friendly two-page agreement before 10+ hours of setup and AI credits per prospect. They still have not nailed ICP; that honesty is the point.</li>
<li><strong>The funnel is a numbers game; rejection is the default.</strong> HN reader <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">Gooblebrai</a> called this out explicitly: 487 to 2 paid makes ghosting normal, not personal. Dietrich says the same—thick skin, rejection as data. Fellow founder <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">jackconsidine</a> added the iteration angle: SEO and ads are slow signal for early products; a hundred emails can tell you in a night whether the offer lands.</li>
<li><strong>You do not need a sales persona—you need curiosity.</strong> Dietrich dreaded calls, tried weather small talk, felt awkward. What worked: being his slightly introverted self, explaining the product honestly, and asking prospects about their business, industry, and ICP. Calendly cut scheduling friction; pen-and-paper notes beat AI meeting summaries for CRM entry. <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">retube on HN</a> hates Calendly links in cold outreach—feels like the seller will not do the tiny work of proposing a time. Worth A/B testing; the principle is remove friction without signaling you do not care.</li>
<li><strong>Channel choice has legal and creep boundaries.</strong> Dietrich favors LinkedIn for intent (comments, reactions, in-house AI lists) over saturated cold email. <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">mrfumier</a> pushed back hard on scaling email in the EU: GDPR consent rules, fines, blacklisting—not &ldquo;democratic outreach.&rdquo; <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">elorant</a> called personalized outreach from scraped public comments intrusive. Tech founders love automation; compliance and trust are part of the stack too.</li>
<li><strong>Coaching beats heroics for many introverts.</strong> <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">amoorthy</a> (technical co-founder) paid ~$2k/month for a sales coach, used Objective Management Group-style aptitude assessment, and felt competent after ~4 months. Suggests recording calls and using AI critique with that assessment as context—cheaper than coaching, not a full substitute. <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">anitil</a> noted HN skews introverted; <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">moomoo11</a>&rsquo;s &ldquo;just talk to people&rdquo; misses that gap. <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">elemdos</a>: impossible if you fear rejection—which is trainable, not a character flaw.</li>
<li><strong>HN&rsquo;s cynical thread is worth sitting with.</strong> <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">AndrewKemendo</a> and <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">pramsey</a> describe enterprise sales as personal promises you cannot always guarantee—staring at the ceiling after saying &ldquo;we&rsquo;ll get it done.&rdquo; <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">brazukadev</a> flips it: selling a good product is easy; building one is hard. Dietrich&rsquo;s post is the messy middle—still proving the product through pilots, not closing Fortune 500 on faith. <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">coole-wurst</a> asked if 2/487 is worth imitating; fair question. The answer is not &ldquo;copy his conversion rate&rdquo; but &ldquo;copy the loop&rdquo;: talk → qualify → pilot → learn.</li>
<li><strong>Founders never fully outsource the biggest deals.</strong> <a href="https://news.ycombinator.com/item?id=46661167" target="_blank" rel="noopener">tschellenbach</a> (Stream, ~$2M ARR solo early on) still shows up for large deals at a 140-person company. Sales at scale is a team sport; at the start it is founder sport.</li>
</ol>
<p><strong>The takeaway:</strong> If you build things for a living, schedule one sales experiment this month—not a landing page tweak, ten real conversations with people who might pay. Use Dietrich&rsquo;s funnel as a sanity check: hundreds of nos per yes is normal. Track stages. Iterate the offer before you iterate the code. Read the HN thread for GDPR, ethics, and temperament—not to scare yourself out of selling, but to sell without becoming either a spam cannon or a wolf-of-Wall-Street caricature.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/thinkism-and-the-teachers-dilemma/" >Thinkism and the Teacher&rsquo;s Dilemma</a></strong> Understanding follows doing—same shape as learning sales by talking to prospects, not reading one more framework post.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/know-your-customers/" >Know Your Customers&rsquo; Jobs to Be Done</a></strong> Why &ldquo;fit&rdquo; on discovery calls is not performative; customers hire products to make progress in a circumstance.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/hard-truth-about-business-model-innovation/" >The Hard Truth About Business Model Innovation</a></strong> When the business model—not the feature set—is what you are actually selling.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/mit-genai-divide-state-of-ai-in-business-2025/" >MIT GenAI Divide: State of AI in Business 2025</a></strong> Enterprises pour budget into customer-facing sales and marketing while most AI pilots never ship—signal vs. spend.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/acq2-servicenow-ceo-bill-mcdermott/" >ACQ2: The Art of Selling Enterprise Software with ServiceNow CEO Bill McDermott</a></strong> The other end of the spectrum: career sales leadership at scale, useful once your two paid clients become twenty.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/the-enterprise-context-layer/" >The Enterprise Context Layer</a></strong> Why GTM reps fail when retrieval tools cannot answer &ldquo;should I even promise this?&quot;—sales is judgment, not scripts.</li>
</ul>
<p><strong>Also worth a look on TMFNK:</strong> <a href="https://www.tmfnk.com/read/articles/optimal-interview-preparation/" >Optimal Interview Preparation</a> (feedback loops under pressure), <a href="https://www.tmfnk.com/read/articles/collaboration-inflation/" >Collaboration Inflation</a> (when talking to people is the work), <a href="https://www.tmfnk.com/read/articles/jeff-bezos-last-letter/" >Jeff Bezos 2020 Letter to Shareholders</a> (customer obsession as operating principle), <a href="https://www.tmfnk.com/read/articles/gap-closing-investing-kapor/" >Principles and Practices of Gap-Closing Investing</a> (founder-market fit and &ldquo;distance traveled&rdquo;—parallel to ICP iteration).</p>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Map of Metal: An Interactive History of Heavy Metal Subgenres</title><link>https://www.tmfnk.com/use/tools/map-of-metal/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/map-of-metal/</guid><description>Click through decades of metal lineage with embedded samples on every node. Flash-era fan project ported to HTML5, open on GitHub, still best on desktop.</description><content:encoded><![CDATA[

<h2>🛠️ Map of Metal
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Clickable map of metal subgenres with band history and embedded samples</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web browser (desktop or tablet; mobile unfinished)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free · <a href="https://github.com/patrickgalbraith/mapofmetal" target="_blank" rel="noopener">GitHub</a></td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://mapofmetal.com/" target="_blank" rel="noopener">mapofmetal.com</a> · <a href="https://news.ycombinator.com/item?id=48205699" target="_blank" rel="noopener">HN discussion</a></td>
      </tr>
  </tbody>
</table>
<p>Patrick Galbraith built <a href="https://mapofmetal.com/" target="_blank" rel="noopener">Map of Metal</a> with a friend studying multimedia: one person on the data, one on the code, about a week or two total. That was 2009. The site became the map a generation of metal-curious listeners used to see how thrash split into death, how doom fed stoner, why power metal sounds nothing like black. It resurfaced on Hacker News in May 2026 while Galbraith&rsquo;s wife was picking something on TV. His comment thread is half technical history, half lament for the old web.</p>
<ol>
<li>
<p>The map is the interface. You pan and zoom a stylized terrain where regions are subgenres and paths show influence. Click a node and you get a write-up plus a tracklist with YouTube clips for each exemplar band. Hear the difference between NWOBHM and melodeath instead of reading a Wikipedia wall of adjectives.</p>
</li>
<li>
<p>Flash soul, HTML5 body. The original ran in Adobe Flash. Galbraith ported it to HTML5 a few years back and <a href="https://github.com/patrickgalbraith/mapofmetal" target="_blank" rel="noopener">posted the source</a> mostly to keep the thing alive. Genre data lives as JSON files under <code>data/genre-info/</code> in the repo, each with title, description, decade, and fallback video IDs if a clip dies.</p>
</li>
<li>
<p>YouTube embedding used to be the easy part. When the Flash version launched, YouTube had tiny text ads and Galbraith could hide the player chrome entirely. YouTube blacklisted the site anyway. He got unblocked after asking a Google engineer on a dev forum. &ldquo;Very different times,&rdquo; he wrote on HN. Today the visible player and pre-roll ads are part of the tradeoff for free hosting.</p>
</li>
<li>
<p>Mobile never shipped. Galbraith started a custom WebGL renderer because phone performance was rough, then life intervened. The site still shows &ldquo;Mobile support coming soon.&rdquo; Use a laptop or tablet. He has sketches for a much larger map (2m x 1.5m unfolded) with more subgenres and historical events. That version exists on paper, not in production.</p>
</li>
<li>
<p>The canon has gaps and that is fine. HN commenters flagged missing branches (blackgaze, grey metal, metalstep). The map is metal-only by design, not a map of all music. Treat it as a curated rabbit hole, not a complete taxonomy. You can suggest genres via the GitHub repo if you bring descriptions and 8–10 exemplar tracks.</p>
</li>
</ol>
<h2>First run
    </h2><ol>
<li>Open <a href="https://mapofmetal.com/" target="_blank" rel="noopener">mapofmetal.com</a> on desktop and hit <strong>ENTER</strong>.</li>
<li>Pan the map and click any genre region that catches your eye.</li>
<li>Read the blurb, then play tracks from the embedded list.</li>
<li>Follow connected paths to see how one sound forked into another.</li>
</ol>
<p>No account, no install. Prints are sold on Zazzle if you want to support the project.</p>
<p><strong>Worth your time if:</strong> you like metal even a little and want a visual tour with samples attached, or you miss the Flash-era web when two people could ship something weird in two weeks.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/channel-surfer/" >Channel Surfer: Watch YouTube Like Cable TV</a></strong> Another browser experiment wrestling with how YouTube embeds and discovery feel today versus a decade ago.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/50-useful-websites/" >50 Useful Websites Google Doesn&rsquo;t Want You to Know</a></strong> Curated odd corners of the web; Map of Metal is exactly that kind of site.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/flashpoint-archive/" >Flashpoint Archive: Preserve and Play the Lost History of the Web</a></strong> What preservation looks like when the original runtime (Flash) is gone but the culture is worth keeping.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Learn Harness Engineering: Make AI Coding Agents Actually Reliable</title><link>https://www.tmfnk.com/use/tutorials/learn-harness-engineering/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/learn-harness-engineering/</guid><description>WalkingLabs' free course on agent harnesses: 12 lectures, 6 Electron projects, copy-ready AGENTS.md templates. Get a minimal harness into your repo in 15 minutes.</description><content:encoded><![CDATA[

<p>By the end you will either have a minimal agent harness in your own repo (four files, one audit pass) or a clear path through the full <a href="https://walkinglabs.github.io/learn-harness-engineering/en/" target="_blank" rel="noopener">Learn Harness Engineering</a> curriculum. Quick path: 15 minutes. Full course with projects: a few weekends part-time.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li><a href="https://github.com/walkinglabs/learn-harness-engineering" target="_blank" rel="noopener">WalkingLabs</a> teaches harness engineering: the repo environment that makes Codex and Claude Code reliable, not smarter prompts alone.</li>
<li>Five subsystems: instructions, state, verification, scope, session lifecycle.</li>
<li>Copy templates from the <a href="https://walkinglabs.github.io/learn-harness-engineering/en/resources/" target="_blank" rel="noopener">Resource Library</a> (<code>AGENTS.md</code>, <code>feature_list.json</code>, <code>claude-progress.md</code>, <code>init.sh</code>).</li>
<li>Audit any repo with <code>audit-harness.sh</code> (no Node required).</li>
<li>Six projects build the same Electron knowledge-base app while you add harness layers; capstone includes benchmark and ablation scripts.</li>
</ul>
<p><strong>Prerequisites:</strong> A real repo you use with Claude Code, Cursor, or Codex. For hands-on projects: Git, Node.js, and an agent CLI. No paid course account; everything is free on GitHub and the docs site (15 languages).</p>
<h2>Step 1: Read the core idea (10 minutes)
    </h2><p>Open <a href="https://walkinglabs.github.io/learn-harness-engineering/en/lectures/lecture-01-why-capable-agents-still-fail/" target="_blank" rel="noopener">Lecture 01</a> and <a href="https://walkinglabs.github.io/learn-harness-engineering/en/lectures/lecture-02-what-a-harness-actually-is/" target="_blank" rel="noopener">Lecture 02</a>.</p>
<p>Success looks like you can explain this in one sentence: the model writes code; the harness governs when, where, how, and when &ldquo;done&rdquo; is allowed. Anthropic&rsquo;s long-running agent experiments and OpenAI&rsquo;s Codex harness writeups are the cited sources. Same model, weak harness vs strong harness is the difference between cleanup duty and review duty.</p>
<h2>Step 2: Drop the minimal harness into your project
    </h2><p>Browse the <a href="https://walkinglabs.github.io/learn-harness-engineering/en/resources/" target="_blank" rel="noopener">English Resource Library</a>. Download or copy these into your project root:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">your-repo/
</span></span><span class="line"><span class="cl">├── AGENTS.md              # operating manual for the agent
</span></span><span class="line"><span class="cl">├── feature_list.json      # scope: features and done/not-done
</span></span><span class="line"><span class="cl">├── claude-progress.md     # session log (rename if you use Codex)
</span></span><span class="line"><span class="cl">└── init.sh                # install + verify before work starts</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Adapt names to your stack (<code>CLAUDE.md</code> if you prefer Claude Code conventions). Fill <code>feature_list.json</code> with real features, not placeholders. Point <code>AGENTS.md</code> at your test command and definition of done.</p>
<p>Success: your next agent session starts by reading these files instead of guessing repo rules from scratch.</p>
<h2>Step 3: Audit what you have
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -fsSL https://raw.githubusercontent.com/walkinglabs/learn-harness-engineering/main/tools/audit-harness.sh <span class="p">|</span> bash -s -- /path/to/your/repo</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Or clone the course repo and run locally:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/walkinglabs/learn-harness-engineering.git
</span></span><span class="line"><span class="cl">bash learn-harness-engineering/tools/audit-harness.sh /path/to/your/repo</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Success: script exits 0 when critical harness items pass. Failures list missing files or weak spots (no progress log, no verification hook, etc.).</p>
<blockquote>
  <p><strong>Pro tip:</strong> The repo also ships a <code>skills/harness-creator/</code> skill that scaffolds a production-grade harness in one agent session. Use it if blank templates feel too abstract.</p>
</blockquote>
<h2>Step 4: Run Project 01 (optional but worth it)
    </h2><p>Clone the repo if you have not already. Open <code>projects/project-01/</code> in the docs: <a href="https://walkinglabs.github.io/learn-harness-engineering/en/projects/project-01-baseline-vs-minimal-harness/" target="_blank" rel="noopener">Baseline vs Minimal Harness</a>.</p>
<p>Work inside <code>projects/project-01/starter/</code> with your agent. Run the same task twice: prompt-only first, then rules-first with the harness files. Compare how often the agent declares victory before tests pass.</p>
<p>Success: you have a side-by-side note on what changed when the repo carried state and scope, not just a chat prompt.</p>
<h2>Step 5: Follow the full path if you want the system
    </h2><p>The course order is fixed: 12 lectures, 6 projects, each project building on the last. All six projects evolve one Electron personal knowledge-base app (import docs, index, citation Q&amp;A). Project 06 capstone adds benchmark scripts, cleanup scanner, and harness ablation (remove one subsystem at a time and measure what breaks).</p>
<p>Docs: <a href="https://walkinglabs.github.io/learn-harness-engineering/en/" target="_blank" rel="noopener">walkinglabs.github.io/learn-harness-engineering/en/</a><br>
Repo: <a href="https://github.com/walkinglabs/learn-harness-engineering/tree/main" target="_blank" rel="noopener">github.com/walkinglabs/learn-harness-engineering</a></p>
<p>Optional offline: <code>npm run pdf:build</code> inside the cloned repo writes PDF coursebooks to <code>artifacts/pdfs/</code>.</p>
<h2>Cleanup
    </h2><p>No cloud resources to tear down. If you cloned only for templates, delete the clone when done:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">rm -rf learn-harness-engineering</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Keep the four harness files in your actual project.</p>
<p><strong>If it breaks:</strong> Agent still skips tests? Add an explicit &ldquo;cannot mark done until X passes&rdquo; line in <code>AGENTS.md</code> and wire <code>init.sh</code> to run your test suite. Agent loses context between sessions? You are missing <code>claude-progress.md</code> updates or session handoff notes (Lecture 05–06). Audit script fails on a Hugo or docs-only repo? That is expected for some checks; fix what applies, ignore template fields that assume a Node app.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/karpathy-ai-coding-guidelines/" >Karpathy&rsquo;s AI Coding Guidelines: Install the CLAUDE.md That Developers Use</a></strong> Behavioral guardrails for agents; harness files add state, scope, and verification on top.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/hugo-agent-readiness-playbook/" >Hugo Agent Readiness Playbook: From Score 8 to 83</a></strong> Same problem domain for this site: make a repo legible and safe for agents.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/superpowers/" >Superpowers: An Agentic Skills Framework for Coding Agents</a></strong> Disciplined agent workflows (TDD, debugging); harness engineering is the repo infrastructure those workflows assume.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>GAIA Mary: A Project Hail Mary Star Map Built on 1.8 Billion Real Stars</title><link>https://www.tmfnk.com/use/tools/gaia-mary-star-map/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/gaia-mary-star-map/</guid><description>Val Hovey's browser star chart uses ESA's GAIA DR3 survey for positions and colors, with a Python-rendered skybox from 1.8+ billion stars. Fan project, real astronomy.</description><content:encoded><![CDATA[

<h2>🛠️ GAIA Mary Star Map
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Interactive 3D star chart inspired by the Project Hail Mary navigation UI</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web browser</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://valhovey.github.io/gaia-mary/" target="_blank" rel="noopener">valhovey.github.io/gaia-mary</a> · <a href="https://news.ycombinator.com/item?id=48225297" target="_blank" rel="noopener">HN discussion</a></td>
      </tr>
  </tbody>
</table>
<p>I finished Project Hail Mary wanting the stellar chart from the movie on my screen, not a static screenshot. <a href="https://valhovey.github.io/gaia-mary/" target="_blank" rel="noopener">GAIA Mary</a> is Val Hovey&rsquo;s answer: a browser map where you spin through local space, jump between named stars, and toggle views that separate real astronomy from story fiction. Val posted it on Hacker News with the receipts. Positions and colors come from <a href="https://www.cosmos.esa.int/web/gaia/dr3" target="_blank" rel="noopener">ESA&rsquo;s GAIA DR3 release</a>, a survey of 1.8+ billion stars. A Python script pre-renders those stars into custom skybox images so the backdrop is actual survey data, not a painted texture.</p>
<ol>
<li>
<p>The near field is real. Within about 17.72 parsecs (57.8 light-years), the map plots 53,836 stars from GAIA. Named waypoints match the book and film: Tau Ceti, Alpha Centauri, Sirius, Barnard&rsquo;s Star, Wolf 359, and the rest. Val confirmed on HN that the featured stars reflect known science. Astrophage routes are fiction layered on top.</p>
</li>
<li>
<p>Two views, two purposes. <strong>Color</strong> mode shows star colors from GAIA photometry. <strong>Petrova</strong> mode overlays the astrophage infection path from the story (Val credits David A. Wheeler&rsquo;s writeup for getting that arc right). You can appreciate the fan detail and still trust the stellar positions underneath.</p>
</li>
<li>
<p>The skybox pipeline is the technical flex. You cannot ship 1.8 billion points to a browser tab and expect smooth orbit controls. Val&rsquo;s approach: offline Python rendering into image tiles, then load the result as the all-sky backdrop labeled &ldquo;Gaia DR3 All-Sky.&rdquo; A handful of very bright stars missing from the cut get handled separately. Smart preprocessing beats brute force.</p>
</li>
<li>
<p>Zero setup, heavy GPU. Open the URL, pick a destination star, drag to rotate. An About modal on the site covers credits and data sources. No account, no install. On older hardware the 3D view may stutter. This is a demo, not a planetarium app.</p>
</li>
<li>
<p>Val shipped a bigger follow-up. If you want more than the Hail Mary route, <a href="https://valhovey.github.io/gaia-atlas/" target="_blank" rel="noopener">Gaia Atlas</a> adds dozens of named stars, exoplanet systems, shareable travel links, and 600k stars rendered in-browser. GAIA Mary is the focused fan piece; Gaia Atlas is the sandbox.</p>
</li>
</ol>
<h2>First run
    </h2><ol>
<li>Open <a href="https://valhovey.github.io/gaia-mary/" target="_blank" rel="noopener">valhovey.github.io/gaia-mary</a>.</li>
<li>Click <strong>About</strong> for the data blurb and credits.</li>
<li>Select a destination (Tau Ceti is the default story endpoint).</li>
<li>Toggle <strong>Color</strong> vs <strong>Petrova</strong> to compare science view and plot view.</li>
<li>Drag to rotate; click named stars in the list to jump.</li>
</ol>
<p>Want to build your own thing? Start at the <a href="https://www.cosmos.esa.int/web/gaia/dr3" target="_blank" rel="noopener">GAIA DR3 archive</a>. Val&rsquo;s HN comment is basically an invitation: the dataset is public, the rendering problem is interesting, and fan projects do not need a lab badge.</p>
<p><strong>Worth your time if:</strong> you read or watched Project Hail Mary and want to see local stellar space with real coordinates, or you are looking for a weekend open-data project with a gorgeous payoff.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/gps-educational/" >How The Heck Does GPS Work? (An Interactive Exploration)</a></strong> Another browser explainer that turns abstract positioning science into something you can click through.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/map3d/" >map3d: Generate Real-World 3D City Maps from OpenStreetMap Data</a></strong> Same open-data instinct on Earth: pull a public dataset, render it interactively in the browser.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/atom-animation/" >Atom Animation: Visualizing the Quantum World</a></strong> Science visualization that rewards curiosity without requiring a physics degree to enjoy the first five minutes.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Channel Surfer: Watch YouTube Like Cable TV</title><link>https://www.tmfnk.com/use/tools/channel-surfer/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/channel-surfer/</guid><description>Channel Surfer turns YouTube into a retro cable guide with curated channels and a bookmarklet that imports your subscriptions locally. No accounts, no API. YTCH is the simpler cousin if you just want to flip channels.</description><content:encoded><![CDATA[

<h2>🛠️ Channel Surfer
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Browser app that wraps YouTube in a 2000s cable TV guide</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Any modern browser; TV apps planned</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://channelsurfer.tv/" target="_blank" rel="noopener">channelsurfer.tv</a></td>
      </tr>
  </tbody>
</table>
<p>I open YouTube with a specific video in mind and twenty minutes later I&rsquo;m watching a guy restore a tractor I will never own. The homepage is a slot machine. <a href="https://channelsurfer.tv/" target="_blank" rel="noopener">Channel Surfer</a> fixes the mood, not the catalog: London developer Steven Irby built it to recreate cable TV for YouTube. It runs entirely in the browser. You import subscriptions through a bookmarklet. No accounts, no sign-ins. Your data stays local.</p>
<ol>
<li>
<p>The grid kills choice paralysis. You get a channel guide with themed rows (music, science, cooking, whatever Irby curated) instead of an infinite recommendation feed. Pick a number, tune in. Videos start at the point they&rsquo;d be at if the channel were broadcasting live right now, which is weirdly satisfying.</p>
</li>
<li>
<p>Subscription import is a bookmarklet, not OAuth. Drag the bookmarklet to your bar, open your YouTube subscriptions page, click it. JSON lands on your clipboard. Paste into Channel Surfer and your channels join the lineup. No YouTube API key, no Channel Surfer account. Irby said it plainly on Hacker News: &ldquo;Just quickly import your data locally.&rdquo;</p>
</li>
<li>
<p>The nostalgia layer is real but not fake. Scan lines and interlace are CSS, not a filter slapped on for Instagram. Comments and sidebar junk disappear. What remains feels like flipping through a hotel TV at 11pm. Irby told TechCrunch he built it because he misses channel surfing and &ldquo;not having to decide what to watch next.&rdquo;</p>
</li>
<li>
<p>You still get YouTube&rsquo;s embed player, which means YouTube ads unless you have Premium. Some reviewers got ad-free playback; your mileage depends on how YouTube serves that embed. The curated channels are Irby&rsquo;s taste. Great if you trust a human editor. Less great if you want full control from day one without importing your own list.</p>
</li>
<li>
<p>Mobile and TV are getting there. It works on tablets today but feels built for a couch setup. Irby has talked about Fire TV and Google TV apps. For now, a laptop plugged into the TV does the job.</p>
</li>
</ol>
<h2>Import your subscriptions
    </h2><ol>
<li>Open <a href="https://channelsurfer.tv/" target="_blank" rel="noopener">channelsurfer.tv</a> and choose <strong>Import Your Channels</strong> from the menu.</li>
<li>Drag the Channel Surfer bookmarklet to your bookmarks bar.</li>
<li>Go to your <a href="https://www.youtube.com/feed/channels" target="_blank" rel="noopener">YouTube subscriptions page</a> (must be logged into YouTube in that browser).</li>
<li>Click the bookmarklet. Wait for the JSON to copy.</li>
<li>Return to Channel Surfer, paste, hit Import.</li>
</ol>
<p>That is the whole setup. No install, no config file.</p>
<p><strong>Worth your time if:</strong> you have a fat subscription list and want to watch YouTube without the algorithm picking your mood for you.</p>
<h2>Also try: YTCH
    </h2><p>Before Channel Surfer blew up on Hacker News, <a href="https://www.ytch.tv/" target="_blank" rel="noopener">YTCH</a> was the project people kept linking in the comments. Same idea, different execution. Hadi Safa built a lean broadcast simulator: open the site and a video is already playing on a random channel. You cannot pause. You cannot scrub. Switch channels with the number keys (or the on-screen pad). Leave channel 4 and it keeps running without you, so you might miss the good part. That is the point.</p>
<p>YTCH ships about a dozen curated channels, not hundreds. No subscription import. What it wins on is simplicity and keyboard control. HN commenters run it in Chromium kiosk mode on a Raspberry Pi with a TV remote. If Channel Surfer feels like a full cable package, YTCH is the old TV in the garage with twelve working channels.</p>
<p>Settings let you toggle channel names, captions, and video titles. Support links point to <a href="https://www.buymeacoffee.com/hadisafa" target="_blank" rel="noopener">Buy Me a Coffee</a> and Patreon if you want to tip the creator.</p>
<p><strong>Pick Channel Surfer if:</strong> you want your own subscriptions in the guide and a proper TV listing layout.</p>
<p><strong>Pick YTCH if:</strong> you want zero setup and do not care whose channel is on. Just flip until something catches.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/block-youtube-shorts/" >How to Block YouTube Shorts: Complete Guide for Desktop and Mobile</a></strong> Pair channel surfing with killing Shorts if the algorithm still pulls you back to vertical doomscrolling.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/weatherstar-4000/" >WeatherStar 4000+: Relive the 90s Weather Channel in Your Browser</a></strong> Same retro-TV energy, different genre: live NOAA data in a Weather Channel local forecast skin.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/longcut/" >LongCut: Deep Learning from Long YouTube Videos</a></strong> The opposite workflow. Channel Surfer is for passive tuning; LongCut is for when you already know the video and want to study it.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>100 Jumps: Hold, Release, Don't Fall</title><link>https://www.tmfnk.com/enjoy/games/100-jumps/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/enjoy/games/100-jumps/</guid><description>A one-touch browser platformer from Bored Zebra. Charge your jump, land 100 platforms in a row, chain perfect center hits for extra lives. Five minutes to learn if you have the nerve.</description><content:encoded><![CDATA[

<h2>🎮 100 Jumps
    </h2><p>Bored Zebra (Perfect Level Games). Browser, iOS, Android. <a href="https://boredzebra.com/100jumps/" target="_blank" rel="noopener">Play it here</a>.</p>
<p>I loaded it on a lunch break expecting a five-minute distraction. Twenty minutes later I was still chasing a clean run, muttering at jump 47 because I held half a second too long. The whole game is hold, release, land. Your counter starts at 100 and ticks down with every platform you reach. Hit zero and you win.</p>
<ol>
<li>
<p>One input does everything. Hold to charge distance, release to arc onto the next pad. Platforms vary in spacing so you are constantly recalibrating muscle memory, not memorizing a pattern.</p>
</li>
<li>
<p>Perfect landings matter. Nail the center and you get a golden hit. Chain three in a row and you bank an extra life. That safety net is the only mercy in a game that otherwise punishes a single misread.</p>
</li>
<li>
<p>Stats stick locally. Attempt counts, best runs, trophies. Bored Zebra recently migrated hosts and offers to pull old stats if you had a prior account on the previous domain. Progress lives in your browser, not a login.</p>
</li>
<li>
<p>There is more than Classic mode once you beat it, plus a locked trophy tier and a tease for Exploding Hamsters on the same site. Fine if you want depth. I have not cleared Classic yet.</p>
</li>
</ol>
<p><strong>Play it if:</strong> you want a tight one-thumb challenge you can open in a tab and close without guilt.</p>
<p><strong>Skip it if:</strong> timing games make you angry, or you need a story. This is pure jump math.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/starfling/" >Starfling: Tap, Release, Sling Between Stars</a></strong> Same one-input browser loop, different fantasy: orbital slingshots instead of platform hops.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/globe-game/" >Globle Game</a></strong> Another daily-fixation game that punishes sloppy guesses and rewards patience.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/mini-micro/" >Mini Micro: A Neo-Retro Fantasy Computer That Runs in Your Browser</a></strong> If browser games pull you in, Mini Micro is the rabbit hole on the other end of the spectrum.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>1.1 Million Podcast Episodes, Finally in One Dataset</title><link>https://www.tmfnk.com/read/articles/structured-podcast-research-corpus-sporc/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/structured-podcast-research-corpus-sporc/</guid><description>Michigan researchers built SPoRC—a structured corpus of 1.1M English podcast transcripts from May–June 2020—with speaker turns, audio features, and a map of how the medium responds to real news.</description><content:encoded><![CDATA[
<p><em>Source: <a href="https://arxiv.org/abs/2411.07892" target="_blank" rel="noopener">arXiv:2411.07892</a> · <a href="https://arxiv.org/pdf/2411.07892" target="_blank" rel="noopener">PDF</a> · <a href="https://github.com/blitt2018/SPoRC_data" target="_blank" rel="noopener">SPoRC data (GitHub)</a> · <a href="https://huggingface.co/datasets/blitt/SPoRC" target="_blank" rel="noopener">Hugging Face</a></em></p>
<p>Podcasts are everywhere—Pew puts monthly listenership at 42% of Americans 12+—but academic work on the medium has mostly used hand-picked shows or tiny samples. <a href="https://arxiv.org/abs/2411.07892" target="_blank" rel="noopener">Litterer, Jurgens, and Card</a> (University of Michigan) close that gap with <strong>SPoRC</strong> (Structured Podcast Research Corpus): <strong>1.1 million English episodes</strong> from public RSS feeds in <strong>May–June 2020</strong>, <strong>6.6 billion words</strong> of transcript text, plus speaker-role labels for every episode and turn-level audio features for <strong>370K diarized</strong> episodes. It is the first open corpus meant to do for podcasts what big Twitter or Reddit dumps did for social media research.</p>
<ol>
<li><strong>The pipeline is the product as much as the snapshot.</strong> They started from Podcast Index (~273K English shows active that spring), downloaded <strong>1.3M episodes</strong>, transcribed with <strong>Whisper</strong> (<code>whisper-base.en</code>), filtered repetitive ASR glitches, and landed at 1.1M usable transcripts (&lt;10% WER vs. professional transcripts on validation). A random subset got <strong>pyannote</strong> diarization and <strong>openSMILE</strong> prosody (pitch, formants, MFCCs). Host/guest names come from a <strong>RoBERTa</strong> classifier trained on Prolific labels (κ≈0.77)—because RSS metadata is a mess and hosts usually introduce themselves in the first 350 words.</li>
<li><strong>Religion is the elephant in the room.</strong> Self-assigned category labels are noisy, but <strong>Religion</strong> turns out the most common category in the corpus—often recorded Christian sermons. LDA over 200 topics surfaces coherent islands (Wrestling, Bitcoin, Judaism) inside broad labels. Sports, Religion, and Business categories hang together topically; COVID and racial justice cut across categories—places where ideas might cross-pollinate even when guest networks do not.</li>
<li><strong>Guests wire the graph; not every genre plays.</strong> They build a podcast–guest bipartite graph and project it: <strong>10,480 shows</strong>, <strong>26,589 edges</strong> from shared guests. <strong>Business</strong> and <strong>Sports</strong> form tight modules (high modularity)—shows in those lanes reuse the same guest pool. <strong>Religion</strong> and <strong>Society</strong> are huge by episode count but invite guests far less often, so they are less connected for cross-show diffusion. Promotional tour guests are a real edge type in this medium.</li>
<li><strong>Podcasts do respond to news—slower than cable, wider than you&rsquo;d guess.</strong> May–June 2020 was deliberately chosen (George Floyd, COVID crossing 100K US deaths). After Floyd&rsquo;s murder, racial-justice topic share spikes over ~10 days (BLM peaks ~4 days after Floyd topics)—a &ldquo;media storm&rdquo; pattern, but <strong>slower than TV news storms</strong> in prior work. <strong>21% of all shows</strong> mention &ldquo;George Floyd&rdquo; at least once by end of June. Peaks hit ~20% even in Sports and Religion; only <strong>News</strong> gives heavy weight to policing/protest framing; <strong>Society</strong> sustains elevated mention longer than Sports.</li>
<li><strong>Incidental politics is the implication.</strong> Widespread Floyd discussion outside News/Society supports the idea that listeners get political content from trusted hosts they chose for other reasons—aligned with incidental exposure findings on other platforms. That matters for misinformation research too; prior work already flags podcast trust and bad health claims during COVID.</li>
<li><strong>What SPoRC is not.</strong> Exclusive platform deals drop shows (the paper notes <strong>Joe Rogan</strong> as a notable omission). Video-only feeds are out of scope. One eight-week slice is thick but not longitudinal—dynamics after June 2020 are unknowable from this release alone. Whisper still confuses ads with hosts (Ryan Reynolds in a sponsorship read labeled HOST). Non-commercial license on the release.</li>
<li><strong>You might think transcripts are enough for podcast research. The paper argues otherwise.</strong> Long-form audio carries turn structure, prosody, and who speaks—dimensions Twitter text never had. SPoRC is built for computational social science <em>and</em> NLP (summarization, narrative detection, popularity prediction) at a scale Spotify&rsquo;s deprecated 200K corpus never sustained.</li>
</ol>
<p><strong>The takeaway:</strong> If you study media, health communication, or information diffusion—or you build tools on podcast text—<a href="https://huggingface.co/datasets/blitt/SPoRC" target="_blank" rel="noopener">grab SPoRC</a> before reinventing a scrape-and-transcribe pipeline. Read the Floyd case study as a template for event studies on an ecosystem that is fragmented, trusted, and mostly invisible to existing dashboards. And treat any single May 2020 finding as snapshot science: the corpus is a map of one summer, not the whole territory.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/xhs-podcast-downloader/" >Xiaoyuzhou Podcast Downloader</a></strong> The listener-side mirror—archiving episodes you care about while researchers archive the ecosystem.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/how-people-use-chatgpt/" >How People Use ChatGPT</a></strong> Another lens on how people actually consume long-form information, not how platforms wish they would.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/general-guidelines-for-search-quality-evaluators/" >General Guidelines for Search Quality Evaluators</a></strong> Evaluating information quality at scale—adjacent mindset to ranking claims in an audio-heavy web.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/from-tobacco-to-ultra-processed-food/" >From Tobacco to Ultra-Processed Food</a></strong> How trusted channels shape behavior; podcasts sit in that lineage for wellness and politics.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>The Enterprise Context Layer: Synthesis Over Retrieval</title><link>https://www.tmfnk.com/use/tutorials/the-enterprise-context-layer/</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/the-enterprise-context-layer/</guid><description>Andy Chen's synthesis-over-retrieval thesis, plus the updated TMFNK ECL template: three build docs, ecl-runner workers, lean skills, and a full agent bootstrap spec.</description><content:encoded><![CDATA[

<h2>Article information
    </h2><ul>
<li><strong>Original article</strong>: <a href="https://andychen32.substack.com/p/the-enterprise-context-layer" target="_blank" rel="noopener">https://andychen32.substack.com/p/the-enterprise-context-layer</a></li>
<li><strong>TMFNK implementation</strong> (updated July 2026): <a href="https://github.com/TMFNK/Enterprise-Context-Layer" target="_blank" rel="noopener">TMFNK/Enterprise-Context-Layer</a>
<ul>
<li><code>README.md</code> — overview and how to run</li>
<li><code>readme-for-humans.md</code> — design rationale and deep background</li>
<li><code>readme-for-agents.md</code> — full build spec with runnable Python (~70 KB)</li>
<li><code>AGENTS.md</code> — harness grounding hook for Claude Code, Codex, Pi</li>
</ul>
</li>
</ul>
<hr>
<p>Andy Chen spent six months building a GTM question-answering bot at Abnormal Security before he realized the problem wasn&rsquo;t retrieval. Glean (arguably the best document-retrieval system in the world) still couldn&rsquo;t answer &ldquo;how long do we keep data after a customer churns?&rdquo; correctly. Because the right answer isn&rsquo;t in any document. It&rsquo;s: <em>don&rsquo;t answer this yourself, route it to the security team.</em></p>
<p>His solution: skip the ontology, the knowledge graph, and the semantic layer. Give twenty parallel LLM agents access to a Git repo and every primary source the company has, and tell them to write cited Markdown. Two days later: 6,000 commits, 1,020 files, 11 domains; 100% of every product, process, team, compliance framework, and competitive dynamic mapped, cross-referenced, and verified.</p>
<h3>One-sentence takeaway
    </h3><p>The Enterprise Context Layer solves synthesis over retrieval by encoding institutional reasoning frameworks as cited, conflict-aware Markdown in a Git repository, autonomously maintained by parallel agents that learn question routing.</p>
<hr>
<h2>Part 1: What Andy Chen built
    </h2><h3>The problem
    </h3><p>Chen&rsquo;s original task was deceptively simple: build a bot that helps GTM reps answer customer questions accurately. Questions like &ldquo;Will X feature be available next quarter?&rdquo;, &ldquo;How are you different from Y competitor?&rdquo;, &ldquo;What&rsquo;s your data retention policy?&rdquo;</p>
<p>Four things have to go right simultaneously for an AI to answer any of these correctly:</p>
<table>
  <thead>
      <tr>
          <th>Dimension</th>
          <th>Description</th>
          <th>What fails</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Product disambiguation</strong></td>
          <td>Matching customer language to internal product names</td>
          <td>Reps answer about the wrong product</td>
      </tr>
      <tr>
          <td><strong>Release semantics</strong></td>
          <td>Clarifying GA vs. early access, regional constraints (EU, FedRAMP)</td>
          <td>Customers receive incorrect access timelines</td>
      </tr>
      <tr>
          <td><strong>Roadmap process</strong></td>
          <td>NDA requirements, escalation paths, informal commitments</td>
          <td>Reps commit to unshipped features</td>
      </tr>
      <tr>
          <td><strong>Source conflicts</strong></td>
          <td>Outdated docs, contradicting PM announcements, informal vs. formal policy</td>
          <td>The confidently wrong answer</td>
      </tr>
  </tbody>
</table>
<p>Glean, which Chen praises explicitly as &ldquo;really really good&rdquo;, solves the first dimension through context graphs, trace learning, and per-customer embedding models. What it doesn&rsquo;t do is synthesize organizational context: the judgment calls, the institutional memory, the &ldquo;this question is actually dangerous and you shouldn&rsquo;t answer it&rdquo; knowledge that lives in Slack threads, Gong call recordings, and engineers&rsquo; heads.</p>
<p>The difference is noticeable. Ask &ldquo;when does customer data get deleted after churn?&rdquo; and a retrieval system returns the closest policy document. Chen&rsquo;s system returns: &ldquo;don&rsquo;t answer unless you absolutely know what you are doing; this is a high-risk question that should be escalated immediately to the legal team, and if you&rsquo;re not sure, route to the security team. Here&rsquo;s why, and here are three cases where reps got this wrong.&rdquo;</p>
<hr>
<h3>The implementation
    </h3><p>Chen&rsquo;s system is built on two ideas and one architectural trick.</p>
<h4>Synthesis over retrieval
    </h4><p>The ECL is not a search index. It&rsquo;s a Git repository of Markdown files that encode how the company actually works, the reasoning frameworks experts use, not just the raw facts they cite. Every file is a synthesis of primary sources: source code, Slack threads, Jira tickets, Gong transcripts, policy docs, ADRs. Every claim carries an inline citation. If an agent can&rsquo;t cite it, it doesn&rsquo;t write it.</p>
<h4>Document the conflict, not the winner
    </h4><p>When sources disagree, the ECL doesn&rsquo;t pick a side. It documents both, names the conflict explicitly, and records who should resolve it. A documented conflict is more useful than a silently chosen winner because it tells downstream agents and humans exactly why escalation is required.</p>
<h4>File-based distributed locking
    </h4><p>Chen adapted a task-locking pattern from Anthropic&rsquo;s C-Compiler project (Nicholas Carlini, Feb 2026), in which parallel Claude agents coordinate through lock files in a shared Git repo, with no external dependencies: no message broker, no coordinator service, no database. In Chen&rsquo;s adaptation, a maintenance agent continuously scans the ECL for gaps and staleness, writing task files into a <code>tasks/</code> directory. Worker agents claim tasks by writing a lock file and pushing to main; Git&rsquo;s push-rejection means only one agent gets a given task. The agent executes, writes or updates ECL files with citations, deletes the task and lock, commits, and pushes. Then it picks up the next task.</p>
<p>Twenty workers. Two days. 6,000 commits.</p>
<p><strong>Infrastructure:</strong></p>
<ul>
<li>~1,000 lines of Python for the harness</li>
<li>Modal sandbox for compute (plain bash access to the Git repo)</li>
<li>Glean search API + in-house retrieval for source access (Slack, Jira, Gong, etc.)</li>
<li>Git as the single source of truth; no message queue, no external database, no vector store</li>
</ul>
<p><strong>The prompt (Chen&rsquo;s actual words):</strong></p>
<blockquote>
  <p><em>You are an Enterprise Context Layer (ECL) Agent that builds and maintains internal mental models, the reasoning frameworks our experts use, not just raw facts. [&hellip;] The ECL is not built for readability. It&rsquo;s built for traceability and verifiability. Every claim, every statement, soft or hard, has to have an inline citation for the source(s) that it directly draws from.</em></p>
</blockquote>
<p>That&rsquo;s it. The rest emerges.</p>
<hr>
<h3>What emerged
    </h3><p>The artifacts Chen describes as &ldquo;otherwise impossible to produce manually&rdquo;:</p>
<h4>End-to-end customer journey
    </h4><p>From first sales contact through deployment, onboarding, renewal, and churn, all annotated with handoff points, common failure modes, and playbooks. Cross-referenced against real support cases and Gong calls.</p>
<h4>Detection model lifecycle
    </h4><p>A document bridging engineering, support, and customer success into one coherent mental model that previously lived only in a few engineers&rsquo; heads. Maps all causes of detection behavior change to customer-visible impact, with Databricks dashboard links and real incident case studies.</p>
<h4>Battle cards with closed evidence loops
    </h4><p>A Gong call where a competitive claim surfaced, correlated against actual product capabilities, linked to the Salesforce case showing how the deal ended, tied to field team Slack discussion on what messaging worked.</p>
<h4>Feature flag inventory
    </h4><p>Every flag across proto files, each cited back to specific line numbers in source code, with GovCloud overrides and deprecation status. No human has ever maintained something like this; it would be out of date the moment you finished writing it.</p>
<p>Then there&rsquo;s the routing behavior. When asked about data retention timelines, the system correctly declines to answer and routes to the security team. This behavior emerged from the citation architecture, not from a hard-coded rule.</p>
<hr>
<h3>Core insights
    </h3><p><strong>1. The taxonomy is the folder structure; the context graph is the backlinks.</strong></p>
<p>No ontology engine. No graph database. No semantic layer. Plain folders and plain Markdown. When an agent discovers that data retention questions connect to GTM and privacy and engineering, it writes a backlink in each file, and explains why. Over thousands of runs, backlinks accumulate into a navigable web of cross-domain understanding. The context graph builds itself.</p>
<p><strong>2. Every claim needs a citation; unverified claims are forbidden.</strong></p>
<p>The single most important writing rule. Unsourced assertions are more dangerous than gaps because they create false confidence. This rule is also what makes the system self-correcting: if a claim is wrong, the next agent can find the source, compare, and correct it. Remove citations and you have a confident, uncorrectable error machine.</p>
<p><strong>3. Document the conflict, not the winner.</strong></p>
<p>Two sources disagreeing is more useful information than a silently chosen winner. The ECL&rsquo;s job is to surface <em>why</em> something requires escalation, not to pretend the ambiguity doesn&rsquo;t exist.</p>
<p><strong>4. Architecture claims are durable; status claims are ephemeral.</strong></p>
<p>Chen&rsquo;s agents generalized this from experience: &ldquo;We use API-based integration&rdquo; is true for years. &ldquo;Feature X is coming soon&rdquo; can be unreliable within days. &ldquo;This PM announces features before they ship, so we don&rsquo;t commit to customers&rdquo; is tribal knowledge that retrieval will never surface. Different claims need different verification cadences.</p>
<p><strong>5. Three independent sources agreeing is the threshold for high confidence.</strong></p>
<p>But five Slack messages from the same channel are one data point, not five. Source diversity matters more than source volume.</p>
<p><strong>6. Meta-awareness emerges from seed files, not prompts.</strong></p>
<p>This is the subtlest insight in the essay. Chen created <code>meta/how-to-get-accurate-information.md</code> with a single line of instruction: <em>&ldquo;put in here synthesis of how to use tools to cite right sources, what sources or things tend to be out of date.&rdquo;</em> The agents filled out everything else completely from accumulated experience, over thousands of runs. No prompt changes. No architecture changes. Just a seed and a directory. The system learned which Confluence pages are perpetually stale, which Slack channels are noise vs. signal, which source pairs consistently conflict. Pre-filling that file with expert knowledge would have encoded the expert&rsquo;s biases. Leaving it empty let the agents discover the truth.</p>
<hr>
<h3>Broader connections
    </h3><h4>Context layers as practice, not product
    </h4><p>Chen&rsquo;s closing argument is that the ECL pattern is closer to DevOps than to Salesforce or Databricks. It&rsquo;s something most companies will build in-house rather than buy. The moat is not the tooling. It&rsquo;s the accumulated, verified, living body of institutional knowledge. That means the company that starts building its context layer today compounds its advantage over time in a way that can&rsquo;t be replicated by a vendor.</p>
<h4>Three layers of context for AI-native companies
    </h4><p>Chen sketches a hierarchy that deserves its own treatment: (1) enterprise context layer, company-wide knowledge; (2) team or org context layer, function-specific playbooks; (3) personal context layer, individual preferences and style. Each layer sits above retrieval and below task execution. Agents read from the layer appropriate to the task; the layers accumulate independently and at different rates.</p>
<h4>The ECL grounds computer-using agents
    </h4><p>The a16z thesis on computer-using agents (<a href="https://www.tmfnk.com/read/articles/the-rise-of-computer-use-and-agentic-coworkers/" >The Rise of Computer Use and Agentic Coworkers</a>) describes agents that navigate browsers, desktops, and legacy enterprise software. An agent that can navigate SAP is useful. One that knows <em>when</em> to navigate SAP, <em>which</em> queries require escalation, and <em>who</em> owns what is transformative. The ECL is the organizational memory those agents need to act correctly, not just efficiently.</p>
<h4>Foundation Capital&rsquo;s context graph thesis
    </h4><p>Jaya Gupta and Ashu Garg&rsquo;s December 2025 piece <a href="https://foundationcapital.com/ideas/context-graphs-ais-trillion-dollar-opportunity" target="_blank" rel="noopener">&quot;AI's Trillion-Dollar Opportunity: Context Graphs&quot;</a> argues that the next trillion-dollar platforms will be built not on systems of record (Salesforce, Workday, SAP) but on systems that capture decision traces: the <em>why</em> behind actions, not just the <em>what</em>. The ECL is a working implementation of this thesis at the level of a single company. The folder structure is the taxonomy. The backlinks are the decision trace. The <code>how-to-get-accurate-information.md</code> file is the accumulated judgment.</p>
<hr>
<h2>Part 2: The TMFNK implementation (updated 2026)
    </h2><p><em>What follows is my extrapolation from Chen&rsquo;s essay, now shipped as a full template repo. The conceptual core — synthesis over retrieval, empty seed file, folder-as-taxonomy, git push-rejection locking — is still his. The <a href="https://github.com/TMFNK/Enterprise-Context-Layer" target="_blank" rel="noopener">TMFNK/Enterprise-Context-Layer</a> repo grew significantly in 2026: three audience-specific docs, a complete agent build spec (<code>readme-for-agents.md</code>), runnable <code>ecl-runner.py</code> worker and maintenance loops, lean <code>SKILL.md</code> workflows inspired by <a href="https://github.com/tw93/Waza" target="_blank" rel="noopener">Waza</a>, RBAC tiers, and drift logging. One way to implement the pattern, not the only way.</em></p>
<h3>What&rsquo;s in the repo now
    </h3><table>
  <thead>
      <tr>
          <th>File</th>
          <th>Reader</th>
          <th>Purpose</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>README.md</code></td>
          <td>Humans</td>
          <td>Overview, architecture diagram, how to run workers and query</td>
      </tr>
      <tr>
          <td><code>readme-for-humans.md</code></td>
          <td>Engineers</td>
          <td>Why each design choice exists; read this to understand the system</td>
      </tr>
      <tr>
          <td><code>readme-for-agents.md</code></td>
          <td>LLM builders</td>
          <td>10-step Quick-Start Checklist, complete Python for task locking, workers, maintenance</td>
      </tr>
      <tr>
          <td><code>AGENTS.md</code></td>
          <td>Agent harnesses</td>
          <td>Auto-loaded grounding: points every session at <code>meta/</code> and <code>domains/skills/</code></td>
      </tr>
  </tbody>
</table>
<p><strong>Build path:</strong> clone the repo, open Claude Code / Codex / <a href="https://pi.dev/" target="_blank" rel="noopener">Pi</a>, and run:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Read readme-for-agents.md fully. Then follow the Quick-Start Checklist at the bottom of that document.
</span></span><span class="line"><span class="cl">Before you write any files, ask me the discovery questions in Step 1.</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Expect 30–90 minutes of human interview (domains, sources, authority hierarchy) before any worker runs. <strong>Stop for human review of <code>meta/system-prompt.md</code></strong> after Step 4. That file governs citations, routing rules, and what counts as a trusted source.</p>
<p><strong>Operate path</strong> (after bootstrap):</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># one worker to start</span>
</span></span><span class="line"><span class="cl">uv run ecl-runner.py worker --repo .
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># scale out (git is the only coordinator)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> i in <span class="k">$(</span>seq <span class="m">1</span> 5<span class="k">)</span><span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">  <span class="nv">ECL_AGENT_ID</span><span class="o">=</span><span class="s2">&#34;agent-</span><span class="nv">$i</span><span class="s2">&#34;</span> uv run ecl-runner.py worker --repo . <span class="p">&amp;</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># maintenance every 6 hours (cron-friendly)</span>
</span></span><span class="line"><span class="cl">uv run ecl-runner.py maintenance --repo .</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Workers claim YAML tasks in <code>tasks/</code> by writing a <code>.LOCKED</code> sidecar and pushing; rejected push means another agent won the race. Maintenance scans for stale <code>last_verified</code> dates, missing <code>mapping-notes.md</code> entries, unresolved conflicts, and outdated skills, then drops new tasks for workers.</p>
<hr>
<h3>Frameworks and models
    </h3><h4>1. Source authority hierarchy
    </h4><p>Not all sources are equally trustworthy. The table below is what I distilled from Chen&rsquo;s essay and from reading the Anthropic C-Compiler post on how agents handle conflicting signals:</p>
<table>
  <thead>
      <tr>
          <th>Source</th>
          <th>Authority</th>
          <th>Best For</th>
          <th>Do NOT Use For</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Source code (main branch)</td>
          <td>PRIMARY</td>
          <td>How a feature actually behaves</td>
          <td>Future roadmap</td>
      </tr>
      <tr>
          <td>ADRs</td>
          <td>PRIMARY</td>
          <td>Why a design decision was made</td>
          <td>Current state if ADR is &gt;1 year old</td>
      </tr>
      <tr>
          <td>On-call runbooks</td>
          <td>HIGH</td>
          <td>Incident triage, known failure modes</td>
          <td>Normal operation flows</td>
      </tr>
      <tr>
          <td>Jira (last 6 months)</td>
          <td>HIGH</td>
          <td>Bug/feature status</td>
          <td>Historical context</td>
      </tr>
      <tr>
          <td>Support cases</td>
          <td>HIGH</td>
          <td>Customer experience ground truth</td>
          <td>Technical accuracy</td>
      </tr>
      <tr>
          <td>Gong transcripts</td>
          <td>MEDIUM</td>
          <td>What customers actually ask</td>
          <td>Precise feature specs</td>
      </tr>
      <tr>
          <td>Slack (&lt; 90 days)</td>
          <td>MEDIUM</td>
          <td>Emerging issues, informal decisions</td>
          <td>Formal commitments</td>
      </tr>
      <tr>
          <td>Confluence</td>
          <td>MEDIUM</td>
          <td>Intended design, onboarding</td>
          <td>Actual current behavior</td>
      </tr>
      <tr>
          <td>Slack (&gt; 90 days)</td>
          <td>LOW</td>
          <td>Historical context only</td>
          <td>Anything current</td>
      </tr>
  </tbody>
</table>
<p>Operational reality beats documented ideal. Source code shows what the system <em>does</em>. Confluence shows what someone <em>intended</em>. When they conflict, the code is right and the doc is stale.</p>
<h4>2. Staleness by claim type
    </h4><p>Different facts have different half-lives. The ECL must encode this to avoid treating a feature flag inventory the same as a founding architecture decision:</p>
<table>
  <thead>
      <tr>
          <th>Claim type</th>
          <th>Re-verify after</th>
          <th>Reasoning</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Pricing</td>
          <td>7 days</td>
          <td>Changes frequently; expensive to get wrong</td>
      </tr>
      <tr>
          <td>Product status (beta/GA/deprecated)</td>
          <td>7 days</td>
          <td>Changes with each sprint</td>
      </tr>
      <tr>
          <td>Competitive landscape</td>
          <td>14 days</td>
          <td>Competitors ship fast</td>
      </tr>
      <tr>
          <td>People / roles</td>
          <td>30 days</td>
          <td>Org changes happen monthly</td>
      </tr>
      <tr>
          <td>Process documentation</td>
          <td>30 days</td>
          <td>Process evolves but not daily</td>
      </tr>
      <tr>
          <td>Regulatory / compliance</td>
          <td>30 days</td>
          <td>Rare changes, high consequences</td>
      </tr>
      <tr>
          <td>Technical architecture</td>
          <td>90 days</td>
          <td>Evolves slowly</td>
      </tr>
      <tr>
          <td>Historical events</td>
          <td>Never</td>
          <td>The past doesn&rsquo;t change</td>
      </tr>
  </tbody>
</table>
<h4>3. The ECL architecture (2026 layout)
    </h4><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>Data Sources (Slack, Jira, Confluence, GitHub, Gong, CRM, code)
    │
    ▼
Worker Agents (parallel, stateless)
  1. Pull ECL; claim task via .LOCKED &#43; git push
  2. Load matching domains/skills/{name}/SKILL.md if task type matches
  3. Read sources → synthesise with inline citations → document conflicts
  4. Append domains/{domain}/mapping-notes.md; commit; release task
    │
    ▼
Git Repo (single source of truth)
  AGENTS.md           ← harness auto-grounding
  meta/
    system-prompt.md
    how-to-get-accurate-information.md   ← starts empty; agents fill from experience
    domain-index.md                      ← domain → owner → primary sources
  tasks/              ← YAML queue &#43; .LOCKED files
  domains/            ← cited topic files &#43; mapping-notes per domain
    skills/           ← lean SKILL.md workflows (incident response, deals, etc.)
  sources/            ← read-only cited snapshots
  logs/               ← drift reports, agent error logs
    │
    ▼
Query (Claude Code, Pi, or rg &#43; any LLM)
  → cite ECL paths; surface conflicts; obey routing notes</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Topic files carry YAML front matter (<code>last_verified</code>, <code>confidence</code>, <code>agent</code>). Conflicts stay visible after resolution. Sensitive questions get routing notes, not answers.</p>
<h4>4. Lean skills instead of a heavy skills framework
    </h4><p>The repo&rsquo;s third pattern is <strong>Lean Skills</strong> (<a href="https://github.com/tw93/Waza" target="_blank" rel="noopener">Waza</a> shape): one <code>SKILL.md</code> per workflow under <code>domains/skills/</code>, with trigger phrases in frontmatter. An agent loads the skill only when the task matches, follows it once, and does not auto-chain into a multi-skill pipeline.</p>
<p>Examples in the spec: incident response, closing a deal, customer data requests. Skills are versioned ECL content like anything else: citations, <code>last_verified</code>, re-verified when the process they describe drifts.</p>
<p>Superpowers-style discipline (brainstorm before synthesis, plan before harness changes) still fits as optional agent hygiene. The template itself does not require the Superpowers plugin; <code>domains/skills/</code> is the built-in mechanism.</p>
<h4>5. Recommended worker counts by phase
    </h4><table>
  <thead>
      <tr>
          <th>Phase</th>
          <th>Workers</th>
          <th>Notes</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Initial seeding</td>
          <td>1</td>
          <td>Clean git history; easy to debug</td>
      </tr>
      <tr>
          <td>First population (3–4 domains)</td>
          <td>3–5</td>
          <td>Parallel without hammering sources</td>
      </tr>
      <tr>
          <td>Full population</td>
          <td>10–20</td>
          <td>Chen&rsquo;s original production scale</td>
      </tr>
      <tr>
          <td>Maintenance mode</td>
          <td>2–5</td>
          <td>Mostly verify/backlink tasks</td>
      </tr>
  </tbody>
</table>
<p>Tier models by task if you want to save tokens: frontier for <code>synthesise</code> and <code>conflict-review</code>, cheaper models for <code>verify</code> and <code>backlink</code> (Pi makes this a per-invocation setting).</p>
<hr>
<h3>Applications
    </h3><p><strong>What to do:</strong></p>
<ul>
<li>Start with one hard question, not all knowledge. Chen&rsquo;s original scope was a GTM bot answering five types of questions. The ECL grew from there. Pick the question that causes the most customer-facing failures and let the system expand from it. Don&rsquo;t try to map the whole company on day one.</li>
<li>Seed with an empty template, not expert content. The <code>how-to-get-accurate-information.md</code> file should start with one line of instruction. If you pre-fill it with what you know, you encode your biases and blind spots. Let agents build it bottom-up from accumulated experience.</li>
<li>Route, don&rsquo;t answer, for sensitive questions. Build routing rules as first-class artifacts. Which questions should never be answered by reps? Which require legal review? Which require escalation? These should be documented in the ECL before anything else.</li>
<li>Cross-reference across domains deliberately. When an agent discovers a connection between data retention policy, privacy team, and support case history, it should write that link explicitly in both files, with an explanation. Cross-domain understanding that stays implicit in one agent&rsquo;s context vanishes the next time a different agent reads the file.</li>
<li>Store workflows as lean <code>SKILL.md</code> files in <code>domains/skills/</code>, not only in Confluence. Process becomes citable, versioned, and subject to the same staleness checks as product docs.</li>
<li>Use <code>mapping-notes.md</code> per domain to audit what the fleet actually did. Without it you only see Markdown output, not which sources were read or which conflicts were found.</li>
</ul>
<p><strong>What to avoid:</strong></p>
<ul>
<li>Don&rsquo;t confuse the ECL with a better wiki. Wikis contain documents. The ECL contains reasoning frameworks. If your &ldquo;ECL&rdquo; is organized Confluence pages with better tagging, you&rsquo;ve built a taxonomy, not a context layer.</li>
<li>Don&rsquo;t skip the citation rule. This is the one rule that can&rsquo;t bend. Without inline citations, agents produce confident, untraceable errors that the next agent will propagate rather than correct. The self-correcting property depends entirely on traceability.</li>
<li>Don&rsquo;t pre-fill seed files with expert knowledge. The seed file&rsquo;s value is precisely that it&rsquo;s empty; agents fill it with what they actually discover, not what an expert assumes they&rsquo;ll discover.</li>
<li>Don&rsquo;t start too big. One domain, one worker, Claude Code as the query interface. Get that working first. The impressive-looking 1,020-file repo took two days because the pattern was right, not because someone planned 1,020 files.</li>
<li>Don&rsquo;t mistake the ECL for finished. Target state is continuous maintenance, not a complete wiki. The maintenance loop and worker loop run indefinitely.</li>
<li>Don&rsquo;t skip human review of <code>meta/system-prompt.md</code>. The bootstrap agent will guess at sensitive topics and routing rules; you sign off once, then workers inherit that contract.</li>
<li>Expect the query side to stay simple. Claude Code or Pi reading the repo is the v1 interface. <code>rg</code> plus an LLM is the lightweight alternative. Dedicated RAG is optional, not required.</li>
</ul>
<hr>
<h3>References
    </h3><p><strong>Primary sources:</strong></p>
<ul>
<li>Chen, A. (2026). &ldquo;The Enterprise Context Layer.&rdquo; Andy Chen&rsquo;s Substack. <a href="https://andychen32.substack.com/p/the-enterprise-context-layer" target="_blank" rel="noopener">https://andychen32.substack.com/p/the-enterprise-context-layer</a></li>
<li>Carlini, N. (2026). &ldquo;Building a C Compiler with a Team of Parallel Claudes.&rdquo; Anthropic Engineering Blog. <a href="https://www.anthropic.com/engineering/building-c-compiler" target="_blank" rel="noopener">https://www.anthropic.com/engineering/building-c-compiler</a> <em>(Source of the file-based distributed locking pattern.)</em></li>
</ul>
<p><strong>TMFNK implementation (GPL-3.0):</strong></p>
<ul>
<li><a href="https://github.com/TMFNK/Enterprise-Context-Layer" target="_blank" rel="noopener">TMFNK/Enterprise-Context-Layer</a>: Full template — <code>readme-for-agents.md</code> build spec, <code>ecl-runner.py</code>, task locking, staleness SLAs, RBAC tiers, lean skills, drift detection</li>
</ul>
<p><strong>Prior art (three patterns the repo synthesises):</strong></p>
<ul>
<li>Chen, A. (2026). <a href="https://andychen32.substack.com/p/the-enterprise-context-layer" target="_blank" rel="noopener">The Enterprise Context Layer</a> — synthesis over retrieval; folder taxonomy; backlinks as context graph</li>
<li>Carlini, N. (2026). <a href="https://www.anthropic.com/engineering/building-c-compiler" target="_blank" rel="noopener">Building a C Compiler with Parallel Claudes</a> — git push-rejection task locking</li>
<li>tw93. <a href="https://github.com/tw93/Waza" target="_blank" rel="noopener">Waza</a> — lean <code>SKILL.md</code> shape adapted as the ECL Lean Skills Pattern</li>
</ul>
<p><strong>Optional agent discipline:</strong></p>
<ul>
<li>Vincent, J. (obra). <a href="https://github.com/obra/superpowers" target="_blank" rel="noopener">Superpowers</a>: Optional workflow discipline for coding agents building or extending the harness; not required by the template</li>
</ul>
<p><strong>Related TMFNK content:</strong></p>
<ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/the-rise-of-computer-use-and-agentic-coworkers/" >The Rise of Computer Use and Agentic Coworkers</a></strong> Computer-using agents need organizational memory; the ECL is one way to supply it.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/pipeshub/" >PipesHub: The Open Source Glean Alternative</a></strong> Retrieval stack for finding sources; the ECL synthesises on top of what retrieval surfaces.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/obsidian-agent-client/" >Obsidian Agent Client: Bring Claude Code Into Your Vault</a></strong> Same pattern of grounding agents in a Git-native knowledge base you control.</li>
</ul>
<p><strong>Complementary reads:</strong></p>
<ul>
<li>Gupta, J. &amp; Garg, A. (2025). <a href="https://foundationcapital.com/ideas/context-graphs-ais-trillion-dollar-opportunity" target="_blank" rel="noopener">AI&rsquo;s Trillion-Dollar Opportunity: Context Graphs</a> — decision traces as the asset; the ECL&rsquo;s backlinks are a plain-text version</li>
<li>Glean. <a href="https://www.glean.com" target="_blank" rel="noopener">https://www.glean.com</a> — Chen used Glean search as a source API; retrieval and synthesis complement each other</li>
</ul>
<hr>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Think Twice: Harnessing the Power of Counterintuition by Michael J. Mauboussin</title><link>https://www.tmfnk.com/read/books/think-twice-by-michael-j-mauboussin/</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/books/think-twice-by-michael-j-mauboussin/</guid><description>When to trust your gut, when to override it, and how to stop mistaking a good story for a good forecast.</description><content:encoded><![CDATA[

<h2>📚 Think Twice by Michael J. Mauboussin
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Author</td>
          <td>Michael J. Mauboussin</td>
      </tr>
      <tr>
          <td>Year</td>
          <td>2009</td>
      </tr>
      <tr>
          <td>Pages</td>
          <td>224</td>
      </tr>
      <tr>
          <td>Read it if</td>
          <td>you make high-stakes calls under uncertainty and want a practical map of when intuition earns trust</td>
      </tr>
  </tbody>
</table>
<p>I picked this up after one too many confident forecasts fell apart within a year. Mauboussin&rsquo;s pitch is smaller than the subtitle suggests: learn which decisions your gut is actually trained for, and stop letting a polished story pass for evidence.</p>
<ol>
<li>
<p>Expert intuition only works in a narrow class of problems. Mauboussin sorts decisions by environment. Gut feeling earns its keep when the setting is stable, feedback is fast, and patterns repeat: chess, firefighting, surgery. Investing, corporate strategy, hiring executives? Different class. That&rsquo;s where &ldquo;think twice&rdquo; is the whole job.</p>
</li>
<li>
<p>The inside view sounds smart and skews optimistic. When you estimate a deadline or judge whether a bet will pay off, you build a narrative from this case&rsquo;s unique details. That&rsquo;s the inside view. The outside view asks a blunt question: how did similar situations actually turn out? In Mauboussin&rsquo;s examples, student project timelines shrink sharply once you anchor to past completion rates instead of the team&rsquo;s plan.</p>
</li>
<li>
<p>Preparation is what looks like genius in the ring. Mauboussin opens with Muhammad Ali. Spectators saw speed. What they missed was repetition: combinations drilled thousands of times before the bell. Mental models aren&rsquo;t accessories for clever people. They&rsquo;re the training that lets you respond correctly when there&rsquo;s no time to reason from scratch.</p>
</li>
<li>
<p>Coherent stories are not proof of cause and effect. One recurring trap is mistaking narrative fit for explanation. Mauboussin walks through cases where the obvious story (this choice caused that outcome) collapses on closer inspection. A story that hangs together can still be wrong.</p>
</li>
<li>
<p>Individual rationality does not guarantee group sense. Micro-level logic can produce macro-level nonsense: herding, bubbles, organizational drift. You can&rsquo;t infer crowd behavior from one person&rsquo;s motives, and you can&rsquo;t fix group failure by telling everyone to try harder individually.</p>
</li>
<li>
<p>Bad decisions often start with too few options on the table. Narrow framing is the quiet killer. Mauboussin&rsquo;s fix isn&rsquo;t louder brainstorming. Generate real alternatives before you commit to the first plan that sounds reasonable. A premortem helps: assume the decision failed, then work backward to explain why.</p>
</li>
<li>
<p>Experts help until you ask them the wrong question. Domain experts with tight feedback loops are valuable. Ask the same person to forecast outside that loop (long-range macro, novel technology, one-off strategy) and confidence often outruns accuracy. Mauboussin isn&rsquo;t anti-expert. He&rsquo;s strict about matching the tool to the task.</p>
</li>
<li>
<p>Good group calls need independence more than harmony. For a crowd to add information, people need to think differently and not coordinate before they commit. Meetings that socialize opinions before anyone writes a number down throw away the main benefit of having multiple minds in the room.</p>
</li>
</ol>
<p><strong>Verdict:</strong> Short book with a dense framework. The case studies show their age, but the decision-class map still holds. If you&rsquo;ve read Kahneman or Gawande, you&rsquo;ll recognize much of the furniture. Read this for Mauboussin&rsquo;s synthesis: when gut is earned, when to reach for the outside view, and when a checklist beats a confident room. Skim the anecdotes if you&rsquo;re busy; don&rsquo;t skip the early chapters on intuition and the prepared mind.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/books/thinking-fast-and-slow-by-daniel-kahneman/" >Thinking, Fast And Slow By Daniel Kahneman</a></strong> Mauboussin leans on Kahneman&rsquo;s System 1/System 2 split throughout. Read Kahneman first for the underlying psychology, then Think Twice for the applied decision-class map.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/the-checklist-manifesto-by-atul-gawande/" >The Checklist Manifesto: How to Get Things Right by Atul Gawande</a></strong> Gawande&rsquo;s answer to bad decisions is a checklist. Mauboussin agrees, but only for the narrow class of problems where expert intuition already works. Read both to see where that advice actually applies.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/the-black-swan-by-nassim-nicholas-taleb/" >The Black Swan: The Impact of the Highly Improbable by Nassim Nicholas Taleb</a></strong> Taleb goes further than Mauboussin, arguing rare events make most forecasting theater. Think Twice is the more practical, day-to-day companion to Taleb&rsquo;s bigger claim.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item></channel></rss>