A “harness” is the program wrapped around a model: it holds the system prompt, hands the model its tools, and runs the loop. Nathan Sutton ran nine of them — opencode, cline, codex, goose, crush, dsh, pi, mini-swe-agent, plus his own chad — against a local model on a laptop instead of a data center, on eight small coding exercises each.
The point isn’t which one wins. It’s that the reason local agents feel broken is structural.
A laptop reads a prompt at roughly 90 tokens per second. A data center GPU reads at 10,000+. Every harness front-loads a block of instructions and tool definitions before the model does anything, so that invisible block becomes dead time:
- pi: 2,008 tokens → 22 seconds of waiting before the first token
- codex: 7,804 tokens → 88 seconds
- crush: 16,263 tokens → 200 seconds
- opencode: 18,046 tokens → 226 seconds
The same prompt tax eats the context window. With roughly 32,000 usable tokens on a good laptop, opencode’s opening prompt leaves only 44% of the budget for actual work; pi leaves 94%.
Then there are the side requests. Harnesses quietly ask the model for session titles and summaries. On a laptop the model server is the laptop, so those requests queue behind (or overlap) the real work — opencode fired 33 of them across 24 tasks, with the model technically busy 125% of wall clock.
Sutton’s own harness, chad, is minimal by design: five tools, all shapes the model already saw in pretraining. But the interesting result is architectural. When the agent loop and the model run in the same process, the harness owns the cache — same prompts, same machine, 7.9 → 17.4 tokens per second, and a draft-model speedup of 1.47x. He’s upfront that he built chad, and commits the raw per-request rows so the numbers trace back to evidence.
Why it matters: every one of those design choices — long system prompts, dozens of tool schemas, chatty background calls — is rational when prefill is free behind an API. Local inference inverts the economics. If your agent feels unusable on your own hardware, the model may not be the problem. The harness is.