nostr-bench — Phases 1–3

12 models (incl. Kimi K3) × 4 suites × 2 tiers, n=3 · + agent harness + Repo Prompt CE orchestration & planner sweep · median of 3 reps · via OpenRouter · 2026-08-11

Best accuracy (cloud)
kimi-k3
mean 91.7 / 100
Best bang-for-buck
deepseek-v4-flash
mean 85.4 at $0.0017/run
Best local (≤24 GB)
gemma-4-31b-it
mean 79.5 · runs on a P40
Total cost · both phases
$6.77
421 runs

Mean accuracy by model

Mean of all four suites (0–100). ◆ / outlined bar = runs locally on ≤24 GB (your P40 rig).

kimi-k3 kimi-k3: mean 91.7 (range 71.4–100.0) 91.7 kimi-k2.6 kimi-k2.6: mean 91.3 (range 51.0–100.0) 91.3 deepseek-v4-flash deepseek-v4-flash: mean 85.4 (range 57.1–100.0) 85.4 deepseek-v4-pro deepseek-v4-pro: mean 84.7 (range 64.3–100.0) 84.7 glm-5.2 glm-5.2: mean 83.3 (range 7.1–100.0) 83.3 gemma-4-31b-it gemma-4-31b-it: mean 79.5 (range 45.7–100.0) 79.5 ◆ qwen3.5-397b-a17b qwen3.5-397b-a17b: mean 75.0 (range 42.9–100.0) 75.0 qwen3.6-35b-a3b qwen3.6-35b-a3b: mean 69.5 (range 21.4–100.0) 69.5 ◆ muse-glimmer-30b muse-glimmer-30b: mean 62.4 (range 0.0–100.0) 62.4 ◆ gpt-oss-120b gpt-oss-120b: mean 56.7 (range 0.0–100.0) 56.7 gpt-oss-20b gpt-oss-20b: mean 33.3 (range 0.0–87.5) 33.3 ◆ llama-3.3-70b-instruct llama-3.3-70b-instruct: mean 25.9 (range 0.0–64.3) 25.9

Phase 2 — does an agent harness change the ranking?

Code tasks only (N1 implement + N2 debug, both tiers). one-shot → agent (4-tool loop, runs the visible tests as feedback). Δ = agent − one-shot. Sorted by agent score. ▪ = runs on ≤24 GB.

0255075100 kimi-k3 kimi-k3 one-shot: 91.7 kimi-k3 agent: 98.8 +7.1 glm-5.2 glm-5.2 one-shot: 83.3 glm-5.2 agent: 98.6 +15.3 deepseek-v4-flash deepseek-v4-flash one-shot: 87.6 deepseek-v4-flash agent: 88.1 +0.5 gpt-oss-120b gpt-oss-120b one-shot: 29.2 gpt-oss-120b agent: 85.7 +56.5 muse-glimmer-30b ▪ muse-glimmer-30b one-shot: 36.9 muse-glimmer-30b agent: 79.5 +42.6 kimi-k2.6 kimi-k2.6 one-shot: 96.1 kimi-k2.6 agent: 67.6 -28.5 deepseek-v4-pro deepseek-v4-pro one-shot: 85.1 deepseek-v4-pro agent: 60.9 -24.2 gpt-oss-20b ▪ gpt-oss-20b one-shot: 4.2 gpt-oss-20b agent: 53.0 +48.8 gemma-4-31b-it ▪ gemma-4-31b-it one-shot: 67.7 gemma-4-31b-it agent: 47.0 -20.7 qwen3.5-397b-a17b qwen3.5-397b-a17b one-shot: 66.0 qwen3.5-397b-a17b agent: 34.9 -31.1 qwen3.6-35b-a3b ▪ qwen3.6-35b-a3b one-shot: 48.0 qwen3.6-35b-a3b agent: 21.6 -26.4

The harness is an equalizer: models that can't one-shot hard code (gpt-oss-20b/120b, muse-glimmer) leap +50–65 when they can iterate against tests, while models that already one-shot well (kimi, deepseek) slip a little as the multi-turn loop adds under-scoping. qwen models mostly decline to drive the loop (call done early). Agent runs are noisier than one-shot (see the wide spreads); n=3, treat small gaps as ties.

Phase 3 — Repo Prompt CE orchestration (N2 debug)

The oracle/editor split, run natively through Repo Prompt CE on-device: a strong planner writes the plan, a cheap open model applies it.

Oracle → editor pairing
100 / 100
Oracle gpt-oss-120b planned all 5 bugs exactly; editor gpt-oss-20b (OpenCode agent) applied it on-device → 6/6 hidden + 2/2 visible regression, no signature changes.
Same editor, N2, unaided
0 → 50 → 100
gpt-oss-20b alone: 0 one-shot, 50 in the solo agent harness, 100 with the oracle's plan. Orchestration lifts the cheap editor to a perfect fix.

