Codex 运行命令报 command timed out 错误

遇到一个很坑的问题,就是在 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 truecommand -V time,实际上命令应该立刻完成,但在 Codex 的命令日志里,每次调用都等了约 60 秒才返回。

排查过程

通过与 codex 对话,描述问题,询问它看到了什么输出,得知它会看到类似这样的结果:

1
2
3
4
5
time -p true
pyenv: cannot rehash: /home/xxx/.pyenv/shims/.pyenv-shim exists
real 0.00
user 0.00
sys 0.00

查看 ~/.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
2
3
4
sandbox_mode = "workspace-write"

[sandbox_workspace_write]
writable_roots = ["/home/xxx/.pyenv/shims"]

重新启动 Codex CLI,使配置生效。

验证

让 Codex 执行 touch ~/.pyenv/shims/codex-write-test,确认不会再被拒绝。

让 Codex 再次运行 time -p true,立刻返回没有延迟。

References

Mastodon