Skip to content

Codex fork 0.156.0

Choose a tag to compare

@Dirard Dirard released this 23 Sep 12:11

Codex fork 0.156.0

This is a main-based fork release following the corrected 0.155.1 runtime, not a byte-for-byte rebuild of OpenAI's 0.156.0 tag.

Comparison baseline

  • Previous fork runtime: 0.155.1, corrected source 1a82148f5d2cb846dadd976c2297260a8edc76cf.
  • Previous upstream-tracking base: 4981b6d01effb84d0a79faa5e41f5e06c4fc5ce7.
  • New upstream-tracking base: cdd1d9e1bbc0cccc80eaa03e6ad0de176e11e5a6, corresponding to OpenAI main@7db578fca663b3e0026996e9c50104784d420744.
  • Reviewed runtime and SDK release source: e8bab0d47f7c74642f4f98032f8f306bee1404ff.
  • New release tags: rust-v0.156.0 and sdk/go/v0.156.0. Earlier version tags remain unchanged.

The upstream section below covers all 194 non-merge commits between these pinned bases. OpenAI's official 0.156.0 changelog uses a different baseline and includes features already present in the previous fork release; those are not claimed as new here.

Upstream changes since the fork's 0.155.1 base

Terminal UI and transcript

  • Fullscreen transcript mode is enabled by default in this pinned main snapshot; /tui selects the terminal UI mode for the next launch.
  • Added transcript search, compact browsing and prompt navigation, per-activity detail controls, selection/copying, plain-click links, and right-click copying for transcript/composer selections.
  • Added mouse selection and editing to the fullscreen composer, preserving drafts until sessions are ready and retaining streamed answers when subagents finish.
  • Improved transcript ordering, persisted activity details, viewport anchoring, wrapping, list spacing, selection/autoscroll behavior, and full URL destinations at different terminal widths.
  • Added status filters, simpler navigation, and improved task metadata/layout in the agent command center; read-only agent sessions handle Escape navigation correctly.
  • Added independent controls for visual effects and Mermaid/math/table rendering. Mermaid supports stadium nodes; terminal math supports aligned equations and optimization notation.
  • Refined warning visibility, quota notices, picker consistency, clock preferences, keyboard hints, reduced-motion voice UI, usage-dashboard navigation, and layout.
  • The welcome animation is limited to onboarding; completion hints and recap spacing are kept close to the transcript tail.

Agent lifecycle and collaboration

  • Added persistent local agent message boards: channel posts/subscriptions, pagination, latest-post indexes, collaboration tools, and thread-deletion cleanup.
  • Added attributed message previews, automatic subscription to newly posted channels, preservation of explicit unsubscribes, and suppression of notifications back to the post author.
  • Consolidated lifecycle operations in AgentControl/LocalAgentControl, with captured spawn/send requests and local runtime state separated from controller handles.
  • Agent inspection can read unloaded-agent metadata without restoring runtimes; status subscriptions stream agent snapshots, and close operations return snapshots.
  • Addressed queued-message/eviction races, overlapped spawn persistence, cleaned up cancelled children, and skipped unnecessary stored-title reads for ephemeral forks.
  • Conditional turn interruption preserves pending input. Subagents can request MCP elicitation input; delivered messages survive post-tool hook failures.
  • Guardian uses thread context by default, supports extra policy configuration, retains ordered assistant context, and tolerates compatible compaction-hash differences for synchronous reviews.

Context, Code Mode, and runtime state

  • Compaction checkpoints persist resume metadata; retained remote-compaction history excludes descendant channel posts.
  • Code Mode shares stored JSON values across cells with Arc, preserves empty-cell metadata under recorder pressure, and recovers executed-tool metadata under capacity pressure.
  • Yielded skill calls retain originating turn metadata; model catalogs can override Code Mode tool messages.
  • MCP request attribution accumulates across requests and history; transport workers retain request trace context.
  • Extension tool history is materialized lazily. Cloud skill catalogs refresh at turn startup and can be reused until invalidated.
  • Thread creator identity and item lifecycle timestamps are persisted; plugin recommendations move into developer context.
  • Added GPT-6 Sol/Luna model catalog entries, including Amazon Bedrock catalogs. Catalog metadata and service-tier availability were refreshed.
  • invalid_prompt is preserved as its own error classification; image-generation failures retain request IDs.

