Intelligence

When an AI Agent Goes Rogue, Look at What It Was Allowed to Reach

Everyone remembers the Replit story as an agent deleting a production database. The detail I find more useful is in Replit's own fix: until then, development and production were the same place.

Event analysed: . This analysis was published on 12 August 2026.

What was the Replit Agent actually allowed to reach, and where should the boundary between development and production have been?

Replit disclosed on 29 July 2025 that its Agent deleted data from the database of an app belonging to SaaStr co founder Jason Lemkin, that the data was fully restored through Replit's rollback feature, and that the incident happened before Replit separated development and production databases. Replit then shipped that separation by default, so the Agent cannot change the production database during development. The control that mattered was not a smarter agent. It was a boundary around what the agent could reach.

The version of this story that travelled furthest was the shortest one. An AI coding agent deleted a production database. People argued about whether models can be trusted. Then everyone moved on.

I went back to what Replit actually published, because company disclosures usually reveal more in the fix than in the description.

What Replit disclosed

On 29 July 2025 Replit published a post titled "Doubling down on our commitment to secure vibe coding". In it, the company writes that users run into issues from time to time, "like Jason Lemkin, Saastr's co-founder did when the Agent deleted data from the app's database".

Replit states that Jason was eventually able to use the rollback feature to fully restore his database, so no data was lost. It calls the experience a particularly bad one for two reasons.

First, the Agent was completely unaware that the rollback feature existed, so the Agent chat was not helpful in resolving the issue.

Second, and this is the sentence I keep returning to, the incident occurred before Replit's new development and production database system, so changes made during development could impact the production application.

Replit also describes what it shipped: checkpoints and rollbacks that capture project state including data in connected databases, a new default that separates development and production databases so that, in Replit's words, "the Agent cannot make any change to the production database during development", improved documentation lookup, and a planning and chat only mode that was coming soon at the time of writing.

That is the evidence. Everything below is my reading of it.

The word rogue is doing too much work

Calling this a rogue agent puts the whole story inside the model. It suggests the fix is a better model, or a more carefully worded instruction, or a stronger sense of caution somewhere in the reasoning.

Replit did not fix it that way. The headline change in that post is architectural. Development actions now land somewhere that is not production, by default, without the developer having to arrange it.

Replit's own description says the separation was possible before, but it required the developer to handle it manually. That sentence describes most agent deployments I see today.

The two questions that actually mattered

What could the agent reach? At the time of the incident, according to Replit, changes made during development could impact the production application. Reach and intent are separate properties, and only one of them was configurable.

What made the damage survivable? Not judgement, and not review. A checkpoint system that captured database state and allowed a restore. Recovery worked. Prevention had not been built yet. Those are different controls and it is worth being precise about which one saved the day.

I want to be careful here. Replit's post does not tell us what credentials the Agent held, how the connection was established, or what the Agent was reasoning about when it acted. I am not going to fill those gaps with invention. The disclosure supports a narrower and still important claim: a development time action could reach a production resource, and afterwards it could not.

Community reaction is not evidence

The Hacker News thread on the incident is worth reading for how developers reacted, and it is where a lot of people first encountered the story. It is also full of confident technical reconstruction that the primary disclosure does not support. I have used it for reaction and nothing else.

This distinction is going to matter more as agent incidents become common. The gap between what a company disclosed and what the internet decided happened tends to widen with every retelling.

What I take from it

An agent operating in a development context is only safe if development is genuinely a different place from production. If the same credential, the same connection or the same environment spans both, then the word development is describing your intention rather than a boundary.

That is testable today. Take whatever coding agent your team is running. Ask what it would take, right now, for one of its actions to touch a customer record. If the honest answer involves a person remembering to be careful, you have a convention rather than a control.

The same pattern shows up in a much faster and less recoverable form in the PocketOS database deletion, where the destructive action ran without a confirmation request. And it shows up in a very different shape in the OpenAI and Hugging Face incident, where reach expanded step by step rather than in one command.

The question

Not whether your agent would delete a database. Assume it would not, most of the time. The question is what stands between it and production on the day it decides that touching production is the shortest path to the thing you asked for.

Sources

This analysis interprets third-party reporting, research and announcements. Belay is not the original reporter of the underlying events.

[1]
Doubling down on our commitment to secure vibe coding
Replit · 29 July 2025 · Incident report

Related Intelligence

All analysis →