Taken apart, written down
- Image input on a 27B coder costs 1.1 GiB, once
Image input for Qwen3.8-27B coding keys on an RTX 3090 cost 1.1 GiB at load on every variant. A full 121k-token context with a screenshot added 118 MiB.
- One outside patch beat 115 llama.cpp commits
115 llama.cpp commits gave my RTX 3090 2.8% at most. One open PR from Unsloth's fork made MoE prompts 21-30% faster in llama-bench, 12-13% in llama-server.
- The screenshot opencode never sent
Local vision models on a Radeon 680M read test screenshots almost perfectly. Three opencode versions sent an error string instead until one config key was set.
- The leak scan found me in my own guard's tests
Publishing a private repo as one public commit: four gates, six catches, and my real user name inside my own guard's test cases.
- OpenCode didn't want an account. It wanted a model name.
A forwarded warning said OpenCode 2.x needs an opencode.ai account for self-hosted models. It doesn't. It needs you to name the model.
- My agent guardrails passed every test. Then I used them.
Weeks of tests against a scripted fake model, then one evening of real work with my coding-agent templates: three complaints, six findings.
- Eighteen days later, the same lie
A 122B model promised an atomic Java transfer it never wrote. Eighteen days later it did it again: all 4 new Java cells, 6 of 6 across both runs.
- 115 llama.cpp commits later, my 3090 was barely faster
I checked 115 new llama.cpp commits on an RTX 3090: tool calls held, speed moved 2.8% at most, adaptive MTP gave nothing. I switched anyway.
- Faster prompts, slower agents: a second engine on the 680M
A MoE engine read prompts 1.4x faster than llama.cpp on a Radeon 680M and generated slower. Three agent runs got the same grades and finished later.
- The template differed. The prompts didn't.
Two quants of one 122B model shipped two chat templates. I held the template equal, then checked whether it had ever mattered.
- 105 identical commands and other ways local agents fail
1,655 agent transcripts from a 3090 bench: killed runs wrote longest replies four times those of passing runs, loops never passed, edits missed.
- Most models passed the scripts. The ledgers split them
Which local models passed which coding tasks on one RTX 3090: nearly all wrote the small CLI tools, and no model passed every Spring Boot run.
- On one RTX 3090, agent speed followed active parameters
Generation speed of 28 local models driving coding agents on one RTX 3090. Active parameters and MTP drafting set it; the quant moved it far less.
- Twenty-one agent runs on a laptop iGPU, none merge-ready
Seven local MoE models ran three coding tasks each on a Radeon 680M. A blind review graded all 21 runs and found none merge-ready.
- On a laptop iGPU, memory bandwidth picked the model
Coding agents on a Radeon 680M: a dense 27B generated 5.7 tokens a second whatever I tried; MoEs with 2-3B active on the GPU, 27 to 48.
- My drift check said 0 differences. It checked 4 arrays.
My Go checker read a bash model config without running it and said 0 differences. It compared 4 arrays. The fail-closed rewrite found a missing output cap.
- My agents got their own config. Two still read mine.
A separate config dir per coding agent kept my files untouched. Claude Code and OpenCode still read my ~/.claude, and OpenCode sent a prompt to a hosted model.
- In opencode 1.19.5, my workaround protected nothing
I renamed model keys so opencode wouldn't force top_p on my local models. In 1.19.5 it matches the id I sent anyway, and the qwen rule is gone.
- Another guard's test list found holes in mine
114 example commands from a separately built shell-parsing guard went through my regex guard. Most held. The worst gap was a guard that could quietly vanish.
- Two rounds, seventeen arms: the engine set the speed, not the quant
17 local-model setups on one 128 GB box. Q2_0 generated 2.2x faster than IQ4_XS; a same-file engine A/B puts most of that on the engine.