cti-case
Run the full deterministic pipeline on one or more seeds: collect, ingest, prior-overlap, risk, cluster, ICD-203 assessment. Usage: /cti-case <CASE-ID> <seed>…
Render case deliverables — relationship graph (PNG/SVG/Mermaid) and a polished PDF/DOCX assessment. Usage: /cti-report <CASE-ID> [--graph|--pdf]
$ npx -y skills add 7onez/cti-expert --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
/cti-reportContext preview
What this command does when you run it.
Render case deliverables — relationship graph (PNG/SVG/Mermaid) and a polished PDF/DOCX assessment. Usage: /cti-report <CASE-ID> [--graph|--pdf]
name: cti-report description: "Render case deliverables — relationship graph (PNG/SVG/Mermaid) and a polished PDF/DOCX assessment. Usage: /cti-report <CASE-ID> [--graph|--pdf]" argument-hint: "<CASE-ID> [--graph|--pdf]"
Load the `cti-expert` skill, then render for: `$ARGUMENTS`
**Graph** (editable .mmd + SVG + hi-res/thumb PNG):
python3 scripts/backend/intel.py graph "$PWD/<case_graph.json>" "$PWD/<out-stem>" --legend
Pass **absolute paths** — the dispatcher runs with its own working directory and relative paths will not resolve.
**House report** (the editorial PDF + DOCX, composed deterministically from the case dir — sections I–XI, both confidence scales + confidence scatter, relationship graph + entity map, inference chain, temporal view + heatmaps, landing-page captures (web-scan / web-archive stand-ins for dead pages), per-domain dossiers, Appendices A–E incl. glossary; third-party selectors masked, internal tool/path names scrubbed; the landing-page step is the only egress — proxy-gated, `--no-screenshots` to skip, `--no-archive-fallback` to forbid the stand-ins):
python3 scripts/backend/intel.py house-report <CASE-ID> # → cases/<CASE-ID>/report/CTI-REPORT-<CASE-ID>-<date>.{pdf,docx,md}**Raw render** (when you have hand-authored house-rules markdown yourself):
python3 scripts/backend/intel.py report <assessment.md> <out-stem> --pdf --docx
`intel.py report` is the **IntelReport** renderer (xelatex/pandoc PDF + DOCX) applied to markdown you wrote; `house-report` composes that markdown for you from `assessment.json`/`assessment.md`, `whois/`, `raw/`, `clusters.json` and the ledgers. For the **flat-JSON deliverable bundle** — interactive HTML, the IOC/selector exports (STIX/CSV/JSONL/TXT), and the chart-rich dashboard DOCX/PDF for cases with no case dir — build the report JSON deterministically first, then run the generators (see SKILL.md §8):
uv run "$SKILL_DIR/scripts/build_report_data.py" "${INTEL_HOME:-$SKILL_DIR/intel_engine}/cases/<CASE-ID>" -o "CTI-REPORT-<CASE-ID>-<DATE>.json"Before rendering, confirm the assessment: states confidence on both axes (Admiralty per finding, ICD-203 per judgment — High/Moderate/Low, no hyphenated hybrids); tags each link with its evidence rung; reports empty findings as empty; and includes alternative hypotheses wherever attribution reaches a named individual.
**Inherit the source's TLP marking.** A TLP:RED case must not be published to an Artifact or any hosted URL.
CTI Expert — Cyber Threat Intelligence & OSINT analysis skill for Claude Code / Codex. 120+ commands, 57 techniques, 79 typed MCP tools, deterministic case pipeline + ICD-203 reports. No API keys required for core.
Repo: 7onez/cti-expert
Run the full deterministic pipeline on one or more seeds: collect, ingest, prior-overlap, risk, cluster, ICD-203 assessment. Usage: /cti-case <CASE-ID> <seed>…
False-positive control — is this indicator a real operator link or shared noise? Run BEFORE clustering on anything. Usage: /cti-check <indicator>
Expand and correlate an existing case — peers, shared indicators, TLS overlap, reverse-WHOIS. Usage: /cti-cluster <domain|CASE-ID>
Collect pivot artifacts from ONE target — favicon, trackers, wallets, emails, CORS, mail/SPF/DMARC, WHOIS, co-tenancy. Usage: /cti-pivot <url|domain|ip>…
Manage the egress proxy / rotation pool for the skill's HTTP(S) requests (keyless crt.sh, Wayback, urlscan, CLD, WHOIS, /apikeys test; raw TLS/JARM probes need…
Have I seen this before? Check a seed against every prior case BEFORE collecting. Always run this first. Usage: /cti-recall <domain|indicator>