Changelog
All notable changes to the Capframe dispatcher CLI + findings schema land here. Format loosely follows Keep a Changelog; versioning follows SemVer.
The three underlying modules (mcp-recon, capnagent, mcp-guard) keep their
own changelogs in their own repos.
v0.2.1 — 2026-05-19
Fixed
capframe guardactually works now. v0.2.0 sent--policy <p> --addr <a>tomcp-guard, butmcp-guard's argparse CLI takes one of three positional subcommands (synthesize/evaluate/backtest). Any user who triedcapframe guard ...end-to-end hit a dead dispatch.
Changed
capframe guardnow mirrorsmcp-guard1:1:capframe guard synthesize <detail> [--technique-id X] [--kind K]capframe guard evaluate <policy> <tool> <args> [--user-context J]capframe guard backtest <policy>
- README + landing-page
Demosection updated to match. - Pairs with mcp-guard v0.5.6, which adds the
--versionflag Capframe's semver gate needs (hardcoded so it works in PyInstaller bundles).
Tests
- Three new integration tests (Windows + Unix mock dispatch) confirm each guard subcommand forwards the right argv. Total test count now 22 in capframe + 21 in mcp-recon + smaller suites in the other modules.
v0.2.0 — 2026-05-19
Added
capframe install [find|bind|guard]— downloads each module from its GitHub Releases, verifies the.sha256sidecar, extracts into~/.capframe/bin/, and records the pinned version + hash in~/.capframe/state.json. State.json doubles as a supply-chain receipt.- Semver gating on dispatch — every
capframe <module> ...invocation first runs<bin> --versionand matches againstModule::version_req. Mismatches fail fast with acapframe install <module>hint instead of dispatching and getting a wrong-arg error three layers deep. --limit key=valueoncapframe bind— generic, repeatable constraint passthrough. Replaces the Shopify-specific--max-refundflag.- Real templated HTML report via
maud(severity cards, per-finding cards, mappings table, print CSS), plus a--format pdfpath that auto-detectsweasyprint/chromiumonPATH. - JSON Schema conformance test suite for
findings.v1(5 tests: example validates, Rust roundtrip validates, synthetic minimal validates, unknown severity rejected, malformed OWASP ID rejected). - Cross-platform integration tests for the dispatcher — Unix uses
#!/bin/shmocks, Windows uses.batmocks (via PATHEXT lookup).
Fixed
install.shcouldn't find the binary inside the release archive'scapframe-<ver>-<target>/subdirectory. Now usestar --strip-components=1. (Surfaced by the first Docker smoke test; commit9d7a3c5.)install.shno longer prints a deadcapframe.ai/discordURL — no such redirect exists.
Changed
- Workspace deps:
dirs,maud,semver,sha2,ureq(+jsonschema,assert_cmd,predicates,tempfilein dev). - README rewritten — accurate about the three modules living in
separate repos, the version-pinning policy, the
capframe installflow, and the PDF tool requirement.
v0.1.0 — 2026-05-18
Added
- Initial public release. Dispatcher CLI that resolves the
Find / Bind / Guard modules via
which::whichonPATHand shells out to each.capframe-findingscrate carrying thefindings.v1Rust types matching a public JSON Schema (Draft 2020-12). Static marketing site atcapframe.ai. Cross-compiled to 6 targets via the tag-driven release workflow. install.sh+install.ps1with.sha256verification.