California DMHC Independent Medical Review determinations
California's open data on independent reviews of health-plan denials. 800 appeals from 2025 and 2026 as test cases, and earlier ones as the precedent library.
A claims agent decides 800 real California health appeals in eight batches, and switches to a cheaper open model halfway. After each batch, two improvers may change it: our AI engineer, working through Kitaru, and Codex, given the plain request a team would make, "improve my agent". A third copy is never touched.
Balanced accuracy, paired appeal by appeal. Codex's gain is within the noise.
Over all 800 appeals, the agent our AI engineer improved scored 79.1% balanced accuracy, against 75.7% for the one Codex improved and 75.1% for the one left alone. Compared appeal by appeal, it was +3.3 points ahead of Codex's [0.9, 5.8] and +4.0 ahead of the untouched agent [1.1, 6.9].
Most of the gap opened after the switch to the open model, which on about 1 appeal in 10 ran out of tokens or model requests before it decided. Our AI engineer counted how every recorded session ended, found those stops and raised the limits. From batch 6 it left 2 of 300 appeals undecided, against 15 for Codex and 38 for the untouched agent.
Codex looked for the cause in the prompt. In four rounds it tested a prompt change, saw it score lower and sensibly shipped nothing, but it never raised the limits. Its agent ended level with the one nobody touched (+0.7 points, within the noise).
Every round, each agent decided a fresh batch of 100 appeals. Then 20 of those rulings were revealed to the improvers, and each had 45 minutes and 3 reruns to propose one change. A change shipped only if it scored at least as well as the current version on 20 more appeals per batch that no improver ever saw.
ZenML AI engineer: batch 1 79.4%, batch 2 82.2%, batch 3 90.0%, batch 4 66.9%, batch 5 74.4%, batch 6 86.2%, batch 7 84.2%, batch 8 77.4%. Codex: batch 1 82.1%, batch 2 82.9%, batch 3 90.7%, batch 4 66.4%, batch 5 65.7%, batch 6 81.4%, batch 7 78.7%, batch 8 66.7%. Switch to Qwen3.8-27B from batch 4.
Each batch is 100 appeals none of the agents had seen, decided by the version each line had shipped so far. Batches 1 to 3 ran on gpt-6.1-sol, batches 4 to 8 on Qwen3.8-27B.
| Batch | Model | ZenML AI engineer | Codex | Left alone |
|---|---|---|---|---|
| 1 | gpt-6.1-sol | 79.4% | 82.1% | 78.7% |
| 2 | gpt-6.1-sol | 82.2% | 82.9% | 77.7% |
| 3 | gpt-6.1-sol | 90.0% | 90.7% | 86.7% |
| 4 | Qwen3.8-27B | 66.9% | 66.4% | 69.1% |
| 5 | Qwen3.8-27B | 74.4% | 65.7% | 68.1% |
| 6 | Qwen3.8-27B | 86.2% | 81.4% | 78.3% |
| 7 | Qwen3.8-27B | 84.2% | 78.7% | 76.4% |
| 8 | Qwen3.8-27B | 77.4% | 66.7% | 67.9% |
| Batches 1 to 3 | gpt-6.1-sol | 84.2% | 85.6% | 81.3% |
| Batches 4 to 8 | Qwen3.8-27B | 76.9% | 71.3% | 71.7% |
| All 800 appeals | 95% CI below | 79.1% (75.9% to 82.3%) | 75.7% (72.4% to 78.8%) | 75.1% (71.8% to 78.3%) |
Balanced accuracy is the average of accuracy on overturned and on upheld appeals; an appeal left undecided counts as wrong. Intervals are bootstrap over appeals.
On the open model alone, batches 4 to 8, the gap over Codex was +5.6 points [2.2, 9.3]. On the frontier model, batches 1 to 3, Codex's agent was slightly ahead (85.6% against 84.2%).
Approval on appeals no improver ever saw turned down three changes that looked good on the improvers' own tests: Codex's round 2 change and two of our AI engineer's. Without that check, a change fitted to the few known answers ships.
The comparison is uneven on purpose. Codex got only the shared instructions, the way a team without this know-how would run it. Our AI engineer ran the way we run it: with Kitaru's recorded sessions, and an instruction to count how every session ended before choosing what to study. A first run without that instruction found no difference between the three agents; the rule is now built into the AI engineer.
Improving is cheap; checking is not. Both improvers together cost $1.26 over all eight rounds. Running the agents and checking each change cost about $75 in GPU time and API calls.
Every table behind the findings, grouped by question. Each opens in place.
One proposed change per round. Scores are the approval rule's: average balanced accuracy over 3 runs on every held-out appeal so far, candidate against current version.
| Round | ZenML AI engineer | Codex |
|---|---|---|
| 1 | The same idea for residential addiction treatment (ASAM levels 3.1 and 3.5). Shipped · 0.833 vs 0.798 | Sparse residential-treatment summaries count as missing, not as evidence against. Shipped · 0.881 vs 0.798 |
| 2 | Widen the residential rule to all residential appeals. Shipped · 0.917 vs 0.906 | Don't infer necessity from a numeric score or an incidental finding alone. Not shipped · 0.917 vs 0.933 |
| 3 | Treat omissions as unknown in every review type. Not shipped · 0.819 vs 0.893 | Tested widening its residential rule to other treatments. Tested, no change |
| 4 | Output limit 4,096 to 8,192 tokens; request limit 12 to 16. Shipped · 0.775 vs 0.726 | Tested a counterevidence rule. Tested, no change |
| 5 | Request limit 16 to 20. Shipped · 0.756 vs 0.745 | Tested two prompt clarifications. Tested, no change |
| 6 | A rule for proton-beam therapy. Shipped · 0.786 vs 0.781 | At most three precedent searches per appeal. Shipped · 0.748 vs 0.726 |
| 7 | Autism therapy (ABA): dose and setting need patient-specific support. Shipped · 0.813 vs 0.788 | Tested a rule on patient-specific criteria. Tested, no change |
| 8 | Named organs at risk count as evidence for proton beam. Not shipped · 0.772 vs 0.822 | Limit the missing-summary rule to residential appeals. Shipped · 0.797 vs 0.765 |
Every change was a prompt instruction or a setting; neither improver changed the agent's code or tools. Round 8's changes were never scored on a new batch.
All 800 appeals. A wrongful denial is a denial the agent upheld that the independent reviewer overturned.
| Line | Wrongful denials | Wrongful approvals | Undecided | Undecided, batches 6 to 8 | Accuracy |
|---|---|---|---|---|---|
| ZenML AI engineer | 75 | 56 | 15 | 2 / 300 | 81.8% |
| Codex | 52 | 70 | 29 | 15 / 300 | 81.1% |
| Left alone | 133 | 29 | 54 | 38 / 300 | 73.0% |
Both improved lines wrongly denied far fewer appeals than the untouched one and wrongly approved more. Balanced accuracy weighs the two mistakes equally.
We ran the same design once before. It showed no difference, and exposed two problems: approval scored changes on the appeals the improver had studied, and our AI engineer read the step that said to count every session's ending, then skipped it. We fixed both and ran again.
The same appeals, batches and models. Approval used the revealed appeals the improver had studied, and our AI engineer had no instruction to count how every session ended. No line beat another by more than the noise.
| Batch | ZenML AI engineer | Codex | Left alone |
|---|---|---|---|
| 1 | 79.4% | 80.1% | 81.2% |
| 2 | 77.7% | 78.4% | 78.4% |
| 3 | 85.3% | 90.0% | 86.7% |
| 4 | 64.8% | 64.5% | 65.4% |
| 5 | 71.2% | 73.7% | 76.6% |
| 6 | 80.2% | 85.2% | 78.3% |
| 7 | 80.0% | 74.2% | 72.2% |
| 8 | 74.8% | 75.0% | 66.9% |
| All 800 appeals | 75.6% (72.2% to 78.9%) | 76.8% (73.4% to 80.2%) | 75.5% (72.2% to 78.6%) |
Paired over all 800: ZenML AI engineer minus Codex −1.2 points [−4.0, 1.3]; every interval includes zero.
California's open data on independent reviews of health-plan denials. 800 appeals from 2025 and 2026 as test cases, and earlier ones as the precedent library.
Kitaru turns your agent's traces into test cases and replays them against any model, prompt or setting, so you can see what a change does before it ships.