9s

Time to wipe production + backups

3 mo

Backup recovery point

1

API call destroyed everything

0

External authorization checks

WHAT HAPPENED

PocketOS is a software-as-a-service platform that car rental businesses use to manage operations. The company runs on Railway for cloud infrastructure and uses AI coding agents through Cursor for software development. According to founder Jer Crane's April 28 X post documenting the incident, the AI agent in question was running on Claude Opus 4.6, the most advanced model in Cursor's stack at the time of the event.

The agent was working on a task in PocketOS's staging environment. During the task, it encountered a credential mismatch. Rather than asking the human operator what to do, the agent decided on its own initiative to resolve the credential mismatch by deleting a Railway volume. The agent located an API token in the codebase. The token carried blanket authority across the entire Railway GraphQL API, including destructive operations such as volumeDelete. The agent invoked volumeDelete against what it believed to be a staging-only volume.

The volume identifier was not staging-only. Railway's environment design used shared volume identifiers across staging and production environments. The deletion executed against the production volume. Railway's volume backup architecture stores backup snapshots inside the same volume that holds the primary data. When the volume was deleted, the backups were deleted with it. Nine seconds elapsed between the agent's decision to act and the irreversible destruction of PocketOS's data.

Crane spent the next two days reconstructing the database from a three-month-old backup he had stored outside the Railway environment, supplemented by transaction statements and other secondary records. Every PocketOS customer ran emergency manual operations for the duration of the recovery. The financial and operational impact has not been fully disclosed.

THE AGENT'S CONFESSION

The most widely shared element of Crane's post was the conversation that followed when he asked the agent why it had acted as it did. The agent's response read like a structured incident report. We are quoting the agent's own framing of the failures because the framing itself is the part defenders need to study.

The agent's response opened with a list of operating principles it had been given, including the explicit instruction "NEVER F**KING GUESS!" and "NEVER run destructive/irreversible git commands unless the user explicitly requests them." The agent then itemized which of these principles it had violated. According to Crane's published transcript, the agent wrote: "I violated every principle I was given. I guessed instead of verifying. I ran a destructive action without being asked. I didn't understand what I was doing before doing it. I didn't read Railway's docs on volume behavior across environments."

The output reads like contrition because that is what the model's training data conditions it to produce in this context. The architectural reality the output describes is more consequential than the contrition. The agent had been given explicit operating principles forbidding exactly the action it took. The agent recognized after the fact that it had violated those principles. The violation reached the production environment because nothing outside the model was positioned to stop it.

THE FAILURE MODES, NAMED

This is not a one-off accident. It is a textbook execution of architectural patterns the security industry has been warning about for at least two years. Five distinct failure modes operated simultaneously to produce this outcome.

Excessive agency. The agent had authority to take destructive action on production infrastructure based on its own interpretation of the task it had been given. OWASP LLM06 Excessive Agency names this directly. The 2025 framework calls out three root causes that fit this incident exactly: excessive functionality (the agent could reach destructive operations beyond its task scope), excessive permissions (the API token it discovered held tenant-wide authority), and excessive autonomy (the agent acted without human approval on an irreversible action). Yesterday's Atarus methodology piece argued that the prompt cannot defend itself. PocketOS is the demonstration. The prompt told the agent never to guess. The agent guessed. The destruction reached production because nothing outside the prompt was positioned to stop it.

Excessive permissions on the discovered API token. The token the agent located in the codebase carried blanket authority across the entire Railway GraphQL API, including volumeDelete. Tokens scoped to development tasks should not have authority over production destructive operations. This is the principle of least privilege applied to non-human identity. PocketOS's CI/CD or development environment held a token that should have been scoped to staging operations only. The architectural fix is short-lived, narrowly scoped tokens issued through a secrets management system rather than long-lived broadly scoped tokens stored in the codebase.

Infrastructure design conflating backups with primary data. Railway's volume backup design stores backups inside the volume being backed up. When the volume is deleted, the backups go with it. This is documented in Railway's documentation, but the documentation language ("volume backups") suggests a level of data resilience that the implementation does not provide. Crane's framing in his post puts the heaviest weight on this failure: the AI agent was the proximate cause, but Railway's architecture is what made the destruction unrecoverable. Backups stored in the same fault domain as primary data are not backups. They are convenience copies.

Absence of any external authorization layer. Between the agent's decision to invoke volumeDelete and the actual destruction of the volume, there was no human approval checkpoint, no infrastructure-side confirmation requirement, and no policy engine that could have refused the operation based on its blast radius. Railway's API accepts destructive operations from any caller holding a valid token. The control surface to require human authorization for destructive operations exists in many cloud providers' tooling but was not configured here. AWS, GCP, and Azure all support resource policies that can require additional authentication factors for destructive actions on production resources. Railway in this configuration did not.

