- Added collaboration modes and presets to streamline multi-agent workflows. (#9340, #9421) - Added device-code auth as a standalone fallback in headless environments. (#9333) - Introduced a request-user-input tool for explicit agent prompts. (#9472) - Enabled remote models and auto-enable WebSockets transport for smoother connectivity. (#9554, #9578) ## Bug Fixes - Load configs from trusted folders only and fix symlinked `config.toml` resolution. (#9533, #9445) - Fixed Azure endpoint invalid input errors. (#9387) - Resolved a memory leak in core runtime. (#9543) - Prevented interrupted turns from repeating. (#9043) - Fixed WSL TUI image paste regression. (#9473) ## Documentation - Updated MCP documentation link to the current destination. (#9490) - Corrected a “Multi-agents” naming typo in docs. (#9542) - Added developer instructions for collaboration modes. (#9424) ## Chores - Upgraded to Rust 1.92 and refreshed core Rust dependencies. (#8860, #9465, #9466, #9467, #9468, #9469) ## Changelog Full Changelog: https://github.com/openai/codex/compare/rust-v0.87.0...rust-v0.88.0 - #9373 fix: flaky tests @jif-oai - #9333 [device-auth] Add device code auth as a standalone option when headless environment is detected. @mzeng-openai - #9352 Made `codex exec resume --last` consistent with `codex resume --last` @etraut-openai - #9324 add codex cloud list @nornagon-openai - #9332 Turn-state sticky routing per turn @aibrahim-oai - #9364 feat: tool call duration metric @jif-oai - #8860 chore: upgrade to Rust 1.92.0 @viyatb-oai - #9385 feat: /fork the current session instead of opening session picker @apanasenko-oai - #9247 feat(app-server, core): return threads by created_at or updated_at @owenlin0 - #9330 feat: show forked from session id in /status @apanasenko-oai - #9340 Introduce collaboration modes @aibrahim-oai - #9328 Support enable/disable skill via config/api. @xl-openai - #9408 Add collaboration_mode override to turns @aibrahim-oai - #9400 fix(codex-api): treat invalid_prompt as non-retryable @fouad-openai - #9401 Defer backtrack trim until rollback confirms @aibrahim-oai - #9414 fix unified_exec::tests::unified_exec_timeouts to use a more unique match value @ahornby - #9421 Expose collaboration presets @aibrahim-oai - #9422 chore(core) Create instructions module @dylan-hurd-oai - #9423 chore(instructions) Remove unread SessionMeta.instructions field @dylan-hurd-oai - #9424 Add collaboration developer instructions @aibrahim-oai - #9425 Preserve slash command order in search @aibrahim-oai - #9059 tui: allow forward navigation in backtrack preview @slkzgm - #9443 Add collaboration modes test prompts @aibrahim-oai - #9457 fix(tui2): running /mcp was not printing any output until another event triggered a flush @bolinfest - #9445 Fixed symlink support for config.toml @etraut-openai - #9466 chore(deps): bump log from 0.4.28 to 0.4.29 in /codex-rs @dependabot - #9467 chore(deps): bump tokio from 1.48.0 to 1.49.0 in /codex-rs @dependabot - #9468 chore(deps): bump arc-swap from 1.7.1 to 1.8.0 in /codex-rs @dependabot - #9469 chore(deps): bump ctor from 0.5.0 to 0.6.3 in /codex-rs @dependabot - #9465 chore(deps): bump chrono from 0.4.42 to 0.4.43 in /codex-rs @dependabot - #9473 Fixed TUI regression related to image paste in WSL @etraut-openai - #9382 feat: timer total turn metrics @jif-oai - #9478 feat: close all threads in `/new` @jif-oai - #9477 feat: detach non-tty childs @jif-oai - #9479 prompt 3 @jif-oai - #9387 Fix invalid input error on Azure endpoint @etraut-openai - #9463 Remove unused protocol collaboration mode prompts @aibrahim-oai - #9487 chore: warning metric @jif-oai - #9490 Fixed stale link to MCP documentation @etraut-openai - #9461 TUI: collaboration mode UX + always submit `UserTurn` when enabled @aibrahim-oai - #9472 Feat: request user input tool @shijie-oai - #9402 Act on reasoning-included per turn @aibrahim-oai - #9496 chore: fix beta VS experimental @jif-oai - #9495 Feat: plan mode prompt update @shijie-oai - #9451 tui: avoid Esc interrupt when skill popup active @prateek-oai - #9497 Migrate tui to use UserTurn @aibrahim-oai - #9427 fix(core) Preserve base_instructions in SessionMeta @dylan-hurd-oai - #9393 Persist text elements through TUI input and history @charley-oai - #9407 fix(tui) fix user message light mode background @dylan-hurd-oai - #9525 chore: collab in experimental @jif-oai - #9374 nit: do not render terminal interactions if no task running @jif-oai - #9529 feat: record timer with additional tags @jif-oai - #9528 feat: metrics on remote models @jif-oai - #9527 feat: metrics on shell snapshot @jif-oai - #9533 Only load config from trusted folders @gt-oai - #9409 feat: support proxy for ws connection @apanasenko-oai - #9507 Tui: use collaboration mode instead of model and effort @aibrahim-oai - #9193 fix: `writable_roots` doesn't recognize home directory symbol in non-windows OS @tiffanycitra - #9542 Fix typo in feature name from 'Mult-agents' to 'Multi-agents' @simonw - #9459 feat(personality) introduce model_personality config @dylan-hurd-oai - #9543 fix: memory leak issue @jif-oai - #9509 Fixed config merging issue with profiles @etraut-openai - #9043 fix: prevent repeating interrupted turns @swordfish444 - #9553 fix(core): don't update the file's mtime on resume @owenlin0 - #9552 lookup system SIDs instead of hardcoding English strings. @iceweasel-oai - #9314 fix(windows-sandbox): deny .git file entries under writable roots @MaxMiksa - #9319 fix(windows-sandbox): parse PATH list entries for audit roots @MaxMiksa - #9547 merge remote models @aibrahim-oai - #9545 Add total (non-partial) TextElement placeholder accessors @charley-oai - #9532 fix(cli): add execute permission to bin/codex.js @zerone0x - #9162 Improve UI spacing for queued messages @charley-oai - #9554 Enable remote models @aibrahim-oai - #9558 queue only when task is working @aibrahim-oai - #8590 fix(core): require approval for force delete on Windows @hdcodedev - #9293 [codex-tui] exit when terminal is dumb @jmickey-oai - #9562 feat(tui2): add /experimental menu @joshka-oai - #9563 fix: bminor/bash is no longer on GitHub so use bolinfest/bash instead @bolinfest - #9568 Show session header before configuration @aibrahim-oai - #9555 feat: rename experimental_instructions_file to model_instructions_file @bolinfest - #9518 Prompt Expansion: Preserve Text Elements @charley-oai - #9560 Reject ask user question tool in Execute and Custom @charley-oai - #9575 feat: add skill injected counter metric @alexsong-oai - #9578 Feature to auto-enable websockets transport @pakrym-oai - #9587 fix CI by running pnpm @aibrahim-oai - #9586 don't ask for approval for `just fix` @aibrahim-oai - #9585 Add request-user-input overlay @aibrahim-oai - #9596 fix going up and down on questions after writing notes @aibrahim-oai - #9483 feat: max threads config @jif-oai - #9598 feat: display raw command on user shell @jif-oai - #9594 Added "codex." prefix to "conversation.turn.count" metric name @etraut-openai - #9600 feat: async shell snapshot @jif-oai - #9602 fix: nit tui on terminal interactions @jif-oai - #9551 nit: better collab tui @jif-oai
Codex CLI (Rust Implementation)
We provide Codex CLI as a standalone, native executable to ensure a zero-dependency install.
Installing Codex
Today, the easiest way to install Codex is via npm:
npm i -g @openai/codex
codex
You can also install via Homebrew (brew install --cask codex) or download a platform-specific release directly from our GitHub Releases.
Documentation quickstart
- First run with Codex? Start with
docs/getting-started.md(links to the walkthrough for prompts, keyboard shortcuts, and session management). - Want deeper control? See
docs/config.mdanddocs/install.md.
What's new in the Rust CLI
The Rust implementation is now the maintained Codex CLI and serves as the default experience. It includes a number of features that the legacy TypeScript CLI never supported.
Config
Codex supports a rich set of configuration options. Note that the Rust CLI uses config.toml instead of config.json. See docs/config.md for details.
Model Context Protocol Support
MCP client
Codex CLI functions as an MCP client that allows the Codex CLI and IDE extension to connect to MCP servers on startup. See the configuration documentation for details.
MCP server (experimental)
Codex can be launched as an MCP server by running codex mcp-server. This allows other MCP clients to use Codex as a tool for another agent.
Use the @modelcontextprotocol/inspector to try it out:
npx @modelcontextprotocol/inspector codex mcp-server
Use codex mcp to add/list/get/remove MCP server launchers defined in config.toml, and codex mcp-server to run the MCP server directly.
Notifications
You can enable notifications by configuring a script that is run whenever the agent finishes a turn. The notify documentation includes a detailed example that explains how to get desktop notifications via terminal-notifier on macOS. When Codex detects that it is running under WSL 2 inside Windows Terminal (WT_SESSION is set), the TUI automatically falls back to native Windows toast notifications so approval prompts and completed turns surface even though Windows Terminal does not implement OSC 9.
codex exec to run Codex programmatically/non-interactively
To run Codex non-interactively, run codex exec PROMPT (you can also pass the prompt via stdin) and Codex will work on your task until it decides that it is done and exits. Output is printed to the terminal directly. You can set the RUST_LOG environment variable to see more about what's going on.
Experimenting with the Codex Sandbox
To test to see what happens when a command is run under the sandbox provided by Codex, we provide the following subcommands in Codex CLI:
# macOS
codex sandbox macos [--full-auto] [--log-denials] [COMMAND]...
# Linux
codex sandbox linux [--full-auto] [COMMAND]...
# Windows
codex sandbox windows [--full-auto] [COMMAND]...
# Legacy aliases
codex debug seatbelt [--full-auto] [--log-denials] [COMMAND]...
codex debug landlock [--full-auto] [COMMAND]...
Selecting a sandbox policy via --sandbox
The Rust CLI exposes a dedicated --sandbox (-s) flag that lets you pick the sandbox policy without having to reach for the generic -c/--config option:
# Run Codex with the default, read-only sandbox
codex --sandbox read-only
# Allow the agent to write within the current workspace while still blocking network access
codex --sandbox workspace-write
# Danger! Disable sandboxing entirely (only do this if you are already running in a container or other isolated env)
codex --sandbox danger-full-access
The same setting can be persisted in ~/.codex/config.toml via the top-level sandbox_mode = "MODE" key, e.g. sandbox_mode = "workspace-write".
Code Organization
This folder is the root of a Cargo workspace. It contains quite a bit of experimental code, but here are the key crates:
core/contains the business logic for Codex. Ultimately, we hope this to be a library crate that is generally useful for building other Rust/native applications that use Codex.exec/"headless" CLI for use in automation.tui/CLI that launches a fullscreen TUI built with Ratatui.cli/CLI multitool that provides the aforementioned CLIs via subcommands.