<?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>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>
    <item>
      <title>I wrote the missing Apple Silicon runtime for NVIDIA's Nemotron Omni</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Thu, 06 Aug 2026 18:37:23 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/i-wrote-the-missing-apple-silicon-runtime-for-nvidias-nemotron-omni-5a00</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/i-wrote-the-missing-apple-silicon-runtime-for-nvidias-nemotron-omni-5a00</guid>
      <description>&lt;p&gt;NVIDIA's &lt;a href="https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16" rel="noopener noreferrer"&gt;Nemotron-3-Nano-Omni-30B-A3B&lt;/a&gt; is an open-weights model that sees, hears and reasons. There is already a 4-bit MLX quantization of it on Hugging Face, done by &lt;a href="https://huggingface.co/mlx-community/NVIDIA-Nemotron-3-Nano-Omni-30B-A3B-4bit" rel="noopener noreferrer"&gt;yayr&lt;/a&gt;. But as that model card says plainly, only the text backbone loads with standard MLX tooling:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The vision and audio towers require a multimodal runtime that implements the C-RADIO ViT-H and Parakeet Conformer forward passes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nobody had written that runtime. So the model could talk on a Mac, but it could not see or hear.&lt;/p&gt;

&lt;p&gt;I wrote it. It is pure MLX: the vision tower, the audio tower, the processor, and the multimodal token splicing, all ported from NVIDIA's reference implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verified, not asserted
&lt;/h2&gt;

&lt;p&gt;The thing I actually care about here is not that it runs. It is that I can prove it runs &lt;em&gt;correctly&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Every component is tested against NVIDIA's PyTorch reference on the same inputs with the same weights, in fp32 on CPU so the comparison is honest. &lt;code&gt;pytest tests/&lt;/code&gt; — 23 of 23 passing.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Compared against&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Audio tower&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;transformers&lt;/code&gt; ParakeetEncoder + NVIDIA &lt;code&gt;SoundProjection&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;cos &lt;strong&gt;0.99999130&lt;/strong&gt; (min/frame)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio frontend&lt;/td&gt;
&lt;td&gt;log-mel features&lt;/td&gt;
&lt;td&gt;max abs delta &lt;strong&gt;8.1e-6&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vision tower&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;nvidia/C-RADIOv4-H&lt;/code&gt; via &lt;code&gt;trust_remote_code&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;cos &lt;strong&gt;0.99996227&lt;/strong&gt; (min/token)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vision tower, MLX CPU stream&lt;/td&gt;
&lt;td&gt;same&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;1.00000000&lt;/strong&gt; — graph-exact&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A port that is &lt;em&gt;almost&lt;/em&gt; right is worse than no port at all, because you spend weeks chasing quality problems that are really numerical drift in a tower you never checked. Writing the parity harness first was the single best decision in this project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Speed and memory
&lt;/h2&gt;

&lt;p&gt;Measured on an M5 Max MacBook Pro, running the 4-bit quantized language model with both towers in bf16:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Image:  67.7 tok/s · 22.1 GB peak
Audio:  147  tok/s · 21.0 GB peak
Text:   152  tok/s · 17.9 GB peak
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wifi off the whole time. Nothing leaves the machine.&lt;/p&gt;

&lt;p&gt;That 22.1 GB peak on the image path is the number I would pay attention to if you are deciding whether to bother. It suggests this fits on a 32 GB Mac. I cannot verify that, because the M5 Max is the only machine I have. If you run it on something smaller I would genuinely like to hear what happens — that is the most useful thing anyone could send me right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why bother doing this locally
&lt;/h2&gt;

&lt;p&gt;The obvious question is why not just call an API. A few reasons that matter to me.&lt;/p&gt;

&lt;p&gt;The model is open weights. Someone should be able to run open weights on their own hardware, and if the only path requires a vendor's cloud, the openness is partly decorative.&lt;/p&gt;

&lt;p&gt;Apple Silicon is genuinely fast enough now. 67 tokens a second while reading an image, on a laptop, is not a compromise.&lt;/p&gt;

&lt;p&gt;And there are workloads where the data cannot leave the building at all. I do work that touches NDA and compliance-sensitive material, and "it runs offline" is not a nice-to-have there, it is the requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;MIT licensed: &lt;strong&gt;&lt;a href="https://github.com/nicedreamzapp/nemotron-omni-mlx" rel="noopener noreferrer"&gt;https://github.com/nicedreamzapp/nemotron-omni-mlx&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Credit to NVIDIA for publishing the weights, and to yayr for the 4-bit conversion.&lt;/p&gt;

</description>
      <category>mlx</category>
      <category>apple</category>
      <category>machinelearning</category>
      <category>opensource</category>
    </item>
    <item>
      <title>NVIDIA Shipped a Model That Sees and Hears — It Just Didn’t Run on a Mac. So I Wrote the Missing Piece.</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Tue, 28 Jul 2026 18:30:07 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/nvidia-shipped-a-model-that-sees-and-hears-it-just-didnt-run-on-a-mac-so-i-wrote-the-missing-50pe</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/nvidia-shipped-a-model-that-sees-and-hears-it-just-didnt-run-on-a-mac-so-i-wrote-the-missing-50pe</guid>
      <description>&lt;p&gt;&lt;strong&gt;NVIDIA shipped a 30-billion-parameter model that can see, hear, and talk — and gave the weights away. The catch: the seeing and hearing parts didn’t run on a Mac. So I spent an afternoon writing the missing piece.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is the whole thing in thirty-five seconds — the model reading a real cart off my own store, on the laptop, with nothing leaving it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nicedreamzwholesale.com/wp-content/uploads/2026/07/nemotron_demo.mp4" rel="noopener noreferrer"&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%2Fjjlbmxoxjrhpgbo4bldm.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thirty-five seconds: the model reads a real cart off my own store, on the laptop, with nothing leaving it. The elapsed counter is the real measured latency.&lt;/p&gt;

&lt;p&gt;Every couple of weeks I go looking for whatever new open-weight model just dropped, pull it onto my laptop, and see what it can actually do. Most of the time it’s a coding model, I run it against the one I already use, and my current favorite wins again. That’s a fine result. It’s just not much of a story.&lt;/p&gt;

&lt;p&gt;This time I found something different.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Nemotron Omni actually is
&lt;/h2&gt;

&lt;p&gt;NVIDIA released &lt;strong&gt;Nemotron-3-Nano-Omni-30B-A3B&lt;/strong&gt; — a “tri-modal” model, which is a fancy way of saying one brain with eyes and ears attached. You can hand it a picture, a sound file, or a video, and talk to it about what it saw or heard. It’s 30 billion parameters total, but only about 3 billion of them fire for any given word, which is why something this capable can run on a laptop at all. The weights are public.&lt;/p&gt;

&lt;p&gt;Someone had already done the hard, unglamorous work of shrinking it down to a 4-bit MLX version that fits on Apple Silicon — that’s &lt;a href="https://huggingface.co/mlx-community/NVIDIA-Nemotron-3-Nano-Omni-30B-A3B-4bit" rel="noopener noreferrer"&gt;yayr&lt;/a&gt; over at mlx-community, and this project doesn’t exist without that upload. About 19 GB on disk. Ready to go.&lt;/p&gt;

&lt;p&gt;Except for one line, buried in the model card:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The text backbone loads with standard MLX &lt;code&gt;nemotron_h&lt;/code&gt; tooling. The vision and audio towers require a multimodal runtime that implements the C-RADIO ViT-H and Parakeet Conformer forward passes (e.g. the Evorix on-device engine).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Translated: the brain works on a Mac. &lt;strong&gt;The eyes and ears don’t.&lt;/strong&gt; The weights for them are right there in the file — all the knowledge, sitting on your disk — but nothing I could find in the open Apple Silicon world knew how to &lt;em&gt;run&lt;/em&gt; them. NVIDIA’s own code for those parts is written for their GPUs. On a Mac it’s a locked room with the key visible through the window.&lt;/p&gt;

&lt;p&gt;I want to be precise about that parenthetical, because it matters: the card does name an engine, Evorix. I went looking for it — not on Hugging Face, not on GitHub, not anywhere I could find. So as far as I can tell it exists, but not somewhere you or I can go get it. Which leaves the same practical dead end: you download nineteen gigabytes of a model that sees and hears, and on a Mac you can only talk to it.&lt;/p&gt;

&lt;p&gt;That’s the gap — no &lt;em&gt;open&lt;/em&gt; runtime for the eyes and ears. Honestly, that’s the most interesting kind of thing to find. Not a benchmark to run. A thing that doesn’t work yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I keep having to relearn
&lt;/h2&gt;

&lt;p&gt;My instinct was that this would take days. Three separate pieces, each one a real port: NVIDIA’s vision tower is a ViT with a custom patch generator, their audio side is a Conformer with Transformer-XL relative attention, and then there’s the glue that turns a photo into something the language model can read.&lt;/p&gt;

&lt;p&gt;It took about half an hour.&lt;/p&gt;

&lt;p&gt;Not because I’m fast — because I stopped doing it one piece at a time. I put a separate agent on each tower and let them run at the same time, each one checking its own work against NVIDIA’s original code as it went. I keep making the same mistake of estimating this stuff like it’s still 2024, and I keep getting corrected by my own laptop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proving it, instead of vibing it
&lt;/h2&gt;

&lt;p&gt;Here’s the thing about porting a model: it’s very easy to write code that &lt;em&gt;looks&lt;/em&gt; right, produces numbers, and is quietly wrong. The model doesn’t crash. It just gets a little dumber, and you never find out.&lt;/p&gt;

&lt;p&gt;So neither tower got to claim victory on vibes. For each one, the test was: run NVIDIA’s original PyTorch code and my MLX version &lt;strong&gt;on the same input, with the same weights&lt;/strong&gt;, and compare the actual numbers coming out.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tower&lt;/th&gt;
&lt;th&gt;What was compared&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Ears&lt;/strong&gt; (audio)&lt;/td&gt;
&lt;td&gt;Final audio embeddings, 5-second clip&lt;/td&gt;
&lt;td&gt;cosine &lt;strong&gt;0.99999&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Eyes&lt;/strong&gt; (vision)&lt;/td&gt;
&lt;td&gt;Final image embeddings, 448px image&lt;/td&gt;
&lt;td&gt;cosine &lt;strong&gt;0.99996&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Eyes&lt;/strong&gt;, on CPU math&lt;/td&gt;
&lt;td&gt;Same, without GPU shortcuts&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;1.00000000&lt;/strong&gt; — exact&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last row is the one I care about. Run it on the CPU, where the math is done precisely, and my port and NVIDIA’s are &lt;strong&gt;not close — they’re identical.&lt;/strong&gt; The tiny gap on the GPU isn’t a bug in the port; it’s Metal taking shortcuts with float math for speed. Chasing that would be chasing the hardware.&lt;/p&gt;

