cti-expert

by 7onezVerified

CTI Expert — Cyber Threat Intelligence & OSINT analysis skill for Claude Code. 67+ commands, 35 techniques, no API keys required.

494
Stars
70
Forks
Python
Language
8/23/2026
Added
View on GitHubDownload ZIP

⚠️ Third-Party Software Notice

This skill is third-party open-source software developed and hosted independently on GitHub. SkillTip is an informational directory and does not control or maintain the underlying repository. Any security checks displayed are automated and limited in scope. Review the source code before installing.

Read the Terms of Service

Installation

Add to your Claude Code skills directory:

# Add to your Claude Code skills
git clone https://github.com/7onez/cti-expert

Getting Started

Guides for using skills like cti-expert.

Security Report

Verified

Last scanned: —

{
  "status": "PASSED",
  "issues": []
}

README.md

CTI Expert

Cyber Threat Intelligence & OSINT Analysis Toolkit

Transform Claude into a trained intelligence analyst — 74+ commands, 49 techniques, zero API keys required for core functionality.


Installation  |  View Demo  |  Quick Start  |  Commands  |  Contribute


Version 2.8  License: MIT  74+ Commands  49 Techniques  No API Keys for Core

Stars  Forks  Downloads  Issues  Pull Requests  Last Commit  Repo Size  Contributors

🇬🇧 English  ·  🇻🇳 Tiếng Việt  ·  🇨🇳 中文


Built by Hieu Ngohieu.ngo@chongluadao.vnchongluadao.vn




🤝 Sponsors & Supporters

CTI Expert is built in the open. These organisations back the work — with data, tooling, and hard-won investigative tradecraft.

Rexxfield  Hudson Rock  ParanoidLab

ANY.RUN  ZETAlytics  Intelligence X

SupporterWhat they bringIn the toolkit
RexxfieldCybercrime investigation and victim-side casework since 2008 — the real-world tradecraft the case workflow and attribution standards are modelled onTradecraft & methodology
Hudson RockInfostealer-infection intelligence — which machines leaked which credentials, and when/breach-deep · /stealer-log
ParanoidLabDark-web, Initial-Access-Broker and infostealer-log monitoring across forums, markets and private TelegramDark-web collection & review
ANY.RUNInteractive malware sandbox + TI Lookup — sandbox-observed C2 and real endpoints from packed samples/binary · /hash-id
ZETAlyticsGlobal passive DNS with rare geographic diversity — historical resolution and co-tenancy pivots/webpivot · /cti-pivot
IntelXIntelligence X — paste sites, leaks, darknet and phonebook selector search/webpivot · /email-deep

[!IMPORTANT] ANY.RUN is used read-only. anyrun_lookup queries TI Lookup for hashes that have already been detonated. This skill never submits a sample — a public sandbox task is world-readable and irreversible. That boundary is enforced by a regression test (tests/test_no_sample_submission.py), not just by convention.

Listing here reflects support for the project and does not imply affiliation, endorsement, or any verification of this tool by the organisations named. Integrations marked above are optional and key-gated — every core technique still runs with zero API keys. Always respect each provider's terms of service. The full list of open-source projects and free public-interest services this skill depends on is in Acknowledgments & Credits.




What is CTI Expert?

A Claude Code skill that transforms Claude into a trained cyber threat intelligence and open-source intelligence analyst. It runs structured intelligence collection using 74+ commands across 49 techniques — no API keys required for core functionality. To take full advantage, add your own free or paid API keys to the skill's .env — each is auto-detected and unlocks higher-tier access (e.g., Wigle, VirusTotal, URLScan.io, Shodan, Censys, SecurityTrails, WhoisXML).

[!TIP] Keyless by default, more powerful with your keys. Every core technique runs with zero API keys. Add any free or paid keys to .env (or run /apikeys set <service> <KEY>) and the skill auto-detects them, unlocking higher-tier pivots: reverse favicon→host, passive DNS, certificate search, sibling-domain discovery. A missing or bad key never breaks a run — it just degrades to a note. Setup guide: handbook/api-keys.md.

[!TIP] One skill, two layers. cti-expert is the broad collector — the wide net (/sweep, /webpivot, /subdomain, /username, /email-deep…). Built into the repo is a deep pipeline (intel_engine/) that turns raw collection into a real case: a persistent knowledge base, versioned cases, cross-case correlation, and calibrated assessment. The flow reads like a sentence — collect broadly → "seen this operator before?" → cluster → filter false positives → assess. No external setup: the backend resolves to SELF; install the deep-layer deps once with uv venv && uv pip install -r requirements.txt. Architecture: connectors/intel-backend.md.

Core Capability

Multi-vector reconnaissance on any target type — person, domain, organization, username, email, IP, WiFi — with automated finding validation, exposure scoring, and structured intelligence delivery.

AEAD Workflow

Acquire raw data → Enrich with pivot expansion → Assess findings → Deliver structured reports (interactive HTML + Markdown + JSON/CSV + IOC bundle; Word on request).




Demo

Full Case Investigation

Full Case Demo — /case command running a complete investigation

CTI Report Generation

CTI Report Demo — Markdown + DOCX report output

Screenshots

INTSUM ReportNetwork TopologyRisk Assessment
INTSUM ReportNetwork Topology DiagramRisk Assessment Score



What's New in v2.8

The release where the engine caught up and the safety rails moved to where the harness can see them. v2.7 landed the deep pipeline. v2.8 brings the vendored engine ~30 commits forward24 → 46 MCP tools, a new engagement skill, and a case loop that runs to convergence — and then fixes the layer underneath it: two safety properties were being enforced at a moment Claude Code never reaches. Both now fire where the work actually happens.

CategoryWhat's NewDetails
Engine sync — 24 → 46 MCP toolsA three-way merge, not a copy — and that distinction is the whole storyThe vendored intel_engine/ was ~30 commits behind. Rather than trust a remembered list of local patches, every vendored file was classified by blob identity against all upstream history: 114 pure copies, 15 deliberately patched, 6 cti-expert-only. A plain rsync would have silently reverted three real behaviours — wp_common's extra .env depth (cti-expert nests one level deeper, so upstream's version resolves every API key to empty, and a keyless run then reports "no siblings" as a fact about the operator), pivot_extract's reverse-WHOIS-on default, and the collect_core single-sourcing — plus destroyed email_permute and turned three RULE 4 shims back into copies. 48 → 69 CLI ops, all resolving
Engage — the authentication surfaceFind the login; then, only on explicit confirmation, get insideDetection is passive and free: locate the login form, the password field and the registration page, and classify by FIELDS rather than by label — a confirm-password means register, an invite code is a pivot, not an OTP. Beyond that, engage_account creates a synthetic-persona account and reads the members area the public page hides (panel, deposit/withdraw flow, affiliate tree, support handles). It refuses a non-synthetic persona, refuses direct egress, and stops at a CAPTCHA. Account creation is outbound, attributable and irreversible — gated exactly like a sandbox submission
The case loopJudge the cluster, not the case — and run to convergence, not to an arbitrary depth/clusters partitions a case into same-operator components before anything is judged, showing each binding indicator's KB-wide prevalence — so an indicator that binds 3 domains here but sits on 400 KB-wide reads as noise, not an owner link. /frontier reports the unresolved gaps: free next seeds already discovered, plus the deferred metered leads held for approval. /loop runs collect → assess until the case converges; /reopen re-opens a converged case on new seeds; /scope derives the intake — no-touch class, victim ownership, egress gate — up front instead of assuming it mid-run
Six new collection layersEach one closes a specific way the old answer was wrong/liveness — a 200 parking/default/suspended/soft-404 page is not live and a 404/403/bot-wall is not dead; only NXDOMAIN reports dead, and every still-controlled name sets reuse_watch. /pssl — passive SSL runs the historical cert → IP direction that recovers an origin from behind a CDN, with the base-rate rail that keeps a shared CDN certificate (915 addresses in live measurement) out of the clustering. /paths — the URL path as an indicator (path_kit:) for an operator who rotates hosts and selects the template by directory; a generic path emits nothing. /serp — Ads Transparency identifies who paid (a verified, billed advertiser), with a cloaking probe that has a falsification control. /docmeta — PDF /Info + XMP, EXIF incl. GPS, PNG chunks. /victims — infer the access vector from the victim set
RULE 1 now fires at write timeThe leak gate was enforced at a moment an agent harness rarely reachesleakcheck.sh ran only as a git pre-commit hook. Claude Code writes files continuously and commits rarely, so a leaked indicator could sit in the working tree all session — and git commit --no-verify skips the gate outright. hooks/leakguard.py moves the check to PreToolUse on Write/Edit, where that flag does not exist. It does not reimplement the patterns — it shells out to leakcheck.sh, because a second copy would drift and a drifted guard reports clean. Scope is narrow on purpose: it denies only inside a cti-expert checkout on a path git does not ignore, so writing case data into intel_engine/cases/ — the correct thing to do — is never blocked
The outbound gates moved above the vendored codeA gate only a bad merge stands between is not a gatesubmit() refuses without confirm=True; the Engage tools refuse a non-synthetic persona. Those gates are real — and they live in intel_engine/, which is vendored. Re-syncing it is a three-way merge over ~150 files where a deliberate local behaviour is reverted silently; three such reversions were caught by hand in this very release. hooks/actionguard.py sits above the tools, in cti-expert's own tree, and fires on the tool name. It returns ask with a risk briefing, never a hard block — a rail you must disable to work is a rail that gets disabled. Dual-mode tools gate on the flag, not the tool: ordinary collection is silent, only --submit prompts
The stale-MCP failure has a name nowA session was driving a four-week-old tool surface with no error anywhereClaude Code resolves an MCP server's tool list when it connects and keeps it for the session. A session was found holding 17 tools while the engine on disk served 46 — and nothing said so; the model simply never saw the new tools and worked around their absence. hooks/sessionguard.py reports the resolved backend tier at SessionStart and warns when the @tool count has changed since last session, which is precisely when a cached registration went stale
Installable as a Claude Code pluginSkill + commands + MCP + hooks as one unitregister.sh symlinks the skill, the commands and the MCP server — but it cannot install hooks, and that is where the two rails above live. .claude-plugin/plugin.json bundles all four: /plugin marketplace add <clone> then /plugin install cti-expert. Hook paths use exec form with ${CLAUDE_PLUGIN_ROOT}, so nothing is hardcoded to one machine and no path is shell-parsed. Both PreToolUse hooks fail open — a hook bug must never brick your repo; audit.sh and the git pre-commit hook remain the backstop
The OPSEC gate was met, not relaxedUpstream grew a submission path, so the test had to be satisfied honestlyANY.RUN's API is mostly a submission API, and the upstream engine added a gated path to it — which failed tests/test_no_sample_submission.py, by design. The fix was not to weaken the assertion: the REQUIRES_ANALYST_CONFIRMATION marker was placed on submit() itself, the four submission-lifecycle endpoints were listed explicitly (an unreviewed new key still fails), and the test now demands the marker and the refusal it claims — so the marker cannot decay into a magic string. Verified by planting each failure: remove the marker → fail; remove the refusal → fail; restore → pass
The re-sync procedure was the one that breaks the repoDocumented advice that fails silently is worse than noneSTRUCTURE.md told the next person to "copy into intel_engine/, then re-apply the 5 shims". That is wrong, and its failure has no error message: the collectors keep running, they just stop finding things. It now documents the procedure that holds — classify by blob identity, three-way merge off the minimum-distance base, check for the duplicate @tool blocks a stale base produces — plus the zsh word-splitting trap that turns an unquoted rsync exclude list into no exclusions at all. The vendored engine's own 17 gates now ship and run alongside cti-expert's 6, and audit.sh gained a check that every path hooks.json registers still resolves, because a renamed script disables its hook silently
What's New in v2.7

