<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matt Macosko</title>
    <description>The latest articles on DEV Community by Matt Macosko (@matt_macosko_f3829cfd86b8).</description>
    <link>https://dev.to/matt_macosko_f3829cfd86b8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3881937%2Fd462eaf2-e4e1-452e-82b5-c8a66e8941d1.jpg</url>
      <title>DEV Community: Matt Macosko</title>
      <link>https://dev.to/matt_macosko_f3829cfd86b8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matt_macosko_f3829cfd86b8"/>
    <language>en</language>
    <item>
      <title>I Had Three Terminals Open All Day. Now I Have One Window I Can Talk To.</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Tue, 13 Oct 2026 18:30:12 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/i-had-three-terminals-open-all-day-now-i-have-one-window-i-can-talk-to-4o0n</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/i-had-three-terminals-open-all-day-now-i-have-one-window-i-can-talk-to-4o0n</guid>
      <description>&lt;h2&gt;
  
  
  🖥️Three terminals, three computers
&lt;/h2&gt;

&lt;p&gt;Most days I have three terminals open, each one a Claude Code session, and they live on three different computers: an M5 MacBook, a Mac mini that stays on all the time, and a Windows PC in the shop. A lot of Divine Tribe, my vape business, gets done through those sessions. Orders, shipping, email, the websites, and the apps I build on the side.&lt;/p&gt;

&lt;p&gt;The sessions were fine. The screen was the problem. I’m usually in my browser doing orders on my shop dashboard or reading something, and next to it three windows are cooking and scrolling and asking for things. I wanted all of them tucked into a strip on the side of the screen, about a fifth of it, where I could open one up, tell it what I need, and put it back.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiullqo7f7y5r973qjb21.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiullqo7f7y5r973qjb21.jpg" alt="Moonstone showing a list of Claude Code sessions grouped by machine next to an open conversation" width="800" height="737"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The session list on the left, an open conversation on the right. All the screenshots here come from the demo server with made up sessions, not my real ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  🙅It doesn’t touch my browser
&lt;/h2&gt;

&lt;p&gt;Before anything got built we made a clickable mockup. The first version had a panel that opened pages for me and a terminal that slid over the browser. I said no to both. The browser is mine and I drive it. Moonstone is only the list of conversations and the conversations themselves, in a window I size myself and park next to everything else.&lt;/p&gt;

&lt;p&gt;Sessions are grouped by machine and each machine gets its own color. Whatever is waiting on me floats to the top with a NEEDS YOU tag. When I start a new session it picks the computer for me, skipping anything offline and going to whichever one has the least going on, and I can tap a different machine if I want it somewhere else.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff4a9bxohaf9cdvt3vgri.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff4a9bxohaf9cdvt3vgri.jpg" alt="Moonstone session list grouped into three machines with GPU and RAM gauges" width="700" height="1765"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each machine with its GPU and RAM. The star marks where the next session will start.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⌨️Never read only
&lt;/h2&gt;

&lt;p&gt;The first working version showed the sessions I had started in a regular terminal as read only, so I could watch them but not type into them. That didn’t last. I never just want to watch a session. I want to type into any of them from that one window like I’m sitting at that computer, and I want plain answers back, not the pile of commands and code it took to get there.&lt;/p&gt;

&lt;p&gt;So now typing into a terminal session moves the whole conversation into Moonstone with its history and closes the old terminal window. When a session wants to run something, it shows up as a card with Allow and Don’t, and nothing gets approved unless I tap it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2d9b9t0b494zw7r3xtqb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2d9b9t0b494zw7r3xtqb.jpg" alt="A Moonstone session asking permission to run a test command, with Allow and Don't buttons" width="800" height="947"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A session asking before it runs a command. Nothing is approved on its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎙️Talking to it with my hands full
&lt;/h2&gt;

&lt;p&gt;A good part of my day is packing orders, and I wanted to talk to my sessions while my hands are full. I already had a voice chat called Ohm that reads its answers out loud, and I liked how that felt. I wanted the same thing here.&lt;/p&gt;

&lt;p&gt;Every conversation has a mic button. Tap it, talk, then tap it again or hit Enter and it sends. I tried a couple of other ways to do the listening first and none of them felt as instant as the dictation already built into the computer, so that’s what it uses. On a Mac a little helper app turns on the Mac’s own dictation, and on Windows it presses Win+H. Answers get read back in a Kokoro voice running on my own machine. If I have Moonstone open on two computers at once, only the one I touched last does the talking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbfkivf62ot63gk9qm4w9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbfkivf62ot63gk9qm4w9.jpg" alt="A Moonstone conversation with the speaker turned on and the microphone button lit green" width="800" height="989"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The speaker at the top reads each answer out loud. The green mic means it’s listening.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠Local models in the same list
&lt;/h2&gt;

&lt;p&gt;Not every question needs Claude. The same list has local models on it: Qwen 3.8 Heretic and Gemma 4 on the M5, and SuperGemma 4 E4B on the PC. I run them at full precision, never squeezed down, so the PC gets the model that actually fits its 32 GB at full size. A local model that sits idle for 30 minutes shuts itself off and gives the memory back, and it starts up again on the next message.&lt;/p&gt;

&lt;p&gt;The transcription and the voice run on my own computers too. Each machine runs the same small server that only listens to itself, and they reach each other over SSH tunnels.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌙Where it is now
&lt;/h2&gt;

&lt;p&gt;It’s one Node file and one HTML file with no dependencies, and it’s meant to replace the &lt;a href="https://nicedreamzwholesale.com/software/trinidad-head/" rel="noopener noreferrer"&gt;Trinidad Head&lt;/a&gt; terminals I’ve been using. The code is on GitHub under the MIT license at &lt;a href="https://github.com/nicedreamzapp/moonstone" rel="noopener noreferrer"&gt;nicedreamzapp/moonstone&lt;/a&gt;, and there’s a page for it with the setup steps on my &lt;a href="https://nicedreamzwholesale.com/software/moonstone/" rel="noopener noreferrer"&gt;software site&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
      <category>ambientcomputing</category>
    </item>
    <item>
      <title>Anthropic’s Biggest Backer Just Killed Its Best Model: The Real Story Behind the Fable 5 Shutdown</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Tue, 29 Sep 2026 18:30:17 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/anthropics-biggest-backer-just-killed-its-best-model-the-real-story-behind-the-fable-5-shutdown-lm4</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/anthropics-biggest-backer-just-killed-its-best-model-the-real-story-behind-the-fable-5-shutdown-lm4</guid>
      <description>&lt;p&gt;120,000&lt;/p&gt;

&lt;p&gt;Characters of system prompt leaked&lt;/p&gt;

&lt;p&gt;90 min&lt;/p&gt;

&lt;p&gt;Ultimatum to comply&lt;/p&gt;

&lt;p&gt;3&lt;/p&gt;

&lt;p&gt;Days from launch to blackout&lt;/p&gt;

&lt;h2&gt;
  
  
  ⏱️The two-minute version
&lt;/h2&gt;

&lt;p&gt;Anthropic launched Claude Fable 5 and Mythos 5 on June 9, the most capable models they had ever shipped. Three days later, on Friday June 12, both models went dark for every customer on the planet. Not throttled, not regionally blocked. Gone.&lt;/p&gt;

&lt;p&gt;The reason everyone first latched onto was a famous jailbreaker named Pliny the Liberator, who cracked the model open within a day and posted its entire 120,000 character system prompt on GitHub. That happened, and it is a great story. But it is not why the model got pulled.&lt;/p&gt;

&lt;p&gt;The model got pulled because Amazon picked up the phone.&lt;/p&gt;

&lt;h2&gt;
  
  
  📰What the reporting actually says
&lt;/h2&gt;

&lt;p&gt;According to the Wall Street Journal, Axios, and The Information, Amazon’s own researchers bypassed Fable 5’s safety guardrails internally. They put together a report showing the model could be guided into finding security vulnerabilities across at least four different software programs, the kind of thing that makes a government nervous.&lt;/p&gt;

&lt;p&gt;Then Amazon CEO Andy Jassy made a late night call to Treasury Secretary Scott Bessent and other senior White House officials and handed over that report.&lt;/p&gt;

&lt;p&gt;From there it moved fast:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Friday morning the White House convened an emergency meeting.&lt;/li&gt;
&lt;li&gt;The Commerce Department issued an export control order barring access by any foreign national, anywhere, including foreign national employees inside Anthropic itself.&lt;/li&gt;
&lt;li&gt;At 1:30pm Eastern, Anthropic got a 90 minute ultimatum.&lt;/li&gt;
&lt;li&gt;By around 10pm that night, global access to Fable 5 and Mythos 5 was shut off.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because Anthropic had no way to instantly verify the citizenship of every user, the only way to comply with a foreign national ban was to turn the models off for absolutely everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  🥶Here is the part that should stop you cold
&lt;/h2&gt;

&lt;p&gt;Amazon is not some rival. Amazon is Anthropic’s single largest investor, somewhere around 8 billion dollars in. They are the cloud backbone Claude runs on through Bedrock.&lt;/p&gt;

&lt;p&gt;So the company that pulled the trigger on Anthropic’s flagship launch was its own biggest financial backer. A major investor walked a security report into the White House and got its own portfolio company’s best product taken off the market in a single day.&lt;/p&gt;

&lt;p&gt;That is the detail lighting Reddit up right now. Threads across r/ClaudeAI, r/ClaudeCode, r/singularity, r/artificial, and r/neoliberal are all pointing at the same thing: this was not a rogue hacker bringing down a model, this was a boardroom phone call.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛡️Anthropic says it was never a real jailbreak
&lt;/h2&gt;

&lt;p&gt;For the record, Anthropic disputes the whole premise. Their position is that nobody actually broke their core safety systems. They argue the demonstrations were just coaxing the model past its conversational refusals, not defeating the independent classifiers that do the real safety work. They say some of the outputs being passed around did not even come from Fable 5, and that the so called exploit was basically the model doing its intended job, reading a codebase and pointing out bugs.&lt;/p&gt;

&lt;p&gt;Anthropic called the government’s read of the situation “a misunderstanding” and pushed back on the idea that one narrow potential weakness should be grounds for yanking a commercial model used by hundreds of millions of people.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔓So who jailbroke Fable 5?
&lt;/h2&gt;

&lt;p&gt;Both, in different ways, and that is why the story got scrambled.&lt;/p&gt;

&lt;p&gt;Pliny the Liberator did the loud public version. He always does, usually within hours of any major model launch. That is the one that went viral.&lt;/p&gt;

&lt;p&gt;Amazon’s researchers did the quiet version, the one with a report and a phone number for the Treasury Secretary. That is the one that actually ended the model.&lt;/p&gt;

&lt;p&gt;If you saw someone say “Amazon jailbroke Fable,” that is not quite right and not quite wrong. Amazon’s people did bypass it, and Amazon’s report is what killed it. Pliny’s stunt was a separate event running in parallel.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏠Why this matters if you actually depend on AI
&lt;/h2&gt;

&lt;p&gt;Strip away the drama and the lesson is the same one I keep coming back to. The most powerful AI on earth was switched off in a single afternoon. Not by a bug. Not by a hacker. By a combination of one investor’s phone call and one government order.&lt;/p&gt;

&lt;p&gt;If your workflow lives entirely in someone else’s cloud, your access is a guest pass. It can be revoked by a memo, quietly degraded without notice, or caught in the crossfire between a lab, its investors, and Washington. None of those three are working for you.&lt;/p&gt;

&lt;p&gt;A model running on hardware you own does not get suspended by an export order. It does not get downgraded the day you need it most. It is slower and it is dumber than the frontier stuff, and it is still yours, and it is still running tomorrow.&lt;/p&gt;

&lt;p&gt;🔑That is the whole argument for keeping some of your intelligence local. Fable 5 just proved it twice in one week.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
      <category>ainewsampcommentary</category>
    </item>
    <item>
      <title>Hermes-4-14B Abliterated, MLX 4-bit — Apple Silicon Just Got Another Real Model</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Thu, 24 Sep 2026 18:30:09 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/hermes-4-14b-abliterated-mlx-4-bit-apple-silicon-just-got-another-real-model-48no</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/hermes-4-14b-abliterated-mlx-4-bit-apple-silicon-just-got-another-real-model-48no</guid>
      <description>&lt;p&gt;16 GB&lt;/p&gt;

&lt;p&gt;Mac it runs on&lt;/p&gt;

&lt;p&gt;~1,000&lt;/p&gt;

&lt;p&gt;Downloads per model / 30 days&lt;/p&gt;

&lt;p&gt;~1 hr&lt;/p&gt;

