Plenty of people pin a CLI through a package manager so that the binary they audited is the binary that serves their session. Codex CLI stopped working that way in 0.157.0, on Sept 25. Open a qualifying interactive session and you also start a shared daemon that survives the window, reparented to PID 1. It serves later sessions from its own ~374 MB copy under ~/.codex, and a detached updater checks for new releases five minutes after start, then hourly; when one lands, the backend restarts and running turns get sixty seconds of drain before SIGKILL (#40969). The daemon’s environment is whatever its first launcher had, and the repo’s own README says per-client environment isolation “is not provided.”

The 0.157.0 release notes gave this one line: “Enabled automatic background-server startup for eligible interactive sessions, with recovery choices when server settings are incompatible.” The persistence, the package copy, and the self-updater are all outside that sentence. The feature flag is Stage::Stable and on by default, while the daemon’s README still opens by calling the daemon experimental. The official config reference documents the CLI’s own check_for_update_on_startup and rows for other features.* keys, but has no row at all for daemon_auto_start; the opt-outs that work (codex features disable daemon_auto_start, --no-daemon) are documented by users, in the issue threads. The current npm release, 0.162.1, is still fixing around the daemon’s presence, reconciling a running background server’s settings with CLI defaults.

A version pin is now an install-time fact. Reproduce a bug from a transcript and the transcript names the model, while nothing names the binary generation that ran the tools. The best comment on #48195 asks the daemon for a receipt at every client attachment: the client CLI version, the daemon’s binary digest and generation, the updater’s state, and the generation of the inherited environment. Any backend that updates itself needs that receipt, because the alternative is treating an hourly timer as a provenance record. If Codex is already on your machine, look under ~/.codex/packages/, read app-server-daemon/settings.json (the README documents updater.autoUpdateEnabled: false), and check ps for the update loop. I did not install it to watch the swap happen; the receipts here are the release notes, four issues, the README, and a config reference with no daemon row.

source ↗

← all notes