- `codex doctor` now reports richer environment, Git, terminal, app-server, and thread inventory diagnostics for support cases. (#24261, #24311, #24305) - `/status` shows remote connection details and server version when the TUI is connected over a remote transport. (#24420) - Vim mode gained text-object editing, improved word/line-end behavior, and a configurable interrupt-turn binding. (#24382, #24380, #24766) - `/permissions` now understands named permission profiles and displays configured custom profiles. (#21559) - Packaged Codex builds can discover and use the bundled patched zsh helper across supported macOS and Linux targets. (#23756, #24171) - The Python SDK now exposes friendly `Sandbox` presets for thread and turn APIs. (#24772) ## Bug Fixes - Markdown tables and multiline lists render more readably in the TUI, with better column sizing and app-style table formatting. (#24489, #24346, #24351) - TUI output is more stable on macOS and Zellij, avoiding stderr/composer corruption and raw-output overlap. (#24459, #24479, #24593) - Slash-command completion now preserves existing draft text for commands that accept inline arguments. (#23950) - Older tmux/iTerm control-mode sessions no longer lose normal `Ctrl-C` handling from unsupported keyboard enhancement setup. (#24371) - App mentions now exclude inaccessible or disabled apps instead of offering unusable `$` suggestions. (#24625) - Resume flows now include non-interactive exec sessions when requested and honor cwd overrides for idle cached threads. (#24503, #24528) ## Documentation - Clarified image-viewing tool detail behavior and removed stale TUI composer documentation references. (#23949, #24641) - Updated Python SDK docs, examples, and notebook content to use the new sandbox preset API. (#24772) ## Chores - Updated Rust toolchain pins and SQLx/SQLite dependencies. (#24684, #24728) - Moved memory runtime state into a dedicated SQLite database. (#24591) - Removed remaining legacy config-profile consumers and routed more TUI config/plugin state through app-server-owned APIs. (#24076, #24254, #24255, #24265, #24266, #24257) - Centralized Responses retry handling and MCP tool naming logic to reduce duplicated internal plumbing. (#24131, #21576) ## Changelog Full Changelog: https://github.com/openai/codex/compare/rust-v0.134.0...rust-v0.135.0 - #24164 fix(remote-control): cap reconnect backoff @apanasenko-oai - #23756 package: include zsh fork in Codex package @bolinfest - #23757 Default function tools into tool hooks @abhinav-oai - #24171 package: add x64 macOS codex-zsh artifact @bolinfest - #24159 code-mode: merge stored values by key @cconger - #23983 fix: plugin bundle archive handling for upload and install @xl-openai - #24261 feat(doctor): add environment diagnostics @fcoury-oai - #24311 Report app-server version in codex doctor @etraut-openai - #24314 tui: label compact rate-limit percentages @etraut-openai - #24420 Show remote connection details in /status @etraut-openai - #24317 Respect hook trust bypass during TUI startup @etraut-openai - #24254 TUI config cleanup: oss_provider @etraut-openai - #24255 TUI config cleanup: trusted projects @etraut-openai - #24265 TUI config cleanup: MCP inventory @etraut-openai - #24305 Add doctor thread inventory audit @etraut-openai - #24346 fix(tui): improve markdown table column allocation @fcoury-oai - #24351 fix(tui): improve multiline markdown list readability @fcoury-oai - #24459 fix(tui): prevent macos stderr from corrupting composer @fcoury-oai - #24479 fix(process-hardening): preserve macos malloc diagnostics @fcoury-oai - #24474 Log rollout writer OS errors @etraut-openai - #24076 chore: stop consuming legacy config profiles @jif-oai - #24131 centralize Responses retry policy @rhan-oai - #23858 [wip] goal shift @jif-oai - #24555 chore: drop orphaned codex memories MCP crate @jif-oai - #24558 chore: move memory prompt builder into extension @jif-oai - #24562 Add ad-hoc memory note tool @jif-oai - #24567 Wire metrics client into memories extension @jif-oai - #24588 fix: drop flake @jif-oai - #24583 Add memory tool call metrics to memories extension @jif-oai - #24586 Wire app-server extension event sink @jif-oai - #24532 Use thread config for TUI MCP inventory @etraut-openai - #24105 [codex] Make active turn task singular @pakrym-oai - #21576 Move MCP tool naming mode into manager @pakrym-oai - #24503 tui: include exec sessions in resume list @etraut-openai - #24600 feat: gate dedicated memories tools in config @jif-oai - #21559 tui: add named permission profile picker @viyatb-oai - #24608 feat: add manual and remote_v2 tags to compaction metric @jif-oai - #24611 test: clean up apply_patch allow-session artifact @jif-oai - #24609 Remove reserved namespaces dedup @pakrym-oai - #23964 Move slash input logic out of chat composer @canvrno-oai - #24615 Add goal extension telemetry parity @jif-oai - #24371 fix(tui): avoid modifyOtherKeys for unknown tmux formats @fcoury-oai - #24626 fix: restore goal accounting after thread resume @jif-oai - #24591 Move memory state to a dedicated SQLite DB @jif-oai - #23823 standalone websearch extension @sayan-oai - #24593 fix(tui): keep raw output above composer in zellij @fcoury-oai - #24625 tui: keep inaccessible apps out of mentions @canvrno-oai - #24154 Add experimental turn additional context @pakrym-oai - #24473 fix(remote-control): surface websocket task stalls @apanasenko-oai - #24528 Respect resume cwd overrides for idle cached threads @etraut-openai - #24160 Add forked_from_thread_id turn metadata @owenlin0 - #24646 make direct only allowed caller for standalone websearch @sayan-oai - #23949 Clarify view_image tool description @fjord-oai - #24266 TUI config cleanup: plugin mentions @etraut-openai - #24320 Avoid repeated marketplace upgrades for alternate layouts @etraut-openai - #23813 windows-sandbox: remove SandboxPolicy runner plumbing @bolinfest - #24652 [codex] remove plain image wrapper spans @pakrym-oai - #24623 Attach Windows sandbox log to feedback reports @iceweasel-oai - #24644 Restore legacy image detail values @rhan-oai - #24655 [codex-analytics] add grouped session id to runtime events @marksteinbrick-oai - #24658 [codex] Remove obsolete goal continuation turn marker @pakrym-oai - #24660 fix: dont compact standalone websearch schema @sayan-oai - #24667 fix(core): instrument stalled tool-listing handoff @apanasenko-oai - #24684 Uprev Rust toolchain pins to 1.95.0 @anp-oai - #21567 fix: add noninteractive install script mode @efrazer-oai - #24707 Allow runtime enablement for remote plugins @xl-openai - #24714 fix(auto-review) skip legacy notify for auto review threads @dylan-hurd-oai - #24690 Revert "Add Bedrock Mantle GovCloud region (#23860)" @celia-oai - #24628 feat: handle goal usage limits in goal extension @jif-oai - #24746 Fix guardian review test user input @jif-oai - #24744 feat: add thread idle lifecycle hook @jif-oai - #24751 Drop startup context when truncating forked rollouts @jif-oai - #24257 TUI config cleanup: plugin marketplace @etraut-openai - #24380 fix(tui): complete vim word-end and line-end behavior @fcoury-oai - #24728 Bump SQLx to pick up newer bundled SQLite @jif-oai - #24637 fix: run standalone updates noninteractively @efrazer-oai - #24778 make vercel webhook url an env secret @sayan-oai - #23950 fix: Preserve draft text when completing argument-taking slash commands @canvrno-oai - #24641 [codex] Remove stale composer narrative doc references @canvrno-oai - #24368 [codex] add compaction metadata to turn headers @ningyi-oai - #24772 [codex] Add friendly Python SDK sandbox presets @aibrahim-oai - #24382 feat(tui): add vim text object bindings @fcoury-oai - #24766 feat(tui): make turn interruption keybind configurable @fcoury-oai - #24489 feat(tui): render markdown tables in app style [1 of 2] @fcoury-oai - #24713 chore: enable namespace tools for Bedrock @celia-oai
Codex CLI (Rust Implementation)
We provide Codex CLI as a standalone 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. If you provide both a prompt argument and piped stdin, Codex appends stdin as a <stdin> block after the prompt so patterns like echo "my output" | codex exec "Summarize this concisely" work naturally. Output is printed to the terminal directly. You can set the RUST_LOG environment variable to see more about what's going on.
Use codex exec --ephemeral ... to run without persisting session rollout files to disk.
Experimenting with the Codex Sandbox
To test to see what happens when a command is run under the sandbox provided by Codex, use the sandbox subcommand in Codex CLI:
# Uses the sandbox implementation for the current host OS:
# Seatbelt on macOS, the Linux sandbox on Linux, and Windows restricted token on Windows.
codex sandbox [COMMAND]...
# macOS-only diagnostic option
codex sandbox --log-denials [COMMAND]...
codex sandbox also accepts --profile NAME (-p NAME) to layer
$CODEX_HOME/NAME.config.toml onto the base user config for the sandboxed
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
In workspace-write, Codex also includes ~/.codex/memories in its writable roots so memory maintenance does not require an extra approval.
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 becomes 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.
If you want to contribute or inspect behavior in detail, start by reading the module-level README.md files under each crate and run the project workspace from the top-level codex-rs directory so shared config, features, and build scripts stay aligned.