New Features
- The TUI now supports modal Vim editing in the composer, including
/vim, default-mode config, and Vim-specific keymap contexts. (#18595) - TUI workflows are easier to resume and copy from with a redesigned resume/fork picker, raw scrollback mode,
/idecontext injection, and workspace-aware/diff. (#20065, [#20819], [#20294], [#21001]) - The status line can show theme-aware colors plus optional PR and branch-change summaries, and
/keymap debughelps inspect terminal key events. (#19631, [#20892], [#20794]) - Plugin management now supports workspace sharing, share access controls, source filtering, local share path tracking, marketplace removal/upgrades, remote bundle sync, and admin-disabled status handling. (#20278, [#21124], [#21419], [#20560], [#19843], [#20478], [#20268], [#20298])
- Hooks can be browsed and toggled from
/hooks, can run before/after compaction, and can addPreToolUsecontext; Codex Apps auth and eligible MCP elicitations now surface through TUI/Guardian flows. (#19882, [#19905], [#20692], [#19193], [#19431]) - Experimental goals are now discoverable, stay paused across resume unless the user opts back in, and show clearer validation and multi-day duration output. (#20083, [#20790], [#20746], [#20558])
Bug Fixes
/copyworks better in tmux, Alt+Enter and modified Delete/Backspace keys behave correctly, and Windows typing/paste latency was reduced. (#20207, [#20535], [#21058], [#18914])- Large paste placeholders and Ctrl+C-stashed drafts now survive clear/editor workflows without corrupting draft history. (#21091, [#21190], [#21351], [#21397])
- TUI startup and accessibility were tightened by bounding terminal probes, clearing the first inline viewport render, and honoring
animations = falsefor live rows. (#20654, [#21450], [#20564]) - Linux sandbox startup is more reliable across older
bwrap, slow mount probes, symlink-protected paths, and shared/tmpsetups. (#20628, [#20111], [#21127], [#21234]) - Windows sandbox and exec policy now handle named pipes, ConPTY teardown, PowerShell-wrapped allow rules, worktree
safe.directory, and unsafe Git options more reliably. (#20270, [#20685], [#20336], [#21409], [#21275]) - Fixed custom CA login behind TLS-inspecting proxies, Bedrock runtime endpoint reporting, dangerous project config keys, heredoc redirect approval matching, and unbounded MCP/hook output growth. (#20676, [#20275], [#20098], [#20113], [#20260], [#21069])
Documentation
- Updated the embedded OpenAI Docs sample skill so API-key setup guidance stays aligned with other docs variants. (#21263)
- Documented how generated git commit attribution is gated by
codex_git_commitand configured inconfig.toml. (#21379) - Removed local-only planning/spec docs and redirected config docs toward the maintained external documentation surface. (#20896)
Chores
- Linux releases now build, publish, bundle, and verify a standalone
bwrapfallback for npm and DotSlash installs. (#21255, [#21256], [#21257], [#21312], [#21285]) - Vendored Bubblewrap was updated to 0.11.2, including upstream security changes around setuid support. (#21389)
- Windows Bazel CI now uses faster cross-compilation for tests, clippy, and release-build checks, and Bazel now runs sharded Rust integration tests. (#20585, [#20701], [#21057])
- App-server and protocol internals were split and slimmed down, including transport extraction, protocol module decomposition, thread/message history moves, and tool-handler cleanup. (#20324, [#20325], [#20348], [#20545], [#21251], [#21278], [#21395])
- Analytics and diagnostics coverage expanded for tool lifecycles, goals, plugin skills, thread sources, service tiers, and PR issue labeling. (#17089, [#17090], [#20799], [#20923], [#20949], [#20969], [#20893])
Changelog
Full Changelog: https://github.com/openai/codex/compare/rust-v0.128.0...rust-v0.129.0
- [#20278] feat: Add workspace plugin sharing APIs @xl-openai
- [#20334] Make missing config clears no-ops @etraut-openai
- [#20246] Gate multi-agent v2 tools independently of collab @jif-oai
- [#20361] realtime: rename provider session ids @aibrahim-oai
- [#20260] fix(core): truncate large mcp tool outputs in rollouts @owenlin0
- [#20083] Mark goals feature as experimental @etraut-openai
- [#19843] /plugins: remove marketplace @canvrno-oai
- [#20458] [Extension] Allowlist Chrome Extension in the tool_suggest tool @teddywyly-oai
- [#20324] Remove core protocol dependency [1/2] @etraut-openai
- [#20299] Move item event mapping into app-server-protocol @pakrym-oai
- [#20325] Remove core protocol dependency [2/2] @etraut-openai
- [#20471] Stop emitting item/fileChange/outputDelta output delta notifications @pakrym-oai
- [#20245] [Codex] Add browser use external feature flag @khoi-oai
- [#19882] Add /hooks browser for lifecycle hooks @abhinav-oai
- [#20275] fix: show correct Bedrock runtime endpoint in /status @celia-oai
- [#20270] [codex] Fix elevated Windows sandbox named-pipe access @iceweasel-oai
- [#20463] feat(rollouts): store EventMsg::ApplyPatchEnd in limited history mode @owenlin0
- [#20101] install WFP filters for Windows sandbox setup @iceweasel-oai
- [#20474] [plugin] Add Canva to suggesteable list. @mzeng-openai
- [#20379] Send external import completion for sync imports @alexsong-oai
- [#19280] [codex] Migrate thread turns list to thread store @wiltzius-openai
- [#20348] Move plugin out of core. @xl-openai
- [#19160] Make apply_patch streaming parser stateful @akshaynathan
- [#20504] fix flaky test falls_back_to_registered_fallback_port_when_default_po… @owenlin0
- [#20098] fix: ignore dangerous project-level config keys @owenlin0
- [#20268] Sync remote installed plugin bundles @xli-oai
- [#20502] fix(tui): set persist_extended_history: false @owenlin0
- [#20069] Bypass review for always-allow MCP tools in auto-review @maja-openai
- [#18595] feat(tui): add vim composer mode @fcoury-oai
- [#20267] Emit analytics for remote plugin installs @xli-oai
- [#20499] fix(app-server): mark thread/turns/list and exclude_turns as experime… @owenlin0
- [#20522] Alias codex_hooks feature as hooks @abhinav-oai
- [#20336] execpolicy: unwrap PowerShell -Command wrappers on Windows @iceweasel-oai
- [#20113] fix(exec_policy) heredoc parsing file_redirect @dylan-hurd-oai
- [#20341] app-server: switch remote control to protocol v3 segmentation @euroelessar
- [#20300] [codex-analytics] centralize thread analytics state @rhan-oai
- [#20484] [codex] Improve PR babysitter CI diagnostics and guardrails @wiltzius-openai
- [#20298] Surface admin-disabled remote plugin status @xli-oai
- [#20511] [codex] Remove unused event messages @pakrym-oai
- [#19474] Make thread store process-scoped @wiltzius-openai
- [#20558] Format multi-day goal durations in the TUI @etraut-openai
- [#19631] Color TUI statusline from active theme @etraut-openai
- [#20265] Refresh remote plugin cache on auth changes @xli-oai
- [#20150] Add remote plugin skill read API @xli-oai
- [#20560] feat: Track local paths for shared plugins @xl-openai
- [#20600] chore: allow memories edition @jif-oai
- [#20602] feat: ad-hoc instructions @jif-oai
- [#20610] chore: improve remember prompt @jif-oai
- [#20606] feat: seed ad-hoc memory extension instructions @jif-oai
- [#20405] feat: export and replay effective config locks @jif-oai
- [#20540] Move apply-patch file changes into turn items @pakrym-oai
- [#20564] Enforce
animations = falsefor screen readers @etraut-openai - [#20523] Remove no-tool goal continuation suppression @etraut-openai
- [#20627] fix: cargo deny @jif-oai
- [#20545] app-server: move transport into dedicated crate @euroelessar
- [#20294] Add /ide context support to the TUI @etraut-openai
- [#20630] [codex] Add Codex environment config @pakrym-oai
- [#20524] deprecate legacy notify @abhinav-oai
- [#20486] [codex] Migrate loaded thread/read history to ThreadStore @wiltzius-openai
- [#20281] Use selected turn environments for runtime context @starr-openai
- [#20535] fix(tui): restore alt-enter newline alias @fcoury-oai
- [#20650] fix: reduce ConfigBuilder::build stack usage @jif-oai
- [#20478] /plugins: add marketplace upgrade flow @canvrno-oai
- [#20512] [codex] Emit image view as core item @pakrym-oai
- [#20562] Use the 2025-06-18 elicitation capability shape @abhinav-oai
- [#20674] Clear live hook rows when turns finalize @abhinav-oai
- [#20646] Surface multi-environment choices in environment context @starr-openai
- [#20542] Prune unused code-mode globals @cconger
- [#20585] ci: cross-compile Windows Bazel tests @bolinfest
- [#20701] ci: cross-compile Windows Bazel clippy @bolinfest
- [#20676] Fix custom CA login behind TLS-inspecting proxies @jgershen-oai
- [#20654] fix(tui): bound startup terminal probes @fcoury-oai
- [#20566] [tool_suggest] More prompt polishes. @mzeng-openai
- [#20751] Bound websocket request sends with idle timeout @pakrym-oai
- [#20893] [codex] Add issue labeler area labels @etraut-openai
- [#20896] Remove local docs and specs @etraut-openai
- [#20897] [codex] Refactor app-server dispatch result flow @pakrym-oai
- [#20677] [codex] Emit MCP tool calls as turn items @pakrym-oai
- [#20973] feat: support template interpolation in multi-agent usage hints @jif-oai
- [#20622] feat: memories mcp v1 @jif-oai
- [#20773] feat: add remote compaction v2 Responses client path @jif-oai
- [#20986] feat: add line offsets to memory read MCP @jif-oai
- [#20991] feat: add max_lines to memories MCP read @jif-oai
- [#20993] feat: paginate MCP memories list @jif-oai
- [#20994] feat: make memories MCP list shallow @jif-oai
- [#20996] feat: paginate memories MCP search results @jif-oai
- [#20997] feat: add context lines to memories MCP search @jif-oai
- [#20998] nit: renaming @jif-oai
- [#21004] feat: support multi-query memories search @jif-oai
- [#21006] nit: legacy @jif-oai
- [#20815] Speed up /side parent restore replay @etraut-openai
- [#20790] Keep paused goals paused on thread resume @etraut-openai
- [#20940] [codex] Split app-server request processors @pakrym-oai
- [#21023] typo @jif-oai
- [#21012] memories/mcp: generate tool schemas with schemars @jif-oai
- [#21010] memories-mcp: reject symlink traversal in local backend @jif-oai
- [#20989] core: share responses request builder with compact requests @jif-oai
- [#20853] [mcp-apps] Persist MCP Apps specific tool call end event. @mzeng-openai
- [#20750] Unify skip-review handling for approval_mode = "approve" @mzeng-openai
- [#20682] feat(app-server): always return limited thread history @owenlin0
- [#20628] fix(linux-sandbox): fall back when system bwrap lacks perms @viyatb-oai
- [#20794] feat(tui): add keymap debug inspector @fcoury-oai
- [#21034] tui: retire /approvals and rename /autoreview to /approve @won-openai
- [#20669] Prepare selected environment plumbing @starr-openai
- [#20685] Fix Windows PTY teardown by preserving ConPTY ownership @iceweasel-oai
- [#20663] Add stdio exec-server listener @starr-openai
- [#20561] state: pass state db handles through consumers @euroelessar
- [#21054] rollout: store web search and mcp tool calls @owenlin0
- [#20892] feat(tui): add PR summary statusline items @fcoury-oai
- [#20798] feat(tui): improve TUI keymap coverage @fcoury-oai
- [#21053] Use MCP server instructions in deferred namespace descriptions @sayan-oai
- [#21026] core: preserve last model ids in feedback tags @sayan-oai
- [#21060] core: fix apply_patch request permissions test @bolinfest
- [#20060] Add reasoning effort to turn tracing spans @charley-openai
- [#21058] fix(tui): support modified backspace/delete keys @fcoury-oai
- [#21057] bazel: run sharded rust integration tests @bolinfest
- [#18914] fix(tui): use shared paste burst interval on Windows @fcoury-oai
- [#20715] Make realtime sideband startup async @kmeelu-oai
- [#20514] [codex-analytics] add item lifecycle timing @rhan-oai
- [#20722] Remove remote plugin uninstall prefix gate @xli-oai
- [#19040] [codex] Add unsandboxed process exec API @euroelessar
- [#21105] [network-proxy] Cover DNS timeout blocking @evawong-oai
- [#21059] Rename agent identity login surface to access token @shijie-oai
- [#20576] codex: route metadata updates through ThreadStore @wiltzius-openai
- [#20923] Add plugin ID to skill analytics @alexsong-oai
- [#21122] Add turn_id to Codex skill invocation analytics @edwardysun3
- [#20575] codex: migrate (more) app-server thread history reads to ThreadStore @wiltzius-openai
- [#21069] Spill large hook outputs from context @abhinav-oai
- [#20969] 1- Add model service tiers metadata @aibrahim-oai
- [#21170] tools: remove unused experimental
list_dirtool @jif-oai - [#21201] memories-mcp: hide dot paths from list, read, and search @jif-oai
- [#21204] feat: support windowed multi-query memory search @jif-oai
- [#21205] feat: add normalized matching to memory search @jif-oai
- [#20207] fix(tui): make /copy work inside tmux without passthrough @fcoury-oai
- [#20799] Add goal lifecycle metrics @etraut-openai
- [#20746] Validate /goal objective length in TUI @etraut-openai
- [#20708] Add Windows sandbox readiness RPC @iceweasel-oai
- [#20692] Support PreToolUse additionalContext @abhinav-oai
- [#21091] [codex] Fix TUI large paste placeholder numbering after Ctrl+C @canvrno-oai
- [#21089] [codex] Fix fork --last cwd filtering @canvrno-oai
- [#21152] revert legacy notify deprecation @abhinav-oai
- [#21190] fix(tui): external editor expansion for same-size large pastes @fcoury-oai
- [#20111] fix(sandboxing): Bound advisory system bwrap startup probe @viyatb-oai
- [#21220] chore: add minimal proxy egress diagnostics @viyatb-oai
- [#20819] feat(tui): add raw scrollback mode @fcoury-oai
- [#21225] app-server: ignore persist_extended_history param @owenlin0
- [#17089] [codex-analytics] add tool item event schemas @rhan-oai
- [#20647] Route process tools to selected environments @starr-openai
- [#20321] hook trust metadata and enforcement @abhinav-oai
- [#21221] [codex] Use shared app-server JSON-RPC error helpers @pakrym-oai
- [#21063] add turn items view to app-server turns @rhan-oai
- [#21001] feat(tui): route /diff through workspace commands @fcoury-oai
- [#20065] feat(tui): redesign session picker @fcoury-oai
- [#21127] fix(linux-sandbox): avoid panic on bwrap build failures @viyatb-oai
- [#21234] fix(linux-sandbox): isolate Linux sandbox synthetic mount registry per user for shared codex use case @viyatb-oai
- [#20687] [codex] Split tool handlers by tool name @pakrym-oai
- [#21113] Auto-deny MCP elicitations for Xcode 26.4 clients @etraut-openai
- [#21243] [codex] fix TUI turn items view fixtures @fcoury-oai
- [#21146] Enable V8 sandboxing for source-built builds @cconger
- [#20689] Inject state DB, agent graph store @rasmusrygaard
- [#19575] Add cloud executor registration to exec-server @miz-openai
- [#20577] codex: use ThreadStore history for core review forks @wiltzius-openai
- [#21261] fix build @bolinfest
- [#21251] chore(app-server-protocol): split v2 API definitions into modules @owenlin0
- [#21259] ci: trigger rusty-v8 releases from tags @cconger
- [#21255] linux-sandbox: use standalone bundled bwrap @bolinfest
- [#21256] release: publish standalone bwrap artifacts @bolinfest
- [#21260] [codex] Move thread naming to app server @pakrym-oai
- [#21219] Add model and reasoning effort to MCP turn metadata @mchen-oai
- [#21275] Share Git safe-command logic on Windows @iceweasel-oai
- [#21257] release/npm: bundle standalone bwrap on Linux @bolinfest
- [#21276] [codex] Remove unused ListModels op @pakrym-oai
- [#21282] [codex] Remove legacy ListSkills op @pakrym-oai
- [#21271] Expose plugin manifest keywords in app server @alfozan
- [#20949] [codex-analytics] rework thread_source for thread analytics @rhan-oai
- [#21124] feat: Add plugin share access controls @xl-openai
- [#20724] app-server: align dynamic tool identifiers with Responses API @eternal-openai
- [#21055] Preserve session MCP config on refresh @aaronl-openai
- [#21277] [mcp] Return Accept early per feedback. @mzeng-openai
- [#21285] fix(bwrap): emit libcap after standalone archive @viyatb-oai
- [#21312] release: bundle bwrap with Linux codex DotSlash artifact @bolinfest
- [#19193] Support Codex Apps auth elicitations @mzeng-openai
- [#20437] feat: add
session_id@jif-oai - [#21328] test: isolate app-server-client in-process test state @jif-oai
- [#21329] feat: include thread ID in MCP turn metadata @jif-oai
- [#21332] feat: return session ID from thread/fork @jif-oai
- [#21337] Revert "feat: support template interpolation in multi-agent usage hints" @jif-oai
- [#21249] Propagate cache key and service tiers in compact @aibrahim-oai
- [#21182] Move installation ID resolution out of core startup @jif-oai
- [#21214] chore: spawn MCP for memories @jif-oai
- [#21336] feat(app-server): move v2
sessionIdontoThread@jif-oai - [#21350] [codex] fix builtin MCP Windows path test @jif-oai
- [#20971] 2- Use string service tiers in session protocol @aibrahim-oai
- [#21278] Move message history out of core @pakrym-oai
- [#21284] [codex] Add response.processed websocket request @pakrym-oai
- [#21367] rollout: coalesce thread updated_at touches @jif-oai
- [#21378] feat: move auto vaccum @jif-oai
- [#21263] [codex] Coordinate OpenAI docs sample with API key setup @mifan-oai
- [#21351] fix(tui): keep Ctrl-C stashed drafts after /clear @fcoury-oai
- [#21389] vendor: update bubblewrap to 0.11.2 @bolinfest
- [#21281] Remove core MCP list tools op @pakrym-oai
- [#21381] [codex] Handle git pagination flags by position @iceweasel-oai
- [#21397] fix(tui): persist ctrl-c draft via app event @fcoury-oai
- [#19431] Route opted-in MCP elicitations through Guardian @cd-oai
- [#21107] Avoid noisy OTEL diagnostics in codex exec @cpaasch-oai
- [#21390] Avoid hard-coded environment context shell @starr-openai
- [#21090] [codex] Dedupe fallback model metadata warnings @canvrno-oai
- [#21395] [codex] Split tool handlers into separate files @pakrym-oai
- [#21401] [codex-tui] pass thread source for tui threads @rhan-oai
- [#17090] [codex-analytics] emit tool item events from item lifecycle @rhan-oai
- [#21409] [codex] Fix Windows sandbox git safe.directory for worktrees @iceweasel-oai
- [#21379] Document Codex git commit attribution config @henzelmann-oai
- [#21287] Move skills watcher to app-server @pakrym-oai
- [#21416] [codex] Move tool specs into core handlers @pakrym-oai
- [#21419] feat: Add marketplace source filtering and plugin share context @xl-openai
- [#19905] Add compact lifecycle hooks (started by vincentkoc - external contrib) @eternal-openai
- [#21460] Revert "Move skills watcher to app-server" @pakrym-oai
- [#21450] fix(tui): clear first inline viewport render @fcoury-oai
- [#21427] [codex] Delete tool handler plan indirection @pakrym-oai
- [#21423] [codex] Add OpenAI Developers to tool suggest allowlist @mifan-oai
- [#21340] [codex] allow shared config reads in app-server queue @xli-oai
- [#21441] [codex] Parallelize skills list cwd loading @xli-oai
- [#21481] Revert state DB injection and agent graph store @pakrym-oai