Oct 30Supabase stopped auto-exposing new tables. An agent fixing error 42501 can re-open them.Check yours →

Your AI agent said “Done.” See what it actually built.

Muretto shows every database, bucket and deployment your coding agents created, and which ones anyone can open.

Open sourceRead-onlyRuns on your machine

Your agent session

Add customer import with file uploads

Done! Customer import is ready.

✓ Task complete

What Muretto found3 exposed
  • customerstableexposed
  • customer-filesbucketexposed
  • preview-a81fdeploymentexposed
  • process-importfunction
  • import-testdatabase branchreview due

The problem

Agents are building in production.Nobody's checking their work.

1 of 3

Agents create real infrastructure.

Ask for a feature and your agent writes the code, then creates the table, the storage bucket and the preview deploy to go with it.

~70%
of Stripe CLI requests for API resources now come from agents.Source: Stripe ↗
2 of 3

The code gets reviewed. The infrastructure doesn't.

Every line the agent wrote shows up in a pull request. The tables, buckets and deployments it created in your cloud accounts show up nowhere.

170
of 1,645 scanned Lovable apps exposed Supabase data (CVE-2025-48757).Source: VibeAppScanner ↗
3 of 3

And the agent's summary isn't the truth.

A session log records what the agent tried and what the API answered at that moment. Only your providers know what exists now, and who can reach it.

1,206
executive records wiped by Replit's agent during a code freeze in July 2025. The user says it then hid what it had done.Source: eWeek ↗

Meet Muretto

Ask what your agents built.Get the answer from your real accounts.

Traced to the session

Every database, bucket and deployment is matched to the agent session that created it, with the evidence. If it can't prove it, it says creator unknown.

Exposure in plain words

What anyone on the internet can read, download or open is flagged in red, worst first.

Changes nothing

Read-only by design. It looks at your accounts and never touches them.

~/acme/web

Real output format from the CLI's formatter. Fictional projects and names.

What it catches

What your agent mighthave left behind.

Muretto checks your real accounts, not the agent's summary, and tells you in plain words.

tablecustomersexposed

A table anyone can read

Row level security is off, so your app's public key reads every row.

via the Supabase security advisor

bucketcustomer-filesexposed

Files anyone can download

The storage bucket is public. Every upload is one URL away, no key needed.

via the bucket's public setting

deploymentpreview-a81fexposed

A preview anyone can open

Deployment protection is off, so the preview URL works without logging in.

via Vercel deployment protection

envNEXT_PUBLIC_API_SECRETexposed

A secret shipped to the browser

A secret-looking variable with a NEXT_PUBLIC_ prefix ends up in client code.

checked by name; values are never stored

branchimport-testreview due

A test branch still running

A week-old database branch the agent made for testing, billed by the hour.

7 days old · you decide: keep or not needed

projectacme-prodcreator unknown

Something nobody can explain

No agent session created it. Muretto says so plainly instead of guessing.

no agent evidence · never guessed from timing

How it works

Set up once.Then just run muretto.

  1. Install

    $ npx muretto init
    # adds the hook, then connects your providers

    Adds a tiny Claude Code hook that notes what each agent session does. Your settings are backed up, and it's removable.

    ~3.5 ms per callnever blocks the agent
  2. Connect

    Supabaseread-only token
    Vercelread-only token

    Give it read access to the accounts your agents touch. Tokens live in your OS keychain.

    no account neededno telemetry
  3. Run

    $ muretto
    Muretto · alice · checked 3 min ago
    5 agent-created resources
    3 exposed · 1 needs review

    See everything your agents created and what's open to the internet right now.

    changes nothing

Under the hood:hooks capture tool calls→read-only APIs list what exists→each resource is exact or creator unknown

Trust and security

It can look.It can't touch.

Read-only, enforced in code

Every provider request goes through one allowlisted module. A test fails if any other code can reach the network.

Never guesses

78scenarios0wrong labels

In our test suite, mutation-tested. Every resource is exact, with evidence, or creator unknown.

Secrets stay secret

SUPABASE_KEY=eyJhbGciOiJIUzI1NiIs…
SUPABASE_KEY=[REDACTED]

