cd /news/ai-agents/i-built-a-claude-code-skill-that-run… Β· home β€Ί topics β€Ί ai-agents β€Ί article
[ARTICLE Β· art-157514] src=dev.to β†— pub= topic=ai-agents verified=true sentiment=↑ positive

I Built a Claude Code Skill That Runs a Full-Stack Security Audit in One Command

A developer released an open-source Claude Code skill, toshipon/claude-code-security-audit-skill, that runs an 8-phase, evidence-based full-stack security audit from a single command, covering web, infrastructure, backend, mobile, compliance, and LLM/AI layers. Each check ships with the concrete command, grep pattern, or SQL query that produces evidence, and findings map to established frameworks including OWASP Top 10:2025, MASVS v2, CIS Benchmarks, and the OWASP Top 10 for LLM Applications. Reference files load only for the target being audited, keeping SKILL.md concise.

by read5 min views6 publishedOct 26, 2026

TL;DR: Security audits usually start from a blank page, every single time. I packaged my audit process into an open-source Claude Code skill: run /security-audit all and you get an 8-phase, evidence-based assessment across web, infrastructure, backend, mobile, compliance, and LLM/AI β€” including the dashboard-only settings that no CLI can reach. It's on GitHub: toshipon/claude-code-security-audit-skill

AI coding agents now write a large share of our code. Review and security checks have not kept up.

Even before AI, my audits had a recurring problem: every engagement started from scratch. The stack spans web, mobile, infrastructure, and backend, and each layer has its own checklist. OWASP's guidance is comprehensive, but it's a mountain of material to re-read each time. And some of the most important settings β€” Vercel Deployment Protection, Supabase Auth policies β€” don't exist in any CLI or API. They live behind dashboards.

So I stopped treating the audit as a document I rewrite each time, and turned it into a reusable Claude Code skill.

Install it from the plugin marketplace, inside Claude Code:

/plugin marketplace add toshipon/claude-code-security-audit-skill
/plugin install security-audit@toshipon-security-audit

Then:

/security-audit all          # full-stack audit (recommended)
/security-audit nextjs       # just the Next.js app
/security-audit supabase     # just the Supabase backend
/security-audit llm          # just LLM/AI security
/security-audit terraform    # just the IaC

The audit runs in 8 phases:

Phase Scope How it's checked
1. Reconnaissance Project structure, trust boundaries, data flow Glob / Read
2. Web application Next.js Server Actions, Middleware, CSP, known CVEs Grep / Bash
3. Infrastructure Vercel, Terraform, AWS, GCP, Azure CLI + Chrome MCP
4. Backend Supabase RLS, Python, Go, Rails, Rust SQL / Grep
5. Mobile iOS, Android, Flutter, React Native Grep / Bash
6. Compliance PCI-DSS, HIPAA, SOX, GDPR, CCPA, SOC 2, ISO 27001 Analysis
7. Advanced detection Supply chain, containers/K8s, CI/CD, secrets, LLM/AI Grep / Bash
8. Cross-layer analysis Auth flow consistency, token lifecycle, data protection continuity Analysis

Nothing here invents its own categories. Web checks map to OWASP Top 10:2025 and WSTG, mobile to MASVS v2 / MASTG, infrastructure to CIS Benchmarks, and LLM checks to the OWASP Top 10 for LLM Applications. That matters when you hand the report to someone else: it's written in a language every security reviewer already speaks.

The detailed check patterns β€” more than two dozen reference files covering everything from Next.js to Rust to PCI-DSS β€” live in a references/ directory and are loaded only when that target is audited. SKILL.md itself stays a concise overview.

This was the single most important lesson from Anthropic's own skill best practices (and from studying Trail of Bits' skills): a skill that dumps everything into context stops being a tool and becomes noise. Run /security-audit android, and only the Android reference loads.

An LLM doing security review has a failure mode: plausible-sounding findings with no proof. So every check in this skill ships with the concrete command, grep pattern, or SQL query that produces the evidence. For example, finding Supabase tables with Row Level Security disabled is not an opinion β€” it's this query:

SELECT n.nspname AS schema, c.relname AS table_name
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
  AND n.nspname = 'public'
  AND c.relrowsecurity = false;

Every finding in the report carries a file path, a line number, and a concrete remediation.

The skill also hard-codes the excuses it must reject β€” the ones I kept hearing (and making) in real audits:

This is the part most audit automation skips. Some settings simply cannot be checked from a terminal:

Setting CLI/SQL Needs dashboard inspection
Vercel environment variables βœ… vercel env ls β€”
Vercel Deployment Protection β€” Toggle state and protection scope
Supabase RLS status βœ… SQL query β€”
Supabase Auth settings (MFA, email confirmation, rate limits) β€” Dashboard only
Supabase Security Advisor β€” Full lint findings

The skill drives Chrome MCP to open those dashboard pages, extract the setting states, and capture screenshots as evidence. And because a dashboard finding can't be fixed with a code change, the report format says so explicitly and includes the manual remediation steps:

### [HIGH-003] Vercel Deployment Protection Disabled
- Current Value: Deployment Protection = OFF
- Recommended Value: Deployment Protection = Vercel Authentication
- Manual Remediation Steps:
  1. Vercel Dashboard β†’ Project Settings β†’ Deployment Protection
  2. Select "Standard Protection"
  3. Enable "Vercel Authentication"
  4. Verify the protection level for Preview Deployments
  5. Click "Save"
- Impact: Public access to Preview URLs will be restricted.

The skill has an explicit When NOT to Use section, because an audit tool that overclaims is worse than one with clear limits:

Since the first release, the roadmap has been moving from "one-shot audit" toward a workflow: CVSS v4.0 scoring for findings (as an evidence-based assessment workflow, with unscored findings reported explicitly rather than guessed), custom user-defined detection rules, and local continuous monitoring. Auto-fix PRs and external scanner integration (Semgrep / CodeQL) are in progress.

The skill is MIT-licensed and built for the stacks I work on every day as an SRE β€” which means it is opinionated, and I'd genuinely like to know where those opinions are wrong for your stack.

I'm toshipon β€” an SRE and security-focused indie hacker in Japan, and founder of BUILD GEEKS. I run fixed-scope security audits for teams shipping AI-built software. If your team builds with Claude Code or other AI agents and wants an evidence-based audit β€” not a generic checklist β€” DM me on X.

── more in #ai-agents 4 stories Β· sorted by recency
── more on @claude code 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/i-built-a-claude-cod…] indexed:0 read:5min 2026-10-26 Β· β€”