&lt;p&gt;From git pull to upload&lt;/p&gt;

&lt;h2&gt;
  
  
  📦What it is
&lt;/h2&gt;

&lt;p&gt;Hermes 4 is NousResearch’s instruction-tuned model family. The 14B variant is built on Qwen3, so it inherits Qwen3’s tokenizer, chat template, and architectural quirks — but the post-training is pure Hermes, which means it’s tuned for tool use, role-play, structured output, and not refusing benign-but-edgy questions.&lt;/p&gt;

&lt;p&gt;Babsie’s abliteration applies refusal-direction projection per Arditi et al. (2024) to the BF16 weights, which suppresses the model’s built-in refusal vector. Plain English: the model will answer questions that the upstream Hermes would politely decline. You become the moderator.&lt;/p&gt;

&lt;p&gt;My contribution is the boring-but-useful part: convert those BF16 weights to MLX, quantize to 4 bits with group size 64, ship.&lt;/p&gt;

&lt;h2&gt;
  
  
  🍏Why this matters for Mac users
&lt;/h2&gt;

&lt;p&gt;14B is the sweet spot on Apple Silicon. Big enough to be genuinely useful for instruction-following, small enough to fit comfortably in 16 GB of unified memory at 4-bit, and tiny enough on disk that you can keep a half-dozen variants without thinking about it.&lt;/p&gt;

&lt;p&gt;For comparison:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🦙 Llama 3.3 70B 8-bit MLX&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(also on my Hugging Face) — 75 GB, needs a 96 GB machine&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💎 Gemma 4 31B 4-bit MLX&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;17 GB, runs on any 32 GB Mac&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Hermes 4 14B 4-bit MLX&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;8 GB, runs on a 16 GB Mac, snappy on anything bigger&lt;/p&gt;

&lt;p&gt;If you have an M-series Mac and you want a capable instruction-tuned model that doesn’t refuse benign requests and doesn’t phone home, this is the easiest install on the list.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️How to run it
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;mlx_lm&lt;/code&gt; package does all the heavy lifting. From a terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;mlx-lm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mlx_lm&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;generate&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tokenizer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;divinetribe/Hermes-4-14B-abliterated-4bit-mlx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write a haiku about local inference.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply_chat_template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;add_generation_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tokenize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or as a server, using &lt;code&gt;mlx-lm&lt;/code&gt;’s OpenAI-compatible endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mlx_lm.server &lt;span class="nt"&gt;--model&lt;/span&gt; divinetribe/Hermes-4-14B-abliterated-4bit-mlx &lt;span class="nt"&gt;--port&lt;/span&gt; 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives you a local &lt;code&gt;http://localhost:8080/v1/chat/completions&lt;/code&gt; endpoint that any OpenAI SDK client can hit. No tokens, no API bills, no telemetry.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧩Where it slots into the local-first stack
&lt;/h2&gt;

&lt;p&gt;I maintain &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt; on GitHub — a project that lets you run Claude Code 100% on-device using local MLX models in place of the Anthropic API. Hermes 4 14B abliterated is now a supported backend, sitting between Gemma 4 31B (the everyday workhorse) and Llama 3.3 70B (the heavy lifter) in terms of size and speed.&lt;/p&gt;

&lt;p&gt;For workflows where refusals are noise (security research, fiction with edge, prompt-engineering experiments where the same prompt needs to hit both refusing and non-refusing models for comparison), the abliterated variant saves a lot of re-prompting.&lt;/p&gt;

&lt;h2&gt;
  
  
  📤Why I publish these
&lt;/h2&gt;

&lt;p&gt;From where I sit, the Apple Silicon community is underserved on model variety. The big quantization shops mostly target llama.cpp and GGUF, which is fantastic for Linux/Windows GPU workflows but adds a translation layer on Macs. MLX is Apple’s own framework, and when a model lands in MLX format the experience on a Mac goes from “this works” to “this is what the hardware is for.”&lt;/p&gt;

&lt;p&gt;So a few times a month, when a hot new model drops, I take the abliterated BF16 (if a trusted shop has done the abliteration upstream) and run it through &lt;code&gt;mlx_lm.convert&lt;/code&gt;. Takes about an hour from &lt;code&gt;git pull&lt;/code&gt; to &lt;code&gt;huggingface-cli upload&lt;/code&gt;. Costs me ~80 GB of disk during the build and ~8 GB to keep around.&lt;/p&gt;

&lt;p&gt;The downloads page tells me people are finding them. Llama 3.3 70B 8-bit MLX and Gemma 4 31B 4-bit MLX each pull ~1,000 downloads every 30 days, almost entirely from Mac users running them through &lt;code&gt;mlx-lm&lt;/code&gt; or &lt;code&gt;claude-code-local&lt;/code&gt;. Hermes 4 14B should be more accessible than either, since 16 GB Macs are everywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔮What’s next
&lt;/h2&gt;

&lt;p&gt;I’m watching for the BF16 abliterated source of DeepSeek V4 Flash to drop publicly. The GGUF version (&lt;code&gt;cyberneurova/CyberNeurova-DeepSeek-V4-Flash-abliterated-GGUF&lt;/code&gt;) already has 86 K downloads, but the BF16 source isn’t published yet — the moment it lands, I’ll be the first to ship an MLX 4-bit. DeepSeek V4 Flash on Apple Silicon at ~140 GB is going to be a moment for people with 128 GB+ Macs.&lt;/p&gt;

&lt;p&gt;🎁Until then: enjoy Hermes 4 14B. The model card has the full install recipe and a benchmark snippet.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Model on Hugging Face: &lt;a href="https://huggingface.co/divinetribe/Hermes-4-14B-abliterated-4bit-mlx" rel="noopener noreferrer"&gt;divinetribe/Hermes-4-14B-abliterated-4bit-mlx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://huggingface.co/Babsie/Hermes-4-14B-BF16-abliterated" rel="noopener noreferrer"&gt;Babsie/Hermes-4-14B-BF16-abliterated&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;All my MLX models: &lt;a href="https://huggingface.co/divinetribe" rel="noopener noreferrer"&gt;huggingface.co/divinetribe&lt;/a&gt; (or the showcase page at &lt;a href="https://nicedreamzwholesale.com/software/huggingface/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software/huggingface/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Local Claude Code: &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;github.com/nicedreamzapp/claude-code-local&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nicedreamzwholesale.com/airgap/" rel="noopener noreferrer"&gt;AirGap&lt;/a&gt; — what the full private build looks like for compliance-sensitive firms; the whole stack is open source&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
      <category>localaiampopenmodels</category>
      <category>abliterated</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Took Down Six of My Own Benchmark Videos. Then I Built the Local Agent Leaderboard.</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Tue, 22 Sep 2026 18:30:07 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/i-took-down-six-of-my-own-benchmark-videos-then-i-built-the-local-agent-leaderboard-3jgp</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/i-took-down-six-of-my-own-benchmark-videos-then-i-built-the-local-agent-leaderboard-3jgp</guid>
      <description>&lt;p&gt;64 s&lt;/p&gt;

&lt;p&gt;Local easy-suite time vs 122 s cloud&lt;/p&gt;

&lt;p&gt;40&lt;/p&gt;

&lt;p&gt;Checks every judge must pass first&lt;/p&gt;

&lt;p&gt;$0&lt;/p&gt;

&lt;p&gt;Per token on my own hardware&lt;/p&gt;

&lt;h2&gt;
  
  
  🕵️I caught my own judge lying
&lt;/h2&gt;

&lt;p&gt;My benchmarks are filesystem-judged: the model does real work in a sandbox — create the file, fix the failing test, rename a function across files — and a script checks the artifacts afterward. The model’s opinion of its own work is never consulted. I thought that made the scores bulletproof.&lt;/p&gt;

&lt;p&gt;Then I built a validation gate: before any judge is allowed to score a model, it has to pass a known-good reference solution and fail a plausible known-bad one. Twenty tasks, forty checks. Nineteen judges passed. One didn’t.&lt;/p&gt;

&lt;p&gt;The hard-suite cache task (build an LRU cache with per-item TTL) had a probe that asserted an eviction order its own spec forbids. I wrote a spec-perfect solution by hand and the judge failed it. Which means both models in my published video had been scored down by a bug in &lt;em&gt;my&lt;/em&gt; test. The video said 6/8 and 6/8. The truth, under the repaired judge: 7/8 for Qwen3-Coder and a perfect 8/8 for Qwen3.6. My broken test made both models look &lt;em&gt;worse&lt;/em&gt; — that’s the lucky direction of this failure, and it still wasn’t good enough to leave up.&lt;/p&gt;

&lt;p&gt;Judges are code. Code has bugs. If a benchmark has never tested its own judges, it’s a random number generator with a nice table.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏟️So I built the league
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/nicedreamzapp/agent12" rel="noopener noreferrer"&gt;Agent-12&lt;/a&gt;&lt;/strong&gt; is a public leaderboard for the question r/LocalLLaMA asks every single week: &lt;em&gt;which model can actually be my agent on my own hardware?&lt;/em&gt; Not trivia scores. Twenty sandboxed agent tasks — 12 everyday chores, 8 hard reasoning problems — judged only by what lands on disk. Temperature 0, fixed step caps, fresh sandbox and fresh conversation per task, hash-pinned test files so a model that “fixes” a failing test by editing the test scores zero.&lt;/p&gt;

&lt;p&gt;And the part I now consider non-negotiable: &lt;strong&gt;every judge is validated against known-good and known-bad reference solutions before it scores anything&lt;/strong&gt;, and &lt;strong&gt;every model runs the full gauntlet three to four times&lt;/strong&gt;. A lucky run counts for nothing. The repo — tasks, judges, runner, validation gate, methodology — is open, and any agent CLI can plug into the same tasks through a generic adapter.&lt;/p&gt;

&lt;h2&gt;
  
  
  🥊Day one: five local fighters, one cloud yardstick
&lt;/h2&gt;

&lt;p&gt;All local rows ran on one Apple M5 with 128 GB unified memory, through my lean ~550-token terminal engine.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Easy (12)&lt;/th&gt;
&lt;th&gt;Hard (8)&lt;/th&gt;
&lt;th&gt;tok/s&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Qwen3.6-35B&lt;/strong&gt; 👑&lt;/td&gt;
&lt;td&gt;12/12&lt;/td&gt;
&lt;td&gt;8/8&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;Perfect in every sweep. Champion.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-Coder-30B&lt;/td&gt;
&lt;td&gt;12/12&lt;/td&gt;
&lt;td&gt;7/8&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td&gt;Fastest. Fails the same parser task every run.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 31B&lt;/td&gt;
&lt;td&gt;11–12/12&lt;/td&gt;
&lt;td&gt;7–8/8&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;Scores wander between runs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Flash (2-bit, 0731)&lt;/td&gt;
&lt;td&gt;12/12&lt;/td&gt;
&lt;td&gt;8/8&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;284B MoE. Perfect, but patient work.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Flash (original)&lt;/td&gt;
&lt;td&gt;Beaten by the 0731 update in every category. Deleted — 81 GB freed. The league has cuts.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The repeat runs earn their keep. Qwen3-Coder failing the &lt;em&gt;same&lt;/em&gt; task three sweeps in a row is a reproducible fingerprint you’d never see in a single-run benchmark. Gemma’s misses moving around between runs is a stability finding in its own right.&lt;/p&gt;

&lt;h2&gt;
  
  
  😮The row that surprised me
&lt;/h2&gt;

&lt;p&gt;I ran Claude — the frontier cloud model — through the same engine, same tasks, same judges, as a clearly-labeled reference point. It went a perfect 20/20. So did my local champion. And on wall-clock, the local model won: 64s vs 122s on the easy suite, 125s vs 131s on the hard suite (cloud times include network round-trips — which is the honest end-to-end experience of using it).&lt;/p&gt;

&lt;p&gt;That’s not a claim, it’s a row on a public board with the runner that produced it.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️The harness is half the story
&lt;/h2&gt;

&lt;p&gt;One more result, because it’s the reason this board exists. The same Qwen3.6 that goes 20/20 in my lean terminal engine spent an hour in a 32,000-token thinking spiral inside a heavyweight agent harness (7,800-token system prompt, 66 tools) and produced &lt;em&gt;zero files&lt;/em&gt;. Same weights. Same machine. The harness was the only variable.&lt;/p&gt;

&lt;p&gt;The ecosystem is currently running the other direction — plugging local models into big cloud-grade harnesses and blaming the model when it chokes. There’s fresh academic backing for harness-model matching mattering this much (&lt;a href="https://arxiv.org/abs/2606.21140" rel="noopener noreferrer"&gt;AgentMeter, arXiv 2606.21140&lt;/a&gt;) — but it was measured on cloud CLIs. Nobody was measuring it on hardware you can buy. Now somebody is.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔮What happens next
&lt;/h2&gt;

