CLI tool that detects risky Supabase data access configurations exposed through vibe-coded web apps.
- Discovers Supabase project refs and API keys embedded in web pages and JavaScript bundles
- Fetches and analyzes Supabase OpenAPI schema exports
- Probes live table endpoints to check what data is actually readable, writable, updateable, and deletable
- Flags risky patterns: exposed tokens, email fields, broad write surfaces, missing auth docs
- Compares local schema exports against live projects to detect drift
python3 -m pip install -e .Fetches a page, scans inline and linked JavaScript for Supabase project refs, URLs, API keys, and createClient(...) calls.
python3 -m bad_vibes.cli discover https://target.exampleWith source snippets:
python3 -m bad_vibes.cli discover https://target.example --include-sourceAuto-run live access probes for any discovered credentials:
python3 -m bad_vibes.cli discover https://target.example --run-probepython3 -m bad_vibes.cli analyze schema.jsonCombines read and safe write probes into a single access matrix:
python3 -m bad_vibes.cli probe-access \
--project-ref your-project-ref \
--api-key "$SUPABASE_ANON_KEY"Single table:
python3 -m bad_vibes.cli probe-access \
--project-ref your-project-ref \
--api-key "$SUPABASE_ANON_KEY" \
--table usersWith real insert testing:
python3 -m bad_vibes.cli probe-access \
--project-ref your-project-ref \
--api-key "$SUPABASE_ANON_KEY" \
--test-postpython3 -m bad_vibes.cli probe \
--project-ref your-project-ref \
--api-key "$SUPABASE_ANON_KEY"Non-destructive PATCH/DELETE probes using impossible filters:
python3 -m bad_vibes.cli probe-write \
--project-ref your-project-ref \
--api-key "$SUPABASE_ANON_KEY"python3 -m bad_vibes.cli validate \
schema.json \
--project-ref your-project-ref \
--api-key "$SUPABASE_ANON_KEY"With live probing:
python3 -m bad_vibes.cli validate \
schema.json \
--project-ref your-project-ref \
--api-key "$SUPABASE_ANON_KEY" \
--probe-liveCompare two local schema files:
python3 -m bad_vibes.cli validate \
schema.json \
--live-schema another-export.jsonAll commands support --format json:
python3 -m bad_vibes.cli analyze schema.json --format jsonProbe commands accept --probe-timeout (default 30s) to prevent hangs on unresponsive endpoints:
python3 -m bad_vibes.cli probe-access \
--project-ref your-project-ref \
--api-key "$SUPABASE_ANON_KEY" \
--probe-timeout 10