Codex CLI Release: 0.117.0
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 /title terminal-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_image now 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)
tui_app_server no longer duplicates live reasoning summaries or /review output, and it preserves transcript text instead of dropping it under backpressure. (#15758, #15839, #15759)
ChatGPT login in tui_app_server now opens the local browser again, cancels cleanly on Ctrl+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)
thread.run(...) quickstart flow. (#15089, #14533, #15344, #15088)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_file and grep_files handlers as part of ongoing tool-surface cleanup. (#15851, #15864, #15773, #15775)
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
#15125 Move environment abstraction into exec server @pakrym-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
#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
#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
#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
#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
#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
#15338 fix: fall back to vendored bubblewrap when system bwrap lacks --argv0 @bolinfest
#15279 Label plugins as plugins, and hide skills/apps for given plugin @canvrno-oai
#15259 tui: queue follow-ups during manual /compact @charley-oai
#15357 Fix: proactive auth refresh to reload guarded disk state first @celia-oai
#15342 Plugins TUI install/uninstall @canvrno-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
#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
#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
#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
#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
#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
#15519 fix(core): default approval behavior for mcp missing annotations @fouad-openai
#15710 Use AbsolutePathBuf for cwd state @pakrym-oai
#15758 fix(tui): avoid duplicate live reasoning summaries @fcoury
#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 hc plan 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
#15812 core: remove special execve handling for skill scripts @bolinfest
#15829 [plugins] Update the suggestable plugins list. @mzeng-openai
#15839 Fix duplicate /review messages in app-server TUI @etraut-openai
#15805 Add MCP connector metrics @nicholasclark-openai
#15661 Enable tui_app_server feature 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
#15860 feat(tui): add terminal title support to tui app server @fcoury
#15885 [mcp] Fix legacy_tools @mzeng-openai
Fetched April 16, 2026