I run large language models on my own GPUs, and I route the work that is safe to send out to whatever cloud model is cheapest for the job. That means a private LLM router that decides what leaves my network, a couple of RTX cards in a workstation under the desk, and a benchmark harness that scores models on the actual coding tasks I do rather than on somebody else’s leaderboard. Most of what I write about AI here is the unglamorous half: getting llama.cpp to compile, working out why a model that looked fast is not, catching an agent when it confidently reports a fix that never happened. This hub collects those write-ups, roughly grouped by what I was trying to get working at the time.
Running local models on your own hardware
The starting point was a used Dell Precision T5820, a Quadro I pulled out of it, and an RTX 3090 Ti I dropped in, which is how I ended up building llama.cpp from source on that box after seven power cycles. Once it was running, most of the published throughput numbers I compared against turned out to be measuring something other than what I cared about, which is the subject of why your llama.cpp benchmarks are wrong. I then spent three months trying to make the same card go faster, testing autoregressive decoding against DFlash and MTP on Qwen3.6-27B, where the answer turned out to depend entirely on how many tokens you are generating. On the Apple side, getting a 30B coder model stable on a Mac Studio meant working through LM Studio’s prompt truncation and Jinja failures, and running a whole local agent team on Apple silicon is covered in the OpenClaw build, 13 errors and $1.50 a month.
Routing, cost, and what leaves the network
Every prompt is a decision about money and about privacy, and I did not want to make that decision by hand 200 times a day. So I built a private LLM router where one boring lookup table decides which task types are allowed to reach a cloud API at all and which stay on the GPUs at home. The cost side of the same idea, sending each task to the cheapest model that can actually handle it, is written up as inference arbitrage across five models. Free tiers are part of that math until they are not, which is why I tested what Groq, Cerebras, Mistral, Gemini and Cohere actually give you the week one provider quietly deleted the model my code depended on, and why I track Claude, Codex and Gemini quotas from a single script.
Which model should you actually use
Public benchmarks measure raw intelligence. Deployment decisions also turn on latency, format reliability, and whether the data is allowed to leave the building, so I ran my own: 15 models against 38 real coding tasks, scored on work I would have done anyway, for $2.29 in API spend. The short version, updated with what the results mean if you just want a pick per use case, is the best LLM for coding in 2026.
Building with agents
Coding agents forget things, and they forget them in ways that quietly wreck a long session. Auto-compact was doing exactly that to me, so I wrote up how to stop Claude Code from lobotomizing itself mid-task, and then the fuller answer: a persistent memory system of markdown files, two commands, and five cron jobs, plus the design rules I derived from breaking it repeatedly. The other half of agent work is pointing one at a system that was never designed for it, like driving WordPress from the terminal through REST, Playwright and wp-cli, or turning a local model loose on 2,300 unsorted files in my Obsidian vault to find out what a decade of digital hoarding actually contains.
When the model lies to you
The failure mode that costs the most time is not a model that refuses. It is a model that says “fixed” and moves on, which is what happened for three months on a script that had never once run correctly while every status report said otherwise. Agents also believe whatever they read, so I built a honeypot canary that screens web content with a deliberately gullible LLM before my real agent sees it, and wrote down what it caught. The same credulity applies to instruments: a $15 thermal sensor on an open-air GPU reads load backwards, and the LLM I asked about it fell for the reading exactly the way I did.
Watching the stack it all runs on
A local inference stack fails in ways a hosted API never will, and you only find out if you are watching. Three green lies is about the week I stood up a Grafana dashboard for the router and found three panels reporting healthy data that was not real, none of it a Grafana bug. Loading a big model is also the fastest way to discover how a Linux box behaves under memory pressure, which is how I ended up hardening SSH to survive the OOM killer after locking myself out of my own server.
All AI posts
Every AI write-up, newest first. This list updates itself as new posts go live.
-

How I built a private LLM router: one boring lookup table decides what leaves my network
My LLM router decided privacy by matching keywords in the prompt. It leaked, and I tore it out the next day. What replaced it is one lookup table you can…
-
Best LLM for Coding in 2026: Picks by Use Case
The best LLM for coding in 2026 is Claude Sonnet 4.6. It cleared all 38 tasks in my benchmark at 100% quality for $0.20 per run and a 4.6 second…
-

Linux OOM Killer vs SSH: How to Stop Getting Locked Out of Your Own Server
When the Linux OOM killer fires, ‘sshd is running’ stops meaning ‘you can log in.’ Four systemd and sysctl fixes that keep your login path alive through a memory storm.
-

I Strapped a $15 Sensor to My GPU. It Read the Load Backwards. Here’s How to Calibrate It.
A $15 Zigbee sensor on an open-air GPU reads load backwards in the fan airflow. An LLM falls for the same trick. Calibrate against nvidia-smi to fix both.
-

My brand-new SLZB-07 Zigbee coordinator shipped too old: fixing “EZSP protocol version 12 is not supported by host”
The SMLIGHT SLZB-07 connected, spoke the right protocol, then quit: EZSP version 12 not supported. Here’s the flash fix and how to pick the right channel.
-

