Humaid Alqasimi
AProver Space β€” built from main@d852c29
4f0bd4e
|
Raw History Blame Contribute Delete
1.68 kB

bmc-agent for Claude Code

Verify C code for memory-safety (and overflow / reachability) bugs from inside a Claude Code session, using CBMC-backed bounded model checking. Claude Code calls the bmc_verify tool on the function/file you're working on, gets structured findings (counterexamples, confidence, advisory triage), and helps you fix them.

What you get

  • MCP tool bmc_verify(file, function, goal) β€” goal: memsafety (default, low false-alarm), overflow, reach, or all.
  • Slash command /verify β€” e.g. /verify http.c parse_header.
  • Optional auto-verify hook β€” nudges a verify after Claude Code edits a .c file.

Requirements

  1. CBMC on PATH β€” apt install cbmc (Linux) or brew install cbmc (macOS).
  2. The claude CLI logged in β€” claude /login. bmc-agent runs its internal spec-gen/triage LLM through your Claude subscription (no separate API key, flat-rate). The MCP server strips ANTHROPIC_API_KEY from its child env so the subscription is used, and pins a subscription-served model.
  3. Python deps: pip install mcp, and bmc-agent's own requirements.

Install

Add the plugin (or point Claude Code's MCP config at bmc_mcp_server.py). The bundled .mcp.json registers the bmc-agent server; BMC_AGENT_ROOT points at the bmc-agent checkout.

Notes

  • Do not run the MCP server under a ulimit -v cap β€” the claude CLI (Node) needs unbounded virtual memory.
  • The solver verdict is ground truth; triage is advisory. memsafety does not check integer overflow β€” use goal=overflow/all for that.
  • Large files: raise BMC_AGENT_VERIFY_TIMEOUT (default 600s).