
make prove. It pins a Hermes release, runs hermes plugins validate . --install-deps, runs the full pytest suite, runs a real-Hermes integration scenario, and writes proof/proof.json plus proof/PROOF.md.
scripts/live_demo.sh needs a model key you already configured for Hermes. Do not paste keys into the repo or the docs.
CI matrix
.github/workflows/ci.yml runs on every push to main and on every pull request. The matrix is Hermes v0.23.0 and v0.23.1, fail-fast: false. Each cell installs that tagged Hermes, validates the plugin, installs react-dom for the Desktop page render test, and runs pytest.
Last proof pack
Numbers below are fromproof/proof.json and proof/PROOF.md on current main. The scenario loads Mandate through Hermes’s own plugin loader, binds real cron execution identities for nightly-triage, and sends each call through model_tools.handle_function_call, so the real pre_tool_call path decides. Legit calls really run in a throwaway git repo with a fake HOME.
Warm means Hermes for that tag was already installed. Cold means the run cloned and installed it. Times were measured on the build VM that generated the proof pack.
The proposal from those 3 observed runs has 4 tools, 2 read paths, 1 write path, 4 commands, and
max_writes_per_run: 1. The YAML comment counts that as 12 rules (Policy.rule_count(), including the write budget). proof.json’s proposal_rules field is 11, because it counts only lines with a # seen comment and skips the write budget.


proof/PROOF.md.