New Features
codex doctornow reports richer environment, Git, terminal, app-server, and thread inventory diagnostics for support cases. (#24261, [#24311], [#24305])/statusshows remote connection details and server version when the TUI is connected over a remote transport. (#24420)- Vim mode gained text-object editing, improved word/line-end behavior, and a configurable interrupt-turn binding. (#24382, [#24380], [#24766])
/permissionsnow understands named permission profiles and displays configured custom profiles. (#21559)- Packaged Codex builds can discover and use the bundled patched zsh helper across supported macOS and Linux targets. (#23756, [#24171])
- The Python SDK now exposes friendly
Sandboxpresets for thread and turn APIs. (#24772)
Bug Fixes
- Markdown tables and multiline lists render more readably in the TUI, with better column sizing and app-style table formatting. (#24489, [#24346], [#24351])
- TUI output is more stable on macOS and Zellij, avoiding stderr/composer corruption and raw-output overlap. (#24459, [#24479], [#24593])
- Slash-command completion now preserves existing draft text for commands that accept inline arguments. (#23950)
- Older tmux/iTerm control-mode sessions no longer lose normal
Ctrl-Chandling from unsupported keyboard enhancement setup. (#24371) - App mentions now exclude inaccessible or disabled apps instead of offering unusable
$suggestions. (#24625) - Resume flows now include non-interactive exec sessions when requested and honor cwd overrides for idle cached threads. (#24503, [#24528])
Documentation
- Clarified image-viewing tool detail behavior and removed stale TUI composer documentation references. (#23949, [#24641])
- Updated Python SDK docs, examples, and notebook content to use the new sandbox preset API. (#24772)
Chores
- Updated Rust toolchain pins and SQLx/SQLite dependencies. (#24684, [#24728])
- Moved memory runtime state into a dedicated SQLite database. (#24591)
- Removed remaining legacy config-profile consumers and routed more TUI config/plugin state through app-server-owned APIs. (#24076, [#24254], [#24255], [#24265], [#24266], [#24257])
- Centralized Responses retry handling and MCP tool naming logic to reduce duplicated internal plumbing. (#24131, [#21576])
Changelog
Full Changelog: https://github.com/openai/codex/compare/rust-v0.134.0...rust-v0.135.0
- [#24164] fix(remote-control): cap reconnect backoff @apanasenko-oai
- [#23756] package: include zsh fork in Codex package @bolinfest
- [#23757] Default function tools into tool hooks @abhinav-oai
- [#24171] package: add x64 macOS codex-zsh artifact @bolinfest
- [#24159] code-mode: merge stored values by key @cconger
- [#23983] fix: plugin bundle archive handling for upload and install @xl-openai
- [#24261] feat(doctor): add environment diagnostics @fcoury-oai
- [#24311] Report app-server version in codex doctor @etraut-openai
- [#24314] tui: label compact rate-limit percentages @etraut-openai
- [#24420] Show remote connection details in /status @etraut-openai
- [#24317] Respect hook trust bypass during TUI startup @etraut-openai
- [#24254] TUI config cleanup: oss_provider @etraut-openai
- [#24255] TUI config cleanup: trusted projects @etraut-openai
- [#24265] TUI config cleanup: MCP inventory @etraut-openai
- [#24305] Add doctor thread inventory audit @etraut-openai
- [#24346] fix(tui): improve markdown table column allocation @fcoury-oai
- [#24351] fix(tui): improve multiline markdown list readability @fcoury-oai
- [#24459] fix(tui): prevent macos stderr from corrupting composer @fcoury-oai
- [#24479] fix(process-hardening): preserve macos malloc diagnostics @fcoury-oai
- [#24474] Log rollout writer OS errors @etraut-openai
- [#24076] chore: stop consuming legacy config profiles @jif-oai
- [#24131] centralize Responses retry policy @rhan-oai
- [#23858] [wip] goal shift @jif-oai
- [#24555] chore: drop orphaned codex memories MCP crate @jif-oai
- [#24558] chore: move memory prompt builder into extension @jif-oai
- [#24562] Add ad-hoc memory note tool @jif-oai
- [#24567] Wire metrics client into memories extension @jif-oai
- [#24588] fix: drop flake @jif-oai
- [#24583] Add memory tool call metrics to memories extension @jif-oai
- [#24586] Wire app-server extension event sink @jif-oai
- [#24532] Use thread config for TUI MCP inventory @etraut-openai
- [#24105] [codex] Make active turn task singular @pakrym-oai
- [#21576] Move MCP tool naming mode into manager @pakrym-oai
- [#24503] tui: include exec sessions in resume list @etraut-openai
- [#24600] feat: gate dedicated memories tools in config @jif-oai
- [#21559] tui: add named permission profile picker @viyatb-oai
- [#24608] feat: add manual and remote_v2 tags to compaction metric @jif-oai
- [#24611] test: clean up apply_patch allow-session artifact @jif-oai
- [#24609] Remove reserved namespaces dedup @pakrym-oai
- [#23964] Move slash input logic out of chat composer @canvrno-oai
- [#24615] Add goal extension telemetry parity @jif-oai
- [#24371] fix(tui): avoid modifyOtherKeys for unknown tmux formats @fcoury-oai
- [#24626] fix: restore goal accounting after thread resume @jif-oai
- [#24591] Move memory state to a dedicated SQLite DB @jif-oai
- [#23823] standalone websearch extension @sayan-oai
- [#24593] fix(tui): keep raw output above composer in zellij @fcoury-oai
- [#24625] tui: keep inaccessible apps out of mentions @canvrno-oai
- [#24154] Add experimental turn additional context @pakrym-oai
- [#24473] fix(remote-control): surface websocket task stalls @apanasenko-oai
- [#24528] Respect resume cwd overrides for idle cached threads @etraut-openai
- [#24160] Add forked_from_thread_id turn metadata @owenlin0
- [#24646] make direct only allowed caller for standalone websearch @sayan-oai
- [#23949] Clarify view_image tool description @fjord-oai
- [#24266] TUI config cleanup: plugin mentions @etraut-openai
- [#24320] Avoid repeated marketplace upgrades for alternate layouts @etraut-openai
- [#23813] windows-sandbox: remove SandboxPolicy runner plumbing @bolinfest
- [#24652] [codex] remove plain image wrapper spans @pakrym-oai
- [#24623] Attach Windows sandbox log to feedback reports @iceweasel-oai
- [#24644] Restore legacy image detail values @rhan-oai
- [#24655] [codex-analytics] add grouped session id to runtime events @marksteinbrick-oai
- [#24658] [codex] Remove obsolete goal continuation turn marker @pakrym-oai
- [#24660] fix: dont compact standalone websearch schema @sayan-oai
- [#24667] fix(core): instrument stalled tool-listing handoff @apanasenko-oai
- [#24684] Uprev Rust toolchain pins to 1.95.0 @anp-oai
- [#21567] fix: add noninteractive install script mode @efrazer-oai
- [#24707] Allow runtime enablement for remote plugins @xl-openai
- [#24714] fix(auto-review) skip legacy notify for auto review threads @dylan-hurd-oai
- [#24690] Revert "Add Bedrock Mantle GovCloud region (#23860)" @celia-oai
- [#24628] feat: handle goal usage limits in goal extension @jif-oai
- [#24746] Fix guardian review test user input @jif-oai
- [#24744] feat: add thread idle lifecycle hook @jif-oai
- [#24751] Drop startup context when truncating forked rollouts @jif-oai
- [#24257] TUI config cleanup: plugin marketplace @etraut-openai
- [#24380] fix(tui): complete vim word-end and line-end behavior @fcoury-oai
- [#24728] Bump SQLx to pick up newer bundled SQLite @jif-oai
- [#24637] fix: run standalone updates noninteractively @efrazer-oai
- [#24778] make vercel webhook url an env secret @sayan-oai
- [#23950] fix: Preserve draft text when completing argument-taking slash commands @canvrno-oai
- [#24641] [codex] Remove stale composer narrative doc references @canvrno-oai
- [#24368] [codex] add compaction metadata to turn headers @ningyi-oai
- [#24772] [codex] Add friendly Python SDK sandbox presets @aibrahim-oai
- [#24382] feat(tui): add vim text object bindings @fcoury-oai
- [#24766] feat(tui): make turn interruption keybind configurable @fcoury-oai
- [#24489] feat(tui): render markdown tables in app style [1 of 2] @fcoury-oai
- [#24713] chore: enable namespace tools for Bedrock @celia-oai