Homelab
AI-focused distributed homelab in a 10-inch mini rack — nine devices, every one on the Tailscale mesh, running agents, automation, backups, and staging.
A distributed homelab where each device has a dedicated role, connected via Tailscale mesh networking. Housed in a 10-inch mini server rack. It’s the runtime for my AI agent infrastructure — Zarq, Agent-PKM, Pulse, and the automation stack all live here.
Devices
| Device | Role | Status |
|---|---|---|
| MSI Cubi | Production hub — n8n, Obsidian sync, Zarq MCP, Agent-PKM, dashboard (always-on, headless) | Deployed |
| Beelink EQ14 | Proxmox VE lab — first guest is a staging n8n container | Deployed |
| ThinkPad T430s | Monitoring server — Uptime Kuma + Portainer | Active |
| X1 Carbon | AI dev and orchestration hub | Active |
| Legion 7i | AI compute (RTX 4090, Ollama), on the mesh from WSL2 too | Active |
| Raspberry Pi 5 | Backup server — restic REST with nightly fleet snapshots + offsite mirror | Active |
| Raspberry Pi 4B | Network utility — AdGuard Home DNS | Active |
| MacBook Neo | Mobile dev laptop | Active |
| Synology NAS | Retired — PSU failure, backup duty moved to the Pi 5 | Retired |
Network
The target topology is a UniFi stack — Dream Router 7 into two USW-Lite-8-PoE switches with the rack hanging off the second. The Dream Router 7 developed a hardware fault in June 2026, so the lab is temporarily flat on the ISP gateway while a replacement is sorted. In practice it barely matters: everything is addressed by Tailscale name, not LAN IP.
Two operating rules came out of the network’s failures:
- All fixed addresses are DHCP reservations in the controller, never statics on the device — learned when a subnet migration stranded every hardcoded box.
- Tailscale names over LAN IPs, always — learned when the router died and the DHCP leases drifted.
As of July 2026, every powered device is on the mesh, hardened to a uniform baseline: single noah login, key-only SSH, and unattended security patching across the fleet.
Services Running
| Service | Host |
|---|---|
| n8n (production automation) | MSI Cubi |
| Obsidian headless sync (2 vaults) | MSI Cubi |
| Zarq MCP + Agent-PKM | MSI Cubi |
| Control Deck dashboard | MSI Cubi |
| n8n (staging, Proxmox LXC) | Beelink |
| Uptime Kuma + Portainer | ThinkPad T430s |
| restic REST backup endpoint | Raspberry Pi 5 |
| AdGuard Home DNS | Raspberry Pi 4B |
| Ollama (local LLM) | Legion |
AI Architecture
The homelab is where my agents actually run:
- Hermes — Ops engineer agent on the Cubi. Infrastructure management, deployments, documentation, and the Discord gateway.
- Ping — Personal AI companion on Telegram and Discord, wired into the PKM.
- Zarq — Idea-to-merged-code engine; its MCP server on the Cubi gates my GitHub issue workflow with per-caller attribution.
- Agent-PKM — Agent-readable knowledge base synced from the Obsidian vault; every agent queries it for context.
Control Deck
A CRT-styled live dashboard served off the Cubi. Two loops keep it honest: a doc loop that regenerates dashboard data from the repo’s markdown (README, decision records, build log) on every push, and a status loop where a poller probes every device and overlays live up/down state and latencies every 30 seconds.
Build Journal
Started February 2026 with the rack assembly and Cubi upgrades (32GB RAM + 1TB NVMe); n8n was in production by March and the network rebuilt on UniFi in April. June was the stress test: the router died, the NAS lost its PSU, and the response became a fleet-wide hardening pass — unified logins, key-only SSH, auto-patching, and the last LAN-only boxes joined the mesh. July put the idle hardware to work: the Pi 5 became a real backup server (restore drill passed, offsite mirror to cloud storage), the Beelink got its first Proxmox guest as an n8n staging environment, and the Pi 4 took over ad-blocking DNS. Decisions are recorded as ADRs in the repo — 27 and counting.