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
Diagram of a phone watching over VNC via Tailscale while Claude Code drives Playwright MCP and a Chromium container on an always-on dev VM

How to Give Claude Code a Real Browser: Headful Chromium in Docker with Playwright MCP

A couple of weeks ago I asked Claude, via the Chrome extension on my Windows laptop, to find me the best-value used M1 MacBook Air on eBay. It was properly good at it. It searched with sensible filters, opened listings, read the descriptions for battery cycle counts and “cracked screen” small print, and left the three best tabs open for me to look through. Then I tried to picture doing the same from my phone on a day I’ve left the laptop at home, talking to the agents on my always-on dev VM. There’s no browser there. Claude Code’s web fetch tool gets blocked or served a stripped-down page by most retailers, eBay included. So I gave the VM its own browser: a real, headful Chromium in a Docker container. Claude drives it through Playwright MCP, I can watch and take over from my phone over VNC, and it’ll crop screenshots straight into this blog. Every image in this post came out of it, the cover included. ...

September 25, 2026 · 16 min · Tom Cocking
Diagram showing a laptop connecting over Tailscale to a persistent dev VM running T3 Code and Claude Code

How I Turned My Laptop Into a Dumb Terminal With a Tailscale Dev VM, T3 Code, and Claude Code

For about as long as I’ve been doing this, my laptop has been the computer: the IDE, the Docker daemon, forty browser tabs, all of it running locally, all of it dying the second the battery does or the lid has to close for a meeting. That model finally broke this year - not because of some clever trick, but because I moved the actual computer off the laptop entirely. The laptop’s job now is to open a window onto a machine that never sleeps, never loses its state, and honestly doesn’t care what OS it’s running. ...

September 24, 2026 · 9 min · Tom Cocking
Pi Agent terminal showing the dep-audit widget flagging a critical lodash vulnerability

Building a Dependency Audit Extension for Pi Agent - and What Mini Shai Hulud Taught Me About npm Supply Chains

Last week, Microsoft’s Defender research team published details of an attack campaign they’re calling Mini Shai Hulud. A threat actor compromised maintainer accounts for the @antv npm organisation - the team behind popular charting libraries like G2 and G6 - and published malicious versions containing a 499 KB obfuscated payload that ran automatically during npm install. The blast radius was significant: echarts-for-react, one of the downstream dependents, has over a million weekly downloads. GitHub pulled 640 package versions and invalidated 61,274 npm tokens before it was contained. ...

May 21, 2026 · 9 min · Tom Cocking
Terminal showing Pi Agent startup with skills and extensions loaded

Understanding Pi Agent's Extension Model: Context Files, Skills, and TypeScript Extensions

If like me, you’re spending an increasing amount of time learning Pi Agent - the minimal terminal coding harness - you’ll quickly hit the point where you want to bend it to your workflow. There are four different mechanisms for doing that: context files, prompt templates, skills, and TypeScript extensions. They look similar on the surface but they operate at completely different layers, and picking the wrong one means either burning context unnecessarily or writing TypeScript when a Markdown file would have done the job. ...

May 19, 2026 · 10 min · Tom Cocking

Give Claude Code Eyes Inside Your WSL2 Docker Containers

If you run Docker inside WSL2 on Windows 11, you’ve probably hit this wall: you open a Claude Code session in Windows Terminal, something goes wrong with a container, and Claude starts asking “can you paste the logs?”. Every. Single. Time. It breaks the flow completely. The whole point of an agentic coding tool is that it should be able to diagnose problems itself, not act as a fancy chat window that waits for you to do the investigation manually. ...

April 23, 2026 · 8 min · Tom Cocking

Running Ollama in a Proxmox LXC with NVIDIA GPU Passthrough

Running large language models locally is genuinely useful — no API costs, no rate limits, and your data stays on your own hardware. The catch is getting GPU acceleration working inside a Proxmox LXC container, which involves a few non-obvious steps around driver installation and cgroup device passthrough. Why LXC and not a VM? VM GPU passthrough wasn’t an option here — no iGPU meant the host would have had no display output once the card was handed off. LXC was the practical solution, and it turns out to be a good one anyway: containers share the host kernel directly, so the GPU stays bound to the host’s NVIDIA driver and the container accesses it via bind-mounted device nodes and cgroup permissions. On top of that, LXCs are lighter weight than VMs, with less overhead and near-instant startup times. For a dedicated service like Ollama, it’s a solid fit. ...

March 22, 2026 · 11 min · Tom Cocking

Testing Llama3.1 (8B) With LM Studio

MetaAI have done it again… Dropping llama3.1 under the (mostly) open source license and I have been putting it through its paces and benchmarking to find out how well it performs to models preiously tested: Testing Llama3 With LM Studio. Previously we took a look at llama3 in LM Studio which has made self hosted LLMs that rival paid services like ChatGPT and Claude possible; this time we are taking a look at llama through the lend of GPT4All. ...

July 28, 2024 · 10 min · Tom Cocking

Testing Llama3 With LM Studio

MetaAI have just introduced Llama 3 to the world and the open source community is already putting it through its paces and pushing to find the limits of what it can produce. One fantastic tool which has made self hosted LLMs that rival paid services like ChatGPT and Claude possible is LM Studio. With version 0.2.20 they bough about support for llama 3 along with a GGUF quantized 8 billion parameter version of the model. ...

April 19, 2024 · 13 min · Tom Cocking