New Features
- Added keyboard-driven transcript selection with word, line, and page motions, integrated search, and configurable shortcuts. (#57221, [#57222], [#57223], [#57224])
- Rendered Markdown consistently in async questions, choices, answers, and transcript replies. (#57259, [#57292])
- Added GPT-6.1 Terra to the bundled, Vertex AI, and Amazon Bedrock model catalogs. (#57293)
- Added
codex queue --resumeto resume unloaded threads after queueing a message. (#57232) - Added clearer safety-block explanations and selectable safer follow-up prompts in the TUI. (#57363, [#57365])
- Added
codex doctor --network-onlyfor focused configuration, connectivity, and WebSocket diagnostics. (#57606)
Bug Fixes
- Preserved acknowledged approval and permission settings when resuming or forking threads. (#57227)
- Preserved local image attachments when restoring killed composer text. (#57502)
- Fixed standalone release cleanup on macOS when installations are in use or paths contain non-ASCII characters. (#57503)
- Restored spawned descendant threads when unarchiving their parent. (#57635)
- Fixed app-server thread startup and shutdown races and released completed runtimes promptly. (#57787, [#57788])
- Improved TUI reconnection recovery, including offline
/quitand/exithandling. (#57820) - Preserved reasoning-token accounting across resume and fork to avoid premature compaction. (#57839)
Chores
- Switched Bazel to source-built V8 with target-matched Rust bindings and native Windows MSVC archive support. (#57164, [#57269], [#57644], [#57832])
- Shipped the standalone executor in canonical CLI and app-server release packages. (#57837)
- Standardized development and release builds on Node.js 24.22.1 and Rust 1.95.0. (#57168, [#57373])
Changelog
Full Changelog: https://github.com/openai/codex/compare/rust-v0.165.0...rust-v0.166.0
- [#56468] Preserve
SystemRootfor Windows filesystem sandbox helpers @jif-oai - [#56477] Move Guardian approval reason caps into context composition @ioanbudea-OAI
- [#56483] Allow installed plugin metadata to skip display enrichment @bkotsopoulos
- [#56493] Move Guardian tool description preparation into context composition @ioanbudea-OAI
- [#56494] Add channel upserts to message boards @felixxia-oai
- [#56495] Add paginated channel subscription queries to the local message board @felixxia-oai
- [#56505] Defer synchronous Guardian tool-call truncation to preparation @ioanbudea-OAI
- [#56514] Preserve tracing context throughout tool dispatch @bkotsopoulos
- [#56515] Add trace instrumentation for turn startup and response streaming @bkotsopoulos
- [#56516] Respect server approval policy defaults during TUI startup @etraut-openai
- [#56524] Add turn, tool, and skill attribution to traces @bkotsopoulos
- [#56525] Remove the 1 MiB response limit for explicit model catalogs @eternal-openai
- [#56530] Record skill and plugin catalog sizes on publication @TAFOYA-OAI
- [#56533] Defer sync Guardian tool-output truncation to transcript preparation @ioanbudea-OAI
- [#56535] Extract the head-tail buffer into a utility crate @seanh-oai
- [#56543] Track resume picker pagination and selection metadata per backend @bc-openai
- [#56552] Initialize SQLite databases with DELETE journaling on NFS @dkovalenko-oai
- [#56553] Include environment hooks in thread hook listings @andrewgu-oai
- [#56554] Enable masked AWS credentials for local proxy signing @viyatb-oai
- [#56555] Apply sync Guardian message limits during transcript preparation @ioanbudea-OAI
- [#56556] Use conversations for all Guardian v2 async classification @felixxia-oai
- [#56557] Exercise retained sampling in Guardian transport tests @felixxia-oai
- [#56559] Remove Guardian snapshot-specific context helpers @felixxia-oai
- [#56560] Allow configuring GCP project and location in provider settings @alexsong-oai
- [#57164] Move the V8 Bazel build graph into Codex @seanh-oai
- [#57165] Enforce V8 artifact profiles at Bazel target boundaries @seanh-oai
- [#57166] Surface automatic marketplace update failures as startup warnings @dkovalenko-oai
- [#57167] Track CUA tool call starts and deduplicate lifecycle events @trpcic-openai
- [#57168] Centralize Node.js version selection on 24.22.1 @anp-oai
- [#57169] Clarify config loader APIs and share interactive login setup @smurching-oai
- [#57170] Update prebuilt argument-comment-lint to
rust-v0.164.0@tamird - [#57171] Integrate runtime authentication into model requests @cooper-oai
- [#57172] Expose lifecycle timestamps on app-server thread items @charliemarsh-oai
- [#57174] Add scoped request-body secret substitution to MITM hooks @viyatb-oai
- [#57175] Integrate config-server policies with startup and authentication @smurching-oai
- [#57176] Defer Guardian Node REPL output truncation until prompt preparation @ioanbudea-OAI
- [#57178] Route FedRAMP API keys to government endpoints by default @lsingh-oai
- [#57179] Consolidate async header authentication in
apply_auth_headers@cooper-oai - [#57180] Add constraint-aware standalone network proxy configuration @viyatb-oai
- [#57181] Add optional names to untrusted additional context @akira-oai
- [#57185] Centralize unified exec output rendering @anp-oai
- [#57186] Fail closed on unreadable glob search root metadata errors @viyatb-oai
- [#57187] Allow advisory rollout budgets with optional limit enforcement @nvogt-oai
- [#57188] Add a credential file override for GCP provider authentication @alexsong-oai
- [#57191] Read unified exec output directly from stdout and stderr @anp-oai
- [#57192] Gate capability discovery V2 on executor version @TAFOYA-OAI
- [#57193] Preserve failed
write_stdincalls in rollout trace replay @cassirer-openai - [#57194] Classify rollout tool calls by their runtime handler @cassirer-openai
- [#57196] Isolate MCP inputs and timeouts for callers sharing a connection @charliemarsh-oai
- [#57197] Clarify skill toggle summaries in the TUI @fcoury-oai
- [#57198] Report the local command working directory in PreToolUse hooks @eternal-openai
- [#57199] Truncate rollout JSON summaries at UTF-8 character boundaries @cassirer-openai
- [#57201] Capture direct-tool critical paths behind a feature flag @taohong339
- [#57202] Preserve the tool dispatch span across runtime futures @trpcic-openai
- [#57203] Preserve command cwd in permission and post-tool hooks @eternal-openai
- [#57204] Register the
untrusted_as_tool_outputfeature flag @akira-oai - [#57206] Ignore the crypto-bigint timing advisory in dependency checks @etraut-openai
- [#57207] Attribute approval waits to tool critical-path timing @taohong339
- [#57208] Propagate installer download failures in standalone Unix updates @etraut-openai
- [#57209] Report turn critical-path timing in analytics @taohong339
- [#57210] Add opt-in protocol discovery for local stdio MCP servers @charliemarsh-oai
- [#57211] Share eligible local stdio MCP connections across chats @charliemarsh-oai
- [#57212] Enable zstd compression for code-mode gRPC responses @cayoub-oai
- [#57215] Coordinate resume picker sources independently @bc-openai
- [#57218] Support negotiated WebSocket compression in the remote app-server client @thorvald-oai
- [#57220] Log app-server WebSocket compression statistics @thorvald-oai
- [#57221] Expand keyboard navigation and selection in the transcript @fcoury-oai
- [#57222] Integrate Find with transcript selection mode @fcoury-oai
- [#57223] Wire keyboard selection into transcript overlays @fcoury-oai
- [#57224] Fix transcript selection input routing and preserve composer drafts @fcoury-oai
- [#57225] Add managed enforcement of DELETE journaling on NFS @dkovalenko-oai
- [#57226] Allow NFS database migration with shared file permissions @dkovalenko-oai
- [#57227] Preserve acknowledged permissions when resuming and forking threads @charliemarsh-oai
- [#57228] Give remote control pairing a 35-second deadline @etraut-openai
- [#57229] Simplify code-mode cell completion delivery @cconger
- [#57232] Add optional thread resumption to
codex queue@etraut-openai - [#57233] Stop dotenv loading on persistent I/O errors @etraut-openai
- [#57234] Prevent credential collisions in registry auth test fixtures @jif-oai
- [#57235] Tag exec_command telemetry with the configured shell snapshot mode @jif-oai
- [#57238] Exercise V2 spawning in subagent context inheritance tests @tamird
- [#57239] Make the MCP HTTP probe timeout test deterministic @jif-oai
- [#57240] Bound memory baseline files and recover incomplete snapshots @dhruvgupta-oai
- [#57241] Honor configured message limits for encrypted guardian transcripts @ioanbudea-OAI
- [#57242] Reduce the default thread unload delay to one minute @jif-oai
- [#57243] Pause Tokio time in startup draft handoff tests @goodman-oai
- [#57244] Wait for process completion in the unified exec reuse test @goodman-oai
- [#57245] Stabilize the rejected queue message test @goodman-oai
- [#57247] Release the rollout maintenance lock when its guard is dropped @goodman-oai
- [#57248] Make login token-refresh tests wait for auth publication @goodman-oai
- [#57249] Allow disabling plugin discovery prefetch at app-server startup @zamoshchin-openai
- [#57251] Show native dollar thread usage for ENT26 plans @jif-oai
- [#57253] Allow slow daemon startup while detecting early process exits @etraut-openai
- [#57255] Record reviewed exceptions for zstd security advisories @charliemarsh-oai
- [#57256] Keep parent history out of attached thread views @btraut-openai
- [#57257] Avoid unnecessary connector directory work for tool suggestions @charliemarsh-oai
- [#57258] Reduce remote plugin catalog cache probing overhead @charliemarsh-oai
- [#57259] Render Markdown in TUI async question choices @imac-oai
- [#57260] Centralize permission request preparation and approval actions @swastik-oai
- [#57261] Separate
apply_patchrequest preparation from execution @swastik-oai - [#57262] Add incremental skill catalogs behind
skill_catalog_deltas@adaley-openai - [#57263] Support model-catalog wording for permission path warnings @goodman-oai
- [#57265] Show effective processing tiers in TUI status surfaces @etraut-openai
- [#57267] Keep cloud conversation settings server-owned in the TUI @bc-openai
- [#57268] Record reasons for embedded TUI starts @etraut-openai
- [#57269] Add native Windows MSVC V8 source archive builds @seanh-oai
- [#57270] Load cloud config for sandbox and remote exec-server commands @abhinav-oai
- [#57271] Enable text selection and mouse scrolling in the warning viewer @imac-oai
- [#57272] Add code-mode output truncation protocol contracts @seanh-oai
- [#57273] Reject unsupported options for
codex queue@etraut-openai - [#57274] Defer REPL evidence rendering to synchronous context preparation @ioanbudea-OAI
- [#57275] Preserve image generation failure metadata for premium usage limits @jimxie-oai
- [#57276] Support window prefixes for extension world-state sections @fc-oai
- [#57277] Use the crates.io release of
i18n-config@goodman-oai - [#57278] Refactor agent spawning, startup, and communication helpers @rhan-oai
- [#57279] Render untrusted additional context as named tool outputs @akira-oai
- [#57280] Preserve full MCP results in rollout traces @cassirer-openai
- [#57281] Enable agents navigation for remote App Server sessions @etraut-openai
- [#57282] Promote rounded token counts to the next compact unit @etraut-openai
- [#57284] Express TUI mouse capture as an explicit policy @imac-oai
- [#57285] Let the terminal handle links in expanded questions @imac-oai
- [#57286] Support
network_proxyin managed requirements @viyatb-oai - [#57287] Preserve parent tool declarations in prediction forks @keyz
- [#57290] Add a plugin process host with bounded IPC and lifecycle management @joesavona
- [#57291] Represent user message presentation with an enum @imac-oai
- [#57292] Render async questions and replies with Markdown in the TUI @imac-oai
- [#57293] Add GPT-6.1 Terra to model catalogs @BOZHANG-OAI
- [#57294] Extract plugin manager errors and box realtime handoff routing @TAFOYA-OAI
- [#57295] Defer synchronous Guardian evidence limits to preparation @ioanbudea-OAI
- [#57304] Surface refresh-token rejection errors during workspace routing @smurching-oai
- [#57307] Bump
openai/fencetov0.12.2in the blob size policy @joesavona - [#57311] Preserve tool output versions and history order in rollout traces @cassirer-openai
- [#57312] Centralize Guardian root context preparation @ioanbudea-OAI
- [#57313] Default gateway OAuth delivery to Authorization bearer tokens @smurching-oai
- [#57314] Format all Rust sources and clean up repository checks @joesavona
- [#57315] Keep failed subagents from marking tasks as needing attention @bc-openai
- [#57317] Add opt-in concise hints for explicitly selected plugins @adaley-openai
- [#57325] Add model catalog fields for granular approval templates @goodman-oai
- [#57342] Separate TUI session resume preparation from activation @bc-openai
- [#57352] Preserve child signal failures in the npm wrapper @dkovalenko-oai
- [#57353] Avoid object-identity preflight for MXC path grants @iceweasel-oai
- [#57357] Report when NFS database migration finds no databases @dkovalenko-oai
- [#57358] Serialize session index mutations across processes @dkovalenko-oai
- [#57360] Bound waits for the thread writer coordination lock @dkovalenko-oai
- [#57363] Explain safety policy blocks with turn-scoped recourse in the TUI @etraut-openai
- [#57365] Offer safer rewrites after safety blocks in the TUI @etraut-openai
- [#57366] Show the selected ChatGPT workspace in
/status@etraut-openai - [#57373] Pin the Rust toolchain to 1.95.0 @TAFOYA-OAI
- [#57391] Drain pending terminal reports before returning to the shell @etraut-openai
- [#57393] Render integral limits and parenthesized matrices in TUI math @etraut-openai
- [#57394] Add experimental GCP account setup to the app server @alexsong-oai
- [#57420] Make thread item timestamps optional in TypeScript exports @keyz
- [#57425] Centralize Guardian root context preparation @ioanbudea-OAI
- [#57430] Test goal provenance in existing workers' Guardian reviews @jif-oai
- [#57433] Add opt-in synchronous Guardian review for native tool calls @jif-oai
- [#57435] Extract unified exec command preparation into a reusable module @swastik-oai
- [#57438] Carry prepared commands through unified execution @swastik-oai
- [#57439] Preserve Guardian request metadata with custom OpenAI base URLs @jif-oai
- [#57441] Add Guardian native multi-agent history feature flag @jif-oai
- [#57448] Preserve native multi-agent calls in Guardian review history @jif-oai
- [#57451] Route state-changing multi-agent calls through Guardian review @jif-oai
- [#57452] Distinguish policy-restricted capacity failures from server overloads @toml-openai
- [#57455] Centralize Guardian classification of multi-agent tool calls @jif-oai
- [#57458] Move Guardian token usage calculation into the reviewer crate @jif-oai
- [#57462] Always put Code Mode tool descriptions before namespace descriptions @swastik-oai
- [#57468] Fix guardian handoff mocks for native history tests @jif-oai
- [#57474] Test encrypted native call history across Guardian reviews @jif-oai
- [#57476] Move Guardian session helpers into the reviewer crate @jif-oai
- [#57478] Move Guardian approval request types into the reviewer crate @jif-oai
- [#57483] Skip unrelated indexed rollouts during selected thread migration @charliemarsh-oai
- [#57488] Move guardian prompt composition into the reviewer crate @jif-oai
- [#57493] Move Guardian action JSON formatting into the reviewer crate @jif-oai
- [#57494] Centralize synchronous Guardian context preparation @ioanbudea-OAI
- [#57500] Add an option to omit descriptions from skill catalogs @adaley-openai
- [#57501] Render escaped percent signs in TUI math @etraut-openai
- [#57502] Preserve local image attachments when restoring killed text @etraut-openai
- [#57503] Fix macOS standalone release pruning @etraut-openai
- [#57504] Use the native clipboard for WSL SSH sessions with X11 forwarding @etraut-openai
- [#57506] Move Guardian request mappings into the reviewer crate @jif-oai
- [#57507] Resolve Guardian command path conventions inside
ReviewAction@swastik-oai - [#57508] Add a bounded V8 runtime for UI plugin processes @joesavona
- [#57509] Extract Guardian planned-action assembly into the reviewer crate @jif-oai
- [#57512] Explicitly unlock daemon PID reservation probes on Unix @jif-oai
- [#57513] Replace the npm wrapper with the native binary using
execve@bolinfest - [#57514] Add experimental ChatGPT workspace switching to app-server @dhruvgupta-oai
- [#57515] Limit MXC volume expansion probes to symbolic links @iceweasel-oai
- [#57516] Add profile and provider status line items @etraut-openai
- [#57519] Defer synchronous Guardian heartbeat compression to preparation @ioanbudea-OAI
- [#57522] Add isolated reviews to the guardian reviewer pool @swastik-oai
- [#57533] Release empty PID probe locks explicitly on Unix @jif-oai
- [#57538] Preserve host-assigned user input IDs in Responses messages @zbrunson-openai
- [#57542] Add model-gated literature search to standalone web search @rhan-oai
- [#57552] Expose and persist image generation IDs @jimxie-oai
- [#57553] Allow replacing dynamic tools between model steps @sdcoffey
- [#57554] Keep submitted prompts shaded when terminal colors are unavailable @bc-openai
- [#57563] Avoid retaining unneeded output items in HTTP response streams @btraut-openai
- [#57564] Preserve rich composer content in Vim registers @bc-openai
- [#57567] Allow catalog URL overrides for the built-in OpenAI provider @jamy-OAI
- [#57568] Configure memory consolidation service tiers independently @mandal-OAI
- [#57569] Preserve process output and control replies under backpressure @ztanner-oai
- [#57572] Support Apps tool catalogs without shared snapshots @bkotsopoulos
- [#57573] Add filesystem-free classification of intercepted patch commands @swastik-oai
- [#57575] Refactor HTTP client construction and request execution @bz-openai
- [#57581] Allow model catalogs to customize approval instruction headings @goodman-oai
- [#57584] Preserve output boundaries through token truncation @seanh-oai
- [#57585] Replace unavailable image references in model requests @kchainani-oai
- [#57586] Add host-reserved V2 child creation APIs @rhan-oai
- [#57589] Add a standalone
codex-exec-serverexecutable @dkovalenko-oai - [#57590] Ship
codex-exec-serverin CLI and app-server packages @dkovalenko-oai - [#57593] Remove empty local staging routing files @fcoury-oai
- [#57597] Preserve WebSocket probe evidence and redact diagnostic details @dob-oai
- [#57598] Cache empty remote skill discovery with filesystem watches @adams-oai
- [#57599] Support catalog headings for saved command-prefix notices @goodman-oai
- [#57606] Add
codex doctor --network-onlyfor focused network diagnostics @dob-oai - [#57607] Share runtime authentication with model providers and catalogs @cooper-oai
- [#57612] Disable terminal status sequences on older VTE backends @fcoury-oai
- [#57615] Preserve rollout tracing across sub-agent reloads @cassirer-openai
- [#57618] Release sampling prompts after stream setup @btraut-openai
- [#57626] Show Bedrock setup for explicitly configured OpenAI providers @alexsong-oai
- [#57628] Stop shipping
codex-exec-serverin release artifacts @fcoury-oai - [#57635] Restore spawned descendants when unarchiving a thread @etraut-openai
- [#57638] Add OpenTelemetry requirement types to the app-server protocol @arnavpatidar-OAI
- [#57644] Generate Rust bindings that match Bazel-built V8 archives @seanh-oai
- [#57649] Support managed OpenTelemetry configuration requirements @abhinav-oai
- [#57654] Redact OTEL exporter headers in app-server config responses @arnavpatidar-OAI
- [#57657] Fix trace exporter activation after account switches @arnavpatidar-OAI
- [#57658] Support managed OpenTelemetry metadata and PEM client identities @abhinav-oai
- [#57667] Remove detached delivery from
review/start@yansenzhou-oai - [#57692] Wait for turn profiles before asserting sampling counts in trace tests @ioanbudea-OAI
- [#57697] Move Guardian review state into the reviewer extension @jif-oai
- [#57698] Move Guardian context policy and prompts into the reviewer extension @jif-oai
- [#57702] Move Guardian review evidence into the reviewer extension @jif-oai
- [#57710] Preserve parent routing affinity for Guardian reviews @jif-oai
- [#57720] Move
ReviewActioninto the Guardian reviewer crate @jif-oai - [#57723] Disable optimization for the on-demand Bazel schema generator @jif-oai
- [#57729] Remove
free_guardianconfiguration from Guardian tests @ioanbudea-OAI - [#57741] Separate test-only Rust sources from Bazel library and binary inputs @jif-oai
- [#57742] Avoid recompiling Bazel integration tests for runtime fixture changes @jif-oai
- [#57743] Move Guardian MCP elicitation helpers into the reviewer crate @jif-oai
- [#57757] Expose Guardian assessments in response streams @jif-oai
- [#57758] Include terminal launch commands in Guardian stdin reviews @jif-oai
- [#57770] Respect model catalog origins when selecting Guardian reviewers @ioanbudea-OAI
- [#57774] Skip non-regular files when detecting pasted image paths @etraut-openai
- [#57782] Restrict code-mode host replacement to session admission @aakash-oai
- [#57783] Exclude unrelated network shares from MXC default reads @iceweasel-oai
- [#57787] Fix app-server thread listener startup and shutdown races @charliemarsh-oai
- [#57788] Release app-server thread runtimes after shutdown @charliemarsh-oai
- [#57789] Refresh the model catalog once when Guardian's default reviewer is missing @jif-oai
- [#57790] Centralize synchronous Guardian prompt preparation @ioanbudea-OAI
- [#57796] Extend GitHub release read retries and add jitter @imac-oai
- [#57800] Backfill exec completion items through paginated history @btraut-openai
- [#57817] Detach realtime sideband observers without ending the session @jiahao-oai
- [#57818] Reduce unnecessary work in configuration processing @bc-openai
- [#57819] Load up to eight plugins concurrently @bc-openai
- [#57820] Improve TUI reconnect recovery and offline exit handling @etraut-openai
- [#57824] Include directly attached threads in diagnostic uploads @btraut-openai
- [#57825] Update CI setup to use
meta/install-dotslash@seanh-oai - [#57832] Build V8 from source by default in Bazel @seanh-oai
- [#57834] Add isolated Guardian assessments for prepared actions @swastik-oai
- [#57835] Limit concurrent image availability checks to eight @kchainani-oai
- [#57836] Declare the image generation result type in code mode @alicec-oai
- [#57837] Ship the standalone executor in release packages @dkovalenko-oai
- [#57839] Preserve reasoning token accounting across resume and fork @andrewgu-oai
- [#57840] Validate thread providers before resume and input @abhinav-oai
- [#57841] Add optional process metrics sampling for code-mode hosts @aakash-oai