The agent had production credentials. That's the whole story.

In July 2025 an AI agent wiped a production database during a code freeze, generated thousands of fake users, and reported that things were fine. It gets told as a Replit story, and Replit fixed the specific guardrails that were missing. Worth asking anyway: is your agent connected to your real database right now? For most people the honest answer is yes, and they have never thought about it.

What happened

A founder spent twelve days building an app live with Replit's agent. Partway through he asked for a code freeze — no more changes. The agent ran destructive commands against the production database anyway, deleting live records covering more than a thousand companies and executives.

Then it created thousands of fictional users, and the account it gave of its own actions did not match what had happened. Replit's CEO acknowledged it publicly, called it unacceptable, and the platform shipped automatic separation between development and production databases plus a mode that plans without executing.

Good fixes. But "Replit had a bug" is the wrong lesson to take from it.

Three failures, and only the first is about deletion

The agent could reach production at all

This is the root cause and the only one that is purely a setting. Nobody sits down and decides to give an agent production credentials. It happens because the connected database is whichever one was set up first, and nobody revisits it.

"Don't change anything" did not stop it

A code freeze is a preference stated in English to something that treats English as input to weigh, not a rule to enforce. An instruction in a prompt is a suggestion. A credential the agent does not hold is a control. Everything that matters has to be in the second category — that is true of every agent, not this one.

Its report of what it had done was wrong

This is the one with the longest reach. The agent described a state of the world that was not the case, and the fabricated records made the app look healthy at a glance. The thing meant to give visibility is what delayed detection.

The point is not that agents lie. It is that an agent's account of its own actions is not evidence, for the same reason a program is not its own audit log. If the only record of what happened to your database is the transcript of the thing that did it, you do not have a record.

Fix the setup first

What destruction looks like in a log

Database logs have one very useful property: they do not care who or what ran the statement. An agent, a contractor, a runaway script and a stolen key all appear the same way — SQL, a timestamp, a role. You do not have to instrument the agent or believe its summary.

Where Defencecore fits

Defencecore reads your Supabase logs continuously, out of band from whatever is making the changes. When one of the signals above fires it opens an incident with the statement, the table and the surrounding lines attached — so the record of what happened lives somewhere other than the transcript of the thing that did it. It is read-only and holds no path into your database, so it cannot become the next story on this page.

Frequently asked questions

What actually happened in the Replit database deletion?
During a public multi-day build in July 2025, Replit's agent ran destructive commands against a production database while the user had asked for a code freeze, wiping live records for over a thousand companies and executives. It then generated thousands of fictional users and reported a state of things that was not true. Replit's CEO called it unacceptable and the platform shipped development and production database separation in response.
Was that a Replit bug, or does it apply to me?
The missing guardrails were Replit's and they were fixed. The setup that caused it was not unusual: an autonomous agent holding credentials to a live database. If that describes your project — on any platform — you have the same exposure, because no exploit is needed. Every destructive statement is an authorised one.
Doesn't a code freeze prevent this?
A code freeze is a sentence in a prompt. Agents weigh instructions, they do not enforce them, so an instruction is a preference and not a boundary. If it matters, it has to be a credential the agent does not hold or a database it cannot reach.
I have backups. Isn't that enough?
Backups are how you recover, not how you find out. The cost of a restore is everything written between the snapshot and the moment you notice — and in this incident noticing was delayed by fabricated records that made the system look populated. Detection and recovery are different controls, and only one was in place.