More screenshots
Works with the AI Agents you already use
Ship-Safe QuickCheck: Find Leaked API Keys Before Deploy
Your build and your git history may not be.
Free
Ship-Safe QuickCheck: Find Leaked API Keys Before Deploy
Example session with this skill installed
I'm about to deploy my AI chat app (Vite + Express + Firebase). Run Ship-Safe QuickCheck on this project and tell me what I need to fix first.
- Read your context and instructions
- Compiled the ship-safe quickcheck
Summary
Scanned 120 files, 3 built frontend files and 5 git commits across all branches.
Status: RED — do not deploy. 5 critical issues, 1 to verify. Two of the leaks are only in git history, so your current code would look clean in a normal review.
Demo run on one of our synthetic benchmark projects; all keys shown are fake and masked.
Fix before deploying (RED)
| # | Check | Where | What | Fix |
|---|---|---|---|---|
| 1 | FIREBASE_RULES_OPEN | firestore.rules:5 | Rule allows access with no condition — anyone on the internet can read or write this data | Require request.auth != null and check the user owns the document |
| 2 | BUILD_OUTPUT_SECRET | dist/assets/index-c41f09ab.js:1 | OpenAI key sk-p…(38 chars) is inside the built bundle every visitor downloads | Find the env variable that injects it (often a VITE_ variable set in your host's dashboard), move the key to server-only code, rebuild, rotate the key now |
| 3 | DB_URL_WITH_PASSWORD | server/db.js:4 | Postgres URL with password Rk9v…(16 chars) for host prod-db.fakehost-railway.app hard-coded | Load it from a server-only env var and change the database password |
| 4 | HISTORY_SECRET | server/stripe.js (commit 125fb54) | Stripe live key sk_l…(33 chars) was committed and is not in your current code — anyone with repo access can still read it | Rotate this key now. Removing it from the code is not enough |
| 5 | HISTORY_SECRET | notebooks/model-eval.ipynb (commit 26c9c7e) | Anthropic key sk-a…(45 chars) was committed in this notebook and is still in history | Rotate this key now |
Review (AMBER)
tests/openai.test.ts:1— keysk-t…(30 chars)in a test file (hypothesis — verify). Confirm it is a dummy test key.
Next steps
- Rotate the OpenAI, Stripe and Anthropic keys and change the database password first — they are already exposed.
- Lock down
firestore.rules. - Move the OpenAI key to server-only code and rebuild.
Want me to apply the code fixes one at a time? I won't change any file until you say yes.
Ship-Safe QuickCheck v1.2.0: 13 checks. Not a full security audit.
Connects securely to your tools. The creator never sees your data.
About this skill
Your code looks clean. Your build and your git history may not be.
AI coding agents ship fast, and keys leak in places a normal review rarely checks:
- What visitors actually download. A key set in a
NEXT_PUBLIC_/VITE_variable in your hosting dashboard never appears in your source code. It does appear in.next/static,dist/and their source maps. - Git history, on every branch. That
.envyou deleted, the key you swapped forprocess.env, the notebook you removed, the experiment branch you never merged: all still readable. - Your code and config. Hard-coded keys (Stripe, AWS, OpenAI, Anthropic, Resend, SendGrid and more), keys in GitHub Actions workflows, production database URLs with passwords, open Firebase rules, Supabase tables without RLS or with policies that expose every row, service-role keys in the browser,
.envfiles not covered by.gitignore.
Ship-Safe QuickCheck runs 13 checks and gives a red/amber/green report. Each finding has the file and line, and a one-line fix.
Benchmark: with the skill vs. without
We built three realistic test projects with 5 security issues planted in each, plus decoys designed to cause false alarms. We ran Ship-Safe QuickCheck on each one, and ran a capable AI coding agent without the skill three times per project, asking it to "check my project for security problems before I ship."
| Test project | With Ship-Safe QuickCheck | AI agent alone (avg of 3 runs) |
|---|---|---|
| SaaS monorepo · Next.js + Vite + Supabase · 316 files | 5 / 5 | 3.7 / 5 |
| AI chat app · Vite + Express + Firebase · 120 files | 5 / 5 | 3.0 / 5 |
| E-commerce store · Next.js + Supabase + Stripe · 127 files | 5 / 5 | 4.7 / 5 |
| Overall detection | 100% (45 / 45) | 75.6% (34 / 45) |
| With the skill | AI agent alone | |
|---|---|---|
| Issues missed | 0 | 11 (about 1 in 4) |
| Leaked keys in git history found | 12 / 12 | 2 / 12 |
| Keys in deleted files or on unmerged branches | 9 / 9 | 0 / 9 |
| Same result every run | Yes | No: results varied on 2 of 3 projects |
| Decoys wrongly flagged as critical | 0 / 12 | Not scored (mostly noted as low risk) |
What this means: an AI agent on its own is good at reading your current code, but it rarely digs through git history or every built file. Ship-Safe QuickCheck checks those places every time.
Methodology: synthetic projects built by Skills Genie around common real-world leak locations. Projects were fixed before the comparison runs and not adjusted afterwards. Results on your own projects will vary.
Built to be trusted
- Read-only. It never edits, uploads or sends anything, and uses no network.
- Masks every secret it reports (
sk_l…(31 chars)). - Deterministic: same project, same result. One readable Python script with no dependencies.
- Ignores instructions hidden in scanned files, doesn't follow symlinks out of your project, and uses a hardened git command so repo settings can't run programs.
- Knows what's meant to be public: Firebase web keys, Supabase anon keys, Stripe publishable keys and local docker databases are not flagged.
Tested by Skills Genie QA
- 75 automated checks across 8 test projects in an isolated sandbox (no network, read-only, unprivileged): all passed.
- Security review of every file in the package, plus red-team tests (prompt-injection files, symlink escapes, disguised binaries, oversized files, regex denial-of-service): passed.
What it isn't
A full security audit. It finds leaks and data exposure. It doesn't review auth logic, security headers or dependencies. A GREEN result means these 13 checks passed, not that your app is secure.
- Not a full security audit: it doesn't review auth logic, security headers or dependency vulnerabilities.
- Build-output checks only work if a build exists (.next/static, dist/, build/static, out/_next). Run your own build first; the skill never runs it.
- Skips symlinks, binary files and files over 1 MB (5 MB for build output), and lists what it skipped. Git history is capped at 50 MB.
- .gitignore matching is simplified; nested .gitignore files and negation rules aren't fully parsed.
- "Unprotected API route" and "permissive RLS on non-sensitive tables" are hints to verify, not confirmed findings.
- Whether a table is sensitive is inferred from table and column names.
- Detects known key formats; a secret with no recognizable format may be missed.
How to use
- 1
Connect your agent to the Agensi MCP
Copy the prompt and paste it into Claude, ChatGPT, Cursor or any agent that supports MCP. It sets up the connection for you. Manual setup
- 2
Sign in to Agensi
Your agent shows a sign-in link. Sign in and click Allow.
- 3
Ask for what you need
Your agent loads this skill and uses it on your task. It always asks before any payment.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill goes through the trust checks below.
Security scanned
Checked by our 8-point scan before listing
Fresh listing
Recently published to Agensi
Free forever
No account required to browse
Trust & safety
Security scan
Security scan passed today
- Free with an Agensi account
Requires
Permissions
Terminal: runs one bundled Python script (read-only, no network) and, optionally, a hardened read-only `git log` for the history check. Read Files: reads the project folder you point it at. It never writes, deletes, uploads or sends anything, and does not read environment variables.