
1. 从一次命令找不到说起Codex CLI 到底解决什么问题第一次在终端里敲下codex却收到command not found的时候我盯着屏幕愣了几秒。明明安装脚本跑完了终端也重启了为什么还是找不到后来才发现问题出在 PATH 没刷新而安装脚本默认把二进制文件丢到了一个当前 shell 会话还没加载的目录里。这个坑不大但足够让一个刚接触 Codex CLI 的人卡上半小时。Codex CLI 是一个跑在终端里的智能编码助手客户端。你可以把它理解成一个住在命令行里的结对程序员——它能在你的项目目录里读文件、改代码、执行命令甚至帮你排查构建错误。和网页版对话不同的是CLI 版本直接扎根在你的本地工作区能感知真实的文件结构和 Git 状态所以它给出的建议往往更贴合实际工程而不是泛泛而谈。这篇文章适合三类人一是刚听说 Codex CLI、想在自己机器上跑起来的新手二是已经装上了但被config.toml各种报错折磨过的中级用户三是想把 Codex CLI 纳入日常开发流、需要精细控制沙箱权限和模型配置的老手。我会从安装讲到常用命令再重点拆解沙箱权限和config.toml的配置逻辑把那些官方文档一笔带过、但实际用起来天天踩的坑都摊开说。需要先明确一点Codex CLI 的核心价值不在于能聊天而在于能动手。它通过沙箱机制在受控范围内执行操作既给了 AI 足够的行动自由又不至于让你的系统裸奔。理解这套沙箱逻辑是用好它的前提。2. 安装 Codex CLI不同系统下的真实路径与常见卡点2.1 安装前的环境确认在动手之前先确认两件事Node.js 版本和包管理器。Codex CLI 目前主要通过 npm 分发所以你的机器上得有 Node.js 环境。我实测下来Node 18 及以上比较稳Node 16 在某些依赖上会报奇怪的错。node -v npm -v如果版本太低建议用 nvm 管理多版本别直接覆盖系统自带的 Node不然后面其他工具可能跟着出问题。# 用 nvm 安装并切换到 Node 20 nvm install 20 nvm use 20Windows 用户要注意Codex CLI 在原生 PowerShell 和 WSL 下的表现不完全一样。我个人的经验是如果你日常开发在 WSL 里那就在 WSL 里装别在 Windows 侧装完再去 WSL 里用路径映射会让你怀疑人生。2.2 全局安装与 PATH 刷新安装命令本身很简单npm install -g openai/codex但这里有个高频坑装完之后codex命令找不到。原因通常是 npm 的全局 bin 目录没在 PATH 里。先查一下全局目录在哪npm config get prefix假设输出是/usr/local那二进制一般在/usr/local/bin。确认这个路径在 PATH 中echo $PATH如果没有就在~/.bashrc或~/.zshrc里补上export PATH$(npm config get prefix)/bin:$PATH然后source ~/.zshrc刷新。这一步看着基础但我见过太多人卡在这里以为是安装失败反复重装其实只是环境变量没生效。提示Windows 下如果用的是 PowerShell刷新 PATH 需要重开终端窗口refreshenv命令不一定对所有场景生效。2.3 验证安装是否真的成功别只看安装脚本的最后一行有没有报错要实际跑一下codex --version codex --help--help能列出所有子命令说明二进制本身没问题。如果--version有输出但--help报错那多半是依赖缺失重新npm install -g一次通常能解决。还有一种情况是安装未完成——脚本跑到一半网络断了npm 缓存里留了半成品。这时候清缓存重装npm cache clean --force npm install -g openai/codex3. 常用命令速查把 Codex CLI 用顺手的关键几个3.1 启动与交互模式最基础的用法就是在项目目录下直接敲codex它会进入交互式会话你能像聊天一样给它下指令。但真正高效的做法是带着任务进去比如codex 帮我看看这个项目的构建脚本为什么报错这样它一上来就有明确目标不用你反复解释上下文。交互模式里几个常用快捷键值得记一下CtrlC中断当前操作CtrlD退出会话输入/开头可以触发内置命令比如切换模型、查看帮助。这些在长时间会话里能省不少事。3.2 非交互式执行与管道Codex CLI 支持非交互模式适合塞进脚本或 CI 流程codex exec 把 src 目录下所有 console.log 找出来exec子命令执行完就退出不会挂在那里等输入。配合管道还能处理标准输入git diff | codex exec 帮我写一段符合规范的 commit message这个用法我日常用得很多尤其是提交前懒得想 commit message 的时候。3.3 常用子命令对照表命令作用典型场景codex进入交互式会话日常问答、改代码codex exec ...非交互执行单条指令脚本、CIcodex --version查看版本排查环境问题codex --help查看帮助忘记子命令时codex login登录账号首次使用codex config查看/编辑配置调模型、改沙箱codex login这一步很多人会忽略。没登录的话部分模型和功能用不了报错信息还比较隐晦。首次使用建议先登录确认账号状态正常。3.4 会话管理与上下文延续Codex CLI 的会话是有上下文的。你在一个会话里让它读了某个文件后续提问它还记得。但如果你退出再进来上下文就断了。想延续之前的会话可以用--resume之类的参数具体以当前版本--help为准或者干脆把关键信息写进项目里的说明文件让它每次启动都读。我自己的习惯是在项目根目录放一个AGENTS.md把项目结构、技术栈、编码规范写进去。Codex CLI 启动时会自动读取这类文件相当于给它一份入职手册省得每次重复交代背景。4. 沙箱权限Codex CLI 最容易被误解的一环4.1 沙箱到底在防什么很多人第一次看到沙箱这个词以为是某种虚拟机。其实不是。Codex CLI 的沙箱是一层权限约束它限制 AI 能对文件系统和网络做什么。默认情况下它可能只能读不能写或者只能在特定目录里操作。为什么要这么设计因为 AI 执行命令是有风险的。它可能误删文件、可能往错误的地方写数据、可能发起你不想发的网络请求。沙箱就是那道护栏——让 AI 在够用的范围内活动而不是给它整个系统的生杀大权。理解这一点很关键沙箱不是障碍是保险。你要做的不是关掉它而是根据任务需要调整它的松紧度。4.2 三种常见的权限模式实际使用中权限大致分三档只读模式AI 能看文件、能分析但不能改、不能执行写操作。适合代码审查、问题诊断。工作区写入模式AI 能在当前项目目录里读写文件、执行命令但出不了这个目录。这是最常用的平衡点。完全访问模式AI 基本不受限能操作系统任意位置。除非你非常清楚在做什么否则不建议长期开着。切换模式通常在启动时通过参数指定或者在config.toml里设默认值。我建议默认用工作区写入模式遇到需要更大权限的任务再临时提权。4.3 提权时的正确姿势当你确实需要 AI 执行一些超出默认权限的操作时别直接一把梭到完全访问。更稳妥的做法是先让它说明要做什么、为什么需要这个权限确认操作范围可控临时提权任务完成后降回来。Codex CLI 在遇到权限不足时通常会提示你你可以选择批准单次操作而不是永久放开。这个单次批准机制很实用既完成了任务又没留下长期风险。注意任何情况下都不要在包含敏感信息的目录里开完全访问模式。AI 读取到的内容可能被用于后续推理范围失控的代价很高。4.4 沙箱与网络访问除了文件系统沙箱还管网络。默认情况下AI 发起的网络请求可能被限制。如果你需要它拉取依赖、访问 API得确认网络权限是否放开。这一点在离线环境或企业内网里尤其要注意很多命令执行失败其实是网络被沙箱拦了而不是命令本身有问题。排查这类问题时先看错误信息里有没有权限相关的关键词再对照当前沙箱模式基本能定位。5. config.toml 配置详解模型、权限与那些让人头大的报错5.1 config.toml 是什么、放在哪config.toml是 Codex CLI 的核心配置文件用 TOML 格式写。它决定了默认用哪个模型、沙箱权限多严、各种行为开关怎么设。文件通常放在用户配置目录下比如~/.codex/config.toml也可能在项目本地有一份覆盖全局配置。找不到文件位置的话用codex config path或者直接看--help里关于配置的说明。不同版本路径可能略有差异以实际输出为准。5.2 一个可用的最小配置别一上来就抄网上一大堆配置先从一个能跑起来的最小版本开始model gpt-5-codex [sandbox] mode workspace-write这两行就够启动了。model指定默认模型[sandbox]段控制权限模式。跑通之后再逐步加东西出问题也好定位是哪个字段引起的。5.3 模型配置与model is not supported报错热词里频繁出现the gpt-5.6-sol model is not supported when using codex这类报错本质是配置里写的模型名和当前账号/客户端支持的模型不匹配。可能的原因有几个模型名拼写错误或者用了不存在的版本号账号权限不包含该模型客户端版本太旧不认识新模型名。排查顺序先确认模型名拼写再确认账号能用哪些模型最后升级 Codex CLI 到最新版。改完配置后记得重启会话配置不是热加载的。# 确认无误后再写进去 model gpt-5-codex5.4 cant load config.toml 的排查链路chatgpt cant load config.toml, so this thread cant resume这个报错我遇到过不止一次。它的意思是配置文件解析失败导致会话无法恢复。TOML 对格式很敏感一个多余的引号、一个没闭合的方括号都会让整个文件加载不了。排查步骤我总结成一条链路看报错行号TOML 解析器通常会指出出错的行先看那一行。检查引号和括号字符串必须用引号包起来表头[section]必须成对。检查重复键同一个 section 里不能有两个同名键。用工具验证拿个在线 TOML 校验器或者本地python -c import tomllib; tomllib.load(open(config.toml,rb))跑一下能快速定位语法错。回退到最小配置如果实在找不到问题先把配置精简到上面那个最小版本确认能跑再一点点加回来。# 用 Python 快速校验 TOML 语法 python3 -c import tomllib; tomllib.load(open(config.toml,rb)); print(OK)这个命令能跑通说明语法没问题报错就出在字段值或版本兼容上。5.5 配置字段速查表字段作用常见取值model默认模型以账号支持为准sandbox.mode沙箱权限read-only/workspace-write/danger-full-accessapproval_policy审批策略控制何时需要人工确认history会话历史控制是否保存、保存多久字段名以当前版本文档为准不同版本可能有增删。改配置前先备份一份出问题能快速回滚。6. 把 Codex CLI 接进日常工作流几个实战场景6.1 代码审查与重构在项目目录下启动 Codex CLI直接让它审查最近的改动git diff | codex exec 审查这段改动指出潜在问题它会把 diff 读进去给出针对性的意见。比人工逐行看快得多尤其是改动量大、涉及多个文件的时候。注意这时候用只读模式就够了不需要写权限。6.2 排查构建错误构建失败时把错误日志喂给它npm run build 21 | codex exec 分析这个构建错误的原因它能结合项目结构给出可能的原因和修复方向。我实测下来对于依赖冲突、路径错误这类问题命中率挺高。但涉及环境特有的问题还是得自己判断。6.3 批量代码修改需要把某个模式在多个文件里统一改掉时用工作区写入模式codex exec 把 src 下所有 var 改成 const注意作用域它会逐个文件处理。但改完一定要用 Git diff 检查AI 的批量修改偶尔会误伤尤其是变量作用域复杂的地方。改之前先提交一次方便回滚。6.4 接入其他工具链的注意事项热词里提到接入飞书接入 deepseek这类需求本质是把 Codex CLI 作为后端能力嵌进其他流程。这时候要注意两点一是非交互模式下的输出格式要稳定方便下游解析二是权限要收紧别让自动化流程拿到过大的系统权限。自动化场景下只读或工作区写入模式通常就够完全访问模式风险太高。7. 那些文档没写、但我踩过的坑7.1 配置改了不生效Codex CLI 的配置不是热加载的。你改了config.toml当前会话不会自动读取新值必须退出重进。我一开始改完模型发现没变化折腾半天才发现是这个原因。养成习惯改配置后重启会话。7.2 会话恢复失败的连锁反应config.toml一旦加载失败之前保存的会话可能全部无法恢复。所以改配置前先确认新配置语法正确再覆盖旧文件。稳妥做法是保留一份config.toml.bak出问题直接换回来。7.3 权限开太大导致误操作我有一次图省事开了完全访问模式结果 AI 在整理文件时把一个不在项目目录里的配置文件也动了。虽然没造成严重后果但那次之后我就定了个规矩默认工作区写入提权必须明确理由任务结束立刻降回来。7.4 模型名跟着版本走模型名不是一成不变的。客户端升级后旧模型名可能被弃用配置里还写着旧名字就会报model is not supported。升级 Codex CLI 后顺手检查一下config.toml里的模型名是否还有效。7.5 网络受限环境下的表现在内网或网络受限的环境里Codex CLI 的部分功能会不可用报错信息不一定直白。遇到命令执行失败但看不出原因的情况先确认网络权限和沙箱设置别一头扎进命令本身找问题。8. 关于版本升级与配置维护的一点个人习惯Codex CLI 迭代挺快新版本可能改配置字段、改默认行为。我的习惯是每次升级前先看一眼 release notes重点看有没有 breaking change尤其是config.toml相关的。升级后先跑一遍codex --version和codex --help确认基本功能正常再进项目里实际用一次。配置维护上我把config.toml纳入版本管理放在个人 dotfiles 仓库里这样换机器或者配置被改坏时能快速恢复。项目本地的覆盖配置则跟着项目走不混在一起。这套做法用了大半年没再出现过配置丢了从头配的情况。最后分享一个小技巧如果你经常在不同项目间切换且每个项目需要的沙箱权限不一样可以在项目根目录放一份本地配置只覆盖需要变的字段其余继承全局配置。这样既不用每次手动改权限也不会让全局配置变得臃肿。