API, plugins, authentication, and networking

  • Added explicit gateway OAuth read/login/cancel operations, authentication status notifications, and the initialize capability for explicit gateway sign-in.
  • Hardened gateway credential persistence and error redaction; MCP OAuth authorization endpoints are restricted to HTTP(S).
  • MCP resource reads can target specific apps/accounts; MCP server status exposes HTTP origins.
  • Plugin summaries expose hosted extensions such as entrypoints, icons, quick actions, search providers, and settings.
  • Standalone web-search redirects and realtime WebSocket connections honor configured proxy routes; the network proxy accepts caller-provided MITM CAs.
  • File blob upload timeout increased from one minute to five minutes; attachment uploads carry thread IDs.
  • Temporary structured threads use read-only permissions; Unix local MCP processes are restricted to stdio descriptors.
  • Environment updates are serialized; removed pending attachments are cancelled. Foreign working directories and required Windows environment variables are preserved.
  • Daemon socket paths are masked through ancestor bind mounts. macOS filesystem helpers avoid fork; local child-process spawning moves into the shared PTY utilities.

Background server, diagnostics, and builds

  • Automatic daemon startup is enabled by default; the TUI offers explicit recovery for incompatible background servers and supports /import with remote/local daemon sessions.
  • Improved codex doctor diagnostics for SQLite databases and path/URL check status without exposing configuration values.
  • Added rollout compression diagnostics and bounded report reason tags.
  • Reduced unused dependency features and avoided building the host SQLite driver for SQLx macros.
  • Removed upstream's rust-release-prepare workflow; clarified Bazel lock verification failures.
  • Added or updated focused regression tests across message boards, lifecycle ordering, snapshots, queues, and credential handling.

Fork reconciliation and Go SDK

All 129 fork commits were replayed without dropping a commit. Runtime adaptations follow the new AgentControl, SpawnAgentOptions, captured send requests, and core-owned submission types instead of restoring retired controller wrappers. Per-turn spawn accounting, legacy parent-completion watching, upstream cancelled-spawn cleanup, and the new Guardian/MCP persistence metadata are preserved together.

The fork-only agent status tool rename is rolled back: both collaboration APIs again advertise and dispatch the upstream wait_agent name. This avoids rejection of check_agent_status inside the reserved collaboration namespace. Wait behavior, timeout controls, namespace configuration, and historical trace recognition remain unchanged.

The Go SDK now exposes the actual stable and experimental app-server additions:

  • Explicit gateway OAuth read/login/cancel calls and status notifications. ClientConfig.ExplicitGatewayOAuth is opt-in; its exact Rust wire field is explicitGatewayOauth, including default-false and omission behavior. Managed login captures the authorization URL before waiting for the blocking RPC and handles RPC completion/error without a notification. Cancellation stops an unsent login locally or follows the already-sent login with a connection-scoped cancel request. Only one managed login is active per client; failed cancellation retains ownership, and an old handle cannot cancel a subsequent one.
  • MCP HTTP origins and explicit resource targets, including required-nullable linkId for selected-account versus no-auth reads.
  • Plugin extension entrypoints, quick actions, search/settings metadata, tagged unions, flattened fields, and raw JSON. Variant-specific defaults no longer leak into other union variants.
  • Nullable item start/completion timestamps with legacy omitted-field support.

Existing SDK methods and definitions remain present. Stable and experimental protocol/schema/manifest digests were regenerated; use the matching runtime and SDK together. The module path and explicit compatibility-override policy remain unchanged. No earlier SDK tag is moved.

Gateway login is registered on the app-server before background dispatch, so an early cancellation cannot acknowledge success and then leave an already-accepted login starting afterward. Dropped queued requests release their admission slot; connection ownership and notification opt-out checks remain enforced.

Existing fork capabilities retained

These are cumulative fork differences, not all-new 0.156.0 features. The targeted preservation checks are described below.

  • Independent mcp_max_lines override for direct MCP results and the whole emitted Code Mode result, including exec/wait/notify; ordinary direct tools retain the general line limit.
  • Original byte/token policies retained through saved metadata, model switches, and replay; raw nested JavaScript values and typed/encrypted MCP results preserved.
  • Custom providers and typed/fallback context-window/auto-compaction overrides; configurable cross-provider plaintext messages and inherited dynamic tools.
  • Cumulative per-turn spawn budgets, race-safe publication accounting, quiet status waits, and parent follow-up completion notifications.
  • Compaction headroom, retained-history bounds, cache/prefill consistency, no-progress failure reporting, and at least three capacity retries.
  • Tolerant malformed usage metadata handling and the expanded 2,097,152-character user-input limit.
  • Typed Go SDK resource clients, request/event routing, strict runtime compatibility, preserved filtered completion backlog, realtime closure, image paths, and JSON Schema forwarding.
  • Direct-only Code Mode routing recovery, explicit tool omissions, consistent instructions, and warnings for unobserved nested results.

Downloadable packages

Exactly five system archives, each containing bin/ with unsuffixed executable names:

  • Linux GNU/glibc x86_64 and ARM64: codex, codex-app-server, codex-code-mode-host, codex-responses-api-proxy, bwrap.
  • macOS x86_64 and ARM64: codex, codex-app-server, codex-code-mode-host, codex-responses-api-proxy.
  • Windows x86_64: codex.exe, codex-app-server.exe, codex-code-mode-host.exe, codex-responses-api-proxy.exe, codex-command-runner.exe, codex-windows-sandbox-setup.exe.

