New Features
- Plugins are now a first-class workflow: Codex can sync product-scoped plugins at startup, browse them in
/plugins, and install or remove them with clearer auth/setup handling. (#15041, #15042, #15195, #15215, #15217, #15264, #15275, #15342, #15580, #15606, #15802) - Sub-agents now use readable path-based addresses like
/root/agent_a, with structured inter-agent messaging and agent listing for multi-agent v2 workflows. (#15313, #15515, #15556, #15570, #15621, #15647) - The
/titleterminal-title picker now works in both the classic TUI and the app-server TUI, making parallel sessions easier to tell apart. (#12334, #15860) - App-server clients can now send
!shell commands, watch filesystem changes, and connect to remote websocket servers with bearer-token auth. (#14988, #14533, #14847, #14853) - Image workflows got smoother:
view_imagenow returns image URLs for code mode, generated images are reopenable from the TUI, and image-generation history survives resume. (#15072, #15154, #15223) - Prompt history recall now works in the app-server TUI, including across sessions. (#14945)
Bug Fixes
tui_app_serverno longer duplicates live reasoning summaries or/reviewoutput, and it preserves transcript text instead of dropping it under backpressure. (#15758, #15839, #15759)- ChatGPT login in
tui_app_servernow opens the local browser again, cancels cleanly onCtrl+C, and no longer fails startup when you're logged out. (#15672, #15673, #15670) - Early exits now restore terminal state reliably, avoiding broken shell state after quitting; tmux users also get a working queued-message edit shortcut on
Shift+Left. (#15671, #15480) - Linux sandboxed tool calls are more reliable on older distributions with older
bubblewrap, and Windows restricted-token sandboxing now supports more split-policy carveout layouts. (#15693, #14172) - Remote multi-agent sessions now show agent names instead of raw IDs and recover more gracefully from stale turn-steering races. (#15513, #15714, #15163)
- Plugin-backed mentions and product gating now behave more predictably, fixing cases where explicit mentions lost context or plugins were filtered incorrectly. (#15372, #15263, #15279)
Documentation
- Expanded the app-server and exec-server docs/schema fixtures to cover exec-server setup, filesystem watch RPCs, realtime transcript notifications, and the new Python
thread.run(...)quickstart flow. (#15089, #14533, #15344, #15088)
Chores
- The app-server-backed TUI is now enabled by default, and the plugin/app rollout flags have been flipped on in normal builds. (#15661, #15713, #15719, #15820)
- Removed the legacy artifact tool and retired the old
read_fileandgrep_fileshandlers as part of ongoing tool-surface cleanup. (#15851, #15864, #15773, #15775)
Changelog
Full Changelog: rust-v0.116.0...rust-v0.117.0
- #14945 feat(tui): restore composer history in app-server tui @fcoury
- #15092 fix: try to fix "Stage npm package" step in ci.yml @bolinfest
- #15075 Propagate tool errors to code mode @pakrym-oai
- #15072 Return image URL from view_image tool @pakrym-oai
- #15076 Add a startup deprecation warning for custom prompts @etraut-openai
- #15102 Revert "fix: harden plugin feature gating" @xl-openai
- #15077 Add final message prefix to realtime handoff output @aibrahim-oai
- #13494 Align SQLite feedback logs with feedback formatter @charley-oai
- #14888 Feat: reuse persisted model and reasoning effort on thread resume @shijie-oai
- #15111 don't add transcript for v2 realtime @aibrahim-oai
- #15103 Add update_plan code mode result @pakrym-oai
- #15100 Add apply_patch code mode result @pakrym-oai
- #15104 fix: harden plugin feature gating @xl-openai
- #15089 Add exec-server stub server and protocol docs @starr-openai
- #15042 Support featured plugins @alexsong-oai
- #15088 Add Python SDK thread.run convenience methods @shaqayeq-oai
- #15119 Remove stdio transport from exec server @pakrym-oai
- #14632 feat(core, tracing): create turn spans over websockets @owenlin0
- #15011 Forward session and turn headers to MCP HTTP requests @nicholasclark-openai
- #15118 [hooks] turn_id extension for Stop & UserPromptSubmit @eternal-openai
- #14970 Simple directory mentions @canvrno-oai
- #14988 Add thread/shellCommand to app server API surface @etraut-openai
- #15041 feat: support product-scoped plugins. @xl-openai
- #15056 feat: add graph representation of agent network @jif-oai
- #15163 fix: case where agent is already closed @jif-oai
- #15125 Move environment abstraction into exec server @pakrym-oai
- #15180 chore: add metrics for profile @jif-oai
- #15175 chore: morpheus does not generate memories @jif-oai
- #15185 Revert "Forward session and turn headers to MCP HTTP requests" @nicholasclark-openai
- #14867 [hooks] use a user message > developer message for prompt continuation @eternal-openai
- #15196 Add experimental exec server URL handling @pakrym-oai
- #15198 Publish runnable DotSlash package for argument-comment lint @bolinfest
- #15090 Add exec-server process and filesystem RPCs @starr-openai
- #15201 Log automated reviewer approval sources distinctly @gabec-openai
- #12334 feat(tui): add /title terminal title configuration @yvolovich-cyber
- #15206 feat(tracing): tag app-server turn spans with turn_id @owenlin0
- #15216 Move terminal module to terminal-detection crate @aibrahim-oai
- #15207 add specific tool guidance for Windows destructive commands @iceweasel-oai
- #15154 adding full imagepath to tui @won-openai
- #15217 feat: expose needs_auth for plugin/read. @xl-openai
- #15190 Plumb MCP turn metadata through _meta @nicholasclark-openai
- #15220 feat(app-server): add mcpServer/startupStatus/updated notification @owenlin0
- #15222 changed save directory to codex_home @won-openai
- #15232 Refactor ExecServer filesystem split between local and remote @pakrym-oai
- #15021 V8 Bazel Build @cconger
- #15150 Move auth code into login crate @aibrahim-oai
- #15195 [plugins] Install MCPs when calling plugin/install @mzeng-openai
- #15254 core: add a full-buffer exec capture policy @bolinfest
- #15263 fix: Distinguish missing and empty plugin products @xl-openai
- #15253 Split features into codex-features crate @aibrahim-oai
- #15233 Split exec process into local and remote implementations @starr-openai
- #15199 Use released DotSlash package for argument-comment lint @bolinfest
- #15215 Initial plugins TUI menu - list and read only. tui + tui_app_server @canvrno-oai
- #15252 Disable hooks on windows for now @eternal-openai
- #15264 feat: Add One-Time Startup Remote Plugin Sync @xl-openai
- #15262 Add guardian follow-up reminder @charley-oai
- #15223 Feat/restore image generation history @won-openai
- #15275 feat: prefer git for curated plugin sync @xl-openai
- #14869 Add remote env CI matrix and integration test @pakrym-oai
- #15218 Add temporary app-server originator fallback for codex-tui @etraut-openai
- #15328 try to fix bazel @jif-oai
- #15324 Add remote test skill @pakrym-oai
- #15313 feat: change multi-agent to use path-like system instead of uuids @jif-oai
- #15244 Pin Python SDK app-server stdio to UTF-8 on Windows @shaqayeq-oai
- #15337 Bump aws-lc-rs @cconger
- #15203 Add v8-poc consumer of our new built v8 @cconger
- #15273 [apps] Use ARC for yolo mode. @mzeng-openai
- #15128 chore(core) Remove Feature::PowershellUtf8 @dylan-hurd-oai
- #15344 Add realtime transcript notification in v2 @aibrahim-oai
- #15285 Gate tui /plugins menu behind flag @canvrno-oai
- #15114 fix: allow restricted filesystem profiles to read helper executables @celia-oai
- #15231 chore(core) update prefix_rule guidance @dylan-hurd-oai
- #15036 fix(core) disable command_might_be_dangerous when unsandboxed @dylan-hurd-oai
- #15348 Pass platform param to featured plugins @alexsong-oai
- #15276 Code mode on v8 @cconger
- #15372 [plugins] Fix plugin explicit mention context management. @mzeng-openai
- #15366 chore(context) Include guardian approval context @dylan-hurd-oai
- #15390 Remove legacy app-server notification handling from tui_app_server @etraut-openai
- #15409 Add JIT entitlement for macosx @cconger
- #15414 Remove legacy auth and notification handling from tui_app_server @etraut-openai
- #15376 [apps] Improve app tools loading for TUI. @mzeng-openai
- #15415 chore(exec_policy) ExecPolicyRequirementScenario tests @dylan-hurd-oai
- #15464 Remove smart_approvals alias migration @charley-oai
- #15443 core: snapshot fork startup context injection @charley-oai
- #15480 Use Shift+Left to edit queued messages in tmux @charley-oai
- #15317 nit: guard -> registry @jif-oai
- #15338 fix: fall back to vendored bubblewrap when system bwrap lacks --argv0 @bolinfest
- #15520 fix: cargo deny @jif-oai
- #15279 Label plugins as plugins, and hide skills/apps for given plugin @canvrno-oai
- #15259 tui: queue follow-ups during manual /compact @charley-oai
- #15515 feat: structured multi-agent output @jif-oai
- #15357 Fix: proactive auth refresh to reload guarded disk state first @celia-oai
- #15342 Plugins TUI install/uninstall @canvrno-oai
- #15540 chore: split sub-agent v2 implementation @jif-oai
- #15516 Thread guardian Responses API errors into denial rationale @charley-oai
- #15378 feat: support disable skills by name. @xl-openai
- #15529 Unify realtime stop handling in TUI @aibrahim-oai
- #15557 fix: main tui @jif-oai
- #15556 feat: new op type for sub-agents communication @jif-oai
- #15211 [hooks] add non-streaming (non-stdin style) shell-only PreToolUse support @eternal-openai
- #15560 feat: use serde to differenciate inter agent communication @jif-oai
- #15426 chore(core) Add approvals reviewer to UserTurn @dylan-hurd-oai
- #15562 [codex] Add rollback context duplication snapshot @charley-oai
- #15570 feat: custom watcher for multi-agent v2 @jif-oai
- #15575 feat: custom watcher for multi-agent v2 @jif-oai
- #15576 feat: custom watcher for multi-agent v2 @jif-oai
- #15360 fix: build PATH env var using OsString instead of String @bolinfest
- #15239 Add fork snapshot modes @charley-oai
- #15554 Add plugin-creator as system skill @alexsong-oai
- #15592 Extract landlock helpers into codex-sandboxing @pakrym-oai
- #15593 Move macOS sandbox builders into codex-sandboxing @pakrym-oai
- #15478 [codex-cli][app-server] Update self-serve business usage limit copy in error returned @dhruvgupta-oai
- #15600 move imagegen skill into system skills @dkundel-openai
- #15599 Move sandbox policy transforms into codex-sandboxing @pakrym-oai
- #15580 Remove filter from plugins/list result @canvrno-oai
- #15581 Stabilize macOS CI test timeouts @dylan-hurd-oai
- #15613 nit: split v2 wait @jif-oai
- #15614 fix: flaky test @jif-oai
- #15621 feat: list agents for sub-agent v2 @jif-oai
- #15623 nit: optim on list agents @jif-oai
- #15549 Allow global network allowlist wildcard @rreichel3-oai
- #15424 Finish moving codex exec to app-server @etraut-openai
- #15603 Extract sandbox manager and transforms into codex-sandboxing @pakrym-oai
- #15484 chore(deps): bump pnpm/action-setup from 4 to 5 @dependabot
- #14777 Bump vedantmgoyal9/winget-releaser from 19e706d4c9121098010096f9c495a70a7518b30f to 7bd472be23763def6e16bd06cc8b1cdfab0e2fd5 @dependabot
- #15558 [Codex TUI] - Sort /plugins TUI menu by installed status first, alpha second @canvrno-oai
- #15598 Refresh mentions list after plugin install/uninstall @canvrno-oai
- #15624 feat: disable notifier v2 and start turn on agent interaction @jif-oai
- #15605 [codex] Stabilize compact resume and fork snapshot flaky tests @charley-oai
- #15658 try to fix git glitch @jif-oai
- #15657 try to fix git glitch @jif-oai
- #15656 try to fix git glitch @jif-oai
- #15655 try to fix git glitch @jif-oai
- #15654 try to fix git glitch @jif-oai
- #15653 try to fix git glitch @jif-oai
- #15652 try to fix git glitch @jif-oai
- #15651 try to fix git glitch @jif-oai
- #15650 try to fix git glitch @jif-oai
- #15606 Pretty plugin labels, preserve plugin app provenance during MCP tool refresh @canvrno-oai
- #15579 Increase voice space hold timeout to 1s @aibrahim-oai
- #15093 core: Make FileWatcher reusable @euroelessar
- #15547 app-server: Add back pressure and batching to
command/exec@euroelessar - #15647 feat: communication pattern v2 @jif-oai
- #15438 feat: include marketplace loading error in plugin/list @xl-openai
- #15545 chore: use access token expiration for proactive auth refresh @celia-oai
- #15530 chore: stop app-server auth refresh storms after permanent token failure @celia-oai
- #15577 Trim pre-turn context updates during rollback @charley-oai
- #15660 Hide numeric prefixes on disabled TUI list rows @canvrno-oai
- #15644 fix: keep zsh-fork release assets after removing shell-tool-mcp @bolinfest
- #15670 tui_app_server: tolerate missing rate limits while logged out @etraut-openai
- #15564 Move git utilities into a dedicated crate @aibrahim-oai
- #15669 Clean up TUI /plugins row allignment @canvrno-oai
- #15671 tui: always restore the terminal on early exit @etraut-openai
- #15672 tui_app_server: open ChatGPT login in the local browser @etraut-openai
- #15673 tui_app_server: cancel active login before Ctrl+C exit @etraut-openai
- #15676 Tweak /plugin menu wording @canvrno-oai
- #15666 Suppress plugin-install MCP OAuth URL console spam @canvrno-oai
- #15573 [plugins] Additional gating for tool suggest and apps. @mzeng-openai
- #15665 Drop sandbox_permissions from sandbox exec requests @pakrym-oai
- #15572 Move string truncation helpers into codex-utils-string @aibrahim-oai
- #14533 app-server: add filesystem watch support @euroelessar
- #15674 Use delayed shimmer for plugin loading headers in tui and tui_app_server @canvrno-oai
- #15689 app-server: Return codex home in initialize response @euroelessar
- #15363 fix: keep rmcp-client env vars as OsString @bolinfest
- #15700 Remove provenance filtering in $mentions for apps and skills from plugins @canvrno-oai
- #15692 Add legal link to TUI /plugin details @canvrno-oai
- #15351 Expand ~ in MDM workspace write roots @evawong-oai
- #15548 Extract rollout into its own crate @aibrahim-oai
- #15699 [codex] Defer fork context injection until first turn @charley-oai
- #15601 [app-server] Add a method to override feature flags. @mzeng-openai
- #15708 TUI plugin menu cleanup - hide app ID @canvrno-oai
- #15677 Fix stale quickstart integration assertion @shaqayeq-oai
- #15713 [plugins] Flip the flags. @mzeng-openai
- #15719 [plugins] Flip on additional flags. @mzeng-openai
- #14172 fix: support split carveouts in windows restricted-token sandbox @viyatb-oai
- #15714 Fix stale turn steering fallback in tui_app_server @etraut-openai
- #15722 [plugins] Add a flag for tool search. @mzeng-openai
- #15734 Update plugin creator skill. @xl-openai
- #15766 chore: tty metric @jif-oai
- #15519 fix(core): default approval behavior for mcp missing annotations @fouad-openai
- #15775 chore: remove grep_files handler @jif-oai
- #15710 Use AbsolutePathBuf for cwd state @pakrym-oai
- #15778 feat: rendering library v1 @jif-oai
- #15758 fix(tui): avoid duplicate live reasoning summaries @fcoury
- #15773 chore: remove read_file handler @jif-oai
- #15776 feat: add multi-thread log query @jif-oai
- #15744 Extract codex-instructions crate @aibrahim-oai
- #15339 Add non-interactive resume filter option @nornagon-openai
- #15746 Extract codex-utils-plugins crate @aibrahim-oai
- #15747 Extract codex-plugin crate @aibrahim-oai
- #15748 Extract codex-analytics crate @aibrahim-oai
- #15707 Clarify codex_home base for MDM path resolution @evawong-oai
- #15513 fix(tui_app_server): fix remote subagent switching and agent names @fcoury
- #14856 [apps][tool_suggest] Remove tool_suggest's dependency on tool search. @mzeng-openai
- #14847 feat: add websocket auth for app-server @viyatb-oai
- #15759 fix(tui_app_server): preserve transcript events under backpressure @fcoury
- #15749 Extract codex-core-skills crate @aibrahim-oai
- #15798 Avoid duplicate auth refreshes in
getAuthStatus@etraut-openai - #15659 Add MCP tool call spans @nicholasclark-openai
- #15789 Treat ChatGPT
hcplan as Enterprise @arnavdugar-openai - #15802 TUI plugin menu polish @canvrno-oai
- #15785 Add cached environment manager for exec server URL @pakrym-oai
- #15806 Add ReloadUserConfig to tui_app_server @canvrno-oai
- #15810 app-server: Organize app-server to allow more transports @euroelessar
- #15800 [mcp] Improve custom MCP elicitation @mzeng-openai
- #15531 [hooks] add non-streaming (non-stdin style) shell-only PostToolUse support @eternal-openai
- #15820 [plugins] Flip flags on. @mzeng-openai
- #15825 Fix quoted command rendering in tui_app_server @etraut-openai
- #14853 Wire remote app-server auth through the client @etraut-openai
- #15817 Expand home-relative paths on Windows @tiffanycitra
- #15693 fix: fix old system bubblewrap compatibility without falling back to vendored bwrap @viyatb-oai
- #15784 feat: replace askama by custom lib @jif-oai
- #15851 feat: drop artifact tool and feature @jif-oai
- #15861 feat: clean spawn v1 @jif-oai
- #15691 feat: exec-server prep for unified exec @jif-oai
- #15864 chore: drop artifacts lib @jif-oai
- #15812 core: remove special execve handling for skill scripts @bolinfest
- #15869 fix: flaky @jif-oai
- #15877 chore: ask agents md not to play with PIDs @jif-oai
- #15866 feat: use
ProcessIdinexec-server@jif-oai - #15829 [plugins] Update the suggestable plugins list. @mzeng-openai
- #15880 fix: max depth agent still has v2 tools @jif-oai
- #15839 Fix duplicate /review messages in app-server TUI @etraut-openai
- #15805 Add MCP connector metrics @nicholasclark-openai
- #15661 Enable
tui_app_serverfeature by default @etraut-openai - #15835 fix: box apply_patch test harness futures @bolinfest
- #15796 [codex] Block unsafe git global options from safe allowlist @adrian-openai
- #15813 Add wildcard in the middle test coverage @evawong-oai
- #15881 fix: root as std agent @jif-oai
- #15860 feat(tui): add terminal title support to tui app server @fcoury
- #15885 [mcp] Fix legacy_tools @mzeng-openai