New Features
- Running direct shell commands no longer interrupts an in-flight turn; commands can execute concurrently when a turn is active. (#10513)
- Added
/statuslineto configure which metadata appears in the TUI footer interactively. (#10546) - The TUI resume picker can now toggle sort order between creation time and last-updated time with an in-picker mode indicator. (#10752)
- App-server clients now get dedicated APIs for steering active turns, listing experimental features, resuming agents, and opting out of specific notifications. (#10721, #10821, #10903, #11319)
- Enterprise/admin requirements can now restrict web search modes and define network constraints through
requirements.toml. (#10964, #10958) - Image attachments now accept GIF and WebP inputs in addition to existing formats. (#11237)
- Enable snapshotting of the shell environment and
rcfiles (#11172)
Bug Fixes
- Fixed a Windows startup issue where buffered keypresses could cause the TUI sign-in flow to exit immediately. (#10729)
- Required MCP servers now fail fast during start/resume flows instead of continuing in a broken state. (#10902)
- Fixed a file-watcher bug that emitted spurious skills reload events and could generate very large log files. (#11217)
- Improved TUI input reliability: long option labels wrap correctly, Tab submits in steer mode when idle, history recall keeps cursor placement consistent, and stashed drafts restore image placeholders correctly. (#11123, #10035, #11295, #9040)
- Fixed model-modality edge cases by surfacing clearer
view_imageerrors on text-only models and stripping unsupported image history during model switches. (#11336, #11349) - Reduced false approval mismatches for wrapped/heredoc shell commands and guarded against empty command lists in exec policy evaluation. (#10941, #11397)
Documentation
- Expanded app-server docs and protocol references for
turn/steer, experimental-feature discovery,resume_agent, notification opt-outs, and nulldeveloper_instructionsnormalization. (#10721, #10821, #10903, #10983, #11319) - Updated TUI composer docs to reflect draft/image restoration, steer-mode Tab submit behavior, and history-navigation cursor semantics. (#9040, #10035, #11295)
Chores
- Reworked npm release packaging so platform-specific binaries are distributed via
@openai/codexdist-tags, reducing package-size pressure while preserving platform-specific installs (including@alpha). (#11318, #11339) - Pulled in a security-driven dependency update for
time(RUSTSEC-2026-0009). (#10876)
Changelog
Full Changelog: rust-v0.98.0...rust-v0.99.0
- #10729 fix(tui): flush input buffer on init to prevent early exit on Windows @Ashutosh0x
- #10689 fix: flaky landlock @jif-oai
- #10513 Allow user shell commands to run alongside active turns @jif-oai
- #10738 nit: backfill stronger @jif-oai
- #10246 adding fork information (UI) when forking @pap-openai
- #10748 Update explorer role default model @jif-oai
- #10425 Include real OS info in metrics. @iceweasel-oai
- #10745 feat: resumable backfill @jif-oai
- #10758 feat: wire ephemeral in
codex exec@jif-oai - #10756 chore: handle shutdown correctly in tui @jif-oai
- #10637 feat: add memory tool @jif-oai
- #10751 feat: repair DB in case of missing lines @jif-oai
- #10762 nit: add DB version in discrepancy recording @jif-oai
- #10621 Leverage state DB metadata for thread summaries @jif-oai
- #9691 Add hooks implementation and wire up to
notify@gt-oai - #10546 feat(tui): add /statusline command for interactive status line configuration @fcoury
- #10752 feat(tui): add sortable resume picker with created/updated timestamp toggle @fcoury
- #10769 fix(tui): fix resume_picker_orders_by_updated_at test @owenlin0
- #10423 fix(auth): isolate chatgptAuthTokens concept to auth manager and app-server @owenlin0
- #10775 nit: gpt-5.3-codex announcement @jif-oai
- #10782 nit: gpt-5.3-codex announcement 2 @jif-oai
- #10711 add sandbox policy and sandbox name to codex.tool.call metrics @iceweasel-oai
- #10660 chore: rm web-search-eligible header @sayan-oai
- #10783 fix: announcement in prio @jif-oai
- #10721 [app-server] Add a method to list experimental features. @mzeng-openai
- #10787 chore: limit update to 0.98.0 NUX to < 0.98.0 ver @sayan-oai
- #10655 Add analytics for /rename and /fork @pap-openai
- #10790 feat: wait for backfill to be ready @jif-oai
- #10693 Add app-server transport layer with websocket support @maxj-oai
- #10818 other announcement @jif-oai
- #10815 Sync app-server requirements API with refreshed cloud loader @xl-openai
- #10820 go back to auto-enabling web_search for azure @sayan-oai
- #10727 Send beta header with websocket connects @pakrym-oai
- #10809 updates: use brew api for version check @magus
- #10793 Add stage field for experimental flags. @mzeng-openai
- #10821 feat(app-server): turn/steer API @owenlin0
- #10792 Print warning when config does not meet requirements @gt-oai
- #10699 feat: expose detailed metrics to runtime metrics @apanasenko-oai
- #10784 Gate app tooltips to macOS @aibrahim-oai
- #10843 Log an event (info only) when we receive a file watcher event @etraut-openai
- #10852 Personality setting is no longer available in experimental menu @etraut-openai
- #10840 Removed the "remote_compaction" feature flag @etraut-openai
- #10876 sec: fix version of
timeto prevent vulnerability @jif-oai - #10892 nit: test an @jif-oai
- #10894 feat: backfill async again @jif-oai
- #10902 Handle required MCP startup failures across components @jif-oai
- #10851 Removed "exec_policy" feature flag @etraut-openai
- #10457 Queue nudges while plan generating @charley-oai
- #10822 Add app configs to config.toml @canvrno-oai
- #10420 feat(network-proxy): add structured policy decision to blocked errors @viyatb-oai
- #10814 fix(linux-sandbox): block io_uring syscalls in no-network seccomp policy @viyatb-oai
- #10698 core: preconnect Responses websocket for first turn @joshka-oai
- #10574 core: refresh developer instructions after compaction replacement history @charley-oai
- #10914 chore(app-server): update AGENTS.md for config + optional collection guidance @owenlin0
- #10928 chore(app-server): add experimental annotation to relevant fields @owenlin0
- #10927 Treat compaction failure as failure state @aibrahim-oai
- #10861 Support alternative websocket API @by-openai
- #10826 add originator to otel @alexsong-oai
- #10855 TUI/Core: preserve duplicate skill/app mention selection across submit + resume @daniel-oai
- #10943 app-server: print help message to console when starting websockets server @JaviSoto
- #10938 Mark Config.apps as experimental, correct schema generation issue @canvrno-oai
- #10947 fix(tui): conditionally restore status indicator using message phase @sayan-oai
- #10965 refactor(network-proxy): flatten network config under [network] @viyatb-oai
- #10970 Fixed a flaky test @etraut-openai
- #10710 Process-group cleanup for stdio MCP servers to prevent orphan process storms @etraut-openai
- #10964 feat: add support for allowed_web_search_modes in requirements.toml @bolinfest
- #10977 fix: use expected line ending in codex-rs/core/config.schema.json @bolinfest
- #10973 Do not poll for usage when using API Key auth @etraut-openai
- #10921 Show left/right arrows to navigate in tui request_user_input @charley-oai
- #10988 fix: normalize line endings when reading file on Windows @bolinfest
- #10903 Add resume_agent collab tool @jif-oai
- #10909 Bootstrap shell commands via user shell snapshot @jif-oai
- #10993 Fix flaky windows CI test @etraut-openai
- #10987 Fixed a flaky Windows test that is consistently causing a CI failure @etraut-openai
- #10958 feat(core): add network constraints schema to requirements.toml @viyatb-oai
- #10983 app-server: treat null mode developer instructions as built-in defaults @charley-oai
- #11039 feat: include state of [experimental_network] in /debug-config output @bolinfest
- #11040 Simplify pre-connect @pakrym-oai
- #10966 feat: enable premessage-deflate for websockets @apanasenko-oai
- #9040 fix(tui): rehydrate drafts and restore image placeholders @Chriss4123
- #10824 Fallback to HTTP on UPGRADE_REQUIRED @pakrym-oai
- #11028 Defer persistence of rollout file @etraut-openai
- #10980 fix: remove config.schema.json from tag check @bolinfest
- #11051 Gate view_image tool by model input_modalities @wiltzius-openai
- #11109 [bazel] Upgrade some rulesets in preparation for enabling windows @zbarsky-openai
- #11114 chore: refactor network-proxy so that ConfigReloader is injectable behavior @bolinfest
- #10718 Upgrade rmcp to 0.14 @mzeng-openai
- #11044 feat: include [experimental_network] in <environment_context> @bolinfest
- #10994 [apps] Improve app loading. @mzeng-openai
- #11121 chore: reverse the codex-network-proxy -> codex-core dependency @bolinfest
- #11105 feat: include NetworkConfig through ExecParams @bolinfest
- #11155 tui: avoid no-op status-line redraws @rakan-oai
- #10799 feat: do not close unified exec processes across turns @jif-oai
- #11172 chore: enable shell snapshot @jif-oai
- #11175 fix: do not show closed agents in
/agent@jif-oai - #11173 chore: enable sub agents @jif-oai
- #11193 Deflake mixed parallel tools timing test @gt-oai
- #10770 Load requirements on windows @gt-oai
- #11132 core: account for all post-response items in auto-compact token checks @charley-oai
- #11198 tools: remove get_memory tool and tests @jif-oai
- #10937 Translate websocket errors @rasmusrygaard
- #11217 Fixed bug in file watcher that results in spurious skills update events and large log files @etraut-openai
- #11216 Move warmup to the task level @pakrym-oai
- #11203 Try to stop small helper methods @pakrym-oai
- #11197 [bazel] Upgrade some rulesets in preparation for enabling windows, part 2 @zbarsky-openai
- #11158 chore: remove network-proxy-cli crate @viyatb-oai
- #11230 Revert "chore: enable sub agents" @jif-oai
- #11123 TUI: fix request_user_input wrapping for long option labels @charley-oai
- #11133 core: add focused diagnostics for remote compaction overflows @charley-oai
- #10657 feat: search_tool @apanasenko-oai
- #11199 state: add memory consolidation lock primitives @jif-oai
- #10835 feat: extend skills/list to support additional roots. @xl-openai
- #10960 skill-creator: Remove invalid reference. @xl-openai
- #11219 feat: use a notify instead of grace to close ue process @jif-oai
- #11231 feat: tie shell snapshot to cwd @jif-oai
- #10962 fix(tui): keep unified exec summary on working line @joshka-oai
- #11232 Add originator to otel metadata tags @alexsong-oai
- #11237 adding image support for gif and webp @natea-oai
- #10924 [apps] Add gated instructions for Apps. @mzeng-openai
- #11228 Use longest remote model prefix matching @aibrahim-oai
- #11242 fix(feature) UnderDevelopment feature must be off @dylan-hurd-oai
- #11185 fix: nix build by adding missing dependencies and fix outputHashes @Philipp-M
- #10035 fix(tui): tab submits when no task running in steer mode @joshka-oai
- #11238 Remove offline fallback for models @aibrahim-oai
- #9739 Update models.json @github-actions
- #11255 Revert "Update models.json" @aibrahim-oai
- #11245 deflake linux-sandbox NoNewPrivs timeout @joshka-oai
- #11256 Revert "Revert "Update models.json"" @aibrahim-oai
- #11262 chore: change ConfigState so it no longer depends on a single config.toml file for reloading @bolinfest
- #11263 test: deflake nextest child-process leak in MCP harnesses @joshka-oai
- #11247 Adjust shell command timeouts for Windows @dylan-hurd-oai
- #11240 fix(app-server): for external auth, replace id_token with chatgpt_acc… @owenlin0
- #11140 chore(deps): bump insta from 1.46.2 to 1.46.3 in /codex-rs @dependabot
- #11139 chore(deps): bump anyhow from 1.0.100 to 1.0.101 in /codex-rs @dependabot
- #11138 chore(deps): bump regex from 1.12.2 to 1.12.3 in /codex-rs @dependabot
- #11239 Disable dynamic model refresh for custom model providers @etraut-openai
- #11269 feat: reserve loopback ephemeral listeners for managed proxy @bolinfest
- #11279 [apps] Add thread_id param to optionally load thread config for apps feature check. @mzeng-openai
- #11244 feat: add SkillPolicy to skill metadata and support allow_implicit_invocation @alexsong-oai
- #10215 chore(tui) cleanup /approvals @dylan-hurd-oai
- #11113 feat(sandbox): enforce proxy-aware network routing in sandbox @viyatb-oai
- #10940 feat: support configurable metric_exporter @alexsong-oai
- #11294 chore: put crypto provider logic in a shared crate @bolinfest
- #11207 feat: retain NetworkProxy, when appropriate @bolinfest
- #11200 memories: add extraction and prompt module foundation @jif-oai
- #11191 feat: add connector capabilities to sub-agents @jif-oai
- #11304 Fix spawn_agent input type @jif-oai
- #11300 feat: align memory phase 1 and make it stronger @jif-oai
- #11311 Extract hooks into dedicated crate @jif-oai
- #11306 feat: phase 2 consolidation @jif-oai
- #11318 chore: split NPM packages @jif-oai
- #11322 Fix pending input test waiting logic @jif-oai
- #11265 Remove ApiPrompt @pakrym-oai
- #11295 tui: keep history recall cursor at line end @joshka-oai
- #11288 fix(protocol): approval policy never prompt @fouad-openai
- #11323 Revert "Add app-server transport layer with websocket support (#10693)" @maxj-oai
- #11162 Fix: update parallel tool call exec approval to approve on request id @shijie-oai
- #11249 [apps] Improve app installation flow. @mzeng-openai
- #11319 feat: opt-out of events in the app-server @jif-oai
- #11241 Treat first rollout session_meta as canonical thread identity @guinness-oai
- #11339 # Use
@openai/codexdist-tags for platform binaries instead of separate package names @bolinfest - #11330 test(core): stabilize ARM bazel remote-model and parallelism tests @dylan-hurd-oai
- #11345 core: remove stale apply_patch SandboxPolicy TODO in seatbelt @bolinfest
- #11343 Compare full request for websockets incrementality @pakrym-oai
- #11344 fix: reduce usage of
open_if_present@jif-oai - #11336 Always expose view_image and return unsupported image-input error @aibrahim-oai
- #11346 Sanitize MCP image output for text-only models @aibrahim-oai
- #11337 Extract tool building @pakrym-oai
- #10941 fix(core): canonicalize wrapper approvals and support heredoc prefix … @viyatb-oai
- #10946 include sandbox (seatbelt, elevated, etc.) as in turn metadata header @iceweasel-oai
- #11349 Strip unsupported images from prompt history to guard against model switch @aibrahim-oai
- #11348 Use thin LTO for alpha Rust release builds @bolinfest
- #11334 chore: unify memory job flow @jif-oai
- #11364 feat: mem v2 - PR1 @jif-oai
- #11365 feat: mem v2 - PR2 @jif-oai
- #11366 feat: mem v2 - PR3 @jif-oai
- #11274 Update models.json @github-actions
- #11361 # Split command parsing/safety out of
codex-coreinto newcodex-command@bolinfest - #11369 feat: mem v2 - PR4 @jif-oai
- #11362 Enable SOCKS defaults for common local network proxy use cases @viyatb-oai
- #11359 ci: fall back to local Bazel on forks without BuildBuddy key @joshka-oai
- #11372 feat: mem v2 - PR5 @jif-oai
- #11374 feat: mem v2 - PR6 (consolidation) @jif-oai
- #11377 feat: prevent double backfill @jif-oai
- #11378 chore: rename codex-command to codex-shell-command @bolinfest
- #11376 Update models.json @github-actions
- #11394 Disable very flaky tests @pakrym-oai
- #11386 Prefer websocket transport when model opts in @pakrym-oai
- #11373 tui: queue non-pending rollback trims in app-event order @charley-oai
- #11393 Remove
deterministic_process_idsfeature to avoid duplicatecodex-corebuilds @bolinfest - #11397 fix(exec-policy) No empty command lists @dylan-hurd-oai