audit-changes
Audit only the git diff vs main (or specified base). Optimized for PR review.
Formal verification entrypoint — prove a property holds for all inputs with Halmos (symbolic, offline) or Certora (CVL) using ready-made property templates.
> /plugin marketplace add omermaksutii/RugProof > /plugin install rugproof@rugproof
How it fires
How this command gets triggered: by you, by Claude, or both.
/proverContext preview
What this command does when you run it.
Formal verification entrypoint — prove a property holds for all inputs with Halmos (symbolic, offline) or Certora (CVL) using ready-made property templates.
description: Formal verification entrypoint — prove a property holds for all inputs with Halmos (symbolic, offline) or Certora (CVL) using ready-made property templates. argument-hint: "[contract] [property]" allowed-tools: Read, Write, Bash, Skill, mcp__forge-runner__*, mcp__fuzz-runner__*
Fuzzing samples inputs; formal verification proves a property over *all* inputs (or returns a concrete counter-example). This command defaults to **Halmos** — symbolic execution that runs offline against your existing Foundry tests — and falls back to **Certora** (CVL spec) when configured.
`$ARGUMENTS` is `[contract] [property]`. If no property is named, propose from the templates by protocol type below. Each maps to a `check_` test function.
**ERC-20 — supply conservation / no inflation**
function check_transfer_preservesSupply(address to, uint256 amt) public {
uint256 pre = token.totalSupply();
token.transfer(to, amt);
assert(token.totalSupply() == pre); // no mint/burn on transfer
}**AMM — constant-product K monotonicity**
**Access control — only-owner can call X**
function check_setFee_onlyOwner(address caller, uint16 bps) public {
vm.assume(caller != owner);
vm.prank(caller);
try vault.setFee(bps) { assert(false); } catch { } // must revert
}**No-reentrancy invariant** — a guarded function cannot be re-entered (assert the guard slot is set during the external call).
**Solvency** — `sum(balances) <= totalAssets` holds after any single state transition.
halmos --function check_transfer_preservesSupply --solver-timeout-assertion 0
Or via the runner MCP so it shares the Foundry build:
mcp__forge-runner__symbolic(tool="halmos", function="check_setFee_onlyOwner")
If a `certora/` config + `.spec` exists, run `certoraRun` with the CVL rule instead — better for complex multi-contract invariants, but requires a cloud prover key.
Prover (Halmos): Vault
✓ check_transfer_preservesSupply PROVED (∀ to, ∀ amt:uint256)
✓ check_setFee_onlyOwner PROVED (∀ caller ≠ owner reverts)
✗ check_solvency COUNTEREXAMPLE
deposit(1) ; withdraw(2) → totalAssets() < Σ balances by 1 wei
rounding favors withdrawer → drains 1 wei per call
⧗ check_K_monotonic TIMEOUT (path explosion in swap loop)
re-run with --loop 2 and bounded reserves
Verdict: 1 proven counter-example (solvency). 2 properties proved. 1 inconclusive.Rugproof your code before someone else does. 🌐 Live site: omermaksutii.github.io/RugProof 📦 Latest: v1.0.0 — 45 commands · 23 agents · 45 skills · 13 MCP servers · tested, offline-first, with rule packs, a benchmark, non-EVM coverage, and post-deploy
Repo: omermaksutii/RugProof
Audit only the git diff vs main (or specified base). Optimized for PR review.
Deep audit — same as /audit but spawns more parallel subagents, runs multi-pass review, and chases exploit chains across files.
Audit third-party dependencies — resolve installed versions, cross-reference known-vulnerable releases, and flag vendored code that has diverged from upstream.
Diff two Rugproof audit reports (before vs after) to track regressions — what's new, what's fixed, and whether the grade moved.
Pull past public audits (Code4rena, Sherlock, Spearbit, etc.) for a deployed contract or known protocol.
Audit a deployed contract on a live chain. Pulls verified source from the block explorer, optionally forks the chain for live-state simulation.