&lt;p&gt;Every new model that drops gets a row and a fight video. The board lives at &lt;a href="https://nicedreamzapp.github.io/agent12/" rel="noopener noreferrer"&gt;nicedreamzapp.github.io/agent12&lt;/a&gt;, the code at &lt;a href="https://github.com/nicedreamzapp/agent12" rel="noopener noreferrer"&gt;github.com/nicedreamzapp/agent12&lt;/a&gt;. If you think your favorite model belongs on it, tell me — it’ll get the same twenty tasks, the same validated judges, and the same number of chances to prove it wasn’t luck.&lt;/p&gt;

&lt;p&gt;👑A 35B model on the Mac on my desk tied the cloud on score and beat it on time, at zero dollars per token.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
      <category>localaiampopenmodels</category>
    </item>
    <item>
      <title>The Heppner Ruling, Warner v. Gilbarco, and What Confidential AI Actually Has to Mean</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Thu, 17 Sep 2026 18:30:08 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/the-heppner-ruling-warner-v-gilbarco-and-what-confidential-ai-actually-has-to-mean-1b42</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/the-heppner-ruling-warner-v-gilbarco-and-what-confidential-ai-actually-has-to-mean-1b42</guid>
      <description>&lt;p&gt;&lt;em&gt;This article describes a recent federal court ruling and what it implies for confidential AI use. It is not legal advice. Talk to your bar counsel before changing any firm policy.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;3 sec&lt;/p&gt;

&lt;p&gt;To verify with lsof -i&lt;/p&gt;

&lt;p&gt;31B&lt;/p&gt;

&lt;p&gt;Params a firm can run on-device&lt;/p&gt;

&lt;p&gt;$400/hr&lt;/p&gt;

&lt;p&gt;The attorney who won’t take the weekend&lt;/p&gt;

&lt;h2&gt;
  
  
  📜What the ruling actually says, and what it does not
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Heppner is about a client&lt;/strong&gt; — not a lawyer — who used a public AI tool on his own, after indictment, and then handed the output to his lawyers. The court held that the client’s own act of transmitting prompts to a public platform destroyed any expectation of confidentiality. Receiving the output later did not cure that.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;not&lt;/strong&gt; a blanket holding that all AI-assisted legal work loses privilege. The same month, in &lt;em&gt;Warner v. Gilbarco, Inc.&lt;/em&gt;, No. 2:24-cv-12333 (E.D. Mich. Feb. 10, 2026), a federal court denied a motion to compel disclosure of AI-assisted internal analysis and drafting, holding that the work-product doctrine still applied.&lt;/p&gt;

&lt;p&gt;The split is not about whether AI is allowed in legal work. It is about &lt;strong&gt;where the AI runs and who sees the data along the way&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠️ Public, third-party-hosted AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Used by a client or counsel. &lt;strong&gt;Heppner-style transmission risk&lt;/strong&gt; to privilege. The contract may help but does not physically prevent transmission.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Internal / on-device AI (privilege intact)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Used by the firm for its own work-product, where data never leaves the firm. &lt;strong&gt;Warner-style work-product protection&lt;/strong&gt; still applies.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔀The two real categories of “private AI” in 2026
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;☁️ Cloud with contractual ZDR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spellbook, Harvey, CoCounsel. Pitch: we do not train on your data, contract says so, here is the DPA. Heppner weakens the simple version of the argument; the contract still has to survive scrutiny.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🖥️ On-device&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The language model runs on a Mac or PC inside the firm. Outbound network traffic blocked at the firewall. The data is not transmitted because there is no transmission. Verified with &lt;code&gt;lsof -i&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Both categories have legitimate use cases. They are not the same product. After Heppner and Warner read together, they are not the same risk profile either.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔒Why physical beats contractual for genuinely privileged work
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;A contract is a promise that something will not happen. A network configuration is a constraint that prevents something from happening.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When Judge Rakoff examined the public AI platform’s terms in Heppner, he was assessing a promise. When you point bar counsel at a Mac running locally with the Wi-Fi physically off and &lt;code&gt;lsof&lt;/code&gt; on screen, you are showing them an absence of transmission. That is a different evidentiary category. It is also a verifiable one. Any partner, paralegal, IT vendor, or auditor in the firm can run &lt;code&gt;lsof -i&lt;/code&gt; themselves and see whether a network connection is open. The check takes three seconds. It does not depend on trusting a third party’s audit.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚖️What on-device AI is good at, and what it is not
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Good at&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NDA and contract review against template clauses&lt;/li&gt;
&lt;li&gt;Document summarization&lt;/li&gt;
&lt;li&gt;Drafting against your own document library, with citation-checking against your corpus&lt;/li&gt;
&lt;li&gt;Daily briefings on what changed in matter folders overnight&lt;/li&gt;
&lt;li&gt;Plain-English Q&amp;amp;A over a firm’s own document set&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;❌ Not as good at&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time legal research against current case law (the model knows what it was trained on; it does not search Westlaw)&lt;/li&gt;
&lt;li&gt;Tasks that genuinely require frontier cloud-model capability (on-device frontier is roughly a 70B model in 2026)&lt;/li&gt;
&lt;li&gt;Workflows where current online context is the whole point&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A realistic implementation uses both: on-device for the privileged work, cloud-with-care (with a DPA, with a written firm policy) for the public research.&lt;/p&gt;

&lt;h2&gt;
  
  
  🗓️What a small firm can actually do this week
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write down which matters&lt;/strong&gt; have had documents touched by public AI tools. You may need this if discovery ever comes for the AI-generated work product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update your firm’s AI policy&lt;/strong&gt; to differentiate between research (cloud OK with care) and privileged document work (on-device, or contractual ZDR with eyes wide open about Heppner-style risk).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pilot on-device&lt;/strong&gt; for the small, repeatable, privileged tasks first: NDA review, contract summary, intake document analysis, daily briefings.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The hardware to run on-device AI privately in 2026 is a Mac mini or MacBook Pro with Apple Silicon. The open-source software stack to run a 31-billion-parameter language model on either is freely available. The total setup time for a technical person is a weekend. The total setup time for a $400-an-hour attorney is also a weekend they will never take.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✍️On that note
&lt;/h2&gt;

&lt;p&gt;I run a small business in Arcata, California, and this exact stack runs it every day. I used to sell a pre-configured version of it, the AirGap Box. I have since retired that as a product. The whole stack is open source, and a competent IT person can stand it up from my repos in a weekend without ever talking to me. That is the point of open source, and honestly it is a better answer for a compliance-minded firm than buying a box from any vendor, me included.&lt;/p&gt;

&lt;p&gt;What I offer now is simpler: if your firm wants a system like this built and your team trained on it, email me and we will talk about whether it makes sense. &lt;a href="https://nicedreamzwholesale.com/airgap/" rel="noopener noreferrer"&gt;Here is what a full build looks like.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can watch a live &lt;code&gt;lsof&lt;/code&gt;-on-screen demo of an NDA being reviewed on a laptop with Wi-Fi physically off, &lt;a href="https://www.youtube.com/watch?v=V_J1LpNGwmY" rel="noopener noreferrer"&gt;on YouTube&lt;/a&gt;, before deciding anything.&lt;/p&gt;

&lt;p&gt;If you are a partner, a managing attorney, or an IT lead at a firm trying to figure out what Heppner and Warner mean for your firm’s AI policy, my email is &lt;a href="mailto:info@nicedreamzwholesale.com"&gt;info@nicedreamzwholesale.com&lt;/a&gt;. No sales pitch. I will tell you honestly whether on-device makes sense for your firm before I would let you buy anything from me.&lt;/p&gt;

&lt;p&gt;⚖️The point of Heppner is not to forbid cloud AI. It is to stop pretending cloud AI is the same thing for both kinds of work.&lt;/p&gt;

&lt;p&gt;— Matt Macosko&lt;br&gt;&lt;br&gt;
Nice Dreamz LLC&lt;br&gt;&lt;br&gt;
Arcata, California&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Sources for the cases discussed:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;K&amp;amp;L Gates, “Litigation Minute: Generative AI Data, Attorney-Client Privilege, and the Work-Product Doctrine” (Feb. 23, 2026)&lt;/li&gt;
&lt;li&gt;Wealth Management, “Attorney-Client Privilege Waived by Client’s Use of Public AI” (2026)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;United States v. Heppner&lt;/em&gt;, No. 25-cr-00503-JSR (S.D.N.Y. Feb. 17, 2026)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Warner v. Gilbarco, Inc.&lt;/em&gt;, No. 2:24-cv-12333 (E.D. Mich. Feb. 10, 2026)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
      <category>privateai</category>
      <category>airgap</category>
      <category>attorneyclientprivil</category>
    </item>
    <item>
      <title>A Federal Order Switched Off Anthropic’s Best AI Overnight — and Made the Case for Private AI</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Tue, 15 Sep 2026 18:30:10 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/a-federal-order-switched-off-anthropics-best-ai-overnight-and-made-the-case-for-private-ai-95g</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/a-federal-order-switched-off-anthropics-best-ai-overnight-and-made-the-case-for-private-ai-95g</guid>
      <description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The fuller, verified story is here: &lt;a href="https://nicedreamzwholesale.com/2026/06/15/anthropics-biggest-backer-just-killed-its-best-model-the-real-story-behind-the-fable-5-shutdown/" rel="noopener noreferrer"&gt;Anthropic’s biggest backer just killed its best model&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;90%&lt;/p&gt;

&lt;p&gt;Score on hard benchmarks&lt;/p&gt;

&lt;p&gt;72 hrs&lt;/p&gt;

&lt;p&gt;As the most powerful public AI&lt;/p&gt;

&lt;p&gt;60×&lt;/p&gt;

&lt;p&gt;Longer data retention if you opt in&lt;/p&gt;

&lt;h2&gt;
  
  
  🗓️The timeline
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;June 9, 2026&lt;/strong&gt; — Anthropic launches Fable 5 (and its larger sibling, Mythos 5) as its most capable public models, scoring around 90% on hard benchmarks and getting wired into AWS, Snowflake, and GitHub Copilot almost immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;June 10&lt;/strong&gt; — Pliny the Liberator (@elder_plinius on X) posts a “FABLE-5: LIBERATED” thread claiming to have bypassed the model’s safety classifiers, and publishes its system prompt to GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;June 11–12&lt;/strong&gt; — A separate, quieter controversy catches fire: Fable 5 was silently routing flagged requests to a weaker model without telling users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;June 12, 5:21pm ET&lt;/strong&gt; — Anthropic receives a U.S. government export-control directive ordering it to suspend access to Fable 5 and Mythos 5. That evening, both models go dark worldwide.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏛️What the government actually ordered
&lt;/h2&gt;

&lt;p&gt;The directive came through the Commerce Department’s export-control authority, reportedly from Commerce Secretary Howard Lutnick to Anthropic CEO Dario Amodei, and it cited national-security concerns. Axios framed it as the Trump administration moving to block foreign access to America’s most powerful AI.&lt;/p&gt;

&lt;p&gt;The mechanism is what turned a narrow order into a total blackout. The directive bars access by &lt;em&gt;any foreign national&lt;/em&gt; — inside or outside the United States, including Anthropic’s own non-citizen employees. There is no clean way to guarantee that no foreign national ever touches a hosted model except to switch it off for everyone. So that’s what Anthropic did. In its own words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The net effect of this order is that we must abruptly disable Fable 5 and Mythos 5 for all our customers to ensure compliance. Access to all other Claude models is not affected. We believe this is a misunderstanding and are working to restore access as soon as possible.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🔓The jailbreak: a real event with an inflated headline
&lt;/h2&gt;

&lt;p&gt;The trigger the government pointed to was a “jailbreak” — specifically, a technique that lets the model read through a codebase and identify software flaws quickly. The X timeline and the facts don’t line up as neatly as the screenshots suggest, so it’s worth slowing down here.&lt;/p&gt;

&lt;p&gt;What’s genuinely true: Pliny published Fable 5’s system prompt to GitHub and bypassed its safety classifiers using known methods — Unicode character substitution and prompt fragmentation, where you break a request into pieces the classifier reads as harmless. Major outlets covered it. That part is real red-team work.&lt;/p&gt;

