先定位在哪一层
绝大多数故障落在五层里的一层:认证(who)、沙箱与审批(what can it do)、网络(can it reach)、指令文件(what does it know)、运行环境(where does it run)。先判断层,再动手,可以省掉一半的试错。
| 顺序 | 排查的一层 | 一句话判断方法 |
|---|---|---|
| 1 | 认证与账号 | codex login status 是否返回成功,模型列表能不能拉到 |
| 2 | 沙箱与审批 | 被拒的动作是“改文件/联网/跑命令”里的哪一类 |
| 3 | 网络与 TLS | 登录能过但请求失败,或公司网络下证书报错 |
| 4 | 指令文件 | 行为和你写的 AGENTS.md 不符 |
| 5 | 运行环境 | IDE、云端、Windows/WSL 之间的差异 |
codex --version
codex login status
codex doctor认证失败、登录过期、账号不对
认证问题的信号很直接:提示未登录、反复跳浏览器、或者明明登录了却报没有权限。先用一条命令确认当前凭证状态,再决定是重登还是换方式。
codex login status
codex login
codex logout| 现象 | 常见原因 | 处理 |
|---|---|---|
| 提示未登录或凭证失效 | 凭证过期、被登出、换了账号 | 重新 codex login;交互界面里用 /logout 后再登录 |
| 浏览器回调打不开 | 在远程机器或容器里,回调端口回不来 | 用 codex login --device-auth,或把登录文件拷进去 |
| 登录成功但拉不到模型 | 用的是 API key 而云端需要 ChatGPT 登录 | 云端任务必须用 ChatGPT 账号登录,API key 不行 |
| 总被登出 | 工作区被限定,账号不匹配 | 检查强制工作区设置,确认登录的是目标工作区账号 |
| 公司网络下证书报错 | 企业 TLS 检查或私有根 CA | 设置企业根证书变量后再登录 |
登录缓存由 CLI 和 IDE 插件共用:在一个端登出,另一个端也要重新登录。凭证默认明文存在主目录的 auth.json 里,也可以改成系统凭据库;不管存在哪,都按密码对待,不要提交进仓库。
# ~/.codex/config.toml
cli_auth_credentials_store = "keyring"命令被沙箱拦了
沙箱拦截不是 bug,是设计。关键是分清当前是哪一档,以及被拦的是“写文件”“联网”还是“跑命令”。判断依据其实就在错误信息里:被拒的命令与路径会写出来。
| 档位 | 能做什么 | 典型报错场景 |
|---|---|---|
| read-only | 只能读;改文件、跑命令、联网都要审批或直接失败 | 想写一行代码就被拒 |
| workspace-write | 工作区内可读写、可跑常规命令;工作区外与联网受限 | 写到工作区外的路径失败 |
| danger-full-access | 没有文件与网络边界 | 几乎不会因沙箱被拦,但风险最高 |
- 01
看当前档位与可写根目录
用 /status 查看当前模型、审批策略与可写根目录;用 /permissions 切换权限档位。看不懂配置合并顺序就敲 /debug-config。
- 02
用同一套策略复现
codex sandbox 会用和内部一致的安全策略跑一条命令,能直接验证“到底是沙箱拦的还是命令本身错了”。
- 03
只放行需要的那条命令
把常跑的命令加进规则白名单,比把整个会话提到 full access 安全得多。
- 04
确认平台沙箱是否可用
Linux 需要 bubblewrap;Windows 用原生沙箱;macOS 开箱可用。缺依赖时启动会有告警,按提示装即可。
sudo apt install bubblewrap
# 或
sudo dnf install bubblewrap网络、TLS 与 MCP 连不上
网络层的问题有两种表现:请求根本发不出去(证书、DNS、公司网关),或者工具连不上(MCP 服务启动超时、需要 OAuth)。前者看证书配置,后者看日志和超时设置。
| 现象 | 常见原因 | 处理 |
|---|---|---|
| 请求报证书或 TLS 错误 | 企业网络做了 TLS 检查,根 CA 不在信任链里 | 设置 CODEX_CA_CERTIFICATE 指向企业根证书 |
| 沙箱里 curl 失败但本机可以 | 沙箱默认不放网络 | 用规则放行,或临时提高权限档位 |
| MCP 工具列表是空的 | 服务启动失败或启动超时 | 加大 startup_timeout_sec,用 /mcp verbose 看诊断 |
| MCP 需要登录 | OAuth 尚未完成 | codex mcp login <名称>,或在界面里 /mcp login |
| MCP 工具调用总超时 | 单次工具执行时间不够 | 调大 tool_timeout_sec |
export CODEX_CA_CERTIFICATE=/path/to/corporate-root-ca.pem
codex login[mcp_servers.my_server]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
startup_timeout_sec = 20
tool_timeout_sec = 120排查 MCP 时先确认配置写在哪:用户级在 ~/.codex/config.toml,项目级在仓库的 .codex/config.toml,且项目级配置只对受信任的项目生效。桌面应用、CLI 和 IDE 插件共用同一份配置,一处写错三处都连不上。
AGENTS.md 好像没生效
指令文件不生效,九成是三个原因:目录不对、文件是空的、或者被上一层的 override 顶掉了。判断顺序永远是:先确认实际加载了哪些文件,再改内容。
codex debug prompt-input
# 想确认某个子目录的覆盖是否生效
codex --cd apps/web debug prompt-input| 现象 | 常见原因 | 处理 |
|---|---|---|
| 一条规则都没生效 | 当前工作目录不在项目根之下,或文件为空 | 从项目根启动;空文件会被跳过 |
| 出现了没写过的规则 | 上层目录有 AGENTS.override.md | 从最近的目录往上找 override 文件 |
| 自定义文件名不生效 | 名字没写进 fallback 列表,或没重启 | 检查配置拼写;改配置后重启 Codex |
| 只有前半部分规则生效 | 总大小超过 32 KiB 上限,后面的被截断 | 调大上限,或把规则拆到嵌套目录 |
| 配置像是别人的 | CODEX_HOME 指向了另一个目录 | echo $CODEX_HOME 确认,再检查该目录下的配置 |
# ~/.codex/config.toml
project_doc_fallback_filenames = ["TEAM_GUIDE.md", ".agents.md"]
project_doc_max_bytes = 65536云端、IDE、Windows 的差异
同一件事在不同端上表现不同,很多时候不是故障,而是端与端的能力差异。比如云端任务不接受 API key 登录、IDE 插件不提供定时任务管理界面、WSL1 已经不被支持。
| 场景 | 典型症状 | 处理 |
|---|---|---|
| 云端任务一直排队或不动 | 账号未开通、仓库未授权、环境未就绪 | 确认用 ChatGPT 登录,检查仓库访问与环境;用 codex cloud list 看状态 |
| 云端改动拉不回来 | 本地有冲突,git apply 失败 | 先在干净工作区应用,或手动对照 diff 处理 |
| IDE 插件连不上 | 未登录,或与 CLI 的登录状态不一致 | 在插件里重新登录;确认与 CLI 共用同一份缓存 |
| Windows 原生沙箱降级 | 提示沙箱受限 | 按提示用 /setup-default-sandbox 走管理员流程 |
| WSL 里跑不动 | WSL1 不受支持,或仓库放在挂载盘 | 升级到 WSL2;把仓库放在 Linux 家目录下 |
- 01
先确认版本和端
codex --version 看 CLI;桌面应用用的是它自带的那份,功能可能先到一个端。两端版本差太多时,先统一再排查。
- 02
任务卡住先看是不是在等审批
无人值守或后台运行时,最容易“卡”在等人点确认。切到该会话看一眼,或调整审批策略。
- 03
终端卡了就地重开
关掉终端面板再用快捷键开回来,跑 pwd、git status 验证;仍然无响应就等任务结束后重启应用。
- 04
找日志
会话记录在主目录的 sessions 目录(默认 ~/.codex/sessions),macOS 应用日志在 ~/Library/Logs/com.openai.codex/ 下按日期分目录。
求助前先收集这些
把下面几项准备好,能让你在提 issue 或找同事时直接被回答,而不是来回问十轮。注意日志和会话记录里可能有密钥与业务数据,发出去之前先脱敏。
- codex doctor 的报告
- codex --version,以及你用的是 CLI、IDE 插件还是桌面应用
- codex login status 的结果(不要贴令牌本身)
- 出问题的那条命令,或那段最小可复现的提示词
- 完整报错文本,尤其是被拒绝的命令与路径
- 操作系统与版本;Windows 用户注明是原生还是 WSL,以及 WSL 版本
- 相关的配置片段(脱敏后的 config.toml),以及 /debug-config 的层顺序
- /status 显示的模型、审批策略与可写根目录
codex doctor > codex-doctor.txt
codex --version >> codex-doctor.txt
codex login status >> codex-doctor.txt 2>&1
uname -a >> codex-doctor.txt提交反馈时可以在输入框敲斜杠调出反馈入口,它会带上会话 ID,方便定位到具体那次运行。
常见问题
为什么同样一条命令,昨天能跑今天被拦?
检查三件事:权限档位有没有被改过、工作目录是不是换了(工作区外的路径不在可写范围)、以及策略是否被上层配置覆盖。用 /status 看当前可写根目录,用 /debug-config 看配置层的合并顺序,基本能定位到是哪一层变了。
登录一直循环跳浏览器怎么办?
多半是回调地址回不来:远程服务器、容器或跳板机上很常见。改用设备码登录,或把已登录机器的凭证文件安全地拷过去(按密码对待),也可以用端口转发把回调端口接回本地。
云端任务必须用 ChatGPT 账号登录吗?
是。云端任务需要 ChatGPT 登录,API key 只能用于本地按量调用,不能用来跑云端任务。如果你一直在两种方式之间切换,先确认当前用的是哪一种。
升级后功能反而不见了?
终端和 IDE 插件的新功能有时会先到其中一个端。先用 codex --version 确认版本,再检查是不是配置里把对应特性关掉了(例如某些实验特性有独立开关)。仍然不对就按上面的清单收集信息再反馈。
官方文档与参考
本文依据上述官方文档整理;价格、额度与功能会随官方更新变化,第三方中转站的行为以其自身说明为准。