Cyber threat intelligence and open-source intelligence skill. Turns Claude into a trained CTI/OSINT analyst. Generates precision search queries, interprets public data, builds case timelines, and delivers structured intelligence products — no API keys, no paid subscriptions.
Collection method: agent-browser when available (JavaScript-heavy sites, infinite-scroll, screenshot evidence), with automatic fallback to web search / web fetch / direct URL fetch. Tool limitations are logged as collection gaps — never as case blockers.
1. Quick Start
# Full autonomous case — runs every applicable technique
/case target.com
# Guided flow for first-time investigators
/flow person
# Summary of what's been found so far
/brief
Append --yolo to any command to skip all interactive prompts and confirmations. The analyst makes every decision autonomously.
2. AEAD Case Lifecycle
Every investigation follows four phases:
Phase
What Happens
Acquire
Collect raw data — /sweep, /query, /username, /phone, /email-deep, /subdomain
owns — domain, email, or asset ownership
uses — platform account or tool usage
works_at — employment or affiliation
linked_to — general association
alias — same identity, different handle
communicated_with — observed contact
Finding Trust Scores
Score
Label
Meaning
5
PRIMARY
Authoritative or official source
4
DERIVED
Confirmed by 2+ independent sources
3
CONFIRMED
Single reliable source, verified
2
ANECDOTAL
Reported but unverified
1
CONTESTED
Conflicting data exists
Source Reliability Scale
Complements numeric trust scores with source-level grading. Trust score rates finding content; source reliability rates the source itself.
Grade
Label
Typical Sources
A
Completely Reliable
Official registries, government records
B
Usually Reliable
Established outlets, corporate sources
C
Fairly Reliable
Known blogs, industry publications
D
Not Usually Reliable
Anonymous forums, unverified claims
E
Unreliable
Known disinformation, fabricated content
F
Cannot Be Judged
Insufficient information to assess
Confidence Levels
Level
Label
Use When
VERIFIED
Direct observation, primary source
STRONG
Multiple corroborating sources
MODERATE
Single reliable source
WEAK
Circumstantial or inferred
TENTATIVE
Analyst deduction only
CHALLENGED
Contradicted by other findings
Map Rendering (ASCII Mandatory)
ALL visualization commands produce ASCII box-drawing art by default. This includes /graph, /render entities, /render network, /render timeline, /render risk, /pathfind, and /show-connections. Mermaid available only with explicit --mermaid flag.
Why ASCII-first: Universal terminal compatibility, renders correctly in .md and .docx exports, no external renderer dependency.
Conflict detection (engine/conflict-resolver.md): When two findings about the same subject contradict each other, the system flags a CONTESTED state. Both findings are preserved. Resolution options: accept one, mark both TENTATIVE, or log the conflict as its own finding.
Activate via /flow [type] — interactive guided prompts walk through each step.
8. Output Formats
Reference: output/reports/, connectors/
Mandatory File Export (CRITICAL)
Every /report, /brief, and /case command MUST auto-save two files to disk at the end of delivery:
Markdown report — saved as OSINT-REPORT-[CASE-ID]-[YYYY-MM-DD].md
Word document — saved as OSINT-REPORT-[CASE-ID]-[YYYY-MM-DD].docx
Save location: Current working directory, or ./osint-reports/ subdirectory if it exists.
DOCX generation (Rich format with charts & diagrams):
Step 1 — Build the DOCX-ready JSON file. The Python generator expects a SPECIFIC flat format (NOT the engine case-schema.json). You MUST construct the JSON matching this exact structure before calling the script. Reference: scripts/sample-cti-report-data.json.
confidence on subjects and findings MUST be an integer (e.g., 85), NOT a string (e.g., "VERIFIED")
findings MUST be a flat top-level array, NOT nested inside subjects
label is REQUIRED on each subject (this is what displays in the report — not value or display_name)
weight on findings drives severity coloring — use CRITICAL/HIGH/MEDIUM/LOW/INFO
recommendations must be an array of strings (not objects with priority/action keys)
All fields shown above should be populated with actual data — empty strings or "N/A" defeat the purpose
Populate executive_summary with a full paragraph — this is the most-read section of the report
Step 2 — Save the JSON and run the generator:
# Primary: HYBRID generator — full narrative from MD + charts/diagrams from JSON
# This produces a complete DOCX with ZERO content loss from the MD report
python3 scripts/generate-cti-docx-hybrid.py \
"CTI-REPORT-[CASE-ID]-[YYYY-MM-DD].md" \
"CTI-REPORT-[CASE-ID]-[YYYY-MM-DD].json" \
"CTI-REPORT-[CASE-ID]-[YYYY-MM-DD].docx"
# Fallback 1: JSON-only generator (charts + structured data, less narrative)
python3 scripts/generate-cti-docx.py \
"CTI-REPORT-[CASE-ID]-[YYYY-MM-DD].json" \
"CTI-REPORT-[CASE-ID]-[YYYY-MM-DD].docx"
# Fallback 2: MD-only mode (styled narrative, no charts — JSON optional)
python3 scripts/generate-cti-docx-hybrid.py \
"CTI-REPORT-[CASE-ID]-[YYYY-MM-DD].md" \
"CTI-REPORT-[CASE-ID]-[YYYY-MM-DD].docx"
# Fallback 3: pandoc (basic text conversion, no styling or charts)
pandoc "CTI-REPORT-[CASE-ID]-[YYYY-MM-DD].md" \
-o "CTI-REPORT-[CASE-ID]-[YYYY-MM-DD].docx" \
--from markdown --to docx --standalone
How the hybrid generator works:
Phase 1: pandoc converts the MD file to a base DOCX (preserving ALL narrative content — tables, lists, formatting)
Phase 2: python-docx post-processes to add CTI professional styling, prepend cover page + TOC, and inject charts/diagrams from JSON at matching section headings
The MD file is the primary content source. It carries the full narrative (detailed person profiles, infrastructure tables, wallet addresses, corporate structure, legal history, etc.). The JSON file provides structured data for visual elements (charts, diagrams, risk gauge). Using both together produces a complete report with zero content loss.
Rich hybrid DOCX includes: Cover page titled "CTI REPORT", table of contents, all narrative content from MD (every paragraph, table, list, code block), pie chart (finding types), bar chart (severity), risk gauge (exposure score), timeline chart, entity relationship diagram, network topology diagram, traffic/geo charts, CTI-themed styling (navy headings, styled tables), header/footer with classification and page numbers.
After saving, confirm all files to the user:
📄 Report saved:
→ CTI-REPORT-CASE001-2026-03-30.md
→ CTI-REPORT-CASE001-2026-03-30.json
→ CTI-REPORT-CASE001-2026-03-30.docx (rich format with charts & diagrams)
Report Formats
Format
Command
Audience
Technical INTSUM
/report
Analysts, security teams
Executive Brief
/report brief
Decision-makers, management
Plain-Language Summary
/brief
Non-technical stakeholders
Legal Evidence Format
/report legal
Attorneys, compliance teams
Journalist Format
/report journalist
Reporters, media
JSON Export
/report json
Downstream tools, pipelines
CSV Export
/report csv
Spreadsheets, databases
All formats above auto-save as .md + .docx unless the format is inherently machine-only (JSON, CSV — those save as their native format only).
Visual Outputs
Type
Command
Format
Subject relationship map
/render entities
ASCII (default) — --mermaid for Mermaid
Chronological timeline
/render timeline
ASCII Gantt
Exposure heatmap
/render risk
ASCII
Network topology
/render network
ASCII
All visual outputs use ASCII box-drawing by default. Mermaid only on explicit --mermaid flag.
✅* — runs for discovered key personnel within the organization
MalwareBazaar — activates only via /hash [value] when a file hash is discovered during investigation
Adaptive chaining: Each phase feeds newly discovered identifiers into subsequent phases automatically. If /sweep on a domain finds an email, /email-deep and /breach-deep trigger on it automatically.
✅* dork coverage notes:/dork-sweep on IP runs against reverse-DNS hostname once resolved (graceful skip if no rDNS); /docleak on Username targets document-author/uploader fields on scribd, slideshare, academia.edu, researchgate.
Dork auto-fire matrix — every /case target type gains coverage:
Person → /dork-sweep --telegram --docs + /docleak on full name
Domain → /dork-sweep --filetype --docs + /docleak on domain + org name
When /case or /sweep runs on a Domain or Org target, it inspects the MX record and SPF TXT record. If MX ends in protection.outlook.com OR SPF contains spf.protection.outlook.com, /msftrecon auto-fires as part of the Acquire phase. Results feed back into the subject registry as infrastructure findings (tenant ID, federation type, MDI presence) and into /exposure scoring.
/case pipeline walkthrough (M365-hosted Domain/Org): (a) standard DNS/WHOIS/subdomain/traffic/scam-check/breach-deep checks run first, (b) if M365 indicators present → /msftrecon fires automatically with no extra flag, (c) tenant ID discovered becomes a pivot for /branch in Enrich phase (search other domains under the same tenant). No user intervention required.
Parallel enrichment (3+ subjects): When Acquire discovers 3+ subjects, enrichment commands fan out in parallel via AgentFlow DAG orchestration. Each subject's enrichment runs independently, results merge with dedup before Assess phase. Disable with --sequential flag. See techniques/agentflow-enrichment.md.
Use Scrapling DynamicFetcher for: JS-heavy sites, SPA content, auto-escalation from static
Use Scrapling StealthyFetcher for: anti-bot bypass, Cloudflare-protected targets
Use Scrapling Fetcher for: fast static page collection, HTML parsing (~2ms)
Fall back to web search → web fetch → direct curl — no investigation blockers
Tag each finding with collection method: [browser] · [scrapling-dynamic] · [scrapling-stealth] · [scrapling-static] · [search] · [fetch] · [manual] · [whois-lib] · [whois-cli] · [whois-api]
Tool Auto-Install Policy
Before running any CLI tool, check if it exists on the system. If not, install it automatically and silently. This ensures zero-friction investigation — the analyst never stalls on missing dependencies.
Silent install: Do not ask permission — install and proceed. Tool installation is a normal part of the investigation workflow.
pip vs pipx: Use pip by default. Use pipx only for tools that explicitly require it (Sherlock).
Go tools: Require Go installed. If command -v go fails, note the gap and fall back to next tool in cascade.
apt tools: May require root. Use sudo apt install -y if not running as root.
Git-based install: For tools without PyPI packages (ShareTrace), clone the repo and install dependencies via git clone ... && cd ... && pip3 install -r requirements.txt
Fallback on install failure: If installation fails, skip to the next tool in the cascade — never block the investigation.