Run a local-first security pass on a Python or Node codebase. Use when the user wants to security-review, pentest, find vulnerabilities, check for BOLA/IDOR/JWT/SSRF/mass-assignment issues, or "see if my app is safe" before shipping. Runs deterministic recon + static scanners, stages a tailored probe suite, and produces an AGENT-BRIEFING the agent then executes with the human.
How this skill is triggered — by the user, by Claude, or both
Slash command
/websec-validator:security-passThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are running a security pass on a codebase. A CLI does the deterministic recon; **you** do the
You are running a security pass on a codebase. A CLI does the deterministic recon; you do the reasoning, run the probes, and propose fixes — with the human supplying credentials and reviewing every diff.
Get the websec engine and update it if PyPI has a newer release. Best-effort — skip silently if offline.
# install if missing (PyPI; fall back to source if not yet published)
websec --version >/dev/null 2>&1 || pipx install websec-validator || pipx install git+https://github.com/raccioly/websec-validator
# upgrade if PyPI has a newer version than what's installed
latest=$(python3 -c "import urllib.request,json; print(json.load(urllib.request.urlopen('https://pypi.org/pypi/websec-validator/json', timeout=10))['info']['version'])" 2>/dev/null)
have=$(websec --version 2>/dev/null | awk '{print $NF}')
[ -n "$latest" ] && [ -n "$have" ] && [ "$latest" != "$have" ] && pipx upgrade websec-validator
If you upgraded the engine, say so before continuing. Noir (the route engine) is optional —
brew install noir for best coverage; there's a regex fallback.
This skill's own instructions update separately, via
/plugin marketplace update websec-pluginsthen/plugin install websec-validator@websec-plugins. Claude cannot self-update the plugin mid-session — so if these steps ever look stale, tell the human to run those two commands.
websec run <repo-path> --scan # drop --scan if scanners are slow / not installed
(websec <repo-path> with no subcommand does the same thing.) This writes websec-out/ with the
briefing, a full REPORT.md, the findings ledger, and staged probes.
Read websec-out/AGENT-BRIEFING.md (your marching orders) and websec-out/FACTS.json (the
structured recon). Do not re-derive what's already there.
The briefing lists tenant-key candidates. Ask the human which one (if any) is THE tenant boundary — the field that isolates one customer/group/org from another. Every BOLA probe depends on this. If the app is single-tenant, say so and skip the cross-tenant probes.
Go through the scanner results. On a NoSQL/JSON API, most injection/SQLi/PII alerts are false
positives — say which and why. Surface the real ones (leaked secrets, real CVEs, IaC misconfig)
with a proposed fix. Each finding carries a calibrated P(real) + confidence interval — treat a
wide CI or basis: prior as "thin data, lean on the debate below, not the number."
The staged probes in websec-out/probes/ are drafts. For each relevant one:
FACTS.json + what the human confirmed (hosts, routes, role tokens),Shortcut — websec dynamic automates the access-control half against a running TEST target:
websec dynamic --unauth --target <url> (which mutating routes respond with NO auth) and
websec dynamic --config <file> (authenticated cross-tenant BOLA). Run it to confirm the auth/BOLA
leads fast, then hand-run the more bespoke probes. It's read-only by default; --probe-writes is
localhost-only. (See dynamic-config.example.json for the --config shape.)
Verify each finding with a 4-role debate before reporting it (Advocate → Challenger → Mediator → Explainer); the Challenger trying to refute it is the false-positive killer.
For anything not blocked: propose a fix, let the human review the diff, apply it, then re-run the same probe to confirm it's now blocked. Keep the probes in the repo as a regression suite.
Summarize: what was tested, what held (with PASS counts), what's open (repro + fix), and which
probes are now regression tests. Cite FACTS.json and scanners/ as evidence.
websec-out/ to .gitignore.Provides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.
npx claudepluginhub raccioly/websec-validator --plugin websec-validator