Takeaway: the orchestration win is real and it's the oracle doing the heavy lifting — a strong planner turns a fuzzy bug report into an exact, apply-ready plan, and a 30B-class editor that couldn't touch this task alone applies it perfectly. Note: the open-model editor only wrote files in an interactive RepoPrompt session; the same agent completed headlessly twice without editing, so this arm needs a human at the keyboard for now.

Planner sweep — which oracle writes the best fix?

Each model as the Repo Prompt oracle, producing the full N2 fix; graded on the hidden suite. Single run each.

oracle modelfix score
gpt-oss-120b100.0✓ correct
kimi-k2.6100.0✓ correct
deepseek-v4-flash100.0✓ correct
muse-glimmer-30b100.0✓ correct
glm-5.283.3missed a bug

Nearly every planner — including the local Muse Glimmer 30B — produces a fully correct fix. The lone miss is frontier GLM-5.2, which compared the tag name against "#e" instead of "e": a subtle nostr-specific slip a generic planner makes and a nostr-aware one doesn't.

Accuracy vs. cost per run

Up = more accurate, left = cheaper. Log cost axis. local-capable (≤24 GB) cloud / bigger-iron.

0255075100$0.0001$0.001$0.01$0.1 cost per run (USD, log) → mean accuracy → kimi-k3 mean 91.7 · $0.0276/run kimi-k3kimi-k2.6 mean 91.3 · $0.0477/run kimi-k2.6deepseek-v4-flash mean 85.4 · $0.0017/run deepseek-v4-flashdeepseek-v4-pro mean 84.7 · $0.0141/run deepseek-v4-proglm-5.2 mean 83.3 · $0.0130/run glm-5.2gemma-4-31b-it mean 79.5 · $0.0051/run gemma-4-31b-itqwen3.5-397b-a17b mean 75.0 · $0.0149/run qwen3.5-397b-a17bqwen3.6-35b-a3b mean 69.5 · $0.0102/run qwen3.6-35b-a3bmuse-glimmer-30b mean 62.4 · $0.0030/run muse-glimmer-30bgpt-oss-120b mean 56.7 · $0.0006/run gpt-oss-120bgpt-oss-20b mean 33.3 · $0.0003/run gpt-oss-20bllama-3.3-70b-instruct mean 25.9 · $0.0007/run llama-3.3-70b-instruct

Full results

Click a header to sort. Task columns shaded by score (darker = higher). sens = prompt sensitivity (T2 − T1): high positive = needs the engineered prompt; negative = the terse prompt worked better. −n = cells dropped (empty completion; see notes).

modelruns on accnostrsec N1 implN2 debugS1 auditS2 nostr-sec T1T2senscostpts/$drop
kimi-k3cloud91.790.391.783.3100.095.887.594.888.6-6.2$0.66293,320
kimi-k2.6cloud91.389.787.091.4100.096.177.890.092.8+2.8$1.09661,915−1
deepseek-v4-flashcloud85.483.883.690.583.389.677.584.686.1+1.5$0.036751,193−2
deepseek-v4-procloud84.783.784.278.691.787.580.979.290.1+10.9$0.33826,011
glm-5.2cloud83.379.083.366.7100.096.370.281.085.5+4.5$0.3116,428
gemma-4-31b-it▪ 24GB79.572.086.457.169.495.877.075.284.3+9.1$0.096515,653−4
qwen3.5-397b-a17bcloud75.068.784.957.176.795.074.771.778.0+6.3$0.31265,038−3
qwen3.6-35b-a3b▪ 24GB69.560.090.948.847.297.984.068.470.5+2.1$0.2456,808
muse-glimmer-30b▪ 24GB62.451.288.07.166.796.179.952.372.6+20.3$0.072920,543
gpt-oss-120b○ 96GB56.745.684.233.325.089.878.564.848.5-16.3$0.014494,500
gpt-oss-20b▪ 16GB33.316.562.58.30.083.841.230.536.1+5.6$0.0079101,165
llama-3.3-70b-instruct○ 48GB25.917.744.07.18.350.437.625.426.4+1.0$0.01638,850

Method: each cell is one completion, temperature 0.2, graded by a hidden vitest suite (N1/N2) or a recall×precision findings scorer (S1/S2). Median of 3 reps; whiskers on the bar chart show the min–max spread across reps. Treat gaps ≤5 pts as ties. Reasoning models were given a 30k-token budget with a 15k reasoning cap; kimi-k2.6 ignored the cap on the long N1-T2 prompt and is missing that one cell. Local flag = fits ≤24 GB VRAM per the run matrix. Costs are OpenRouter-reported per request.