Files
codex/codex-rs
Dylan Hurd d86cf538f5 ## New Features
- Added an optional SOCKS5 proxy listener with policy enforcement and config gating. (#9803)
- Plan mode now streams proposed plans into a dedicated TUI view, plus a feature-gated `/plan` shortcut for quick mode switching. (#9786, #10103)
- Added `/apps` to browse connectors in TUI and `$` insertion for app prompts. (#9728)
- App-server can now run in external auth mode, accepting ChatGPT auth tokens from a host app and requesting refreshes when needed. (#10012)
- Smart approvals are now enabled by default, with explicit approval prompts for MCP tool calls. (#10286, #10200)
- Introduced a SQLite-backed log database with an improved logs client, thread-id filtering, retention, and heuristic coloring. (#10086, #10087, #10150, #10151, #10229, #10228)

## Bug Fixes
- MCP tool image outputs render reliably even when image blocks aren’t first or are partially malformed. (#9815)
- Input history recall now restores local image attachments and rich text elements. (#9628)
- File search now tracks session CWD changes and supports multi-root traversal with better performance. (#9279, #9939, #10240)
- Resuming a thread no longer updates `updated_at` until the first turn actually starts. (#9950)
- Shell snapshots no longer inherit stdin, avoiding hangs from startup scripts. (#9735)
- Connections fall back to HTTP when WebSocket proxies fail. (#10139)

## Documentation
- Documented app-server AuthMode usage and behavior. (#10191)

## Chores
- Upgraded the Rust toolchain to 1.93. (#10080)
- Updated pnpm versions used in the repo. (#9992, #10161)
- Bazel build and runfiles handling improvements, including remote cache compression. (#10079, #10098, #10102, #10104)

## Changelog

Full Changelog: https://github.com/openai/codex/compare/rust-v0.92.0...rust-v0.93.0

- #9988 nit: better tool description @jif-oai
- #9991 nit: better unused prompt @jif-oai
- #9994 chore: clean orchestrator prompt @jif-oai
- #10001 backend-client: add get_config_requirements_file @gt-oai
- #9992 update pnpm to 10.28.2 to address security issues @mjr-openai
- #9993 description in role type @jif-oai
- #9944 TUI footer: right-align context and degrade shortcut summary + mode cleanly @charley-oai
- #9803 feat(network-proxy): add a SOCKS5 proxy with policy enforcement @viyatb-oai
- #9950 fix(app-server, core): defer initial context write to rollout file until first turn @owenlin0
- #10003 feat: make it possible to specify --config flags in the SDK @bolinfest
- #9797 remove sandbox globals. @iceweasel-oai
- #10009 chore: introduce *Args types for new() methods @bolinfest
- #10011 really fix pwd for windows codex zip @iceweasel-oai
- #10007 Remove load from SKILL.toml fallback @alexsong-oai
- #10008 enable live web search for DangerFullAccess sandbox policy @sayan-oai
- #9815 Fix: Render MCP image outputs regardless of ordering @Kbediako
- #9654 Show OAuth error descriptions in callback responses @blevy-oai
- #10030 Clarify external editor env var message @joshka-oai
- #9949 Ask user question UI footer improvements @charley-oai
- #9359 tui: stabilize shortcut overlay snapshots on WSL @slkzgm
- #10040 fix: enable per-turn updates to web search mode @sayan-oai
- #10041 fix: allow unknown fields on Notice in schema @sayan-oai
- #9628 Restore image attachments/text elements when recalling input history (Up/Down) @charley-oai
- #9982 [skills] Auto install MCP dependencies when running skils with dependency specs. @mzeng-openai
- #9986 fix(core) info cleanup @dylan-hurd-oai
- #9941 error code/msg details for failed elevated setup @iceweasel-oai
- #9489 feat(core) RequestRule @dylan-hurd-oai
- #10026 Add exec policy TOML representation @gt-oai
- #9821 feat: codex exec auto-subscribe to new threads @jif-oai
- #10004 feat: sqlite 1 @jif-oai
- #10083 feat: sort metadata by date @jif-oai
- #10092 Update shell-tool-mcp.yml @dylan-hurd-oai
- #10079 [bazel] Enable remote cache compression @zbarsky-openai
- #10025 Refine request_user_input TUI interactions and option UX @charley-oai
- #10080 Upgrade to rust 1.93 @zbarsky-openai
- #10095 Update shell-tool-mcp.yml @dylan-hurd-oai
- #9939 file-search: improve file query perf @nornagon-openai
- #10097 chore: deprecate old web search feature flags @sayan-oai
- #10034 compaction @aibrahim-oai
- #10028 allow elevated sandbox to be enabled without base experimental flag @iceweasel-oai
- #10101 fix(ci) fix shell-tool-mcp version v2 @dylan-hurd-oai
- #10043 Added `tui.notifications_method` config option @etraut-openai
- #10104 [bazel] Fix the build @zbarsky-openai
- #10102 default enable compression, update test helpers @sayan-oai
- #10111 fix(ci) more shell-tool-mcp issues @dylan-hurd-oai
- #10115 update the ci pnpm workflow for shell-tool-mcp to use corepack for pnpm versioning @mjr-openai
- #10098 [bazel] Improve runfiles handling @zbarsky-openai
- #10129 Ensure auto-compaction starts after turn started @aibrahim-oai
- #10116 chore(config) personality as a feature @dylan-hurd-oai
- #10123 Add app-server compaction item notifications tests @aibrahim-oai
- #10114 chore(config) Update personality instructions @dylan-hurd-oai
- #10128 removing quit from dropdown menu, but not autocomplete [cli] @natea-oai
- #9728 [connectors] Support connectors part 2 - slash command and tui @mzeng-openai
- #10133 chore(core) personality under development @dylan-hurd-oai
- #10125 emit a metric when we can't spawn powershell @iceweasel-oai
- #10134 fix(tui) reorder personality command @dylan-hurd-oai
- #10135 fix(ci) missing package.json for shell-mcp-tool @dylan-hurd-oai
- #10131 fix: ignore key release events during onboarding @joshka-oai
- #10138 fix: remove references to corepack @bolinfest
- #10086 feat: add log db @jif-oai
- #10089 feat: async backfill @jif-oai
- #10087 feat: log db client @jif-oai
- #10149 chore: improve client @jif-oai
- #10161 nit: update npm @jif-oai
- #10163 [experimental] nit: try to speed up apt-install @jif-oai
- #10164 [experimental] nit: try to speed up apt-install 2 @jif-oai
- #10150 feat: adding thread ID to logs + filter in the client @jif-oai
- #10151 feat: add log retention and delete them after 90 days @jif-oai
- #10152 chore: unify log queries @jif-oai
- #10175 Add OpenAI docs MCP tooltip @joshka-oai
- #10171 feat: reduce span exposition @jif-oai
- #10139 Fall back to http when websockets fail @pakrym-oai
- #10140 chore: ensure pnpm-workspace.yaml is up-to-date @bolinfest
- #9017 Better handling skill depdenencies on ENV VAR. @xl-openai
- #10182 fix: unify `npm publish` call across shell-tool-mcp.yml and rust-release.yml @bolinfest
- #10180 Add features enable/disable subcommands @joshka-oai
- #10184 fix: /approvals -> /permissions @bolinfest
- #10179 Remove WebSocket wire format @pakrym-oai
- #10186 updating comment to better indicate intent of skipping `quit` in the main slash command menu @natea-oai
- #10118 [Codex][CLI] Show model-capacity guidance on 429 @ccy-oai
- #10012 feat(app-server): support external auth mode @owenlin0
- #10103 tui: add feature-gated /plan slash command to switch to Plan mode @charley-oai
- #10191 chore(app-server): document AuthMode @owenlin0
- #10130 [feat] persist dynamic tools in session rollout file @celia-oai
- #10181 add error messages for the go plan type @willwang-openai
- #10198 feat(tui): route employee feedback follow-ups to internal link @joshka-oai
- #10194 load from yaml @alexsong-oai
- #10147 chore(personality) new schema with fallbacks @dylan-hurd-oai
- #10200 MCP tool call approval (simplified version) @mzeng-openai
- #10154 feat: add output to `/ps` @jif-oai
- #10217 nit: actually run tests @jif-oai
- #10177 Add community links to startup tooltips @joshka-oai
- #10210 Chore: plan mode do not include free form question and always include isOther @shijie-oai
- #10218 feat: backfill timing metric @jif-oai
- #10220 chore: unify metric @jif-oai
- #8991 Conversation naming @pap-openai
- #10167 Fetch Requirements from cloud @gt-oai
- #10225 explorer prompt @jif-oai
- #10222 fix: make sure the shell exists @jif-oai
- #10232 chore: do not clean the DB anymore @jif-oai
- #10229 feat: improve logs client @jif-oai
- #10228 feat: heuristic coloring of logs @jif-oai
- #10237 nit: fix db with multiple metadata lines @jif-oai
- #10208 feat: refactor CodexAuth so invalid state cannot be represented @bolinfest
- #10212 chore(feature) Experimental: Personality @dylan-hurd-oai
- #10211 chore(feature) Experimental: Smart Approvals @dylan-hurd-oai
- #10190 Load exec policy rules from requirements @gt-oai
- #10195 plan mode: add TL;DR checkpoint and client behavior note @baumann-oai
- #10239 chore: fix the build breakage that came from a merge race @bolinfest
- #9786 Plan mode: stream proposed plans, emit plan items, and render in TUI @charley-oai
- #10063 Tui: hide Code mode footer label @charley-oai
- #10244 chore: rename ChatGpt -> Chatgpt in type names @bolinfest
- #10238 Plan mode prompt @aibrahim-oai
- #10251 Fix deploy @charley-oai
- #10255 plan prompt @aibrahim-oai
- #10253 Make plan highlight use popup grey background @charley-oai
- #10207 Skip loading codex home as project layer @daniel-oai
- #10256 Update copy @pakrym-oai
- #9735 core: prevent shell_snapshot from inheriting stdin @swordfish444
- #10262 Fix main @pakrym-oai
- #10265 Hide /approvals from the slash-command list @pakrym-oai
- #10267 Update announcement_tip.toml @pakrym-oai
- #10240 file-search: multi-root walk @nornagon-openai
- #10266 fix: dont auto-enable web_search for azure @sayan-oai
- #9279 fix: update file search directory when session CWD changes @yuvrajangadsingh
- #10249 Validate CODEX_HOME before resolving @etraut-openai
- #10272 chore: implement Mul for TruncationPolicy @bolinfest
- #10241 Wire up cloud reqs in exec, app-server @gt-oai
- #10263 Add enforce_residency to requirements @gt-oai
- #10276 add missing fields to WebSearchAction and update app-server types @sayan-oai
- #10283 Turn on cloud requirements for business too @gt-oai
- #10287 Fix minor typos in comments and documentation @ruyut
- #10286 feat(core) Smart approvals on @dylan-hurd-oai
2026-01-30 23:17:24 -07:00
..
2026-01-16 08:56:38 -08:00
2026-01-28 08:43:17 +00:00
2026-01-28 17:46:18 +00:00
2026-01-30 23:17:24 -07:00
2026-01-03 02:19:52 -08:00

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

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.