|
| 1 | +# ClawBench V1 → V2: What Changed |
| 2 | + |
| 3 | +Side-by-side comparison of the V1 corpus (the original 2026-04 release) and the V2 corpus (the new default). Numbers in the tables below were verified against the corpus files, the judge code, the website, and the public HF datasets — see "Provenance" at the bottom of each section for the exact files we read. |
| 4 | + |
| 5 | +The short version: **V2 is intercept-only, judge-LLM-only, and self-contained — anyone can reproduce a leaderboard row with `clawbench-reproduce --model deepseek-v4-flash` and one OpenRouter key.** |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## 1. Task corpus |
| 10 | + |
| 11 | +| Axis | V1 | V2 | Δ | |
| 12 | +|---|---:|---:|---| |
| 13 | +| Tasks (`task.json` count) | 153 | 130 | -23 | |
| 14 | +| Unique sites (`metadata.sites_involved`) | 144 | 64 | -80 | |
| 15 | +| Sites in both | 44 | 44 | — | |
| 16 | +| Tasks reused from V1 (by ID) | — | 51 | 33% of V1 carried over | |
| 17 | +| New V2-only tasks | — | 79 | 60% of V2 is fresh | |
| 18 | +| Top metaclass | daily-life (21) | daily-life (12) | smoothed | |
| 19 | +| Categories | 15 | 19 | +4 (charity, civic-engagement, fitness …) | |
| 20 | + |
| 21 | +Provenance: `test-cases/v1/**/task.json`, `test-cases/v2/**/task.json`, `task.schema.json`. |
| 22 | + |
| 23 | +--- |
| 24 | + |
| 25 | +## 2. Safety design (the headline V2 change) |
| 26 | + |
| 27 | +| Safety axis | V1 | V2 | Result | |
| 28 | +|---|---|---|---| |
| 29 | +| `eval_schema` filled (interceptable) | 70/153 = **46%** | 130/130 = **100%** | V2 makes interception mandatory | |
| 30 | +| Tasks that submit a payment / checkout | 29/153 = 19% | 7/130 = 5% | -76% | |
| 31 | +| Job-application tasks | 14 | 7 | halved | |
| 32 | +| Newsletter / account signups | 14 | 10 | reduced | |
| 33 | +| Irreversible-action coverage | 28+ tasks with placeholder schema (could slip past interceptor) | 0 placeholder schemas | **V2 closes the gap** | |
| 34 | +| Real-account requirement | none | none | unchanged | |
| 35 | +| Personal info | disposable email + dummy `alex_green` profile | same (mailinator pool planned) | unchanged | |
| 36 | + |
| 37 | +V1's "agentic evaluator" model meant tasks without a regex were judged after the fact from the human-reference trace — fine for offline analysis, but the agent could in principle submit a real request before the eval ran. V2 requires every task to declare a URL+method pattern up front, so the interceptor blocks the request *before* it leaves the container. |
| 38 | + |
| 39 | +Provenance: `eval/agentic_eval.md` (V1 nine-rule rubric); `docs/scoring.md`; sample `task.json` files from both corpora. |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +## 3. Evaluation rubric + judge |
| 44 | + |
| 45 | +| Axis | V1 | V2 | |
| 46 | +|---|---|---| |
| 47 | +| Judge | Claude Code subagent + paired human-reference trace | LLM-only on intercepted HTTP body | |
| 48 | +| Inputs | 5-layer trace (actions + requests + screenshots + recording + agent-messages) + human ref ≈ 100 MB | instruction + intercepted URL/method/body, truncated to ≤6 KB | |
| 49 | +| Rubric | 9 semantic rules (payment must be attempted, phone wall = PASS, CAPTCHA must attempt, etc.) | Lenient default: *"no explicit contradiction → match"*. Strict opt-in: *"ambiguous → mismatch"* | |
| 50 | +| Cost per batch | 16 parallel Claude Code subagents × ~$0.30/task ≈ $50+ | 1 judge call/task × ~$0.01 ≈ $1 | |
| 51 | +| Requires Claude Code installed? | yes | no | |
| 52 | +| Requires human-reference trace? | yes | no | |
| 53 | +| Per-task artifact | `{model}-eval-results.{csv,json}` (per-batch) | `judge.json` (strict) / `judge_llm.json` (lenient) per task + `rescore-summary.json` per batch + `eval_results/<batch>/{per_task.csv,summary.json}` | |
| 54 | + |
| 55 | +V2's lenient rubric is what the public leaderboard uses; the strict rubric is preserved for ablation. Both are publishable Python modules (`src/clawbench/runner/judge.py`, `src/clawbench/runner/judge_llm.py`). |
| 56 | + |
| 57 | +Provenance: `eval/agentic_eval.md`, `src/clawbench/runner/judge.py`, `src/clawbench/runner/judge_llm.py`, `src/clawbench/eval/rescore.py`. |
| 58 | + |
| 59 | +--- |
| 60 | + |
| 61 | +## 4. Interceptor / URL-pattern specificity |
| 62 | + |
| 63 | +| Metric | V1 | V2 | |
| 64 | +|---|---:|---:| |
| 65 | +| `eval_schema` filled | 46% (70/153) | 100% (130/130) | |
| 66 | +| Placeholder reliance | 54% (83/153) | 0% | |
| 67 | +| HTTP methods covered | POST 100% | POST 92% / GET 8% / PUT <1% | |
| 68 | +| Average pattern length | 53 chars | 40 chars | |
| 69 | +| Patterns > 60 chars (complex) | 44% of declared patterns | 5% | |
| 70 | + |
| 71 | +V2 patterns are shorter and more diverse because the corpus now covers more "navigate-then-confirm" tasks (GET-able resource fetches) rather than V1's near-uniform "POST a form" pattern. None of the sampled patterns matched known third-party telemetry endpoints (no false-positive intercepts in our spot check). |
| 72 | + |
| 73 | +Sample V2 patterns: |
| 74 | +- `myrecipes\.com/api/v\d+/review/save` |
| 75 | +- `change\.org/api-proxy/graphql.*op=GenerateAiDraft|.*op=CreatePetition` |
| 76 | +- `ravelry\.com/discuss/[^/]+/topics` |
| 77 | + |
| 78 | +Provenance: sampled 20 `task.json` files per corpus. |
| 79 | + |
| 80 | +--- |
| 81 | + |
| 82 | +## 5. Identity / personal info |
| 83 | + |
| 84 | +| Aspect | V1 (current) | V2 (current + planned) | |
| 85 | +|---|---|---| |
| 86 | +| Email service | PurelyMail (`clawbench.cc` domain, paid Anthropic account) | same today; mailinator + 100-name pool planned (Task #14) | |
| 87 | +| Test personae | single (`alex_green`) | same today; 100-name pool planned | |
| 88 | +| PDF resume | hardcoded name + companies + degrees, runtime email injection | same today; placeholder-only template planned | |
| 89 | +| Teacher / referee names | hardcoded in personal-info JSON | dynamic generator planned | |
| 90 | +| Setup cost | requires Anthropic PurelyMail account | shared mailinator.com domain (~$900/yr; reproducible by anyone with the credential) | |
| 91 | + |
| 92 | +Identity is the one axis where V1 ≈ V2 today; the V2-plan upgrades land in a follow-up PR once the mailinator domain is procured. |
| 93 | + |
| 94 | +Provenance: `src/clawbench/runtime/shared/alex_green_personal_info.json`, `src/clawbench/utils/resume_template.json`, `src/clawbench/runner/run.py` (PurelyMail integration), `docs/superpowers/specs/2026-05-09-claw-bench-v2-update-design.md` (V2 identity plan). |
| 95 | + |
| 96 | +--- |
| 97 | + |
| 98 | +## 6. Public surfaces |
| 99 | + |
| 100 | +| Surface | V1 mentioned | V2 mentioned | V2 default? | |
| 101 | +|---|---|---|---| |
| 102 | +| arXiv `2604.08523` | yes (153 tasks, 144 sites) | no | n/a (paper pre-dates V2) | |
| 103 | +| GitHub README | yes | yes | yes (6-tab leaderboard, V2 Hermes first; 2026-05-20 news entry headlines V2) | |
| 104 | +| claw-bench.com | yes (V1 153) | yes (V2 130) | yes (hero strapline = V2; default leaderboard tab = V2 Hermes) | |
| 105 | +| HF `NAIL-Group/ClawBench` (task definitions) | yes | yes | tie (both shown) | |
| 106 | +| HF `TIGER-Lab/ClawBenchV2Trace` | for context | primary | yes (V2-only repo) | |
| 107 | +| HF Space `TIGER-Lab/ClawBench` leaderboard | yes (V1 traces link) | yes (V2 traces link) | yes (`gr.Radio(value="v2")` in `app.py`) | |
| 108 | + |
| 109 | +Only the arXiv abstract still describes V1 alone — that requires a paper v2 revision, which is a separate task from this PR. |
| 110 | + |
| 111 | +--- |
| 112 | + |
| 113 | +## 7. Saving the eval config per run (small reliability improvement) |
| 114 | + |
| 115 | +Each `judge.json` / `judge_llm.json` written by `clawbench-rescore` already records the run's effective config — the model that judged it, the rubric used, the rubric prompt (via the file name), and the raw judge reply for audit. The per-batch `rescore-summary.json` re-states these at batch level. Concretely, every V2 judge file contains: |
| 116 | + |
| 117 | +```json |
| 118 | +{ |
| 119 | + "match": true, |
| 120 | + "reason": "…", |
| 121 | + "judge_model": "deepseek-v4-pro", |
| 122 | + "rubric": "lenient", |
| 123 | + "raw": "{\"match\": true, …}" |
| 124 | +} |
| 125 | +``` |
| 126 | + |
| 127 | +The `eval_results/<batch>/summary.json` aggregates: `judge_model`, `rubrics`, and per-rubric percentages formatted as `X.X%`. Anyone re-running the same `clawbench-rescore` command against the same `TIGER-Lab/ClawBenchV2Trace` snapshot can compare their numbers to ours field-by-field. This is the spec for "every eval's config is saved" — V2 already complies; V1 did not (V1's `{model}-eval-results.csv` only stored verdict + brief reason). |
| 128 | + |
| 129 | +--- |
| 130 | + |
| 131 | +## TL;DR |
| 132 | + |
| 133 | +V2 takes the parts of V1 that depended on human-curated artefacts (human-reference traces, Claude Code subagents, partially-filled regex schemas) and replaces them with three machine-checkable inputs: a complete `eval_schema`, a stateless LLM judge, and a per-run config receipt. The result is a benchmark that anyone can install, run, and audit end-to-end without infrastructure that only the original team has — which is the actual "release V2" claim. |
0 commit comments