Files
codex/codex-rs
Shijie Rao f59c7c1ab9 ## New Features
- Added a more unified permissions flow, including clearer permissions history in the TUI and a slash command to grant sandbox read access when directories are blocked. (#11633, #11512, #11550, #11639)
- Introduced structured network approval handling, with richer host/protocol context shown directly in approval prompts. (#11672, #11674)
- Expanded app-server fuzzy file search with explicit session-complete signaling so clients can stop loading indicators reliably. (#10268, #11773)
- Added customizable multi-agent roles via config, including migration toward the new multi-agent naming/config surface. (#11917, #11982, #11939, #11918)
- Added a `model/rerouted` notification so clients can detect and render model reroute events explicitly. (#12001)

## Bug Fixes
- Fixed remote image attachments so they persist correctly across resume/backtrack and history replay in the TUI. (#10590)
- Fixed a TUI accessibility regression where animation gating for screen reader users was not consistently respected. (#11860)
- Fixed app-server thread resume behavior to correctly rejoin active in-memory threads and tighten invalid resume cases. (#11756)
- Fixed `model/list` output to return full model data plus visibility metadata, avoiding unintended server-side filtering. (#11793)
- Fixed several `js_repl` stability issues, including reset hangs, in-flight tool-call races, and a `view_image` panic path. (#11932, #11922, #11800, #11796)
- Fixed app integration edge cases in mention parsing and app list loading/filtering behavior. (#11894, #11518, #11697)

## Documentation
- Updated contributor guidance to require snapshot coverage for user-visible TUI changes. (#10669)
- Updated docs/help text around Codex app and MCP command usage. (#11926, #11813)

## Chores
- Improved developer log tooling with new `just log --search` and `just log --compact` modes. (#11995, #11994)
- Updated vendored `rg` and tightened Bazel/Cargo lockfile sync checks to reduce dependency drift. (#12007, #11790)

## Changelog

Full Changelog: https://github.com/openai/codex/compare/rust-v0.101.0...rust-v0.102.0

- #10268 app-server: add fuzzy search sessions for streaming file search @nornagon-openai
- #11547 Parse first order skill/connector mentions @canvrno-oai
- #11227 feat(app-server): experimental flag to persist extended history @owenlin0
- #10672 Add js_repl host helpers and exec end events @fjord-oai
- #11512 add a slash command to grant sandbox read access to inaccessible directories @iceweasel-oai
- #11631 chore(core) Deprecate approval_policy: on-failure @dylan-hurd-oai
- #11636 Better error message for model limit hit. @xl-openai
- #11633 feat: introduce Permissions @bolinfest
- #10669 docs: require insta snapshot coverage for UI changes @joshka-oai
- #11645 fix: skip review_start_with_detached_delivery_returns_new_thread_id o… @owenlin0
- #11639 [feat] add seatbelt permission files @celia-oai
- #11622 Remove absolute path in rollout_summary @wendyjiao-openai
- #10671 Add js_repl_tools_only model and routing restrictions @fjord-oai
- #11657 app-server tests: disable shell_snapshot for review suite @bolinfest
- #11646 app-server: stabilize detached review start on Windows @bolinfest
- #11638 fix(app-server): surface more helpful errors for json-rpc @owenlin0
- #11417 [apps] Add is_enabled to app info. @mzeng-openai
- #11630 Add new apps_mcp_gateway @canvrno-oai
- #11656 Persist complete TurnContextItem state via canonical conversion @charley-oai
- #11510 Remove git commands from dangerous command checks @joshka-oai
- #11668 feat(shell-tool-mcp): add patched zsh build pipeline @nornagon-openai
- #11275 Added a test to verify that feature flags that are enabled by default are stable @etraut-openai
- #11651 Add cwd as an optional field to thread/list @acrognale-oai
- #11660 chore(approvals) More approvals scenarios @dylan-hurd-oai
- #11518 [apps] Fix app loading logic. @mzeng-openai
- #11679 fix: dont show NUX for upgrade-target models that are hidden @sayan-oai
- #11515 Point Codex App tooltip links to app landing page @joshka-oai
- #11671 chore(core) Restrict model-suggested rules @dylan-hurd-oai
- #11703 fix(ci) lock rust toolchain at 1.93.0 to unblock @dylan-hurd-oai
- #11662 feat(network-proxy): structured policy signaling and attempt correlation to core @viyatb-oai
- #11709 fix(shell-tool-mcp) build dependencies @dylan-hurd-oai
- #11618 feat: add token usage on memories @jif-oai
- #11722 Lower missing rollout log level @jif-oai
- #11712 chore: streamline phase 2 @jif-oai
- #11731 feat: memories config @jif-oai
- #11736 feat: increase windows workers stack @jif-oai
- #11739 feat: add slug in name @jif-oai
- #11745 chore: move explorer to spark @jif-oai
- #11748 Fix memories output schema requirements @jif-oai
- #11669 core: limit search_tool_bm25 to Apps and clarify discovery guidance @apanasenko-oai
- #11755 app-server-test-client websocket client and thread tools @maxj-oai
- #11663 fix: reduce flakiness of compact_resume_after_second_compaction_preserves_history @bolinfest
- #11667 sandbox NUX metrics update @iceweasel-oai
- #11695 Updated app bug report template @etraut-openai
- #11477 feat: switch on dying sub-agents @jif-oai
- #11711 feat(tui): prevent macOS idle sleep while turns run @yvolovich-cyber
- #11686 Report syntax errors in rules file @etraut-openai
- #11763 Update read_path prompt @zuxin-oai
- #11772 chore: mini @jif-oai
- #11697 [apps] Improve app listing filtering. @mzeng-openai
- #11666 Add js_repl kernel crash diagnostics @fjord-oai
- #11687 support app usage analytics @alexsong-oai
- #11769 Improve GitHub issue deduplication reliability by introducing a stage… @etraut-openai
- #11770 fix(nix): use correct version from Cargo.toml in flake build @rupurt
- #11677 turn metadata: per-turn non-blocking @pash-openai
- #11692 rmcp-client: fix auth crash @maxj-oai
- #10590 tui: preserve remote image attachments across resume/backtrack @charley-oai
- #11782 turn metadata followups @pash-openai
- #11773 [app-server] add fuzzyFileSearch/sessionCompleted @nornagon-openai
- #11756 codex-rs: fix thread resume rejoin semantics @maxj-oai
- #11793 fix: send unfiltered models over model/list @sayan-oai
- #11799 fix(protocol): make local image test Bazel-friendly @joshka-oai
- #11796 Fix js_repl view_image test runtime panic @fjord-oai
- #11800 Fix js_repl in-flight tool-call waiter race @fjord-oai
- #11658 feat(skills): add permission profiles from openai.yaml metadata @celia-oai
- #11790 bazel: enforce MODULE.bazel.lock sync with Cargo.lock @joshka-oai
- #11803 add perf metrics for connectors load @alexsong-oai
- #11659 Handle model-switch base instructions after compaction @charley-oai
- #11813 Fixed help text for `mcp` and `mcp-server` CLI commands @etraut-openai
- #11672 feat(core): add structured network approval plumbing and policy decision model @viyatb-oai
- #11674 feat(tui): render structured network approval prompts in approval overlay @viyatb-oai
- #11550 feat(tui) Permissions update history item @dylan-hurd-oai
- #11767 fix(core): add linux bubblewrap sandbox tag @viyatb-oai
- #11534 Add process_uuid to sqlite logs @charley-oai
- #11487 core: snapshot tests for compaction requests, post-compaction layout, some additional compaction tests @charley-oai
- #11690 fix: show user warning when using default fallback metadata @sayan-oai
- #11780 chore(tui): reduce noisy key logging @apanasenko-oai
- #11884 fix: only emit unknown model warning on user turns @sayan-oai
- #11893 bazel: fix snapshot parity for tests/*.rs rust_test targets @apanasenko-oai
- #11759 feat: use shell policy in shell snapshot @jif-oai
- #11615 Allow hooks to error @gt-oai
- #11918 chore: rename collab feature flag key to multi_agent @jif-oai
- #11924 nit: memory storage @jif-oai
- #11917 feat: add customizable roles for multi-agents @jif-oai
- #11926 docs: mention Codex app in README intro @vb-openai
- #11900 feat: drop MCP managing tools if no MCP servers @jif-oai
- #11939 Rename collab modules to multi agents @jif-oai
- #11894 [apps] Fix app mention syntax. @mzeng-openai
- #11866 chore(core) rm Feature::RequestRule @dylan-hurd-oai
- #11948 add(feedback): over-refusal / safety check @fouad-openai
- #11860 Fixed screen reader regression in CLI @etraut-openai
- #11964 add(core): safety check downgrade warning @fouad-openai
- #11951 fix(core) exec_policy parsing fixes @dylan-hurd-oai
- #11932 fix: js_repl reset hang by clearing exec tool calls without waiting @jif-oai
- #11974 Hide /debug slash commands from popup menu @jif-oai
- #11922 fix: race in js repl @jif-oai
- #11969 fix(ci) Fix shell-tool-mcp.yml @dylan-hurd-oai
- #11908 Exit early when session initialization fails @jif-oai
- #11986 nit: wording multi-agent @jif-oai
- #11995 feat: add `--search` to `just log` @jif-oai
- #11994 feat: add `--compact` mode to `just log` @jif-oai
- #11833 Don't allow model_supports_reasoning_summaries to disable reasoning @etraut-openai
- #11807 Centralize context update diffing logic @charley-oai
- #12007 Update vendored rg to the latest stable version (15.1) @etraut-openai
- #11970 Protect workspace .agents directory in Windows sandbox @etraut-openai
- #12005 Add /statusline tooltip entry @jif-oai
- #11982 feat: move agents config to main config @jif-oai
- #11224 chore: clarify web_search deprecation notices and consolidate tests @sayan-oai
- #12001 Feat: add model reroute notification @shijie-oai
- #11801 Add remote skill scope/product_surface/enabled params and cleanup @xl-openai
2026-02-17 11:21:41 -08:00
..
2026-02-16 14:11:05 +00:00
2026-01-28 17:46:18 +00:00
2026-02-17 11:21:41 -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. 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, 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.

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.