Skip to content
AI EmployeeSuper-AgentsAgent-to-AgentBenchmarksPricingBlog

Anthropic Formal Verification: Claude Proved 123 Libraries

At a glanceQuick answers
What did Claude prove?
That 239 fuzz-test entry points in 123 open-source libraries never crash on any input under 64 MB, checked by the Rocq proof kernel on the compiled RISC-V code.
Does that make the libraries bug-free?
No. Remaining bugs sit in the trusted models of RISC-V and Linux, the theorem statements, the proof checker, or outside the scope of what was proved.
Can I use it?
Anthropic is publishing a subset of the proofs, and Theorem offers to run the pipeline for other open-source projects and is publishing a Claude skill.
Editorial data illustration on a near-white ground: a long strip of code feeds into a large green proof seal stamped 123 libraries, while a few red bug markers fall out of the strip into a tray labeled found while proving
Fig 0Proving the code turned up the bugs. Made by CellCog's image agent, running GPT Image 2.5.

Anthropic published research on October 22, 2026 showing Claude writing machine-checked proofs that real open-source code cannot crash. Working with Theorem, the Frontier Red Team had Claude prove that 239 fuzz-test entry points across 123 libraries from Google’s OSS-Fuzz never crash on any input under 64 MB.

The opening line of Anthropic’s write-up sets the stakes: “Most software is riddled with bugs, which AI can now easily find and exploit.” Its answer is to prove the code instead of only testing it, at a scale that used to take years of expert work.

On this page · 7 sectionsOpen
  1. What Claude proved
  2. Why this used to be impractical
  3. The bugs it found on the way
  4. What the proof does not cover
  5. What it means if you ship code
  6. Update log
  7. Sources
Key points5 · 5 min full read
  1. A strip of code passing into a round green seal.
    Anthropic’s Frontier Red Team and Theorem had Claude prove that 239 fuzz-test entry points across 123 OSS-Fuzz libraries never crash on any input under 64 MB.
  2. A stack of pages with a check mark from a small machine.
    The proofs run on the compiled RISC-V machine code, total about 180 million lines of Rocq, and are checked by the Rocq proof kernel, so people do not review them line by line.
  3. A magnifier over a red bug falling from a code strip.
    Trying to prove the code turned up hundreds of bugs, including an out-of-bounds write that only fires on a rare 20 MB input and a rediscovery of CVE-2026-56132 in libexpat.
  4. Two bars, the shorter one marked with a down arrow.
    Opus 5.5 proves half of a 36-task test set with about 40% fewer tokens than Opus 5, and agents sharing a workspace of proofs needed 17% fewer tokens.
  5. A seal with a dashed border around part of a chip.
    The guarantee has edges: single-threaded static RISC-V binaries on Linux, AddressSanitizer crashes only, and only the entry points that were proved.

§ 01What Claude proved

The trick is the specification. Every fuzz test already defines a bug as any input that makes it crash. Claude turned each fuzz test into a statement about the compiled RISC-V code, that it never crashes for any input under 64 MB, and then wrote a proof of it.

Animated diagram: code becomes a mathematical model, a proof attempt fails at one highlighted spot, the spot is marked as a bug and fixed, the proof runs again and ends in a green check reading no crash for any input under 64 MB
Fig 1Proving code can't crash: a failed proof points at the bug
Measure Figure
Fuzz entry points proved crash-free 239
OSS-Fuzz libraries covered 123
Input size covered Every input under 64 MB
Level of the proof Compiled RISC-V machine code
Total proof size About 180 million lines of Rocq
Typical proof About 600,000 lines
Median binary proved 18,000 RISC-V instructions
Time taken A few weeks
Table 1What Claude proved (Anthropic and Theorem, October 22, 2026)

Nobody reads 180 million lines of proof. Anthropic says “virtually none of it needs to be manually reviewed” because the Rocq proof checker confirms each proof meets its specification. What a developer has to trust shrinks to three things: the models of RISC-V and Linux processes, the exact theorem statements, and the checker itself.

§ 02Why this used to be impractical

Formal verification has worked for decades, but at a price only safety-critical code could pay. Anthropic’s example is seL4, an operating system kernel.

