A 200 on /.env.
Status is a signal, not a finding.

One install gives your agent a bounded release preflight for a site you own: a fixed 19-path set, hard request and byte limits, and verdicts that separate a real .env leak from a single-page app serving its usual shell — or a blanket WAF block from a hardened origin.

4 verdicts 19 fixed paths 9 behavioral tests 0 API keys

for coding agents · free, open, no auth

install

Copy one line. Ship with evidence.

Detects Claude Code, Cursor, Codex, Qoder and more, then writes the skill into the right folder. Add -l to see what the repo ships before anything is installed.

npx skills add arm-pz/web-preflight

the audit

Bounded by construction.

A preflight that expands into a scan defeats its own purpose. The path list is fixed, the budget is hard, and nothing sensitive is written to disk.

Request contract 1

Every call is bounded, and the bound is enforced by the client, not by trusting the server.

  • 3s connect · 8s total
  • one redirect hop
  • retries disabled
  • 64 KiB body cap
  • 60 req/host · 120/audit

The fixed path set 1

Config, repository metadata, and admin or debug surfaces. Never a wordlist, never a query string.

  • .env variants
  • .git/HEAD · .git/config
  • package · composer
  • wp-admin · phpinfo
  • server-status

robots.txt 1

Read first. A rule you can fetch is not a wall around a secret.

  • disallowed = untested
  • explicit authorization to probe
  • missing robots ≠ permission

Severity ladder 1

Calibrated so a finding means what it says.

  • credential = CRITICAL
  • source or config = HIGH
  • bare .git/HEAD = MEDIUM
  • scanner noise = LOW

Verdicts, per host 4

Apex and www are assessed separately; a clean canonical host does not vouch for a host that only redirected to it. The overall verdict is the weakest host's.

  • PASS
  • PASS WITH FIXES
  • BLOCK
  • INCONCLUSIVE
  • BLOCK > INCONCLUSIVE > PASS WITH FIXES > PASS

house rules

What it refuses to do.

An unrun check is never a pass

If a firewall swallowed the probes, the budget ran out, or the tooling could not enforce the byte cap, the answer is INCONCLUSIVE. "Couldn't assess" is not folded into PASS or PASS WITH FIXES.

Severity follows evidence

CRITICAL needs a confirmed credential or key. A reachable source map is MEDIUM, and a bare Git reference is content-free metadata — not proof that repository contents are exposed. Escalate only when the body says so.

Nothing sensitive touches disk

Bounded fingerprints instead of saved bodies, sanitized headers instead of raw ones, cookie values removed before anything is recorded. The report carries the minimum evidence needed to act.

Know the difference between clean, leaked, and unseen.

Free, open, and it runs entirely inside the agent you already use.

Install web-preflight Read the source