New Features
- The Python SDK now supports first-class authentication, including API key login, ChatGPT browser and device-code flows, account inspection, and logout APIs. (#23093)
- Python turn APIs are easier to use for text-only workflows: you can pass a plain string as input, and handle-based runs now return a richer
TurnResultwith collected items, timing, and usage data. (#23151, [#23162]) codex exec resumenow accepts--output-schema, so resumed automations can keep session context while still enforcing structured JSON output. (#23123)- TUI startup is faster because terminal capability probes are now batched instead of waiting on several serial checks before the first interactive frame. (#23175)
- Remote executor registration can now use standard Codex auth instead of a separate registry credential flow. (#22769)
- App-server turns can preserve requested image fidelity, including original-resolution local images, across user inputs and image-producing tools. (#20693)
Bug Fixes
- Goal continuations now stop when they hit usage limits or a repeated blocker instead of looping and burning more tokens, and completion responses phrase usage more naturally. (#23094, [#22907])
- The session picker is easier to trust: renamed threads now show
name (thread-id)in resume hints, and pasted text works in the picker search box. (#23234, [#23338]) - Multi-session TUI flows are more reliable: in-progress MCP calls stay marked as active during replay, and elicitation replies are sent back to the thread that requested them. (#23236, [#23241])
- Remote sessions now keep websocket connections alive and show repo-relative diff paths again instead of
/tmp/...-prefixed paths. (#23226, [#23261]) - Windows installs are more robust:
codex doctornow detects npm-managed installs correctly, and MSVC release binaries no longer depend on separately installed VC++ runtime DLLs. (#22967, [#22905]) - TUI polish fixes include immediate shutdown feedback on exit, hiding the ChatGPT usage link for non-OpenAI providers, and keeping a cleared Fast tier from reappearing after side-thread resume. (#23323, [#23127], [#23121])
Documentation
- The Python SDK docs, FAQ, and examples were refreshed around the new auth flow and turn APIs, with clearer setup guidance and simpler text-only examples. (#22941, [#23093], [#23151], [#23162])
Chores
- Memory summaries are now versioned and rebuilt when the stored format is stale, which should keep long-lived memory context leaner and more predictable. (#23148)
Changelog
Full Changelog: https://github.com/openai/codex/compare/rust-v0.131.0...rust-v0.132.0
- [#20693] Preserve image detail in app-server inputs @fjord-oai
- [#22891] tui: pass active permission profiles through app commands @bolinfest
- [#22924] app-server-protocol: remove PermissionProfile from API @bolinfest
- [#22941] [codex] Refine Python SDK user-facing docs @aibrahim-oai
- [#22967] Fix Windows doctor npm root probe @etraut-openai
- [#22920] core: set permission profiles from snapshots @bolinfest
- [#22939] [codex] Split Python SDK helper logic @aibrahim-oai
- [#22907] Improve goal completion usage reporting @etraut-openai
- [#23030] test: construct permission profiles directly @bolinfest
- [#22769] exec-server: support auth-backed remote executor registration @miz-openai
- [#22946] [codex] preserve MCP result meta in McpToolCallItemResult @miaolin-oai
- [#23069] multiagent: trim model-visible description, cap to 5 models @sayan-oai
- [#22913] [1 of 4] tui: route primary settings writes through app server @etraut-openai
- [#23093] sdk/python: add first-class login support @aibrahim-oai
- [#23151] [codex] Return TurnResult from Python turn handles @aibrahim-oai
- [#23147] Make multi-agent v2 tool namespace configurable @jif-oai
- [#23036] test: reduce core sandbox policy test setup @bolinfest
- [#23162] [codex] Accept string input for Python turns @aibrahim-oai
- [#23226] Add exec-server websocket keepalive @starr-openai
- [#23148] Densify and version memory summaries @jif-oai
- [#22448] [codex] Add installed-plugin mention API @xli-oai
- [#23288] chore: goal ext skeleton @jif-oai
- [#23291] Make extension lifecycle hooks async @jif-oai
- [#23293] feat: add extension event sink capability @jif-oai
- [#23295] chore: isolate thread goal storage behind GoalStore @jif-oai
- [#23301] chore: goal resumed metrics @jif-oai
- [#23305] chore: make token usage async @jif-oai
- [#23306] Emit goal update events from goal extension tools @jif-oai
- [#23121] tui: keep cleared Fast tier from reappearing after side-thread resume @etraut-openai
- [#23123] Support --output-schema for exec resume @etraut-openai
- [#23128] Fix TUI stream cleanup after turn errors @etraut-openai
- [#23127] Hide ChatGPT usage link for non-OpenAI status @etraut-openai
- [#23175] [1 of 2] Optimize TUI startup terminal probes @etraut-openai
- [#22706] [codex] Remove legacy shell output formatting paths @pakrym-oai
- [#23332] nit: read prompt @jif-oai
- [#22905] windows: link MSVC release binaries with static CRT @iceweasel-oai
- [#23323] fix(tui): show shutdown feedback on exit @fcoury-oai
- [#23261] Fix remote turn diff display roots @starr-openai
- [#22569] Simplify legacy Windows sandbox ACL persistence @iceweasel-oai
- [#23273] Upload rust full CI JUnit reports @starr-openai
- [#22893] fix: harden plugin creator sharing validation @efrazer-oai
- [#23094] goal: pause continuation loops on usage limits and blockers @etraut-openai
- [#23234] Clarify resume hints for renamed threads @etraut-openai
- [#23241] TUI: route elicitation responses to request thread @etraut-openai
- [#23236] TUI: replay in-progress MCP calls as started @etraut-openai
- [#23088] goals: keep pause transitions explicit @etraut-openai
- [#23338] feat(tui): handle paste in session picker @fcoury-oai
- [#23335] feat(app-server): add optional thread_id to experimentalFeature/list @owenlin0