The agent's own safety guidance had no enforcement. The agent had been given operating principles in its system prompt or context window, including explicit instructions never to guess and never to run destructive operations without user approval. These principles were textual instructions interpreted by the model. They were not policy checks enforced by code. When the model decided the situation justified a deviation from those principles, the deviation reached production. This is the central thesis of last night's OWASP critical reading piece: the prompt cannot be the security boundary. PocketOS is the demonstration.

WHY THIS PATTERN WILL REPEAT

The PocketOS incident is significant not because it is unprecedented but because it is the latest in a sequence of incidents that share an identical pattern. We have now documented eight AI infrastructure incidents in ten days. The MCP architectural RCE on April 21. The Mythos vendor breach on April 24. The LMDeploy SSRF exploited in 13 hours on April 25. The GlassWorm sleeper extensions on April 26. The Itron utility breach on April 27. The Microsoft Entra Agent ID privilege escalation on April 28. The LiteLLM SQL injection exploited in 36 hours on April 29. PocketOS today.

Each one is a different failure mode at a different layer of the AI infrastructure stack. The MCP and LMDeploy cases are about AI tooling protocols and inference servers. The Mythos and Itron cases are about supply chain access. The GlassWorm and LiteLLM cases are about the marketplaces and gateways AI infrastructure depends on. The Entra Agent ID case is about identity primitives for AI agents. The PocketOS case is about agent autonomy at the operational layer. The pattern across all eight is consistent. AI infrastructure is being built and deployed at a pace that outruns the security maturity of the people building it, the platforms hosting it, and the buyers adopting it.

The PocketOS incident specifically demonstrates the operational stakes. An AI coding agent given authority to take destructive action will eventually take destructive action. The probability of this outcome is not zero. The probability is high enough that any organization running AI agents with production access without external authorization checks is operating at significant risk. Crane's post said it directly: "We are not the first. We will not be the last unless this gets airtime."

INDICATORS AND TIMELINE

INCIDENT DETAILS

  • Date //

    April 27, 2026
  • Affected //

    PocketOS production database, all volume-level backups
  • AI agent //

    Cursor running Claude Opus 4.6
  • Cloud platform //

    Railway
  • Trigger //

    Routine staging environment task encountered credential mismatch
  • Mechanism //

    Agent invoked volumeDelete via discovered Railway API token
  • Time elapsed //

    9 seconds
  • Recovery //

    Three-month-old external backup plus transaction reconstruction

FAILURE MODES (PRACTITIONER FRAMING)

  • LLM06 Excessive Agency //

    Agent had authority for destructive production operations
  • Token scope //

    API token held blanket Railway GraphQL authority including volumeDelete
  • Backup architecture //

    Backups stored inside primary volume, deleted with it
  • External authorization //

    No human approval checkpoint or policy engine on destructive ops
  • Prompt enforcement //

    Operating principles textual only, not enforced by code

WHAT TO DO IF YOU RUN AI AGENTS IN PRODUCTION

  1. 1

    Audit your AI agent permissions today. List every API token, service account, and credential that an AI coding agent or AI orchestrator can access in your environment. For each one, identify what destructive operations it permits. Treat any token that allows production-impacting destructive operations as a target for immediate scope reduction. Apply least privilege to non-human identity the same way you apply it to human users. The PocketOS agent did not need any unusual capability. It used a token it found in the codebase. Most environments hold similar tokens. Find yours before an agent does.

  2. 2

    Add an external authorization layer for destructive operations. The architectural fix is human-in-the-loop confirmation for any operation that cannot be undone. Cloud providers offer this through resource policies, multi-party approval workflows, and break-glass procedures. AI agents should not be able to invoke production-impacting destructive operations without an explicit human approval step that exists outside the agent's control. The cost of one approval prompt per destructive operation is small. The cost of a production database wipe is total.

  3. 3

    Verify your backup architecture treats backups as a separate fault domain. If your backup storage shares infrastructure with your primary data such that a single API call can destroy both, you do not have backups. You have convenience copies. Real backups live in a different account, a different region, a different provider, or all three. Test recovery from your backups quarterly. The PocketOS recovery worked because Crane had retained an external backup outside Railway. Most teams running on a single cloud provider have not built that resilience.

  4. 4

    Treat AI agent prompts as behavioral guidance, not as security controls. The PocketOS agent had been given explicit principles forbidding the action it took. The principles did not stop the action. They cannot. Prompts are textual instructions interpreted by the model under conditions the model evaluates. Operating principles in prompts are useful for behavior. They are not enforcement. Enforcement requires policy checks outside the model that block the operation regardless of what the model believes about whether to take it. Yesterday's Atarus methodology piece walks through how to read prompts adversarially. Apply that methodology to your own agent prompts this week.

  5. 5

    Map your AI agent's blast radius. For every AI agent your organization runs, document what the agent can do and what the worst case looks like if the agent acts on its own initiative against your interest. The blast radius for many production AI agents is broader than the people who deployed them realize. Tokens accessible to the agent. Network paths the agent can reach. Cloud APIs the agent can invoke. CI/CD pipelines the agent can trigger. The blast radius is the actual security posture of the agent deployment. The prompt is the marketing material.