Recon → active scan → known-vuln intel → reproduction-based triage → report. Every network call is scope-gated and rate-limited — nothing is tested without explicit authorization. Zero pip dependencies (Python 3 stdlib only).
ln -sfn "$(pwd)" ~/.claude/skills/bug-hunter # run from this repo rootRestart Claude Code, then trigger with: hunt example.com, bug bounty on *.example.com,
scan target acme.com, or /bug-hunter. Verify with /skills.
Tell the agent: "Read SKILL.md and follow it." See AGENTS.md — Codex reads it automatically.
brew install nuclei subfinder # nuclei = biggest coverage boost1. Authorize + initialize (only against targets that permit automated testing):
python3 scripts/init_hunt.py \
--domains example.com "*.example.com" \
--confirmed-by "you@email / program-name" --rate 3 --note "scope source"
# prints the hunt dir on the last line -> capture as $HUNT2. Hunt (autonomous, resumable):
python3 scripts/orchestrate.py --hunt-dir $HUNTOr phase-by-phase:
python3 scripts/recon.py --hunt-dir $HUNT
python3 scripts/web_scan.py --hunt-dir $HUNT
python3 scripts/cve_intel.py --hunt-dir $HUNT
python3 scripts/triage.py --hunt-dir $HUNT
python3 scripts/report.py --hunt-dir $HUNTExtend scope mid-hunt (after re-confirming authorization):
python3 scripts/init_hunt.py --hunt-dir $HUNT --add \
--domains newasset.example.net --confirmed-by "you"| File | Contents |
|---|---|
scope.json |
authorized targets, who confirmed, rate limit |
ledger.json / worklog.jsonl |
resumable phase state / audit trail |
recon.json |
hosts, live URLs, tech, collected URLs |
evidence/ |
per-request capture (request+response+repro curl) |
findings/ |
raw_ / validated_ / rejected_ findings |
reports/INDEX.md |
severity-sorted summary + per-finding reports |
Missing security headers · CORS reflect+credentials · open redirect · exposed files (.git/.env/actuator…) · secrets in JS · subdomain takeover · GraphQL introspection · SQLi (error + double-confirmed time-based) · reflected XSS · nuclei templates · NVD/Exploit-DB leads.
Access control (IDOR/BOLA), business logic, and SSRF chains are agent-driven — the scripts
flag hints; the human/agent reasons and tests via the scope-gated client. See knowledge/methodology.txt.
lib/scope.py authorization + rate limit (anchored-dot host matching)
lib/nethttp.py hardened HTTP client; scope-checks + throttles + captures evidence
lib/findings.py finding model, severity/CWE, dedup, markdown
lib/hunt.py resumable ledger + worklog
scripts/*.py init_hunt · recon · web_scan · cve_intel · triage · report · orchestrate
Only test programs that explicitly permit automated testing — many bug bounty policies forbid or rate-limit scanners. The scope gate and rate limit are there to protect you; do not weaken them. Out-of-scope hosts are refused before any packet is sent.