Codex CLI 在 Windows 上报错、升级后还是旧版本?后台 daemon 的 4 种修法(0.164 实测)
Codex CLI 从 0.157 开始,默认会在后台起一个 daemon(app-server)。这东西在 Windows 上问题特别多:终端窗口一直闪、启动报错、升级完还在用旧版本、删文件夹提示被占用……GitHub 上相关的 issue 一个就有一百多条评论,L 站也有人在问。
我在 Win11 上装了 0.157 和 0.164 两个版本,把常见的几种情况都跑了一遍。下面的命令和输出都是实测的。
先看一眼 daemon 是什么状态
codex app-server daemon version正常的话会返回一段 JSON,重点看最后两个字段:
{"status":"running", ... "cliVersion":"0.164.0","appServerVersion":"0.164.0"}cliVersion 是你敲命令用的 Codex 版本,appServerVersion 是后台 daemon 的版本。两个不一样,基本就是问题所在。
如果 daemon 没在跑,会直接报连不上:
Error: failed to connect to ...\app-server-control\app-server-control.sock
Caused by:
A socket operation encountered a dead network. (os error 10050)这个本身不是错,说明 daemon 没启动而已。
情况一:升级完 Codex,daemon 还是旧版本
这是最常见、也是现有中文教程基本没提到的一个。
原因是 daemon 用的不是你 npm 装的那个 Codex,它会把自己单独复制一份到 ~/.codex/packages/app-server-daemon 里跑。所以你 npm i -g @openai/codex 升到新版后,后台跑的还是老的那份,两边版本对不上,各种奇怪的报错就来了。
修法是让 daemon 换成你当前 CLI 的版本,再重启:
codex app-server daemon update --from-cli --yes
codex app-server daemon restart我用 0.157 起的 daemon、0.164 的 CLI 实测,第一条会提示:
Replace installed daemon version 0.157.0 with CLI version 0.164.0 ...
{"status":"updated", ... "installedVersion":"0.164.0", ...}restart 之后再 version 一下,两个版本都变成 0.164.0 就好了。
有个小坑:--from-cli 会把 daemon 钉死在这个版本上,输出里写得很清楚。以后想让它恢复自动更新,跑一次不带参数的:
codex app-server daemon update情况二:daemon 卡死、删文件夹提示被占用
网上流传的办法是删掉 ~/.codex 下面的 app-server-control 和 app-server-daemon 两个目录,让它重新生成。这招有用,但我实测踩了两个坑:
坑 1:先 stop 也不一定停干净。 codex app-server daemon stop 之后,任务管理器里还留着一个 codex.exe,命令行是 app-server daemon pid-update-loop。它占着目录,这时候删就会提示文件被占用。要先在任务管理器里把残留的 codex.exe 结束掉,或者用 PowerShell:
Get-Process codex | Stop-Process -Force注意这会把所有 codex 进程都关掉,正在跑的会话也会断。
坑 2:别只删 packages 目录。 我试过只删 packages,结果再启动直接报:
Error: daemon executable not found at ...\packages\app-server-daemon\current\bin\codex.exe;
repair the existing installation, or run `codex app-server daemon start` to install a missing daemon因为 app-server-daemon 里还记着旧的安装信息。所以要删就三个一起删:
codex app-server daemon stop
Get-Process codex -ErrorAction SilentlyContinue | Stop-Process -Force
Remove-Item -Recurse -Force "$HOME\.codex\app-server-control", "$HOME\.codex\app-server-daemon", "$HOME\.codex\packages"然后 codex app-server daemon start,它会重新装一份:
Installing daemon from CLI version 0.164.0 into ...\packages/app-server-daemon...只删这三个目录,你的登录信息、配置和历史会话都不受影响。
情况三:不想要这个 daemon,直接关掉
如果你只是在终端里用 Codex,不用桌面版和远程控制,可以把自动启动关了:
codex features disable daemon_auto_start它会往 ~/.codex/config.toml 里写:
[features]
daemon_auto_start = false网上有文章说是写 [daemon] 下面的 auto_start = false,这个写法是错的。我实测写进去之后跑 codex features list,daemon_auto_start 还是 true,根本没生效。用上面那条命令最稳,不容易写错。
改完可以确认一下:
codex features list | findstr daemon显示 daemon_auto_start stable false 就对了。之前已经起来的 daemon 记得 stop 一下。
情况四:临时不走 daemon
不想改配置,只是这一次绕开它,加个参数就行:
codex --no-daemon官方的说明是"不使用共享的后台服务,即使它已经在运行"。V2EX 上有人用 --sandbox danger-full-access --no-daemon 一起绕,其实问题出在 daemon,单加 --no-daemon 就够了,没必要把沙箱也关掉,danger-full-access 等于让 Codex 随便改你的系统,能不开就别开。
我没复现出来的
两个问题我这台机器上没遇到,放链接给需要的朋友参考:
- 终端窗口一直闪:openai/codex#48074
- 提示要从非管理员终端启动 daemon:openai/codex#48043,相关讨论里有人指出根因是 CLI 和 daemon 版本不一致,可以先按情况一试试
总结
遇到 Codex 在 Windows 上各种怪问题,按这个顺序来:先 daemon version 看版本对不对得上,对不上就 update --from-cli 再 restart;还不行就停掉、杀残留进程、删三个目录重装;实在不想折腾,features disable daemon_auto_start 关掉了事。
Codex 别的问题可以看我之前写的 一直卡在 Thinking / Reconnecting 的排错 和 Codex CLI 安装教程。