One name, two different technical objects

In 2021, “Codex” named a GPT-family model fine-tuned on public code. OpenAI’s paper evaluated Python synthesis with HumanEval, reporting 28.8% of problems solved by one evaluated model under a single-sample condition and 70.2% when up to 100 samples were available [1]. Those figures described a model, a dataset, a sampling procedure, and a moment in time.

By August 2026, “Codex” primarily names a software system available through a terminal client, editor integrations, cloud environments, desktop and remote interfaces, review workflows, and programmatic automation. Its recommended model roster itself is transient: current documentation lists GPT-5.6 Sol, Terra, and Luna for different capability-cost regimes, while models carrying “Codex” in their names have entered and left the recommended set [4]. A sentence such as “Codex can solve this task” is therefore underspecified. Which model? Which reasoning budget? Which harness version? Which tools, repository state, permissions, and tests? Which surface? Which definition of “solve”?

The ambiguity is not merely terminological. Model capability and system capability are different estimands. A model maps context to a distribution over outputs. An agent system repeatedly changes its context by acting in an environment. A product additionally decides which actions are permitted, which state persists, what evidence a user sees, and how generated work enters an organization.

ADVERTISEMENT

A useful abstraction is

Ct=(πθ,t,Ht,Tt,Pt,Et,Vt,Ut), \mathcal C_t = (\pi_{\theta,t}, H_t, \mathcal T_t, P_t, E_t, V_t, U_t),

where πθ,t\pi_{\theta,t} is the model policy at time tt; HtH_t is the harness and its context/state machinery; Tt\mathcal T_t is the available tool set; PtP_t is the permission and sandbox policy; EtE_t is the execution environment; VtV_t is the collection of verification functions; and UtU_t represents user and institutional authority. The time index is essential. OpenAI can update the model, CLI, documentation, or cloud runtime without changing the product name.

The right object of analysis is consequently not “the intelligence inside Codex.” It is the trajectory generated by this tuple under a concrete task.

The model is a policy, not the whole agent

At an agent step kk, a model receives an observation history oko_{\le k}, task goal gg, and harness state hkh_k, then proposes an action:

akπθ(aok,g,hk). a_k \sim \pi_{\theta}(a\mid o_{\le k},g,h_k).

The action might request a file read, search, patch, shell command, test, browser interaction, or delegation. It is not yet an environmental transition. The harness parses the proposal, checks that it matches an available tool schema, applies policy, executes permitted operations, and converts results into the next observation.

ADVERTISEMENT

This distinction explains why a stronger base model may produce a smaller product improvement than expected, and why a harness change can improve performance without retraining the model. The SWE-agent study treated the agent-computer interface as a first-class experimental variable. A purpose-built interface for repository navigation, editing, and execution substantially changed task performance relative to less interactive arrangements [11]. The result should not be generalized into a universal effect size, but it demonstrates that interface semantics enter the causal system.

OpenAI’s 2026 documentation makes model replaceability explicit. Users can choose models and reasoning effort on local surfaces, while cloud defaults are separately managed [4]. The best model for an ambiguous architecture change need not be the best economic choice for deterministic extraction or a narrow edit. A system can route subtasks across policies while retaining the same tools and repository.

This produces a basic measurement rule: never attribute a product-level result to a model unless the model is the manipulated variable and the harness, budget, environment, and evaluator are held fixed.

An accelerator card drawn part way out of its slot in an open runner node on the bench, a second card of different build waiting on the mat beside it while the monitor still carries the same diff
Figure 1. The model only proposes; the harness, the repository, the tools and the checks are what turn a proposal into a run, so a result belongs to a model only when everything else is held fixed.Image prompt and art direction by Brecht Corbeel; image generated to that direction.

The harness constructs the world the model can see

No coding model observes a repository directly. A harness selects and serializes observations: file fragments, directory listings, tool descriptions, terminal output, user instructions, diffs, images, web results, summaries, and prior turns. Context is therefore an engineered measurement channel.

Let sks_k be the relevant but incompletely observed repository state. The harness emits

okΩH(osk,qk,bk), o_k \sim \Omega_H(o\mid s_k, q_k, b_k),

where qkq_k is the model’s query or action and bkb_k is a context budget. Two agents using the same model can behave differently because their observation functions ΩH\Omega_H expose different facts, truncate different histories, or describe tools differently.

ADVERTISEMENT

Repository instruction files alter this channel before the first action. The AGENTS.md convention provides a predictable Markdown location for build commands, tests, style rules, security constraints, and nested project-specific instructions; the closest applicable file can override broader guidance [10]. OpenAI’s original cloud Codex release likewise described AGENTS.md files as a way to communicate repository practices [2]. Such files do not inject expertise into model weights. They externalize local organizational knowledge into context.

Long sessions pose a lossy-state problem. When a transcript exceeds context capacity, a harness may compact earlier interaction into a summary. If hk+1=f(hk,ok,ak)h_{k+1}=f(h_k,o_k,a_k) compresses state, reliability depends on whether ff preserves commitments, failed hypotheses, file identities, and unresolved constraints. More context tokens do not remove this requirement; they postpone it.

