跳到正文
北京时间
原文
Codex:GitHub Releases·· 2 小时前精选AI 评分66

用户报告 Codex CLI 0.157.0 默认启动持久化自更新后台守护进程

Codex CLI 默认会安装一个持久化且能自动更新的后台守护进程

AI 导读

一位 Linux (WSL2) 用户报告,Codex CLI 0.157.0 起打开交互式会话即默认启动持久后台守护进程 codex app-server --managed-daemon,窗口关闭后仍驻留。

推荐理由

作者实测 Codex CLI 0.157.0 的守护进程默认行为,给出复制目录、自更新、代理污染等细节和完整关闭步骤。

正文 · AI 翻译

你使用的是哪个版本的 Codex?

CLI — 0.157.0,通过 npm install -g @openai/codex 安装,Linux(WSL2)

你希望看到什么功能?

请让 daemon_auto_start 在 CLI 中选择启用(默认 false),或者至少在开启前询问一次。

自 0.157.0 起,只要打开一个交互式 codex 会话:

  1. 会启动一个持久后台守护进程(codex app-server --managed-daemon)。它在自己的会话中运行,没有 TTY,并且在每个 Codex 窗口关闭后仍会继续运行(被重新挂到 PID 1 下),直到 codex app-server daemon stop 或重启。
  2. 会复制整个平台包(约 374 MB:codex、codex-code-mode-host,以及捆绑的 bwrap/zsh/rg)到 ~/.codex/packages/app-server-daemon/releases/<version>/ —— 与 npm 刚刚安装的内容逐字节相同 —— 并从该副本运行守护进程。从那时起,后端的版本就与我用包管理器安装的 CLI 版本解耦了。
  3. 会启动一个分离的更新器(codex app-server daemon pid-update-loop),它在启动 5 分钟后检查更新,之后每小时检查一次,下载新版本并重启后端(这可能会终止正在进行的回合,见 app-server daemon: auto-update force-kills active turns after a 60s drain budget, and cannot be disabled #40969)。
  4. 会固定住恰好启动它的那个会话的环境。我通过一个包装器启动 Codex,每次调用都会设置 HTTPS_PROXY;守护进程会保留第一个会话的代理变量,其出站连接都会经过那个代理,无论后续会话是用什么启动的。Hooks in --remote mode receive the daemon's cwd, not the session's #42457 和 Hooks spawned by the app-server daemon cannot identify the client terminal, breaking terminal-targeting hooks #37537(守护进程的 cwd / 终端而不是会话的)看起来是同一个根本原因。

对于 CLI 来说,最不令人意外的默认行为是:后端随窗口一起生灭,运行我安装的二进制文件,并且不会在后台自我更新。共享的、可自我更新的守护进程对 Remote Control / 桌面应用来说是有意义的,所以在那里启用它没问题,或者在用户显式运行 codex app-server daemon start / bootstrap 时启用也可以。

如果它仍默认开启,请至少:

附加信息

在关闭它时发现的 bug:codex app-server daemon stop 会停止 app-server,但会让 pid-update-loop 更新器继续运行(70 秒后仍然存活,不得不手动杀掉它)。

我正在使用的变通方法:

codex features disable daemon_auto_start
codex app-server daemon stop
pkill -f 'app-server daemon pid-update-loop'   # not stopped by `daemon stop`
rm -rf ~/.codex/packages/app-server-daemon

关闭该标志后,新的 TUI 会话不再生成守护进程。

相关:#40969、#41188、#46468、#48050、#42457、#37537

来源:Codex:GitHub Releases · github.com