What Codex Makes Possible—and What It Cannot Promise
openai/codex is best understood as a local, reusable coding-agent runtime whose autonomy is bounded by a continuous control loop. The final judgment is not whether Codex can act, but how it turns a model proposal into a context-bound, capability-bound, permission-bound, observable operation. The answer gives users and integrators a concrete way to assess a deployment: inspect what the model sees, what it can request, who decides, which executor enforces the decision, and how the result can be corrected.
That definition is more precise than calling Codex a chatbot with shell access. The repository identifies Codex CLI as a local coding agent, but it also separates reusable core logic, protocol types, app-server request processing, non-interactive execution, persistent threads, tools, sandboxes, skills, and SDK surfaces. Those pieces do not form a loose collection of features. Together they make a system for coordinating model inference with repository state and consequential actions.
Codex is a negotiated action system
A request enters a thread, but it does not become an operating-system action in one step. The runtime first assembles a current view of conversation history, settings, environment information, instructions, and available tools. It captures that view for a model step. The model then proposes text, reasoning, or a tool call. Codex records and routes the proposal, applies the relevant policy and permission path, and returns the resulting output or failure to the turn. The next model request can use that feedback.
This is a loop with several distinct boundaries. Context is selected: durable thread history becomes a bounded prompt for one request. Capability is exposed: the tool router decides which specifications are direct, deferred, nested, or hidden. An action is proposed: the model emits a typed tool request rather than directly mutating the host. Authority is evaluated: command policy, approval routing, hooks, and automated or human review determine whether the request may proceed. Execution is constrained: a permission profile and a local or remote sandbox define what the process can reach. The outcome is observed: events, history, tool results, and errors make the transition available to the client and to the next model step.
The arrows are not a claim that every turn follows a perfect circle. A response can finish without a tool. A policy can reject a request. A user can interrupt a process. A context limit can trigger compaction. The diagram captures the ownership pattern: the model supplies proposals and interpretations, while Codex owns the transitions that make those proposals actionable, recordable, interruptible, and reversible at the level the runtime supports.
This also clarifies the relationship between a thread and a turn. A thread retains identity, history, and settings so work can continue, resume, or fork. A turn owns an active cycle of sampling and tool use. A step context freezes the prompt and capability plan for one model request. A transient stream or tool future can affect history, but it does not become the durable authority for the next turn. The client observes these layers and submits new input; it does not replace them with a single mutable “agent state.”
The model's influence is therefore real but bounded. It can decide that inspecting a test is the next useful action, choose among the tools exposed for the step, interpret a command result, and propose a patch. It cannot make a tool visible merely by naming it, turn a repository instruction into host permission, or convert a failed command into unrestricted access by repeating the request. The runtime's boundaries are the mechanism that separates useful autonomy from an opaque automation script.
The architecture makes controlled reach possible
The first enabling property is a feedback loop that can operate on a real repository. A turn-scoped model client can stream a response, Codex can persist a tool request before its handler finishes, and the tool result can re-enter the conversation as evidence. This allows a model to work through a sequence of observations instead of guessing the whole patch in advance.