Skip to content
Security
Command

/symbolic

Symbolic execution via Halmos. For paths that fuzzing cannot reach.

From plugin
rugproof
1145 skills23 agents45 commands4 hooks
> /plugin marketplace add omermaksutii/RugProof
> /plugin install rugproof@rugproof

Command definition

symbolic.md
description: Symbolic execution via Halmos. For paths that fuzzing cannot reach.
argument-hint: "<contract-or-function>"
allowed-tools: Read, Write, Bash, Agent, mcp__fuzz-runner__*

/symbolic — symbolic execution

Wraps [Halmos](https://github.com/a16z/halmos) — symbolic execution of Foundry tests. Use when fuzzing has plateaued and you need to prove a property. Run it through `mcp__fuzz-runner__halmos` (offline-safe labeled sample if Halmos isn't installed).

Prerequisites

  • Halmos installed: `pip install halmos`
  • Test functions named `check_*` (Halmos convention).

Procedure

Step 1 — Translate fuzz tests to symbolic

Existing fuzz tests with `bound()` and concrete state can be promoted to Halmos by:

  • Renaming `testFuzz_*` → `check_*`
  • Replacing `bound()` with symbolic-friendly ranges (Halmos handles `vm.assume` better)
  • Removing concrete setup where symbolic exec can synthesize state

Step 2 — Generate Halmos checks

For each invariant from `/invariant`, write a `check_*` variant:

function check_ConvertToAssets_NeverExceedsTotalAssets(uint256 shares) public {
    vm.assume(shares > 0 && shares <= vault.totalSupply());
    uint256 assets = vault.convertToAssets(shares);
    assert(assets <= vault.totalAssets());
}

Step 3 — Run

halmos --function check_ConvertToAssets_NeverExceedsTotalAssets

Halmos either:

  • ✓ Proves the property holds across all reachable inputs.
  • ✗ Provides a concrete counter-example (input + state) that breaks it.

Step 4 — Output

Symbolic verification:
  check_ConvertToAssets_NeverExceedsTotalAssets     ✓ proved
  check_PreviewDeposit_Monotonic                     ✓ proved
  check_VirtualSharesPositive                        ✗ counter-example

  Counter-example for check_VirtualSharesPositive:
    state:    totalSupply = 0, totalAssets = 1e30
    input:    deposit(1)
    expected: shares > 0
    actual:   shares = 0  (rounded to zero by virtual-share dilution)

Notes

  • Symbolic exec is slow but exhaustive within its bounds.
  • Not all Solidity code is tractable for Halmos — heavy assembly, complex loops, unbounded state may time out.
  • Use as a complement to invariant tests, not a replacement.
Read more
@omermaksutii
Ships withrugproof

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

1152 skills23 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
11
Star history of omermaksutii/RugProof on GitHub, a chart by star-history.com

Other commands on rugproof.

audit-deep

audit-deep

Command

Deep audit — same as /audit but spawns more parallel subagents, runs multi-pass review, and chases exploit chains across files.

@omermaksutii@omermaksutiiInstall Command
audit-deps

audit-deps

Command

Audit third-party dependencies — resolve installed versions, cross-reference known-vulnerable releases, and flag vendored code…

@omermaksutii@omermaksutiiInstall Command
audit-diff

audit-diff

Command

Diff two Rugproof audit reports (before vs after) to track regressions — what's new, what's fixed, and whether the grade moved.

@omermaksutii@omermaksutiiInstall Command
audit-history

audit-history

Command

Pull past public audits (Code4rena, Sherlock, Spearbit, etc.) for a deployed contract or known protocol.

@omermaksutii@omermaksutiiInstall Command
audit-live

audit-live

Command

Audit a deployed contract on a live chain. Pulls verified source from the block explorer, optionally forks the chain for…

@omermaksutii@omermaksutiiInstall Command

More commands from other plugins.

deslop-reborn

deslop-reborn

Command

One iteration of the IronClaw Reborn de-slop loop — take ONE Reborn crate, fan out parallel review sub-agents (thermo-nuclear…

@nearai@nearaiInstall Command
audit

audit

Command

Audit a file, directory, or whole repo for insecure default configuration: fallback secrets, default credentials, fail-open…

@trailofbits@trailofbitsInstall Command
arsenal

arsenal

Command

Show which external bug-bounty tools are installed on this machine and print install hints for the missing ones. Curated from…

@awarexone@awarexoneInstall Command