Verix

Autonomous security scanner

Verix

Claude drives the whole audit: it crawls the target, invents attack hypotheses, tests them with safe payloads, judges the results, and hands back a graded report — not a canned rule list.

verix — real transcript

How an audit runs

Five stages, in order — recon feeds the model, the model's output drives the probes, the probes' results come back for judgment.

01

Recon

Playwright crawls pages, forms, headers, cookies, scripts — and fingerprints embedded chat/AI widgets.

02

Hypotheses

Claude proposes up to 12 attack vectors: OWASP Top 10, business logic, and LLM-specific risks.

03

Safe probing

Non-destructive payloads only, rate-limited, restricted to GET/POST/HEAD/OPTIONS by default.

04

Analysis

Every response goes back to Claude for a verdict: severity, CVSS, evidence, remediation.

05

Report

Graded A–F, grouped findings, saved to history for before/after comparison.

Built and proven, not just written

Every number below is from the actual repository and real scans, not an estimate.

~1,250
lines of Python, 10 files
9 / 9
smoke tests passing
2
front-ends, one shared engine
7
dependencies, rest is stdlib

Real bugs, found by real scans

Each of these surfaced by actually running the tool against live sites, then was fixed at the root — not patched at the symptom.

CRAWL

Healthy sites reported as unreachable. Playwright's networkidle wait never resolves on sites with analytics/chat traffic — switched to domcontentloaded as the real condition.

CRASH

Empty recon crashed the whole scan. Claude's reply got cut off mid-JSON reasoning about nothing — AI probing is now skipped when recon finds zero pages, and truncation is detected and retried with more room.

ACCURACY

Third-party assets blamed on the target. Header checks now run only against the target's own origin — a CDN's headers aren't the site's fault.

HISTORY

Before/after could silently swap. Same-second scan saves sorted randomly — fixed with microsecond-resolution timestamps.

UX

UTC timestamps read as wrong. Reports and history now show local time with its offset.

Validated on live sites

Not synthetic test pages — my own production sites, scanned for real, published with the owner's go-ahead.

ATS Resume Builder SaaS, Next.js 16 — 0 findings across 7 pages. First scan caught a sitewide missing CSP header; fixed, and every re-scan since is clean.

Personal site, Cloudflare-fronted — 2 low-severity findings (missing CSP + HSTS) on a Cloudflare-injected script path, not the main page.

Also surfaced a real limitation of any headless-browser scanner: Cloudflare's bot management intermittently resets automated connections regardless of User-Agent — confirmed by side-by-side testing against plain curl.