0.36.0
Breaking change: OPENAI_API_KEY
is no longer read from the environment
API login is no longer implicit; we do not pick up OPENAI_API_KEY
from the environment. To use an API key programmatically, run the following once:
codex login --api-key "your-api-key-here"
and this value will be stored in CODEX_HOME/auth.json
.
The next time you run codex
, the API key stored in auth.json
will be used automatically.
To switch to ChatGPT login instead of using your API key, run codex login
.
Note that codex logout
will remove whatever login credential is stored in auth.json
(API key or ChatGPT auth token).
Highlights
Introducing our newest model GPT-5-Codex
GPT-5-Codex works faster through easy tasks and harder on complex tasks, improves on code quality, and is more steerable with AGENTS.md. Learn More
Resuming old sessions
Resuming old conversations with codex resume
(#3537, #3625).
Unified execution and reliability
Unified execution improvements (#3288, #3479) and race-condition fix (#3644); include command output on timeouts (#3576); do not execute when command parses as a patch (#3382); improved sandbox timeout handling (#3435); flaky test fixes (#3596, #3564).
Auth and login experience
- login polish (#3632); fix issue allowing to be both logged in and using API key simultaneously (#3611); fix stray login URL characters (#3639); fix
get_auth_status
for custom providers (#3581).
JSON-RPC and MCP
JSON-RPC: SetDefaultModel
and None
clears default (#3512, #3529), UserInfo
(#3428), reasoning_effort
in NewConversationResponse
(#3506); initial MCP interface and docs (#3543, #3507, #3345); standardized shell description (#3514).
TUI onboarding and polish
New onboarding flow and animation (#3398, #3631, #3590, #3627), consistent headers on resume (#3615, #3592), improved spacing/padding (#3469, #3471, #3472, #3474), clearer interruption and status styling (#3470), numerous UX nits addressed (#3650, #3534).
Core platform
Experimental automatic context compaction (#3446); expanded default sandbox (#3483); Azure Responses API workaround (#3528); preserve more item IDs in Azure (#3542); logging and clippy improvements (#3488, #3489); just test
via nextest (#3508).
All merged PRs
- fix: change MIN_ANIMATION_HEIGHT so show_animation is calculated correctly (#3656)
- feat: tweak onboarding strings (#3650)
- fix stray login url characters persisting in login (#3639)
- Add file reference guidelines to gpt-5 prompt (#3651)
- feat: skip animations on small terminals (#3647)
- chore: rename (#3648)
- fix: add references (#3633)
- chore: set
prerelease:true
for now (#3645) - fix: race condition unified exec (#3644)
- feat: update splash (#3631)
- chore(deps): bump tracing-subscriber from 0.3.19 to 0.3.20 in /codex-rs (#3620)
- chore(deps): bump slab from 0.4.10 to 0.4.11 in /codex-rs (#3635)
- Login flow polish (#3632)
- Fix codex resume so flags (cd, model, search, etc.) still work (#3625)
- feat: tighten preset filter, tame storage load logs, enable rollout prompt by default (#3628)
- Show abort in the resume (#3629)
- Change animation frames (#3627)
- initial mcp add interface (#3543)
- chore: update prompts for gpt-5-code (#3624)
- feat: add reasoning level to header (#3622)
- Revert "refactor transcript view to handle HistoryCells" (#3614)
- Show the header when resuming a conversation (#3615)
- When logging in using ChatGPT, make sure to overwrite API key (#3611)
- Don't show the model for apikey (#3607)
- Fix get_auth_status response when using custom provider (#3581)
- fix: model family and apply_patch consistency (#3603)
- fix(tui): update full-auto to default preset (#3608)
- fix(core): flaky test
completed_commands_do_not_persist_sessions
(#3596) - Skip frames files in codespell (#3606)
- Add session header to chat widget (#3592)
- Append full raw reasoning event text (#3605)
- feat: UI animation (#3590)
- Fix EventMsg Optional (#3604)
- Single branch for gpt-5-code (#3601)
- enable-resume (#3537)
- feat: update model save (#3589)
- Fix flaky windows test (#3564)
- Fix gpt-5-code model selector (#3598)
- Add per-model-family prompts (#3597)
- Include command output when sending timeout to model (#3576)
- Align user history message prefix width (#3467)
- Gate model upgrade prompt behind ChatGPT auth (#3586)
- chore: update
output_lines()
to take a struct instead of bools (#3591) - Add spacing before queued status indicator messages (#3474)
- Handle resuming/forking after compact (#3533)
- refactor transcript view to handle HistoryCells (#3538)
- Default gpt-5-code models to experimental reasoning summaries (#3560)
- Preserve IDs for more item types in azure (#3542)
- Always request encrypted cot (#3539)
- Review Mode (Core) (#3401)
- fix: NIT None reasoning effort (#3536)
- Fix NUX UI (#3534)
- core: expand default sandbox (#3483)
- Add Azure Responses API workaround (#3528)
- if a command parses as a patch, do not attempt to run it (#3382)
- Update interruption error message styling (#3470)
- feat: context compaction (#3446)
- Add spacing before composer footer hints (#3469)
- Add spacing between dropdown headers and items (#3472)
- feat: reasoning effort as optional (#3527)
- feat: change the behavior of SetDefaultModel RPC so None clears the value. (#3529)
- standardize shell description (#3514)
- bug: fix model save (#3525)
- Add spacing to timer duration formats (#3471)
- MCP Documentation Changes Requests in Code Review (#3507)
- chore: add
just test
, which runscargo nextest
(#3508) - feat: added SetDefaultModel to JSON-RPC server (#3512)
- feat: include reasoning_effort in NewConversationResponse (#3506)
- add(readme): IDE (#3494)
- Log cf-ray header in client traces (#3488)
- bug: default to image (#3501)
- feat: TUI onboarding (#3398)
- Use PlanType enum when formatting usage-limit CTA (#3495)
- Add more detailed documentation on MCP server usage (#3345)
- fix: improve
handle_sandbox_error
timeouts (#3435) - chore: enable
clippy::redundant_clone
(#3489) - Assign the entire gpt-5 model family same characteristics (#3490)
- Clear composer on fork (#3445)
- fix: use -F instead of -f for force=true in gh call (#3486)
- Add Compact and Turn Context to the rollout items (#3444)
- NIT unified exec (#3479)
- Simplify auth flow and reconcile differences between ChatGPT and API Key auth (#3189)
- apply-patch: sort replacements and add regression tests (#3425)
- chore: rust-release.yml should update the latest-alpha-cli branch (#3458)
- fix: add check to ensure output of
generate_mcp_types.py
matchescodex-rs/mcp-types/src/lib.rs
(#3450) - Change forking to read the rollout from file (#3440)
- Unified execution (#3288)
- feat: add UserInfo request to JSON-RPC server (#3428)
- fix: ensure output of
codex-rs/mcp-types/generate_mcp_types.py
matchescodex-rs/mcp-types/src/lib.rs
(#3439) - fix trampling projects table when accepting trusted dirs (#3434)
- put workspace roots in the environment context (#3375)