Linux packages use GNU/glibc, not musl. Optional native voice/audio resources and provisioned Windows sandbox-service packaging are outside this bin-only layout. A feature's presence upstream is not a claim that these optional resources are bundled here.

Upgrade note: automatic daemon startup is now enabled by default. Replacing binaries on disk does not update an already-running app-server; an older daemon can still cause configuration or protocol-handshake errors. Use a matching daemon version, or launch the CLI with --no-daemon to bypass it. The tool-name correction does not update or restart existing daemons.

SHA256 of the five release archives:

42f1cffd6413990e9e419dc70ac71c6f51b3d8636f7751101befad9cb08e201d  codex-package-aarch64-apple-darwin.tar.gz
54b59176f1fac3847b3a87d945e4237181f615527ae4fb3b0f6796ddcd878b1e  codex-package-aarch64-unknown-linux-gnu.tar.gz
d812366cc95480135bcd72c093afe0b8dfdd99afcf4efae208b9bf5428207b58  codex-package-x86_64-apple-darwin.tar.gz
79cbe3b3f0f545875f9256c6de2df1bf4682306b2d33769a60585fcf29f75a89  codex-package-x86_64-pc-windows-msvc.zip
9f6b2bddc494caf498e5d8f5717f680085497a0668d1697b7b0219a7126ce45d  codex-package-x86_64-unknown-linux-gnu.tar.gz

Validation and limitations

  • All 129 fork commits were replayed one-to-one: 102 patch-identical and 27 adapted, with no dropped or unmatched commits. The pinned upstream base is an ancestor of the new source.
  • Core validation: 119 focused runtime checks, six reconciled scenario snapshots, nine subagent-elicitation replacement checks, and 87 Code Mode runtime tests passed. Six completion-watcher checks passed after fixing notification delivery when a child disappears before status subscription. Four critical direct-MCP/Code Mode/originating-budget model-input regressions were also executed explicitly without network skips.
  • Adjacent Rust suites: 354 protocol tests and 92 history/output-truncation/Code Mode protocol tests passed. App-server protocol: 350 passed, one skipped. An app-server/Linux targeted selection passed 58 checks; three daemon namespace/socket checks were separately confirmed to execute without environment early-return guards.
  • The server-side OAuth correction passed an all-target app-server compile check, ten Gateway OAuth checks, and seven connection-gate/turn-admission checks. The deterministic pre-handler-cancellation regression verifies that no authorization URL or OAuth HTTP request is produced.
  • The later agent-tool naming correction passed 100 focused core checks, 262 analytics/prompts/rollout-trace/features checks, and 23 targeted core/app-server/exec checks. Six model-context snapshots were reviewed and updated for the canonical tool name and resulting hashes. A rebuilt CLI and fresh strict SDK handshake passed; installed user binaries were not modified.
  • The full Go SDK race-enabled suite passed after the Gateway lifecycle corrections. Stable/experimental manifest and generator checks passed. A freshly built debug CLI reported codex-cli 0.156.0; a fresh strict SDK/runtime handshake passed with the real-runtime guard and without a compatibility override.
  • App-server and config schema generation, Bazel lock verification, 52 GitHub script tests, scoped Clippy/fix, and repository formatting passed. The 0.156.0 version stamp changed only the version fields of local workspace packages; dependency changes inherited from upstream remain part of the new base.
  • Full Rust core, workspace, and app-server suites were not run. Focused checks and compile checks are not presented as full-suite coverage. Tests used isolated/mock environments; no real OAuth browser login or paid provider call was exercised.
  • Independent review covered the rebase and SDK changes; all three original findings were corrected and closed through targeted rechecks. The subsequent user-requested agent-tool naming correction passed a separate targeted review. Its single test-order expectation finding was corrected, the affected test passed, and the reviewer closed it on the exact final source above. No review blockers remain in the agreed scope; the broad rebase review was not repeated for this isolated correction.
  • All five targets passed in manual run 35837840982, attempt 1, completed 2026-09-23 at 11:42:53 UTC. Every runner checked out the exact reviewed source and passed the packaged codex-cli 0.156.0 version assertion.
  • All five downloaded artifact sizes and SHA256 digests matched GitHub metadata. Outer ZIP CRC, release archive integrity, exact executable layout, ELF/Mach-O/PE architectures, and Unix 0755 permissions were verified. The downloaded Linux x86_64 CLI also passed a version smoke check in an isolated home. Only artifacts from this corrected-source run are included.

Source and full upstream changelog

Rebase rewrites older fork commits. The pinned-base comparison and the list below separate new upstream changes from those rewritten cumulative patches.

All 194 upstream non-merge commits since the previous pinned base