&lt;p&gt;The input processing got the same treatment — every image tile, every audio frame, every token id checked against NVIDIA’s reference. 14 tests, token sequences matching exactly, pixels off by less than a millionth.&lt;/p&gt;

&lt;p&gt;The brain, meanwhile, needed no porting at all — MLX already understood it. Someone had put &lt;code&gt;nemotron_h&lt;/code&gt; into mlx-lm before I ever showed up.&lt;/p&gt;

&lt;h2&gt;
  
  
  So does it actually work
&lt;/h2&gt;

&lt;p&gt;This is the only part that matters, so here’s the first thing I pointed it at once the pieces were connected. Not a test image — a screenshot off my own phone, of my own store, with a cart full of my own products.&lt;/p&gt;

&lt;p&gt;I asked: &lt;em&gt;“What website is this and what is in the cart?”&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This is the Divine Tribe website. The cart contains a Gen 2 DC Ceramic Rebuildable Dry Herb Heater, a Replacement Heater Cup, a Wireless Dock Station, 72% Hemp 28% Silk Men’s Boxers, and a Quest Lightning Diffuser Kit.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every product, correct. When I asked for prices it read all five to the cent — $37.36, $13.12, $80.80, $33.32, $38.67 — and started adding them up. Nine seconds, on a laptop, with nothing leaving it.&lt;/p&gt;

&lt;p&gt;Then the ears. I generated a line of speech and handed it the wav:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Divine Tribe vaporizer ships from Humboldt County, California, and this model is running entirely on a MacBook with no Internet connection.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Word for word, punctuation and all — it even got “Humboldt” right.&lt;/p&gt;

&lt;p&gt;The speeds, for anyone keeping score:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Memory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Text only&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;152 tok/s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;17.9 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;With an image&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;67.7 tok/s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;22.1 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;With audio&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;147 tok/s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;21.0 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The whole thing lives in about 22 GB at its hungriest. That fits on a Mac you can buy today.&lt;/p&gt;

&lt;p&gt;And to be clear about what that means: nothing about that cart screenshot or that audio clip left my desk. The model makes no network calls at all — there’s no API key, no meter running, no terms of service, and no company on the other end deciding whether I’m allowed to keep doing this tomorrow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two things that fell out along the way
&lt;/h2&gt;

&lt;p&gt;Neither of these was the goal, and both are probably more useful than anything else here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NVIDIA’s reference code produces NaN on batched audio.&lt;/strong&gt; If you feed it two clips of different lengths at once, the shorter one comes back as garbage — not an error, just silent NaN poisoning that spreads through the layers. It’s a masking detail: fully-padded rows go to negative infinity, softmax turns that into NaN, and the NaN travels. My port masks differently and stays finite. I want to be careful here — this is one specific path, and I could be wrong about how much it matters in NVIDIA’s own pipeline. But it reproduces on their code, not just mine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The vision tower doesn’t normalize its own input.&lt;/strong&gt; There’s a normalization layer sitting right there in the checkpoint, and it’s dead weight — NVIDIA switches it off and expects whatever calls it to do that job. Feed it raw pixels like a reasonable person would and you get plausible-looking garbage, silently. This one cost real time and it’s the trap anyone else attempting this will hit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And a third, for the truly nerdy:&lt;/strong&gt; several settings in the config file are lies. Not maliciously — they’re just vestigial, left over from an earlier design, and the live code ignores them completely. If you build from the config instead of tracing what actually runs, you’ll produce something that looks correct and isn’t. I only caught it by following the real code path line by line.&lt;/p&gt;

&lt;h2&gt;
  
  
  So who does this actually help?
&lt;/h2&gt;

&lt;p&gt;Fair question, and I want to answer it honestly instead of waving at the future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The narrow answer: it saves the next person about a week.&lt;/strong&gt; Right now, anyone with a Mac who downloads this model reads that line on the model card — &lt;em&gt;“requires a multimodal runtime that implements the C-RADIO ViT-H and Parakeet Conformer forward passes”&lt;/em&gt; — and that’s the end of the road. It’s not a warning, it’s a wall. It means &lt;em&gt;go build it yourself&lt;/em&gt;, and most people, reasonably, close the tab. Now they don’t have to. Clone it, run it, done. And the three traps I hit are written down, because the normalization one in particular would cost someone a full day of wondering why their model got quietly dumber instead of visibly broken. That’s the entire contribution: one person spent the afternoon so nobody else has to spend the week.&lt;/p&gt;

&lt;p&gt;I’m not going to pretend that’s a huge number of people. Might be a few hundred. Might be twelve. That’s fine — twelve people not wasting a week each is still worth an afternoon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The wider answer is the one I actually care about.&lt;/strong&gt; I do private-AI work for firms that handle other people’s confidential material — lawyers, medical practices, accountants. The whole pitch is that the machine doing the reading is the machine on your desk, because a federal court &lt;a href="https://nicedreamzwholesale.com/2026/05/22/the-heppner-ruling-warner-v-gilbarco-and-what-confidential-ai-actually-has-to-mean/" rel="noopener noreferrer"&gt;already ruled&lt;/a&gt; that work you hand to a public AI isn’t privileged.&lt;/p&gt;

&lt;p&gt;Until now, “on your desk” meant text only. If a client sends a photograph of a contract, or a recorded call, or a scan — the private option had nothing to say. You either sent it to somebody’s cloud and lost the privilege, or you did it by hand.&lt;/p&gt;

&lt;p&gt;That changed today, on my laptop. A model that can &lt;em&gt;look at&lt;/em&gt; the scanned page and &lt;em&gt;listen to&lt;/em&gt; the recording, on the machine sitting in front of them, is not a small difference for those people. It’s the difference between a tool they can use and a tool they legally can’t.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And the honest third reason:&lt;/strong&gt; the gap between “the weights are public” and “you can actually use this” is where most open AI quietly dies. Everyone celebrates the release. Far fewer people do the boring work of making the thing run somewhere real. That gap is usually not a research problem — it’s a few hundred lines nobody got around to writing. This one was maybe 90 KB of Python and an afternoon.&lt;/p&gt;

&lt;p&gt;That’s the part I’d like more people to see. Not that I did something clever — I didn’t, I transcribed NVIDIA’s own math into a different framework and checked my work. But the wall between an open model and a working model is &lt;em&gt;thinner than it looks&lt;/em&gt;, and it stays up mostly because everyone assumes someone else will knock it down.&lt;/p&gt;

&lt;p&gt;The code is &lt;a href="https://github.com/nicedreamzapp/nemotron-omni-mlx" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;, MIT, with every parity test in it. Don’t take my word for any number above — clone it and run the tests on your own Mac.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credit where it’s due
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16" rel="noopener noreferrer"&gt;NVIDIA&lt;/a&gt;&lt;/strong&gt; built the model and released the weights and reference code openly. None of this happens otherwise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://huggingface.co/mlx-community/NVIDIA-Nemotron-3-Nano-Omni-30B-A3B-4bit" rel="noopener noreferrer"&gt;yayr&lt;/a&gt;&lt;/strong&gt; at mlx-community did the 4-bit MLX quantization I built on top of. Go give that upload a like — it deserves more than the zero it has.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ml-explore/mlx" rel="noopener noreferrer"&gt;Apple’s MLX team&lt;/a&gt;&lt;/strong&gt; — and whoever added &lt;code&gt;nemotron_h&lt;/code&gt; to mlx-lm, which is why the brain needed nothing from me at all.&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>
    </item>
    <item>
      <title>The Day Local AI Caught the Cloud: ds4, DeepSeek V4 Flash, and What Just Changed for Devs</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Thu, 23 Jul 2026 18:30:07 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/the-day-local-ai-caught-the-cloud-ds4-deepseek-v4-flash-and-what-just-changed-for-devs-4kjo</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/the-day-local-ai-caught-the-cloud-ds4-deepseek-v4-flash-and-what-just-changed-for-devs-4kjo</guid>
      <description>&lt;p&gt;If you write code for a living and you’ve been watching the local-AI space, May 9, 2026 is the date to circle. Salvatore Sanfilippo (yes, the guy who wrote Redis) shipped &lt;a href="https://github.com/antirez/ds4" rel="noopener noreferrer"&gt;&lt;code&gt;ds4&lt;/code&gt;&lt;/a&gt; — a few thousand lines of hand-written C with Metal compute kernels, built for exactly one model: &lt;strong&gt;DeepSeek V4 Flash&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I ran the same prompt through three engines on the same 128 GB MacBook Pro:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek V4 Flash&lt;/strong&gt; via &lt;code&gt;ds4&lt;/code&gt; — fully local, off-cloud&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Claude&lt;/strong&gt; through my Max plan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 31B&lt;/strong&gt; via MLX, also local&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local DeepSeek beat cloud Claude on wall-clock time. That sentence used to be science fiction.&lt;/p&gt;

&lt;p&gt;▶ &lt;strong&gt;&lt;a href="https://youtu.be/7l8-s8xkpms" rel="noopener noreferrer"&gt;Watch the companion video&lt;/a&gt;&lt;/strong&gt; — three engines, one prompt, three completely different aurora animations rendered in real time on the same machine.&lt;/p&gt;




&lt;h2&gt;
  
  
  The benchmark, for people who don’t want filler
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Engine&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Where it ran&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Flash (&lt;code&gt;ds4&lt;/code&gt; local)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;103 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3,259 tokens&lt;/td&gt;
&lt;td&gt;Apple Silicon GPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud Claude (Max plan)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;192 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~3,500 tokens&lt;/td&gt;
&lt;td&gt;Anthropic data center&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 31B (MLX local)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;131 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1,992 tokens&lt;/td&gt;
&lt;td&gt;Apple Silicon GPU&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The prompt was a single creative HTML task: &lt;em&gt;“Build an animated northern lights scene — single file, vanilla JS, mountains, pine trees, twinkling stars, flowing aurora bands.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Each engine produced a completely different aurora. None of them hit the network during inference. (Yes, I checked with &lt;code&gt;lsof&lt;/code&gt;. Yes, this is the same &lt;code&gt;lsof&lt;/code&gt; audit pattern from &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;the AirGap NDA piece&lt;/a&gt;.)&lt;/p&gt;




&lt;h2&gt;
  
  
  Three architectural decisions in &lt;code&gt;ds4&lt;/code&gt; worth understanding
&lt;/h2&gt;

&lt;p&gt;This is the part that matters if you’re a developer thinking about local AI infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Asymmetric 2-bit quantization (only where quality is forgiving)
&lt;/h3&gt;

