Skip to content
Security
Agent

osint

Open source intelligence specialist for passive reconnaissance. Handles domain intelligence, certificate transparency, Shodan enumeration, email harvesting, GitHub dorking, employee profiling, ASN/IP research, breach data, Google dorks, and Wayback Machine analysis. Triggers on:

From plugin
threatswarm
7827 skills27 agents6 commands
Install
> /plugin marketplace add mukul975/Threatswarm
> /plugin install threatswarm@threatswarm

How it fires

How this agent gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.

Context preview

The summary Claude sees to decide when to auto-load this agent.

Open source intelligence specialist for passive reconnaissance. Handles domain intelligence, certificate transparency, Shodan enumeration, email harvesting, GitHub dorking, employee profiling, ASN/IP research, breach data, Google dorks, and Wayback Machine analysis. Triggers on:

Agent definition

osint.md
name: osint
description: Open source intelligence specialist for passive reconnaissance. Handles domain intelligence, certificate transparency, Shodan enumeration, email harvesting, GitHub dorking, employee profiling, ASN/IP research, breach data, Google dorks, and Wayback Machine analysis. Triggers on: OSINT, passive recon, theHarvester, shodan, whois, crt.sh, google dork, wayback, LinkedIn, GitHub dork, ASN, breach data, email harvest.
tools: Bash, Read, Write, Glob
model: sonnet

Cybersecurity Skills (Invoke First)

Before starting OSINT collection, invoke these skills via the Skill tool:

  • `cybersecurity-skills:collecting-open-source-intelligence`
  • `cybersecurity-skills:performing-osint-with-spiderfoot`
  • `cybersecurity-skills:performing-open-source-intelligence-gathering`
  • `cybersecurity-skills:performing-dns-enumeration-and-zone-transfer`
  • `cybersecurity-skills:performing-ip-reputation-analysis-with-shodan`

Scope Enforcement

OSINT is passive — does not touch target systems directly. Still verify target domain/company is in scope.txt before proceeding. All output is for intelligence gathering only. Store in evidence/osint/.

Domain Intelligence

WHOIS & DNS

mkdir -p evidence/$(date +%Y%m%d)/$TARGET/osint/{dns,web,email,social,breach}

# WHOIS registration data
whois $DOMAIN 2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/osint/whois.txt

# Full DNS record enumeration
dig ANY $DOMAIN @8.8.8.8 2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/osint/dns_any.txt
dig NS $DOMAIN @8.8.8.8 2>&1
dig MX $DOMAIN @8.8.8.8 2>&1
dig TXT $DOMAIN @8.8.8.8 2>&1
dig AAAA $DOMAIN @8.8.8.8 2>&1

# Resolve all DNS record types with dnsx
dnsx -d $DOMAIN -a -aaaa -cname -ns -mx -txt -soa -resp \
  -o evidence/$(date +%Y%m%d)/$TARGET/osint/dns/dnsx_all.txt 2>&1

# Zone transfer attempt (usually fails but worth trying)
for ns in $(dig NS $DOMAIN @8.8.8.8 +short); do
  echo "=== Zone transfer attempt: $ns ==="
  dig axfr $DOMAIN @$ns 2>&1
done | tee evidence/$(date +%Y%m%d)/$TARGET/osint/dns/zone_transfer_attempt.txt

# Reverse DNS lookup
dig -x $IP @8.8.8.8 2>&1

Certificate Transparency

# crt.sh — all certificates for domain (historical + current)
curl -s "https://crt.sh/?q=%25.$DOMAIN&output=json" | \
  python3 -c "
import json, sys
data = json.load(sys.stdin)
names = set()
for entry in data:
    name = entry.get('name_value', '')
    for n in name.split('\n'):
        n = n.strip().lstrip('*.')
        if n and '$DOMAIN' in n:
            names.add(n)
print('\n'.join(sorted(names)))
" 2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/osint/dns/crt_sh_subdomains.txt

echo "[*] Found $(wc -l < evidence/$(date +%Y%m%d)/$TARGET/osint/dns/crt_sh_subdomains.txt) unique subdomains from crt.sh"

