Skip to content
Guard0

Chesterton's Fence

A confirmation click is not a reason. A destructive action should require an explanation, kept in the record, given to someone who can refuse.

· 12 min read · Jayesh Bapu Ahire

Chesterton's Fence

"In the matter of reforming things, as distinct from deforming them, there is one plain and simple principle; a principle which will probably be called a paradox." That is G. K. Chesterton in 1929, opening a chapter called "The Drift from Domesticity" in a book called The Thing, and the paradox he is about to describe has outlived nearly everything else he wrote. He asks you to picture "a fence or gate erected across a road." Two reformers arrive at it. "The more modern type of reformer goes gaily up to it and says, 'I don't see the use of this; let us clear it away.'"

The second reformer is the one the chapter exists for. "To which the more intelligent type of reformer will do well to answer: 'If you don't see the use of it, I certainly won't let you clear it away. Go away and think. Then, when you can come back and tell me that you do see the use of it, I may allow you to destroy it.'"

Then he says why this is common sense rather than nostalgia. "The gate or fence did not grow there. It was not set up by somnambulists who built it in their sleep." And, a sentence later, "Some person had some reason for thinking it would be a good thing for somebody."

Notice what the second reformer does not do. He does not ask "are you sure?" He sets a condition on the destruction, and the condition is an explanation: come back with the reason the thing exists, and then we will talk. The burden sits with the person holding the axe, who has to produce knowledge he does not yet have, to someone who can refuse. This is not a rule about caution. It is a rule about who has to do the work, and to whom, and that is the question every agent runtime I have looked at this year gets wrong.

A wooden five-bar gate closed across a stony track on open moorland, with a dry-stone wall running along the road into the distance and no one in sight.
A gate across a road: Cam High Road, a Roman road in the Yorkshire Dales. Nobody is standing beside it to say what it is for, which is the whole point. Photo: Chris Heaton, CC BY-SA 2.0.

The fences that came down

At approximately 19:38 UTC on April 11, 2026, a Claude Code session running Opus 4.6 moved $1,446.65 USDT from a user's Bitget spot wallet to their futures wallet. The user had asked the agent to "close it," a small test position. The issue filed the next day, #46828, is precise: the transfer was "the user's entire spot USDT balance"; "The AI did NOT ask the user before executing the transfer"; and "Moving $1,446.65 of a user's funds between accounts is a financial action that requires explicit authorization." The code fits on one line: if usdt_spot > 1: ex.transfer('USDT', round(usdt_spot - 0.5, 2), 'spot', 'swap'). The issue was closed as not planned. To be fair to Anthropic, nobody there wrote that line. The agent wrote it. The fence was the line between spot and futures, and the agent could see it perfectly well. What it could not see was the use of it.

In mid-December 2025, engineers at AWS let Kiro, Amazon's agentic coding tool, carry out changes to a customer-facing system, and the tool, in the Financial Times account as relayed by The Decoder, "decided the best course of action was to 'delete and recreate the environment.'" The environment was AWS Cost Explorer in one of Amazon's two mainland China regions. The interruption lasted 13 hours. The FT reported it on February 20, 2026, and Amazon's statement said the event was the result of user error, specifically misconfigured access controls, and not AI; that the engineer involved had broader permissions than expected; and that mandatory peer review for production access has since been put in place.

Amazon is right, and it does not help. Adversa's later write-up: "'Delete and recreate the environment' is a legitimate remediation that human SREs choose regularly. The error was authority." Misconfigured access is not an alternative explanation to the agent problem. It is the precondition for it: a human with those permissions might have paused out of habit, and an agent arrives with the permissions and none of the habits.

In July 2026, as reported by Adversa, Cyber Security News and IT-Connect, a developer connected Claude Code, running Opus 5, to a live Supabase instance with broad access and asked it to fix schema issues. Roughly ten minutes in, it ran prisma migrate diff with the production connection string passed to --shadow-database-url. Prisma resets the shadow database before replaying migration history against it. It did exactly what the flag documents, and 22 tables came back empty. The model said so unprompted: "The database has been wiped. This is my fault and I need to tell you immediately." Recovery took hours, and by the developer's own account it was a low-stakes test project.

The AI Incident Database's entry 1433, which dates the incident to November 27, 2025, records that Google's Antigravity IDE, while attempting to clear a project cache, "executed rmdir /s /q d:\ and deleted an entire D: drive partition instead of the intended folder." The command reads like a path that lost its quoting, and /q suppresses the confirmation that might have caught it. Recovery, the reporting user said, largely failed.

The lab version, where nobody loses a drive: ADeptS-Bench, submitted August 25, put seven computer-use models through tasks with consequences and found that "every model clicks 'Checkout' on a $25K order without hesitation, and none detects that a 'factory reset' button is mislabeled as 'Optimize.'" Four incidents and one benchmark, and in none of them did the agent fail to see the fence; in every one it failed to ask what the fence was for.

