New Features
- App-server TUI now supports device-code ChatGPT sign-in during onboarding and can refresh existing ChatGPT tokens. (#14952)
- Plugin setup is smoother: Codex can prompt to install missing plugins or connectors, honor a configured suggestion allowlist, and sync install/uninstall state remotely. (#14896, [#15022], [#14878])
- Added a
userpromptsubmithook so prompts can be blocked or augmented before execution and before they enter history. (#14626) - Realtime sessions now start with recent thread context and are less likely to self-interrupt during audio playback. (#14829, [#14827])
Bug Fixes
- Fixed a first-turn stall where websocket prewarm could delay
turn/start; startup now times out and falls back cleanly. (#14838) - Restored conversation history for remote resume/fork in the app-server TUI and stopped duplicate live transcript output from legacy stream events. (#14930, [#14892])
- Improved Linux sandbox startup on symlinked checkouts, missing writable roots, and Ubuntu/AppArmor hosts by preferring system
bwrapwhen available. (#14849, [#14890], [#14963]) - Fixed an agent job finalization race and reduced status polling churn for worker threads. (#14843)
Documentation
- Refreshed the Python SDK public API docs, examples, and walkthrough around the generated app-server models. (#14446)
Chores
- Pinned the
setup-zigGitHub Action to an immutable SHA for more reproducible CI. (#14858)
Changelog
Full Changelog: https://github.com/openai/codex/compare/rust-v0.115.0...rust-v0.116.0
- [#14717] Move TUI on top of app server (parallel code) @etraut-openai
- [#14665] Use request permission profile in app server @mousseau-oai
- [#14826] Fixed build failures related to PR 14717 @etraut-openai
- [#14833] fix(core): fix sanitize name to use '_' everywhere @apanasenko-oai
- [#14268] memories: exclude AGENTS and skills from stage1 input @andi-oai
- [#14139] windows-sandbox: add runner IPC foundation for future unified_exec @iceweasel-oai
- [#14851] Add exit helper to code mode scripts @pakrym-oai
- [#14828] [stack 1/4] Split realtime websocket methods by version @aibrahim-oai
- [#14652] Apply argument comment lint across codex-rs @bolinfest
- [#14837] skill-creator: default new skills to ~/.codex/skills @xl-openai
- [#14861] Add marketplace display names to plugin/list @xl-openai
- [#14878] feat: support remote_sync for plugin install/uninstall. @xl-openai
- [#14830] [stack 2/4] Align main realtime v2 wire and runtime flow @aibrahim-oai
- [#14886] fix: align marketplace display name with existing interface conventions @xl-openai
- [#14881] [codex] add Jason as a predefined subagent name @tibo-openai
- [#14864] fix: tighten up shell arg quoting in GitHub workflows @bolinfest
- [#14829] [stack 3/4] Add current thread context to realtime startup @aibrahim-oai
- [#14827] [stack 4/4] Reduce realtime self-interruptions during playback @aibrahim-oai
- [#14849] fix: canonicalize symlinked Linux sandbox cwd @viyatb-oai
- [#14892] Fix tui_app_server: ignore duplicate legacy stream events @etraut-openai
- [#14899] Revert tui code so it does not rely on in-process app server @etraut-openai
- [#14890] fix(linux-sandbox): ignore missing writable roots @viyatb-oai
- [#14920] feat: centralize package manager version @jif-oai
- [#14935] feat: rename to get more explicit close agent @jif-oai
- [#14843] Fix agent jobs finalization race and reduce status polling churn @daveaitel-openai
- [#14944] feat: show effective model in spawn agent event @jif-oai
- [#14838] fix(core): prevent hanging turn/start due to websocket warming issues @owenlin0
- [#14859] Feat: CXA-1831 Persist latest model and reasoning effort in sqlite @shijie-oai
- [#14930] fix(tui): restore remote resume and fork history @fcoury
- [#14955] Fix fuzzy search notification buffering in app-server tests @aibrahim-oai
- [#14938] feat: add suffix to shell snapshot name @jif-oai
- [#14959] Fix code mode yield startup race @aibrahim-oai
- [#14434] generate an internal json schema for
RolloutLine@keyz - [#14846] use framed IPC for elevated command runner @iceweasel-oai
- [#14952] Add device-code onboarding and ChatGPT token refresh to app-server TUI @etraut-openai
- [#14896] [plugins] Support plugin installation elicitation. @mzeng-openai
- [#14958] Stabilize Windows cmd-based shell test harnesses @aibrahim-oai
- [#14966] Stabilize permissions popup selection tests @aibrahim-oai
- [#14968] Stabilize approval matrix write-file command @aibrahim-oai
- [#14986] temporarily disable private desktop until it works with elevated IPC path @iceweasel-oai
- [#14983] Rename exec_wait tool to wait @pakrym-oai
- [#14905] Add auth env observability @ccy-oai
- [#14931] fix(tui): implement /mcp inventory for tui_app_server @fcoury
- [#14977] Cleanup skills/remote/xxx endpoints. @xl-openai
- [#14984] Gate realtime audio interruption logic to v2 @aibrahim-oai
- [#14902] Unify realtime shutdown in core @aibrahim-oai
- [#14963] fix(linux-sandbox): prefer system /usr/bin/bwrap when available @viyatb-oai
- [#14446] Add Python SDK public API and examples @shaqayeq-oai
- [#14993] feat: Add product-aware plugin policies and clean up manifest naming @xl-openai
- [#14995] app-server: reject websocket requests with Origin headers @maxj-oai
- [#14960] Add FS abstraction and use in view_image @pakrym-oai
- [#14293] fix: honor active permission profiles in sandbox debug @viyatb-oai
- [#14610] feat: support restricted ReadOnlyAccess in elevated Windows sandbox @viyatb-oai
- [#13592] Prefer websockets when providers support them @pakrym-oai
- [#14903] Handle realtime conversation end in the TUI @aibrahim-oai
- [#14727] Use workspace requirements for guardian prompt override @charley-oai
- [#14626] [hooks] userpromptsubmit - hook before user's prompt is executed @eternal-openai
- [#14858] Pin setup-zig GitHub Action to immutable SHA @viyatb-oai
- [#13702] fix(subagents) share execpolicy by default @dylan-hurd-oai
- [#15022] [plugins] Support configuration tool suggest allowlist. @mzeng-openai
- [#14947] feat: adapt artifacts to new packaging and 2.5.6 @jif-oai
- [#14821] feat: add memory citation to agent message @jif-oai
- [#15058] nit: disable live memory edition @jif-oai
- [#14942] Removed remaining core events from tui_app_server @etraut-openai
- [#15059] chore: disable memory read path for morpheus @jif-oai
- [#14842] Add notify to code-mode @pakrym-oai
- [#15020] fix: harden plugin feature gating @xl-openai