The harness matters more than people think
People talk about coding models like the wrapper hardly matters. That is wrong.
The harness matters a lot. Sometimes more than the model.
Same model, different harness, completely different experience. One version looks sharp, fast, and oddly competent. The other looks like it just woke up in a strange repo and forgot why it came in.
Context size is part of it. Claude Opus in GitHub Copilot gets 256k. In Claude Code it gets 1M. That is not a rounding error. In a real codebase, that changes what the model can keep in its head before it starts dropping details and bluffing.
People treat context like a boring spec sheet number. It is not. In coding it decides whether the model understands the system or just the few files you shoved in front of it.
But it is not only context. The harness keeps reinforcing the model between prompts. It reminds it how to inspect the repo, how to plan, how to edit, how to recover, what tools to use, what not to touch, and what "good" looks like in that environment. Those reinforcements are not universal. They suit a specific model, and usually a specific version of that model.
That is why GPT-5.4 feels better in Codex than in weaker wrappers. The model is good, but the harness is speaking its language. Same goes for Claude in Claude Code. The native wrapper usually knows how to keep its own animal pointed in the right direction.
Small repos hide this. Big repos expose it immediately.
In a tiny project, almost anything can look smart for a while. In a large codebase, a bad harness burns context, nudges the model the wrong way, and turns a strong model into a distracted intern with excellent self-esteem.
So no, I do not think "which model is best" is the whole question.
The real question is which harness is feeding that model context, tools, memory, and reinforcement in the way that model version actually likes.