The first time I gave Claude Code a checklist and sent it looking for problems in my infrastructure, it found a bad healthcheck. The counter read 69,231 consecutive failures.
One of my web apps had a broken health probe. The app itself was fine: traffic flowing, every dashboard green. But inside its Docker container, the probe had been failing every 30 seconds for weeks. Nothing paged, because nothing was broken in a way users could see.
The cause was small. The probe called localhost, which resolved to an IPv6 address inside the container. Next.js was bound to IPv4 only, and Alpine’s wget doesn’t fall back. It just timed out, over and over. The fix was one change in the compose file: localhost → 127.0.0.1.
That first sweep turned up five other quiet problems too. So now it runs every week.
Monitoring misses the slow stuff
I run a handful of VPS boxes, a Docker host on my desk, a mess of N8N workflows, and some cron jobs and LaunchAgents. That’s more than I can hold in my head.
Monitoring catches things that break hard. It doesn’t catch the cert ten days from expiring or the log table growing 100 MB a week. Or the cron job that’s been silently erroring for a month. None of those send alerts. They just sit there until they don’t.
What the sweep does
Every Monday morning, Claude Code works through a checklist of about a dozen things. It checks actual state, not dashboards. It SSHes into machines, hits APIs, reads logs and compares what’s on disk to what should be there.
Each finding becomes one of three things:
- Fix it now, with a one-line note in the audit report.
- A task in my task tracker, if it needs a human decision.
- A pattern note in the project’s
CLAUDE.mdor a lessons file, so next week’s audit is a little smarter.
I review the summary with coffee and approve anything that needs it. That takes me maybe ten minutes.
Last Monday’s sweep
- A stale alert queue. An N8N instance had 11 old error records stuck in
status=new, which set off false high-severity alerts. The script that should have cleared them couldn’t find theclaudebinary.launchdstripsPATH, and the plist didn’t set it. One edit fixed it. - An orphaned certificate. A domain had a wildcard cert that renewed fine, plus a forgotten apex cert from a different CA that was ten days from expiring. Claude rotated the apex cert to match the wildcard.
- A disk that wouldn’t empty. My Mac Mini sat at 87%. Clearing Docker images and caches didn’t free the space, because Time Machine’s local snapshots still held the deleted files.
tmutil thinlocalsnapshotsreclaimed 13 GB and brought it to 82%. - Five stale tasks. Claude closed tasks I’d already done without checking them off. I do that constantly.
Why an AI is good at this
I could do this myself. I just wouldn’t. By week four I’d skip it because nothing was broken. By week ten I’d forget it existed.
Claude gives week 40 the same attention as week one. It checks every box, not just the ones I remember are there. And past incidents turn into new checks. After the IPv6 fix, it opened a task to check every other Docker app I run for the same bug.
How to start your own
- A checklist file. Plain markdown listing each system and what “healthy” looks like. Start with five items.
- Scoped access. SSH keys and API tokens with the smallest permissions that let it check what you want. A weekly audit doesn’t need root everywhere.
- A weekly trigger. Cron, a LaunchAgent, N8N, whatever’s handy. On a Monday, bad findings don’t ruin your weekend.
- A task manager for anything that isn’t a same-day fix.
- One rule: the audit always writes back what it learned.
Start narrow. Don’t hand an AI with tool access the keys to your whole fleet on day one. Let it do five things, see what it finds, and grow the checklist from there.
Most weeks, it finds something. Never catastrophic, sometimes tiny, and always easier to fix at 9 AM on a Monday than at 11 PM on a Saturday.
