Skip to content

CLI reference

python -m dragnet <command> (or the dragnet console script).

Command Purpose
assess CASE [--kg KG] [--weight kind=w ...] [--format md\|json\|stix] [--sign-key KEY] [-o OUT] assess one case file; --sign-key writes the JSON report with an Ed25519 signature over its body and custody chain (not with stix)
demo [--kg KG] run the bundled synthetic scenarios
build-kg [--attack-version 19.2] [--with-campaigns] [--data DIR] [-o OUT] build a knowledge graph from downloaded ATT&CK/MISP
case-study [NAME] [--mode time-of-incident\|retrospective] [--format summary\|md\|json] curated real cases (needs data)
export-cypher [--kg KG] [--case CASE] [-o OUT] Neo4j Cypher script
serve [--kg KG] [--host 127.0.0.1] [--port 8000] [--allowed-host NAME ...] optional FastAPI server (needs [api])
keygen PREFIX [--force] Ed25519 key pair PREFIX.key (mode 0600) / PREFIX.pub (needs [sign])
verify REPORT [--pub PUB] [--allow-unpinned] check the custody chain and, if present, the signature over the report body; exit 0 valid, 1 tampered, 3 valid but signer not pinned or a legacy chain-only signature
import CASE_ID [--revenant F ...] [--vitrine F ...] [-o OUT] build a case file from REVENANT/VITRINE JSON

Weight kinds: ip, domain, file_hash, imphash, tlsh, code_reuse, family, ttp, victimology, rich_header, language, mutex, tool, ttp_profile; values must be in [0, 1]. Markdown reports print every weight in a Weights table and mark overridden ones; JSON reports list them under weights.

Exit status: 0 success, 2 usage or input error (one line on stderr, also for a missing optional extra), 1/3 as above for verify.

Scripts: scripts/download_data.py (pinned, checksummed downloads), scripts/run_benchmarks.py (all benchmarks, writes results/ and docs/figures/; --render-only re-renders them from results/benchmark.json), scripts/compare_results.py (the bench reproducibility gate), scripts/build_demo_pages.py (this site's demo reports), scripts/check_mermaid.mjs (diagram parse check).