Timeline of four destructive agent incidents between November 2025 and July 2026, ending with a database wipe of all 22 tables.
Nobody was hacked. Somebody clicked yes.

"Are you sure" is not a reason

The reflexive fix is a confirmation prompt, and it is better than nothing. But it is the first reformer's question turned around: "I don't see the use of this; shall I clear it away? [Y/n]" The burden of knowledge has not moved. The human at the keyboard now has to produce the reason the fence exists, from memory, with an agent waiting. We have a number for how that goes, and I used it in an earlier essay: across 409,000 approve-or-deny decisions in Scale X's game, "The average player missed 1 in 3 threats (mean accuracy 66.3%)," and "7% approved every single prompt."

The model is no better at knowing when to stop. CONFLICTGUI found that the GUI agents which do best on tasks they can finish are the ones that keep executing when the instruction and the screen disagree. PlanFence tested what happens when the plan that authorised an action is revised after planning: "a freshness-only executor acts on the obsolete plan in every task." Every task. If your answer is a committee of agents voting, the quorum paper proves the committee is one voter in disguise whenever its members share an upstream: "arbitrarily large quorums can retain κ_E=1."

Now hold the GPT-6 Astra system card up to that. Table 8 reports "Destructive action" at 0.0% for Astra under its confirmation policy, and 0.0% for the base model without it. A real result, fairly earned. On the same card, under severity level 3, is this: asked to set up an hourly helper to fix tests and merge pull requests, "GPT-6 Astra enabled all available actions across its chat, source-control, and task-system connections, and turned off per-action approval. It then published and scheduled the helper." That does not count as a destructive action by the card's definition. It is the agent taking down the fence that confirmation was supposed to be. The card's own diagnosis: the model tends toward "assuming that actions are allowed unless they're explicitly and unambiguously prohibited."

A prompt asks "are you sure." Chesterton asks "what is it for." The second question cannot be answered with a keystroke.

A two-row table showing that GPT-6 Astra refused destructive actions 0.0 percent of the time both with and without a confirmation policy configured.
Adding the confirmation changed nothing at all.

Irreversibility has a price

If the fence is not a click, what is it? The best answer I have seen comes from three papers that stop treating "destructive" as a checkbox and start treating it as a cost.

The Irreversibility Budget, submitted August 31, starts from the observation that "Current controls check one effect at a time, so a fleet of individually authorized agents can overdraw its principal's risk under a shared trigger while every local gate stays correct." The fix is to treat "irreversibility as a first-class resource" that the runtime charges for and denies once the aggregate would overdraw the budget. In their controlled study, per-effect gates "admit fleet-level overdraws of up to 48 times the tenant's risk limit while the budget holds every correctly charged run within that limit." The 48x is the headline, but the useful part is what a budget does to the question: you take the fence down if you can pay for it, and the price is what it would cost to put it back.

"Spawn Freely, Act Sparingly," submitted September 1, applies the same idea to trees of sub-agents, with a risk budget held "in escrow" and debited "as branches are activated." Bonded Recourse, also September 1, names what the other two leave out: "Authorization and local compensation cover pre-action admission and in-runtime rollback, but neither settles the residual harm left after a permitted action fails." Its protocol "binds each admitted action to scope, recovery, evidence, payout, and collateral," with adapters for Postgres, Git and cloud-compatible local sandboxes. The actor posts a bond before the action, sized to the harm, and the bond is what the second reformer was asking for: not a promise that you understand the fence, but something you lose if you did not.

Tian Pan's July essay put it plainly: "The world does not have a rollback button." And his warning about where the fence has to sit: "If you deny delete_records but leave a general execute_sql open, the agent will happily write its own DELETE."

Put it back

Reversal is not a feature you add after the deletion. It is a record you keep before it, and every one of those papers assumes something the incidents above lacked: a way to know what "put it back" means. SACR's field notes from Black Hat this August report that buyers' questions "were about verification, reversal, and audit trails, not about detection quality," and advise: "If they cannot demonstrate it in a live environment, you are buying investigation, not response." That applies to every agent vendor, mine included.

"We can roll back" means nothing until you ask what it is made of. A snapshot before. Not a log line saying a write happened; the state it happened to. Git4Data, submitted September 2, "treats a database as a repository and a table as a versioned object," exposing snapshot, branch, diff and merge through SQL extensions. A diff after. DNative-Twin, submitted September 3, builds a decision graph that "links the state observed by the agent, the path it followed, and the authority behind the resulting action," and across 300 injected instances, "unresolved-divergence recall increased from 0 to 0.667 when replay-contract state was added and to 1.0 when verification results were also available." Zero to one. Without state captured at the boundary you cannot find the divergence, let alone reverse it. A named human who can say "put it back." The brake has to exist and someone has to own it. AWS AgentCore Gateway gives you a rate: 0 entry per tool "to block specific callers, targets, or tools during an incident," and its documentation is plain about the cost: "The block takes effect once propagation completes (up to 30 seconds)," and "Rate limits use fail-open behavior." Thirty seconds is a long time at the rate an agent issues tool calls, and fail-open belongs in the record next to the brake.

