Infrastructure for proving what changed in financial data.
CMD+RVL builds deterministic tooling, event pipelines, and intelligence layers so that every data change is traceable, every conclusion is reproducible, and every gap is surfaced — not buried.
The open-source CLI tools below are the protocol layer: composable, deterministic Rust binaries that anyone can run. Same bytes in, same answer out, every time. When a confident answer isn't possible, the tool refuses and tells you exactly what to fix.
# What's in each quarterly report?
vacuum q3/ q4/ | hash | lock save --name quarterly
# What actually changed?
rvl q3/positions.csv q4/positions.csv
# → 3 of 847 rows changed, net +$2.1M notional, 1 new position
# Seal the evidence
pack create --lock quarterly.lock --include q3/ q4/
# → pack-a7f3b2.pack (content-addressed, tamper-evident)Every CMD+RVL tool follows four rules:
- Structured output — emits JSON with a
versionfield (e.g.,rvl.v0), anoutcome(domain result), and arefusal(when it can't operate) - Self-description —
--describeemits a machine-readable operator manifest;--schemaemits the output JSON Schema - Witness — appends a content-addressed, hash-chained record to
~/.cmdrvl/witness.jsonlon every invocation - Determinism — same inputs, same output, every time. No randomness, no side effects, no network calls in the truth path
Tools that follow the protocol compose automatically: assess scores any tool's output via policy rules. pack seals any tool's output into tamper-evident evidence. The witness ledger records any tool's invocation. No central coordinator — the protocol is the coordinator.
Composable Rust CLIs. Each tool does one thing. Agents decide what to run — these tools decide what is true.
| Tool | What it does | Install |
|---|---|---|
| vacuum | Enumerates artifacts in scope, emits a deterministic sorted JSONL manifest with size, mtime, and MIME type | brew install cmdrvl/tap/vacuum |
| hash | Streaming content hashing — adds SHA-256 or BLAKE3 byte identity to every artifact in a manifest | brew install cmdrvl/tap/hash |
| fingerprint | Template recognition — tests artifacts against versioned assertion-based definitions and produces content hashes | brew install cmdrvl/tap/fingerprint |
| profile | Column-scoping configs for report tools — draft/freeze lifecycle, deterministic key suggestion, schema linting | brew install cmdrvl/tap/profile |
| lock | Dataset lockfiles — like Cargo.lock for data. Self-hashed, tamper-evident, with lock verify for integrity checks |
brew install cmdrvl/tap/lock |
| shape | Structural comparability gate — can these two datasets be compared at all? | brew install cmdrvl/tap/shape |
| rvl | Reveals the smallest set of numeric changes that explain what actually changed between two datasets | brew install cmdrvl/tap/rvl |
| canon | Deterministic entity resolution — resolves identifiers against versioned registries with full audit trail | brew install cmdrvl/tap/canon |
| pack | Evidence sealing — bundles lockfiles, reports, and tool outputs into one immutable, content-addressed evidence pack | brew install cmdrvl/tap/pack |
All nine tools record to the witness ledger — every invocation is content-addressed, hash-chained, and auditable.
Typical pipeline: vacuum (what's there?) → hash (prove identity) → fingerprint (recognize templates) → lock (pin inputs) → shape (are these comparable?) → rvl (what changed?) → pack (seal the evidence)
| Tool | What it does |
|---|---|
| verify | Invariant checks — single-artifact rules (JSON) and cross-artifact constraints (SQL via DuckDB) |
| benchmark | Extraction accuracy scoring — checks (entity, field, value) assertions against candidate datasets |
| compare | Exhaustive cell-by-cell diff without materiality compression |
| assess | Decision framing — PROCEED / ESCALATE / BLOCK against declared policy |
| Tool | What it does |
|---|---|
| cmdrvl-xew | Detects enforcement-fragile XBRL patterns in SEC filings, produces reproducible Evidence Packs |
| edgar-change-interpreter | Claude skill for identifying material changes and silent risks in SEC filings |
| edgar-fabric-ingest | Reference implementation for ingesting EDGAR disclosures into an append-only event store |
| Tool | What it does |
|---|---|
| regret | Mines git history for high-precision regret signals — reverts, linked fixes, patch-id matches |
| twinning | In-memory database twin that speaks the real wire protocol — fast testing without a real database |
These tools are built for agent orchestration. Two reference prompts help agents learn the protocol:
- Agent Operator Guide — workflows, refusal recovery, schema discovery, and the full tool map
- System Prompt — compact drop-in for agent context windows (~30 lines)
Every shipped tool supports <tool> --describe for machine-readable self-discovery and <tool> --schema for runtime JSON Schema output.
brew install cmdrvl/tap/vacuum
brew install cmdrvl/tap/hash
brew install cmdrvl/tap/fingerprint
brew install cmdrvl/tap/profile
brew install cmdrvl/tap/lock
brew install cmdrvl/tap/shape
brew install cmdrvl/tap/rvl
brew install cmdrvl/tap/canon
brew install cmdrvl/tap/pack