Onboarding an AI I didn't fully trustproject

The single file that defines a good portion of my homelab stack was, until recently, “versioned” as a pile of copies with names like docker-compose.yml.save (insert flashbacks to exchanging team PowerPoint files in college). I’ve administered Linux servers as a hobby for long enough to be dangerous, and my homelab is proof: a stack of fifty-odd containers (lightweight, isolated mini-servers, one per app: media, backups, monitoring, smart home) that’s been around long enough that my family now treats it as permanent infrastructure, operated by exactly one person with a day job and a toddler. “The Cloud Is Just Someone Else’s Computer” reads a sticker attached to my server rack; this is true, but that someone else is also solely committed to keeping that computer running. The constraint for me has never been knowledge; any single improvement, that compose file included, is a solved problem somewhere on the internet. The constraint is time. Every upgrade competes with sleep, and the backlog compounds like debt.

So this year I stopped treating AI as a chat window and gave it what a new team member would get: an account. Real access to the real systems, scoped the way I’d scope any junior hire I liked but didn’t yet fully trust.

The first task I pointed the AI intern at was that embarrassingly overdue version control. The compose file now lives in a private git repository. Every change is a reviewable diff, secrets are referenced by variable name and never committed, and when something breaks after an automated 4am Watchtower update, I can simply ask “what changed?” instead of going on an archaeology dig.

The access model: an AI works over SSH as an unprivileged user, with a read-only view of Docker and no path to the secrets, and changes flow back through git to me.

Then came the account itself, which is where the actual design lives. The AI gets its own SSH user: key-only login, no sudo, and an explicit denial on the secrets file. It is deliberately not in the docker group, because on Linux, membership in the docker group is root wearing a trench coat. Instead, a read-only proxy sits in front of the Docker socket; the agent can list, inspect, and pull logs from any container, and every write it attempts is refused at the proxy. At work, we refer to this as being outside the “critical path.”

Changes flow in one direction. The AI edits configuration and commits; I review the diff and run the deploy myself. That’s slower than letting it loose; however, the slowness is the point. My family does not care how the photo server broke, only that it did and now our annual Christmas card is ruined (and cue the threats to migrate to a paid cloud product with no privacy policy).

Results arrived faster than expected. Within days, this arrangement stood up a full monitoring stack: metrics collection (Prometheus), dashboards (Grafana), per-container stats, and (the part that would have eaten a weekend by itself) a working SNMP profile for the NAS, a task that consists mostly of spelunking through vendor MIB files (e.g., how can an automation determine what speed my network switch fans are running at to decide whether to kick on the air conditioner?). I decided to delegate the eye glazing. The AI now also has its own read-only account on the dashboards, so it can check the graphs it helped build instead of asking me what they say.

Years ago, I bragged to my friend Chase, a fellow builder, about my first home automation: a notification script that sent me an SMS when one of my Inovelli Red Series Z-Wave smart light switches inevitably fell offline (these were the days before Matter, so offline they frequently went). Rather than being impressed, his immediate reaction was, “why not just have it fix the Z-Wave network itself?” This is that same “never half-ass it” mentality, but at scale.

The part I didn’t expect: most of the work was never technical. The stack had to become legible before it could be shared: one compose file instead of scattered configs, consistent conventions, decisions written down. Making the homelab readable to an AI is the same work as making it readable to anyone, including the 11pm version of me (and the latest addition to my family trust paperwork, should anyone be so daring to take it on).

A competent admin with a tireless assistant is a different operator than a competent admin alone, and the difference shows up as finished projects (hence my time for this blog). It also opens a door I’ve wanted open for a while: I don’t want to be the one investigating every alert at odd hours, and there is now someone on my staff who never sleeps. The night shift is where this is headed.