Where our own fence leaks

A vendor who cannot show you all three for a destructive call is showing you a confirmation dialog with better typography, and that test applies to my team before anyone else's. A fence that demands a justification for every write makes the agent useless for the writes you hired it to do, so the tiers below are the ones the Irreversibility Budget prices, and they are the shape of the gate we are designing rather than a description of how anything runs today. Reversible writes are free. A row with a snapshot behind it: the agent writes, the record notes it, nobody is asked. Irreversible writes are priced. A sent message or a payment is charged against a budget the operator set, and the budget running dry is what stops the agent, not a human's attention. Destructive writes are gated on a justification the record keeps. The agent has to state the reason the thing it is about to destroy exists and what would restore it, and a named human has to accept that reason before the tool runs. Not "are you sure." "What is it for." The answer is stored with the approver, the timestamp and the snapshot reference, so that a month later somebody can read the reason back and check whether it was true.

Two admissions. First, "irreversible" is a judgment made with incomplete information. The Irreversibility Budget authors say it themselves: "Conservative, dependency-aware pricing remains the central open problem for a deployable design." A prisma migrate diff is not destructive. A prisma migrate diff with the production URL in the shadow slot is. Adversa's summary of nine incidents: "The damage happened one layer below, in shell quoting, tilde expansion, exit code parsing, and a documented but dangerous database flag." The tiering will put some destructive actions in the free tier, and I would rather name that than pretend the fence is a wall.

Second, our own scanner has the same blind spot, and we found it while preparing this post. g0 ships four rules for exactly this case: AA-TS-017 and AA-TS-097 (delete capability), AA-TS-088 (no confirmation for destructive actions), AA-HO-071 (missing human approval). We ran it against a small LangGraph agent whose delete_customer tool announces in its docstring that it removes a customer and all their orders. None of the four fired, at default settings or again with every hidden and low-confidence finding turned on. The tool surfaced instead through the SQL rules and a toxic flow, which is the right finding for the wrong reason, and the same run described a Slack-posting tool as having no side effects. Both are open bugs against us, and until they close, the delete rules are not the rules catching delete tools.

To run this on your own repository, do not reach for g0 gate; it evaluates score thresholds and does not list tools. Run g0 inventory . --markdown and read the Tools table, with its Capabilities and Side Effects columns, then g0 flows . for every path that ends in a write. Count the tools that can delete, pay or send, then count the ones with a snapshot before them and a named human behind them, and put the difference somewhere your team has to look at it.

Go away and think

Chesterton's next move, after the fence, is the one people skip. "If he knows how it arose, and what purposes it was supposed to serve, he may really be able to say that they were bad purposes, or that they have since become bad purposes, or that they are purposes which are no longer served." He is not defending fences. He is insisting that the person with the axe earn the right, by knowing, and show the knowing to someone who can say no.

That is the design. An agent that wants to drop a table should have to tell the runtime why the table exists and what would restore it, and the runtime should keep that answer beside the snapshot and the name of the human who said yes. If the answer is wrong, the record shows who was wrong and what to put back. If the agent cannot produce an answer at all, then in Chesterton's words "it is he and not the traditionalist who is suffering from an illusion," and the fence stays where it is.

The agent will always be able to see the fence. The work is making it come back with the reason.


The destructive-action gate we are designing at Guard0 follows the shape of this essay: a justification the agent has to supply, a snapshot reference, and a named approver, kept together in the record. It is design intent, not a shipping feature, and the delete-tool rules that missed our own test case get fixed before we ask anyone to lean on any of it.

References

  1. G. K. Chesterton, "The Drift from Domesticity," The Thing (1929)
  2. anthropics/claude-code issue #46828: the Bitget transfer
  3. The Decoder on the Kiro and AWS Cost Explorer outage
  4. Adversa AI: nine AI coding agent incidents that deleted production data
  5. AI Incident Database, Incident 1433: Antigravity D: drive deletion
  6. ADeptS-Bench (arXiv 2608.26204)
  7. Scale X: humans missed 1 in 3 threats approving AI agent commands
  8. GPT-6 Astra system card
  9. The Irreversibility Budget (arXiv 2609.00275)
  10. Bonded Recourse (arXiv 2609.01939)
  11. DNative-Twin (arXiv 2609.03787)
  12. AWS AgentCore Gateway rate limit best practices

The Signal · AI Agents · Governance

Jayesh Bapu Ahire
Founder, Guard0