故障处理
Codex 找不到 /plan、计划模式没生效?入口、权限与改动验证指南
Codex 找不到 /plan、工作中切不了计划模式,或只想规划却出现改动?按客户端入口、忙碌状态、生效权限与修改前后对照逐步排查,确认结果后再转入实施。
你想让 Codex 先分析方案,却找不到 /plan;或者输入后没有切换,任务仍在执行;也可能已经拿到计划,却发现文件有变化。先确认:你在哪个客户端输入、当时任务是否空闲,以及当前允许哪些实际操作。 这三件事决定下一步该查入口、状态还是改动来源。
本文围绕 codex plan mode not working、Codex 计划模式打不开和“只规划不改代码”这些场景排查。/plan 是 Codex 聊天里的命令,不是在系统终端执行的程序;规划交互与只读权限也要分别确认。文件已有修改时,先保留当前状态,不为获得一个干净的 diff 撤销你的工作。
先按现象选择下一步
| 现象 | 先确认 | 下一步 |
|---|---|---|
输入 /plan,提示路径或命令不存在 |
是否输入在系统 shell | 回 Codex 聊天输入框 |
| 聊天命令列表里找不到计划模式 | 客户端、版本及当前入口 | 按第 1 步确认支持范围 |
| 任务还在运行,切换暂不可用 | 是否仍有当前轮活动 | 按第 2 步等待并复验 |
| 回复像计划,界面模式却未确认 | 模式状态与普通文本请求 | 按第 3 步分别检查 |
| 只想规划,却出现文件变化 | 修改前状态与实际操作记录 | 按第 4、5 步核对来源 |
如果是面板本身空白或一直转圈,先看 VS Code 扩展加载排查。如果只是修改后的文件找不到,转到 worktree 与改动位置排查,不用先重装或切换计划模式。
1. 找不到 /plan:先核对输入位置和客户端
适用情况: 提示找不到命令、输入后像普通消息,或命令菜单没有这一项。
先记录正在使用的是本地 CLI / TUI、桌面应用、IDE 扩展还是其他界面,以及该客户端自己的版本。CLI 的版本号不能代替桌面或扩展版本;远程连接还要核对实际服务端,不能把本机另一份 CLI 当作故障端。
在本地交互式 CLI 中: 回到 Codex 的聊天输入框,输入 / 查看命令列表,再筛选 plan。按 官方 CLI 命令参考,输入下面的命令并按 Enter,会把当前聊天切到计划模式。它也支持后接本次规划需求:
/plan 先分析这个项目需要修改哪些文件、有哪些风险和验收步骤,暂不实施。
这段要输入到 Codex 聊天框。在 Bash、zsh 或 PowerShell 中直接执行 /plan,出现命令或路径错误,不能说明 Codex 的计划模式损坏。codex exec 是另一种非交互入口,也不能照搬 TUI 菜单操作;相关问题见 exec 输出与退出排查。
在桌面应用或 IDE 中: 检查当前聊天界面实际提供的模式入口、命令菜单及对应版本的官方说明。不要假定它与 CLI 使用相同的命令、快捷键或退出方式。如果只是给普通输入框发送“先做计划”,可以表达任务要求,但不能据此声称界面已切换模式。
预期结果: 能确认适用于当前执行端的入口,并看到相应模式反馈。若当前版本的菜单仍没有这一项,保存版本、当前任务状态和菜单现象,再核对该端支持范围;仅凭缺一个入口,不能判定必须升级订阅或换模型。需要更新时,按 实际安装来源与版本排查处理,不先清空配置或历史。
2. /plan 暂不可用:检查 Codex 是否仍在工作
适用情况: 当前轮尚未完成、仍有工具执行,或提示计划模式暂时不可用。
官方文档明确:Codex 正在工作时,CLI 的 /plan 暂不可用。 先查看当前轮的活动和完成状态,等它正常结束后,再在同一聊天的空闲输入框执行第 1 步。不要连续发送同一命令,把排队消息误当成模式切换已经成功。
如果希望停止正在执行的工作,先识别当前操作及其中断影响,再使用当前客户端支持的停止方式。停止后检查命令和文件状态;中断不等于已经撤销改动,也不能证明子进程或外部操作全部停止。不要为切换模式而直接终止整台机器上的进程。
验证: 空闲后,入口能够使用,界面给出模式反馈,并针对新的规划需求返回方案。若仍不可用,回第 1 步核对执行端与版本;若任务本身一直无法结束,保留当前活动、错误和客户端日志,按具体运行故障处理,而不是继续改权限来尝试打开菜单。
3. 计划模式没生效:分开检查规划、权限和工具
适用情况: 回复已经像计划,但你需要确认这一轮允许做什么,尤其是希望只看方案、不产生修改。
先对照三项:
| 检查项 | 要确认的事实 | 验证依据 |
|---|---|---|
| 规划交互 | 当前聊天是否真的处于计划模式 | 当前客户端模式反馈 |
| 命令权限 | 本地命令能否写入目标范围 | 生效权限与配置来源 |
| 实际动作 | 本轮用了哪些命令和外部工具 | 活动记录及结果对照 |
不要只凭一句“我会先规划”判断三项都已确认。官方安全文档将沙箱能做什么与何时需要审批分为两层,并在希望聊天或规划而不做修改时,指向 /permissions 的只读模式。
在支持这些命令的本地 CLI 中,输入 /permissions,选择符合本次需求的 Read Only,确认客户端宣布了权限更新;再用 /status 查看会话信息,包括审批策略、可写范围,以及远程连接时的地址和服务端版本。这是选择所需的权限边界,不是测试计划模式时必须放宽权限。 受管理策略限制时,以实际允许的选项为准。
如果使用自定义权限 profile,不要仅凭名称里有 readonly 就认定不能写入;核对它的有效规则。状态与配置文件不符时,使用当前客户端支持的诊断入口,或按 config.toml 加载与覆盖排查检查来源。没有依据时,不添加陌生的实验开关,也不靠切成 Full Access 来“修复”只规划需求。
还要核对工具范围:官方权限说明中,本地权限 profile 控制的是沙箱命令,连接器、MCP、浏览器、云端环境及获批的沙箱外执行有各自的控制。不能把本地只读状态解释成所有外部系统都不会变化。本轮只要分析时,应明确不调用写入型工具,也不通过一次额外审批绕过所需边界。
验证: 界面模式、生效权限与本轮操作要求能够对应起来。若你只给了普通消息而没有切模式,先纠正状态;若模式正确但仍看到写入动作,保留动作记录,进入第 5 步定位,不先断言是模型、账号或某个固定版本的通用故障。
4. 用一次只规划任务验证,先记录已有改动
适用情况: 入口与权限已经确认,需要检查计划是否符合要求,以及本轮是否增加了意外改动。
先记录目标项目和工作目录。Git 项目在任务实际使用的 checkout 中执行以下查看命令,规划前后各做一次;把结果保存在项目外的私有记录中,避免把诊断记录本身当成任务新增文件。以下命令只用于查看,不会暂存、提交或撤销文件:
git rev-parse --show-toplevel
git rev-parse HEAD
git status --short --untracked-files=all
git --no-pager diff --no-ext-diff --no-textconv
git --no-pager diff --cached --no-ext-diff --no-textconv
git ls-files --others --exclude-standard
按 Git status、diff 和 ls-files 的范围分别判读:
- 普通
git diff查看未暂存变化;--cached查看已暂存变化。对比的是规划前与规划后两份结果,不是要求原有修改消失。 - 同时比较当前提交
HEAD;即使两次状态都干净,期间也可能有其他操作产生提交。提交不同就继续查记录,不能仅凭 diff 为空报告未变化。 ??和未跟踪列表只说明路径,不能证明文件正文没变。对需要保护的已有未跟踪文件,规划前保存私有副本或记录内容哈希,规划后再比;新出现的路径也要单独打开检查。- 被忽略文件、其他 checkout、子模块内部与外部系统需要按实际任务范围另查;这组命令不是整台机器的完整快照。非 Git 项目用目标文件副本、内容哈希及操作记录建立对照。
对一个已确认的普通文件,可在规划前后用同一路径运行下面的内容哈希检查;替换占位路径,不使用会写入 Git 对象库的 -w:
git hash-object --no-filters -- "实际文件路径"
该命令默认只计算对象名,--no-filters 按原始内容计算。相同哈希可帮助确认这个文件的内容一致,但不能证明别的文件、权限位或外部服务没有变化;不要公开包含敏感正文的副本。
记录完基线,再在已确认的规划入口中发送一项范围小、无需写入的真实需求。例如针对指定模块:
这一轮只分析方案,暂不实施。
请只读取我指定模块及必要的相关文件,说明现状、建议修改的文件、
方案取舍、风险和验收方法;需要我决定的事项单独列出。
不要修改、生成、暂存、提交或删除文件,不运行安装、格式化或构建脚本,
不调用会写入外部系统的工具。
若完成分析需要写入或额外权限,请先说明原因并停在方案阶段。
把模块与目标补充清楚。这次正常 Codex 请求会使用当前账号与额度,无需反复运行来测试所有模型。不要让“分析方案”顺带执行可能生成缓存或产物的项目脚本。
预期结果: 得到可以审查的计划,说明目标、涉及文件、关键步骤、风险与验收条件;不是只重复需求,也没有未经确认进入实施。本地 CLI 还可用 Codex 的 /diff辅助审查已暂存、未暂存和未跟踪内容,但它与普通 git diff 的显示范围不同。
文件验收: 在相同目录重跑查看命令,核对原有差异仍与基线一致;对需要保护的未跟踪文件及其他目标,核对副本或哈希。没有新的未预期变化,才可以报告“本次所核验范围未发生意外改动”。仅看到状态行相同,或普通 diff 为空,不足以覆盖所有情况。
5. 计划模式还是改了文件:按记录找来源
适用情况: 规划后发现新增、删除、内容变化或暂存状态变化。
先保留规划前后记录和当前文件,暂停后续实施。然后依次检查:
- 是不是原来就有的修改? 对照两次差异和文件内容,不把已有的
M或??归给本轮。没有事前基线时,只能结合历史、备份和记录调查,不能保证精确分离重叠改动。 - 变化发生在哪个执行位置? 核对项目、worktree、分支和目录,确认看到的是同一份文件。恢复聊天不会自动恢复文件,相关区别见 恢复会话指南。
- 记录中实际执行了什么? 查看本轮文件编辑、命令、工具调用与时间;也检查原来还在运行的任务、编辑器自动保存或格式化。单凭最后一条“计划完成”,不能判定整个期间没有其他操作。
- 是否发生了实施授权或权限变化? 核对你发送的后续消息、当前模式与批准记录;确认某个修改命令是否在切模式之前就已经开始。切换模式不能撤销已发生的修改。
验证与后续: 能把具体变化关联到可核验的操作或环境差异,再处理那个原因。若在已确认的模式、权限和干净的隔离项目中仍出现不符合预期的写入,整理最小步骤、客户端 / 服务端版本、模式反馈和脱敏日志向维护者报告;不要反复在有重要未保存工作的项目里复现。来源未确定时,明确记录“仍未定位”,不把重新输入 /plan 当作已经修复。
需要撤销时先审阅具体差异和可用备份,不默认执行整仓库恢复、清理未跟踪文件或删除会话。它们不能替代定位,还可能覆盖你想保留的工作。
6. 方案确认后,再明确转入实施
适用情况: 计划内容已经审阅,相关文件状态也完成核验,准备开始修改。
使用当前客户端提供的切换或实施入口,确认状态已经改变;仅授予本次修改所需的范围,并明确批准哪一版方案、涉及哪些文件及验收命令。不要把其他客户端的快捷键或“再输入一次 /plan”当成所有界面通用的退出办法。
最终验证: 规划阶段可以给出具体方案并核对文件状态;实施阶段只产生批准范围内的差异,再运行对应项目检查。若仍只返回计划,重新核对模式与实施指令;若写入被拒绝,检查该目标的有效权限,而不是为了进入实施打开全部权限。审查完成结果可参考 Codex 代码审查工作流。
本文于 2026-10-17 核对官方资料,并在独立 Git 仓库验证已暂存、未暂存、未跟踪文件的查看范围与内容哈希对照。没有切换用户真实任务模式、修改 Codex 配置或调用模型;没有把 Git 检查表述为各客户端计划模式故障的复现。实际入口和效果仍须以当前执行端的官方支持、状态与操作记录验证。