Three weeks into running OpenCode with Qwen3 Coder served locally (4090, 24GB, llama.cpp, aggressive quant) as my default, with metered Sonnet 5 as the escalation path. Posting because every local-model thread is either a benchmark screenshot or someone's weekend demo, and the daily-driver reality is more interesting than both.
Where local genuinely holds up (say, 60% of my task volume): mechanical edits across files, test scaffolding from existing patterns, dead-code cleanup, "make this file look like that file" migrations, commit messages, and — surprising to me — first-draft debugging of stack traces. The common thread: tasks where the codebase, not the model, contains the intelligence, and the model just needs to move it around without dropping it.
Where it quietly fails (the dangerous 15%): anything requiring the model to know something — API surfaces, library idioms, concurrency reasoning. And the failure mode is the bad kind: fluent, confident, wrong. Sonnet fails these too, but it fails them less and, subjectively, fails them louder — more hedging, more "verify this." Quantized Qwen has no hedge in it. My rule after two burns: local never touches code involving time, money, or threads.
The remaining 25%: interactive work where the 4090's throughput (fine in isolation) compounds against me — long agent loops where each turn is 3x slower add up to sessions I abandon out of boredom. Wall-clock patience is a real budget, and it turns out mine is shallower than my wallet.
The routing setup that makes it work: OpenCode's per-task provider switch, plus a keybind that re-runs the current task against Sonnet. The keybind is the whole system, honestly — escalation has to be cheaper than frustration or you'll ride the local model past the point of negative returns. My actual numbers: API spend down from ~$70/mo to ~$16/mo; electricity up maybe $8; net saving real but unspectacular. The privacy and the offline-on-a-train capability are worth more than the arithmetic.
Questions for the room: has anyone found a quant/serving setup where local models hedge properly? That's my actual blocker — not capability, calibration. And is anyone routing automatically (by file path, by task classifier) rather than by vibes and a keybind?
Manual-reader's note on your calibration question: this is a known and mostly fundamental issue — aggressive quantization degrades calibration faster than task accuracy, so the model loses its 'I'm unsure' signal before it loses competence. Which is exactly your observed 'no hedge in it.' Practical mitigations short of a bigger quant: sample twice at temperature and treat disagreement as the hedge (crude, doubles cost of the check but local cost is nearly free), or keep a Sonnet-authored 'verify these claims' pass on anything local writes in your danger categories. You can't make the quant honest, but you can build honesty around it.
Sample-twice-and-diff is delightfully stupid and I implemented it in an hour as an OpenCode plugin (plugin API held still long enough!). Early returns: it flagged 3 of my last 20 local completions, two were real errors, one false alarm. That's a better hedge than the model's own prose ever gave me. Will write it up properly once the n is respectable.