Most vibe-coded apps that get burnt at launch fail on the same ten things: a secret key in the front end, a database anyone can read, an admin route with no auth check, or a free API endpoint someone scripts to run up your bill. This loadout gives your agent a repeatable pre-launch audit and a set of rules that stop the worst mistakes being written in the first place. Stack-agnostic: works for Next.js, Vite, Astro, Express, Flask, Supabase, Firebase and friends.
What's in it
- Launch-check skill that produces a plain-English, severity-ranked fix list
- Checklist reference covering secrets, auth, data access, abuse, headers and dependencies
- Always-on rule that stops agents hard-coding or logging secrets
- Read-only by design — the skill reports and proposes fixes, it does not rewrite your app unasked
You'll need
- Tools:
git
Verification
| Check | Result | What we found |
|---|---|---|
| Listinglisting.yaml matches the schema and declares every file in the folder. | Pass | Schema valid; 6 files declared, none missing or extra
|
| Files parseJSON parses; SKILL.md and .mdc front matter is valid YAML with the fields each agent needs; code fences are closed. | Pass | All 6 files parse; front matter valid |
| AdaptersCLAUDE.md imports @AGENTS.md, GEMINI.md imports @./AGENTS.md, and both match the generator. | Pass | CLAUDE.md and GEMINI.md import AGENTS.md and are up to date
|
| Install pathsEvery file lands where each agent documents it, with no collisions, and the laid-out project is re-discovered correctly. | Pass | Correct paths for all 5 agents; layouts re-discovered
|
| MCP configmcp.json is structurally valid, converts to each agent's format, declares no literal secrets, and referenced packages exist on npm/PyPI. | Not applicable | No MCP servers in this loadout |
| Safety scanThe intake scanner finds no credentials, risky shell, hidden Unicode or prompt-injection wording, and the listing's network flag is honest. | Pass | Clean: no credentials, risky shell or hidden text
|
| ReferencesLinks and file paths between the loadout's files resolve, including for each agent's installed layout. | Pass | 2 references between files resolve for every agent |
| Size limitsFile count and sizes are within the submission limits; SKILL.md bodies stay under 500 lines. | Pass | 6 files, 8.9 KB total; largest skills/launch-check/references/checklist.md 2.7 KB
|
| LicenceA recognised SPDX licence, with the licence text available. | Pass | MIT, by Agent Loadout; text in the repository LICENSE |
| Starter buildA minimal fixture project with the loadout applied installs and builds or type-checks, and the loadout's own code examples compile. | Not applicable | Not applicable: stack-agnostic security rules with no project or code to build
|
What this means: a script checked the files themselves: they parse, they install where each agent looks, any MCP config is sound, the safety scan is clean, references between files resolve, and, where a free and repeatable fixture exists, a small starter project builds with the loadout applied. No AI agent was run. Per-agent results ("tested with agent") are separate and stay untested until an agent actually runs.
Install
Choose your agent. Run the commands from your project root, or download a zip already laid out in the right folders.
Claude Code reads CLAUDE.md (imports AGENTS.md with @AGENTS.md) and skills from .claude/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/AGENTS.md curl -fsSL --create-dirs -o CLAUDE.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/CLAUDE.md curl -fsSL --create-dirs -o .claude/skills/launch-check/SKILL.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/skills/launch-check/SKILL.md curl -fsSL --create-dirs -o .claude/skills/launch-check/references/checklist.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/skills/launch-check/references/checklist.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
CLAUDE.md | CLAUDE.md |
skills/launch-check/SKILL.md | .claude/skills/launch-check/SKILL.md |
skills/launch-check/references/checklist.md | .claude/skills/launch-check/references/checklist.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
Codex CLI reads AGENTS.md and skills from .agents/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/AGENTS.md curl -fsSL --create-dirs -o .agents/skills/launch-check/SKILL.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/skills/launch-check/SKILL.md curl -fsSL --create-dirs -o .agents/skills/launch-check/references/checklist.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/skills/launch-check/references/checklist.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
skills/launch-check/SKILL.md | .agents/skills/launch-check/SKILL.md |
skills/launch-check/references/checklist.md | .agents/skills/launch-check/references/checklist.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
Cursor reads AGENTS.md + .cursor/rules/*.mdc and skills from .agents/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/AGENTS.md curl -fsSL --create-dirs -o .cursor/rules/no-secrets.mdc https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/.cursor/rules/no-secrets.mdc curl -fsSL --create-dirs -o .agents/skills/launch-check/SKILL.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/skills/launch-check/SKILL.md curl -fsSL --create-dirs -o .agents/skills/launch-check/references/checklist.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/skills/launch-check/references/checklist.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
.cursor/rules/no-secrets.mdc | .cursor/rules/no-secrets.mdc |
skills/launch-check/SKILL.md | .agents/skills/launch-check/SKILL.md |
skills/launch-check/references/checklist.md | .agents/skills/launch-check/references/checklist.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
Gemini CLI reads GEMINI.md (imports AGENTS.md with @./AGENTS.md) and skills from .agents/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/AGENTS.md curl -fsSL --create-dirs -o GEMINI.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/GEMINI.md curl -fsSL --create-dirs -o .agents/skills/launch-check/SKILL.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/skills/launch-check/SKILL.md curl -fsSL --create-dirs -o .agents/skills/launch-check/references/checklist.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/skills/launch-check/references/checklist.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
GEMINI.md | GEMINI.md |
skills/launch-check/SKILL.md | .agents/skills/launch-check/SKILL.md |
skills/launch-check/references/checklist.md | .agents/skills/launch-check/references/checklist.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
GitHub Copilot reads AGENTS.md and skills from .agents/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/AGENTS.md curl -fsSL --create-dirs -o .agents/skills/launch-check/SKILL.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/skills/launch-check/SKILL.md curl -fsSL --create-dirs -o .agents/skills/launch-check/references/checklist.md https://loadout.jnw-it.com/raw/secure-before-you-ship/1.0.0/skills/launch-check/references/checklist.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
skills/launch-check/SKILL.md | .agents/skills/launch-check/SKILL.md |
skills/launch-check/references/checklist.md | .agents/skills/launch-check/references/checklist.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
Files
Rules AGENTS.md Security baseline rules for any agent that reads AGENTS.md. 38 lines
# AGENTS.md: security baseline
These rules apply to every change in this repository, whatever the stack.
## Secrets
- Never hard-code API keys, tokens, passwords or connection strings. Read them from environment variables.
- Never put a secret in a variable the browser can see: `NEXT_PUBLIC_*`, `VITE_*`, `PUBLIC_*`, `EXPO_PUBLIC_*`,
or anything bundled into client JavaScript. If the front end needs a third-party API, call it through a server route.
- Never log secrets, full request headers, or whole environment objects.
- Keep `.env`, `.env.local` and similar files out of git. Keep `.env.example` up to date with dummy values.
- If you find a secret committed to git, stop and tell the human. Deleting the line is not enough —
it must be rotated with the provider.
## Auth and access
- Every route, server action and API handler that reads or changes user data checks who the user is *on the server*.
- Check authorisation on the resource, not just login: "is this user allowed to touch *this* row?"
- Admin features check an admin role stored server-side, never a flag sent by the client.
- Database access rules (Supabase RLS, Firebase Security Rules, Postgres grants) are the real boundary.
Do not turn them off to make something work.
## Input and output
- Validate all input on the server with a schema (zod, valibot, pydantic). Client validation is for UX only.
- Use parameterised queries or the ORM. Never build SQL with string concatenation.
- Do not render user content as raw HTML (`dangerouslySetInnerHTML`, `v-html`, `set:html`, `innerHTML`)
unless it has been sanitised.
- File uploads: check type and size server-side, store outside the web root or in object storage, never trust the filename.
## Cost and abuse
- Any endpoint that calls a paid API (LLMs, email, SMS, maps) needs auth or rate limiting, and ideally both.
- Set spending caps or budget alerts on paid providers where they exist.
## Dependencies
- Prefer well-known packages. Check that a package name is real and spelled correctly before installing it.
- Do not add a dependency for something the platform already does.
## When unsure
Ask the human, or run the `launch-check` skill and report what it finds. Adapter CLAUDE.md Imports AGENTS.md for Claude Code. 10 lines
# CLAUDE.md
@AGENTS.md
## Claude Code notes
- Skills from this loadout live in `.claude/skills/`: `launch-check`. Use them when their description matches the task.
- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.
<!-- From the Agent Loadout "Secure before you ship" v1.0.0 — https://loadout.jnw-it.com/loadouts/secure-before-you-ship/ --> Adapter GEMINI.md Imports AGENTS.md for Gemini CLI. 10 lines
# GEMINI.md
@./AGENTS.md
## Gemini CLI notes
- Skills from this loadout live in `.agents/skills/`: `launch-check`. Use them when their description matches the task.
- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.
<!-- From the Agent Loadout "Secure before you ship" v1.0.0 — https://loadout.jnw-it.com/loadouts/secure-before-you-ship/ --> Cursor rule .cursor/rules/no-secrets.mdc Always-on Cursor rule about secrets and environment variables. 12 lines
---
description: Never expose or hard-code secrets
alwaysApply: true
---
- Read secrets from environment variables. Never write a real key, token or password into code, tests, docs or examples.
- Client-exposed prefixes (`NEXT_PUBLIC_`, `VITE_`, `PUBLIC_`, `EXPO_PUBLIC_`) are public. Never put a secret behind one.
- Calls to paid or secret-key APIs go through server code, never directly from the browser.
- Never log tokens, cookies, auth headers or whole `process.env` / `os.environ` objects.
- When adding a variable, add a dummy entry to `.env.example` and make sure `.env*` (except the example) is git-ignored.
- If you spot a secret already committed, stop and tell the human that it needs rotating with the provider. Skill skills/launch-check/SKILL.md Runs a pre-launch security and readiness audit. 54 lines
---
name: launch-check
description: Pre-launch security and readiness audit for web apps. Use when the user says they are about to launch, deploy, go live, share the link, or asks "is my app safe?".
---
# Launch check
Produce a plain-English, severity-ranked fix list that a non-expert can act on.
**Report first. Do not change code until the human picks which fixes to apply.**
## Steps
1. **Map the app (2 minutes, no more).** Identify the framework, where server code runs, the database and
auth provider, the hosting platform, and every third-party API it calls. Read `package.json` /
`requirements.txt` / `pyproject.toml`, the env example file, and the routes or API folder.
2. **Work through `references/checklist.md`.** For each item decide: pass, fail, or can't tell.
Prefer evidence from the code. Useful searches:
- Secrets in code: `git grep -nE "(sk_live|sk_test|sb_secret_|service_role|AKIA[0-9A-Z]{16}|ghp_|xox[bp]-|-----BEGIN)"`
- Secrets in history: `git log -p --all -S "sk_live" | head` (repeat for other patterns that hit)
- Client-exposed env: `git grep -nE "(NEXT_PUBLIC_|VITE_|PUBLIC_|EXPO_PUBLIC_)[A-Z_]*(SECRET|PRIVATE|SERVICE|TOKEN)"`
- Committed env files: `git ls-files | grep -E "(^|/)\.env"`
- Raw HTML: `git grep -nE "dangerouslySetInnerHTML|v-html|set:html|innerHTML\s*="`
- String-built SQL: `git grep -nE "(query|execute|raw)\(.*(\+|\$\{|f\")"`
- Server routes without an auth check: list every API route and note which ones read the user.
3. **Check the database rules** if there is one. Supabase: every public table has RLS enabled with real
policies. Firebase: rules are not `allow read, write: if true`. Plain Postgres/MySQL: the app user is not a superuser.
4. **Check abuse and cost.** List every endpoint that triggers a paid API. Note whether it requires auth and is rate limited.
5. **Write the report** in this format:
```
Launch check — <app name> — <date>
Verdict: Not ready / Ready with fixes / Ready
CRITICAL (fix before anyone else sees the link)
1. <what is wrong, in one sentence> — <file:line>
Why it matters: <the realistic bad outcome>
Fix: <the concrete change>
HIGH (fix before launch day)
...
MEDIUM (fix in the first week)
...
Couldn't check: <items needing dashboard access, with how the human can check them>
```
Keep each finding to three or four lines. Do not pad the report with passes; list passes as a single line count.
6. **Offer the fixes.** Ask which to apply. Rotated keys, dashboard settings and DNS changes are jobs for the
human — explain exactly where to click, but do not pretend you did them. Skill file skills/launch-check/references/checklist.md The full checklist the launch-check skill works through. 52 lines
# Launch checklist
Severity in brackets is the default; raise it if the data is sensitive.
## Secrets
- [Critical] No live secret keys in source code or config files.
- [Critical] No secrets in client-exposed env vars or the built front-end bundle.
- [Critical] No `.env` files tracked by git. If one ever was, the keys in it need rotating.
- [High] Secrets in git history have been rotated (removing the commit is not enough).
- [Medium] `.env.example` exists and lists every variable with a dummy value.
## Authentication
- [Critical] Every API route / server action that touches user data checks the session on the server.
- [Critical] Admin pages and endpoints check a server-side role, not a client flag or a hidden URL.
- [High] Password reset and magic-link flows expire and are single use (default on most providers — confirm it is not disabled).
- [Medium] Email confirmation is required before an account can do anything costly.
## Data access
- [Critical] Database rules are on: Supabase RLS on every public table, Firebase rules not open, no public buckets with private files.
- [Critical] Users cannot read or change another user's rows by changing an ID in the request (test one by hand).
- [High] Update endpoints cannot change ownership or role fields.
- [High] Queries are parameterised; no string-built SQL.
## Abuse and cost
- [Critical] Endpoints that call paid APIs (LLM, email, SMS) need auth.
- [High] Those endpoints are rate limited per user or IP.
- [High] Provider spending limits or budget alerts are set.
- [Medium] Sign-up has some bot friction (captcha, email confirmation or invite).
## Input and output
- [High] Server-side validation on every input.
- [High] No unsanitised user HTML rendered.
- [Medium] Uploads checked for type and size server-side.
- [Medium] Error responses do not leak stack traces or SQL.
## Platform
- [High] HTTPS only. Cookies are `Secure`, `HttpOnly` and `SameSite=Lax` or stricter.
- [Medium] Security headers set: `Content-Security-Policy` (even a basic one), `X-Content-Type-Options: nosniff`,
`Referrer-Policy`, `frame-ancestors` / `X-Frame-Options`.
- [Medium] CORS is not `*` on endpoints that use cookies.
- [Medium] Debug mode, test routes and seed endpoints are off in production.
## Dependencies
- [High] `npm audit --omit=dev` / `pip-audit` shows no critical issues in runtime dependencies.
- [Medium] Lockfile committed.
- [Medium] No unfamiliar or misspelt packages (check anything you do not recognise on the registry).
## Readiness (not security, but people notice)
- [Medium] Privacy policy and terms exist if you collect personal data (UK GDPR applies to UK users).
- [Medium] Error tracking or at least server logs are on.
- [Medium] Database backups are on and you know how to restore one. All files: source zip · Licence MIT · By Agent Loadout · First listed
Installing and testing
How do I install Secure before you ship in Claude Code?
From your project root, put AGENTS.md, CLAUDE.md, skills/launch-check/SKILL.md at .claude/skills/launch-check/SKILL.md, skills/launch-check/references/checklist.md at .claude/skills/launch-check/references/checklist.md. The "Claude Code" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/secure-before-you-ship/claude-code.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
How do I install Secure before you ship in Codex CLI?
From your project root, put AGENTS.md, skills/launch-check/SKILL.md at .agents/skills/launch-check/SKILL.md, skills/launch-check/references/checklist.md at .agents/skills/launch-check/references/checklist.md. The "Codex CLI" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/secure-before-you-ship/codex.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
How do I install Secure before you ship in Cursor?
From your project root, put AGENTS.md, .cursor/rules/no-secrets.mdc, skills/launch-check/SKILL.md at .agents/skills/launch-check/SKILL.md, skills/launch-check/references/checklist.md at .agents/skills/launch-check/references/checklist.md. The "Cursor" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/secure-before-you-ship/cursor.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
How do I install Secure before you ship in Gemini CLI?
From your project root, put AGENTS.md, GEMINI.md, skills/launch-check/SKILL.md at .agents/skills/launch-check/SKILL.md, skills/launch-check/references/checklist.md at .agents/skills/launch-check/references/checklist.md. The "Gemini CLI" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/secure-before-you-ship/gemini-cli.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
How do I install Secure before you ship in GitHub Copilot?
From your project root, put AGENTS.md, skills/launch-check/SKILL.md at .agents/skills/launch-check/SKILL.md, skills/launch-check/references/checklist.md at .agents/skills/launch-check/references/checklist.md. The "GitHub Copilot" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/secure-before-you-ship/copilot.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
Has Secure before you ship been tested?
It passed the Level 1 automated install checks on 2026-10-16: the files parse, install to each agent's documented paths, and pass the safety scan. No AI agent has run it yet, so no agent pass or fail is claimed.
More for Claude Code, Codex, Cursor, Gemini CLI and GitHub Copilot.