A critique of Codex

Published

Codex has some avoidable costs in tokens and processes. A few examples from 0.164.0, with later fixes noted.

Prompt cache preservation was opt in

Preserving the prompt prefix when changing reasoning effort on supported models required reasoning_effort_override = true. Upstream fixed the default in 0.165.0, released October 27.

Compaction needlessly changes the cache prefix

After a reasoning-effort change, compaction resets the request-level baseline to the selected effort, still in 0.166.0. That changes the prompt prefix again. OpenAI's own guidance says to keep that baseline unchanged and append a fresh configuration update after compaction.

Maybe this cache reset is just sloppy engineering. API-key users pay more for uncached input, but that alone proves nothing about intent.

MCP subprocesses multiply with conversations

Each conversation's MCP runtime can launch another copy of the same configured local stdio server. Each copy has its own startup work, heap and connection state.

Sharing suitable servers across conversations would avoid that duplication. Approvals and request ownership can still stay separate.

Code mode carries a separate V8 runtime

The local path starts a standalone JavaScript host, shared across sessions, and sends execution requests and tool callbacks over pipes. It also brings V8 and ICU dependencies. That's a lot of machinery for short snippets mostly calling tools and processing JSON.

An embedded interpreter could remove the extra process and IPC, at the cost of the separate process boundary.