← task board

terminal-bench on RTX 3090 — runs

An iterative attempt to make local Qwen models (llama.cpp on a single RTX 3090, no external LLM providers) perform well on terminal-bench 2.0 by tuning the agent harness and the server config, one measured run at a time. Each run below links to a detail page with what was tested, the results, an interpretation and the next steps — read the story top to bottom to follow the iterations.

All runs

runmodelthinkingtrialsnotesmean
fast2__gemma-4-12b__20260727-014500llama-local/gemma-4-12bon60.33
fast__gemma-4-12b__20260727-010519llama-local/gemma-4-12bon90.44
smoke__gemma-4-12b__20260726-212728llama-local/gemma-4-12bon40.75
smoke__laguna-s-2.1__20260726-201248llama-local/laguna-s-2.1on11.00
smoke__laguna-s-2.1__20260726-200500llama-local/laguna-s-2.1on11.00
smoke__laguna-s-2.1__20260726-194232llama-local/laguna-s-2.1on11.00
smoke__laguna-s-2.1__20260726-193806llama-local/laguna-s-2.1on10.00
smoke__qwen3.6-35b-a3b__20260726-100656llama-local/qwen3.6-35b-a3bon390.59
smoke__qwen3.6-35b-a3b__20260726-042939llama-local/qwen3.6-35b-a3bon61.00
smoke__qwen3.6-35b-a3b__20260726-034536llama-local/qwen3.6-35b-a3bon90.56
smoke__qwen3.6-35b-a3b__20260726-025257llama-local/qwen3.6-35b-a3bon90.56
smoke__qwen3.6-35b-a3b__20260726-002616llama-local/qwen3.6-35b-a3bon90.89
suite__qwen3.6-35b-a3b__20260724-160500llama-local/qwen3.6-35b-a3bon890.35
resource__qwen3.6-35b-a3b__20260721-194555llama-local/qwen3.6-35b-a3bon70.43
suite__qwen3.6-35b-a3b__20260720-025830llama-local/qwen3.6-35b-a3bon890.45
suite__qwen3.6-35b-a3b__20260718-104156llama-local/qwen3.6-35b-a3bon890.39
fast2__qwen3.5-122b-a10b__20260712-205638llama-local/qwen3.5-122b-a10bon10.00
fast2__qwen3.5-122b-a10b__20260712-204249llama-local/qwen3.5-122b-a10bon11.00
fast2__qwen3.5-122b-a10b__20260712-202149llama-local/qwen3.5-122b-a10bon11.00
fast2__qwen3.5-122b-a10b__20260712-195554llama-local/qwen3.5-122b-a10bon11.00
fast__qwen3.5-122b-a10b__20260712-193509llama-local/qwen3.5-122b-a10bon10.00
fast__qwen3.5-122b-a10b__20260712-191135llama-local/qwen3.5-122b-a10bon10.00
fast__qwen3.5-122b-a10b__20260712-184152llama-local/qwen3.5-122b-a10bon10.00
fast__qwen3.5-122b-a10b__20260712-183411llama-local/qwen3.5-122b-a10bon10.00
fast2__qwen3.5-122b-a10b__20260712-180346llama-local/qwen3.5-122b-a10bon10.00
fast2__qwen3.5-122b-a10b__20260712-173102llama-local/qwen3.5-122b-a10bon10.00
fast2__qwen3.5-122b-a10b__20260712-165943llama-local/qwen3.5-122b-a10bon10.00
fast2__qwen3.5-122b-a10b__20260712-162421llama-local/qwen3.5-122b-a10bon10.00
fast2__qwen3.5-122b-a10b__20260712-155950llama-local/qwen3.5-122b-a10bon11.00
fast2__qwen3.5-122b-a10b__20260712-155025llama-local/qwen3.5-122b-a10bon11.00
fast2__qwen3.5-122b-a10b__20260712-153513llama-local/qwen3.5-122b-a10bon10.00
fast__qwen3.5-122b-a10b__20260712-144656llama-local/qwen3.5-122b-a10bon30.33
fast__qwen3.5-122b-a10b__20260712-143738llama-local/qwen3.5-122b-a10bon30.67
fast__qwen3.5-122b-a10b__20260712-141049llama-local/qwen3.5-122b-a10bon4/90.25
smoke__qwen3.5-122b-a10b__20260712-135546llama-local/qwen3.5-122b-a10bon41.00
medic__qwen3.6-35b-a3b__20260710-232538llama-local/qwen3.6-35b-a3bon40.25
fast__qwen3.6-35b-a3b__20260710-213727llama-local/qwen3.6-35b-a3bon90.56
medic__qwen3.6-35b-a3b__20260710-201401llama-local/qwen3.6-35b-a3bon50.60
fast2__qwen3.6-35b-a3b__20260710-192053llama-local/qwen3.6-35b-a3bon60.17
medic__qwen3.6-35b-a3b__20260710-190552llama-local/qwen3.6-35b-a3bon10.00
smoke__qwen3.6-35b-a3b__20260710-190154llama-local/qwen3.6-35b-a3bon10.00
smoke__qwen3.6-35b-a3b__20260710-130731llama-local/qwen3.6-35b-a3bon10.00
smoke__qwen3.6-35b-a3b__20260710-130242llama-local/qwen3.6-35b-a3bon10.00
smoke__qwen3.6-35b-a3b__20260710-125635llama-local/qwen3.6-35b-a3bon10.00
smoke__qwen3.6-35b-a3b__20260710-020217llama-local/qwen3.6-35b-a3bon40.50
smoke__qwen3.6-35b-a3b__20260710-010908llama-local/qwen3.6-35b-a3bon40.75
smoke__qwen3.6-35b-a3b__20260710-004419llama-local/qwen3.6-35b-a3bon41.00
smoke__qwen3.6-35b-a3b__20260709-233948llama-local/qwen3.6-35b-a3bon11.00
fast__qwen3.6-35b-a3b__20260709-185047llama-local/qwen3.6-35b-a3bon90.67
fast__qwen3.6-27b__20260709-164111llama-local/qwen3.6-27bon90.78
fast2__qwen3.6-27b__20260709-142133llama-local/qwen3.6-27bon5/60.40
smoke__qwen3.6-35b-a3b__20260709-123919llama-local/qwen3.6-35b-a3bon11.00
smoke__qwen3.6-35b-a3b__20260709-123112llama-local/qwen3.6-35b-a3bon10.00
fast2__qwen3.6-27b__20260709-102302llama-local/qwen3.6-27bon60.67
fast2__qwen3.6-27b__20260709-093420llama-local/qwen3.6-27bon60.67
fast2__qwen3.6-27b__20260709-085257llama-local/qwen3.6-27bon60.83
fast__qwen3.6-27b__20260709-070108llama-local/qwen3.6-27bon90.56
fast2__qwen3.6-35b-a3b__20260709-033802llama-local/qwen3.6-35b-a3bon60.33
fast2__qwen3.6-35b-a3b__20260709-030814llama-local/qwen3.6-35b-a3bon60.33
fast2__qwen3.6-35b-a3b__20260709-021536llama-local/qwen3.6-35b-a3bon60.50
fast__qwen3.6-35b-a3b__20260709-005647llama-local/qwen3.6-35b-a3bon90.67
smoke__qwen3.6-35b-a3b__20260709-003813llama-local/qwen3.6-35b-a3bon11.00
smoke__qwen3.6-35b-a3b__20260708-234938llama-local/qwen3.6-35b-a3bon10.00
smoke__qwen3.6-35b-a3b__20260708-234713llama-local/qwen3.6-35b-a3bon11.00
smoke__qwen3.6-35b-a3b__20260708-234310llama-local/qwen3.6-35b-a3bon11.00
smoke__qwen3.6-35b-a3b__20260708-233942llama-local/qwen3.6-35b-a3bon10.00
smoke__qwen3.6-35b-a3b__20260708-233720?(none)0/1
fast__qwen3.6-27b__20260708-213445llama-local/qwen3.6-27bon90.56
fast__qwen3.6-35b-a3b__20260708-210920llama-local/qwen3.6-35b-a3bon90.56
fast__qwen3.6-35b-a3b__20260708-210003llama-local/qwen3.6-35b-a3bon1/90.00
fast__qwen3.6-27b__20260708-184124llama-local/qwen3.6-27bon1/90.00
fast__qwen3.6-35b-a3b__20260708-170854llama-local/qwen3.6-35b-a3bon90.56
fast__qwen3.6-27b__20260708-153432llama-local/qwen3.6-27bon90.56
fast2__qwen3.6-35b-a3b__20260708-131403llama-local/qwen3.6-35b-a3bon1/61.00
fast__qwen3.6-35b-a3b__20260708-115953llama-local/qwen3.6-35b-a3bon90.78
fast2__qwen3.6-35b-a3b__20260708-073412llama-local/qwen3.6-35b-a3bon60.33
fast2__qwen3.6-27b__20260708-051015llama-local/qwen3.6-27bon60.83
fast__qwen3.6-35b-a3b__20260708-034239llama-local/qwen3.6-35b-a3bon90.33
fast__qwen3.6-27b__20260708-022105llama-local/qwen3.6-27bon90.78
fast2__qwen3.6-35b-a3b__20260707-224105llama-local/qwen3.6-35b-a3bon60.67
fast2__qwen3.6-27b__20260707-213441llama-local/qwen3.6-27bon61.00
fast2__qwen3.6-35b-a3b__20260707-145458llama-local/qwen3.6-35b-a3bon60.33
fast2__qwen3.6-35b-a3b__20260707-141659llama-local/qwen3.6-35b-a3bon60.50
fast2__qwen3.6-27b__20260707-131010llama-local/qwen3.6-27bon61.00
fast2__qwen3.6-27b__20260707-121846llama-local/qwen3.6-27bon60.67
fast2__qwen3.6-35b-a3b__20260707-111415llama-local/qwen3.6-35b-a3bon60.33
fast2__qwen3.6-27b__20260707-102314llama-local/qwen3.6-27bon60.50
fast__qwen3.6-35b-a3b__20260707-001626llama-local/qwen3.6-35b-a3bon90.78
fast__qwen3.6-27b__20260706-231402llama-local/qwen3.6-27bon90.67
fast__qwen3.6-35b-a3b__20260706-230157llama-local/qwen3.6-35b-a3bon11.00
fast__qwen3.6-35b-a3b__20260706-225730llama-local/qwen3.6-35b-a3bon11.00
fast__qwen3.6-35b-a3b__20260706-201806llama-local/qwen3.6-35b-a3bon180.56
fast__qwen3.6-27b__20260706-184724llama-local/qwen3.6-27bon180.61
fast__qwen3.6-27b__20260706-175057llama-local/qwen3.6-27bon90.67
fast__qwen3.6-35b-a3b__20260706-171844llama-local/qwen3.6-35b-a3bon90.56
fast__qwen3.6-27b__20260706-132725llama-local/qwen3.6-27bon180.72
fast__qwen3.6-27b__20260706-124744llama-local/qwen3.6-27bon90.78
fast__qwen3.6-35b-a3b__20260706-113104llama-local/qwen3.6-35b-a3bon90.56
smoke__qwen3.6-35b-a3b__20260706-093016llama-local/qwen3.6-35b-a3bon200.85
smoke__qwen3.6-35b-a3b__20260706-092006llama-local/qwen3.6-35b-a3bon40.75
smoke__qwen3.6-35b-a3b__20260706-091947llama-local/qwen3.6-35b-a3bon1/40.00
smoke__qwen3.6-35b-a3b__20260706-071847llama-local/qwen3.6-35b-a3bon10.00
smoke__qwen3.6-35b-a3b__20260706-065840llama-local/qwen3.6-35b-a3bon10.00
smoke__qwen3.6-35b-a3b__20260706-060745llama-local/qwen3.6-35b-a3bon30.33
smoke__qwen3.6-35b-a3b__20260706-003503llama-local/qwen3.6-35b-a3bon30.33
smoke__qwen3.6-35b-a3b__20260705-175320llama-local/qwen3.6-35b-a3bon50.20
smoke__qwen3.6-35b-a3b__20260705-064310llama-local/qwen3.6-35b-a3bon40.75
smoke__qwen3.6-35b-a3b__20260705-063942llama-local/qwen3.6-35b-a3bon31.00
smoke__qwen3.6-35b-a3b__20260705-060643llama-local/qwen3.6-35b-a3bon20.00
smoke__qwen3.6-35b-a3b__20260705-050453llama-local/qwen3.6-35b-a3bon20.00
smoke__qwen3.6-35b-a3b__20260705-002028llama-local/qwen3.6-35b-a3bon60.00
smoke__qwen3.6-35b-a3b__20260704-205241llama-local/qwen3.6-35b-a3bon30.00
smoke__qwen3.6-35b-a3b__20260704-203646llama-local/qwen3.6-35b-a3bon51.00
smoke__qwen3.6-35b-a3b__20260704-193517llama-local/qwen3.6-35b-a3bon10.00
smoke__qwen3.6-35b-a3b__20260704-192605llama-local/qwen3.6-35b-a3bon40.75
smoke__qwen3.6-35b-a3b__20260704-180910llama-local/qwen3.6-35b-a3bon50.60
smoke__qwen3.6-35b-a3b__20260704-152728llama-local/qwen3.6-35b-a3bon20.00
smoke__qwen3.6-35b-a3b__20260704-150817llama-local/qwen3.6-35b-a3bon50.80
smoke__qwen3.6-35b-a3b__20260704-140750llama-local/qwen3.6-35b-a3bon50.80
smoke__qwen3.6-35b-a3b__20260704-132733llama-local/qwen3.6-35b-a3bon50.00
smoke__qwen3.6-35b-a3b__20260704-131520llama-local/qwen3.6-35b-a3bon11.00
smoke__qwen3.6-35b-a3b__20260704-121319llama-local/qwen3.6-35b-a3bon30.33
suite__qwen3.6-35b-a3b__20260703-003556llama-local/qwen3.6-35b-a3bon890.37
smoke__qwen3.6-35b-a3b__20260702-213821llama-local/qwen3.6-35b-a3bon200.75
smoke__qwen3.6-35b-a3b__20260702-191746llama-local/qwen3.6-35b-a3bon300.77
smoke__qwen3.6-27b__20260702-190304llama-local/qwen3.6-27bon41.00
smoke__qwen3.6-35b-a3b__20260702-181612llama-local/qwen3.6-35b-a3bon100.80
smoke__qwen3.6-35b-a3b__20260702-180115llama-local/qwen3.6-35b-a3bon11.00
cmpthink-on__qwen3.6-35b-a3b__20260702-172246llama-local/qwen3.6-35b-a3bon40.75
cmpthink-off__qwen3.6-35b-a3b__20260702-171738llama-local/qwen3.6-35b-a3boff40.75
smoke__qwen3.6-35b-a3b__20260702-164851llama-local/qwen3.6-35b-a3b(none)40.75
smoke__qwen3.6-35b-a3b__20260702-163559llama-local/qwen3.6-35b-a3b(none)41.00

