The Codex Changelog
All Episodes
Codex Flags Daemon Mismatches Before You Start

Codex Flags Daemon Mismatches Before You Start

0:00|0:00

Codex 0.164.0 alpha adds a startup check for feature-flag mismatches between the CLI and its background daemon, replacing a silent fallback to embedded mode with a recovery prompt. Learn how to configure feature overrides and reconnect safely, including the warning that restarting a shared daemon can interrupt active subagents; the episode also covers improvements to TUI question rendering, picker ranking, remote reconnects, and Linux launcher security.


Chapter 1

Daemon Feature Mismatch, Explained

Ethan Park

So you open a terminal, run codex, and everything feels a little off. Slower, maybe. Your other session's worktrees aren't showing up. Turns out you weren't attached to your shared background daemon at all. Codex quietly dropped you into embedded mode, and nobody told you. That's the behavior a change on main this week is aimed at. And thanks to Jellypod to help make this daily show a reality.

Maya

I'm Maya, this is The Codex Changelog, and a quick orientation first. Stable is still 0.163.0. Everything we're covering today landed on main and shows up in the 0.164.0 alpha builds, alpha.6 and alpha.7, released October 19 and 20. So if you're on stable, you won't see this yet. It follows the daemon lifecycle work we talked about last time, including the slash daemon restart command that shipped in 0.163.0.

Ethan Park

The change is PR 55442 from etraut-openai, commit 8196bcd. Three pieces. First, the fixed allowlist for boolean feature overrides in the daemon is gone. Any boolean flag under the features table in config.toml, or passed on the command line, can now be sent to the daemon and evaluated there. Second, on startup Codex now explicitly compares the feature overrides your CLI is asking for against what the running daemon reports as active. Third, if those don't match, Codex stops and shows an interactive recovery dialog instead of silently falling back.

Maya

Let me spell out why the silent fallback hurt. According to the change notes, embedded mode duplicates memory usage, causes SQLite database lock contention, and isolates your session from the shared background worktrees and the coordinated OAuth token refreshes. And the old allowlist meant you couldn't really test an experimental flag through a daemon session anyway. So you'd set a flag, the daemon didn't know about it, and you ended up in the slow lane without any indication.

Ethan Park

Here's what the dialog looks like. It lists up to three mismatched features by name, and if more differ, it shows a remaining count. It tells you whether the running daemon is managed. Then three choices. One, restart the managed daemon with your current settings. That's marked Recommended when the daemon is managed. Two, continue without the daemon in embedded mode. Three, cancel startup.

Maya

A couple of details I like. Saved daemon settings are preserved during automatic startup, so Codex isn't clobbering your stored configuration just to start. And the restart payload only submits the delta, meaning just the features that actually mismatch, not your whole config.

Chapter 2

Using the Recovery Prompt and Smaller Fixes

Ethan Park

To use it, set your overrides in the config file. In ~/.codex/config.toml, under the features table, put multi_agent_v2 equals true, and preserve_fork_prefix equals true. Or use the feature override flag on the command line with multi_agent_v2 equals true. Now if a background daemon is already running with different settings, you get the prompt. Pick option one, the managed daemon restarts with the new settings, and your session reconnects automatically. You can also trigger that yourself from inside the TUI with slash daemon restart.

Maya

Now the caveat, and it's a real one. Restarting a managed daemon terminates active background subagents and turns across every terminal session attached to that shared daemon. Codex warns you if active work will be interrupted. But if you've got three terminals open and one is halfway through a long task, read that warning before you press Enter on the recommended option.

Ethan Park

And choosing embedded mode is fine when you want it, but that terminal is then cut off from the shared daemon's cache, worktrees, and token rotation. One more thing on the cleanup side. Removed features are now ignored gracefully rather than failing validation, and features the daemon doesn't report default to disabled. The example is features.transcript_v2, retired in PR 55388. It's gone. If you want a fullscreen transcript, set fullscreen_transcript equals true under the tui table instead.

Maya

Now some smaller items from October 19 and 20. Async questions the agent asks you, the ones with item type question, now render through the TUI Markdown engine. That's PR 55411. Fenced code blocks, emphasis, and labeled URLs display properly, and overwide tokens wrap without everything turning bold.

Ethan Park

The dollar sign file and context picker, PR 55596, now ranks by how often you pick things, within the exact, prefix, and fuzzy match tiers. It tracks up to 50 confirmed selections in ~/.codex/mention_usage.json. So that's a local file you can inspect, or delete if you want a fresh ranking.

Maya

There's also a resilience fix in PR 55409. If a remote server refuses thread start because it's shutting down or draining, Codex now catches that refusal, waits for the draining connection to close, reconnects within a two minute deadline, and retries startup once. Your prompt draft, model selection, and reasoning effort are preserved.

Ethan Park

On the security side, PR 55384 hardens the Linux launcher that runs before the sandbox. It verifies that lookup paths, parent directory aliases, and the canonical targets for executables like bwrap can't be swapped out through writable symlinks or sticky directory overrides.

Maya

Two for API users. PR 55587 decouples prompt cache keys. With StartThreadOptions, you can set PromptCacheKey to inherit the session key, supply your own, or omit prompt_cache_key entirely. That lets threads share a cache without you rewriting session IDs. And PR 55407 clarifies login status. Entering an API key reports API key saved and API key configured, and it states that authentication is verified on your first request, not when you type it in.

Ethan Park

So the takeaway. If you're running the alpha, check your features table against your running daemon before you start a long session, and look at the mismatch prompt instead of dismissing it. If you're on stable 0.163.0, you can use slash daemon restart today and wait for this to land. That's the changelog for today.