Separate the Model, Reasoning Effort, and Harness

Codex and OpenCode can produce different file-search order and patch quality even when the selected model name looks the same. Comparing only which model is “smarter” hides the variables that actually changed.
I use three layers to investigate this: model, reasoning effort, and harness. The boundaries are not standardized across products, so this is a practical classification for comparing coding agents rather than a universal definition.
Define the three layers
| Layer | What it determines | What changes when it changes |
|---|---|---|
| Model | Basic understanding, reasoning, and generation capability | Code comprehension and solution quality |
| Reasoning effort | Compute or time allocated to one response | Depth, speed, tokens, and cost |
| Harness | Context, tools, loops, permissions, and verification | The actual workflow and safety properties |
Here, a harness includes reading files, searching, editing, running commands, and returning tool results to the next model turn. “Harness” is not a universally standardized product boundary, so a comparison should state what each product includes.
A model does not complete the task by itself
The model interprets the request and code, proposes a change, and explains test results. A model on its own does not open a local file or run a shell command.
An agent such as Codex or OpenCode describes tools to the model, appends tool results to the next input, and repeats the loop as needed. The result therefore depends on which files enter context, which tools are available, and which permissions are granted.
Reasoning effort is not another model
Reasoning effort adjusts the amount of computation or time used by the same model. Current Codex model guidance treats model selection and reasoning.effort as separate choices.
A low setting may be sufficient for formatting. A higher setting can help with multi-file constraints, diagnosis, or design comparison. It cannot supply missing context, however, and it can increase tokens, latency, and cost.
It is more accurate to treat reasoning effort as a compute-budget axis than as a switch that makes a model intrinsically smarter.
Four reasons the same model behaves differently
Context
One harness may load AGENTS.md and related files before the first turn; another may ask the model to search for them. The first reduces exploration work, while excessive automatic context can bury an important constraint.
Tools
Full-file replacement, patch application, test execution, and failure recovery all change the safety of “editing.” The availability and calling convention of search and Git tools also affect the result.
Rules and permissions
Project instructions, Skills, MCP, sandboxing, and approval settings constrain both what the model can do and what it is allowed to do. Wider permissions do not guarantee better results; they also widen the impact of a mistake.
Execution loop
Context limits, maximum turns, timeouts, retries, and tool-result summarization can lead two harnesses from the same first answer to different final states.
Direct API use means building a harness
With a direct API integration, you decide what enters context, define the tools, return tool results, and choose the stopping condition. You also own retry behavior, change verification, and permission boundaries.
Therefore, comparing Codex or OpenCode is not only a model-versus-model comparison. It can also be a comparison between a finished harness and a harness you built yourself. API freedom requires corresponding work on safety and reproducibility.
What to hold constant in a comparison
Fix these variables before measuring:
- Model ID and snapshot
- Reasoning effort
- Initial and repository instructions
- Files included in context
- Available tools and permissions
- Maximum turns, timeout, and retries
- Tests, success conditions, and review method
Run the same representative task three to five times when the cost allows. Record success rate, wall-clock time, total tokens, diff size, and human repair time. When one variable changes, inspect which metric moves.
The model answers “who is doing the work,” reasoning effort answers “how much compute is allocated,” and the harness answers “how the work is performed.” Separating them makes it possible to investigate a poor result before blaming the model.