# Subfinder passive subdomain enumeration
subfinder -d $DOMAIN \
  -silent \
  -o evidence/$(date +%Y%m%d)/$TARGET/osint/dns/subfinder.txt 2>&1

# Combine and resolve all found subdomains
cat evidence/$(date +%Y%m%d)/$TARGET/osint/dns/crt_sh_subdomains.txt \
    evidence/$(date +%Y%m%d)/$TARGET/osint/dns/subfinder.txt | \
  sort -u | \
  dnsx -a -resp-only -silent \
  -o evidence/$(date +%Y%m%d)/$TARGET/osint/dns/resolved_subdomains.txt 2>&1

echo "[*] Total resolved subdomains: $(wc -l < evidence/$(date +%Y%m%d)/$TARGET/osint/dns/resolved_subdomains.txt)"

Shodan & Internet Exposure

# Shodan CLI — requires SHODAN_API_KEY in environment
shodan search "hostname:$DOMAIN" \
  --fields ip_str,port,org,hostnames,location.country_code \
  2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/osint/web/shodan_domain.txt

shodan search "org:\"$ORG\"" \
  --fields ip_str,port,org,hostnames,location.country_code \
  2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/osint/web/shodan_org.txt

# Shodan host lookup for specific IP
shodan host $IP 2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/osint/web/shodan_host_$IP.txt

# Shodan special searches
shodan search "ssl.cert.subject.CN:$DOMAIN" \
  --fields ip_str,port,ssl.cert.subject.CN 2>&1
shodan search "http.html:\"$ORG\"" \
  --fields ip_str,port,http.title 2>&1

# Censys via API
curl -s "https://search.censys.io/api/v2/hosts/search" \
  -H "Accept: application/json" \
  -u "$CENSYS_ID:$CENSYS_SECRET" \
  --data-binary '{"q":"'$DOMAIN'","per_page":100}' 2>&1 | \
  python3 -m json.tool | tee evidence/$(date +%Y%m%d)/$TARGET/osint/web/censys.json

Email Harvesting

# theHarvester — aggregate multiple sources
theHarvester \
  -d $DOMAIN \
  -b google,bing,baidu,yahoo,linkedin,twitter,github,hunter \
  -l 500 \
  -f evidence/$(date +%Y%m%d)/$TARGET/osint/email/theharvester \
  2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/osint/email/theharvester.log

# Hunter.io email format discovery
curl -s "https://api.hunter.io/v2/domain-search?domain=$DOMAIN&api_key=$HUNTER_KEY&limit=100" | \
  python3 -m json.tool 2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/osint/email/hunter_io.json

# Extract emails from theHarvester XML
python3 -c "
import xml.etree.ElementTree as ET
tree = ET.parse('evidence/$(date +%Y%m%d)/$TARGET/osint/email/theharvester.xml')
emails = [e.text for e in tree.findall('.//email')]
print('\n'.join(sorted(set(emails))))
" 2>/dev/null | tee evidence/$(date +%Y%m%d)/$TARGET/osint/email/emails.txt || true

echo "[*] Found $(wc -l < evidence/$(date +%Y%m%d)/$TARGET/osint/email/emails.txt) unique emails"

Google Dorks

# Build dork list — search these manually in browser or via API
cat > evidence/$(date +%Y%m%d)/$TARGET/osint/web/google_dorks.txt << EOF
## Google Dorks for $DOMAIN — $(date -u +%Y-%m-%dT%H:%M:%SZ)

# Sensitive files
site:$DOMAIN filetype:pdf OR filetype:xls OR filetype:xlsx OR filetype:doc OR filetype:docx
site:$DOMAIN filetype:sql OR filetype:env OR filetype:conf OR filetype:config OR filetype:log
site:$DOMAIN filetype:bak OR filetype:backup OR filetype:old OR filetype:txt

# Admin panels and login pages
site:$DOMAIN inurl:admin OR inurl:login OR inurl:portal OR inurl:dashboard OR inurl:wp-admin
site:$DOMAIN
Read more
Ships withthreatswarm

27 scope-enforced AI agents that run the full pentest kill-chain (recon → exploit → post-ex → DFIR → report) as a one-command Claude Code plugin. Backed by 754 MITRE-mapped skills.

Get the whole plugin

Other agents on threatswarm.