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
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
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

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

Automating Postgres Deployment with Docker Compose and Init Scripts

Introduction to Running PostgreSQL in a Docker Container using Docker Compose In this blog post, we will explore how to run PostgreSQL in a Docker container using Docker Compose. We will also break down and explain the init-user-db.sh script that is executed at startup to initialize the PostgreSQL tables. Running PostgreSQL in a Docker container provides several benefits, including ease of deployment, portability, and isolation. So let’s dive in and understand the process! ...

January 6, 2024 · 5 min · Tom Cocking

Running Uptime Kuma With Docker Compose

Introduction Uptime-Kuma is an open-source, self-hosted website monitoring tool. It can check the uptime and response time of websites, APIs, and other services at regular intervals and alert you if any of them go down. Uptime-Kuma can be installed on your own server and customized to suit your needs. In this article, we will explore how to set up and run Uptime-Kuma using Docker Compose. The Docker Compose File The following is the Docker Compose file for the Uptime-Kuma service: ...

May 1, 2023 · 2 min · Tom Cocking

Writing to an InfluxDB server with Python3

A quick GitHub gist for anyone looking to write to an InfluxDB server with Python3. This is a generic function that accepts three inputs; as an example, I am using temperature data in degrees Celsius. Turning DHT11 readings into beautiful graphs in Grafana Once you have your data in influxDB, a great way to visualise it is using Grafana. I hope to bring you more posts in the future about visualising your python data with Grafana. ...

January 19, 2021 · 1 min · Tom Cocking

Setup the Nextcloud Snap Package with HTTPS and a separate data path

https://snapcraft.io/nextcloud I have been using the Nextcloud snap package for a long time, but some recent system changes in my colocation facility mean that it is time for a big upgrade. Rather than migrate my existing Nextcloud instance, I have decided to build a new install and here are my goals for the new installation: Use lets encrypt to have automatic and valid HTTPS certificates Have the data path for Nextcloud on a HDD and the rest of the host OS on an SSD. Host OS Details For this setup, I am using Ubuntu 18.04 installed on a 30GB SSD backed partition. I then have a 1TB disk attached and mounted to /media. ...

March 29, 2020 · 3 min · Tom Cocking

Backup Nextcloud with RCLONE

I’ve made previous posts about backing cloud services with RCLONE – Backup Google Photos with Rclone – and this post will detail how to backup a self-hosted cloud service, Nextcloud. Get started with Nextcloud There are a lot of benefits to running your own private ‘cloud’ storage system, but for me, my top concern is privacy and Nextcloud gives me the ability to take accountability for my own data. With this in mind, I am conscious of my Nextcloud server going offline or suffering data loss, so I want a way to create 1 or more backups of my datacentre hosted, Nextcloud data on my home NAS. ...

February 27, 2020 · 2 min · Tom Cocking