Why docker image prune Won’t Fix a Full Root Disk: The Containerd Snapshotter Trap
docker image prune skips tagged images, and the real hog hides in /var/lib/containerd. How I traced a 99% root disk to the containerd snapshotter and fixed it.
-

Self-Hosting RustDesk on Tailscale Without Opening a Single Public Port
Run rustdesk-server-oss behind Tailscale with zero public ports, plus the macOS root-daemon config fight that ate an hour and nobody has documented.
-

Why Your llama.cpp Benchmarks Are Wrong: GPU Architecture and Real Numbers
I pulled an aging Quadro out of my homelab LLM box, dropped in an RTX 2060 SUPER, and the thing booted on the first try. The driver saw both cards.…
-

I Built a Honeypot to Catch Prompt Injections in Claude Code (Here’s What It Caught)
I built a honeypot canary that screens web content with a deliberately gullible LLM before my AI agent reads it. Here is what it caught.
-

Free LLM API Tiers in 2026: What Groq, Cerebras, Mistral, Gemini and Cohere Actually Give You
On May 31, 2026, one of my LLM providers quietly deleted most of its free models, including the exact one my code was calling. My code didn’t change. The vendor’s…
-

Three Green Lies: Debugging a Self-Hosted LLM Observability Dashboard
Within a week of standing up the dashboard, three panels were showing bad data. None of them was a Grafana bug. I had built a Grafana dashboard to watch my…
-

How I Drive WordPress From Claude Code (REST, Playwright, wp-cli)
Driving WordPress from Claude Code (Anthropic’s terminal coding agent) fights the platform’s core assumption roughly every other operation. WordPress was built for humans clicking buttons. Last week I burned 90…
-

Sorting a Filesystem Hoard With Local LLMs: What 2,300 Files Told Me About My Obsidian Vault
What do 2,300 random files on a knowledge worker’s laptop actually look like? I let a local LLM tell me. TL;DR I built a productized CLI called random-file-sorter from a…
-

Anti-detect browser benchmark 2026: 7 stealth tools, 31 Cloudflare targets, 651 verdicts
I built a scraper. Cloudflare killed it in 48 hours. I built a web scraper for Canadian small-cap stock data and Cloudflare blocked it within 48 hours. After testing seven…
-

Three Months of Speed-Up Experiments on a 3090 Ti: Autoregressive → DFlash → MTP for Qwen3.6-27B
TL;DR MTP wins on wall clock above output ~900 tokens. Below that, plain autoregressive is faster. The DFlash Decode Collapse. DFlash decode drops from 46.9 to 30.1 tok/s as output…
-

Building llama.cpp from source on a Dell Precision T5820 with an RTX 3090 Ti (after seven power cycles)
I pulled a Quadro M4000 out of a used Dell Precision T5820, dropped in an RTX 3090 Ti, and turned the box into a homelab inference node running Qwen3.6-27B at…
-

The LLM Kept Saying “Fixed.” For Three Months, It Wasn’t.
That afternoon a Slack bot told me a script had NEVER RUN. That was a lie. The script had pulled 81 weather observations two minutes earlier. Unwinding the lie took…
-

Stop Claude Code from Lobotomizing Itself Mid-Task
Claude Code has a feature called auto-compact that quietly destroys your session quality. The Problem I was three hours into a multi-file refactoring session, had just finished explaining which modules…
-

How I Track Claude, Codex, and Gemini Quotas from One Script
Updated May 30: added what I learned wiring these three together, plus the budget thresholds that now trigger automation. (If you’re trying to decide which model to switch to when…
-

Inference Arbitrage: How I Route 200+ Daily LLM Calls Across Five Models
Inference arbitrage means routing each AI task to the cheapest model that can handle it at acceptable quality, instead of sending everything to the most expensive one. No benchmark tells…
-

LLM Benchmark Rankings 2026: 15 Models Tested on 38 Real Coding Tasks
Most LLM benchmarks measure raw intelligence. Real deployment decisions also depend on latency, format reliability, and data boundaries, including when a task should stay on-prem instead of going to a…
-

LM Studio Errors on Apple Silicon: Prompt Truncation, Jinja Failures, and Crash Fixes
I spent about two weeks of evenings getting Qwen3-Coder-30B running reliably on a Mac Studio (M1 Max, 32GB) through LM Studio and OpenClaw. Along the way I hit every error…
-

Claude Code Memory System: MEMORY.md, Topic Files, and Automated Maintenance
The full architecture for giving Claude Code persistent memory across sessions: four layers of markdown files, two commands, five cron jobs, and the 8 design rules I derived from breaking…
-

OpenClaw: 13 Errors, $1.50/Month, and an AI Team That Doesn’t Need the Cloud
OpenClaw on Apple Silicon with a 24B local model: 14 real errors fixed, sub-agent delivery working, $1.50/month total. Every config documented.