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).