Developer Taleshomelablinuxai-agentsclaude-code
Prateek Chauhan Turned a 2015 HP Laptop Into a Homelab in Two Days With Claude Code, Four Rules and a Progress File It Read After Every Reboot
Four Ubuntu upgrades, one interrupted hop that left 1,337 packages ahead of systemd, a security claim the agent got wrong, and a local RAG server: a dusty Pavilion now runs with its lid closed and Windows one boot-menu choice away.
“I think I screwed up, even though apt-get is upgraded to 26.04 systemd is still showing 24.04.”
That’s what Prateek Chauhan typed to Claude Code partway through the last of four Ubuntu upgrades on a 2015 HP Pavilion. His SSH session had dropped mid-upgrade. Ubuntu had moved 1,337 packages to the new release and left systemd, the thing that boots everything else, a full release behind.

The laptop is a Pavilion 15-ab029TX with an i5-5200U, 16GB of RAM and a GeForce 940M. Ubuntu lived on a 240GB Kingston SSD; Windows lived on a 1TB hard drive that also held the EFI partition both systems boot from. The Ubuntu install was 18.04, wearing a MacBuntu theme. (Every 2018 Linux laptop wanted to be a Mac at some point.)
That shared EFI partition is why the first of his four rules mattered. The agent was never to touch the Windows disk. It had to ask before anything destructive, keep secrets out of every file, and write down what it did in ~/homelab-setup/PROGRESS.md. “When I typed ‘continue’, it read the log,” he writes, and the log “survived five reboots and one messy incident.”
Before any upgrade, they cleaned house. Eleven third-party apt sources were moved aside, not deleted, 31 packages were purged, and the Nvidia 390 driver went out in favor of the open-source nouveau one.
The first hop, 18.04 to 20.04, took about three hours, mostly because the Wi-Fi was crawling along at 44 KB/s. On the way to 22.04 he set GRUB_DISABLE_OS_PROBER=false so Windows stayed in the boot menu. 22.04 to 24.04 went smoothly. Then 24.04 to 26.04, his Termius session dropped, and he typed the message up top.
The way out took about an hour. The agent read the logs first. Going back wasn’t an option (“Downgrading isn’t supported,” as the post puts it, so the only way out was forward), and a dry run of apt full-upgrade -s showed 579 changes and 15 removals waiting. They ran the real one inside tmux this time, so a dropped connection couldn’t kill it again.
With the system current, the server work went in. SSH is keys only. Docker publishes ports straight past ufw, a known gotcha that will happily leave a service open you thought the firewall covered, so that got handled, and Tailscale covers getting in from outside the house. For the Cloudflare Tunnel, the token went “straight from the dashboard into cloudflared service install, and the AI never saw it.”
Then the agent flagged a problem: the tunnel token was “world-readable.” It wasn’t. Its search had matched --token inside --token-file, which is the safe way to do it. He checked, which is the only reason it didn’t turn into a fix for a problem that wasn’t there. His section on it is titled with the old line, “Trust, but verify.”
Monitoring is a 96-line bash script on a five-minute systemd timer. It pings Discord only when the set of problems changes, so one lingering problem doesn’t page him every five minutes forever, plus a heartbeat at 09 so silence means something.
The last piece is a local knowledge base. Ollama runs nomic-embed-text for embeddings and llama3.2 for answers, ChromaDB stores the vectors, and two MCP tools sit on top: search_kb, which came back in 0.3 seconds, and query_kb, which took 160 seconds on its first call while the model loaded. Indexing 22 chunks took 47 seconds. Version 2 of the MCP Python SDK had renamed FastMCP to MCPServer, which broke the server, so the agent pinned the old version in a pull request (“Pin mcp<2 in requirements”) and pushed it with a deploy key scoped to that one repo.
The whole thing ended up on kernel 7.0 and Ubuntu 26.04, running with the lid closed, Windows “one menu choice away.” His verdict on the agent is “a fast, very well-read junior admin who never gets tired of checking logs. You still need to know enough to ask ‘are you sure?’”
His list for next time is short and physical. A better Wi-Fi card, since the RTL8723BE tops out at about 1 to 1.5 MB/s and the 9GB Ollama image took hours to pull. A DHCP reservation. Getting the laptop to power itself back on after an outage, for which he wrote “ESP32 will do the job.” And the first public app behind Cloudflare Access, which hasn’t gone up yet.