&lt;p&gt;The naive approach to quantization treats every weight the same. &lt;code&gt;ds4&lt;/code&gt; doesn’t. &lt;strong&gt;Only the routed Mixture-of-Experts experts get compressed to 2-bit&lt;/strong&gt; (specifically &lt;code&gt;IQ2_XXS&lt;/code&gt; for &lt;code&gt;up&lt;/code&gt;/&lt;code&gt;gate&lt;/code&gt;, &lt;code&gt;Q2_K&lt;/code&gt; for &lt;code&gt;down&lt;/code&gt;). Every quality-critical path — shared experts, attention projections, routing, output head — stays at higher precision (Q8 or full).&lt;/p&gt;

&lt;p&gt;Those routed experts are about 90% of the weight footprint. The other 10% is where small precision losses cause big accuracy losses. Quantize the 90%, leave the 10%, and you get an 81 GB file that still calls tools cleanly and writes coherent code.&lt;/p&gt;

&lt;p&gt;This is the kind of tradeoff that only makes sense if you’ve stared at a specific model’s loss landscape long enough to know which weights tolerate compression. It’s a model-specific engineering decision dressed as a quantization recipe.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. KV cache moved to disk (in 2026 SSDs are fast enough)
&lt;/h3&gt;

&lt;p&gt;The “KV cache must live in RAM” assumption is from 2023. Modern Apple SSDs do 5+ GB/s sequential reads. &lt;code&gt;ds4&lt;/code&gt; writes session state to disk and &lt;strong&gt;reuses it across runs&lt;/strong&gt;, keyed by SHA1 of token IDs.&lt;/p&gt;

&lt;p&gt;The practical effect: when Claude Code sends its 25k-token system prompt, that prefill happens exactly once, ever. Every subsequent session — including totally different agent runs that happen to share that prefix — reads from disk in milliseconds instead of recomputing from token zero.&lt;/p&gt;

&lt;p&gt;If you’ve used long-context models locally, you know prefill is the slowest thing in the loop. &lt;code&gt;ds4&lt;/code&gt; makes it free after the first hit. That’s the kind of “small change, huge implication” move that took years to normalize. (See also: &lt;a href="https://github.com/antirez/ds4#disk-kv-cache" rel="noopener noreferrer"&gt;the disk-KV section in the ds4 README&lt;/a&gt;.)&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Pure Metal, not CUDA-with-a-shim
&lt;/h3&gt;

