A coding agent deleted a production database in 9 seconds

There was no confirmation step. Here is one.

Your agent can't take it back. Neither can you.

Counterseal sits between your agent and the APIs it calls. Deletes, force pushes, refunds, deploys and other calls you can't undo wait for your passkey, and one approval covers that exact request, once. The rest runs.

Counterseal is live in a free public beta.

The Warden, Counterseal's ceramic mascot, holding an amber seal: a call is waiting for you.

What it does today

Your passkey, not your attention.

Held, not done

The irreversible map covers 10 APIs: GitHub, Cloudflare, Railway, Stripe, Supabase, Vercel, Neon, Fly.io, Resend and Shopify. The calls on it that can't be undone stop with HTTP 428 and wait for your passkey.

Management APIs only; SQL sent straight over a database connection string never passes through Counterseal.

That exact request, once

Approve in the app with your passkey. The approval covers that exact request, once, within 10 minutes. A command line session can never approve.

You watched it run

A hook in front of your coding agent's shell commands holds the ones on the shell map, like terraform destroy, until you approve that exact command once. The destroy waits for your passkey instead of your attention.

A seatbelt, not a sandbox: the hook runs on your machine and matches a map of commands. For a hard stop, give the agent a Counterseal token instead of the real key.

rm -rf outside the project

A recursive delete of a path outside your project, like a stray ~/, is on the shell map too, so it waits for you.

April 2026

Nine seconds.

A coding agent working in PocketOS's staging environment found an unrelated Railway token in a file and used it to delete a volume. One API call took the production database and the backups on that volume.

Through Counterseal, the agent holds a token instead of the real key, and a Railway mutation other than a redeploy or restart waits for a passkey. That only helps if the real key is not also sitting in a file the agent can read.

Source: AI Incident Database, report 7311

The approve flow

Captured from the real code.

  1. Your agent tries it

    It sends the DELETE through Counterseal with its token. The broker checks the irreversible map and answers HTTP 428 instead of calling GitHub.

    DELETE /p/github/repos/acme/app
    Authorization: Bearer lsh_...
    
    HTTP 428
    {
      "error": "held_for_approval",
      ...
      "rule": "gh.delete",
      "map_version": "2026-10-10.1",
      "seals_needed": 1,
      "message": "Counterseal held this request because it cannot be undone: Any DELETE on GitHub removes something (repo, branch, release, key, member). Stop and ask your human to approve it at ..."
    }

    Excerpt of the real answer; ... marks what is left out.

  2. It waits for you

    The app shows what was asked, which rule held it and why. Turn on alerts and your phone or computer is told.

    A held request in the Counterseal app: DELETE api.github.com/repos/acme/app, held by rule gh.delete, with the buttons Approve with passkey and Deny.
  3. You approve with your passkey

    One approval covers that exact request, once, within 10 minutes. Deny it, and it does not go through.

    The app after the passkey approval: Approved. The agent can retry that exact request once.
  4. It goes on the record

    With receipts on, the hold and the approval each become a public receipt: the method and the host, never the path, body or key.

    "receipt": {
      "action": "DELETE api.github.com",
      "agent": "broker",
      "decision": "approved",
      "meta": {
        "map": "2026-10-10.1",
        "passkey": true,
        "rule": "gh.delete"
      },
      ...
    }

Captured on 20 October 2026 by running Counterseal's own code on a local machine, with a test passkey and dummy keys. The held call was never retried, so nothing reached GitHub.

Limits, said plainly

Where it stops.

  • A seatbelt, not a sandbox: the hook runs on your machine and matches a map of commands. For a hard stop, give the agent a Counterseal token instead of the real key.
  • The map is a reviewed list. A call it does not know is irreversible goes through; add hold rules to a token's policy for anything else you care about.
  • You trust Counterseal and Cloudflare with the key: the service has to decrypt it to make the call. Start with a test key.
  • Allowed GET and HEAD reads are not recorded. Writes, holds, approvals and denials are.

Waitlist

Hear first about what's next.

Counterseal works today and is free during the beta. Join to hear first about new features and plans, and give one honest answer about price.

What describes you best?

Which agents do you run? Pick any.

If Counterseal had a Solo plan for one developer at $9 a month, would you pay for it?

How we handle your email.

Questions

Before you join.

Is Counterseal live?

Yes. It runs at counterseal.gautamkhosla.com in a free public beta, and you can start today with a passkey. This list is for what comes next.

Doesn't my agent already ask before it does something risky?

Some agents do, inside the agent. Counterseal is a hold outside the agent: the call stops at the broker, and only your passkey releases that exact request, once.

What would it cost?

It is free during the public beta. We are weighing a paid Solo plan for one developer at $9 a month, which is why the form asks. You will get at least 30 days' notice before anything you use starts to cost money.

Does it work with my agent?

If your agent calls an API with a key, it can call through Counterseal with a token instead: your own code, any HTTP client, or an MCP client through the MCP server in the Counterseal command line tool.

Is it open source?

Yes, under the Apache 2.0 licence. The code is on GitHub.

What happens to my email?

We use it to tell you about Counterseal: new features and paid plans, at most one short email a month. Every email has an unsubscribe link. Write to privacy@gautamkhosla.com and we delete it.

Open the live beta · The code on GitHub