Redacted when recorded and again at output. Tokens live in your OS keychain. Env var values are never stored.

Local-first. No telemetry.

hooks→local SQLite→team sync, opt-in

Works without an account. Team sync is opt-in, and every field it sends is documented.

SYNC_PAYLOAD.md ↗

Apache-2.0

$ git clone https://github.com/tolgayayci/muretto
$ make test # no network, no accounts

Read every line, run it yourself, fork it.

github.com/tolgayayci/muretto ↗

Read the full security model →

Who it's for

Weekend project or production team.Same blind spot.

Free · Apache-2.0

Building solo

You build with Claude Code. Muretto tells you when your agent left a table readable, a bucket public or a preview open.

  • Runs on your machine. No account.
  • One command: muretto exposed
  • See which agent session made each one.
$ muretto
Muretto · alice · checked 3 min ago
5 agent-created resources · 5 still exist · 3 exposed · 1 needs review
3 resources with creator unknown
Install the CLIfree, Apache-2.0
Early access

Running a team

Sync sessions across your team, see which teammate's agent created what, review unknown creators, keep the evidence.

  • Opt-in. Every synced field is listed in SYNC_PAYLOAD.md.
  • A review queue for creator unknown.
  • A shared dashboard with a live feed.

What sync sendsexcerpt · SYNC_PAYLOAD.md

  • session.task_title80 characters at most, redacted
  • session.repo.path_hasha hash; the path never leaves
  • resource.nameredacted
  • tokens · keys · full promptsnever sent

Integrations

Starts with Claude Code.Built for every agent and provider.

Activeshipped and live-tested Early accessworks, opt-in Plannedpublic issue or roadmap Exploringresearched, no commitment

Agents

Claude CodeActive
Codex CLIPlanned
CursorPlanned
Gemini CLIPlanned
WindsurfPlanned
muretto session → resource
→ exposure

Providers

SupabaseActiveprojects, branches, edge functions, storage buckets, tables
VercelActiveprojects, deployments, domains, env var names
Stripe ProjectsExploring
NeonPlanned
CloudflarePlanned
GitHubPlanned

Don't see yours?

New provider? One YAML file.

Add a provider in an afternoon. Adapters declare scan endpoints, how to extract resource ids from tool calls and exposure rules, and every network call still passes the read-only allowlist.

Write an adapter Adapter registry coming soon
adapters/supabase.yaml · excerpt

Why now

The defaults just changed.The agents didn't.

Oct 30, 2026 · Supabase

New tables are no longer exposed automatically. Existing ones keep their grants.

And the obvious fix for error 42501 re-exposes them.

$ muretto exposed # check yoursSupabase changelog ↗
error 42501: permission denied for table orders
agent › GRANT ALL ON ALL TABLES IN SCHEMA public TO anon, authenticated;
⚠ every public table without RLS is readable again

Illustration of a typical agent fix.

Where it's going

Today built, live-tested

Claude Code on Supabase and Vercel.

  • The CLI
  • Supabase and Vercel adapters
  • Team sync early access

Next planned

Every agent and provider.

  • Codex CLI and Cursor
  • Neon, Cloudflare and GitHub adapters
  • A GRANT re-exposure detector
  • PR and session review

Then no date yet

Review and policy for everything agents change outside the repo.

  • Opt-in policies
  • Slack alerts
  • SOC 2 evidence
  • Adapter registry

How it compares

Agents report what they did.Muretto checks what actually exists.

ToolAgent sessionsWhat exists nowExposureWhich session made it
Claude Code OpenTelemetry / Compliance APISees sessions, not what exists in your providers.✓———
Supabase Security AdvisorSees exposure, not which agent session created it. Supabase only.—Supabase✓—
Stripe ProjectsService-level ledger of what was provisioned through it. Doesn't see tables, buckets or deployments created inside.—services——
Agent session loggersRecord what the agent said and ran, not provider state.✓———
MurettoJoins session → resource → exposure, with evidence.✓✓✓✓

No tool we found joins all four. We're generous on purpose: if we got yours wrong, open an issue.

Full comparison →

Know what your agents left behind.

Open source. Runs on your machine. Only ever reads.

available with v0.1.0
$