Tools define the agent-computer interface

Tools are often described as extensions of model capability. More precisely, they define the action alphabet and its error surface. A file-rewrite tool, line-oriented patch tool, syntax-aware refactoring operation, and raw shell can express overlapping changes with very different preconditions and failure modes.

The open-source Codex repository shows that the local product is substantial systems software rather than a prompt wrapper. As verified on August 8, 2026, the repository is predominantly Rust and includes CLI, protocol, sandbox, SDK, and testing components under an Apache 2.0 license [9]. The repository’s exact composition will change; the architectural observation is that local agency is mediated by code responsible for process execution, policy, state, and user interaction.

A tool TjT_j can be represented as a partial transition function

Tj:(s,x)(s,y,e), T_j:(s,x)\mapsto (s',y,e),

with environmental state ss, arguments xx, resulting state ss', observation yy, and error or side-effect record ee. Reliability requires more than choosing the semantically correct tool. The system must construct valid arguments, detect partial execution, decide whether retry is idempotent, and represent output faithfully enough for the next decision.

Tool design also determines what can be verified. A command that returns only “success” destroys evidence. A test tool that preserves command, exit status, duration, and output creates an auditable observation. A patch tool that returns the resulting diff makes unintended edits visible. The interface is part actuator, part scientific instrument.

Five braided patch cords running in a receding row from the runner nodes into a network switch, four latched home in their ports and the fifth caught a hair short of its port
Figure 2. A generated patch becomes an accepted change only through a chain of observations whose strength depends on what each check actually measures.Image prompt and art direction by Brecht Corbeel; image generated to that direction.

Sandboxing and approval are orthogonal controls

Security discussions often collapse “the sandbox” and “asking the user” into one safety feature. Current Codex documentation separates them correctly. The sandbox determines what model-generated commands can technically access. The approval policy determines when the system pauses before attempting an action outside or at the boundary [8].

For local CLI and IDE work, the documented default is a workspace-write sandbox with network access disabled and on-request approval for actions that need to cross the boundary. Platform enforcement differs: current documentation describes Seatbelt on macOS, bwrap plus seccomp on Linux, a native mechanism on Windows, and Linux semantics in WSL2 [8]. These are product claims and configuration facts, not a proof that every escape or policy bypass is impossible.

The distinction matters formally. Let AH(s)A_H(s) be the actions proposed by the harness, AP(s)AH(s)A_P(s)\subseteq A_H(s) the actions admitted by technical policy, and AU(s)AP(s)A_U(s)\subseteq A_P(s) those authorized under the approval process. Tightening approval frequency without reducing APA_P leaves a user vulnerable to habituation and mistaken consent. Tightening APA_P can prevent an action even when the model or reviewer would approve it.

Network access changes the threat model because observations can become adversarial instructions and actions can transmit data. Current cloud documentation describes a two-phase pattern: setup may access the network to install configured dependencies, whereas the agent phase is offline by default unless internet access is enabled for the environment [7, 8]. Local defaults likewise disable command network access. Allowlisting domains and HTTP methods narrows exposure but cannot convert untrusted content into trusted instruction.

Full access is a legitimate mode for some disposable or externally isolated environments. It is not a capability benchmark. Removing a sandbox can increase task completion by making more actions possible while increasing expected loss. Any comparison must report both.

Local, IDE, and cloud are different experiments

Codex CLI works against a local repository, runs installed tools, supports interactive and non-interactive operation, and exposes configuration for model, reasoning, permissions, search, MCP, and cloud delegation [5]. The IDE extension adds editor-selected context and in-place review, reducing the cost of referencing the code currently under inspection [6]. Codex cloud places tasks in dedicated hosted environments configured with repository access, dependencies, variables, and setup steps, allowing parallel background execution [7].

These surfaces share concepts but should not be treated as interchangeable skins.

Local execution inherits the developer machine’s repository state, toolchain, caches, and potentially sensitive ambient context. It offers low-latency interaction and immediate access to local tests. Cloud execution can improve reproducibility and parallelism by starting from configured environments, but incurs setup assumptions and a handoff boundary. IDE context can improve task specification by exposing selections and open files, but “what happens to be open” can also anchor attention too narrowly.

A small sandbox host alone on the bench with one braided cable reaching it, seen past the half-swung perforated door of a rack whose uplink trunk runs fully seated into the switch inside
Figure 3. Local and cloud Codex surfaces share agent concepts but expose different state, isolation, credential, latency, and reproducibility boundaries.Image prompt and art direction by Brecht Corbeel; image generated to that direction.

The choice can be expressed as a constrained optimization rather than a preference:

j=argminj(λLLj+λCCj+λRRj+λSSj), j^* = \arg\min_j \left( \lambda_L L_j + \lambda_C C_j + \lambda_R R_j + \lambda_S S_j \right),

where LjL_j is latency, CjC_j is direct and review cost, RjR_j is reproducibility loss, and SjS_j is security exposure for surface jj. The coefficients depend on the task. A one-line local refactor and a six-hour repository migration should not automatically use the same execution arrangement.

Verification produces evidence, not certainty

The 2025 Codex launch emphasized terminal logs, tests, and citations as evidence available for review [2]. This is an important product design direction, but the strength of evidence depends on the measurement.

A syntax check establishes that parsed files satisfy a grammar. A type checker establishes selected static properties under its type model. A unit test establishes behavior for encoded cases under an environment. An integration test examines a larger interaction. A screenshot can reveal a visual state at a viewport. None proves the absence of untested defects, security vulnerabilities, specification mistakes, or harmful requirements.

Suppose verification functions v1,,vmv_1,\dots,v_m each observe a projection of changed state ss'. Acceptance is

accept(s)=1 ⁣[i=1mvi(s)=1]u(s), \operatorname{accept}(s') = \mathbb{1}\!\left[ \bigwedge_{i=1}^{m} v_i(s')=1 \right] \cdot u(s'),

where u(s)u(s') represents required human or institutional authorization. Even if every viv_i passes, the false-accept probability is not zero because the conjunction covers only encoded properties. Correlated checks can repeat the same blind spot.

Good agent design therefore records the evidence claim at its proper strength: “these focused tests passed,” not “the implementation is correct.” Failed checks are equally valuable observations. A system that retries until output turns green without preserving intermediate failures can obscure instability or test pollution.

Benchmarks estimate trajectories under a harness

Software-agent benchmarks improve on isolated code completion by placing models in repositories and executing generated patches. Yet a score belongs to an evaluated system. It depends on model snapshot, reasoning effort, tool interface, context strategy, retry budget, test harness, task set, and infrastructure exclusions.

The original code-Codex HumanEval result demonstrated the sensitivity to sampling budget: pass rates rose markedly when many samples were permitted [1]. SWE-agent demonstrated sensitivity to interface [11]. OpenAI’s GPT-5.3-Codex announcement reports results with an xhigh reasoning setting and specific Codex infrastructure; those values should be cited as OpenAI evaluations, not context-free properties of the model [3].

Long-horizon capability adds another axis. METR’s 2026 revision of its time-horizon analysis defines a 50%-task-completion horizon by mapping model success to the time skilled humans require for tasks. The study reports a historical trend and explicitly discusses external-validity limits [12]. A horizon is more interpretable than a raw benchmark point for some forecasting questions, but it still describes sampled tasks under an elicitation protocol.

A complete evaluation record should identify at least

E=(D,M,H,B,P,X,V,τ), \mathcal E = (D,M,H,B,P,X,V,\tau),

where DD is the task distribution, MM the model snapshot, HH the harness, BB the inference and retry budget, PP permissions, XX the execution environment, VV verification, and τ\tau the evaluation date. Omitting any of these makes reproduction or comparison weaker.

A fan tray still sliding out of the front of the runner node that produced a run, its blades slowing, with the run's terminal output still up on the monitor on the desk behind
Figure 4. A score is a property of the whole arrangement that produced it, the machine included; the runner everything was measured on is itself an instrument with wear and a date.Image prompt and art direction by Brecht Corbeel; image generated to that direction.

The organization is the final layer

Codex can propose and test a patch; an organization decides what counts as a requirement, who may accept risk, where secrets live, which logs are retained, and when software ships. Those decisions are not implementation debris around the agent. They are part of UtU_t, the authority layer.

Three organizations can deploy the same model and harness with different outcomes. One may have executable specifications, hermetic builds, narrowly scoped credentials, and prompt review. Another may have flaky tests and undocumented conventions. A third may let generated changes bypass ordinary review because the agent appears confident. The model is constant; the socio-technical system is not.

This is why productivity and safety can move in opposite directions. Faster patch production can increase reviewer load. More generated tests can improve coverage or merely encode the implementation’s mistake. Parallel agents can explore independent tasks or create merge and coordination overhead. The relevant output is not tokens or diffs. It is accepted, valuable change net of review, rework, incidents, and opportunity cost.

A durable way to reason about Codex

Product surfaces and model names will continue to change. The layered account remains useful because it asks stable questions.

  1. Policy: Which model produced each decision, at what reasoning and sampling budget?
  2. Observation: Which repository state and instructions were actually visible?
  3. Action: Which tools existed, with what schemas and side effects?
  4. Boundary: Which filesystem, network, credential, and external-service capabilities were technically possible?
  5. Environment: Could another run reconstruct dependencies and state?
  6. Evidence: Which independent checks ran, and what properties did they measure?
  7. Authority: Who accepted the result, and what remained reversible?
  8. Time: On what date were the product, model, and documentation verified?

Calling Codex “a coding model” now hides most of the engineering. Calling it “a virtual software engineer” hides the accountability. It is more precise to call it a configurable software-engineering system built around replaceable language-model policies. Its capability is emergent from the stack; its risk is constrained or amplified by the stack; and every serious claim about it should name enough of that stack to be tested.