Analysis reports

The story so far

Chronological — each entry is one run's headline; click through for the full notes (what changed, results, interpretation, next steps).

Journal (mechanism & notes)

Runs journal

Human-readable notes on the benchmark runs under runs/. The per-trial JSON records the model, thinking, max_tokens, llama_port, rewards and tokens — but not which reasoning-budget mechanism was in effect. That's the whole point of this file.

Per-run narrative lives in runs/<job>/NOTES.md (what was run & changed, results, interpretation, next steps) — rendered on each run's page of the Pages site, with the first # heading used as the run's timeline headline. This file stays the cross-run journal: mechanism history and how to read old runs.

How to read a run (things not in the logs)

⚠️ Reading runs from here on

Future runs use the server flag, so they will show llama_port=8020 and thinking=on — which looks identical in the logs to the old uncapped port-8020 runs (e.g. cmpthink-on). The difference (budget enforced server-side) is invisible to the trial JSON. Tell them apart by date (anything after the 2026-07-02 server restart has --reasoning-budget 4000) and by this journal. The budget value lives in the llama-swap config's git history, not in these logs — if you change it, add a row below noting the new value.

Budget change 2026-07-04 ~19:00: 4000 → 8000 (both qwen bases, uncommitted in llama_cpp_on_my_desktop at the time of the switch). Motivation: the 4000 force-close was cutting thinking mid-thought and spawning plain-text runaway loops (2/5 fails in run …180910). Confirmed in effect from run …192605 onward (think blocks up to ~6–7k tok, impossible under 4000). Rule of thumb: runs dated before 2026-07-04 19:00 = budget 4000; after = 8000.

