## New Features
- Add `Ctrl+G` to open the current prompt in your configured external editor (`$VISUAL`/`$EDITOR`) and sync edits back into the TUI. (#7606)
- Support project-aware config layering: load repo-local `.codex/config.toml`, honor configurable `project_root_markers`, and merge that with system config like `/etc/codex/config.toml`. (#8354, #8359, #8461)
- Support enterprise-managed configuration requirements on macOS via an MDM-provided TOML payload. (#8743)
- Improve `tui2` transcript navigation with multi-click selection, a copy shortcut/affordance, and a draggable auto-hiding scrollbar. (#8462, #8471, #8728)
- Start Windows PowerShell sessions in UTF-8 mode to reduce encoding-related prompt/output issues. (#7902)
- Exec policy rules can now include human-readable justifications, and policy loading follows the unified config-layer stack. (#8349, #8453, #8751)
## Bug Fixes
- Fix failures when the model returns multiple tool calls in a single turn by emitting tool calls in the format the Chat Completions API expects. (#8556)
- Make `/review` compute diffs from the session’s working directory so base-branch detection works correctly with runtime cwd overrides. (#8738)
- Handle the legacy Chat Completions streaming terminator cleanly to avoid spurious SSE parse errors. (#8708)
- Fix a set of `tui2` rendering/input edge cases (screen corruption, scroll stickiness, and selection/copy correctness). (#8463, #8695, #8449)
- Improve diagnostics when `ripgrep` download fails during CLI packaging so failures are easier to debug. (#8486)
- Avoid a panic when parsing alpha/stable version strings. (#8406)
## Documentation
- Replace and de-duplicate user docs with links to the developer documentation site (including skills docs). (#8662, #8407)
- Clarify configuration documentation, including the `developer_instructions` option. (#8376, #8701)
- Fix broken README links. (#8682)
## Chores
- Performance tuning for TUIs: cap redraw scheduling and reduce unnecessary rerenders during streaming to lower CPU usage. (#8499, #8681, #8693)
- Update Rust dependencies across `codex-rs`. (#8414, #8596, #8597)
## Changelog
Full Changelog: https://github.com/openai/codex/compare/rust-v0.77.0...rust-v0.78.0
- #8407 Point skills docs to developer documentation site @etraut-openai
- #8406 fix: do not panic on alphas @aibrahim-oai
- #8091 Update ghost_commit flag reference to undo @charlie-openai
- #8423 test(tui2): re-enable ANSI for VT100 tests @joshka-oai
- #8419 fix(tui2): constrain transcript mouse selection bounds @joshka-oai
- #8424 chore: un-ship undo @jif-oai
- #8376 docs: add `developer_instructions` config option and update descriptions @448523760
- #8431 chore: drop undo from the docs @jif-oai
- #8410 chore(deps): bump peter-evans/create-pull-request from 7 to 8 @dependabot
- #8412 chore(deps): bump test-log from 0.2.18 to 0.2.19 in /codex-rs @dependabot
- #8413 chore(deps): bump landlock from 0.4.2 to 0.4.4 in /codex-rs @dependabot
- #8414 chore(deps): bump clap from 4.5.47 to 4.5.53 in /codex-rs @dependabot
- #8416 chore(deps): bump openssl-sys from 0.9.109 to 0.9.111 in /codex-rs @dependabot
- #7902 feat(windows) start powershell in utf-8 mode @dylan-hurd-oai
- #8349 Add ExecPolicyManager @pakrym-oai
- #8354 feat: support in-repo .codex/config.toml entries as sources of config info @bolinfest
- #8359 feat: add support for project_root_markers in config.toml @bolinfest
- #8395 Handle concatenation nodes in bash command parser for exec policy @ivanmurashko
- #8446 Update models.json @github-actions
- #8444 use a junction for the cwd while read ACLs are being applied @iceweasel-oai
- #8447 remove minimal client version @aibrahim-oai
- #8448 chore: add ConfigLayerStack as a field of Config @bolinfest
- #7606 feat: open prompt in configured external editor @sayan-oai
- #8449 fix(tui2): copy transcript selection outside viewport @joshka-oai
- #8418 chore(tui): include tracing targets in file logs @joshka-oai
- #8456 chore: include User layer in ConfigLayerStack even if config.toml is empty @bolinfest
- #8453 feat: load ExecPolicyManager from ConfigLayerStack @bolinfest
- #8462 feat(tui2): add copy selection shortcut + UI affordance @joshka-oai
- #8461 feat: honor /etc/codex/config.toml @bolinfest
- #8463 fix(tui2): fix screen corruption @joshka-oai
- #8458 chore: save more about turn context in rollout log file @apanasenko-oai
- #8466 fix(tui2): start transcript selection on drag @joshka-oai
- #8293 [tui] add optional details to TUI status header @sayan-oai
- #8471 feat(tui2): add multi-click transcript selection @joshka-oai
- #8486 fix(codex-cli): improve ripgrep download diagnostics @joshka-oai
- #8460 fix: limit output size for exec command in unified exec @shijie-oai
- #8493 fix: fix test that was writing temp file to cwd instead of TMPDIR @bolinfest
- #8484 Remove reasoning format @aibrahim-oai
- #8499 perf(tui): cap redraw scheduling to 60fps @joshka-oai
- #8496 feat: introduce codex-utils-cargo-bin as an alternative to assert_cmd::Command @bolinfest
- #8498 fix: declare test path relative to `$CARGO_MANIFEST_DIR` @bolinfest
- #8307 [chore] add additional_details to StreamErrorEvent + wire through @sayan-oai
- #8522 fix: restrict windows-sys to Windows target @RunjiLiu
- #8595 chore(deps): bump toml_edit from 0.23.7 to 0.24.0+spec-1.1.0 in /codex-rs @dependabot
- #8596 chore(deps): bump tracing-subscriber from 0.3.20 to 0.3.22 in /codex-rs @dependabot
- #8597 chore(deps): bump tokio from 1.47.1 to 1.48.0 in /codex-rs @dependabot
- #8598 chore(deps): bump regex-lite from 0.1.7 to 0.1.8 in /codex-rs @dependabot
- #8491 Refresh on models etag mismatch @aibrahim-oai
- #8483 use a SandboxUsers group for ACLs instead of granting to each sandbox user separately @iceweasel-oai
- #8676 Log compaction request bodies @pakrym-oai
- #8488 Remove model family from tui @aibrahim-oai
- #8662 Replaced user documentation with links to developers docs site @etraut-openai
- #8681 perf(tui2): reduce unnecessary redraws @joshka-oai
- #8682 Fixed broken link in README @etraut-openai
- #8677 Account for last token count on resume @aibrahim-oai
- #8687 hard disable remote models refresh when feature is disabled @aibrahim-oai
- #8415 chore(deps): bump tracing-opentelemetry from 0.31.0 to 0.32.0 in /codex-rs @dependabot
- #8688 Attach more tags to feedback submissions @pakrym-oai
- #8701 chore: update outdated docs @tibo-openai
- #8693 perf(tui2): cache transcript view rendering @joshka-oai
- #8697 fix: brighten transcript copy affordance @joshka-oai
- #8629 ci: prevent workflows from running on forks @leezenn
- #8695 fix(tui2): avoid scroll stickiness at cell boundaries @joshka-oai
- #8716 fix(tui2): render copy pill at viewport bottom @joshka-oai
- #8718 tui2: copy selection dismisses highlight @joshka-oai
- #8721 chore(deps): bump clap_complete from 4.5.57 to 4.5.64 in /codex-rs @dependabot
- #8723 chore(deps): bump tokio-stream from 0.1.17 to 0.1.18 in /codex-rs @dependabot
- #8724 chore(deps): bump derive_more from 2.0.1 to 2.1.1 in /codex-rs @dependabot
- #8725 chore(deps): bump insta from 1.44.3 to 1.46.0 in /codex-rs @dependabot
- #8556 fix: chat multiple tool calls @jif-oai
- #8738 fix: /review to respect session cwd @tibo-openai
- #8694 [MCP] Sanitize MCP tool names to ensure they are compatible with the Responses APO @gpeal
- #8728 feat(tui2): transcript scrollbar (auto-hide + drag) @joshka-oai
- #8708 fix(codex-api): handle Chat Completions DONE sentinel @joshka-oai
- #8743 (MacOS) Load config requirements from MDM @gt-oai
- #8377 feat: expose outputSchema to user_turn/turn_start app_server API @apanasenko-oai
- #8747 chore: GH pager @jif-oai
- #8686 better idempotency for creating/updating firewall rules during setup. @iceweasel-oai
- #8683 never let sandbox write to .codex/ or .codex/.sandbox/ @iceweasel-oai
- #8459 chore: improve skills render section @gverma-openai
- #7858 Use issuer URL in device auth prompt link @abrar71
- #8492 best effort to "hide" Sandbox users @iceweasel-oai
- #8751 feat: add justification arg to prefix_rule() in *.rules @bolinfest