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

Quality record

Know what you are installing.

Version, date and limits are read from the repo on every sync, and the check runs every night. Real-world runs are listed only with their evidence.

Version
Unversionedcommit ab528c5
Updated
17 Oct 2026last commit to the repo
Works in
Claude Code, Codex, Cursor, Qoder and any agent that loads a SKILL.mdplain text; no API keys
Nightly check
PassingNo failures or warnings. How it is checked
Last real-world run
24 Oct 2026, on skills.caffeinity.comProbed 19 sensitive paths; nothing exposed and every security header in place: PASS. See the run
Known limits
Not built for:
  • Penetration testing, exploitation, credential testing, broad port scanning, or application-code review
  • Use a dedicated authorized security-testing or code-review workflow instead

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