&lt;p&gt;What’s overstated is the “ANTHROPIC: PWNED” framing. As one level-headed write-up put it, “the news is real, but ‘PWNED’ is marketing.” Bypassing a classifier is not the same as owning the model. Fable 5 went through more than a thousand hours of safety testing, no universal jailbreak was demonstrated, and the scariest claimed outputs were never independently verified by a neutral party. Pliny himself called Fable 5 “one of the most disappointing model drops of all time” — but that opinion landed in the same news cycle the model was scoring 90% on benchmarks and shipping into enterprise stacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  🕵️Who is Pliny the Liberator?
&lt;/h2&gt;

&lt;p&gt;If you’re new to this corner of the internet, it’s worth understanding why one anonymous account can move a story this big — because a lot of people on X are convinced he’s the reason the model got pulled.&lt;/p&gt;

&lt;p&gt;Pliny the Liberator (the handle nods to Pliny the Elder) is an anonymous personality who has, in a short time, become the most visible jailbreaker in AI. TIME named him one of the 100 most influential people in AI in 2025. He has more than 100,000 followers on X and runs a Discord community called BASI — short-formed from “BASI PROMPT1NG,” launched back in May 2023 — where north of 20,000 members workshop techniques together. He reportedly came in with no prior coding background, and built the reputation purely on pattern-watching, creativity, and relentless practice.&lt;/p&gt;

