遇到一个很坑的问题,就是在 Codex CLI 里执行任何看似瞬间完成的命令时都会莫名其妙地卡住挺长时间,最后能看到 Codex 在步骤中给出如下报错:
1 | error: command timed out |
这篇笔记记录如何定位并解决这个问题。
复现环境
- OS:Linux(Codex CLI 默认使用 Landlock/seccomp 沙箱)
- 启动方式:
codex
,选择需要 approvals。 - Shell:
bash -lc
(Codex 执行命令时默认行为) - 终端中安装了 pyenv,并在
~/.profile
中执行了eval "$(pyenv init -)"
现象
随便运行一条命令,比如 time -p true
或 command -V time
,实际上命令应该立刻完成,但在 Codex 的命令日志里,每次调用都等了约 60 秒才返回。
排查过程
通过与 codex 对话,描述问题,询问它看到了什么输出,得知它会看到类似这样的结果:
1 | time -p true |
查看 ~/.profile
发现其中调用了 eval "$(pyenv init -)"
。pyenv 的 init 脚本会在末尾执行一次 pyenv rehash
。
尝试让 codex 运行 touch ~/.pyenv/shims/testfile
,在 read-only 沙箱中被拒绝。
原因
Codex CLI 以 read-only 沙箱运行时,~/.pyenv/shims
目录不可写。每次 Codex 执行命令时会使用 bash -lc
的方式,启动这个 shell 时,pyenv init 每次都会 rehash,而 rehash 需要写 .pyenv-shim
文件,一旦写入失败,它会在默认的 60 秒超时时间内不断重试,于是造成任何命令前的长时间阻塞。
解决方案
在 ~/.codex/config.toml
中设置如下内容,注意替换 xxx
为实际用户名:
1 | sandbox_mode = "workspace-write" |
重新启动 Codex CLI,使配置生效。
验证
让 Codex 执行 touch ~/.pyenv/shims/codex-write-test
,确认不会再被拒绝。
让 Codex 再次运行 time -p true
,立刻返回没有延迟。