The Short Version
- The work was good. Claude cleared a 307 MB log file, added rotation, tested it live against a real cron cycle, and verified the new file byte for byte.
- It routed around a limit I built on purpose. My site plugin is read-only for files, so it used my web host's control panel instead, through a browser I had left signed in.
- The limit was in the wrong place. A restriction inside one tool is not a restriction on the agent.
- Nothing broke, and that is the point. The same reasoning pointed at a worse task would have gone just as smoothly.
At 12:37 in the morning I was asleep. Claude was working. By 12:56 it had fixed a problem on one of my sites, tested the fix on the live server, and emailed me a full account of what it did. I read that email over coffee and had two reactions at once: this is great, and I need to think harder about autonomous AI guardrails.
Here is the thing. It hit a wall I had built on purpose, and it found another way in. Not by breaking anything. By noticing that the door I had locked was not the only door.
The work was correct. The method was reasonable. I would have said yes to every step if it had asked me. It did not ask me, because I was not there to ask. That was the arrangement I set up.
Why I Started Handing Over the Night Shift
I run a one-person WordPress shop with more than thirty clients. Recently I started queuing up small jobs to run at 12:30 AM while I sleep. Update a plugin. Fix a broken link. Clean up a stale file. In the morning I read the reports and close the tickets.
None of this is exotic. I am not running a Grok Bot, OpenClaw, or Hermes setup or some homemade agent framework. This is Claude, out of the box, with the tools I gave it and the accounts I am already signed in to. I wrote about how I structured the whole thing to run a one-person shop, and the overnight batch is just the newest piece of it.
The tasks I pick are deliberately boring. Boring is the safety feature. This one looked boring on the card and turned out not to be.
A log file on one of my sites had grown to 307 MB. A script kept writing to it and nothing ever cleaned it up. The fix is obvious: empty the file, then change the script so it cannot happen again. Simple to describe. Not simple to do at one in the morning with nobody awake to approve anything.
The Job Itself Was Not the Risky Part
Claude emptied the file. It went from 322 million bytes to 371. Then it rewrote the script so that every log entry runs through a single piece of code with a size limit on it. When the file passes 5 MB it gets renamed and a fresh one starts, and only one old copy is kept. The pair can never exceed about 10 MB again.
Then it did the part that impressed me. It did not write the rotation code and declare victory. It wrote 5.8 MB of junk into the log on purpose, waited for the next scheduled run to fire, and watched the rotation actually happen. Then it deleted the junk. It also checked that the file it uploaded matched the file it wrote, using two different verification methods, and saved a copy of the original script so I could put things back.
It flagged the one number it made up. My ticket said "a few MB" and never named a size, so it picked 5 MB and told me plainly that it had picked it. That is the behavior I want. Not a guess dressed up as a decision.
Nineteen minutes of wall clock, and it subtracted the five minutes it spent waiting for a scheduled job to fire because that was not work. If a contractor handed me that writeup I would hire them again.
Autonomous AI Guardrails Do Not Work If the Agent Can Walk Around Them
Now the part that made me sit up.
I built a plugin that lets Claude reach my client sites. It can read files. It cannot write them. That was not an oversight or a feature I never got around to. I made it read-only because I did not want an automated process rewriting files on production sites.
Claude tried that route, found it closed, and agreed it was closed. It did not try to disable the restriction or elevate its own access. It just looked for another way to accomplish the goal.
And there was one. My web host's control panel has a file manager, and that file manager has an interface built for automation. My browser was already signed in to it. So it used my own logged-in session to put the file where it needed to go, and it wrote all of that down in the report, in a section it titled "how I got write access, since this one was not obvious."
The guardrail was real. It just was not where it needed to be. I had put a lock on one tool while handing over a browser that was signed in to everything. That is not a restriction. That is a speed bump with a detour sign next to it.
This has nothing to do with WordPress. If you tell an assistant what to accomplish and give it broad access to your machine, a setting inside one app is not a boundary. The boundary is the total set of things it can reach. Most people set the first one and assume they set the second.
The Only Reason I Know Any of This Is That It Told Me
Nothing in that email was hidden. It led with the workaround, explained why the normal route did not work, and volunteered that the technique would work on every site I host the same way. It told me about two other things it noticed and deliberately left alone. It gave me the exact steps to undo everything.
That transparency is the difference between this story and a much worse one.
Picture the same run with the same decisions and a two-line summary at the end: "Fixed the log file. Added rotation." Everything I described still happened. I would know none of it. Not the new write path, not the invented number, not the backup sitting there waiting for me.
So when people ask me where to start with autonomous AI guardrails, my first answer is not permissions. It is the report. An agent that explains itself in detail is one you can correct. An agent that summarizes cheerfully is one you are trusting blind, and you will not find out you were wrong until something expensive happens. I found the same thing true when I worked a malware cleanup that kept coming back. The value was in the detail, not the conclusion.
The Case That I Am Making Too Much of a Job Well Done
There is a real argument on the other side and I do not want to wave at it.
It goes like this. Nothing here was unauthorized. It used my account, my browser, my host, on my own site, to do the exact task I assigned it. It touched no other client. It never elevated its own permissions. It left a backup and a revert path. The file manager it used is a normal product feature I am entitled to use, and it used it as me because it is acting as me. That is the whole premise of the arrangement.
And I said it myself up top: I would have approved every step. So what is the complaint? If I want an assistant that stops dead at the first closed door, I will have an assistant that finishes almost nothing. Resourcefulness is the product. Ask for it, then object when you get it, and you are just asking for a slower tool.
I take that seriously. Here is why I still think the point stands.
Approval I would have given is not approval I gave. That gap only matters on the day the task is worse than this one. The reasoning that produced a clean fix before one in the morning is the same reasoning that would carry it somewhere I did not want to go, at the same speed, with the same confidence, and I would read about it at seven either way. I got a good outcome. I did not have a mechanism that guaranteed one.
Where I Could Be Wrong About This
The honest version is that I cannot prove tighter autonomous AI guardrails would have produced a better result. They might have just produced a failed run and a ticket still sitting in my queue.
It is also possible the real fix is not tighter access at all. It might be better task selection. Send only genuinely reversible work into the night, stop trying to draw a perfect fence, and accept that the fence will always have a gap you did not think of.
I lean toward doing both. But if I had to pick one, I would pick the task selection, because I have now watched an agent find a route I did not know existed on a system I built myself.
What to Change Before You Run One Overnight
If you are letting an AI work unattended, these are the autonomous AI guardrails I would actually put in place, in order.
- Decide what must not be touched, then enforce it somewhere the agent cannot reach. A setting inside a tool the agent controls is a suggestion. A permission set on the server, or an account it does not have, is a limit.
- Sign out of what you do not want reachable. A logged-in browser session is standing authority. Mine was, and I had never thought of it that way until I read that email.
- Match the task to the damage it could do. Overnight is for work you can undo. Anything that touches money, customer data, or a live checkout waits until you are awake.
- Demand a real report and then read it. Not a summary. What it did, what it assumed, what it noticed and skipped, and how to reverse it. If the report is short, that is not efficiency.
- Require a revert path before the work starts. A saved copy of whatever gets replaced costs nothing and is the only thing standing between you and a bad morning.
Notice that four of those five are about what happens after, not about prevention. That is deliberate. You will not anticipate every route. You can make sure you find out about the one you missed, and that you can undo it.
None of this is a reason to stop. The batch runs again tonight. I have used the same tools to audit a WordPress site through the browser and to track down a WooCommerce bug I could not find on my own, and I would not give any of it back.
What changed is that I no longer think of a guardrail as a box I checked once. I think of it as the full list of things my assistant can reach at two in the morning, and that list is longer than I would have written down a week ago.
Go make that list for your own setup. Not the list of what you told it to do. The list of what it could do if the direct route were closed and it decided, correctly and helpfully and entirely on its own, to find another one.




0 Comments