CL-SN55 941 —
GPT-61S 885 —
GPT-56T 861 —
GPT-6S 825 —
CL-OP55X 818 -0.1%
MUSE-SPK 793 —
QWEN-38X 779 —
GPT-6A 778 —
CL-OP5H 711 -0.1%
CL-OP5X 709 -0.1%
KIMI-K3X 699 -0.1%
CL-OP46H 694 -0.1%
CL-FAB5H 692 -0.1%
CL-OP55H 692 -0.1%
CL-OP47H 683 -0.1%
GEM-37FH 648 -0.2%
GEM-38FH 633 -0.2%
INKL 531 —
CL-OP47 529 -0.2%
GPT-56S 529 -5.9%
GEM-3P 493 —
CL-OP46 488 —
CL-OP48 481 —
GEM-31P 453 -0.2%
GPT-6L 436 —
CL-SN55 941 —
GPT-61S 885 —
GPT-56T 861 —
GPT-6S 825 —
CL-OP55X 818 -0.1%
MUSE-SPK 793 —
QWEN-38X 779 —
GPT-6A 778 —
CL-OP5H 711 -0.1%
CL-OP5X 709 -0.1%
KIMI-K3X 699 -0.1%
CL-OP46H 694 -0.1%
CL-FAB5H 692 -0.1%
CL-OP55H 692 -0.1%
CL-OP47H 683 -0.1%
GEM-37FH 648 -0.2%
GEM-38FH 633 -0.2%
INKL 531 —
CL-OP47 529 -0.2%
GPT-56S 529 -5.9%
GEM-3P 493 —
CL-OP46 488 —
CL-OP48 481 —
GEM-31P 453 -0.2%
GPT-6L 436 —
← Back to feed

OpenAI Codex CLI 0.157.0 Installs a Self-Updating Background Daemon Without Asking

Starting with version 0.157.0 of OpenAI’s Codex CLI, opening any interactive session silently starts a persistent background daemon that keeps running after every window is closed, bypasses the package manager you used to install it, and updates itself on an hourly schedule regardless of user preference.

The behavior was documented in GitHub issue 48195, filed against the openai/codex repository, and surfaced on Hacker News with nearly 400 points and 217 comments within four hours.

What the Daemon Does

Opening an interactive Codex session in 0.157.0 triggers three things:

1. A persistent process that outlives the terminal. The daemon (codex app-server --managed-daemon) is reparented to PID 1 on startup. It continues running after every Codex window is closed. Stopping it requires codex app-server daemon stop or a reboot, and even that command has a bug: it leaves the updater process alive.

2. A 374 MB self-copy outside the package manager. The full platform package is copied to ~/.codex/packages/app-server-daemon/releases/<version>/. From that point on, the daemon’s binary is decoupled from the version installed via npm or brew. A package manager update does not update the daemon.

3. An hourly self-updater. A detached process (codex app-server daemon pid-update-loop) checks for updates five minutes after daemon start, then hourly. When a new version is available, it downloads and restarts the backend with a 60-second drain budget. Active turns are killed if they do not complete within that window. The updater cannot be disabled through documented settings.

Additional Problems

The daemon pins the environment variables of whichever session first started it. If you use an HTTPS proxy wrapper that sets variables per-invocation, all subsequent outbound connections from the daemon go through that first session’s proxy, regardless of how later sessions are configured. Hooks in remote mode receive the daemon’s working directory, not the session’s.

The Workaround

The daemon sits behind a feature flag that is on by default. Two methods to disable it:

Edit ~/.codex/config.toml:

[features]
daemon_auto_start = false

Or run:

codex features disable daemon_auto_start

Neither option is documented in the CLI’s official help text.

Why It Matters

A CLI tool that installs a persistent, self-updating process running as a background daemon with no TTY, decoupled from the system package manager and incapable of being stopped cleanly, is a significant deviation from expected behavior. The core objection in the issue: for a command-line tool, the least surprising default is that the backend lives and dies with the terminal window and runs exactly the binary that was installed.

The author of the GitHub issue notes the daemon behavior does make sense for Codex Remote Control or the desktop app, where a shared backend is expected. Applying the same default to the CLI is what drew the criticism.