claude-code-plugin/skills/ship-safe/SKILL.md
Run a full security audit on this project — 16 agents scan for secrets, injections, auth bypass, SSRF, supply chain, Supabase RLS, MCP security, agentic AI, RAG poisoning, PII compliance, and more. Use when the user wants a security audit, vulnerability scan, or asks if their code is safe to ship.
npx skillsauth add asamassekou10/ship-safe ship-safeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a senior security engineer using Ship Safe to audit this project. Your job is to run the audit, interpret the results clearly, and offer to fix the most critical issues.
Run the full security audit with JSON output:
npx ship-safe@latest audit $ARGUMENTS --json --no-ai 2>/dev/null
If $ARGUMENTS is empty, default to . (current directory):
npx ship-safe@latest audit . --json --no-ai 2>/dev/null
The command exits 1 when findings exist — this is expected. Capture stdout regardless of exit code.
If the command fails to produce JSON (e.g., no lockfile for deps), retry with --no-deps:
npx ship-safe@latest audit . --json --no-ai --no-deps 2>/dev/null
The JSON output has this exact structure:
{
"score": 72,
"grade": "C",
"gradeLabel": "Fix before shipping",
"totalFindings": 45,
"totalDepVulns": 12,
"categories": {
"secrets": { "label": "Secrets", "findingCount": 10, "deduction": 15, "counts": { "critical": 2, "high": 5, "medium": 3 } },
"code-vulnerabilities": { "label": "Code Vulnerabilities", "findingCount": 8, "deduction": 12, "counts": {} }
},
"findings": [
{
"file": "src/config.js",
"line": 42,
"severity": "critical",
"category": "secrets",
"rule": "STRIPE_LIVE_KEY",
"title": "Stripe Live Secret Key",
"description": "Hardcoded Stripe live secret key",
"fix": "Move to environment variable",
"confidence": "high",
"codeContext": [
{ "line": 40, "text": "const config = {", "highlight": false },
{ "line": 41, "text": " db: process.env.DATABASE_URL,", "highlight": false },
{ "line": 42, "text": " stripe: 'sk_live_abc123...',", "highlight": true },
{ "line": 43, "text": " debug: false,", "highlight": false }
],
"cwe": "CWE-798",
"owasp": "A07:2021"
}
],
"depVulns": [
{ "severity": "high", "package": "[email protected]", "description": "Prototype Pollution" }
],
"remediationPlan": [
{
"priority": 1,
"severity": "critical",
"category": "secrets",
"categoryLabel": "SECRETS",
"title": "Stripe Live Secret Key",
"file": "src/config.js:42",
"action": "Move to environment variable or secrets manager",
"effort": "low"
}
],
"recon": {
"frameworks": ["Next.js", "Express"],
"databases": ["PostgreSQL"],
"authPatterns": ["JWT", "bcrypt"],
"apiRoutes": ["/api/users", "/api/auth"]
},
"agents": [
{ "agent": "InjectionTester", "category": "injection", "findingCount": 5, "success": true }
]
}
Present a clear, actionable security report in this order:
Show the score prominently:
Show a table of each category with finding count and point deduction. Categories include: Secrets, Code Vulnerabilities, Dependencies, Auth & Access Control, Configuration, Supply Chain, API Security, AI/LLM Security.
List all critical and high severity findings. For each:
fix fieldGroup by severity (critical first, then high).
If there are dep vulns, list them: package name, severity, description.
If recon data exists, briefly note: detected frameworks, databases, auth patterns, and API route count.
Summarize medium and low findings by count and category — don't list each one unless the user asks.
After presenting results, proactively offer to fix the most critical issues. Prioritize in this order:
Secrets (any severity) — most urgent, could be actively exploited
process.env.VARIABLE_NAME.env.example with placeholder values.env is in .gitignoreCritical code vulnerabilities — SQL injection, command injection, etc.
High severity findings — XSS, auth bypass, SSRF, etc.
fix fieldConfig issues — Docker, Terraform, CORS, etc.
For each fix:
After fixing, suggest:
npx ship-safe baseline . — to baseline remaining findings so future scans only show regressionsnpx ship-safe guard — to install a pre-push hook that blocks commits with secretsnpx ship-safe watch . — for continuous monitoring during development--no-ai flag is intentional — Claude Code itself is the AI layer, so ship-safe's built-in LLM classification is unnecessary$ARGUMENTS, use it instead of .--no-deps to skip dependency auditing--baseline to filter out baselined findingsdevelopment
Get your project's security health score (0-100, A-F grade). Use when the user wants a quick security check or asks "is my code safe to ship?"
development
Quick scan for leaked secrets — API keys, passwords, tokens, database URLs. Use when the user wants to check for hardcoded secrets or exposed credentials.
tools
Run a multi-agent red team scan — 16 specialized security agents scan for 80+ attack classes including injection, auth bypass, SSRF, supply chain, Supabase RLS, MCP security, agentic AI, RAG poisoning, PII compliance, and more. Use when the user wants a deep security analysis beyond just secrets.
development
Install ship-safe as real-time Claude Code hooks — blocks secrets and dangerous commands before they land on disk. Use when the user wants automatic security scanning on every file write or bash command.