What's New in v2.7

The release where the deep pipeline landed. v2.6 sharpened the collector. v2.7 makes cti-expert a two-layer system — a broad collector plus a built-in, self-contained intelligence pipeline with a persistent knowledge base — reachable from a cold prompt by one command, and guarded by a gate that checks the repo against its own rules on every push.

CategoryWhat's NewDetails
One skill, two layersThe deep pipeline is now built in — no external backend to stand upintel_engine/ vendors the whole Collect → Correlate → Assess pipeline: a persistent knowledge base, versioned cases, cross-case correlation, calibrated assessment and rendering (WebPivot · IntelAnalysis · IntelGraph · IntelReport · BinaryPivot). /backend resolves to SELF — nothing to configure, nothing to host. Install the deep-layer deps once with uv venv && uv pip install -r requirements.txt. The tree regrouped from 22 top-level directories to 14 behind a single SKILL.md. See STRUCTURE.md
8 registered commands/cti works from a cold prompt, in any projectCommands used to require the skill be loaded first. scripts/register.sh symlinks the skill and commands/*.md into ~/.claude/ and writes the per-machine .mcp.json, so /cti, /cti-recall, /cti-case, /cti-pivot, /cti-cluster, /cti-check, /cti-report and /cti-status are available immediately. There is now one command to remember — /cti <target> — which routes by target type (domain · IP · email · username · phone · wallet · hash · APK) and runs the right chain. Everything else remains a convention command
--deep is genuinely parallelSub-agent fan-out on both collection and assessment/cti --deep spawns one sub-agent per discovered frontier seed — pruned through recall and false-positive control first, ≤6 concurrent, depth-capped at 2 hops, with --passive propagating to every child — then converges them into one case. New here: when convergence yields 2+ clusters, the Assess phase fans out too, one agent per cluster (ACH, confidence, risk, scoped to that cluster), while the cross-cluster judgment stays central in the orchestrator. Breadth in parallel; synthesis in one place
IntelX + ANY.RUNLeak/darknet selector search and sandbox-observed C2 — with the evidence graded, not mergedintelx_search reaches pastes, stealer logs, darknet and historical WHOIS. Critically, hits are graded: a breach-corpus or stealer-log sighting is exposure evidence and explicitly not clusterable — two addresses in one combolist share a victim pool, not an operator. Soft selectors are refused locally so a vague name never burns a query unit. anyrun_lookup answers what samples carrying an indicator actually did — the real endpoints a packed binary contacts — and is read-only: this skill never submits a sample, enforced by tests/test_no_sample_submission.py
Evidence archiving was silently offThe wrapper was dropping 22 flags, including --archive-missingThe vendored engine had been left half-migrated — the modular wp_* layer was in place but the live collector was still the pre-split 2,274-line monolith, so the harness's --help probe filtered out flags the collector no longer advertised. Evidence archiving was therefore not running at all. collect_core now drops zero flags and the supported surface went 19 → 42. Dropped flags remain visible in the tool result by design: a silent drop is precisely the failure mode this class of bug hides in
Keyless answers stay honestCapability accounting — an absent key is never reported as a findingwp_capabilities names the evidence class each missing key costs, so a keyless run that finds no siblings reports "not queried" — never "no siblings exist." Shipping alongside it: Censys (keyless CenQL builder, free-plan lookups, monthly credit guard), asset discovery (JS bundles, source maps, SPA routes, well-known files), impersonation hunting, JARM TLS-stack fingerprinting, and a multi-engine search_pivot. Every denylist, provider registry and permutation table moved out of code into analyst-tunable references/*.json
Nothing dead-endsSix identifier types were classified but had no pivotThe spider-map recognised document, image, youtube_channel, coordinates, vin and ipv6 — then silently stopped on them. Now wired: documents → exiftool + oletools authorship → person/email/org; images → EXIF GPS → coordinates, with reverse-image and face search graded LOW and held pending corroboration, never an auto-merge; YouTube channels → about-panel links; coordinates and VIN enrich only, deliberately producing no new seed, so they cannot invent a false attribution; IPv6 → reverse/passive DNS + ASN, mirroring IPv4. Kept fixed by an invariant test: every classifiable type must have at least one pivot
The repo checks itselfaudit.sh + CI + a pre-commit leak scanscripts/audit.sh is the gate: every DISPATCH op resolves to a real script, all five shared collectors are one canonical file + one re-export shim, the @tool count matches the contributor rules, modules byte-compile, tests pass. It runs in GitHub Actions on every push and PR, scanning only the PR's added lines so curated example values are never re-flagged. scripts/install-hooks.sh wires the identifier leak scan as a pre-commit hook. Five zero-dependency suites ship with it — collection core, indicator classification, the false-positive ledger, no-sample-submission, and email-candidate containment
Every collection turn leads with a tableScannable yield, before the proseCollection surfaced results only in prose plus the durable file exports; nothing guaranteed a per-domain summary in the conversation itself. A new output rule puts a markdown table first on every collection turn — Resolves · Top pivots · Risk · Cluster · Seen-before — so you see the yield at a glance instead of reading for it
Portable & framework-freeNo assistant-framework coupling left in the skillThe mandatory voice-notification block is gone and the customization directory moved from a framework-specific path to a neutral ~/.config/cti-expert/ (repo/cwd .env still wins). Also in this release: a Sponsors & Supporters section — Rexxfield · Hudson Rock · ParanoidLab · ANY.RUN · ZETAlytics · IntelX — and the workflow diagrams rebuilt as SVG, including a new end-to-end tool-and-skill sequence diagram
What's New in v2.6

What's New in v2.6

CategoryWhat's NewDetails
/case runs unattendedPivot loop defaults to autonomy=auto; the new recon commands auto-fireThe spider-map now expands to closure without approval prompts — the confidence gate, not a human prompt, is what keeps expansion tight (exact-match links auto-pursue, weak links held, dedup + depth caps unchanged). Depth summaries still print, so the run stays auditable. And the v2.6 recon commands are in the pipeline with no flags: /icp on every domain/URL/org target, /cn-corp on any company name or USCC found, /iban on any payment detail, /hash-id on every hash (before /hash) — and all three discovery-driven ones feed their yields back into the loop as new seeds. /redact stays opt-in (--redact): a redacted report is a weaker artifact, so producing one should be a deliberate call. Narrow with --checkpoint, --no-cn, --reach balanced|focused, --depth N
China / Sinophone recon/icp + /cn-corp — the attribution layer Western registries can't reachICP filing (工信部备案) maps a domain to its registered PRC entity, and the licence serial reverse-pivots to every sibling site under the same filing — a same-operator link as strong as a shared GA ID. Then the registry chain: GSXT (ground truth) → TianYanCha/QCC/Aiqicha → 信用中国 blacklist → UBO, with USCC validation and revoked-status flags. Adds Quake (360) and ZoomEye as independent cyberspace indexes, a Baidu tier for /dork-sweep (tiers 1–4 index almost no CN content), and CJK variant generation — pinyin, Simplified↔Traditional and company-name stems — as a new /pivot-suggest axis. See techniques/china-recon.md
Fiat payment rails/iban — bank accounts become selectors, like wallets already wereMost victims never touch crypto — they make a bank transfer. iban_analyze.py runs ISO 7064 mod-97 validation (proving a "bank account" on a payment page is fabricated without contacting anyone), decomposes the BBAN into bank/branch/account, and flags jurisdiction mismatch — the classic beneficiary-abroad mule pattern. Validated accounts export as financial/iban IOCs; invalid ones are recorded as behavioural findings. Covers VN/SEA non-IBAN rails too: VietQR/NAPAS BIN, card BIN, e-wallets, BIC. See techniques/fiat-payment-osint.md
Shareable reports/redact — reversible PII redactionredact.py replaces PII with stable numbered placeholders ([EMAIL_1] means one address across the whole case) and writes a reversible JSON map, so a report can leave the organisation and still be reconstituted for evidence. Handles .md/.json/.csv; round-trip is byte-exact. Infrastructure is not redacted by default — in a CTI report the actor's domains are the analysis, not incidental PII
Analytic rigorProbability-anchored likelihood + 5W1H + ACHJudgments now carry likelihood terms with probability bands (almost no chancealmost certain) reported alongside evidence confidence, because "MODERATE" alone means a 30-point-different thing to writer and reader. /coverage gains a 5W1H pass — a technique matrix measures effort, so a case could score 96% while answering no Why or How. /threat-model now requires an ACH matrix for attribution: rival hypotheses scored by inconsistency, runner-up named, and the evidence that would change the ranking stated. See handbook/analytic-standards.md
Hash typing/hash-id — before any hash lookup32 hex is MD5 or NTLM — one is a file hash, the other is credential material, and querying the wrong service returns a confident "unknown sample" that reads as exculpatory. Routes file hashes to MalwareBazaar/VT and credential hashes to /breach-deep, never a public cracking service
What's New in v2.5

What's New in v2.5

CategoryWhat's NewDetails
Recursive pivoting/case is a spider-map — expands the whole network/case now runs a recursive BFS pivot engine (pivot_orchestrator.py + engine/pivot-orchestration.md): every discovered identifier (email/domain/IP/username/wallet/…) becomes a new seed and the relationship graph expands hop-by-hop until the frontier is exhausted. Confidence-gated (exact-match links auto-pursue, weak/PII links held), cycle-safe (dedup + depth caps), with per-depth checkpoints. Defaults: active · exhaustive · checkpoint-per-depth
Archive IOC harvest/webpivot --harvest — every selector the site ever exposedwayback_harvest.py runs the full extractor over a domain's entire Wayback history, merging emails, phones, crypto wallets, tracking/verification IDs, SaaS-operator IDs and socials with first-seen/last-seen — recovering selectors a network later scrubbed. Emits case-schema indicators[] straight into the IOC bundle; auto-runs in /case for domain/URL targets. /webpivot now also extracts phone numbers (tel: + formatted) as ranked pivot leads
Archive accessFetch archived pages Claude Code's WebFetch can't reachWebFetch is blocked from web.archive.org (robots.txt at the fetch layer). wayback_fetch.py routes around it — CDX lookup → nearest-snapshot resolve → raw id_ fetch, with retry/backoff (--near, --list, --url-only, --json)
Web pivoting/webpivot — map the infra behind a pageFavicon mmh3, GA/GTM/AdSense IDs, wallets & SaaS-operator tokens from a page's DOM → ranked pivots; same-operator correlation via /rank-relations (weighted scoring + noise denylist), /cert-pivot, /pivot-suggest, /crypto-balance, /email-hygiene, /sensitive-paths. Auto-runs in /case for domain/URL targets
Keyless by default100% free — no key, no signupcrt.sh (certificate transparency) + passive DNS + anonymous urlscan always run; full pivoting at zero cost, nothing to configure
Premium auto-detectDrop in a key → it upgrades itself/webpivot auto-detects any premium key you've set (Shodan, Censys, FOFA, DNSLytics, SecurityTrails, urlscan-PRO, WhoisXML) and unlocks its higher tier — no flag, no re-run; a missing/bad key degrades to a note, never breaks the run. Manage keys with /apikeys
Attack surface/appliance-scan — edge/VPN appliance → KEV mappingPassive-first fingerprint of internet-facing Citrix/F5/Cisco/Ivanti/Forti/Palo Alto/Exchange appliances (Shodan InternetDB/Censys) → matched CISA KEV/CVE list; feeds /vuln-check + /threat-model
Identity fabric/saas-map — SaaS tenancy + IdP surfaceDNS-TXT tenancy tokens (Google/Atlassian/Zscaler/Salesforce/Workday…), non-Microsoft IdP fingerprint (Okta/Auth0/OneLogin/Ping/Keycloak/ADFS), unauthenticated API/GraphQL/OpenAPI-spec discovery
CredentialsRead-only liveness validationA discovered key is confirmed live via identity-only endpoints (AWS STS, GitHub scopes, Slack auth.test, …/v1/models) — never a mutating call — upgrading it to CRITICAL with account/scope evidence
IntegrityEvidence-gated analysisevery asserted claim cites a resolvable finding; untrusted collected data is tagged, never executed
ReconNative asn commandKeyless IP/ASN/domain lookups (ipwho.is + RDAP) on Windows; full nitefood/asn auto-installed on Linux/macOS/WSL
System toolswhois + dig + asn auto-install on Windowswinget Microsoft.Sysinternals.Whois + ISC.Bind; previously manual steps
ReliabilityWindows PowerShell 5.1 hardeningFixes native-stderr script aborts, the OSArchitecture probe crash, and maigret via uv tool --force; installs clean on WinPS 5.1
PackagingAuto-PATH for CLI tools~/.local/bin (uv tools + asn) added to PATH automatically — current session and persistent
What's New in v2.4

What's New in v2.4

CategoryWhat's NewDetails
PlatformCross-platform OS detection (Windows/macOS/Linux)OS-aware auto-install; self-healing DOCX (UTF-8 + auto-located pandoc)
Packaginguv-first toolchainuv venv / uv pip / uv tool; PEP 723 uv run zero-setup scripts; pip/pipx/venv fallback
PortabilityCross-agent supportRuns in Claude Code and OpenAI Codex via AGENTS.md + a ready-to-copy /cti-expert Codex prompt
CTIInfostealer-log analyzer (/stealer-log)Family ID, victim-vs-operator profiling, cross-log actor correlation, IOC + raw-artifact extraction
ReconAdmin / sensitive-endpoint detectionSubdomain-prefix + path + CJK classifier (admin, adm, kef, ador, panel…)
Collectionagent-browser integrationPrimary interactive browser (vercel-labs): CDP, accessibility-tree snapshots, screenshots; complementary to Scrapling, no API key for core
ReliabilityFresh-VPS install hardening + CIroot/sudo + prereq bootstrap; smoke test + GitHub Actions on a minimal root Ubuntu container
What's New in v2.3

What's New in v2.3

CategoryWhat's NewDetails
WHOISUniversal WHOIS for all TLDswhoisdomain + CLI + Whoxy API; .vn, .th, .sg, .kr, 27+ ccTLD servers
WHOISReverse & historical WHOIS (free)Whoxy reverse API, historical lookup, ViewDNS
Web CollectionScrapling adaptive scraping3-tier: static → anti-bot → JS rendering; headless auto-open
Web CollectionHeadless browser auto-open defaultJS-heavy sites auto-detected and rendered via DynamicFetcher
OrchestrationAgentFlow parallel enrichmentDAG-based parallel pivot expansion for 3+ subjects
PerformanceHTML parsing ~2msScrapling parser replaces slow HTTP scraping
PlatformPython 3.10+ minimumRequired by Scrapling and AgentFlow
What's New in v2.2

What's New in v2.2

CategoryWhat's NewDetails
Image ForensicsFace search, reverse image, manipulation detection, AI geolocationFaceCheck.id, TinEye, FotoForensics, Forensically, picarta.ai, GeoSpy, Pic2Map
BlockchainCrypto wallet tracing, transaction graphs, scam detectionBlockchair, Etherscan, WalletExplorer, OXT.me, Chainabuse, Breadcrumbs
TransportAircraft tracking (unfiltered), vessel AIS, vehicle VIN lookupADS-B Exchange, Flightradar24, Marine Traffic, VesselFinder, NICB VINCheck
DarknetTor search, ransomware monitoring, onion service discoveryAhmia.fi, onionsearch, DarknetLive, ransomwatch
Social MediaReddit, Instagram, TikTok, Telegram investigationOsintgram, instaloader, toutatis, RedditMetis, TGStat, TelegramDB, Bellingcat TikTok Timestamp
People SearchUS people search engines, free reverse lookupsTruePeopleSearch, FastPeopleSearch, IDCrawl, That's Them
Mega-Dorks11 cross-platform Google dork templates covering 73 unique domainsSocial, Telegram ecosystem, dev platforms, forums, paste sites, darknet, breach DBs, business, image, messaging, jobs
IoTWebcam directories, IoT device searchInsecam, Thingful
What's New in v2.1
CategoryNew CommandsWhat It Does
Intelligence/render threat-path, /render attack-surfaceAttack path flow + infrastructure exposure visualization
Intelligence/snapshots, /diffWayback Machine snapshots and version diffing
Intelligence/drift, /report iocTemporal risk tracking + IOC export (STIX 2.1)
UX/onboard, /clarify, /qualityFirst-time tutorial, finding explanation, quality scoring
UX/blind-spots, /source-checkGap analysis + batch URL verification
UX/workspace diffCompare two saved investigation sessions
Data ModelSource Reliability A-FComplements trust scores with source-level grading
Data Model4 new entity typesDevice, Image, Crypto Address, Custom
Data ModelHIGH conflict severity4-level severity: CRITICAL/HIGH/NOTABLE/MINOR



Installation

Recommended: Use Claude Code CLI — it gives you the full terminal workflow, persistent sessions, and direct skill invocation. Download here or run npm install -g @anthropic-ai/claude-code.

Why Claude Code CLI?

The entire CTI Expert workflow is optimized for Claude Code CLI. The CLI gives you:

  • Persistent sessions — investigations survive terminal restarts via /workspace save
  • Full tool access — file writes, Python scripts, DOCX generation, all run natively
  • Skill invocation — type /cti-expert directly in the terminal, no browser required
  • Background agents — parallel enrichment via AgentFlow works best with the CLI

🖥️ Where to run it — the CLI is best for this skill

[!IMPORTANT] CTI Expert is execution-heavy: it runs uv/Python, installs OSINT tools, writes .md/.html/.json/.csv reports + IOC bundles, reaches many external sites, and saves case workspaces. What matters is a real local shell + persistent files + open network — a CLI or local desktop agent gives you that; an ephemeral cloud sandbox does not. This applies equally to Claude and Codex.

EnvironmentRunning casesWhy
Claude Code CLI · Codex CLIBestReal shell, persistence, background tasks, open network — what the skill is built for
Claude Code Desktop · Codex IDE extension✅ GreatSame local execution; nicest for reading rendered reports, charts & diagrams
claude.ai/code (web) · Codex cloud / ChatGPT web⚠️ LimitedReasoning & query generation work, but files don't persist to your disk and outbound network is often restricted

[!TIP] Run investigations in a CLI (Claude Code or Codex); open the generated .docx/report in a Desktop/IDE window if you prefer reading there. Use web/cloud surfaces only for analyst-reasoning, not execution-heavy recon.


Step 1 — Install Claude Code CLI

npm install -g @anthropic-ai/claude-code

Requires Node.js 18+. Full docs: docs.anthropic.com/en/docs/claude-code/overview


Step 2 — Clone + All-in-One Installer

The installer handles everything: Python dependencies, system tools (whois, dig, asn, jq, exiftool), OSINT tools (maigret, sherlock, holehe, h8mail, and more), and optional headless browser + Go tools. It is powered by uv (Astral's ultra-fast Rust package manager) — the script bootstraps uv, then uses uv venv / uv pip / uv tool for all Python installs, falling back to pip/pipx/venv only if uv can't be installed. Use install.ps1 on Windows (PowerShell) or install.sh on macOS/Linux/Git Bash/WSL.

PlatformCommand
Linux / macOS
git clone https://github.com/7onez/cti-expert.git ~/.claude/skills/cti-expert
bash ~/.claude/skills/cti-expert/scripts/install.sh
Windows (Git Bash or WSL)
git clone https://github.com/7onez/cti-expert.git ~/.claude/skills/cti-expert
bash ~/.claude/skills/cti-expert/scripts/install.sh
Windows (PowerShell — native)
git clone https://github.com/7onez/cti-expert.git "$env:USERPROFILE\.claude\skills\cti-expert"
powershell -ExecutionPolicy Bypass -File "$env:USERPROFILE\.claude\skills\cti-expert\scripts\install.ps1"

Windows users: install.ps1 is a full native installer (winget system tools + Python venv + OSINT tools) — no Git Bash or WSL required. It accepts the same -Headless, -Go, and -All flags (e.g. install.ps1 -All). Git Bash / WSL users can run install.sh instead. The DOCX generator self-heals UTF-8 output and auto-locates pandoc, so reports build on Windows with no extra environment setup. The skill itself detects the OS at runtime and installs any missing tool with the right manager (winget / brew / apt) — see scripts/platform-setup.md.


Installer Options

macOS / Linux / Git Bash / WSL:

bash scripts/install.sh               # Core: Python deps + system tools + OSINT tools
bash scripts/install.sh --headless    # + Scrapling headless browser (~200MB Chromium)
bash scripts/install.sh --go          # + Go tools (subfinder, amass, gau, gitleaks, httpx)
bash scripts/install.sh --all         # + Everything above

Windows (PowerShell):

powershell -ExecutionPolicy Bypass -File scripts\install.ps1              # Core
powershell -ExecutionPolicy Bypass -File scripts\install.ps1 -Headless    # + Scrapling headless browser
powershell -ExecutionPolicy Bypass -File scripts\install.ps1 -Go          # + Go tools
powershell -ExecutionPolicy Bypass -File scripts\install.ps1 -All         # + Everything above
FlagWhat it installsSize
(none)Python packages, whois, dig, asn, jq, exiftool, maigret, sherlock, holehe, h8mail, theHarvester, waymore, xeuledoc, agentflow~50 MB
--headlessScrapling StealthyFetcher + DynamicFetcher + Chromium+200 MB
--gosubfinder, amass, gau, gitleaks, httpx, trufflehog, phoneinfoga+150 MB
--allEverything~400 MB

Step 3 — Register the commands with Claude Code

install.sh installs the OSINT tools. This one-time step wires the skill, the 8 /cti* slash commands, and the MCP tools into Claude Code so they work from a cold prompt in any project — it symlinks commands/*.md into ~/.claude/commands/ and writes the per-machine .mcp.json. It's idempotent, so it's safe to re-run after a git pull.

# Register the skill + 8 commands + write the per-machine .mcp.json
bash ~/.claude/skills/cti-expert/scripts/register.sh

# Recommended: install the built-in deep-pipeline (intel_engine) deps once
cd ~/.claude/skills/cti-expert && uv venv && uv pip install -r requirements.txt

Windows (native PowerShell): run register.sh from Git Bash or WSL — it uses symlinks. Then, on every platform, restart Claude Code so the skill and commands load at startup.

Alternative — install as a Claude Code plugin (skill + commands + MCP + safety hooks in one unit)

register.sh wires the skill, the commands and the MCP server, but it cannot install hooks — and two of cti-expert's safety properties are enforced there:

HookWhat it does
hooks/leakguard.pyPreToolUse on Write/Edit — scans the pending payload with scripts/leakcheck.sh and denies a write that would put case data into a tracked file. The git pre-commit hook only fires at commit time and git commit --no-verify skips it; this fires at write time, where that flag does not exist. Writes into the git-ignored case stores, and writes outside a cti-expert checkout, are untouched.
hooks/actionguard.pyPreToolUse on the outbound actions — engage_account, harvest_authenticated, anyrun_submit, any --submit — returns ask with a risk briefing. The tools already refuse without confirmation, but that code is vendored; this gate lives in cti-expert's own tree, so a bad engine sync cannot delete it. Detection (detect_login, url_paths, passive_ssl) and ordinary collection are not gated.
hooks/sessionguard.pySessionStart — reports the resolved backend tier, and warns when the engine's @tool count has changed since the last session. Claude Code caches an MCP server's tool list at connect time, so a stale registration silently drives an old surface with no error.
# from a local clone
claude
/plugin marketplace add ~/.claude/skills/cti-expert
/plugin install cti-expert

Then restart Claude Code. Verify with /hooks (three entries) and /mcp (the intel server).

Everything is behaviour-preserving: both PreToolUse hooks fail open on an internal error, so a hook bug can never brick your repo — scripts/audit.sh and the git pre-commit hook remain the backstop.


Verify Installation

claude              # open Claude Code CLI, then type:
/cti-status         # health check — backend tier, MCP tools, API-credit balances
/cti example.com    # …or just start investigating

/cti-status confirms the backend, MCP tools, and API-credit balances in one shot. If the /cti* commands aren't recognized, re-run Step 3 (register.sh) and restart Claude Code. You can also type /cti-expert to load the skill directly, then describe your goal in plain English.


Use in ChatGPT / Codex (cross-agent)

CTI Expert is portable: the analyst logic is plain Markdown and the scripts are OS-detecting Python/shell, so it runs in OpenAI Codex (and other AGENTS.md-aware agents), not just Claude Code.

# 1. Clone the skill anywhere
git clone https://github.com/7onez/cti-expert.git

# 2a. In-repo: open Codex inside the clone — it auto-loads AGENTS.md. Then ask it to follow SKILL.md.
# 2b. Slash command: copy the bundled Codex prompt so /cti-expert works in the Codex CLI/IDE
cp cti-expert/codex/cti-expert.md ~/.codex/prompts/cti-expert.md   # Windows: copy to %USERPROFILE%\.codex\prompts\
  • AGENTS.md is the cross-agent runtime contract (OS detection, uv, paths). Codex auto-concatenates it from the repo root; you can also reference it from ~/.codex/AGENTS.md.
  • codex/cti-expert.md is a ready-to-copy custom prompt → gives Codex a /cti-expert <target> slash command.
  • Plain ChatGPT (no code execution): the reasoning, query generation, and report drafting all work (load SKILL.md/AGENTS.md as instructions or Custom-GPT knowledge); only local steps (DOCX build, CLI tool runs) need a code-capable harness like Codex or Claude Code.

Paths are resolved relative to the skill directory (the folder containing SKILL.md), so nothing assumes the Claude-specific ~/.claude/skills/ location.


Alternative — Claude Code Desktop (macOS / Windows)

Download: claude.ai/download — available for macOS and Windows

Step-by-step (no terminal needed):

  1. Install Claude Code Desktop — Download from claude.ai/download and install the app

  2. Download CTI Expert — Go to the GitHub repository, click the green "Code" button, then select "Download ZIP"

  3. Extract to your skills folder — Unzip the downloaded file, then move the extracted folder to your skills directory and rename it to cti-expert:

    PlatformHow to navigate
    macOSOpen Finder → Press Shift + Cmd + G → Type ~/.claude/skills/ → Press Go → Move the folder here
    WindowsOpen File Explorer → Type %USERPROFILE%\.claude\skills\ in the address bar → Press Enter → Move the folder here

    Note: If the skills folder does not exist, create it inside the .claude folder first.

  4. Run the installer + register — Open the Claude Code Desktop terminal and run:

    bash ~/.claude/skills/cti-expert/scripts/install.sh      # OSINT tools
    bash ~/.claude/skills/cti-expert/scripts/register.sh     # skill + 8 commands + MCP
    

    Or on Windows PowerShell (Python deps only; run register.sh from Git Bash/WSL):

    pip3 install -r "$env:USERPROFILE\.claude\skills\cti-expert\scripts\requirements.txt"
    
  5. Restart Claude Code Desktop — Close and reopen the app

  6. Verify — Type /cti-status in the chat to confirm the skill and commands loaded (or /cti-expert to load the skill directly)

System Requirements
RequirementVersionPurpose
Claude Code CLILatestRecommended terminal runtime
Claude Code DesktopLatestGUI runtime (macOS/Windows)
Node.js18+Required by Claude Code CLI
uvLatestRecommended — bootstrapped by the installer; manages Python, venv, packages & CLI tools
Python3.10+DOCX report generation, Scrapling, AgentFlow (uv can install this for you)
pip packagesSee requirements.txtCharts, diagrams, styling
gitAnyClone the repository



Quick Start

How commands work — read this first

There is one command to remember: /cti <target>. It looks at what you gave it — a domain, IP, email, username, phone, wallet, hash, or APK — and runs the right chain automatically. That's usually all you need.

Under it sit 8 registered commands that Claude Code recognizes from a cold prompt in any project (no need to load the skill first):

CommandWhat it does
/cti <target>Entry point — routes by target type and runs the whole chain
/cti-recall <seed>"Have I seen this before?" — check against every prior case. Run this first.
/cti-case <ID> <seeds>Full deterministic pipeline: collect → ingest → cluster → assess
/cti-pivot <url|ip>Collect pivot artifacts from one target
/cti-cluster <domain>Expand & correlate an existing case
/cti-check <indicator>False-positive control — real operator link, or shared noise?
/cti-report <ID>Render the relationship graph + a polished PDF/DOCX
/cti-statusHealth check — backend, MCP tools, API-credit balances

Every other command on this page (/case, /webpivot, /report, /sweep…) is a convention command: shorthand that works once the skill is loaded — via /cti, or by typing /cti-expert to open the skill directly. At a cold prompt, reach for a registered command above, or just describe your goal in plain English — it works identically.

1 — Investigate anything

/cti example.com          # domain  → full pipeline
/cti user@domain.com      # email   → breach + infrastructure + cross-platform
/cti @username            # handle  → 3000+ platform enumeration, then pivot
/cti 185.1.1.1            # IP      → ASN, co-tenancy, open ports, passive DNS
/cti ./trader.apk         # file    → static IOCs, clustered with the web infra

/cti picks the right techniques for the target, then expands the pivot graph to closure — no approval prompts. Add --deep for parallel sub-agent fan-out, --quick for a single pass, or --passive for hostile targets (no live contact). Default output: Markdown + interactive HTML + JSON + CSV + IOC bundle.

2 — Run a case end-to-end

/cti-recall example.com               # always first — have we seen this seed before?
/cti-case CASE-0001 example.com       # full pipeline on one or more seeds
/cti-cluster CASE-0001                # expand: peers, shared indicators, TLS overlap
/cti-report CASE-0001 --pdf           # deliver: relationship graph + PDF/DOCX

3 — Guided Flows

The commands below are convention commands — type them once the skill is loaded.

/flow person           # Person investigation workflow
/flow domain           # Domain reconnaissance workflow
/flow image            # Image verification workflow

4 — Targeted Reconnaissance

/sweep @username                    # Multi-vector recon on handle
/query example.com                  # 12-15 advanced search queries
/username johndoe                   # Platform enumeration (3000+)
/email-deep user@domain.com         # Deep email investigation
/subdomain example.com              # Certificate transparency + brute-force
/github-osint github.com/org/repo   # GitHub profiles, repos, code, commits, forks
/threat-check 185.1.1.1             # IP/domain/URL threat intelligence
/scam-check suspicious-site.xyz     # Phishing/scam domain check
/breach-deep user@domain.com        # Multi-source breach lookup

5 — Analysis & Assessment

/exposure domain.com                # Composite risk score (0-100)
/threat-model                       # Build threat model from findings
/validate                           # Verify all findings
/coverage                           # Check investigation completeness

6 — Reporting

/report                             # Technical INTSUM report
/report brief                       # Executive summary
/brief                              # Plain-language summary
/workspace save                     # Save case workspace state (resume later)



Best Practices

Habits that keep investigations fast, cheap, and correct — most are enforced by the skill itself, but knowing them helps.

Running a case

  • Start with /cti <target>. It's the single entry point and routes by target type (domain, IP, email, username, phone, wallet, hash, APK). Don't hand-run collectors.
  • Recall before you collect. /cti-recall <seed> (or Step 0 of /cti) is the cheapest call in the toolkit — it tells you if a seed is already attributed, saving credits and avoiding contradicting a prior assessment.
  • --passive for anything hostile. The egress gate refuses a direct fetch of hostile infrastructure; passive mode works from Wayback/urlscan captures, so your IP never touches it.
  • Screen indicators before clustering. /cti-check <indicator> (false-positive control) — a false merge names an innocent party; a false split loses the case.
  • --deep earns its cost at 3+ live seeds (parallel sub-agent fan-out); a single seed runs inline.
  • /cti-status when something behaves oddly — backend tier, MCP tools, and API balances in one shot.

Cost & keys

  • Two separate ledgers: model reasoning (/cost) vs third-party API credits (api_usage) — never the same number.
  • Keyless by default; /apikeys upgrades. Keys enrich pivots (Shodan/Censys/FOFA/…) but nothing requires them.

If you're developing the skill

  • bash scripts/install-hooks.sh once per clone — wires the leak check as a pre-commit hook.
  • bash scripts/audit.sh before pushing — the drift/leak/test gate (also runs in CI on every PR).
  • A classification change ships with its test (RULE 5).



Features

Identity & People

  • Person lookup — 50+ data points
  • Phone — carrier, reputation, associations
  • Email — accounts, breaches, infrastructure
  • Username — 3000+ platform enumeration
  • GitHub developer footprint — profiles, orgs, repos, commits, forks

Domain & Infrastructure

  • Subdomain enumeration via CT logs
  • CMS, CDN, analytics fingerprinting
  • DNS forensics & WHOIS deep/reverse
  • Traffic analysis & audience demographics
  • ICP filing → PRC entity + sibling-domain pivot
  • IBAN/bank-account validation & attribution

Analysis & Verification

  • Face search (FaceCheck.id) & reverse image (TinEye)
  • Image forensics (FotoForensics, Forensically)
  • AI photo geolocation (picarta.ai, GeoSpy)
  • Document/email metadata forensics
  • Google Docs identity extraction
  • 100+ paste sites & breach DBs
  • Likelihood-banded judgments, 5W1H coverage, ACH

WiFi, Geo & Transport

  • SSID/BSSID lookup via Wigle.net
  • W3W, Plus Codes, MGRS, Street View
  • Aircraft tracking (ADS-B Exchange, Flightradar24)
  • Vessel tracking (Marine Traffic, VesselFinder)
  • Vehicle VIN lookup & plate recognition

Security Auditing

  • Cloud audit (AWS/GCP/Azure)
  • OWASP Top 10 source code review
  • CVE & supply chain vulnerability checks
  • LLM/agent/MCP prompt injection audit

Reporting & Export

  • INTSUM, executive brief, plain-language
  • DOCX with charts, diagrams, timelines
  • Save/load case workspaces
  • Legal, journalist, HR, threat analyst formats
  • Reversible PII redaction for external sharing



AEAD Case Lifecycle

Every investigation follows four automated phases:

                         ╭──────────────────────────────────────╮
                         │         AEAD CASE LIFECYCLE          │
                         ╰──────────────────────────────────────╯

   ┌─── ACQUIRE ────────────────────────────────────────────────────────┐
   │  Collect raw data via /sweep, /query, /username, /phone, etc.     │
   │  Database search, enumeration, collection gap logging             │
   └────────────────────────────────┬───────────────────────────────────┘
                                    ▼
   ┌─── ENRICH ─────────────────────────────────────────────────────────┐
   │  Expand leads via /branch, /crossref, /link-subjects, /signatures │
   │  Shared identifier detection, relationship mapping                │
   └────────────────────────────────┬───────────────────────────────────┘
                                    ▼
   ┌─── ASSESS ─────────────────────────────────────────────────────────┐
   │  Score & verify via /exposure, /threat-model, /validate, /coverage│
   │  Risk scoring, completeness check, evidence chains                │
   └────────────────────────────────┬───────────────────────────────────┘
                                    ▼
   ┌─── DELIVER ────────────────────────────────────────────────────────┐
   │  Package output via /report, /brief, /render, /workspace save     │
   │  Auto-saves .md, .html, .json, .csv + IOC set                     │
   └────────────────────────────────────────────────────────────────────┘

Run /progress at any point to see current phase and pending tasks.


Workflow diagrams

End-to-end tool & skill flow — the whole system as one sequence: your target enters at /cti, crosses Layer 1's 49 techniques and the 24-tool MCP surface, through WebPivot / BinaryPivot / the knowledge base / IntelAnalysis, and leaves as a rendered graph and a PDF:

cti-expert end-to-end tool and skill flow — sequence diagram across both layers

Full /cti · /case pipeline (AEAD) — the recursive spider-map, and where /webpivot, /icp, /iban and correlation fit:

cti-expert /case pipeline (AEAD)

/webpivot + correlation + premium API-key flow:

cti-expert /webpivot + correlation + API-key workflow

Sources: workflow-skills.puml · workflow-case.puml · workflow-apikeys.puml — rendered with PlantUML to SVG in assets/ (vector, so it stays sharp at any zoom and needs no Git-LFS). Re-render after editing a source:

plantuml -tsvg -o assets workflow-case.puml workflow-apikeys.puml workflow-skills.puml
# add -tpng if you need raster copies for slides — note assets/*.png is Git-LFS tracked

See also the API-keys & webpivot guide.




Command Reference

The tables below are convention commands — the full technique vocabulary, available once the skill is loaded (via /cti or /cti-expert). The 8 registered entry commands (/cti, /cti-recall, /cti-case…) are in Quick Start above. For the authoritative reference, see SKILL.md.

Acquire — Data collection commands
CommandPurpose
/case [target]Full pipeline — every applicable technique
/sweep [target]Multi-vector recon (person/domain/org/username/email/IP)
/query [subject]12-15 advanced search operator queries
/username [handle]3000+ platform enumeration
/phone [number]Carrier lookup, reputation, associations
/email-deep [email]Accounts, breaches, infrastructure
/subdomain [domain]CT logs + passive enumeration
/github-osint [target]GitHub user/org/repo profiles, code, commits, forks
/threat-check [target]IP/domain/URL/hash threat intelligence
/breach-deep [email]Multi-source breach lookup
Enrich — Lateral expansion commands
CommandPurpose
/branch [data]Lateral expansion (email→username, username→email, etc.)
/crossrefShared identifier detection across subjects
/link-subjects [A] [B]Define connection between subjects
/show-connectionsDisplay logged connections
/graphFull ASCII subject relationship map
Assess — Scoring & verification commands
CommandPurpose
/exposure [target]Composite risk score (0-100)
/threat-modelBuild threat model from findings
/validateVerify finding evidence chains
/coverageCheck investigation completeness
Deliver — Report generation commands
CommandPurpose
/reportTechnical INTSUM report
/report briefExecutive summary
/briefPlain-language summary
/workspace savePersist case workspace state (resume later)
Web-Infra Pivoting & Correlation — infrastructure & same-operator analysis
CommandPurpose
/webpivot [url]Extract favicon/tracker/wallet/SaaS-operator artifacts → ranked pivot queries (Shodan/FOFA/urlscan). Flags: --rank, --cert, --graph, --history, --whois
/rank-relationsScore + rank same-operator relations across pages (weighted signals, noise-filtered, clustered)
/cert-pivot [domain]Find other hosts serving the same TLS cert + SAN siblings (keyless; Shodan/Censys with keys)
/pivot-suggestRank "what to pivot next" from findings (leet/variant/temporal/domain clusters, CJK pinyin + Traditional + company-stem)
/crypto-balance [addr]On-chain balance + lifetime flow for a wallet, valued at spot
/iban [value]Validate + decompose a bank account (mod-97, BBAN split, bank code, mule signals)
/email-hygiene [email]Grade an email domain 0-100 + A-F (disposable/MX/free/role)
/sensitive-paths [list]Classify a Wayback/URL list for exposed paths (.git/.env/backups/configs)
China / Sinophone Recon — ICP filings, PRC registries, CN indexes
CommandPurpose
/icp [domain|serial]ICP filing → registered PRC entity + licence no.; reverse the licence serial to sibling domains under one filing
/cn-corp [name|USCC]GSXT → TianYanCha/QCC/Aiqicha → 信用中国 chain: officers, shareholders, subsidiaries, UBO, revoked-status flags
/dork-sweep [t] --baiduBaidu tier — tiers 1–4 (Google/Bing/DDG) index almost no CN-hosted content
/pivot-suggest --cjkPinyin, Simplified↔Traditional and company-name-stem variants

Registries needing mainland egress (TianYanCha/QCC/Aiqicha) are logged as collection gaps, never blockers.

Reporting Hygiene
CommandPurpose
/redact [file]Shareable report variant — stable [EMAIL_1] placeholders + reversible JSON map (.md/.json/.csv). Opt-in; the default export set stays unredacted
/hash-id [hash]Identify a hash's algorithm before lookup — file hash vs credential material
Deep Pipeline & Knowledge Base — built-in (vendored intel_engine)

Built into the skill under intel_engine/ (intel_engine/harness/, tools/, knowledge/, cases/). /backend resolves to SELF — no setup. Install the deep-layer deps once: uv venv && uv pip install -r requirements.txt. See connectors/intel-backend.md.

CommandPurpose
/backendDetect the backend and report the tier — Tier 1 (typed MCP) → Tier 2 (CLI) → Tier 3 (stateless). /backend check shows the full resolution trail
/kb [query]Query the shared knowledge base — stats, entity/cluster/shared-indicator lookup, confirmed-operator ledger
/recall [seed]"Have I seen this before?" — check a seed against every prior case before collecting
/risk [case]Score a case's hosts for NRD / bulletproof-hosting / money-trail red flags
/reverse-whois [email|name]Reverse-WHOIS a registrant → high-value pivots only (privacy/bulk filtered)
/cert-overlap [d1 d2 …]KB-aware TLS/SAN same-operator verdict across domains
/reference [check|add|list]False-positive control ledger — BENIGN vs SIGNAL fingerprints
/harness [open|continue|status]Whole-case orchestration — persistent, versioned, cross-case to convergence
/graph --renderIntelGraph publication-quality case-graph render → PNG/SVG
/report pdfIntelReport pandoc render of an assessment → polished PDF/DOCX
/binary [file|url]Static IOC extraction from a scam APK/exe (signing cert, package, C2 hosts, wallets) → clusters with web infra

All backend commands dispatch through scripts/backend/intel.py at Tier 2 (or the typed MCP tool at Tier 1); absent → they degrade to a note.




Skill Tiers

Output density and automation adapt to your proficiency. Switch tiers any time — the output changes immediately: /novice enters Novice, /novice off gives you Specialist, and Practitioner is the default in between.

NovicePractitionerSpecialist

Low-jargon mode, step-by-step guidance, pre-built templates for due diligence, background checks, security reviews.

Switch: /novice

Try: /flow person, /flow domain, /template list

Advanced search operators, manual pivot expansion, custom threat modeling, guided flows with explanation.

Switch: default — no command

Try: /query [target], /branch [data], /crossref, /threat-model

Raw technique access, custom evidence weighting, CONTESTED finding resolution, direct database queries.

Switch: /novice off

Try: /username [handle], /email-deep [email], /secrets [target], /threat-check [target]




Technique Catalog

49 techniques — click to expand full catalog
TechniqueCoverageAPI Key Required?
fx-metadata-parsing.mdEXIF, email headers, document forensicsNo
fx-image-verification.mdImage authenticity, provenance, reverse searchNo
fx-breach-discovery.mdBreach database + paste site enumerationOptional (HIBP bulk, DeHashed paid)
fx-http-fingerprint.mdHTTP signature analysis, server fingerprintingNo
fx-leak-monitoring.mdLeak and breach monitoring automationMixed (IntelligenceX/Shodan paid)
fx-dns-cert-history.mdHistorical DNS + SSL/TLS certificate timelineNo
fx-document-forensics.mdPDF/Office authorship, creation chain, hidden contentNo
fx-network-mapping.mdNetwork topology, entity graph constructionNo
username-osint.md3000+ platform enumerationNo
phone-osint.mdCarrier lookup, VoIP, FreeCNAM, WhoCalldNo
email-osint.mdDeep email investigation, breach historyNo
threat-intel.mdGreyNoise, AbuseIPDB, OTX, VirusTotal, CIRCL CVE, NVDOptional (VT/URLScan free keys)
web-traffic-analysis.mdSimilarWeb, Semrush estimationNo
domain-advanced.mdCT logs, Amass, Subfinder, passive enumNo
social-media-platforms.mdTwitter/X, Discord, Strava, BlueSky, ShareTrace, Reddit, Instagram, TikTok, TelegramPartial (Discord needs token)
image-forensics-and-face-search.mdFaceCheck.id, TinEye, FotoForensics, Forensically, picarta.ai, GeoSpy, Pic2MapNo
blockchain-investigation.mdBlockchair, Etherscan, WalletExplorer, OXT.me, Chainabuse, BreadcrumbsOptional (Etherscan API for bulk)
fiat-payment-osint.mdIBAN mod-97 + BBAN decomposition, BIC, VietQR/NAPAS BIN, card BIN, account-reuse pivotNo
china-recon.mdICP filings, GSXT/信用中国/TianYanCha/QCC/Aiqicha, USCC, Quake/ZoomEye/FOFA, Baidu dorking, CJK variantsPartial (CN indexes need free keys; aggregators need CN egress)
transport-tracking.mdADS-B Exchange, Flightradar24, Marine Traffic, VesselFinder, VIN decodeNo
darknet-investigation.mdAhmia.fi, onionsearch, DarknetLive, ransomwatchNo
advanced-geolocation-techniques.mdW3W, Plus Codes, MGRS, Overpass TurboNo
wifi-ssid-osint.mdWigle.net SSID/BSSID geolocationFree account (Wigle API)
web-dns-forensics.mdZone transfers, GitHub, Telegram, WHOISOptional (WHOIS API)
scam-check.mdPhishing/scam domain verificationNo
ioc-export.mdIOC export (STIX 2.1, flat list)No
cloud-audit.mdAWS/GCP/Azure IAM, network, compute auditNo
dependency-audit.mdCVE, supply chain, CI/CD securityNo
disk-forensics.mdSleuth Kit, file carving, artifact recoveryNo
incident-triage.mdNIST 800-61, containment, IOC extractionNo
owasp-audit.mdOWASP Top 10 source code reviewNo
prompt-injection-audit.mdLLM/agent/MCP security assessmentNo
fx-visitor-intelligence.mdVisitor stats, tech stack, geo analysisNo
fx-social-topology.mdSocial graph construction and analysisNo
fx-geolocation.mdGPS, W3W, Plus Codes, MGRS, Street ViewNo
secret-scanning.mdCredential/secret detection in codeOptional (GitHub token for GitDorker)
github-osint.mdGitHub profile, org, repo, code, commit, fork, and collaboration reconOptional (GitHub token for higher API limits)
fx-email-header-analysis.mdEmail header analysis, SPF/DKIMNo
fx-edge-appliance-recon.mdEdge/VPN appliance fingerprint → CISA KEV/CVE catalog + port-risk matrixNo (Shodan/Censys optional)
fx-saas-identity-recon.mdSaaS tenancy (DNS-TXT) + IdP fingerprint + API/GraphQL/spec discoveryNo
web-pivot.mdWeb-infra pivoting — favicon mmh3, tracker/wallet/SaaS-operator artifacts → ranked pivotsOptional (premium keys upgrade tiers)
whois-universal.mdUniversal multi-TLD WHOIS cascade — gTLD/ccTLD (.vn/.th/.sg/.kr), reverse & historicalOptional (Whoxy/WhoisXML for reverse/history)
web-collection-scrapling.mdAdaptive web scraping — static → anti-bot → JS renderingNo
agent-browser.mdInteractive browser collection — CDP, accessibility-tree snapshots, screenshot evidenceNo (chat mode optional)
agentflow-enrichment.mdParallel DAG enrichment orchestration for 3+ subjectsNo
microsoft-tenant-recon.mdM365/Azure tenant recon — tenant ID, federation, MDI, SharePointNo
stealer-log-analysis.mdInfostealer-log triage — family ID, victim-vs-operator profiling, cross-log correlation, IOCNo
fx-dork-sweep.mdZero-auth dork sweep — Telegram ecosystem, doc-hosts, filetype familiesNo
fx-document-leak-hunt.md18-platform document-leak hunt with severity classificationNo



Report Formats

You never have to ask for output. Every /report, /brief, and /case writes the full set automatically — one interactive web page to explore the case, plus machine-readable files for tooling and evidence. Need to share a report outside your team? Add --redact and PII is swapped for stable placeholders (and can be reversed later).

🌐 Interactive HTML report — the one you'll actually read

A single self-contained file — no internet, no server, opens in any browser.

  • Dashboard — KPIs, an exposure gauge, and pie / bar / donut charts
  • Entity graph — drag, zoom, and click any node to inspect it
  • Infrastructure & timeline — topology map plus an interactive event history
  • Indicators & Selectors — every IOC, contact, handle, and wallet, with actor ↔ victim attribution
  • Navigation — global search, category menus, dark / light theme, print-to-PDF

📄 Markdown · JSON · CSV · IOC bundle — for tooling & evidence

The same case, in formats other tools can read.

  • Markdown — the written report: INTSUM, executive brief, plain-language, or legal
  • JSON — structured case data to feed pipelines and other tools
  • CSV — findings and indicators, ready for a spreadsheet or SIEM
  • IOC bundle — STIX 2.1, flat list, and CSV of every selector
  • Word (.docx) — on request, or /report legal (cover page, table of contents, charts)

Every report variant is one command — the five-format default set (.md · .html · .json · .csv · IOC bundle) saves automatically on every /report, /brief, and /case; the variants below pick a specific format or audience:

CommandFormatBest for
/report · /report htmlInteractive HTML (default, primary deliverable)Everyone — analysts to execs
/reportTechnical INTSUM (Markdown)Analysts, security teams
/report briefExecutive briefDecision-makers, management
/briefPlain-language summaryNon-technical stakeholders
/report legalLegal evidence format (auto-adds DOCX/PDF)Attorneys, compliance teams
/report journalistSource-citation-heavyReporters, media
/report json · /report csvJSON · CSV exportPipelines, spreadsheets, SIEM
/report iocIOC / selector bundle (STIX 2.1 · flat · CSV)SIEM / TIP ingest, threat-intel sharing
/report docxWord document (charts, cover, TOC)Formal sharing — on request
/cti-report <ID> --pdfIntelReport pandoc PDF/DOCXPolished, publication-grade case deliverable

Generated by scripts/generate-cti-html.py (HTML) · scripts/generate-cti-iocs.py (IOCs) · scripts/generate-cti-docx-hybrid.py (DOCX) · intel_engine/IntelReport (pandoc PDF/DOCX)




Architecture

Project structure — click to expand

cti-expert is one skill, two layers — a broad collector plus a vendored, self-contained deep pipeline. STRUCTURE.md is the authoritative map.

cti-expert/
├── SKILL.md                    The single skill entrypoint — commands & tradecraft
├── README.md                   This file  ·  README.vi.md · README.zh-CN.md
├── STRUCTURE.md                Authoritative layout + anti-drift rules
├── AGENTS.md                   Cross-agent runtime contract (Claude Code + Codex)
├── CLAUDE.md                   Contributor rules (loads only when building the repo)
│
├── commands/                   8 registered slash commands — work from a cold prompt
│   ├── cti.md                  /cti — the entry point, routes by target type
│   ├── cti-recall.md · cti-case.md · cti-pivot.md · cti-cluster.md
│   └── cti-check.md · cti-report.md · cti-status.md
│
│  ── LAYER 1 · Broad collector — cti-expert's own tools ──────────────
├── scripts/                    Collectors, backend dispatcher, report generators
│   ├── backend/                backend.py (tier resolver) · intel.py (T2 CLI dispatch)
│   ├── webpivot/               pivot_extract · cert_pivot · wayback_* · rank_relations …
│   ├── generate-cti-html.py    Interactive, offline, self-contained HTML report
│   ├── generate-cti-iocs.py    IOC / selector export (STIX 2.1 · flat · CSV)
│   ├── generate-cti-docx-hybrid.py   DOCX report (charts, diagrams, cover page)
│   ├── iban_analyze.py · redact.py · stealer_log_parse.py · pivot_orchestrator.py
│   ├── install.sh · install.ps1      All-in-one cross-platform installer
│   └── audit.sh · leakcheck.sh · install-hooks.sh   Drift · leak · pre-commit gates
│
├── techniques/                 49 collection techniques (the OSINT tradecraft)
├── handbook/                   Pivot artifacts, API keys, operator queries, analytic standards
├── engine/                     Case data-model design docs (schema, findings, pivot logic)
├── analysis/ · validation/     Pattern & exposure engines · QA + coverage matrices
├── experience/                 UX — skill tiers, guided flows, case templates
├── workflows/ · guides/        Professional use-case guides · worked walkthroughs
├── connectors/                 intel-backend · Maltego · Notion · Obsidian export
├── tests/                      Zero-dep regression tests (RULE 5 classification + collect_core)
│
│  ── LAYER 2 · Deep pipeline — vendored, self-contained ──────────────
└── intel_engine/               Collect → Correlate → Assess pipeline + knowledge base
    ├── harness/                Pipeline brain — orchestrator.py · mcp_server.py · tools.py (24 @tool)
    ├── tools/                  intel.py (deterministic pipeline) · kb/ (KB + correlation) · cert_overlap
    ├── WebPivot/               Engine collector helpers + de-dup re-export shims
    ├── IntelGraph/             Publication-quality case-graph rendering (PNG/SVG)
    ├── IntelReport/            Pandoc render of an assessment → polished PDF/DOCX
    ├── IntelAnalysis/          Correlation, attribution, confidence calibration
    ├── BinaryPivot/            Static IOC extraction from a scam APK / exe
    └── knowledge/ · cases/     Local runtime data — gitignored, never committed



Professional Workflows

WorkflowAudienceFile
Journalist Source VerificationReporters, fact-checkersworkflows/wf-journalist.md
HR ScreeningHR professionals, recruitersworkflows/wf-hr-screening.md
Cyber Threat IntelligenceSecurity analysts, IR teamsworkflows/wf-threat-analyst.md
Private InvestigatorLicensed PIs, legal teamsworkflows/wf-private-investigator.md

Activate with /flow [type] for interactive guided prompts.




Ethics & Responsible Use

This skill is for lawful research and professional security investigation only.

PermittedProhibited
  • Journalist fact-checking & source verification
  • HR background screening (with consent)
  • Corporate security research & threat intelligence
  • Authorized penetration testing & security audits
  • Legal/compliance investigation
  • Personal reputation monitoring (self-search)
  • Doxxing, harassment, or stalking
  • Unauthorized surveillance
  • Social engineering or fraud
  • Privacy violations
  • Criminal activity

You are responsible for all use of this skill. Comply with local laws, regulations, and platform terms of service. Always respect privacy and consent boundaries.




Contributing

We welcome research contributions, new techniques, and workflow improvements.

Contribution guidelines

Adding techniques:

  1. Create techniques/fx-[name].md with method description, free tool lists, limitations

Workflow improvements:

  1. Document in workflows/ with success criteria

Pull request process:

  1. Fork and create feature branch: git checkout -b feature/technique-name
  2. Document changes in SKILL.md and README.md
  3. Test on at least 3 real-world targets
  4. Submit PR with description

Bug reports: File issues with command output, environment, and target type.




License

MIT License + Ethical Use Addendum

You are free to use, modify, and distribute this skill under the MIT license, provided that you include original attribution, comply with the ethical use guidelines above, and clearly mark any derivatives.

See LICENSE for full text.




🙏 Acknowledgments & Credits

CTI Expert stands on the shoulders of the open-source community and free, public-interest data providers. A huge thank-you to every project, vendor, and free API below — this skill simply would not exist without your work. (Listing here does not imply affiliation or endorsement; always respect each provider's terms of service.)

CategoryProjects & free services we're grateful to
Agents & runtimeAnthropic — Claude Code · OpenAI — Codex · Astral — uv · Python · Node.js · Rust
Browser & web collectionagent-browser — Vercel Labs · Scrapling · Chromium
Username, people & socialMaigret · Sherlock · Blackbird · instaloader · Osintgram · toutatis · ShareTrace
Email & breach dataHolehe · h8mail · theHarvester · Have I Been Pwned · Hudson Rock · LeakCheck
Domains, DNS & infrastructureSubfinder · Amass · httpx · GAU · crt.sh · Whoxy · ViewDNS · whoisdomain · Shodan InternetDB · ipwho.is
Threat intelligenceVirusTotal · URLScan.io · GreyNoise · AbuseIPDB · AlienVault OTX · abuse.ch (URLhaus · ThreatFox · MalwareBazaar) · CIRCL · NVD · ransomware.live
Secrets & codeTruffleHog · Gitleaks · GitHub CLI
PhonePhoneInfoga · FreeCNAM · WhoCalld
Geolocation & WiFiOpenStreetMap · what3words · Overpass Turbo · WiGLE
Image forensicsExifTool · TinEye · FaceCheck.id · FotoForensics · picarta.ai
BlockchainBlockchair · Etherscan · WalletExplorer · Chainabuse
China / Sinophone reconENScan_GO · Kunyu · fofax · PyDork · MediaCrawler · pypinyin · OpenCC · jieba · FOFA · Quake (360) · ZoomEye · GSXT · 信用中国 · Cninfo
Payment rails & hashesISO 13616 / ISO 7064 (IBAN + mod-97 standards) · NAPAS / VietQR · name-that-hash
Tradecraft & methodologySOsintOps — Speculator Project · Wukong (China-layer tool survey & access-reality matrix) · Exploratores (reversible-redaction and IBAN-analysis techniques — independently reimplemented from its published documentation; that project is AGPL-3.0 and no code was copied)
Transport trackingADS-B Exchange · Flightradar24 · MarineTraffic · VesselFinder
DarknetAhmia · OnionSearch · ransomwatch
Cloud & documentsMSFTRecon · Xeuledoc · oletools · poppler · qpdf · mat2 · The Sleuth Kit
Web archivesInternet Archive — Wayback · Waymore
Reporting & utilitiespandoc · python-docx · Matplotlib · NetworkX · jq · ASN
Standards & frameworksOWASP · MITRE ATT&CK · STIX 2.1 (OASIS) · NIST SP 800-61 · CWE

Built something here we should credit, or want your project's listing changed/removed? Open an issue or PR — we'll fix it fast. 💙




Made with purpose by Hieu Ngo

LinkedIn  Email  Website  GitHub

If this tool helps your work, consider giving it a star. It helps others find it.

Frequently Asked Questions

What is cti-expert?

cti-expert is an open-source api integration skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by 7onez. CTI Expert — Cyber Threat Intelligence & OSINT analysis skill for Claude Code. 67+ commands, 35 techniques, no API keys required. It has 494 GitHub stars.

Is cti-expert safe to use?

Yes. cti-expert passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.

How do I install cti-expert?

Clone the repository with "git clone https://github.com/7onez/cti-expert" and add it to your Claude Code skills directory (see the Installation section above). cti-expert ships a SKILL.md manifest, so compatible agents can discover and load it automatically.

What programming language is cti-expert written in?

cti-expert is primarily written in Python. It is open-source under 7onez on GitHub, so you can review or fork the full source.

Are there alternatives to cti-expert?

Yes. SkillsLLM lists many other API Integration skills you can browse and compare side by side. Open the API Integration category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh cti-expert against similar tools.

Comments (0)

No comments yet. Be the first to share your thoughts!

CLIProxyAPI

by router-for-me

Wrap Antigravity, ChatGPT Codex, Claude Code, Grok Build as an OpenAI/Gemini/Claude/Codex compatible API service, allowing you to enjoy the free Gemini 3.1 Pro, GPT 5.6 Series, Grok 4.5, Claude model through API

48,3767,452Go
API Integration
View details

sub2api

by Wei-Shaw

Sub2API 一站式开源中转服务,让 Claude、Openai 、Gemini、Grok订阅统一接入,支持拼车共享,更高效分摊成本,原生工具无缝使用。

38,8308,041Go
API Integration
View details

claude-code-hub

by ding113

一个现代化的 Claude Code & Codex API 代理服务,提供智能负载均衡、用户管理和使用统计功能。

3,328387TypeScript
API Integration
View details

cc-gateway

by motiful

AI API identity gateway — reverse proxy that normalizes device fingerprints and telemetry for privacy-preserving API proxying

3,013501TypeScript
API Integration
View details

octopus

by bestruirui

One Hub All LLMs For You | 为个人打造的 LLM API 聚合网关

2,483394TypeScript
API Integration
View details

Developers Also Liked

Based on votes and bookmarks from developers who liked this skill

ECC

by affaan-m

10

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

242,21936,702JavaScript
AI Agentsai-agentsanthropicclaude-code
View details
15

An agentic skills framework & software development methodology that works.

234,96620,863Shell
AI Agentsai-agentsbrainstorming
View details

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

201,88160,308TypeScript
MCP Serversapisai-tools
View details

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

185,94028,768JavaScript
AI Agentsai-agentsanthropicclaude-code
View details

cc-switch

by farion1231

3

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

128,8688,826Rust
AI Agentsclaude-codeai-tools
View details