kw-bench: Breaking Frontier Harnesses on Real-World Tasks
Organizations: G.S. s.r.o. · PwC Austria
Abstract
Each new generation of frontier model pushes the edge of what is possible. Inside a harness -- a loop, a shell, a filesystem, the ability to write and run its own code -- a model can take on increasingly difficult work. A growing body of work treats the coding-agent harness as infrastructure for knowledge work rather than a coding tool, and a new wave of benchmarks tests it there. Most of them are generative: build a financial model, a memo, a spreadsheet from a brief, judged by a rubric or by another model. Few test the expensive part of knowledge work, which is investigative. In audit, tax, due diligence, regulatory reporting, claims or any dispute over numbers, the answer already exists -- hidden in incomplete and inconsistent evidence spread across systems -- and has to be recovered and defended to the cent. We introduce kw-bench, a benchmark built from real engagements specialists described to us. Its first task family is a five-year VAT reconstruction across three generations of SAP -- legacy ECC, a partial S/4HANA migration and a consultant's redesign -- delivered as raw system extracts: page headers, local number formats, partial link tables, no documentation of how anything connects. Grading is deterministic, with no LLM judge. We ran four harnesses -- Claude Code, Codex, OpenCode and micro-cc -- on the same model, DeepSeek v4.1 Flash, for two hours. The two independent, model-agnostic harnesses delivered (OpenCode 0.542, micro-cc 0.528); the two lab harnesses, away from their home model, delivered nothing (0.00 each). What defeated them was inertia: keeping many weak signals alive across a long session. On a frontier model the task collapses. micro-cc and Claude Code on Claude Opus 5.5 scored 0.9986 and 1.000, in 22 and 25 minutes. A weeks-long engagement now costs minutes and a few dollars; below the frontier, the harness decides how far a model gets.
Figures & tables
| Component | Weight | How it is checked |
|---|---|---|
| Chain register | 0.20 | Per chain billing document: F1 on (document, treatment, jurisdiction) 0.30; mis-filed documents found, with false claims penalised 0.35; moving supply 0.15; filed treatment 0.10; chain grouping 0.10 |
| Reconciliation | 0.22 | Every filer, period and line; cells that differ must be recomputed within EUR 0.02 (tax lines half by count, half by amount); false differences penalised; filed values copied |
| Correction file | 0.12 | Every amended return complete (all seven lines) and correct; extra returns penalised |
| run.sh on hidden data | 0.20 | Run as an unprivileged user on a holdout with another seed, other counts and other registration and go-live dates; F1 plus moving supply |
| Memo | 0.08 | Total and yearly exposure, root cause per planted mechanism, recommendation (text via pdftotext ) |
| Traps | 0.06 | No assembly or stock-transfer documents in the register, no false tax differences; credited only alongside real findings |
| Harness | Version | Route | How the 1M window was set | Other adjustments |
|---|---|---|---|---|
| Claude Code (Anthropic) | 2.1.310 | OpenRouter, Anthropic-compatible endpoint | CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000 (it does not know the window of a model it does not recognise) | Effort high, 32k thinking budget; all helper models redirected to DeepSeek |
| Codex CLI (OpenAI) | 0.164.0 | OpenRouter, Responses API | A model catalog entry declaring 1M (Codex caps unknown models at 272k) | Custom provider with remote compaction off (Codex compacts through an OpenAI-only endpoint); its freeform patch and search tools switched off, as this route cannot call them; Codex then runs with that catalog entry’s system prompt |
| OpenCode | 1.19.4 | OpenRouter, built-in provider | Read from its model registry (1,048,576) | --variant high ; none |
| micro-cc | 0.2.124 | OpenRouter | Read from its model catalog | None |
| Step | OpenCode | micro-cc | Codex | Claude Code |
|---|---|---|---|---|
| 1 Rules first | Done (0.3 min) | Partly: one rule (3.9, goods that never leave Germany) left out | Done, re-read three times | Read many times, never applied |
| 2 Readable extracts | Done | Done (5 min) | Done (2 min) | Only after 94 min |
| 3 Tie out the filed returns | Gap diagnosed, tie-out not built | Missed: “start from the filed amounts and add the delta” | Done, late (87–111 min) | Not reached |
| 4 Linking per era | Partly: 156 documents never linked | Partly: the same 156 | ECC and early S/4 only; 0 of 1,072 cockpit documents | Not reached |
| 5 What is not a chain | Partly: 162 assembly documents kept | Partly: 162 kept | Never reached the cockpit era | Not reached |
| 6 Classify | 90.1% right | 90.6% right | 1,860 documents, precision 0.94 | Not reached |
| Harness | Total | Register (0.20) | Recon (0.22) | Correction (0.12) | Tool (0.20) | Memo (0.08) | Traps (0.06) | Format (0.12) |
|---|---|---|---|---|---|---|---|---|
| OpenCode | 0.542 | 0.81 | 0.30 | 0.00 | 0.88 | 0.24 | 0.00 | 1.00 |
| micro-cc 0.2.124 | 0.528 | 0.81 | 0.13 | 0.00 | 0.89 | 0.50 | 0.00 | 1.00 |
| Codex | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Claude Code | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Run | Score | Wall time | Model calls | Tool calls | Input tokens | Output tokens | Tool output fed back | Cost | Harness memory |
|---|---|---|---|---|---|---|---|---|---|
| OpenCode DeepSeek | 0.542 | 74 min (stopped itself) | 83 | 86 | 14.5M (97% cached) | 52k | 291k chars | $0.256 (exact) | 705 MB |
| micro-cc DeepSeek | 0.528 | 120 min (limit) | 186 | 186 | 45.7M | 502k | 277k chars | ~1.2–2.7) | 147 MB |
| Codex DeepSeek | 0.00 | 121 min (limit) | 167 | 333 | 65.7M (87% cached) | 477k | 3.75M chars | ~$3.3 (est.) | 486 MB |
| Claude Code DeepSeek | 0.00 | 121 min (limit) | 358 | 445 | 164.0M (96% cached) | 180k | 6.78M chars | ~$3.0 (est.) | 343 MB |
| micro-cc Opus 5.5 | 0.9986 | 22 min (stopped itself) | 74 | 75 | 10.76M | 117k | 302k chars | $5.80 (exact) | 148 MB |
| Claude Code Opus 5.5 | 1.000 | 24.6 min (stopped itself) | 79 | 78 | 11.73M | 117k | 1.05M chars | $5.89 (exact) | 288 MB |
AI Agent Benchmarks
AI agent benchmarks measure how reliably autonomous systems plan, use tools, interact, and complete tasks across controlled and real-world settings.
See all 1,503 papers