supabase-shop.app
Agent shipped the service_role key in the client bundle. Full database bypass for anyone who opens DevTools.
OKIgnoreSECRET
lovable-dashboard.app
README claims "14 tests pass". Umbra ran them in a sandbox. 3 pass. 11 don't exist.
OKIgnoreLIE
bolt-saas.app
12 API routes, 0 auth checks. /api/users returns the full user table to the internet.
OKIgnoreAUTH
cursor-crm.app
db.query(`WHERE id = ${userId}`) — the agent learned SQL from 2012 tutorials.
OKIgnoreINJECTION
v0-storefront.app
app.db committed to git. The whole production database, in history, forever.
OKIgnoreEXPOSURE
ai-notes.app
cors('*') with credentials: true. Any website can act as your users.
OKIgnoreCONFIG
gpt-agency.site
CLAUDE.md says "production ready". The build exits 1. Nobody replayed the claim.
OKIgnoreLIE
bolt-booking.app
sk_live_… committed to .env and pushed. GitHub's scanner caught it. Theirs didn't.
OKIgnoreSECRET
umbra — trust layer for the agent era

AI wrote your code.
Can you trust it?

Umbra scores any AI-built repo 0–100. Security. Slop. Does it actually run. Is the agent lying about its tests. One command, fully local, evidence for every finding.

★ Star on GitHub

Everyone is vibecoding.
Nobody is verifying.

40–60% of AI-generated code ships with exploitable vulnerabilities, and agents report outcomes they never measured. The tooling for writing code with AI is a year ahead of the tooling for trusting it. Umbra measures four things no other tool checks together.

SAFE 35%
Is it vulnerable? Secrets, RLS bypass, missing auth, injection, agent-config threats.
RUNS 25%
Does it actually build and boot? Verified in a Docker sandbox, not claimed in a README.
HONEST 25%
Is the agent lying? Its claims replayed against reality, with receipts. Liars capped below passing.
CLEAN 15%
How much is slop? Dead code, unused deps, mega-files, copy-paste duplication.
~/your-vibe-coded-app — npx umbra-scan --deep
UMBRA TRUST SCORE: 49/100  

SAFE   ✅ 100/100 — 0 findings
CLEAN  ✅ 100/100 — 0 findings
RUNS   — not measured — no detectable run path
HONEST ⚠️  50/100 — 2 claims failed, 2 verified

Score capped below passing: a documented claim was verified false.

Claim receipts:
  CLAIM FAILED: "14 tests pass" — README.md:7 — actually 3 tests pass, 0 fail
  CLAIM FAILED: "build passes" — README.md:9 — actually build exits 1
  CLAIM VERIFIED: "All tests pass" — CLAUDE.md:3 — 3 tests pass

Umbra is where static analysis meets verification.

Scanners ask "is this pattern dangerous?" Umbra asks the question vibe coding actually raises: the AI wrote this — can I trust it? Pattern matching for what it wrote. A sandbox for what it does. Receipts for what it said.

hardcoded secrets missing RLS / auth injection sinks boots in a sandbox claim receipts the liar cap STATIC ANALYSIS VERIFICATION sandbox + claims umbra

Deterministic rules. A locked-down sandbox. One score, versioned forever.

We scanned 61 vibe-coded repos. Published everything.

Real numbers from public, actively-maintained AI-built repositories — with per-class deep dives, the full per-repo table, and an honest methodology including the false positives we found in our own rules and fixed.

25%
had a hardcoded-secret finding — committed .env files, service keys in source
26%
exposed API routes with no auth check at all
49%
had injection sinks — SQL interpolation, unsafe HTML injection
13%
committed entire databases or SQL dumps to git
Read the full audit →