recon
Run the DigitalOcean ephemeral-droplet recon pipeline over a list of IPs, CIDRs, or wildcard domains. Use when target-init has produced http.md scope but recon (port scan, subdomain enum, httpx, ferox
Files1
View on GitHubSKILL.md.claude/skills/recon/SKILL.md
GitHubrecon
Front-door for the recon MCP server.
When to invoke
- New target where
targets/<name>/recon/is empty. - User asks for "recon", "port scan", "subdomain enum", "ferox" on a target.
- Multi-region geo check requested.
Inputs (from targets/<name>/http.md)
Parse the scope section. Build a targets list:
- IPs and CIDRs go through verbatim.
- Wildcard apex domains become
*.<apex>. - Bare domains MUST be promoted to
*.<domain>(the parser will refuse otherwise).
Picking scan_region
Match scan_region to the geography implied by the scope. Geo-fenced or
country-coded apex TLDs (.au, .uk, .de, .in, .sg, .ca, .nl)
must scan from the matching DO region, or banners and CDN edges will be
wrong. Default nyc1 only when scope is US-centric or generic gTLD.
| TLD / hint | scan_region |
|---|---|
.au, .com.au |
syd1 |
.uk, .co.uk |
lon1 |
.de, .eu, EU hosts |
fra1 |
.nl |
ams3 |
.sg, .asia |
sgp1 |
.in |
blr1 |
.ca |
tor1 |
| US / generic gTLD (default) | nyc1 |
Mixed scopes (e.g. .com + .com.au): pick the region matching the
country-coded TLD and add the US region to probe_regions so both
edges are sampled. Confirm region choice with the user before launch
when the scope spans multiple country TLDs.
How to call
recon_start({
"targets": ["1.2.3.4", "10.0.0.0/24", "*.acme.io"],
"target_name": "acme",
"scan_region": "nyc1",
"probe_regions": [],
"max_droplets": 10
})
Poll with recon_status({"job_id": ...}) every 30–60 s until status == "done" or "failed".
Then recon_results({"job_id": ...}) for the structured summary.
Persist into targets/<name>/status.json.recon = {job_id, summary_path, finished_at}.
Hard rules
- Never start a recon job whose
targetsinclude hosts outsidetargets/<name>/http.mdscope. (2026-05 — scope-discipline rule; load-bearing for H1/Synack ToS compliance.) - Confirm with the user before
probe_regionslonger than 3 (cost). - If
recon_cancelis invoked, also verify droplet count is 0 viarecon_list_jobs.
Failure handling
status == "failed"→ inspecterror; surface to user; do not retry automatically.- Stuck
runningpastRECON_MAX_RUNTIME_MIN→ callrecon_cancel, surface, suggest splitting CIDR.