Getting Started¶
Prerequisites¶
- SIFT Workstation (Ubuntu-based). WSL2 on Windows is also supported.
- Python 3.10+
- sudo access (required for the ledger and signing-key folders under
/var/lib/vhir/) - A locally installed MCP-compatible LLM client that supports Streamable HTTP transport with Bearer token authentication (Claude Code, Codex, self-hosted LibreChat, etc.). The client must run on your machine or local network — cloud-hosted LLM services (claude.ai, etc.) cannot reach internal gateway addresses. OAuth is not supported.
Installation¶
SIFT Workstation (All Components)¶
The quickstart installs all MCP servers, the gateway, and the vhir CLI:
curl -fsSL https://raw.githubusercontent.com/AppliedIR/sift-mcp/main/quickstart.sh -o /tmp/vhir-quickstart.sh && bash /tmp/vhir-quickstart.sh
This runs setup-sift.sh in quick mode — MCP servers, gateway, vhir CLI, and client config in one step.
Step by Step¶
The installer prompts for:
- Installation tier: Quick (core only), Recommended (core + RAG + triage), or Custom
- Examiner identity: Your name slug (e.g.,
alice) - Client type: Claude Code, Codex, LibreChat, or Other
- Remote access: Whether to enable TLS and bearer token auth
Windows Forensic Workstation (Optional)¶
If you have a Windows forensic VM for Zimmerman tools and Hayabusa, join it to SIFT with a join code. In remote mode the SIFT installer asks "Will you connect a Windows forensic workstation?"; answering yes prints the command below. Or run this on SIFT at any time:
It asks for the Windows machine's IP address and prints a one-line PowerShell command that downloads the current installer and runs it with the code:
Set-ExecutionPolicy -Scope Process Bypass -Force; cd $env:TEMP; Invoke-WebRequest https://github.com/AppliedIR/wintools-mcp/archive/refs/heads/main.zip -OutFile wintools.zip; if ($?) { Expand-Archive wintools.zip -DestinationPath . -Force; if ($?) { .\wintools-mcp-main\scripts\setup-windows.ps1 -JoinCode <code> -GatewayHost <sift-ip> -GatewayPort 4508 } }
Run the printed line on Windows, in PowerShell as Administrator. When the gateway uses TLS (remote mode), the printed line also ends with -GatewayCertSha256 <pin>: the installer pins the gateway's certificate by that fingerprint, so run the line exactly as printed. Set-ExecutionPolicy -Scope Process allows scripts for this PowerShell window only. Windows 10/11 refuses to run them by default. With the join code the installer exchanges credentials with SIFT itself, so no token needs copying. When it has finished, run vhir setup client on each examiner machine.
First Case¶
1. Initialize a Case¶
This prompts for case name, case ID (with auto-generated default), cases directory, and description. Or provide a name directly: vhir case init "Suspicious Activity Investigation". Either way, a case directory is created under ~/cases/ with a unique ID and activated for the session.
2. Connect Your LLM Client¶
If you ran vhir setup client during installation, your LLM client is already configured.
Claude Code: Launch from the case directory so forensic controls and the sandbox apply:
Codex: cd ~/cases/<case-name> && codex -p valhuntir.
Other MCP clients (LibreChat, or any MCP client without a shell): Just start your client — it connects to the gateway at http://127.0.0.1:4508/mcp and the active case is resolved automatically from ~/.vhir/active_case.
3. Give It the Host List, Then Ingest¶
Every ingest waits until you confirm the hosts its evidence names. Before the first ingest, open the Examiner Portal's Hosts tab (vhir portal) and upload a list of the machines in scope: one name per line with an optional FQDN, or a CSV or TSV export with a header row. Or give the LLM any inventory to prepare as a draft there. Hosts on the list confirm as the evidence arrives. For any other host, a waiting ingest shows in the Hosts tab: Confirm the proposed machine, or choose Start now to let the run write with its hosts as proposed.
4. Start Investigating¶
Ask your LLM client to analyze evidence:
"Parse the Amcache hive at /cases/evidence/Amcache.hve"
"What tools should I use to investigate lateral movement?"
"Run hayabusa against the evtx logs and show critical alerts"
The LLM executes forensic tools via MCP and presents evidence as it finds it. Guide each phase — tell the LLM what to examine, review findings at each stage, and direct next steps. The human acts as the investigation manager. Too much LLM autonomy leads to cascading errors and wasted tokens. The LLM should check in at every major decision point.
5. Review and Approve¶
Findings made by the LLM are staged as DRAFT. Open the Examiner Portal to review:
The portal provides an 8-tab browser UI for reviewing findings, timeline events, evidence, IOCs, and more. Approve, reject, and commit decisions directly in the browser.
Or use the CLI:
vhir review --findings # View findings
vhir approve # Interactive review
vhir approve F-alice-001 F-alice-002 # Approve specific findings
6. Generate a Report¶
Or ask the LLM to generate a report using report-mcp:
Key Concepts¶
Examiner Identity¶
Every action is attributed to an examiner. Set your identity:
Resolution order: --examiner flag > VHIR_EXAMINER env var > ~/.vhir/config.yaml > OS username.
Case Directory¶
Each case has a flat directory with all data files:
cases/INC-2026-0225/
├── CASE.yaml # Case metadata
├── findings.json # Investigation findings
├── timeline.json # Incident timeline
├── todos.json # Investigation TODOs
├── evidence.json # Evidence registry
├── evidence/ # Evidence files (lock with vhir evidence lock)
├── extractions/ # Tool output and extracted artifacts
├── reports/ # Generated reports
├── approvals.jsonl # Approval audit trail
└── audit/ # Per-backend tool execution logs
Human-in-the-Loop¶
The AI cannot approve its own work. All findings and timeline events stage as DRAFT. Only a human examiner can move them to APPROVED or REJECTED. The Examiner Portal is the preferred review interface — approve and reject in the browser, then sign the decisions with your passphrase (the browser signs; the passphrase never leaves it). The vhir CLI (vhir approve) provides the same capability from the terminal. There is no MCP tool for approval.
Evidence IDs¶
Every tool execution generates a unique evidence ID: {backend}-{examiner}-{YYYYMMDD}-{NNN}. These IDs link findings to the specific tool executions that produced them.
Provenance Tiers¶
Findings are classified by where the audit trail recorded their tool executions:
| Tier | Source | Meaning |
|---|---|---|
| MCP | MCP audit log | Evidence from an MCP tool (system-witnessed) |
| HOOK | Claude Code hook log | Evidence from Bash with hook capture (framework-witnessed) |
| SHELL | supporting_commands parameter |
Evidence from direct shell (self-reported) |
| NONE | No audit record | No evidence trail — finding is rejected |