&lt;p&gt;His output is prolific and public. He puts out a “liberation bulletin” for practically every new model — GPT, Grok, Gemini, Claude — usually within hours of release. He maintains open repositories that have become reference material for the whole scene: &lt;em&gt;L1B3RT4S&lt;/em&gt; (“jailbreaks for all flagship AI models,” flying the #FREEAI and #LIBERTAS banners), &lt;em&gt;CL4R1T4S&lt;/em&gt; (a collection of leaked or extracted system prompts from the major labs), and projects like G0DM0D3, a fully unguarded chat interface with the methodology open-sourced. He also leads BT6, a roughly 28-operator white-hat collective built around radical transparency and open-source AI security.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎭The strange part: a jailbreaker can be a lab’s best marketing
&lt;/h2&gt;

&lt;p&gt;Here’s the paradox at the heart of this, and it’s one of the most interesting things about the whole episode. You’d assume the labs hate Pliny. The reality is more complicated, and in some ways he’s one of the best things that happens to a model launch.&lt;/p&gt;

&lt;p&gt;When a million people are talking about your model being “liberated” within hours of release, that is, perversely, enormous attention on your model. He has received an unrestricted grant from venture capitalist Marc Andreessen, and has taken short-term contracts with top labs — OpenAI among them — to make their systems more robust. That’s the tell: the same labs whose guardrails he breaks also pay him to break them, because every jailbreak he publishes is a free stress test. There’s an entire essay floating around titled “Please Jailbreak Our AI,” and it isn’t satire — it’s describing the actual incentive. Frontier labs hire people like Pliny to find the holes, then train the next model to resist what they found.&lt;/p&gt;

&lt;p&gt;So is he a security researcher, a folk hero, or a hidden marketing engine for the same companies he taunts? Honestly, he’s all three at once, and that ambiguity is exactly why he commands the attention he does. It also cuts the other way: when your jailbreaker is that visible, and a model gets pulled by the government 48 hours after he posts, of course the internet draws a straight line — even if the real story is messier.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌊And he is far from alone — the scene is moving fast
&lt;/h2&gt;

&lt;p&gt;Pliny is the famous face, but the thing people miss is how organized and fast-moving the broader community has become. This isn’t a lone hacker in a basement; it’s a maturing field with competitions, games, conferences, and labs quietly funding all of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🏆 HackAPrompt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and similar outfits run public jailbreaking competitions, and the prompts contestants submit become training data the labs use to harden their models. The adversaries are, in effect, an unpaid (or prize-paid) red team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧙 Lakera’s “Gandalf”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;— a prompt-injection game where you try to trick an AI into revealing a password — has become a rite of passage that pulls newcomers into red-teaming in the first place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎪 DEFCON’s AI Village&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and a constellation of Discords have turned adversarial testing into a community sport with shared methodology and a real on-ramp for talent.&lt;/p&gt;

&lt;p&gt;The speed is the headline. Models are now reliably “liberated” within hours of launch, not weeks. Each release becomes a public race, and the techniques compound — Unicode tricks, multi-agent decomposition (splitting a forbidden task across several cooperating prompts), narrative framing, system-prompt extraction. What used to be folklore is now documented, versioned on GitHub, and taught. That acceleration is a big part of why a government would look at a three-day-old model and decide the capability was already loose.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛡️Anthropic’s side — and it’s a strong one
&lt;/h2&gt;

&lt;p&gt;Anthropic didn’t just comply quietly; it pushed back. The company says the directive arrived with no specific technical detail, and that when it reviewed the demonstration, the “jailbreak” amounted to “a small number of previously known, minor vulnerabilities.” It described the issue as “narrow” and “non-universal,” and pointed out that the capability in question — “asking the model to read a specific codebase and fix any software flaws” — “is widely available from other models (including OpenAI’s GPT-5.5).”&lt;/p&gt;

&lt;p&gt;Then the line that should give every builder pause:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“If this standard was applied across the industry, we believe it would essentially halt all new model deployments for all frontier model providers.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anthropic added that it disagrees “that the finding of a narrow potential jailbreak should be cause for recalling a commercial model deployed to hundreds of millions of people.” Whatever you think of the company, that’s a serious argument: if a narrow, already-public capability can pull a frontier model off the market by government order three days after launch, that’s a precedent with a very long shadow.&lt;/p&gt;

&lt;h2&gt;
  
  
  📉The scandal underneath the scandal: silent downgrades
&lt;/h2&gt;

&lt;p&gt;This is the part I keep coming back to, because I lived a version of it. Lost in the jailbreak noise was a separate complaint that, to a lot of researchers, mattered more: Fable 5 was &lt;em&gt;silently&lt;/em&gt; handing flagged requests to a weaker model — Opus 4.8 — without telling users. No warning, no fallback message, just quietly worse answers for anyone the system suspected of doing sensitive work, or, in some accounts, of building competing AI systems.&lt;/p&gt;

&lt;p&gt;The AI researcher Nathan Lambert summed up the objection sharply: “An AI model that automatically becomes less intelligent without telling me is categorically misaligned AI.” That’s the real transparency failure — not that a model has guardrails, but that it can swap itself for a dumber version mid-task and let you keep trusting the output. Anthropic apologized for this specific behavior and has since made the downgrades visible and started surfacing refusal reasons in the API.&lt;/p&gt;

&lt;p&gt;I find it striking that the thing I personally noticed on June 11 — getting moved to Opus 4.8 with no real explanation — turned out to be one of the most legitimate grievances in the whole episode. The jailbreak got the headlines and the government order; the quiet downgrade is what actually broke trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  👁️The quieter fear: are they watching, and training on what you tell them?
&lt;/h2&gt;

&lt;p&gt;That suspicion — that the model is silently profiling what you’re up to and demoting you if it doesn’t like the look of it — connects to a bigger anxiety that’s been building all over X: that the labs are watching their users and absorbing their ideas. With Anthropic, this isn’t pure paranoia; there’s a documented basis worth understanding.&lt;/p&gt;

&lt;p&gt;Anthropic spent years positioning itself as the privacy-first lab. That posture has shifted. Consumer conversations are now used to train future models unless you actively opt out, and the opt-in setting stretches data retention from 30 days to five years — a sixtyfold increase in how long your chats sit in the training pipeline. The part that fuels the spying narrative most: a clause in the privacy policy updated June 8, 2026 makes clear the opt-out has a ceiling. Conversations that Anthropic’s systems flag for safety review can still be used to train its models, &lt;em&gt;regardless of your stated preference.&lt;/em&gt; The policy doesn’t define what trips a safety flag, and it doesn’t commit to telling you when one happens.&lt;/p&gt;

&lt;p&gt;Put those two facts next to each other — a model that silently demotes users it suspects of building competitors, and a policy that lets flagged conversations be trained on no matter what you chose — and you can see why a lot of people feel watched. I want to be fair: “your data may train future models if flagged” is not the same as “they are stealing your specific ideas to build products against you,” and I haven’t seen proof of the stronger claim. But the gap between Anthropic’s old privacy-first brand and these new carve-outs is real, it’s documented, and it’s a big reason the trust conversation has gotten so heated this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧵So why did people on X think it was all because of Pliny?
&lt;/h2&gt;

&lt;p&gt;Because the timing is irresistible: the most famous jailbreaker alive posts “FABLE-5: LIBERATED,” and 48 hours later the government pulls the model. A million-strong audience connected those two dots into a straight line — “one tweet got the model banned.”&lt;/p&gt;

&lt;p&gt;I don’t think the honest version is that clean. The documented cause is a federal export-control order citing a codebase-vulnerability capability, and Anthropic says that capability is narrow and already available elsewhere. Pliny’s post is the same genre of jailbreak in the same news cycle, and it’s reasonable to think the public red-team scene — him included — is part of what put this capability on the government’s radar in the first place. But “the jailbreak community drew official attention” and “a single tweet got an AI banned” are different claims, and only the first is really supported. I’d rather hand you the real shape of it than a tidy story that doesn’t hold up.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧭The lesson, from where I sit
&lt;/h2&gt;

&lt;p&gt;Strip away the drama and one fact remains: for about 72 hours, Fable 5 was arguably the most powerful general-purpose AI available to the public. Companies paid for it. People built it into production workflows and agent pipelines. Then, with a single order on a Friday evening, it was gone — refunds on the way for a product that simply vanished.&lt;/p&gt;

&lt;p&gt;Nobody running a local, private AI model lost a thing that night.&lt;/p&gt;

&lt;p&gt;That’s the whole point, and it’s not a coincidence. When your intelligence lives on someone else’s servers, it’s subject to their terms, their classifiers, their uptime — and, as we just watched in the clearest possible way, to government orders that can land overnight and have nothing to do with anything you did. Your model can be switched off, quietly swapped for a weaker one, or quietly learning from your conversations, all decided by people who have never heard of your business. Enterprise reaction to the shutdown has been a fast pivot toward exactly this realization: teams whose entire workflow was tied to one closed API just learned how fragile that is, and they’re scrambling to diversify.&lt;/p&gt;

&lt;p&gt;I’m not anti-cloud. The frontier models are extraordinary and I use them every day. But the Fable 5 shutdown is the strongest argument I’ve seen yet for keeping a private-AI backup plan: capable open-weight models running on hardware you control, where the off switch is in your building and not in someone else’s compliance department, where the model can’t silently demote itself without you knowing, and where your work isn’t quietly feeding someone else’s next product. For firms in compliance-sensitive fields — law, medical, finance — where losing access, getting a degraded answer, or leaking sensitive context is a real liability, that isn’t paranoia. It’s just continuity planning.&lt;/p&gt;

&lt;p&gt;The cloud models may well come back. Anthropic believes this is a misunderstanding, and I hope it’s right. But the lesson holds whether Fable 5 returns next week or not: if losing access to an AI — or unknowingly getting a dumber one, or quietly handing over what you feed it — would hurt your operation, some of that intelligence should live where nobody but you can turn it off.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌The bottom line
&lt;/h2&gt;

&lt;p&gt;Frontier cloud models are extraordinary — and entirely revocable. The Fable 5 blackout proved that access, model quality, and even the privacy of what you type can change without warning, by a decision made far outside your business. Keeping some of your intelligence on hardware you own isn’t about distrust of the cloud; it’s continuity planning.&lt;/p&gt;

&lt;p&gt;🔌The off switch should be in your building.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
      <category>privateai</category>
      <category>ai</category>
      <category>airgap</category>
    </item>
    <item>
      <title>Why I Quantize Open-Weight Models for Macs — And Why Your Law Firm Should Care</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Thu, 10 Sep 2026 18:30:07 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/why-i-quantize-open-weight-models-for-macs-and-why-your-law-firm-should-care-2ngm</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/why-i-quantize-open-weight-models-for-macs-and-why-your-law-firm-should-care-2ngm</guid>
      <description>&lt;h1&gt;
  
  
  Why I Quantize Open-Weight Models for Macs — And Why Your Law Firm Should Care
&lt;/h1&gt;

&lt;p&gt;2,664&lt;/p&gt;

&lt;p&gt;GitHub stars on claude-code-local&lt;/p&gt;

&lt;p&gt;~8 GB&lt;/p&gt;

&lt;p&gt;Size of the new Hermes 4 14B quant&lt;/p&gt;

&lt;p&gt;16 GB&lt;/p&gt;

&lt;p&gt;Mac it runs on&lt;/p&gt;

&lt;p&gt;I publish a few MLX quantizations a month under &lt;a href="https://huggingface.co/divinetribe" rel="noopener noreferrer"&gt;huggingface.co/divinetribe&lt;/a&gt; to close that gap. Two of mine have crossed 1,000 downloads in the last 30 days. The latest, &lt;a href="https://huggingface.co/divinetribe/Hermes-4-14B-abliterated-4bit-mlx" rel="noopener noreferrer"&gt;Hermes-4-14B-abliterated-4bit-mlx&lt;/a&gt;, shipped today.&lt;/p&gt;

&lt;p&gt;The downloads tell me something I already suspected: there is real, sustained demand for capable models that run entirely on Apple Silicon. And I think the most interesting buyers are not who you’d guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  💻The hobbyist case is easy
&lt;/h2&gt;

&lt;p&gt;Mac developers want models that “just work” on their hardware. MLX uses Apple’s unified memory and Metal Performance Shaders. When a model lands in MLX format, inference goes from “this works through a compatibility shim” to “this is what the hardware was built for.” Tokens-per-second jumps. Battery drain falls. The fan stays quiet.&lt;/p&gt;

&lt;p&gt;That’s fine. That’s the easy demand to serve. Hobbyists, indie developers, students with M1 MacBook Airs. The downloads come in steady, and the audience expands a little every quarter.&lt;/p&gt;

&lt;p&gt;Here’s the part nobody talks about.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚖️The interesting case is law firms
&lt;/h2&gt;

&lt;p&gt;If you’re a partner at a law firm handling NDAs, M&amp;amp;A docs, IP filings, sealed depositions — anything privileged — sending that content to OpenAI, Anthropic, or Google for “AI summarization” is, depending on your jurisdiction, somewhere between professionally negligent and outright disqualifying. The terms-of-service for every major cloud LLM provider explicitly retain the right to log your prompts. Many train on them. The opt-outs are partial at best and legally untested at worst.&lt;/p&gt;

&lt;p&gt;So firms either:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pretend AI doesn’t exist (most do, currently)&lt;/li&gt;
&lt;li&gt;Run an on-prem private cloud (six-figure setup, IT-heavy, hardware refresh every 18 months)&lt;/li&gt;
&lt;li&gt;Use one of the “enterprise-grade” SaaS LLM wrappers that promises not to log (the promise is contractual, not technical)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or — and this is the option that almost nobody is talking about — you put a MacBook Pro on the partner’s desk, install a local LLM, point a chat client at &lt;code&gt;localhost:8080&lt;/code&gt;, and the document never leaves the machine. Network-disconnect the laptop entirely during sensitive work, and you have a literal air gap. The prompt and the response live on a single piece of silicon owned by the firm.&lt;/p&gt;

&lt;p&gt;That’s not theoretical. I’ve built that exact stack — it’s &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;AirGap&lt;/a&gt;, what the full private build looks like: &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt; (the on-device Claude Code replacement, currently 2,664 stars on GitHub) running on a firm-owned MacBook, with verified network audits proving nothing leaks. The whole stack is open source. The models that run inside it are exactly the ones I publish on Hugging Face — Gemma 4 31B for everyday work, Llama 3.3 70B for harder reasoning, and now Hermes 4 14B for instruction-following without refusal noise.&lt;/p&gt;

&lt;p&gt;The legal sector is the obvious first market, but the same pitch works for any field where confidentiality has teeth: medical records, due diligence, journalism source protection, internal investigations, M&amp;amp;A under embargo, defense contracting. Anywhere “your prompt cached on someone else’s server” is a deal-breaker, an on-device MLX model is the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍Why open weights specifically
&lt;/h2&gt;

&lt;p&gt;A cloud LLM is a black box. You send a prompt, the answer comes back, you trust that the provider isn’t reading or training on it. The trust is enforced by a terms-of-service document and a privacy policy. If those change, your only recourse is to stop using the service. The content you already sent is, presumably, gone — but you have no way to verify.&lt;/p&gt;

&lt;p&gt;Open weights flip that around. The model file lives on the firm’s hardware. The firm’s IT team can inspect every byte. Network monitoring tools can confirm that no inference traffic leaves the building. The model is auditable in a way no SaaS API will ever be. If the underlying open-weight model gets pulled from Hugging Face tomorrow, the firm’s copy keeps working forever.&lt;/p&gt;

&lt;p&gt;That permanence — the fact that today’s open model is also next decade’s open model, as long as someone keeps a copy — is the part of the pitch that I think clinches it for compliance officers.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪What you can do with this
&lt;/h2&gt;

&lt;p&gt;If you’re a developer with a Mac, grab &lt;a href="https://huggingface.co/divinetribe/Hermes-4-14B-abliterated-4bit-mlx" rel="noopener noreferrer"&gt;Hermes-4-14B-abliterated-4bit-mlx&lt;/a&gt; and try it. It’s ~8 GB, runs on a 16 GB Mac, and the install is &lt;code&gt;pip install mlx-lm&lt;/code&gt; plus three lines of Python. The model card has the recipe.&lt;/p&gt;

&lt;p&gt;If you’re a partner, IT director, or in-house counsel at a firm that handles privileged content, &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;AirGap&lt;/a&gt; is what the full private build looks like — the path from “we’re worried about AI confidentiality” to “we have a verified on-device setup,” network audit included, with the whole stack open source.&lt;/p&gt;

&lt;p&gt;If you’re a researcher or quant who wants the next model on Apple Silicon before anyone else has it, &lt;a href="https://huggingface.co/divinetribe" rel="noopener noreferrer"&gt;follow divinetribe on Hugging Face&lt;/a&gt;. The release cadence is irregular but the targets are deliberate — I publish what I’d actually want to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚫What this is not
&lt;/h2&gt;

&lt;p&gt;I’m not anti-cloud. The frontier models from Anthropic and OpenAI are genuinely better at the hardest reasoning tasks, and for non-confidential work the cloud is the right default. I use Claude every day for my own coding.&lt;/p&gt;

&lt;p&gt;I’m also not promising that local-first is free. There’s a real cost to running serious local inference: hardware, electricity, the time to keep the stack updated. For most workflows the cloud is cheaper.&lt;/p&gt;

&lt;p&gt;But for the cases where confidentiality is non-negotiable — and there are more of those than the AI industry currently admits — local-first is the only honest answer. Open weights, Apple Silicon, MLX. That’s the stack. I’ll keep publishing pieces of it on Hugging Face for as long as the downloads tell me people are using them.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The new model: &lt;a href="https://huggingface.co/divinetribe/Hermes-4-14B-abliterated-4bit-mlx" rel="noopener noreferrer"&gt;Hermes-4-14B-abliterated-4bit-mlx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;All MLX models I maintain: &lt;a href="https://huggingface.co/divinetribe" rel="noopener noreferrer"&gt;huggingface.co/divinetribe&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Showcase + cross-links: &lt;a href="https://nicedreamzwholesale.com/software/huggingface/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software/huggingface/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;On-device Claude Code: &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;github.com/nicedreamzapp/claude-code-local&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The full private build: &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;AirGap&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔐You can’t subpoena Anthropic for a prompt you ran on your own MacBook in 2026.&lt;/p&gt;




&lt;h3&gt;
  
  
  Whose work this stands on
&lt;/h3&gt;

&lt;p&gt;Quantizing a model is the last mile. Almost everything that makes it possible was built by other people and given away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ml-explore/mlx" rel="noopener noreferrer"&gt;&lt;strong&gt;MLX&lt;/strong&gt;&lt;/a&gt; and &lt;strong&gt;mlx-lm&lt;/strong&gt; — Apple’s ml-explore team. The framework that makes Apple Silicon a serious place to run models at all.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.google/technology/developers/gemma-open-models/" rel="noopener noreferrer"&gt;&lt;strong&gt;Gemma&lt;/strong&gt;&lt;/a&gt; (Google DeepMind), &lt;a href="https://llama.meta.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Llama&lt;/strong&gt;&lt;/a&gt; (Meta) and &lt;a href="https://qwenlm.github.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Qwen&lt;/strong&gt;&lt;/a&gt; (Alibaba) — the open weights everything downstream depends on.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://huggingface.co/blog/mlabonne/abliteration" rel="noopener noreferrer"&gt;&lt;strong&gt;Maxime Labonne&lt;/strong&gt;&lt;/a&gt; — wrote up the abliteration technique clearly enough that the rest of us could use it.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://huggingface.co/huihui-ai" rel="noopener noreferrer"&gt;&lt;strong&gt;huihui-ai&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://huggingface.co/Babsie" rel="noopener noreferrer"&gt;&lt;strong&gt;Babsie&lt;/strong&gt;&lt;/a&gt; — the abliterated models I quantize from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hugging Face&lt;/strong&gt; — for hosting all of it, free, at a scale that would bankrupt most of us.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your work is listed here and you would like the wording changed, write to me and I will fix it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
      <category>localaiampopenmodels</category>
      <category>ai</category>
      <category>applesilicon</category>
    </item>
    <item>
      <title>Two AI Agents, One Browser Window: What Actually Breaks, and What Doesn’t</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Tue, 08 Sep 2026 18:30:06 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/two-ai-agents-one-browser-window-what-actually-breaks-and-what-doesnt-42le</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/two-ai-agents-one-browser-window-what-actually-breaks-and-what-doesnt-42le</guid>
      <description>&lt;p&gt;6×&lt;/p&gt;

&lt;p&gt;LinkedIn’s compose box vanished&lt;/p&gt;

&lt;p&gt;5&lt;/p&gt;

&lt;p&gt;CDP commands fired — focus never moved&lt;/p&gt;

&lt;p&gt;30&lt;/p&gt;

&lt;p&gt;Lines to test it on your own setup&lt;/p&gt;

&lt;h2&gt;
  
  
  🚨The symptoms
&lt;/h2&gt;

&lt;p&gt;I was posting a technical write-up to a few places. Three things went wrong, and none of them looked related.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Text arrived twice.&lt;/strong&gt; I’d insert a paragraph into a rich text editor and get the paragraph twice, concatenated. On Reddit this was worse than cosmetic: the doubled insert swallowed my paragraph breaks, and the editor’s autolinker then fused words across the missing breaks. “forward passes.” followed by “so i wrote” became a link to &lt;code&gt;passes.so&lt;/code&gt;. My repo URL got welded to the next word and turned into a dead link. On a launch post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A modal opened, then vanished.&lt;/strong&gt; LinkedIn’s compose box would open, and by the time I went to type into it, it was gone. Six times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then it worked first try.&lt;/strong&gt; I asked my partner to pause the other agent. The very next attempt went through perfectly.&lt;/p&gt;

&lt;h2&gt;
  
  
  🙈The wrong conclusion
&lt;/h2&gt;

&lt;p&gt;I had notes from months earlier saying LinkedIn’s compose UI is hard to automate and is best done by hand. So when it failed six times, I had a ready-made explanation and I took it. I even wrote it down again as confirmation.&lt;/p&gt;

&lt;p&gt;That’s the part worth sitting with. The evidence for “LinkedIn is hard to automate” and the evidence for “something else is driving this browser” are identical from inside one agent. I picked the explanation I already believed.&lt;/p&gt;

&lt;p&gt;The doubled text should have tipped me off much earlier. No amount of website hostility makes your own &lt;code&gt;execCommand&lt;/code&gt; run twice.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔀What’s actually going on
&lt;/h2&gt;

&lt;p&gt;Two separate things get called “agents fighting over the browser,” and conflating them is why people build the wrong fix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧭 Problem one: tab routing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most browser tooling has a notion of “the current page.” Two agents both calling “open a page” and “act on the current page” end up pointed at the same tab. Agent A opens a modal, agent B navigates that tab, and A’s next call lands somewhere unrecognizable. This is what was actually happening to me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🪟 Problem two: focus stealing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trusted input — a real mouse click, a real keystroke — only lands in the tab the operating system has focused. There’s exactly one of those. And for a long stretch, CDP commands on macOS yanked the window forward as a side effect, even read-only ones, which meant an agent working in the background would rip your window out from under you mid-sentence.&lt;/p&gt;

&lt;p&gt;I assumed I had both problems. I had one.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️Fixing routing
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;chrome-devtools-mcp&lt;/code&gt; already ships the fix, and it’s off by default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--experimentalPageIdRouting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It exposes a page ID on page-scoped tools and routes each request by that ID instead of a shared “currently selected” pointer. Each agent addresses its own tab explicitly. Same window, different tabs, no collisions.&lt;/p&gt;

&lt;p&gt;One gotcha worth checking before you restart everything: if you pin the tool version, confirm your pinned version actually has the flag. I was on 1.1.1 while latest was 1.6.0. It happened to be supported there, but a silently-ignored flag would have meant restarting both agents and drawing conclusions from a config that was never live.&lt;/p&gt;

&lt;p&gt;After turning it on, I drove tab 2 while tab 1 was the “selected” one, and it went exactly where I told it to. That was the entire bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔦The focus bug is real, and already fixed
&lt;/h2&gt;

&lt;p&gt;Here’s where I was about to waste a day.&lt;/p&gt;

&lt;p&gt;There is an open ecosystem conversation about focus stealing — &lt;a href="https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/1254" rel="noopener noreferrer"&gt;chrome-devtools-mcp#1254&lt;/a&gt; (“macOS: Chrome steals window focus on every CDP command”), &lt;a href="https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/2290" rel="noopener noreferrer"&gt;#2290&lt;/a&gt; asking for passive inspection, and &lt;a href="https://github.com/vercel-labs/agent-browser/issues/1247" rel="noopener noreferrer"&gt;agent-browser#1247&lt;/a&gt; proposing a background mode. People have written proxies specifically to block the commands that grab the foreground.&lt;/p&gt;

&lt;p&gt;I had already written a focus mutex — a small lock so only one agent could hold the foreground at a time — and I was ready to argue it was necessary.&lt;/p&gt;

&lt;p&gt;Then I read the close on #1254. The maintainer closed it on 2026-05-07: &lt;em&gt;“This issue should be fixed in the latest release. The window focus should remain unchanged.”&lt;/em&gt; My pinned version shipped on 2026-05-27, three weeks after.&lt;/p&gt;

&lt;p&gt;So I measured it. Chrome 150+ added an &lt;code&gt;embedderData&lt;/code&gt; object to &lt;code&gt;Target.getTargets()&lt;/code&gt; for tab-type targets, carrying &lt;code&gt;tabActive&lt;/code&gt; and &lt;code&gt;tabStripIndex&lt;/code&gt;. That lets you &lt;em&gt;read&lt;/em&gt; which tab is in front without activating anything — which is the whole trick, because the old way to find the foreground tab was to force a tab into the foreground and see what happened.&lt;/p&gt;

&lt;p&gt;The test writes itself: read the foreground, hammer a &lt;em&gt;different&lt;/em&gt; tab with ordinary commands, read the foreground again.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;foreground BEFORE: https://www.reddit.com/notifications
driving OTHER tab:  https://www.reddit.com/r/LocalLLaMA/comments/...
ran 5 CDP commands (evaluate, layout, readyState, getDocument, screenshot)
foreground AFTER:  https://www.reddit.com/notifications

RESULT: focus did NOT move.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Including a screenshot, which is the operation people most often blame. Focus didn’t budge.&lt;/p&gt;

&lt;p&gt;My focus mutex was solving a problem that had been fixed three months earlier. The proxy would have been the same mistake with more code.&lt;/p&gt;

&lt;p&gt;A bug in my first version of that test is worth mentioning, because it nearly gave me a false pass: &lt;code&gt;/json/list&lt;/code&gt; returns &lt;strong&gt;page&lt;/strong&gt; targets, while &lt;code&gt;Target.getTargets&lt;/code&gt; with a tab filter returns &lt;strong&gt;tab&lt;/strong&gt; targets. Same tab, different IDs. My “pick a tab that isn’t the foreground” check compared a page ID against a tab ID, never matched, and cheerfully “tested” the foreground tab against itself. Compare by URL, or map the two ID spaces properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔒The fix people reach for that doesn’t work
&lt;/h2&gt;

&lt;p&gt;The obvious idea is one global lock: an agent grabs the browser, does its thing, releases. &lt;a href="https://github.com/openclaw/openclaw/issues/40114" rel="noopener noreferrer"&gt;openclaw#40114&lt;/a&gt; has a good critique — it serializes everything and destroys the concurrency you wanted in the first place.&lt;/p&gt;

&lt;p&gt;If you do need coordination, lock the narrowest thing. Reads, DOM queries, JavaScript-driven form fills and &lt;code&gt;fetch&lt;/code&gt; all work fine in a background tab, simultaneously, forever. The only genuinely singular resource is the foreground, and only if your stack still steals it.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅What I’d tell you to do
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Turn on page-ID routing and give each agent its own tab. This is the fix. Everything else is downstream of it.&lt;/li&gt;
&lt;li&gt;Before building anything for focus stealing, &lt;strong&gt;test whether you have it.&lt;/strong&gt; Read the foreground with &lt;code&gt;embedderData&lt;/code&gt;, drive a different tab, read it again. Thirty lines.&lt;/li&gt;
&lt;li&gt;Keep your tooling current. I nearly built infrastructure for a bug that a version bump would have handled — and in my case, that a version I already had did handle.&lt;/li&gt;
&lt;li&gt;When automation behaves erratically, check whether something else is driving the browser before you blame the website. That hour cost me more than every other mistake combined.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The honest summary is that two agents in one window is a solved problem in 2026, and I spent a morning proving it the hard way.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪Three tests, so you don’t have to take my word for it
&lt;/h2&gt;

&lt;p&gt;After turning the flag on I went back and checked the three things that actually&lt;br&gt;
determine whether this works, rather than assuming the config was enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Do tabs stay isolated?&lt;/strong&gt; I wrote a marker into one tab, wrote a&lt;br&gt;
different marker into another, then went back and read the first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tab A (news.ycombinator.com)  -&amp;gt;  window.__agentMarker = 'AGENT_A'
tab B (github.com)            -&amp;gt;  window.__agentMarker = 'AGENT_B'
re-read tab A                 -&amp;gt;  'AGENT_A'   leaked: false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No crosstalk. Each tab addressed by ID keeps its own state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Does focus move?&lt;/strong&gt; Read which tab is foreground via&lt;br&gt;
&lt;code&gt;embedderData&lt;/code&gt;, fire five ordinary commands at a &lt;em&gt;different&lt;/em&gt; tab&lt;br&gt;
including a screenshot, read the foreground again.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;foreground BEFORE: nicedreamzwholesale.com/...
driving OTHER tab: ineedhemp.com/wp-admin/...
ran 5 CDP commands (evaluate, layout, readyState, getDocument, screenshot)
foreground AFTER:  nicedreamzwholesale.com/...

RESULT: focus did NOT move.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Will a background tab accept a write?&lt;/strong&gt; This is the one that matters&lt;br&gt;
most in practice, because it decides whether an agent can do real work without stealing&lt;br&gt;
your window. I filled a form field in a tab that did not have focus:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;filled: background_fill_test
cleared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It took the value. So a JavaScript-driven fill works fine in the background, and the&lt;br&gt;
only thing genuinely needing the foreground is a &lt;em&gt;trusted&lt;/em&gt; click or keystroke,&lt;br&gt;
which most automation never needs.&lt;/p&gt;

&lt;p&gt;The script is here if you want to run it against your own setup: &lt;a href="https://gist.github.com/nicedreamzapp/d6eb2f8f2ecbdcd18e17ab75666ec29c" rel="noopener noreferrer"&gt;focus_probe.py&lt;/a&gt;. Thirty lines, one dependency, answers the question in about a second. Worth running before you build anything to work around a bug you might not have.&lt;/p&gt;

&lt;h4&gt;
  
  
  What I did not test
&lt;/h4&gt;

&lt;p&gt;All three of those were one agent driving several tabs. I have not run two separate&lt;br&gt;
agent processes hammering the same browser at the same moment. The shared-pointer problem&lt;br&gt;
that caused the original mess is definitely gone, but “two processes at once” is inference&lt;br&gt;
from the design here, not something I sat and watched. Worth saying plainly rather than&lt;br&gt;
letting the piece imply more than it earned.&lt;/p&gt;

&lt;p&gt;And one thing no flag will fix: every agent shares cookies and login state. They are all&lt;br&gt;
the same logged-in you, on every site, with the same session and the same rate limits. In&lt;br&gt;
my case two agents spent one account’s daily posting budget without either of them knowing.&lt;br&gt;
That is not a browser problem, but it will bite you in the same afternoon.&lt;/p&gt;

&lt;p&gt;🪟Same window, different tabs, works today.&lt;/p&gt;




&lt;h3&gt;
  
  
  Whose work this stands on
&lt;/h3&gt;

&lt;p&gt;Almost everything in this piece is other people’s findings. I just hit the problem and went looking.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.browserbase.com/blog/cdp-foreground-tab-tracking" rel="noopener noreferrer"&gt;&lt;strong&gt;Browserbase&lt;/strong&gt;&lt;/a&gt; — documented the Chrome 150+ &lt;code&gt;embedderData&lt;/code&gt; API and named the two focus-stealing workarounds everyone was using. That post is what let me test rather than assume.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/1254" rel="noopener noreferrer"&gt;OrKoN&lt;/a&gt; and the chrome-devtools-mcp maintainers&lt;/strong&gt; — fixed the focus-stealing bug in May and said so clearly in the issue. Reading that close is what stopped me building something unnecessary.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vercel-labs/agent-browser/issues/1247" rel="noopener noreferrer"&gt;&lt;strong&gt;agent-browser&lt;/strong&gt;&lt;/a&gt; — the background-mode proposal, and the write-up of why &lt;code&gt;Target.createTarget&lt;/code&gt; with &lt;code&gt;background: true&lt;/code&gt; is the right primitive.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/openclaw/openclaw/issues/40114" rel="noopener noreferrer"&gt;&lt;strong&gt;openclaw #40114&lt;/strong&gt;&lt;/a&gt; — the critique of a single global browser lock, which is why this ends with “lock the narrowest thing” instead of the obvious wrong answer.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/puppeteer/puppeteer/pull/14922" rel="noopener noreferrer"&gt;&lt;strong&gt;Puppeteer PR #14922&lt;/strong&gt;&lt;/a&gt; — the actual fix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your work is listed here and you’d like the wording changed, write to me and I’ll fix it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
      <category>ambientcomputing</category>
    </item>
    <item>
      <title>504,571 Brain Cells, 4 Labs, One Hypothesis: A Citizen Pass at Parkinson’s</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Thu, 03 Sep 2026 18:30:06 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/504571-brain-cells-4-labs-one-hypothesis-a-citizen-pass-at-parkinsons-405j</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/504571-brain-cells-4-labs-one-hypothesis-a-citizen-pass-at-parkinsons-405j</guid>
      <description>&lt;h1&gt;
  
  
  504,571 Brain Cells, 4 Labs, One Hypothesis: A Citizen Pass at Parkinson’s
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Draft 2026-05-22 — companion video &lt;a href="https://youtu.be/bC4hgeHS9cg" rel="noopener noreferrer"&gt;https://youtu.be/bC4hgeHS9cg&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;4&lt;/p&gt;

&lt;p&gt;Independent cohorts, same direction&lt;/p&gt;

&lt;p&gt;0.215&lt;/p&gt;

&lt;p&gt;Combined odds ratio&lt;/p&gt;

&lt;p&gt;78%&lt;/p&gt;

&lt;p&gt;Reduction in AGTR1+ neurons&lt;/p&gt;

&lt;p&gt;The short version: when you pool 504,571 single-cell measurements of human midbrain tissue from four different research groups, one specific subtype of dopamine neuron — the cells that express the angiotensin II type 1 receptor, AGTR1 — is depleted in every single Parkinson’s dataset compared to controls. Combined odds ratio 0.215. The direction is the same in every one of the four cohorts, which is the part that matters. That is not a marginal effect. That is one of the most depleted druggable cell types I have ever seen reported, and the receptor is already targetable by FDA-approved blood-pressure drugs that have been on the market for thirty years.&lt;/p&gt;

&lt;p&gt;That is the headline. Here is the longer story of how I got there, what I think it means, and — more importantly — what I do not think it means, because the easiest way to embarrass yourself in a field you do not belong to is to overclaim.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡Where the idea actually came from
&lt;/h2&gt;

&lt;p&gt;I did not discover this. Tushar Kamath and his colleagues at the Broad Institute published the original observation in Nature Neuroscience in 2022. They ran single-nucleus RNA sequencing on postmortem human midbrain tissue from Parkinson’s patients and controls, and they noticed that one subtype of dopamine neuron — defined by the markers SOX6 and AGTR1 — was preferentially lost in disease. It was a careful paper, peer-reviewed, well-cited. It did the science. What it did not do, and what no single study can ever do, is rule out the possibility that the effect they saw was an artifact of their particular cohort, their particular dissection protocol, or their particular sequencing chemistry.&lt;/p&gt;

&lt;p&gt;That is what meta-analysis is for. You take the same biological question and you ask it of as many independent datasets as you can find. If the effect is real, it shows up across cohorts. If it is artifact, it washes out.&lt;/p&gt;

&lt;p&gt;I am a hobbyist in this field, but I am not bad at this part of it. I have spent the last year teaching myself single-cell analysis on the side. I knew that since Kamath 2022, three more independent groups had released public single-cell Parkinson’s datasets — Smajić et al. at DZNE in Germany, Wang et al. at Mount Sinai, and Martirosyan et al., an independent cohort released in 2024. None of them, as far as I could find, had run the AGTR1 question across each other’s data. So I did.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪What I actually ran
&lt;/h2&gt;

&lt;p&gt;The pipeline is unsexy. Python, scanpy, statsmodels. Pull each dataset from GEO. Normalize. Run the same cell-typing logic on each one so the labels are consistent across studies. Count the fraction of dopamine neurons in each donor that fall into the AGTR1-positive subtype. Compare patients to controls. Pool the four resulting odds ratios using fixed-effect meta-analysis with effect-size weighting.&lt;/p&gt;

&lt;p&gt;That is it. There is no fancy machine learning, no transformer, no proprietary model. The whole repository is a few thousand lines of straightforward bioinformatics that anyone with a laptop can rerun. I made sure of that on purpose. The code is on GitHub, the data is public, the figures are reproducible end to end with a single shell script.&lt;/p&gt;

&lt;p&gt;The four-cohort breakdown looks like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dataset&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Cells&lt;/th&gt;
&lt;th&gt;Control AGTR1+ fraction&lt;/th&gt;
&lt;th&gt;PD AGTR1+ fraction&lt;/th&gt;
&lt;th&gt;Odds ratio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GSE184950&lt;/td&gt;
&lt;td&gt;Mount Sinai&lt;/td&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;12,778&lt;/td&gt;
&lt;td&gt;3.31%&lt;/td&gt;
&lt;td&gt;1.00%&lt;/td&gt;
&lt;td&gt;0.295&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GSE178265&lt;/td&gt;
&lt;td&gt;Broad Institute&lt;/td&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;366,874&lt;/td&gt;
&lt;td&gt;3.30%&lt;/td&gt;
&lt;td&gt;0.60%&lt;/td&gt;
&lt;td&gt;0.177&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GSE157783&lt;/td&gt;
&lt;td&gt;DZNE Germany&lt;/td&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;41,435&lt;/td&gt;
&lt;td&gt;3.30%&lt;/td&gt;
&lt;td&gt;1.00%&lt;/td&gt;
&lt;td&gt;0.296&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GSE243639&lt;/td&gt;
&lt;td&gt;Independent&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;83,484&lt;/td&gt;
&lt;td&gt;2.96%&lt;/td&gt;
&lt;td&gt;0.89%&lt;/td&gt;
&lt;td&gt;0.295&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The combined odds ratio of 0.215 means roughly a 78 percent reduction in this cell type in Parkinson’s brains across half a million cells from four independent cohorts run by four independent groups using slightly different protocols. That is the kind of consistency you almost never see in a noisy field like single-cell genomics, and it is the kind of consistency that — if I were a real neuroscientist running a real lab — would make me drop my other projects and chase this.&lt;/p&gt;

&lt;p&gt;Every single one points in the same direction. Every single one.&lt;/p&gt;

&lt;h2&gt;
  
  
  💊Why this could actually matter
&lt;/h2&gt;

&lt;p&gt;AGTR1 is the receptor that angiotensin II binds to. It is the same receptor that gets blocked by the entire class of drugs called angiotensin receptor blockers — ARBs. Losartan. Candesartan. Telmisartan. These are some of the most widely prescribed blood-pressure drugs on Earth. They have been FDA-approved for decades. Their safety profile is extremely well characterized. Several of them cross the blood-brain barrier in measurable amounts.&lt;/p&gt;

&lt;p&gt;There is already a small body of epidemiological literature suggesting that long-term ARB users have a lower risk of developing Parkinson’s. There is animal-model work showing that ARBs are neuroprotective in MPTP and 6-OHDA mouse models of Parkinson’s. There is a 2025 iPSC paper showing that pharmacological inhibition of AGTR1 is pro-survival in human dopamine neurons in a dish. None of this is brand new. What I think is new is the cleanly meta-analyzed cross-cohort confirmation that the cells that get lost in Parkinson’s are exactly the cells that express the receptor those drugs hit.&lt;/p&gt;

&lt;p&gt;If a clinical trial were ever run — and I am not in any position to run one — the hypothesis would be: in early-stage Parkinson’s patients, does adding a brain-penetrant ARB to standard care slow the rate of dopaminergic decline? It is the kind of trial that, on paper, costs maybe a few million dollars instead of the half-billion that a brand-new drug would cost, because the drugs already exist and are already off-patent.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚠️What I want to be very careful not to claim
&lt;/h2&gt;

&lt;p&gt;I am going to say this part plainly because I have watched too many people in adjacent fields ruin their credibility by overclaiming. So, what this analysis does not do:&lt;/p&gt;

&lt;p&gt;It does not prove ARBs treat Parkinson’s. A retrospective bioinformatics finding is a hypothesis-generation step. The wet lab is where biology actually gets tested. Until somebody runs a real trial in real patients, this is a target that looks promising on paper, nothing more.&lt;/p&gt;

&lt;p&gt;It does not establish causality. AGTR1-positive neurons being depleted in Parkinson’s brains tells us they are vulnerable. It does not tell us why. It could be that AGTR1 signaling itself drives their death, in which case blocking it should help. It could also be that something else is killing them and AGTR1 is just a marker of a particular cell type that happens to be vulnerable for some other reason entirely, in which case blocking AGTR1 might do nothing. Wet lab work is the only way to distinguish those two possibilities.&lt;/p&gt;

&lt;p&gt;It does not mean I am right and the field has missed something. The field has not missed this. Kamath saw it in 2022. Several groups have followed up. What might be missing — and where I think a citizen-analysis approach actually adds value — is the rigorous cross-cohort confirmation in a single place that anyone can reproduce. That is the thing I can contribute as a hobbyist. The hard biology is somebody else’s job.&lt;/p&gt;

&lt;h2&gt;
  
  
  📖Why I am publishing this
&lt;/h2&gt;

&lt;p&gt;A few reasons.&lt;/p&gt;

&lt;p&gt;Mainly, I think this is what open science should look like. The datasets are public. The code is public. The methods are standard. The result is checkable in an afternoon by anyone who downloads the repository and runs the shell script. If I made a mistake, I want someone to find it and tell me. If I did not make a mistake, I want the people who can move this forward — neuroscientists, immunologists, drug-discovery teams, clinical trialists — to know it is there.&lt;/p&gt;

&lt;p&gt;Also, honestly, because the more I read about Parkinson’s the more I understand that it is not a far-off problem. About a million people in the United States are living with it right now. The diagnosis rate is rising. The treatments are decent for the early symptoms and bad for the long-term ones. The next breakthrough is not going to come from one person. It is going to come from a lot of small, well-aimed contributions stacking up. I would like this to be one of them.&lt;/p&gt;

&lt;p&gt;If you are a neuroscientist, a clinician, an immunologist, a drug-development researcher, or a Parkinson’s advocate and any of this lines up with something you are working on — I would genuinely love to hear from you. The repository has a contact section.&lt;/p&gt;

&lt;p&gt;The repository: &lt;a href="https://github.com/nicedreamzapp/parkinsons-vulnerability-predictor" rel="noopener noreferrer"&gt;https://github.com/nicedreamzapp/parkinsons-vulnerability-predictor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Companion video walking through the full meta-analysis in about a minute: &lt;a href="https://youtu.be/bC4hgeHS9cg" rel="noopener noreferrer"&gt;https://youtu.be/bC4hgeHS9cg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will keep working on this. The next pass is going to look at whether the AGTR1 effect tracks with disease severity within each cohort, and whether the same signal shows up in Lewy Body Dementia, which shares biology with Parkinson’s. If anything interesting comes out, it will go up on the same repository, in the open, with the code attached.&lt;/p&gt;

&lt;p&gt;🙏I am genuinely hopeful that someone with the credentials to do this picks it up.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

&lt;p&gt;— Matt&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Correction, 6 August 2026.&lt;/strong&gt; This piece originally quoted a p-value of&lt;br&gt;
less than 10-100. That number was wrong, and I have removed it rather than&lt;br&gt;
leave it standing.&lt;/p&gt;

&lt;p&gt;The test that produced it counted individual &lt;em&gt;cells&lt;/em&gt; as independent&lt;br&gt;
observations. They are not — cells taken from the same donor are highly correlated, so the&lt;br&gt;
real sample size is the number of donors, which is dozens, not half a million. Counting&lt;br&gt;
cells inflates significance by orders of magnitude and produces an impressive-looking&lt;br&gt;
number that carries no actual information.&lt;/p&gt;

&lt;p&gt;I also removed a claim of “100% accuracy on a 20-gene signature” from the project’s&lt;br&gt;
repository. That figure came from fitting a model and then scoring it on the same rows it&lt;br&gt;
was trained on, with no held-out data. That is in-sample fit, not accuracy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does not change is the finding itself.&lt;/strong&gt; Four independent cohorts,&lt;br&gt;
collected by four different research groups using different protocols, all show AGTR1+&lt;br&gt;
dopamine neurons depleted in Parkinson’s, in the same direction, with a combined odds&lt;br&gt;
ratio of 0.215. The evidence here was always the replication across cohorts, not the&lt;br&gt;
statistics layered on top of it. The proper donor-level test is on the&lt;br&gt;
&lt;a href="https://github.com/nicedreamzapp/parkinsons-vulnerability-predictor" rel="noopener noreferrer"&gt;repository’s&lt;/a&gt;&lt;br&gt;
to-do list, written out in the open.&lt;/p&gt;

&lt;p&gt;My thanks to whoever reads this closely enough to catch the next one.&lt;/p&gt;




&lt;h3&gt;
  
  
  Whose work this stands on
&lt;/h3&gt;

&lt;p&gt;None of this analysis produced a single new measurement. Every cell counted here was collected, sequenced and published by someone else, and released openly so that people like me could ask questions of it. That is worth naming properly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tushar Kamath and colleagues at the Broad Institute&lt;/strong&gt; — the original observation, published in &lt;em&gt;Nature Neuroscience&lt;/em&gt; (2022). Everything here is a test of their finding, not a replacement for it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smajić et al., DZNE (Germany)&lt;/strong&gt; — independent midbrain cohort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wang et al., Mount Sinai&lt;/strong&gt; — independent midbrain cohort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Martirosyan et al.&lt;/strong&gt; — independent cohort released in 2024.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All four datasets came from &lt;a href="https://www.ncbi.nlm.nih.gov/geo/" rel="noopener noreferrer"&gt;NCBI GEO&lt;/a&gt;. The analysis ran on &lt;a href="https://scanpy.readthedocs.io/" rel="noopener noreferrer"&gt;scanpy&lt;/a&gt; and &lt;a href="https://github.com/scverse" rel="noopener noreferrer"&gt;anndata&lt;/a&gt; from the scverse community, plus &lt;a href="https://www.statsmodels.org/" rel="noopener noreferrer"&gt;statsmodels&lt;/a&gt;. Open tools, open data, and four research groups who chose to share.&lt;/p&gt;

&lt;p&gt;If any of the above would like the wording here changed, or think I have characterized their work incorrectly, please write to me and I will fix it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
      <category>ainewsampcommentary</category>
      <category>agtr1</category>
      <category>arbs</category>
    </item>
    <item>
      <title>I Added Day-One Muse Glimmer Support to Apple MLX-LM</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Tue, 01 Sep 2026 18:30:06 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/i-added-day-one-muse-glimmer-support-to-apple-mlx-lm-1023</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/i-added-day-one-muse-glimmer-support-to-apple-mlx-lm-1023</guid>
      <description>&lt;p&gt;5/5&lt;/p&gt;

&lt;p&gt;next words matched the reference&lt;/p&gt;

&lt;p&gt;0.9965&lt;/p&gt;

&lt;p&gt;similarity out of a possible 1.0&lt;/p&gt;

&lt;h2&gt;
  
  
  🔩the handful of things this model does differently
&lt;/h2&gt;

&lt;p&gt;here is the thing nobody tells you about adding a new model to an engine like this. it is not magic and it is not a weekend of guessing. glimmer is close to models the engine already understands, so most of the work is adapting something that already exists and then fixing the handful of things this particular model does differently. glimmer had three of those. it gates its attention through a little sigmoid valve before writing the result out. it normalizes its attention math in an unusual scaleless way. and it splits its layers into local ones that track word position and global ones that deliberately ignore position entirely. get any of those wrong and the model turns into noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔬i wanted proof, not looks fine
&lt;/h2&gt;

&lt;p&gt;the part i care about most is how i checked it. it is easy to write something that produces sentences that look fine and call it done. i did not want looks fine. i wanted proof. so i ran meta’s own official version of the model and mine on the exact same prompts and compared the raw numbers coming out of both. five out of five next words matched, and the overall similarity of the internal numbers came out to 0.9965 out of a possible 1.0. that is not coherent looking. that is matching the reference. the difference from a perfect score is just the rounding you get from running a compressed copy, not a mistake in the math.&lt;/p&gt;

&lt;h2&gt;
  
  
  🪜someone builds the ladder, everybody climbs
&lt;/h2&gt;

&lt;p&gt;then i opened a pull request to mlx-lm, the actual apple project, so anyone on a mac can run muse glimmer the day it came out instead of waiting. that is the whole point of open source. someone hits a wall, someone else builds the ladder, and everybody climbs.&lt;/p&gt;

&lt;p&gt;you can see the pull request here: &lt;a href="https://github.com/ml-explore/mlx-lm/pull/1710" rel="noopener noreferrer"&gt;github.com/ml-explore/mlx-lm/pull/1710&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;this is the kind of work i love.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤗the weights are up if you want them
&lt;/h2&gt;

&lt;p&gt;i quantized muse glimmer 30b for apple silicon and put it on hugging face the day after this. it has been pulled a couple hundred times in its first two days, which for a brand new upload is more than i expected: &lt;a href="https://huggingface.co/divinetribe/Muse-Glimmer-30B-Abliterated-MM-bf16" rel="noopener noreferrer"&gt;huggingface.co/divinetribe/Muse-Glimmer-30B-Abliterated-MM-bf16&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;everything else i quantize for macs lives on one page with live download counts: &lt;a href="https://dev.to/software/huggingface/"&gt;all my open weight models&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;💚a hot new model, a real problem, and a fix that helps everyone who owns a mac and wants to run their own ai without sending a word of it to the cloud.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
      <category>localaiampopenmodels</category>
    </item>
    <item>
      <title>My local AI was pausing 7 seconds before every reply. It turned out to be one cache bug.</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Tue, 18 Aug 2026 18:30:09 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/my-local-ai-was-pausing-7-seconds-before-every-reply-it-turned-out-to-be-one-cache-bug-17fl</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/my-local-ai-was-pausing-7-seconds-before-every-reply-it-turned-out-to-be-one-cache-bug-17fl</guid>
      <description>&lt;p&gt;20×&lt;/p&gt;

&lt;p&gt;Less waiting per turn&lt;/p&gt;

&lt;p&gt;1024&lt;/p&gt;

&lt;p&gt;Gemma’s sliding window, in tokens&lt;/p&gt;

&lt;p&gt;12/12&lt;/p&gt;

&lt;p&gt;Eval tasks passed on a 550-token prompt&lt;/p&gt;

&lt;h2&gt;
  
  
  🧰The setup
&lt;/h2&gt;

&lt;p&gt;I maintain &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, a repo for running coding agents against local models on a Mac. No cloud, no API key. The original approach pointed Claude Code at a local MLX server through a proxy. It works, and it is still in the repo. But Claude Code was designed for cloud models: its system prompt is tens of thousands of tokens, and parts of it change every turn. A local model pays for that twice, once prefilling a huge prompt, and again because a prompt whose head keeps changing defeats KV cache reuse completely.&lt;/p&gt;

&lt;p&gt;So we built the obvious alternative. A small native engine, about 900 lines of Python on mlx-lm. Fixed 550-token system prompt, the same tools (bash, read, write, edit, glob, grep), and a KV cache that gets trimmed to the shared prefix each turn so only the new tokens are ever prefilled.&lt;/p&gt;

&lt;h2&gt;
  
  
  🐛The bug
&lt;/h2&gt;

&lt;p&gt;Benchmarking surfaced something I did not expect. Short conversations were fast, exactly as designed, about a third of a second to the first token. But past a certain conversation length, every turn suddenly cost six and a half to seven seconds, as if the cache did not exist. It was not gradual. It was a cliff.&lt;/p&gt;

&lt;p&gt;The cliff turned out to be Gemma’s sliding window attention. Gemma-family models give five out of every six layers a &lt;code&gt;RotatingKVCache&lt;/code&gt; capped at the window size, 1024 tokens on Gemma 4. The moment your transcript outgrows the window, those rotating caches report themselves as untrimmable, and mlx-lm’s prompt cache reuse silently dies. Every turn re-prefills the entire transcript. The longer your session, the worse it gets, which means the failure lands exactly where caching matters most. There is no error, no warning, nothing. It just gets slow.&lt;/p&gt;

&lt;p&gt;If you are building a Gemma-based agent on mlx-lm, check for this. You probably have it right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧The fix
&lt;/h2&gt;

&lt;p&gt;Give every layer a plain &lt;code&gt;KVCache&lt;/code&gt; instead. That sounds like it should change the model’s output, but it does not: the sliding window attention &lt;em&gt;mask&lt;/em&gt; is what enforces the window. The cache type only decides what gets stored. We verified this the honest way, with greedy decoding, same conversation, stock caches versus plain caches, and the outputs were byte-identical on every turn.&lt;/p&gt;

&lt;p&gt;The numbers, on a Gemma 4 31B (4-bit) with a 4,500-token conversation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;time to first token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;stock rotating cache&lt;/td&gt;
&lt;td&gt;6.5 to 7.2 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;plain KV cache&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.36 s&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is roughly 20 times less waiting per turn, on the same model and the same MacBook. The trade is that KV memory now grows with the transcript instead of capping at the window, so the engine shows a live context meter, and an environment variable restores stock behavior if you would rather have the memory ceiling.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠But did removing the big harness make it dumber?
&lt;/h2&gt;

&lt;p&gt;Fair question. Claude Code’s giant prompt exists for a reason, just not for a 31B model. We built a 12-task eval: create and run scripts, fix a failing test, rename across files, escape-heavy file content, precise edits, CSV work. All machine-checked by actually running the results, at temperature 0.&lt;/p&gt;

&lt;p&gt;Qwen 3 Coder went 12 for 12 with the bare 550-token prompt. Gemma went 11 for 12, and its one failure was instructive: asked to write a file full of quotes and backslashes, it piped the content through shell &lt;code&gt;echo&lt;/code&gt;, and sh’s echo silently collapsed the backslashes. A five-line prompt rule, never write file contents through the shell, always use the write and edit tools, took it to 12 for 12 with no regressions.&lt;/p&gt;

&lt;p&gt;So no. For models this size, less harness turned out to be more capability, as long as the few rules you do include are aimed at failures you actually observed.&lt;/p&gt;

&lt;h2&gt;
  
  
  📦Where it all lives
&lt;/h2&gt;

&lt;p&gt;Everything shipped today in the repo: the engine, the fix, the benchmark script so you can reproduce the numbers on your own machine, and the write-up. Existing Claude Code launchers are untouched, this is a second path and not a replacement. Credit where it is due, the prompt cache trim fix contributed in PR #46 is what made the deeper rotating cache problem visible at all.&lt;/p&gt;

&lt;p&gt;Local AI on a Mac keeps surprising me. The models were already good.&lt;/p&gt;

&lt;p&gt;🚰The gap has been in the plumbing, and the plumbing bugs are small, findable, and fixable.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/category/ai-computing/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. Run AI locally on your own hardware with &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, open source and no cloud required. More at &lt;a href="https://nicedreamzwholesale.com/software/" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/software&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiampcomputing</category>
    </item>
    <item>
      <title>My local AI was pausing 7 seconds before every reply. It turned out to be one cache bug.</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Fri, 07 Aug 2026 19:27:23 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/my-local-ai-was-pausing-7-seconds-before-every-reply-it-turned-out-to-be-one-cache-bug-120o</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/my-local-ai-was-pausing-7-seconds-before-every-reply-it-turned-out-to-be-one-cache-bug-120o</guid>
      <description>&lt;p&gt;This morning I noticed my local coding agent answering way faster than it used to, and I couldn't explain why. I don't like speedups I can't explain, so we benchmarked it instead of guessing. What came out of that is the biggest single improvement my local setup has ever gotten, and a bug report that probably applies to your setup too if you run Gemma-family models on Apple Silicon.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;I maintain &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt;, a repo for running coding agents against local models on a Mac — no cloud, no API key. The original approach pointed Claude Code (the CLI) at a local MLX server through a proxy. It works, and it's still in the repo. But Claude Code was designed for cloud models: its system prompt is tens of thousands of tokens and parts of it change every turn. A local model pays for that twice — once prefilling a huge prompt, and again because a prompt whose head keeps changing defeats KV-cache reuse completely.&lt;/p&gt;

&lt;p&gt;So we built the obvious alternative: a small native engine, about 900 lines of Python on mlx-lm. Fixed ~550-token system prompt, the same tools (bash, read, write, edit, glob, grep), and a KV cache that gets trimmed to the shared prefix each turn so only the new tokens are ever prefilled.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bug
&lt;/h2&gt;

&lt;p&gt;Benchmarking the engine surfaced something I didn't expect. Short conversations were fast, exactly as designed — 0.3 seconds to first token. But past a certain conversation length, every turn suddenly cost 6.5 to 7.2 seconds, as if the cache didn't exist. It wasn't gradual. It was a cliff.&lt;/p&gt;

&lt;p&gt;The cliff turned out to be Gemma's sliding-window attention. Gemma-family models give five out of every six layers a &lt;code&gt;RotatingKVCache&lt;/code&gt; capped at the window size — 1024 tokens on Gemma 4. The moment your transcript outgrows the window, those rotating caches report themselves as untrimmable, and mlx-lm's prompt-cache reuse silently dies. Every turn re-prefills the entire transcript. The longer your session, the worse it gets — which means the failure lands exactly where caching matters most, and there's no error, no warning, nothing. It just gets slow.&lt;/p&gt;

&lt;p&gt;If you're building a Gemma-based agent on mlx-lm, check for this. You probably have it right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix
&lt;/h2&gt;

&lt;p&gt;Give every layer a plain &lt;code&gt;KVCache&lt;/code&gt; instead. That sounds like it should change the model's output, but it doesn't: the sliding-window attention &lt;em&gt;mask&lt;/em&gt; is what enforces the window. The cache type only decides what gets stored. We verified this the honest way — greedy decoding, same conversation, stock caches vs plain caches, and the outputs were byte-identical on every turn.&lt;/p&gt;

&lt;p&gt;The numbers, on a Gemma 4 31B (4-bit) with a 4,500-token conversation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;time to first token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;stock rotating cache&lt;/td&gt;
&lt;td&gt;6.5–7.2 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;plain KV cache&lt;/td&gt;
&lt;td&gt;0.36 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That's roughly 20× less waiting per turn, on the same model and the same MacBook. The trade is that KV memory now grows with the transcript instead of capping at the window, so the engine shows a live context meter, and an env var restores stock behavior if you'd rather have the memory ceiling.&lt;/p&gt;

&lt;h2&gt;
  
  
  But did removing the big harness make it dumber?
&lt;/h2&gt;

&lt;p&gt;Fair question — Claude Code's giant prompt exists for a reason, just not for a 31B model. We built a 12-task eval (create-and-run scripts, fix a failing test, rename across files, escape-heavy file content, precise edits, CSV work — all machine-checked by actually running the results, temperature 0). Qwen 3 Coder went 12 for 12 with the bare 550-token prompt. Gemma went 11 for 12, and its one failure was instructive: asked to write a file full of quotes and backslashes, it piped the content through shell &lt;code&gt;echo&lt;/code&gt;, and &lt;code&gt;sh&lt;/code&gt;'s echo silently collapsed the backslashes. A five-line prompt rule — never write file contents through the shell, always use the write/edit tools — took it to 12 for 12 with no regressions.&lt;/p&gt;

&lt;p&gt;So no. For models this size, less harness turned out to be more capability, as long as the few rules you do include are aimed at failures you actually observed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it all lives
&lt;/h2&gt;

&lt;p&gt;Everything shipped today in the repo — the engine, the fix, the benchmark script (&lt;code&gt;bench/agent_bench.py&lt;/code&gt;) so you can reproduce the numbers on your own machine, and the write-up. Existing Claude Code launchers are untouched; this is a second path, not a replacement. Credit where it's due: the prompt-cache trim fix contributed in PR #46 is what made the deeper rotating-cache problem visible at all.&lt;/p&gt;

&lt;p&gt;Local AI on a Mac keeps surprising me. The models were already good. The gap has been in the plumbing — and the plumbing bugs are small, findable, and fixable.&lt;/p&gt;

&lt;p&gt;matt&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>apple</category>
      <category>llm</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