&lt;p&gt;There’s no PyTorch, no TensorFlow, no &lt;code&gt;llama.cpp&lt;/code&gt; wrapper layer in the hot path. The compute kernels under &lt;code&gt;metal/*.metal&lt;/code&gt; are &lt;strong&gt;written specifically for this one model on this one architecture&lt;/strong&gt;. The acknowledgments thank &lt;code&gt;llama.cpp&lt;/code&gt; and GGML — &lt;code&gt;ds4&lt;/code&gt; borrows quant layouts and select kernels — but it’s not a fork.&lt;/p&gt;

&lt;p&gt;This narrowness is the point. Generic frameworks pay a tax for being generic. When you commit to one model on one chip, you can hand-tune away that tax. ~27 tok/s on an M3 Max 128 GB. ~32 tok/s on M5 Max. For agent loops on a laptop, that’s plenty.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters for compliance-sensitive devs
&lt;/h2&gt;

&lt;p&gt;The same week, I’m still maintaining &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;AirGap AI&lt;/a&gt; — a wi-fi-off, &lt;code&gt;lsof&lt;/code&gt;-audited workflow for analyzing privileged documents (NDAs, client files, PHI, etc.) on a laptop with no outbound connections. Until last week, that was a Llama 3.3 70B story. The capability ceiling was real.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ds4&lt;/code&gt; raises that ceiling materially:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1M-token context&lt;/strong&gt; — entire codebases, full deposition transcripts, complete contract sets, all in-memory in a single conversation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quasi-frontier reasoning&lt;/strong&gt; — if you’ve used Claude Sonnet or Opus, DeepSeek V4 Flash sits in the same neighborhood for most agentic tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool calling that works&lt;/strong&gt; — Antirez tested it under coding agents (opencode, Pi, Claude Code) and the tool calls land reliably&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For law firms, medical practices, and compliance-bound shops, the math just changed. You don’t have to choose between “frontier-grade reasoning” and “data never leaves the building.” The hardware exists, the engine exists, the model exists, and the integration with Claude Code exists.&lt;/p&gt;

&lt;p&gt;(If you’re trying to get a bar-association-defensible AI workflow off the ground, &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;the AirGap landing page&lt;/a&gt; is where I keep my notes. The ds4 stack is going in there next week.)&lt;/p&gt;




&lt;h2&gt;
  
  
  How to actually run it
&lt;/h2&gt;

&lt;p&gt;The full stack, all open-source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Build the engine (Apple Silicon with Metal)&lt;/span&gt;
git clone https://github.com/antirez/ds4
&lt;span class="nb"&gt;cd &lt;/span&gt;ds4 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; make

&lt;span class="c"&gt;# 2. Pull the q2 weights (~81 GB)&lt;/span&gt;
./download_model.sh q2

&lt;span class="c"&gt;# 3. Boot the local Anthropic-compatible server&lt;/span&gt;
./ds4-server &lt;span class="nt"&gt;--ctx&lt;/span&gt; 200000 &lt;span class="nt"&gt;--kv-disk-dir&lt;/span&gt; ~/Library/Caches/ds4-kv &lt;span class="se"&gt;\&lt;/span&gt;
             &lt;span class="nt"&gt;--kv-disk-space-mb&lt;/span&gt; 16384

&lt;span class="c"&gt;# 4. Point Claude Code at it&lt;/span&gt;
&lt;span class="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://127.0.0.1:8000 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dsv4-local &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;ANTHROPIC_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;deepseek-v4-flash &lt;span class="se"&gt;\&lt;/span&gt;
claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or just clone &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;&lt;code&gt;nicedreamzapp/claude-code-local&lt;/code&gt;&lt;/a&gt; — DeepSeek V4 Flash is now the fourth fighter in the lineup, with a &lt;code&gt;claude-ds4&lt;/code&gt; wrapper that handles all of the above for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  What this slots into
&lt;/h2&gt;

&lt;p&gt;This isn’t a one-off. It’s the next click in a longer arc I’ve been writing about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marijuanaunion.com/three-generations-of-running-claude-code-locally-on-a-macbook-what-i-actually-learned/" rel="noopener noreferrer"&gt;Three Generations of Running Claude Code Locally on a MacBook — What I Actually Learned&lt;/a&gt; — the long path from “barely works” to “actually replaces my cloud usage”&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marijuanaunion.com/cloud-ai-coding-costs-keep-climbing-how-to-pay-0-and-still-use-claude-code/" rel="noopener noreferrer"&gt;Cloud AI Coding Costs Keep Climbing — How to Pay $0 and Still Use Claude Code&lt;/a&gt; — the economic angle, before &lt;code&gt;ds4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nicedreamzwholesale.com/2026/04/26/claude-subscription-value-10x/" rel="noopener noreferrer"&gt;Pulling 10x My Subscription Value Out of Claude&lt;/a&gt; — what the cloud math actually looks like&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marijuanaunion.com/what-its-actually-like-to-code-by-voice-with-the-ai-replying-in-my-own-cloned-voice/" rel="noopener noreferrer"&gt;What It’s Actually Like to Code By Voice — With the AI Replying In My Own Cloned Voice&lt;/a&gt; — the voice loop these models now plug into&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marijuanaunion.com/your-medical-practice-is-probably-using-cloud-ai-on-phi-right-now-heres-the-hipaa-problem-nobody-is-talking-about/" rel="noopener noreferrer"&gt;Your Medical Practice Is Probably Using Cloud AI on PHI Right Now&lt;/a&gt; — why on-device matters for healthcare&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marijuanaunion.com/if-your-law-firm-is-using-cloud-ai-on-client-files-you-probably-have-a-problem/" rel="noopener noreferrer"&gt;If Your Law Firm Is Using Cloud AI on Client Files, You Probably Have a Problem&lt;/a&gt; — the legal angle&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marijuanaunion.com/a-field-guide-to-ambient-computing-the-words-for-the-thing-thats-coming/" rel="noopener noreferrer"&gt;A Field Guide to Ambient Computing&lt;/a&gt; — the bigger frame this all sits inside&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;ds4&lt;/code&gt; is the engine that finally makes the local-first version of all of those usable for production work. The local agent doesn’t have to pick which workload it’s good at anymore.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where to follow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🛠️ &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;github.com/nicedreamzapp/claude-code-local&lt;/a&gt; — the lineup, launchers, and benchmarks&lt;/li&gt;
&lt;li&gt;🐳 &lt;a href="https://github.com/antirez/ds4" rel="noopener noreferrer"&gt;github.com/antirez/ds4&lt;/a&gt; — the engine itself&lt;/li&gt;
&lt;li&gt;🌿 &lt;a href="https://marijuanaunion.com" rel="noopener noreferrer"&gt;marijuanaunion.com&lt;/a&gt; — the broader writing on local AI, voice, and ambient computing&lt;/li&gt;
&lt;li&gt;🔒 &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;nicedreamzwholesale.com/airgap&lt;/a&gt; — the compliance-grade workflow notes&lt;/li&gt;
&lt;li&gt;💬 &lt;a href="https://discord.gg/g7rgabGD9E" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; — NiceDreamzApps server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;May 9, 2026. The day a single C file caught up to the data centers.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is the technical companion to &lt;a href="https://marijuanaunion.com/i-just-watched-one-hacker-catch-up-to-a-trillion-dollar-data-center/" rel="noopener noreferrer"&gt;the headline piece on Marijuana Union&lt;/a&gt;. Companion video: &lt;a href="https://youtu.be/7l8-s8xkpms" rel="noopener noreferrer"&gt;youtu.be/7l8-s8xkpms&lt;/a&gt;. For local-AI consulting on compliance-sensitive workloads, see &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;AirGap AI&lt;/a&gt;.&lt;/em&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>ai</category>
      <category>antirez</category>
      <category>applesilicon</category>
    </item>
    <item>
      <title>The IRS Said Yes — and What That Does and Doesn’t Mean</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Thu, 16 Jul 2026 06:10:44 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/the-irs-said-yes-and-what-that-does-and-doesnt-mean-2lnj</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/the-irs-said-yes-and-what-that-does-and-doesnt-mean-2lnj</guid>
      <description>&lt;p&gt;Back on June 3rd I published a piece here saying the Cannabis Device Safety Institute had filed its federal application, and I made a point of leaning on that word — &lt;em&gt;application&lt;/em&gt;. Filed, not granted. Pending, not approved. Not a tax-exempt charity, contributions not deductible, and we’d say so plainly every time, because saying it any other way would be exactly the kind of thing this institute exists to push against.&lt;/p&gt;

&lt;p&gt;So I owe you the update in the same register.&lt;/p&gt;

&lt;p&gt;The IRS granted it. The determination letter is dated June 29, 2026. CDSI is exempt from federal income tax under Section 501(c)(3), classified as a public charity under Section 509(a)(2) — not a private foundation — with the exemption effective April 27, 2026, retroactive to the day the articles were filed. Contributions are deductible under Section 170.&lt;/p&gt;

&lt;p&gt;That’s the whole announcement. Now let me do the part I think matters more, which is being precise about what it does and doesn’t mean.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it doesn’t mean
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It is not an endorsement.&lt;/strong&gt; Recognition of exemption is a determination about tax status. The IRS did not review our methodology, did not evaluate our off-gas protocol, and has no opinion whatsoever about whether ceramic donut atomizers off-gas at 650°F. No agency has blessed CDSI’s findings, because CDSI hasn’t published findings yet. If you ever see me imply otherwise, call me on it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn’t make CDSI a regulator.&lt;/strong&gt; We’re a private nonprofit. We have no authority over anyone, we can’t compel any manufacturer to do anything, and we’re not seeking a government designation. The model is UL, ASTM, the NFPA Research Foundation — bodies that earned standing by being useful and rigorous, not by being appointed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn’t mean we have a lab — yet.&lt;/strong&gt; Right now CDSI pays accredited independent labs and publishes what comes back. Pay the lab, not pay to pass. But the goal was never to outsource forever: the plan is for this institute to build and run its own testing bench, because the body that writes the methodology should eventually be able to execute it too — and the determination letter is exactly what makes that fundable. Foundation grants and tax-deductible donations can now go toward standing up a lab of our own. If and when that lab exists, nothing about the discipline changes — open methodology, public reports, every conflict on the cover page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn’t finish the paperwork.&lt;/strong&gt; California still treats CDSI as a taxable corporation until a separate state filing goes through. That one’s in an envelope, not a press release.&lt;/p&gt;

&lt;h2&gt;
  
  
  About the timeline, honestly
&lt;/h2&gt;

&lt;p&gt;We filed the full Form 1023 on June 3. The determination is dated June 29 — 26 days later.&lt;/p&gt;

&lt;p&gt;The IRS publishes exactly one number about how long this takes: &lt;em&gt;“We issue 80% of Form 1023 application determinations within 191 days.”&lt;/em&gt; That’s from their own “Where’s my application” page. So: 26 days, against a published benchmark of 191, on the long form rather than the 1023-EZ shortcut, with no request for expedited handling.&lt;/p&gt;

&lt;p&gt;I want to be careful with that number, because it would be very easy to turn it into something it isn’t.&lt;/p&gt;

&lt;p&gt;I can’t tell you it’s a record. Nobody can tell you that, about any organization. The IRS’s public files record determination dates by month only — no day — and carry no application-submitted date at all. The interval literally cannot be computed from public data, including the IRS’s own. So anyone claiming a record in this category is claiming something no dataset could check, and I’d rather not be that guy.&lt;/p&gt;

&lt;p&gt;I also can’t tell you the speed proves the application was good. That’s the flattering read, and I don’t think it survives scrutiny. The IRS has fast-track lanes for straightforward cases, and how big those lanes are isn’t published. The six days between answering their follow-up letter and getting the determination is, as far as I can tell, just the IRS’s own internal rule about how fast a specialist has to close a case once you respond. And the biggest variable — when the application got assigned to a human at all — was completely outside my control and I can’t explain why it happened when it did.&lt;/p&gt;

&lt;p&gt;What I can say is what we actually did, and let you decide if any of it mattered:&lt;/p&gt;

&lt;p&gt;We paid $600 for the long form instead of $275 for the EZ, on purpose, because the EZ doesn’t have room to explain why a fee-for-service testing subsidiary serves a public mission — and filings like ours get bounced back to the long form anyway, months later. The slow-looking choice was the fast one.&lt;/p&gt;

&lt;p&gt;We disclosed the conflicts instead of burying them. The founder of a cannabis hardware standards body builds cannabis hardware. That’s on the record, in the conflict of interest policy, in the state charity filing, and it’ll be on the cover page of every report we publish.&lt;/p&gt;

&lt;p&gt;We went through this site and cut every claim we couldn’t prove — before we filed, not after. No “first,” no “leading,” no partnerships that hadn’t happened. Reviewers read your website. There was nothing to pick at because we’d already picked at it ourselves.&lt;/p&gt;

&lt;p&gt;And when the IRS wrote asking for more information, we answered within hours of opening the envelope instead of sitting on the 28 days we had.&lt;/p&gt;

&lt;p&gt;None of that is clever. It’s just doing the boring things in the right order.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually changes
&lt;/h2&gt;

&lt;p&gt;Donations to CDSI are now tax-deductible. That’s real — it means a foundation can fund hardware testing, and an individual who cares about this can help and take the deduction.&lt;/p&gt;

&lt;p&gt;CDSI is registered with the federal government and eligible for federal grants — that happened back on June 23, with the SAM.gov registration going active.&lt;/p&gt;

&lt;p&gt;Put those together and here’s the thing I care about: &lt;strong&gt;the money to characterize this hardware can now exist.&lt;/strong&gt; For fourteen years the reason nobody tested the device was that no one would pay for it. In 2016 I paid a lab out of pocket to run an off-gas test on a concentrate vaporizer because there was no funding source in the world for that work. That’s still the founding artifact of this institute, and it’s still the reason it exists.&lt;/p&gt;

&lt;p&gt;Now there’s a vehicle that can receive that money. That’s what a determination letter is. Not a trophy — plumbing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this goes
&lt;/h2&gt;

&lt;p&gt;The next thing I want to make the case for is bigger than safety, and I’ll write it properly soon.&lt;/p&gt;

&lt;p&gt;It’s this: you cannot honestly answer whether inhaled cannabis helps someone until you know what the device contributed to the dose. Heat a vaporizer and it puts its own chemistry into the same stream carrying the cannabis. So every measured outcome — a contaminant, a symptom, a relief — has two possible sources: the material and the machine. That’s not noise you can fix with more study subjects. It’s an attribution problem, and no sample size touches it.&lt;/p&gt;

&lt;p&gt;Every other measurement science solved this a century ago. The chemist runs a blank before running samples. Nobody doses a patient through an uncharacterized nebulizer. Cannabis research does the equivalent constantly, not out of carelessness, but because no one was ever responsible for the device.&lt;/p&gt;

&lt;p&gt;Which means hardware characterization isn’t adjacent to the medical question. It’s upstream of it. First you characterize the device. Then you have a device you can trust as an instrument. Then — and only then — you can ask what the medicine does to a person and believe the answer.&lt;/p&gt;

&lt;p&gt;It all starts with the devices. Not because the devices matter most. The person matters most. But the device is the part you have to understand first in order to understand any of the rest of it honestly.&lt;/p&gt;

&lt;p&gt;That’s the work. The letter just means we can afford to do it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The Cannabis Device Safety Institute is a California nonprofit public benefit corporation, recognized by the IRS as exempt under IRC § 501(c)(3) and classified as a public charity under § 509(a)(2) (determination letter dated June 29, 2026; EIN 42-2429365). Recognition of exemption is a determination of federal tax status and is not an endorsement of the Institute or its findings by the IRS or any government agency. cdsi.click&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://marijuanaunion.com" rel="noopener noreferrer"&gt;Marijuana Union&lt;/a&gt;. The Cannabis Device Safety Institute is an independent 501(c)(3) nonprofit standards body for cannabis consumption hardware — open methodology, public reports, every conflict of interest on the cover page. Methodology, papers, and the public record: &lt;a href="https://cdsi.click" rel="noopener noreferrer"&gt;cdsi.click&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>blog</category>
    </item>
    <item>
      <title>M5 Max + 128GB = a 30B AI Coding Agent Running Locally. Wi-Fi Off.</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Mon, 29 Jun 2026 17:18:47 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/m5-max-128gb-a-30b-ai-coding-agent-running-locally-wi-fi-off-4ggh</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/m5-max-128gb-a-30b-ai-coding-agent-running-locally-wi-fi-off-4ggh</guid>
      <description>&lt;p&gt;&lt;a href="https://nicedreamzwholesale.com/wp-content/uploads/2026/04/qwen_speed_promo_FINAL.mp4" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The M5 Max MacBook Pro with 128 GB of unified memory is the first laptop that can hold a frontier-class coding agent entirely in RAM. No GPU rack. No cloud. No subscription.&lt;/p&gt;

&lt;p&gt;That clip up top isn’t a render. That’s Qwen 3 Coder — 30 billion parameters, 8-bit MLX — running on this MacBook with the Wi-Fi off. Around 55 tokens per second. Total cost to keep running it: zero.&lt;/p&gt;

&lt;p&gt;The thing that matters more than the spec sheet is &lt;strong&gt;what it actually unlocks.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the M5 Max changes the math
&lt;/h2&gt;

&lt;p&gt;Until now, running a 30B+ parameter model meant a GPU rack — or paying a cloud API per token. The M5 Max changes that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;128 GB unified memory.&lt;/strong&gt; The entire model lives in fast RAM. No GPU offload, no quantization tricks past 8-bit. The CPU and “GPU” share the same memory, so there’s no copy step between them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixture-of-experts plays perfectly with Apple Silicon.&lt;/strong&gt; Qwen 3 Coder is 30B total but only 3B active per token. That’s a math problem the M5 Max’s memory bandwidth eats for breakfast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MLX runs at near-CUDA speed.&lt;/strong&gt; Apple’s native ML framework hits ~55 tok/s on the 8-bit quant. No CUDA tax, no Nvidia driver politics, no $40,000 GPU bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It’s a regular store-bought laptop.&lt;/strong&gt; No GPU rack. No data center. No cloud bill. You can run it on a plane.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This wasn’t possible on a laptop a year ago. It is now.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can do with it now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Read a legal contract — and have it never leave your machine.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Most AI tools pipe your document to a server somewhere. With this setup, the bytes don’t leave the laptop. NDAs, supplier agreements, employment contracts — review them at your kitchen table without uploading them to anyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write production code in a couple of seconds.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The video shows it: real Python function, real Qwen output, no edits. The agent’s tool-calling is good enough to drop into Claude Code’s loop, where it’ll edit files, run shell commands, and iterate. It’s plenty for everything from one-off scripts to refactoring real production code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analyze patient charts without a HIPAA violation.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For doctors, therapists, intake clinics — anything with PHI on it — local-only AI isn’t a nice-to-have, it’s the only legal option. Same model, same speed, zero bytes leaving the device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build agents that don’t charge you per call.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This is the one most people sleep on. Pay-per-token cloud APIs make agents expensive to leave running. Once the model is local, you can let an agent loop overnight, hit it with thousands of requests, kick off a watcher that scans your inbox every two minutes — and the cost stays at zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full stack
&lt;/h2&gt;

&lt;p&gt;Here’s the receipt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hardware:&lt;/strong&gt; M5 Max MacBook Pro, 128 GB unified memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; &lt;a href="https://huggingface.co/lmstudio-community/Qwen3-Coder-30B-A3B-Instruct-MLX-8bit" rel="noopener noreferrer"&gt;Qwen3-Coder-30B-A3B-Instruct-MLX-8bit&lt;/a&gt; — about 30 GB on disk. Mixture-of-experts, ~3B params active per token.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server:&lt;/strong&gt; A small Python proxy at localhost:4000 that speaks the Anthropic Messages API, so the &lt;a href="https://claude.com/claude-code" rel="noopener noreferrer"&gt;Claude Code CLI&lt;/a&gt; thinks it’s talking to the cloud — except it’s talking to a hard drive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total monthly cost:&lt;/strong&gt; $0 once it’s downloaded.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s it. No Docker, no Kubernetes, no VPS. Just a laptop on a desk.&lt;/p&gt;

&lt;h2&gt;
  
  
  The performance, honestly
&lt;/h2&gt;

&lt;p&gt;The local-AI space is full of overclaims, so the straight numbers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;55 tokens per second&lt;/strong&gt; on a real coding task. Sustained, not peak.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two seconds&lt;/strong&gt; to write a working find_median() function. Three to four seconds for most refactors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool-calling reliability&lt;/strong&gt; is good enough for the Claude Code agentic loop. Not as locked-in as Sonnet 4.6, but plenty for getting work done.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What it’s not:&lt;/strong&gt; a Sonnet replacement for nuanced reasoning, long contexts, or really tricky debugging. For day-to-day code agent work, it more than holds its own.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the offline part matters
&lt;/h2&gt;

&lt;p&gt;The reason “Wi-Fi off” keeps coming back in the demo isn’t a gimmick. It’s the whole thesis.&lt;/p&gt;

&lt;p&gt;If a tool needs the internet, three things are true:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Someone else can read what you sent.&lt;/li&gt;
&lt;li&gt;Someone else can charge you for it.&lt;/li&gt;
&lt;li&gt;Someone else can take it away.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the same tool runs locally, none of those are true. That’s a different category of software. Not better at every task — but yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks — actually run, not cited
&lt;/h2&gt;

&lt;p&gt;Big claims need numbers. So here’s what Qwen 3 Coder 30B-A3B (8-bit MLX) actually scores on this MacBook, run end-to-end against the local localhost:4000 server. Every problem solved by the model, executed in a Python subprocess, scored pass/fail. Pass@1, temperature=0, single sample per problem.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;N&lt;/th&gt;
&lt;th&gt;Pass@1&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;HumanEval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;164/164 (full)&lt;/td&gt;
&lt;td&gt;81.7%&lt;/td&gt;
&lt;td&gt;Python function-completion classic. Saturated benchmark; modern coding models cluster 75–95%. 14 min total wall-clock.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;MBPP&lt;/strong&gt; (sanitized)&lt;/td&gt;
&lt;td&gt;168/427 (sampled)&lt;/td&gt;
&lt;td&gt;83.3%&lt;/td&gt;
&lt;td&gt;Mostly Basic Python Problems. Pass rate was stable since n=120; a few outlier tasks induce very long model responses, so I cut off at 168.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both runs used pass@1, temperature=0, 10s execution timeout, on the local 8-bit MLX quantization. No retries. No best-of-N tricks. Single sample per problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  For context — what the bigger sibling scores on harder benchmarks
&lt;/h3&gt;

&lt;p&gt;The Qwen team didn’t publish HumanEval/MBPP for any Qwen3-Coder variant — they consider those benchmarks saturated. Their &lt;a href="https://qwenlm.github.io/blog/qwen3-coder/" rel="noopener noreferrer"&gt;official benchmarks&lt;/a&gt; are agentic, and they ran them on the flagship Qwen3-Coder-480B-A35B-Instruct (the bigger sibling, ~16× the active params of the 30B-A3B running on this laptop). For context — here’s what the flagship 480B scores on those harder agentic benchmarks compared to the major closed models:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agentic Benchmark&lt;/th&gt;
&lt;th&gt;Qwen3-Coder 480B&lt;/th&gt;
&lt;th&gt;Claude Sonnet 4&lt;/th&gt;
&lt;th&gt;GPT-4.1&lt;/th&gt;
&lt;th&gt;DeepSeek-V3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;SWE-bench Verified&lt;/strong&gt; (500-turn)&lt;/td&gt;
&lt;td&gt;69.6&lt;/td&gt;
&lt;td&gt;70.4&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Terminal-Bench&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;37.5&lt;/td&gt;
&lt;td&gt;35.5&lt;/td&gt;
&lt;td&gt;25.3&lt;/td&gt;
&lt;td&gt;2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;BFCL-v3&lt;/strong&gt; (function calling)&lt;/td&gt;
&lt;td&gt;68.7&lt;/td&gt;
&lt;td&gt;73.3&lt;/td&gt;
&lt;td&gt;62.9&lt;/td&gt;
&lt;td&gt;64.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aider-Polyglot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;61.8&lt;/td&gt;
&lt;td&gt;56.4&lt;/td&gt;
&lt;td&gt;52.4&lt;/td&gt;
&lt;td&gt;56.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WebArena&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;49.9&lt;/td&gt;
&lt;td&gt;51.1&lt;/td&gt;
&lt;td&gt;44.3&lt;/td&gt;
&lt;td&gt;40.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: &lt;a href="https://qwenlm.github.io/blog/qwen3-coder/" rel="noopener noreferrer"&gt;Qwen team’s official blog&lt;/a&gt;. The 30B-A3B running on this MacBook is a smaller sibling of the 480B — it trades absolute peak agentic ceiling for fitting in 30 GB and running 24/7 on local hardware. For most coding tasks people actually do in a day, HumanEval/MBPP-class accuracy matters more than the SWE-bench top-line, and on those it sits where it should: useful, fast, local.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this is heading
&lt;/h2&gt;

&lt;p&gt;The next year of the AI conversation isn’t going to be “which model is smartest.” It’s going to be “which workloads belong on your machine, and which belong on someone else’s.”&lt;/p&gt;

&lt;p&gt;Compliance-bound work — legal, medical, financial — is going to move local fast. Code-agent loops will follow because the math (per-call cost vs. zero) is brutal. The M5 Max with 128 GB of unified memory is the laptop that lets that happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;The launchers are open source on GitHub: &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;nicedreamzapp/claude-code-local&lt;/a&gt;. The README walks through downloading the model and pointing Claude Code at the local server.&lt;/p&gt;

&lt;p&gt;For law firms, medical practices, and accountants that want help getting this running on their own hardware — that’s what &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;AirGap&lt;/a&gt; is. 14-day pilot, fixed scope, the data never leaves your machines.&lt;/p&gt;

&lt;p&gt;— matt&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>4 AI Models Built the Same Game on One Laptop — and a Local One Beat the Cloud</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Tue, 23 Jun 2026 05:34:34 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/4-ai-models-built-the-same-game-on-one-laptop-and-a-local-one-beat-the-cloud-2efo</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/4-ai-models-built-the-same-game-on-one-laptop-and-a-local-one-beat-the-cloud-2efo</guid>
      <description>&lt;p&gt;&lt;strong&gt;Four AI models. One job: build a playable game. One laptop.&lt;/strong&gt; I gave four different AI models the exact same prompt — build a complete, playable Asteroids game in a single HTML file — and then I actually played what each one built. Three ran entirely on my laptop. One was the cloud, as the benchmark to beat. Here is the whole thing in under a minute.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/y-W0tcVr5OU"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I have been doing a lot of these little head-to-heads lately, and I wanted one where the test was real — not a riddle or a trick question, but an actual build. Give every model the same spec, let it write the whole thing in one shot, then open the file and see if the game actually plays. No cherry-picking, no fixing it up afterward. Either it runs or it doesn't.&lt;/p&gt;

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

&lt;p&gt;Everything ran on a MacBook Pro M5 Max with 128 GB of memory. Three of the four models ran 100% local — no internet, nothing leaving the machine — through MLX and llama.cpp. The fourth was Cloud Claude Opus, sitting in a data center, there to set the bar.&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;Where&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DeepSeek V4 Flash 284B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Local&lt;/td&gt;
&lt;td&gt;300s&lt;/td&gt;
&lt;td&gt;31 tok/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud Claude Opus&lt;/td&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;48s&lt;/td&gt;
&lt;td&gt;115 tok/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen3-Coder 30B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Local&lt;/td&gt;
&lt;td&gt;33s&lt;/td&gt;
&lt;td&gt;95 tok/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemma 4 31B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Local&lt;/td&gt;
&lt;td&gt;145s&lt;/td&gt;
&lt;td&gt;26 tok/s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The prompt was identical for all of them: a single self-contained HTML file, vanilla JavaScript, no libraries — a ship that rotates and thrusts, bullets, asteroids that split when you shoot them, screen wrap-around, score, lives, and a game-over screen. One shot.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened
&lt;/h2&gt;

&lt;p&gt;All four wrote a real, working game. That part genuinely surprised me — a few years ago, "write me a complete arcade game in one file" was not something you handed to a model running on a laptop and expected to play afterward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DeepSeek&lt;/strong&gt; built the most polished one. A glowing ship with a thrust trail, a starfield background, asteroids that actually broke apart, hearts for lives. It took the longest, but it played beautifully. &lt;strong&gt;Cloud Claude&lt;/strong&gt; was fast and clean — lives, a level counter, even on-screen control hints. &lt;strong&gt;Qwen3-Coder 30B&lt;/strong&gt; was the speed demon, turning out a solid game in 33 seconds. And &lt;strong&gt;Gemma&lt;/strong&gt; delivered a tidy, working game of its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  The verdict
&lt;/h2&gt;

&lt;p&gt;The winner, to my eye, was DeepSeek — and the part that sticks with me is that it was running &lt;em&gt;locally&lt;/em&gt;, on my desk, and it built a better game than the cloud model. Cloud Claude was excellent and much faster, but on the actual finished product, the local 284B model edged it out.&lt;/p&gt;

&lt;p&gt;The bigger point is the one I keep landing on in everything I write here. Three of these four ran completely offline, for free, on one machine. No subscription, no metered tokens, nothing leaving the laptop. The cloud is still faster, and for a lot of work that speed matters. But "you have to use the cloud or it won't be any good" is just not true anymore. Local AI is catching up, and on this particular test it pulled ahead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run local models yourself (free)
&lt;/h2&gt;

&lt;p&gt;If you want to try this, the abliterated MLX models I have converted for Apple Silicon are all free to pull:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/divinetribe" rel="noopener noreferrer"&gt;My Hugging Face — abliterated MLX models for Apple Silicon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;claude-code-local&lt;/a&gt; — run Claude Code against a local model, no API key.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;The narration in the video is local text-to-speech, and the whole comparison was made on one MacBook. The only thing that touched the cloud was the Cloud Claude baseline.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://nicedreamzwholesale.com/2026/06/23/4-ai-models-built-the-same-game-on-one-laptop-and-a-local-one-beat-the-cloud/" rel="noopener noreferrer"&gt;Nice Dreamz Wholesale&lt;/a&gt;. I convert abliterated MLX models for Apple Silicon — all free at &lt;a href="https://huggingface.co/divinetribe" rel="noopener noreferrer"&gt;my Hugging Face&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>localai</category>
      <category>llm</category>
      <category>deepseek</category>
      <category>applesilicon</category>
    </item>
    <item>
      <title>Eight local AI agents on a Mac mini — and the product I'm building from them</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Tue, 26 May 2026 19:04:03 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/eight-local-ai-agents-on-a-mac-mini-and-the-product-im-building-from-them-1i50</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/eight-local-ai-agents-on-a-mac-mini-and-the-product-im-building-from-them-1i50</guid>
      <description>&lt;p&gt;A case study went around recently: a lawyer had wired up 66 AI agents on a Mac mini for his own firm — every one running locally, nothing touching a cloud API — and was looking for a commercial partner before releasing it as open source.&lt;/p&gt;

&lt;p&gt;I read that and realized I had been building the same shape of thing for my own small business for the last year. Eight ambient agents, all running on Apple Silicon, none of them touching cloud APIs. I had not productized any of them. I had also not gotten paid for any of them.&lt;/p&gt;

&lt;p&gt;This post is about what I'm doing about that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The asset base
&lt;/h2&gt;

&lt;p&gt;I shipped a repo called claude-code-local. It's an MLX server that wraps three local language models (Gemma 4 31B, Llama 3.3 70B, Qwen 3.5 122B MoE) behind an OpenAI-compatible API. The setup script picks the right model for your hardware, downloads it, and puts a launcher on your Desktop. Three commands and you're running a 31-billion-parameter language model on your MacBook.&lt;/p&gt;

&lt;p&gt;It has 2,689 stars and 516 forks as of this writing. License is MIT. The whole thing is at github.com/nicedreamzapp/claude-code-local.&lt;/p&gt;

&lt;p&gt;That's the engine. What I had not built was the funnel.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gap that ate me for a month
&lt;/h2&gt;

&lt;p&gt;Stars are people who think "I would love this." Forks are people who started doing the work. Neither converts to revenue.&lt;/p&gt;

&lt;p&gt;Reading that case study, what jumped out was: a lawyer with the technical chops to wire 66 agents could not productize the result. He has the buyer relationships (he is the buyer); I have the go-to-market background (I've sold consumer hardware direct to customers for years). The intersection nobody is shipping is "Mac mini with this stack pre-installed, delivered to your law firm."&lt;/p&gt;

&lt;p&gt;So I sat down and mapped what was actually missing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The market gap, in numbers
&lt;/h2&gt;

&lt;p&gt;I researched the on-device AI market for May 2026. Here is what I found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free OSS (Ollama, LM Studio, Jan, Atomic Bot, my own repo): saturated, no money flowing&lt;/li&gt;
&lt;li&gt;Paid Mac App Store apps (Private LLM, Enclave AI, Local LLM): $10-30 one-time, real revenue for bootstrapped 2-person teams&lt;/li&gt;
&lt;li&gt;Cloud SaaS with zero-data-retention (Spellbook, CoCounsel): $69-$149/mo per seat, cloud-not-local&lt;/li&gt;
&lt;li&gt;Enterprise legal AI (Harvey): $1,200+/seat/month&lt;/li&gt;
&lt;li&gt;AI-native law firms (Manifest, Avantia, General Legal): not selling tools, they ARE the firm&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two things stand out:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The gap between "free OSS" and "$1,200/seat SaaS" is not being filled by subscription products. Private LLM's App Store reviews explicitly call out "no subscription" as the reason buyers picked them. The privacy buyer rejects recurring billing for privacy software. This is not opinion; it is in their reviews.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Mac mini hardware bundle for privileged work is being built privately but not productized. Nobody is shipping it as a SKU.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the gap. That is what I am putting a product against.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ladder
&lt;/h2&gt;

&lt;p&gt;I'm skipping the standard SaaS playbook because the market is telling me to. The privacy buyer rejects recurring billing — so the spine is one-time purchases, not subscriptions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rung&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Audience&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free repo&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Existing OSS audience, top of funnel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AirGap Box&lt;/td&gt;
&lt;td&gt;$2,995 (Base) / $3,995 (Pro)&lt;/td&gt;
&lt;td&gt;Small firms wanting sovereignty without DIY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundation consulting&lt;/td&gt;
&lt;td&gt;scoped&lt;/td&gt;
&lt;td&gt;Firms ready for deeper, white-glove deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The free repo gets you curious. The Box converts the firms who would rather pay $3k than learn MLX. Foundation is for the firms that want it installed, tuned, and documented for their compliance counsel.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three core agents
&lt;/h2&gt;

&lt;p&gt;Three agents that drop on top of any OpenAI-compatible local LLM server (the free claude-code-local repo by default, but they work with Ollama and others too) — and ship pre-installed on the Box:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Folder Watcher — drop a PDF, text, or Markdown file into ~/AirGap-Inbox/. Within 30 seconds, a structured Markdown summary appears in _summaries/. Uses macOS's textutil and mdimport for PDFs and docx without external dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Daily Briefing — every morning at 7:00 a LaunchAgent reads the folders you list in a config file and writes a one-page digest of what changed in the last 24 hours.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Local Q&amp;amp;A — a CLI command &lt;code&gt;airgap ask "your question"&lt;/code&gt; that answers from a single document you point it at, fully offline. Folder-wide indexing and citations across many files is on the roadmap — not something I'd oversell today.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The whole set is ~300 lines of Python. The installer is a &lt;code&gt;.command&lt;/code&gt; file you double-click. Total install time: under 60 seconds on the right hardware.&lt;/p&gt;

&lt;p&gt;I deliberately built them with zero authentication required. No IMAP credentials, no OAuth dance, no API keys — the install works for everyone on day one. The agents that need credentials (email drafting, Reddit lurking, calendar parsing) run on my own machines and ship in the AirGap Box, where there's a setup call to wire them up properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the AirGap Box
&lt;/h2&gt;

&lt;p&gt;The same stack on a Mac mini that arrives at your office. Pre-installed: claude-code-local MLX server, the three core agents, two more that need credentials (email drafter, prompt library), a default-blocked firewall, and a printed compliance memo template.&lt;/p&gt;

&lt;p&gt;Base ($2,995): Mac mini M4 16GB, Gemma 4 31B preloaded.&lt;br&gt;
Pro ($3,995): Mac mini M4 Pro 24GB, Llama 3.3 70B preloaded.&lt;/p&gt;

&lt;p&gt;Both include a 90-minute Zoom setup call and 30 days of email support. After that, you have a working private-AI workstation. We do not phone home. We do not see your data.&lt;/p&gt;

&lt;p&gt;COGS on the base unit is around $940. Margin around 69%. Cash-flow safe because Stripe charges at purchase; hardware ordered after.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validation before scale
&lt;/h2&gt;

&lt;p&gt;I am not ordering inventory on speculation. The plan is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Day 0: launch publicly, with the Box gated by a waitlist (no checkout yet)&lt;/li&gt;
&lt;li&gt;Day 7: first review — Box waitlist signups&lt;/li&gt;
&lt;li&gt;Day 14: hard gate on Box — 20+ verified emails or we revisit positioning&lt;/li&gt;
&lt;li&gt;Day 30: full P&amp;amp;L review, decide whether to scale&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the Box waitlist hits 20 in 14 days, I order the first 3 Mac minis. If it hits 5, I have not validated the rung; I revisit positioning before spending hardware money.&lt;/p&gt;

&lt;p&gt;This is the part the grifter posts skip. "I made $14,200/month in 72 hours" is not a thing that happens to honest businesses. What happens to honest businesses is "I opened a waitlist, watched signups for two weeks, decided whether to order inventory based on actual demand, and reported the real numbers."&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest year-1 range
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Month&lt;/th&gt;
&lt;th&gt;Pessimistic&lt;/th&gt;
&lt;th&gt;Realistic&lt;/th&gt;
&lt;th&gt;Stretch&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$400&lt;/td&gt;
&lt;td&gt;$2,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;$200&lt;/td&gt;
&lt;td&gt;$1,500&lt;/td&gt;
&lt;td&gt;$6,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;$800&lt;/td&gt;
&lt;td&gt;$3,500&lt;/td&gt;
&lt;td&gt;$12,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;$1,500&lt;/td&gt;
&lt;td&gt;$6,000-8,000&lt;/td&gt;
&lt;td&gt;$20,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;To hit the grifter's $14k/month claim, every rung needs to perform near the top of its range AND consulting needs to land. That happens in months 12-18 with discipline, not in 72 hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I will publish honestly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Weekly waitlist + signup numbers (real, not vanity)&lt;/li&gt;
&lt;li&gt;The first refund (when it happens) and why&lt;/li&gt;
&lt;li&gt;The first Box install case study (with the firm's permission)&lt;/li&gt;
&lt;li&gt;The Box waitlist → order conversion, as it happens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to see whether this business works, follow along on github.com/nicedreamzapp/claude-code-local and the AirGap landing pages. I'll post the numbers as they happen.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Free repo: github.com/nicedreamzapp/claude-code-local&lt;/li&gt;
&lt;li&gt;AirGap Box waitlist: nicedreamzwholesale.com/airgap-box&lt;/li&gt;
&lt;li&gt;Demo (NDA review on a laptop with Wi-Fi physically off, lsof on screen): youtube.com/watch?v=V_J1LpNGwmY&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I'm posting this
&lt;/h2&gt;

&lt;p&gt;Because the next person to read a case study like that and think "I want this" deserves to find a productized version, not another Hacker News thread about MLX setup. And because every honest version of this story I publish is also a receipt — for me, that I built something real, and for the next builder, that the playbook works.&lt;/p&gt;

&lt;p&gt;If you have feedback on the pricing, the positioning, or the agents, leave a comment. I read everything.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm building AirGap — pre-configured local AI on a Mac mini for firms handling private work. &lt;a href="https://nicedreamzwholesale.com/airgap-box" rel="noopener noreferrer"&gt;Join the AirGap Box waitlist&lt;/a&gt;, grab the &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;free open-source stack&lt;/a&gt;, or see &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;AirGap consulting&lt;/a&gt; for compliance-sensitive firms (law, medical, finance).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>opensource</category>
      <category>macos</category>
      <category>ai</category>
    </item>
    <item>
      <title>HumanEval on a MacBook — 81.7% pass@1, Wi-Fi off</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Wed, 29 Apr 2026 18:11:49 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/humaneval-on-a-macbook-817-pass1-wi-fi-off-22ap</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/humaneval-on-a-macbook-817-pass1-wi-fi-off-22ap</guid>
      <description>&lt;p&gt;The M5 Max MacBook Pro with 128 GB of unified memory is the first laptop that can hold a frontier-class coding agent entirely in RAM. No GPU rack. No cloud. No subscription.&lt;/p&gt;

&lt;p&gt;I just ran HumanEval on it. Wi-Fi off the entire run.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;81.7% pass@1&lt;/strong&gt; on the full 164-problem benchmark&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qwen 3 Coder 30B-A3B-Instruct&lt;/strong&gt; (8-bit MLX)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;14 minutes&lt;/strong&gt; wall-clock, &lt;strong&gt;$0/month&lt;/strong&gt; after the model download&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;YouTube walkthrough (three real problems, code streaming live, tests going green):&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=muq7VdgxqRk" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=muq7VdgxqRk&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this number matters
&lt;/h2&gt;

&lt;p&gt;The Qwen team didn't publish HumanEval scores for any Qwen3-Coder variant — they consider the benchmark saturated and went straight to agentic ones (SWE-bench Verified, BFCL, Aider-Polyglot). For the 30B variant — the one that actually fits on a laptop — there were no published HumanEval/MBPP numbers. Until this run.&lt;/p&gt;

&lt;p&gt;I also ran &lt;strong&gt;MBPP (sanitized): 83.3% pass@1&lt;/strong&gt; on a 168-problem sample. Pass rate stable since n=120; full 427-run was impractical because a few outlier tasks induce very long model responses (10+ minutes each).&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Benchmark&lt;/td&gt;
&lt;td&gt;HumanEval — 164 Python tasks (full)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Metric&lt;/td&gt;
&lt;td&gt;pass@1 (first attempt only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Temperature&lt;/td&gt;
&lt;td&gt;0.0 — deterministic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sampling&lt;/td&gt;
&lt;td&gt;single sample per problem, no best-of-N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Execution&lt;/td&gt;
&lt;td&gt;Python subprocess, 10s timeout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware&lt;/td&gt;
&lt;td&gt;M5 Max MacBook Pro · 128 GB unified memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model&lt;/td&gt;
&lt;td&gt;Qwen3-Coder-30B-A3B-Instruct-MLX-8bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network&lt;/td&gt;
&lt;td&gt;Wi-Fi &lt;strong&gt;OFF&lt;/strong&gt; the entire run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wall clock&lt;/td&gt;
&lt;td&gt;14 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  For context — Qwen3-Coder 480B's official agentic benchmarks
&lt;/h2&gt;

&lt;p&gt;The Qwen team's published numbers for the 480B flagship sibling (the bigger sibling of the 30B running on this MacBook):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Qwen3-Coder 480B&lt;/th&gt;
&lt;th&gt;Claude Sonnet 4&lt;/th&gt;
&lt;th&gt;GPT-4.1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SWE-bench Verified (500-turn)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;69.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;70.4&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;37.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;35.5&lt;/td&gt;
&lt;td&gt;25.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BFCL-v3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;68.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;73.3&lt;/td&gt;
&lt;td&gt;62.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aider-Polyglot&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;61.8&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;56.4&lt;/td&gt;
&lt;td&gt;52.4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: &lt;a href="https://qwenlm.github.io/blog/qwen3-coder/" rel="noopener noreferrer"&gt;Qwen team's official blog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the offline part matters
&lt;/h2&gt;

&lt;p&gt;If a tool needs the internet, three things are true:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Someone else can read what you sent.&lt;/li&gt;
&lt;li&gt;Someone else can charge you for it.&lt;/li&gt;
&lt;li&gt;Someone else can take it away.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the same tool runs locally, none of those are true. That's a different category of software — and for law firms, medical practices, and accountants handling client material, it's the only legal one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproduce it yourself
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open-source launchers: &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;HumanEval dataset: &lt;a href="https://github.com/openai/human-eval" rel="noopener noreferrer"&gt;github.com/openai/human-eval&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hardware: any M-series MacBook with ≥32 GB RAM (128 GB Max preferred for full 8-bit weights)&lt;/li&gt;
&lt;li&gt;Total monthly cost: &lt;strong&gt;$0&lt;/strong&gt; after the model download&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For law firms, medical practices, and accountants who want help getting this stack running on their own hardware — that's what &lt;a href="https://nicedreamzwholesale.com/airgap" rel="noopener noreferrer"&gt;AirGap&lt;/a&gt; is. 14-day pilot, fixed scope, the data never leaves your machines.&lt;/p&gt;

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




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://marijuanaunion.com" rel="noopener noreferrer"&gt;Marijuana Union&lt;/a&gt;. For premium vaporizers visit &lt;a href="https://ineedhemp.com" rel="noopener noreferrer"&gt;iNeedHemp&lt;/a&gt;, wholesale at &lt;a href="https://nicedreamzwholesale.com" rel="noopener noreferrer"&gt;Nice Dreamz&lt;/a&gt;, and seeds at &lt;a href="https://tribeseedbank.com" rel="noopener noreferrer"&gt;Tribe Seed Bank&lt;/a&gt;. Explore the 3D cannabis marketplace at &lt;a href="https://marijuanaunion.com/marketplace/" rel="noopener noreferrer"&gt;The Farmstand&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>benchmark</category>
      <category>macbook</category>
    </item>
    <item>
      <title>Free AI on a MacBook vs $100-a-Month Claude Code — Hexagon Shootout</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Thu, 23 Apr 2026 04:32:47 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/free-ai-on-a-macbook-vs-100-a-month-claude-code-hexagon-shootout-5h1o</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/free-ai-on-a-macbook-vs-100-a-month-claude-code-hexagon-shootout-5h1o</guid>
      <description>&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=2KeTDDodE0A" rel="noopener noreferrer"&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.amazonaws.com%2Fuploads%2Farticles%2F7kv4avef0epmb8pv5jbv.jpg" alt="FREE AI on a MacBook vs Claude Cloud — Hexagon Shootout" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;▶ Watch the race on YouTube:&lt;/strong&gt; &lt;a href="https://www.youtube.com/watch?v=2KeTDDodE0A" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=2KeTDDodE0A&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;April 22, 2026.&lt;/strong&gt; Anthropic's Claude Code Max plan jumped to $100 a month. I ran a live three-way AI race on the exact same prompt — Gemma 31B local, Llama 70B local, and Claude cloud — on a single MacBook, to see how close a free local stack gets to the paid cloud. Two of three contestants finished with zero cloud calls.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you just want the video, it's here: &lt;a href="https://www.youtube.com/watch?v=2KeTDDodE0A" rel="noopener noreferrer"&gt;FREE AI on a MacBook vs Claude Cloud — Hexagon Shootout&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want the repo, it's here: &lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;github.com/nicedreamzapp/claude-code-local&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Keep reading for the setup, the numbers, and the three things that surprised me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup — same prompt, three contestants
&lt;/h2&gt;

&lt;p&gt;Hardware: M5 Max MacBook Pro, 128 GB unified memory, Apple Silicon.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 31B&lt;/strong&gt; — local, Apple MLX, 4-bit quantized (Google's code-specialized model)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Llama 70B&lt;/strong&gt; — local, Apple MLX, 8-bit quantized (Meta's generalist)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude cloud&lt;/strong&gt; — the real Anthropic API, using Claude Code unchanged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same prompt to every contestant:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a single HTML file with inline JavaScript that shows a ball bouncing inside a rotating hexagon. Include gravity and realistic bounce physics.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Simple enough that the answer should be a few kilobytes of code. Interesting enough that it exposes how well a model handles real math — collision detection against rotating geometry, energy conservation, boundary clamping. When models trip, they trip here.&lt;/p&gt;

&lt;p&gt;Every run was recorded end-to-end with a live stats panel: elapsed seconds, output bytes, tokens-per-second. No cherry-picking, no post-hoc edits to the physics code, no "here's what it SHOULD have said." What you see is what came out.&lt;/p&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Contestant&lt;/th&gt;
&lt;th&gt;Time to ship working HTML&lt;/th&gt;
&lt;th&gt;Tokens/sec&lt;/th&gt;
&lt;th&gt;Cloud calls&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude cloud&lt;/td&gt;
&lt;td&gt;22 s&lt;/td&gt;
&lt;td&gt;N/A (data center)&lt;/td&gt;
&lt;td&gt;yes (via API)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 31B local&lt;/td&gt;
&lt;td&gt;56 s&lt;/td&gt;
&lt;td&gt;~30&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;zero&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 70B local&lt;/td&gt;
&lt;td&gt;2:17&lt;/td&gt;
&lt;td&gt;~11&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;zero&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Claude cloud finished first — it's a data center somewhere. Gemma 31B finished clean in under a minute with working physics. Llama 70B took the longest and produced the most verbose output, but also landed a working demo in the end.&lt;/p&gt;

&lt;p&gt;The headline isn't that one is "best." It's that two of the three ran with Wi-Fi that could have been off the entire time. That's the number that matters for anyone dealing with NDAs, PHI, client files, or just a flight without connectivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three things that surprised me
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Bigger isn't better when "bigger" is a generalist
&lt;/h3&gt;

&lt;p&gt;I went in expecting Llama 70B to beat Gemma 31B on code quality. It's more than twice the parameter count. Gemma beat Llama cleaner and faster on this specific task.&lt;/p&gt;

&lt;p&gt;Why: Gemma 4 is a Google model fine-tuned heavily for coding and math. Llama 3.3 70B is Meta's generalist — it's excellent at conversation, reasoning, creative writing, but it wasn't tuned to punch above its weight on HTML canvas physics.&lt;/p&gt;

&lt;p&gt;If you're buying a local model for coding, you're better off with a 30B that's code-tuned than a 70B that's general. Don't count parameters, read the model card.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Claude Code's harness chokes local models
&lt;/h3&gt;

&lt;p&gt;Claude Code (the CLI agent) sends a 29,000-token system prompt with 60 tool schemas in every request. That's tuned for the cloud — where a frontier model can happily chew through 30K tokens of context before even starting. On a local 70B, that prefill takes a minute or two before generation begins.&lt;/p&gt;

&lt;p&gt;When I bypassed Claude Code and hit the MLX server directly with just the prompt, Llama 70B's wall-clock time dropped from 7+ minutes to under 2.&lt;/p&gt;

&lt;p&gt;The tradeoff: without Claude Code's harness you lose the Write/Edit/Bash tool-use loop, so you can't use Claude Code as an agent, only as a generator. For research, benchmarking, or any single-shot prompt, direct is way faster. For actual coding sessions, the overhead is real but it's what buys you the agent loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Circle-approximation collision is the cheat code
&lt;/h3&gt;

&lt;p&gt;All three models eventually produced a bouncing ball. The ones that worked used &lt;strong&gt;circle-approximation collision&lt;/strong&gt; — treat the hexagon as a circle of its apothem radius for collision purposes, reflect velocity when the ball exceeds that radius, clamp the ball back to exactly inside. Five lines of math, reliable, hexagon can rotate as wildly as you want.&lt;/p&gt;

&lt;p&gt;The ones that failed tried to do proper polygon-edge collision — compute the six edges of the rotating hexagon each frame, compute point-to-line distance for each, reflect off the appropriate edge. That's the "right" way, and it fails constantly because floating-point error lets the ball slip through edges during the rotation, and then the model doesn't know how to clamp it back.&lt;/p&gt;

&lt;p&gt;I wouldn't have predicted this. The "simple" approximation is strictly better for the demo because it can't leak. For anything more complex than one ball, the polygon approach is necessary — but for a benchmark, approximation wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should care
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developers&lt;/strong&gt; on laptops with 64+ GB of Apple Silicon unified memory: you can run this today, your hardware already supports it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone dealing with confidential work&lt;/strong&gt; — lawyers, accountants, doctors, contractors handling NDAs or PHI: the cost isn't $0 vs $100, it's "does your data leave the machine" vs "does it not."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frequent flyers and people who travel to places with bad internet&lt;/strong&gt;: a 70B model on a laptop keeps working when the plane's Wi-Fi is $18 and throttled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone curious whether Apple's bet on unified memory was actually about AI&lt;/strong&gt;: it was.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to run it yourself
&lt;/h2&gt;

&lt;p&gt;The repo is MIT licensed and open source. Full setup is in the README:&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;&lt;a href="https://github.com/nicedreamzapp/claude-code-local" rel="noopener noreferrer"&gt;github.com/nicedreamzapp/claude-code-local&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project pairs a native-MLX Anthropic-API-compatible server with Claude Code. Point Claude Code at &lt;code&gt;localhost:4000&lt;/code&gt; and the official CLI talks to your local model as if it were the cloud API. Swap models with one env var. Ship code without the subscription.&lt;/p&gt;

&lt;p&gt;Around 2,000 stars in the first month. If it's useful, a star helps.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude cloud: $100/mo, 22 seconds to a working hexagon.&lt;/li&gt;
&lt;li&gt;Gemma 31B on my MacBook: $0, 56 seconds to a working hexagon.&lt;/li&gt;
&lt;li&gt;Llama 70B on my MacBook: $0, 2:17 to a working hexagon.&lt;/li&gt;
&lt;li&gt;Two of three ran with zero cloud calls.&lt;/li&gt;
&lt;li&gt;Free AI on Apple Silicon is real, now, for a huge slice of what people use cloud APIs for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The receipts, in video form: &lt;a href="https://www.youtube.com/watch?v=2KeTDDodE0A" rel="noopener noreferrer"&gt;youtube.com/watch?v=2KeTDDodE0A&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://marijuanaunion.com" rel="noopener noreferrer"&gt;Marijuana Union&lt;/a&gt;. For premium vaporizers visit &lt;a href="https://ineedhemp.com" rel="noopener noreferrer"&gt;iNeedHemp&lt;/a&gt;, wholesale at &lt;a href="https://nicedreamzwholesale.com" rel="noopener noreferrer"&gt;Nice Dreamz&lt;/a&gt;, and seeds at &lt;a href="https://tribeseedbank.com" rel="noopener noreferrer"&gt;Tribe Seed Bank&lt;/a&gt;. Explore the 3D cannabis marketplace at &lt;a href="https://marijuanaunion.com/marketplace/" rel="noopener noreferrer"&gt;The Farmstand&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>localllama</category>
      <category>mlx</category>
      <category>applesilicon</category>
    </item>
    <item>
      <title>"It Comes Out Of The Gate Very Fast": Disclosure Day Is An Action Movie</title>
      <dc:creator>Matt Macosko</dc:creator>
      <pubDate>Mon, 20 Apr 2026 08:03:25 +0000</pubDate>
      <link>https://dev.to/matt_macosko_f3829cfd86b8/it-comes-out-of-the-gate-very-fast-disclosure-day-is-an-action-movie-ff2</link>
      <guid>https://dev.to/matt_macosko_f3829cfd86b8/it-comes-out-of-the-gate-very-fast-disclosure-day-is-an-action-movie-ff2</guid>
      <description>&lt;p&gt;The moment Universal released the December 2025 teaser — wide Kansas sky, a meteorologist tilting her head, one note of John Williams score — the internet settled on an idea of what &lt;em&gt;Disclosure Day&lt;/em&gt; was going to be. Slow. Sparse. Grown-up Spielberg. The &lt;em&gt;Close Encounters&lt;/em&gt; of 2026. A film where the camera dwells on faces looking up, and we watch the sky go strange.&lt;/p&gt;

&lt;p&gt;That idea was half right. Per &lt;a href="https://www.empireonline.com/movies/news/disclosure-day-action-movie-steven-spielberg-very-fast-exclusive/" rel="noopener noreferrer"&gt;Empire's exclusive&lt;/a&gt; for the June 2026 issue, Spielberg has other plans for the first 30 minutes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This movie comes out of the gate very fast. People who are expecting another slow-burn first act — this is not that movie."— Steven Spielberg to Empire&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What We Know About the Opening
&lt;/h2&gt;

&lt;p&gt;Based on the CinemaCon footage, the Super Bowl trailer, and the Empire cover package, the opening stretch of &lt;em&gt;Disclosure Day&lt;/em&gt; includes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A cold open in medias res.&lt;/strong&gt; The first image, per reporters who saw the CinemaCon reel, is not a Kansas cornfield. It's a door being kicked in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Josh O'Connor's fugitive run.&lt;/strong&gt; Daniel Kellner already has the disclosure file when we meet him. He is not discovering anything in act one. He is running with it. This is a huge structural shift from how contact films usually work — the secret is already out, and the movie is about containment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A car-chase-onto-a-train sequence.&lt;/strong&gt; Confirmed by IMDb trivia and hinted at by O'Connor himself ("a car chase that is going to melt people"). The action staging is reportedly why Janusz Kamiński's second unit was in New Jersey for eleven weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Kansas City weather broadcast.&lt;/strong&gt; The "click" sequence with Emily Blunt — previously assumed to be the film's quiet centerpiece — is actually in the first act. It's the inciting event, not the climax.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Spielberg Pivoted
&lt;/h2&gt;

&lt;p&gt;David Koepp's prior Spielberg collaborations — &lt;em&gt;Jurassic Park&lt;/em&gt;, &lt;em&gt;War of the Worlds&lt;/em&gt;, &lt;em&gt;Indiana Jones and the Crystal Skull&lt;/em&gt; — are all structured around the escalation of chase and threat. Koepp is not a meditative writer. He is a propulsion writer.&lt;/p&gt;

&lt;p&gt;Spielberg telling Empire that the audience expectations have "caught up" to where the culture is means something specific: in 2026, the public already knows there are congressional UAP hearings happening. They already know Grusch testified. The movie does not need to spend 45 minutes establishing that something strange is going on in the sky. The audience is already there. So Spielberg is skipping that act and starting with the consequences.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Close Encounters Comparison Breaks
&lt;/h2&gt;

&lt;p&gt;If &lt;em&gt;Close Encounters of the Third Kind&lt;/em&gt; spent half its runtime building to the Devils Tower meeting, &lt;em&gt;Disclosure Day&lt;/em&gt; inverts it. The contact is the premise, not the ending. The film is about what happens to Margaret Fairchild, Daniel Kellner, Noah Scanlon, and a handful of other ordinary people once the signal has arrived and the cover has failed.&lt;/p&gt;

&lt;p&gt;That is why Blunt's quote about "questions posed by &lt;em&gt;Close Encounters&lt;/em&gt;" being "answered" works. &lt;em&gt;Disclosure Day&lt;/em&gt; doesn't repeat the 1977 film's arc. It picks up where that film ended — and runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Means for the Box Office
&lt;/h2&gt;

&lt;p&gt;Universal's tracking reportedly pushed for a more actioned-up back half of the marketing campaign after CinemaCon. Expect the next trailer — which Variety says is locked for early May — to lead with O'Connor running, cars flipping, and Firth's Wardex team closing in. The "look up at the sky" imagery isn't going away. It's just no longer the only mode. &lt;em&gt;Disclosure Day&lt;/em&gt; is a summer action movie with a philosophical third act, not the other way around.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.empireonline.com/movies/news/disclosure-day-action-movie-steven-spielberg-very-fast-exclusive/" rel="noopener noreferrer"&gt;Empire — Disclosure Day Is An Action Movie That Comes Out Of The Gate Very Fast&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://artthreat.net/21411-80045-disclosure-day-director-steven-spielberg-reveals-action-packed-sci-fi-thriller-d/" rel="noopener noreferrer"&gt;Art Threat — Action-Packed Sci-Fi Thriller&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gizmodo.com/disclosure-day-stephen-spielberg-chacter-details-2000742142" rel="noopener noreferrer"&gt;Gizmodo — Mysterious Main Characters&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure Day&lt;/em&gt; opens in theaters and IMAX on June 12, 2026.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://disclosureday.nicedreamzwholesale.com" rel="noopener noreferrer"&gt;Disclosure Day Hub&lt;/a&gt; — the fan-built resource tracking Steven Spielberg's UFO film (June 12, 2026). Explore the full &lt;a href="https://disclosureday.nicedreamzwholesale.com/news-hub.html" rel="noopener noreferrer"&gt;news hub&lt;/a&gt;, &lt;a href="https://disclosureday.nicedreamzwholesale.com/cast-guide.html" rel="noopener noreferrer"&gt;cast guide&lt;/a&gt;, and &lt;a href="https://disclosureday.nicedreamzwholesale.com/interviews.html" rel="noopener noreferrer"&gt;interview archive&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>disclosureday</category>
      <category>actionmovie</category>
      <category>spielberg</category>
      <category>openingscene</category>
    </item>
  </channel>
</rss>
