A formal security proof moves through three phases (our paper, Fig. 1). Shannon Prover's scope is Phase III: you bring the security model (Phase I) and the decomposition into lemma-level obligations (Phase II), and it writes the tactic-level proof script for each lemma — the tedious, time-consuming part you can now delegate.
qed.The phases feed back: a proved lemma lets the cryptographer proceed, while a stalled search is itself information — it often means the Phase II decomposition needs revising. “Given the decomposition, Shannon Prover can fully automate Phase III for MEE-CBC and ChaCha20-Poly1305 in a day.”
Shannon Prover talks to the agent through the
Model Context Protocol.
The agent gets exactly one tool: submit_proof_intent —
one proof-level action per turn. The always-available moves are deliberately few:
commit a tactic, undo, rewind to a checkpoint, restart, finish. Every other intent is
offered by the panel itself — when the proof state makes a lookup, a diagnosis, or a
specialized view relevant, the panel surfaces it that turn.
Everything else stays behind the manager: the live EasyCrypt session, files, session state, repair prompts. When you run a proof, each tree node automatically gets its own private MCP server wired to a headless Claude Code instance — there is nothing to configure, and the agent physically can't touch the prover except through this tool.
…plus the intents the panel offers in context, turn by turn.
{ "intent": "commit_tactic",
"payload": {
"tactic": "while (={r} /\\ 1 <= r{1} <= 6)."
} }
The two modes drive the same manager and the same EasyCrypt session — only the panel changes, which is exactly what our interface ablations measure. Flip between them live in the playground.
Prerequisites: macOS or Linux, opam, Python ≥ 3.12 with uv, and the Claude Code CLI (logged in). Grab the source from github.com/SkyShannonProver/shannon-prover and run the steps below from the checkout.
The pipeline expects the opam switch to be named easycrypt
(configured in core/easycrypt/ec_env.py).
opam init
opam switch --empty create easycrypt
opam pin -yn add easycrypt https://github.com/EasyCrypt/easycrypt.git
opam install --deps-only easycrypt
opam install alt-ergo.2.6.0 easycrypt
easycrypt why3config
Then, in every shell that runs the prover or the playground:
eval "$(opam env --switch=easycrypt)"
uv sync # installs from pyproject.toml (Python ≥ 3.12)
claude --version # the prover drives the Claude Code CLI — install & log in first
The repo ships a /prove command. Open Claude Code in the checkout and
point it at any lemma under eval/examples/:
# inside a Claude Code session opened on the repo:
/prove PIR_correct # Workbench mode (default)
/prove PIR_correct l1_goal_projection # Goal-only mode
Claude finds the lemma's source, generates a one-target eval suite, and launches the run in eval mode — the source is copied into an isolated container and the target's proof body is stripped, so the agent proves it blind. All the MCP plumbing (per-node server, config, tokens) happens automatically. Equivalent direct command:
eval "$(opam env --switch=easycrypt)"
uv run python -m eval_suite.run --suite eval_suite/suites/demo_pir.json \
--profiles l4_checked_action_surface
Metrics land in artifacts/eval_suite/…/eval_metrics.md; every run also
produces a replayable bundle under
agent_view_runs/<lemma>/<timestamp>__<commit>/ — browse it turn by
turn in the benchmark browser. A run counts as proved only if
EasyCrypt accepts the complete proof with no admit. anywhere; the pipeline
itself rejects proofs that still have one.
nice() syscall prevents why3server from starting, and smt()
fails with “cannot start & connect to why3server”. Run outside sandboxes.claude-opus-4-8 at effort
high; override with "model"/"effort" keys under
the suite's defaults, or --prover-model/--prover-effort
on direct workflow.orchestrator runs.uv run --with fastapi --with "uvicorn[standard]" uvicorn playground.server:app --port 8000
— local only, no auth layer; one EasyCrypt workload per checkout.Take the agent's seat — drive a live EasyCrypt proof through the exact panel the agent reads.
Model capability board and replayable run bundles.