- Add conversation/thread fork endpoints in the protocol and app server so clients can branch a session into a new thread. (#8866) - Expose requirements via `requirement/list` so clients can read `requirements.toml` and adjust agent-mode UX. (#8800) - Introduce metrics capabilities with additional counters for observability. (#8318, #8910) - Add elevated sandbox onboarding with prompts for upgrade/degraded mode plus the `/elevate-sandbox` command. (#8789) - Allow explicit skill invocations through v2 API user input. (#8864) ## Bug Fixes - `/review <instructions>` in TUI/TUI2 now launches the review flow instead of sending plain text. (#8823) - Patch approval “allow this session” now sticks for previously approved files. (#8451) - Model upgrade prompt now appears even if the current model is hidden from the picker. (#8802) - Windows paste handling now supports non-ASCII multiline input reliably. (#8774) - Git apply path parsing now handles quoted/escaped paths and `/dev/null` correctly to avoid misclassified changes. (#8824) - Codex CLI subprocesses again inherit env vars like `LD_LIBRARY_PATH`/`DYLD_LIBRARY_PATH` to avoid runtime issues. (#8951) ## Documentation - App-server README now documents skills support and usage. (#8853) - Skill-creator docs clarify YAML frontmatter formatting and quoting rules. (#8610) ## Changelog Full Changelog: https://github.com/openai/codex/compare/rust-v0.79.0...rust-v0.80.0 - #8734 fix: do not propose to add multiline commands to execpolicy @tibo-openai - #8802 Enable model upgrade popup even when selected model is no longer in picker @charley-oai - #8805 chore: stabilize core tool parallelism test @tibo-openai - #8820 chore: silent just fmt @jif-oai - #8824 fix: parse git apply paths correctly @tibo-openai - #8823 fix: handle /review arguments in TUI @tibo-openai - #8822 chore: rename unified exec sessions @jif-oai - #8825 fix: handle early codex exec exit @tibo-openai - #8830 chore: unify conversation with thread name @jif-oai - #8840 Move tests below auth manager @pakrym-oai - #8845 fix: upgrade lru crate to 0.16.3 @bolinfest - #8763 Merge Modelfamily into modelinfo @aibrahim-oai - #8842 remove unnecessary todos @aibrahim-oai - #8846 Stop using AuthManager as the source of codex_home @pakrym-oai - #8844 Fix app-server `write_models_cache` to treat models with less priority number as higher priority. @aibrahim-oai - #8850 chore: drop useless feature flags @jif-oai - #8848 chore: drop some deprecated @jif-oai - #8853 [chore] update app server doc with skills @celia-oai - #8451 fix: implement 'Allow this session' for apply_patch approvals @owenlin0 - #8856 Override truncation policy at model info level @aibrahim-oai - #8849 Simplify error managment in `run_turn` @aibrahim-oai - #8767 Add feature for optional request compression @cconger - #8610 Clarify YAML frontmatter formatting in skill-creator @darlingm - #8847 Warn in /model if BASE_URL set @gt-oai - #8801 Support symlink for skills discovery. @xl-openai - #8800 Feat: appServer.requirementList for requirement.toml @shijie-oai - #8861 fix: update resource path resolution logic so it works with Bazel @bolinfest - #8868 fix: use tokio for I/O in an async function @bolinfest - #8867 add footer note to TUI @iceweasel-oai - #8879 feat: introduce find_resource! macro that works with Cargo or Bazel @bolinfest - #8864 Support UserInput::Skill in V2 API. @xl-openai - #8876 add ability to disable input temporarily in the TUI. @iceweasel-oai - #8884 fix: make the find_resource! macro responsible for the absolutize() call @bolinfest - #8774 fix: windows can now paste non-ascii multiline text @dylan-hurd-oai - #8855 chore: add list thread ids on manager @jif-oai - #8318 feat: metrics capabilities @jif-oai - #8826 fix: stabilize list_dir pagination order @tibo-openai - #8892 chore: drop metrics exporter config @jif-oai - #8896 chore: align error limit comment @tibo-openai - #8899 fix: include project instructions in /review subagent @tibo-openai - #8894 chore: add small debug client @jif-oai - #8888 fix: leverage find_resource! macro in load_sse_fixture_with_id @bolinfest - #8691 Avoid setpgid for inherited stdio on macOS @seeekr - #8887 fix: leverage codex_utils_cargo_bin() in codex-rs/core/tests/suite @bolinfest - #8907 chore: drop useless interaction_input @jif-oai - #8903 nit: drop unused function call error @jif-oai - #8910 feat: add a few metrics @jif-oai - #8911 gitignore bazel-* @zbarsky-openai - #8843 config requirements: improve requirement error messages @gt-oai - #8914 fix: reduce duplicate include_str!() calls @bolinfest - #8902 feat: add list loaded threads to app server @jif-oai - #8870 [fix] app server flaky thread/resume tests @celia-oai - #8916 clean: all history cloning @jif-oai - #8915 otel test: retry WouldBlock errors @gt-oai - #8792 Update models.json @github-actions - #8897 fix: preserve core env vars on Windows @tibo-openai - #8913 Add `read-only` when backfilling requirements from managed_config @gt-oai - #8926 add tooltip hint for shell commands (!) @fps7806 - #8857 Immutable CodexAuth @pakrym-oai - #8927 nit: parse_arguments @jif-oai - #8932 fix: increase timeout for tests that have been flaking with timeout issues @bolinfest - #8931 fix: correct login shell mismatch in the accept_elicitation_for_prompt_rule() test @bolinfest - #8874 [fix] app server flaky send_messages test @celia-oai - #8866 feat: fork conversation/thread @apanasenko-oai - #8858 remove `get_responses_requests` and `get_responses_request_bodies` to use in-place matcher @aibrahim-oai - #8939 [chore] move app server tests from chat completion to responses @celia-oai - #8880 Attempt to reload auth as a step in 401 recovery @pakrym-oai - #8946 fix: increase timeout for wait_for_event() for Bazel @bolinfest - #8789 Elevated sandbox NUX @iceweasel-oai - #8917 fix: treat null MCP resource args as empty @tibo-openai - #8942 Add 5s timeout to models list call + integration test @aibrahim-oai - #8951 fix: remove existing process hardening from Codex CLI @bolinfest
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.