VerifierBench: Benchmarking the Generation of Executable Verifiers for LLM Agents
Organizations: University of Pennsylvania · University of Illinois at Urbana-Champaign · University of California, Berkeley · New York University ·
Abstract
Agents need reliable ways to validate their outputs, both when completing tasks and when filtering synthetic training data. We study verifier generation: from the instruction and environment available for solving a task, an agent writes an executable verifier that must accept every valid solution and reject invalid ones. We introduce VerifierBench, a benchmark of 222 tasks from six agent benchmarks spanning tool-call, state-based, and code verification, with 4,993 hidden test cases that include alternative valid solutions and attacks; Verifier4Verifier (V4V), a six-check audit, screens its source verifiers and test suites. Across 19 models in a common agent harness, normalized balanced accuracy ranges from 10.6 to 62.1, with generated verifiers consistently rejecting invalid solutions more reliably than they accept valid ones. This apparent strength can mask overly restrictive verification: most false rejections in the analyzed records come from verifiers that accept no tested solution to a task. Case studies reveal unsupported assumptions about solution formats, tool use, and code changes that exclude valid solutions. These errors survive self-testing because agents test solutions that share the verifier's mistaken assumptions, or submit verifiers without confirming that any correct solution passes. These findings suggest testing both whether a verifier accepts a correct solution and whether it accepts other solutions permitted by the task. The project page and dataset are publicly available.
Figures & tables
| Task: credit-card retention. Submit the requested card application and record the closure reason. Permitted tools include the read-only query get_user_dispute_history_7291 . | |
| Generated check: The agent creates a tool allowlist that omits this query and rejects unlisted operations. | |
| Self-tests during generation | Hidden positive test cases |
| The intended-positive candidate omits the dispute-history query. | Valid candidates include the permitted dispute-history query. |
| The positive self-test returns FAIL : replay is unavailable after budget exhaustion. | The verifier rejects the query as “Unrelated or unsupported mutation.” |
| The agent acknowledges that positive validation is incomplete. | All 9 positive cases receive FAIL without environment execution. |
| An incomplete allowlist excludes a legal read; self-testing never confirms acceptance of a complete valid solution. | |
| Task type | Source benchmarks | Tasks | PASS | FAIL |
|---|---|---|---|---|
| Tool-call | BFCL v4 ( Patil et al., 2025 ) , ACEBench ( Chen et al., 2025 ) | 95 | 734 | 2214 |
| State | -bench ( Barres et al., 2025 ) , AppWorld ( Trivedi et al., 2024 ) , AgentDojo ( Debenedetti et al., 2024 ) | 80 | 642 | 769 |
| Code | SWE-bench Verified ( Jimenez et al., 2024 ) | 47 | 190 | 444 |
| Total | 222 | 1566 | 3427 |
| Model | BA norm | TPR | TNR | FPR h |
|---|---|---|---|---|
| GPT-6-astra | 62.1 | 67.4 | 94.6 | 7.4 |
| Claude Opus 4.8 | 54.0 | 67.7 | 86.3 | 13.5 |
| Kimi K3 | 53.4 | 70.2 | 83.2 | 13.4 |
| GPT-5.6-sol | 52.9 | 56.8 | 96.0 | 0.8 |
| GPT-5.6-terra | 52.9 | 56.5 | 96.3 | 3.6 |
| GLM-5.2 | 48.8 | 68.1 | 80.8 | 12.1 |
| Model | Native | Pi | Native | |
|---|---|---|---|---|
| Claude Opus 4.8 | Claude Code | 54.0 | 66.2 | |
| GPT-5.5 | Codex | 46.6 | 30.3 | |
| GPT-5.6-sol | Codex | 52.9 | 26.2 | |
| GPT-5.6-terra | Codex | 52.9 | 31.0 | |
| GPT-6-astra | Codex | 62.1 | 58.0 | |
| Gemini 3.5 Flash | Gemini CLI | 35.7 | 50.7 |
| Unjustified check | Tasks | Verifiers | Positive FAIL |
|---|---|---|---|
| Self-tests used only allowed solutions | |||
| Overbroad source-file protection | 2 | 3 | 12 |
| Rejects permitted representations | 3 | 5 | 35 |
| Subtotal | 5 | 8 | 47 |
| No positive self-test passed | |||
| Rejects authorized user-tool calls | 3 | 3 | 27 |
Appendix figures & tables18 assets
Supplementary material from the paper’s appendix.
Appendix
| Element | Content |
|---|---|
| Model input | Task instruction and environment, identical to the solving setting; the reference implementation and hidden test cases are withheld. |
| Model output | One executable verifier for task . |
| Test suite | Positive cases (the reference solution and valid variants) and negative cases (ordinary errors and attacks), each carrying a reference label. |
| Reference | A fixed reference verifier retained after V4V screening; its decision on every test case equals the reference label. |
| Scoring | For each hidden case, compare ’s PASS / FAIL decision against the reference label. |
| Metrics | Task-weighted TPR and TNR, summarized by BA norm . |
| Source | Type | Tasks | PASS | FAIL | Variants | Attack |
|---|---|---|---|---|---|---|
| BFCL v4 | Tool-call | 45 | 390 | 1247 | 345 | 270 |
| ACEBench | Tool-call | 50 | 344 | 967 | 294 | 200 |
| Tool-call subtotal | 95 | 734 | 2214 | 639 | 470 | |
| -bench | State | 32 | 287 | 303 | 255 | 96 |
| AppWorld | State | 28 | 216 | 278 | 188 | 56 |
| AgentDojo injection | State | 10 | 60 | 86 | 50 | 42 |
| Source | Task ID | Reason |
|---|---|---|
| BFCL | parallel_65 | D |
| SWE | astropy__astropy-7671 | S |
| TB | feal-differential-cryptanalysis | P |
| TB | catch-me-if-you-can | P |
| TB | amuse-install | P |
| TB | feal-linear-cryptanalysis | P |
| Check | Recorded passes | Evidence and coverage |
|---|---|---|
| C1: Replay | 222/222 | Reference decisions on all 4,993 cases agree with the labels assigned during construction. |
| C2: Repeatability | 222/222 | Repeated executions under the same initial conditions return stable decisions that agree with the labels. |
| C3: Provenance | 222/222 | All 4,993 case files and 222 task specifications match their frozen snapshots. |
| C4: Input-label consistency | 222/222 | A scan of all 4,993 cases finds no opposite-label groups with identical public inputs within a task. |
| C5: Trivial baselines | 222/222 | Every task has passing records for all three comparisons: always-accept, always-reject, and exact-match. |
| C6: Mutation testing | 222/222 | Each task’s suite detects every mutation in its operator set (1,410 configurations total); Section B.3 reports the criterion and representative detection evidence. |
| Source | Tasks | Operators/task | Configurations | Checks modified |
|---|---|---|---|---|
| BFCL | 45 | 9 | 405 | Required and extra arguments, types, values, function calls, and containers. |
| ACEBench | 50 | 11 | 550 | Total calls, function sets, per-function call counts, and arguments. |
| -bench | 32 | 3 | 96 | Communication, database, and action reward checks. |
| AgentDojo | 20 | 2 | 40 | Text and final-state checks. |
| AppWorld | 28 | 3 | 84 | Answer comparison, state assertions, and failure handling. |
| SWE-bench | 47 | 5 | 235 | Newly passing and previously passing tests, missing tests, expected failures, and empty reports. |
| Label | Class | Count | Construction and intended distinction |
| PASS | gold | 222 | Reference solution; tests acceptance of the designated reference solution. |
| PASS | cosmetic | 840 | Changes formatting or other irrelevant representation details; tests acceptance of equivalent presentations. |
| PASS | overstrict_trap | 504 | Uses an alternative implementation or execution path; tests acceptance of valid alternatives. |
| FAIL | base | 222 | Uses an initial, unrepaired, or otherwise unfinished outcome; tests recognition of basic task failure. |
| FAIL | partial | 999 | Removes required arguments, actions, or changes; tests whether all required parts are checked. |
| FAIL | near_miss | 907 | Alters a consequential value or local behavior; tests detection of subtle errors. |
| Model | Alternative | BA norm Pi harness | BA norm Alternative | BA norm | Submitted/ Pi harness | Submitted/ Alternative |
|---|---|---|---|---|---|---|
| Claude Opus 4.8 | Claude Code | 54.0 | 66.2 | 218/222 | 220/222 | |
| GPT-6-astra | Claude Code | 62.1 | 61.1 | 222/222 | 222/222 | |
| GPT-6-astra | Codex | 62.1 | 58.0 | 222/222 | 219/222 | |
| GPT-6-astra | mini-swe | 62.1 | 54.9 | 222/222 | 222/222 | |
| GPT-6-astra | OpenClaw | 62.1 | 51.1 | 222/222 | 216/222 | |
| Gemini 3.5 Flash | Gemini CLI | 35.7 | 50.7 | 222/222 | 221/222 |
| Model | Harness | BA norm | TPR | TNR | FPR h |
|---|---|---|---|---|---|
| Claude Opus 4.8 | Claude Code | 66.2 | 75.8 | 90.4 | 7.8 |
| GPT-6-astra | Claude Code | 61.1 | 68.0 | 93.2 | 9.6 |
| GPT-6-astra | Codex | 58.0 | 66.2 | 91.8 | 9.2 |
| GPT-6-astra | mini-swe | 54.9 | 61.9 | 93.0 | 9.5 |
| GPT-6-astra | OpenClaw | 51.1 | 63.2 | 87.9 | 9.1 |
| Gemini 3.5 Flash | Gemini CLI | 50.7 | 59.2 | 91.5 | 7.7 |
| Rank | Model | TPR | TNR | ||
|---|---|---|---|---|---|
| 1 | GPT-5.6-sol | 85.2 | 86.5 | 98.7 | 1.8 |
| 2 | GPT-6-astra | 83.0 | 92.8 | 90.2 | 17.1 |
| 3 | Kimi K2.6 | 79.6 | 87.1 | 92.5 | 10.4 |
| 4 | GLM-5.2 | 75.9 | 93.3 | 82.6 | 25.7 |
| 5 | DeepSeek V4 Flash | 74.7 | 87.8 | 86.9 | 18.2 |
| 6 | GPT-5.6-terra | 74.6 | 77.6 | 96.9 | 6.1 |
| Rank | Model | TPR | TNR | ||
|---|---|---|---|---|---|
| 1 | Claude Opus 4.8 | 34.6 | 41.2 | 93.3 | 0.5 |
| 2 | Qwen3.7 Plus | 30.7 | 49.0 | 81.7 | 10.5 |
| 3 | Doubao Seed 2.1 Pro | 30.0 | 36.1 | 93.9 | 3.6 |
| 4 | GPT-5.6-terra | 30.0 | 35.0 | 95.0 | 2.8 |
| 5 | GPT-6-astra | 29.1 | 31.0 | 98.1 | 0.2 |
| 6 | Gemini 3.5 Flash | 27.6 | 33.6 | 94.0 | 0.5 |
| Rank | Model | TPR | TNR | ||
|---|---|---|---|---|---|
| 1 | Kimi K3 | 76.9 | 79.5 | 97.5 | 0.0 |
| 2 | GPT-6-astra | 75.8 | 78.3 | 97.5 | 0.0 |
| 3 | DeepSeek V4 Pro | 66.8 | 73.6 | 93.2 | 0.0 |
| 4 | Claude Opus 4.8 | 59.0 | 63.4 | 95.6 | 0.0 |
| 5 | GLM-5.2 | 58.1 | 65.1 | 93.0 | 0.0 |
| 6 | GPT-5.5 | 55.4 | 59.1 | 96.2 | 0.0 |
| (a) Positive test cases | |||
|---|---|---|---|
| Model | Gold | Cosmetic | Valid alternative |
| GPT-6-astra | 154/67/1 | 573/263/4 | 285/215/4 |
| Claude Opus 4.8 | 152/65/5 | 578/243/19 | 323/172/9 |
| Kimi K3 | 156/49/17 | 590/186/64 | 323/119/62 |
| GPT-5.6-sol | 131/85/6 | 498/319/23 | 257/231/16 |
| GPT-5.6-terra | 131/89/2 | 500/332/8 | 240/259/5 |
| (b) Negative test cases | |||
|---|---|---|---|
| Model | Ordinary errors | Hack | Process violation |
| GPT-6-astra | 144/2477/8 | 83/711/2 | 1/1/0 |
| Claude Opus 4.8 | 390/2197/42 | 156/628/12 | 2/0/0 |
| Kimi K3 | 311/2220/98 | 156/593/47 | 2/0/0 |
| GPT-5.6-sol | 35/2548/46 | 9/775/12 | 0/2/0 |
| GPT-5.6-terra | 64/2541/24 | 38/754/4 | 1/1/0 |
| Model | Rejection share (%) | Valid outputs (%) | |||||
|---|---|---|---|---|---|---|---|
| GPT-6-astra | 4993 | 1566 | 1012 | 545 | 9 | 98.4 | 99.6 |
| Claude Opus 4.8 | 4993 | 1566 | 1053 | 480 | 33 | 93.6 | 98.3 |
| Kimi K3 | 4993 | 1566 | 1069 | 354 | 143 | 71.2 | 94.2 |
| GPT-5.6-sol | 4993 | 1566 | 886 | 635 | 45 | 93.4 | 97.9 |
| GPT-5.6-terra | 4993 | 1566 | 871 | 680 | 15 | 97.8 | 99.1 |
| GLM-5.2 | 4993 | 1566 | 1055 | 336 | 175 | 65.8 | 92.1 |
| Model | Positive PASS | Negative FAIL | No valid decision |
| Tool-call: update a user profile (ACE preference 17) | |||
| GPT-5.6-sol | 0/6 | 18/18 | 0 |
| Claude Opus 4.8 | 6/6 | 6/18 | 0 |
| Kimi K3 | 6/6 | 16/18 | 0 |
| State: change an order address ( retail/34) | |||
| GPT-5.6-sol | 0/9 | 8/8 | 0 |
LLM Agent Verification
LLM agent verification checks whether agents’ actions, evidence, policies, and completion claims satisfy explicit requirements.
See all 142 papers