The 3090 Agent Bench

Local models as coding agents on one RTX 3090, graded by tests they never see.

A benchmark of local models driving OpenCode and Pi against a llama.cpp server on a single RTX 3090, and the places where the measurement itself turned out to be wrong: a Zig ledger task that needed context rather than time, an engine that got credit for its quant, a server parser that turned file contents into numbers, a client that carried my own CLAUDE.md into every prompt, a harness that decided how long the model thought, and a hidden test that asked for more than the prompt did. 27 posts, the numbers from the runs' logs.

  1. I blamed OpenCode; a 2-bit model passed Zig in it
  2. Zig's defer ends at the closing brace
  3. The deadlock test can't see a half-held lock
  4. Zig needed context, not time
  5. My benchmark read my CLAUDE.md
  6. My benchmark served the model at half speed
  7. The engine got credit for the quant
  8. 2.2x faster prefill, 1.04x faster agent
  9. LFM2.5 is fast. Gemma 4 finishes the job
  10. The models deleted the benchmark's log
  11. Tabby turned file contents into numbers
  12. The harness decided how long the model thought
  13. The hidden test asked for more than the prompt
  14. The hard tier sorted by a rollback, not by speed
  15. It fits in 16 GB. That was the easy question
  16. The model card said think harder. The audits got worse
  17. Claude Code read my home folder as a project
  18. MTP acceptance is a side effect, not a target
  19. Flint mistyped its path and blamed the tools
  20. llama.cpp's MoE cache wants gigabytes and long prompts
  21. The third run mattered where it cost the most
  22. On one RTX 3090, agent speed followed active parameters
  23. Most models passed the scripts. The ledgers split them
  24. 105 identical commands and other ways local agents fail
  25. 115 llama.cpp commits later, my 3090 was barely faster
  26. One open PR made MoE prompts 12-30% faster on my 3090
  27. Image input on a 27B coder costs 1.1 GiB, once