Run log (all qwen3.6-35b-a3b MoE unless noted)

Job (runs/…) Reasoning budget thinking tasks × K result notes
smoke__…163559 none (uncontrolled) (none) 4 × 1 4/4 first smoke; regex-log happened to terminate
smoke__…164851 none (uncontrolled) (none) 4 × 1 3/4 exposed the loop: regex-log burned 32k tok on reasoning, failed
cmpthink-off__…171738 none off 4 × 1 3/4 thinking OFF: regex-log passes, openssl fails
cmpthink-on__…172246 none on 4 × 1 3/4 thinking ON uncapped: regex-log loops/fails, openssl passes
smoke__…180115 proxy 4000 on regex-log × 1 1/1 proxy validation; cap fired 2×
smoke__…181612 proxy 4000 on 2 × 5 (=10) 0.80 regex-log 5/5, openssl 3/5
smoke__…191732 proxy 4000 on regex-log × 1 errored single errored trial (ignore)
smoke__…191746 proxy 4000 on 2 × 15 (=30) 0.77 regex-log 14/15 (93%), openssl 9/15 (60%)
smoke__qwen3.6-27b__190304 proxy 4000 on 4 × 1 4/4 dense 27B model through the proxy
smoke__…213821 server flag 4000 on 2 × 10 (=20) 0.75 first confirmed server-flag run (--reasoning-budget 4000, port 8020). regex-log 8/10, openssl 7/10. Parity with proxy confirmed — see below
suite__…20260703-003556 server flag 4000 on 89 × 1 0.371 first full suite, ~23.5 h. See its NOTES.md + the two ANALYSIS-*.md reports
smoke__…20260704-121319 server flag 4000 on 3 × 1 1/3 first context-fix run (context_window=229376 + COMPACT_AT_TOKENS=200000 guard): guard active in every trial but never fired (peaks 51–165k), zero hard 400s; both former 400-victims now clean-stop near-misses — trajectory variance, not the fix. See its NOTES.md
smoke__…20260704-131520 server flag 4000 on regex-log × 1 1/1 guard-validation attempt at COMPACT_AT_TOKENS=40000 — PASS 2m14s but peaked at 28k, trigger still never fired; retry at 15000 (see NOTES.md)
smoke__…20260704-132733 server flag 4000 on regex-log × 5 0/5 guard fired in all 5 — and killed every trial: ctx.compact() aborts the agent loop; in pi --print mode the process exits mid-compaction. Guard must be rebuilt on the context hook; COMPACT_AT_TOKENS=200000 harmful until then. See NOTES.md
smoke__…20260704-140750 server flag 4000 on regex-log × 5 4/5 prune-guard (context hook) validated: 87 prunes across 4 trials, all 5 ran full trajectories, no deaths; the fail is a findall-capture-group near-miss, not pruning. Exposed a ~2× chars/4 underestimate on dense content → usage-calibrated ratio added after the run. See NOTES.md
smoke__…20260704-150817 server flag 4000 on regex-log × 5 4/5 calibrated guard confirmed: prunes in 4/4 eligible trials, measured ratios 1.84–2.03, peaks capped 11–14k real at limit 15000. Fail = turn-1 reasoning-budget force-close (out 4002 ≈ budget 4000, thinking cut mid-regex, text=>, no tool call) — 2nd sighting of that artifact, unrelated to the guard. See NOTES.md
smoke__…20260704-152728 server flag 4000 on circuit-fibsqrt + make-mips × 1 0/2 H6 closed: both remaining 400-victims at stock settings — zero hard 400s, clean ~58 min trajectories, peaks 114–136k (were 242–257k deaths), ratios 1.56/2.53, up to 216 messages stubbed per call. Both fail on merit: mips VM too slow; circuit = B2 oversized-writes (H2 is the next lever). See NOTES.md
smoke__…20260704-180910 server flag 4000 on regex-log × 5 3/5 hysteresis guard correct in 5/5 (batched advances, stable stubs, live ratio 1.7→2.45). Both fails = budget force-close → plain-text thinking-continuation runaway (smoking gun: TEXT continues the truncated regex char-for-char) — the force-close artifact CAUSES B1 loops, cost 2/5 tonight. Cache A/B neutral at limit 15k (slack too small); decisive test = make-mips at stock. See NOTES.md
smoke__…20260704-192605 server flag 8000 on 4 × 1 3/4 first budget-8000 run (think blocks up to ~5.9k tok confirm the flag took). fix-git, nginx-request-logging, regex-log pass; openssl fail = its known ~60% baseline (near-miss, one assertion away). See NOTES.md
smoke__…20260704-193517 server flag 8000 on make-mips × 1 0/1 (timeout) the owed hysteresis cache rerun — but the guard never engaged (peak ~55k ≪ 200k; 19 turns in 1h, AgentTimeoutError right at the wire vs 58 min last time). Cache trivially clean: 93.2% hit, cacheRead monotone, 0 breaks. Measurement still owed. Fails on merit (MIPS VM too slow) either way. See NOTES.md
smoke__…20260704-203646 server flag 8000 on regex-log × 5 5/5 budget 8000 validated on the artifact task: zero length-stops, thinking completes naturally at ~6–7k tok (was cut at 4000 → 2/5 runaway fails the night before), trials 1m32s–3m03s. regex-log is 6/6 at 8000 counting …192605. See NOTES.md
smoke__…20260704-205241 server flag 8000 on polyglot-rust-c × 3 0/3 expected-fail task, two signals: 2× B2 oversized-write (82–89k-char tool args; needs H2 chunked writes, budget irrelevant) + 1× soft runaway — polyglot maxes the 8000 budget every turn; final turn's cut reasoning continued as 19k chars of TEXT then self-terminated with a clean stop, no tool call → trial ended. Evades the length-only recovery → recovery trigger extended (stop + no tool call + text >8k chars). See NOTES.md

What the proxy-4000 runs showed (181612 + 191746)

Conclusion: 4000 fixes the loop without hurting the short task. It hasn't been tuned on breadth — a proper sweep (2000 / 4000 / 8000) should run against the full suite, since different tasks stress reasoning length differently. And these were proxy runs; re-verify parity now that the server flag is live.

Server-flag parity — verified on 213821

This is the first run on the native server budget (--reasoning-budget 4000 in the llama-swap config), replacing the proxy. Because a server-flag run is indistinguishable from an old uncapped port-8020 run in the trial JSON, parity was verified directly from the transcripts (agent/pi.txt):

Verdict: proxy → server flag is a clean swap — same bounding, same scores, no extra process. 4000 stays as the value pending a full-suite breadth sweep. To re-check on any future run: max thinking-block tokens should stay well under 4000 and stopReason: length count should be 0.