Exitcode0 - Executed without error

Homelab, self-hosting, Home Assistant and local AI, worked out on my own kit and written up so you don’t have to. Proxmox, Docker, Tailscale, Zigbee, Ollama and the scripts that glue it together.
Social card reading 'Typing was too hard. Now it's three keys and a dial.' beside a photo of a 3-key macropad with a knob, its keys printed with microphone, slash and Enter symbols, and an on-screen pill showing voiceloop talking

Claude Code Voice Control on Windows: Dictate Prompts and Hear Replies Aloud

I run Claude Code on a dev VM and drive it from T3 Code on whatever I’m sat at. The dumb terminal post covers that setup. It works well until you have a few threads going, look away, and miss the one that’s been sitting on a question. So I wanted voice control in both directions: say the prompt, hear the reply. The catch is that Claude Code runs on a headless server, and the microphone and speakers are on my Windows PC. Claude Code’s own /voice needs a local microphone and only covers the talking-to-it half. I built the other half. voiceloop is a free, open-source Windows app that reads Claude Code’s replies aloud on your PC, wherever Claude Code is running. It lives at voiceloop.dev, with the code on GitHub. ...

November 10, 2026 · 13 min · Tom Cocking
Diagram of a Proxmox host with a GPU-backed Ollama container, Open WebUI, a dev VM and Home Assistant

Local AI on Proxmox: The Complete Homelab Guide (2026)

Everything AI-related on this site runs on one Proxmox host in a cupboard. A GPU in an LXC container serves Ollama, a web front end sits on a VM next to it, Home Assistant talks to local speech models for voice, and my coding agents work from an always-on VM that I reach over Tailscale. None of it costs per token, none of it leaves the house, and the whole stack has survived every host reboot since I built it. ...

November 10, 2026 · 11 min · Tom Cocking
Terminal panel showing the environment variables for pointing Claude Code at Ollama and a results table for three local models on two coding tasks

Claude Code with a Local Ollama Model: Setup, and What a 12 GB GPU Can Do

Claude Code speaks the Anthropic API. Ollama now speaks it too. Point one at the other with three environment variables and Claude Code runs against a model on your own GPU. No API key, no per-token bill, and the prompts stay on your network. Whether it’s any good is a different question. I ran it against three models on an RTX 3060 with two small coding tasks each. One model did well at both. One was the best at one and the worst at the other. Treat what follows as a smoke test, not a benchmark, but the differences were big enough to matter. ...

November 6, 2026 · 8 min · Tom Cocking
Home Assistant Assist dialog on the Local LLM assistant: the user says it's too dark in the living room and the reply says it turned on the Living Room RGBWW Lights

Home Assistant Conversation Agent with a Local Ollama Model: Which Model Works

Home Assistant’s own Assist can already turn a light on. It matches your sentence against a list of templates and runs the one that fits. Say something it has no template for and you get “Sorry, I couldn’t understand that”. Point Assist at an LLM and that stops being true. “It’s too dark in the living room” works. The catch is that the model has to call Home Assistant’s tools correctly, and plenty of local models can’t. I ran three models against the same 18 commands to see which ones can. ...

November 3, 2026 · 9 min · Tom Cocking
Diagram of the CVE-2026-98432 race: an attacker's SYN with IPv4 options reaches a TCP listener, two CPUs race over the same IP options object, and a won race leads to a root shell command

How to Check and Mitigate CVE-2026-98432 (Linux Kernel TCP Use-After-Free) on Ubuntu

On 27 October Anthropic published an exploit chain that gets a root shell on a Linux server across the network, with no credentials and no clicks. The bug behind it is CVE-2026-98432, a use-after-free in the IPv4 TCP handshake. The kernel’s own CVE team scores it 9.8. Ubuntu has no fixed kernel yet. I run an Ubuntu 22.04 VM in a colo that hosts a UniFi Network controller in Docker. When this landed I wanted three answers: is the box vulnerable, can I reduce the risk before Canonical ships a kernel, and has anything already been at it? This post is what I checked, what the first-party sources actually say, and the mitigations I tested. ...

November 2, 2026 · 15 min · Tom Cocking
Terminal window showing a curl request returning the Markdown version of a blog post, with sizes of 22,263 bytes for the HTML and 5,388 bytes for the Markdown

Serve Markdown and llms.txt from Hugo So AI Agents Can Read Your Posts

More of my reading now goes through a coding agent. I ask it to fetch a page, and it works from whatever it gets back. For a blog that’s a problem. A typical post is 22 to 50 KB of HTML, wrapped around 5 to 17 KB of content. The agent has to pull the content out of the wrapper first. So I made every post on this site available as plain Markdown at the same URL with index.md on the end, and added an llms.txt that lists them. Both are Hugo output formats, about twenty lines in total. This post has the config, both templates, the sizes I measured on the live site and the things that bit me. ...

October 30, 2026 · 6 min · Tom Cocking
Rendered 3D model of a U-shaped wall bracket with two countersunk screw holes, next to the title Parametric sensor mount

Parametric Sensor Mount in OpenSCAD with Claude Code: A Home Assistant 3D Print

Small Zigbee and Bluetooth sensors tend to ship with a sticky pad and nothing else. The pad fails the first time you move house or the wall is cold and damp, and the sensor ends up behind the radiator. A printed bracket fixes that, but I’d rather not spend an evening in CAD for a plastic box. OpenSCAD is the opposite of CAD. The model is a text file, so Claude Code can write it, render it and check it in a loop. This post has the file I ended up with, the checks I ran, and the one that caught a mistake the obvious check missed. ...

October 27, 2026 · 6 min · Tom Cocking
Terminal showing a script reporting zero matches for a quote a subagent claimed was on a Google policy page

How to Check a Cheap Claude Code Subagent's Research Before You Believe It

I handed two Claude Code subagents a research job. Both ran on Haiku to keep the cost down, and both came back with tidy tables, exact quotes and source URLs. Then I opened the sources, and a fair amount of what they’d told me was wrong. This post is what I found, and the small script I now use before acting on anything a cheap subagent tells me. What I asked them I had a Claude Code session working through SEO and AdSense compliance on this blog, and I spun two background subagents off it with the model set to Haiku: ...

October 23, 2026 · 6 min · Tom Cocking
Home Assistant Assist dialog showing the command 'turn on the kitchen lamp' and the reply 'Turned on the switch', next to the title Home Assistant voice, fully local

Home Assistant Local Voice Assistant with Whisper and Piper in Docker

A Home Assistant voice assistant needs three parts. Something to turn speech into text, something to turn a reply back into speech, and Assist in the middle to work out what you meant. The first two can run on plain CPU in Docker, so nothing you say has to leave the house. I built the whole stack from scratch on 11 October 2026 on Home Assistant 2026.10.1, ran text and spoken commands through it, and timed the result. This post has the compose file, the settings, the numbers and the two things that tripped me up. ...

October 20, 2026 · 6 min · Tom Cocking
Black 10.1 inch Android photo frame showing a stock photo of a man holding a child, beside the title Photo frame to Home Assistant dashboard

Turn a £50 Android Photo Frame Into a Home Assistant Dashboard: Root From Windows, Then Fully Kiosk

Wes Bos put out a video about rooting a $50 Amazon photo frame and running a family dashboard on it. The frames are Android tablets with a vendor app bolted on, and his photo-frame-dashboard repo is written so you can point a coding agent at it and let it do the fiddly bits. I wanted the same thing for Home Assistant, so I ordered the UK listing of the frame he linked and spent a day on it with Claude Code. ...

October 13, 2026 · 15 min · Tom Cocking