Effort on the seL4 kernel, in person-yearsBar chart: building the seL4 kernel took 2 person-years and formally verifying it took 20 person-years, highlightedBuild the seL4 kernel2Formally verify seL420Effort on the seL4 kernel, in person-yearsBar chart: building the seL4 kernel took 2 person-years and formally verifying it took 20 person-years, highlightedBuild the seL4 kernel2Formally verify seL420
Fig 2Effort on the seL4 kernel, in person-years

Proving the code took ten times longer than writing it. That ratio is why verification stayed in places like avionics. Claude covering 123 libraries in a few weeks is the change.

§ 03The bugs it found on the way

A proof attempt that fails tells you where the code can break. Claude was allowed to patch what it found, regenerate the specification and keep proving, so the effort turned up hundreds of bugs, many of which a fuzzer would rarely reach because fuzzers usually cap inputs at 1 MB.

Where Bug Why a fuzzer misses it
A decompressor copy Counter underflow leading to an out-of-bounds write Needs an input of about 20 MB with one rare layout
An image decoder Out-of-bounds read Needs a 64 MB input and over 2 GB of memory
Another library Out-of-bounds read Needs a specific sequence of calls across two handles to one file
libexpat CVE-2026-56132, rediscovered Needs deeply nested input
A file-loading feature Restriction not always enforced A logic bug that never crashes
Table 2Bugs found while proving (Anthropic, October 22, 2026)

The same methods worked outside fuzz tests. Claude wrote a formal spec of RFC 1950 and proved the Linux kernel’s zlib meets it, on the x86 binary. It built a Rust interpreter for a large subset of Python and proved it follows CPython semantics; across 1.7 million random programs it matched CPython in 99.95% of runs. On one widely used PDF reader, the team found as many security bugs in a week as are usually reported in a year.

§ 04What the proof does not cover

Anthropic is direct about the edges. The proofs assume a single-threaded, static RISC-V binary linked against musl, while most people run these libraries on x86 or ARM with glibc. AddressSanitizer does not catch every memory-safety bug, not every entry point of each library was proved, and a caller can still misuse a library correctly proved on its own.

The cost is the other limit: proofs can take hundreds of millions of tokens. Two numbers suggest that falls. On 36 small tasks built from OSS-Fuzz code, Opus 5.5 proves half with about 40% fewer tokens than Opus 5. Agents that could copy each other’s finished proofs needed 17% fewer tokens and cost less than a solo agent on 30 of the 34 proofs they completed.

§ 05What it means if you ship code

  • Fuzz tests become specifications. If you already fuzz a library, that harness is the starting point for a proof.
  • Proofs are reusable. Most of a proof covers code every C program shares, so each shared dependency only needs proving once.
  • Anthropic is publishing a subset of the proofs plus the RISC-V and Linux semantics, and Theorem offers to run the pipeline on other open-source projects.
  • Treat “formally verified” as a claim with a stated scope, and read the scope.

CellCog’s AI employees run on Claude Opus 5.5, the model in Anthropic’s token comparison. We had no part in this research.

§ 06Update log

  • October 22, 2026: page opened from Anthropic’s research post, with an explainer scene of the proof loop.

§ 07Sources

Frequently asked5 questions

Q1What is formal verification?

Translating code into a mathematical model and proving it always follows a stated rule. If the proof fails, the failure points at where a bug could be.

Q2Why use fuzz tests as the specification?

A fuzz test already says what counts as a bug: any input that crashes it. Proving it never crashes for any input under 64 MB makes running that fuzzer pointless.

Q3How long does this take?

The OSS-Fuzz effort ran over a few weeks. Anthropic says proofs can take hundreds of millions of tokens, which is the main cost limit today.

Q4Who is Theorem?

Anthropic’s collaborator on the project. It supplied the RISC-V and Linux process semantics and is offering to run the same pipeline for other open-source projects.

Q5Which model did the work?

Claude. Anthropic’s token comparison shows Opus 5.5 finishing proofs with about 40% fewer tokens than Opus 5 on its 36-task set.

Published 22 October 2026 All Trust, permissions & security →