SilentWitness

Quickstart

Install SilentWitness as a global command and run your first investigation in five minutes.

Prerequisites

RequirementWhy
Python 3.12 or 3.13silentwitness is a Python CLI
LLM API keyInvestigator drives an LLM — Anthropic / OpenAI / Gemini / Ollama
uv or pipxInstalls the CLI globally in an isolated env

Install (pick one)

SIFT 2026 OVA — one command

git clone https://github.com/Blockchain-Oracle/silentwitness && cd silentwitness && ./install.sh
silentwitness --help    # global command, ready

install.sh installs uv, runs uv tool install so the CLI shim lands at ~/.local/bin/silentwitness, then provisions Hayabusa / Chainsaw / Sigma rules / Zeek / Suricata / dfVFS / spaCy NER. Every download SHA256-verified.

Generic — any OS

# uv tool
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install "git+https://github.com/Blockchain-Oracle/silentwitness@main"

# pipx
pipx install "git+https://github.com/Blockchain-Oracle/silentwitness@main"

# npm (alias; delegates to uvx)
npm install -g silentwitness

Configure

export ANTHROPIC_API_KEY=...          # or OPENAI_API_KEY / GEMINI_API_KEY
export SILENTWITNESS_MODEL=anthropic:claude-sonnet-4-6
# Cost-safe OpenAI alternative: openai-chat:gpt-5-mini
Env varDefaultWhat
SILENTWITNESS_MODELanthropic:claude-sonnet-4-6Investigator model. provider:model.
SILENTWITNESS_CRITIC_MODELanthropic:claude-haiku-4-5Live critic model.
SILENTWITNESS_MAX_STEPS / SILENTWITNESS_MAX_ITERS80Hard cap on model requests.
SILENTWITNESS_MAX_TOKENS6,000,000Run-wide token cap.
SILENTWITNESS_CASES_DIR./casesWhere investigations are written.

Investigate

# 1) Pick and download a starter case from the SilentWitness catalog.
silentwitness starter-cases catalog
silentwitness starter-cases catalog "Standard Forensic Case"
silentwitness starter-cases download "Standard Forensic Case" /evidence/rocba

# 2) Register, prepare, index, investigate, review, and export.
silentwitness init rocba --examiner "$USER"
silentwitness register-evidence rocba /evidence/rocba
silentwitness prepare rocba
silentwitness index rocba
silentwitness investigate rocba
silentwitness review rocba                  # list staged findings
silentwitness review rocba --finding-id F-001
silentwitness approve rocba F-001
silentwitness verify --audit-chain rocba    # tamper check
silentwitness export rocba --md

The starter-case download is idempotent and resumable. If you already mounted or copied evidence into /evidence, skip the starter-cases download line and pass that existing file or folder path to register-evidence.

Repeat review --finding-id ... and approve ... for each finding you accept. The approval password is a case signing password for the HMAC ledger, not your OS/root password.

What Each Command Does

CommandMeaning
starter-cases catalog/downloadLists the official starter-case catalog and downloads a selected case into /evidence with resumable, idempotent transfers.
initCreates cases/<case-id>/, the empty report, audit directory, evidence registry, and case metadata.
register-evidenceAdds the evidence file or folder to the case, records its hash, classifies its type, and blocks unsafe writable evidence mounts.
prepareExtracts the artifacts SilentWitness needs from the registered evidence without modifying the original image.
indexParses those artifacts into a searchable SQLite/FTS evidence index.
investigateRuns the agent: form hypotheses, search the index, record cited observations, pivot, and stage findings.
reviewLists staged findings and prints the next commands to inspect or approve them. Use --finding-id for the full evidence block.
approvePromotes an accepted DRAFT finding into APPROVED report material and signs the case HMAC ledger.
verify --audit-chainRechecks the audit JSONL hash chains so tampering is visible.
exportPrints the final report.md path or renders --pdf. IOC sidecars run only when --ioc-format is requested.

That's the full workflow. The report drops at cases/rocba/report.md with inline [verify:audit_id] links resolving to JSONL audit entries.

After export, inspect:

cat cases/rocba/report.md
cat cases/rocba/findings.json | jq '.[] | select(.status == "APPROVED")'
ls cases/rocba/audit/*.jsonl

For GitHub-clickable report, findings JSON, audit JSONL, and ledger examples, open Demo artifacts. The current Mr. Evil VPS showcase bundle is also available directly on GitHub at docs/showcase_runs/mr_evil_openai_gpt_5_2_resume.

On this page