← Codex 与工具
语言:中文English

排障记录

Codex 长任务突然停顿或卡死:原因与恢复方法

总结 Codex 在长任务开发中停顿、中断或像卡死一样不再推进时的常见原因,以及从状态检查到恢复任务的排查顺序。

本文目录

Codex 在长任务开发中突然不再推进,不一定是真正的程序卡死。更常见的情况是:它正在等待权限确认、触达用量限制、模型提前结束当前 turn,或者网络与上下文状态发生了异常。

本文按常见程度整理排查顺序。不同 Codex 版本、运行环境和安全策略支持的命令与模式可能不同,文中提到的 /goal、/status、/ps、codex resume --last、Auto-approve 或跳过权限模式,请以当前环境实际显示和官方文档为准。

1. 最常见:权限确认 / Human-in-the-loop

Codex 默认可能会在执行某些操作前停下来等待批准,例如:

  • 运行终端命令,尤其是需要更高权限的命令;
  • 写文件或覆盖文件;
  • 执行可能有风险的操作;
  • 新版本对 elevated permissions 的额外询问。

如果你不在屏幕前点批准,任务看起来就会一直停在那里。

解决办法:

  • 打开 Auto-approve 或 dangerously-skip-permissions 模式(如果环境安全)
  • 用 /goal 或 Goal 模式让它持续跑到目标完成
  • 提前把常用命令加入 allowlist

权限确认是安全边界,不应简单当成故障绕过。对于删除文件、修改生产环境、上传数据或执行未知脚本,仍应保留人工确认。

2. 用量限制:Quota / Rate Limit

Codex 可能存在按时间窗口或周期计算的使用上限。达到限制后,任务可能中断;有时连正在进行的 turn 也会被终止。

如果任务在没有明显错误、没有等待提示的情况下突然结束,可以检查当前账户或工作区的用量状态。具体限额、窗口长度和重置时间会随账户、模型、套餐和产品版本变化,不应把某个固定的“五小时限额”或周限额当成所有用户都相同的规则。

处理方法

  • 查看 Codex 当前显示的用量、限额和重置时间。
  • 把长任务拆成几个可独立验证的里程碑,避免一次 turn 覆盖过多工作。
  • 在开始长任务前,先保存当前进度、变更文件和下一步目标。
  • 触达限额后,等待重置或切换到当前账户实际可用的模型与环境。

3. 模型自己“提前收工”

这属于模型行为或任务管理问题,常见表现包括:

  • 长任务做到一半,模型认为“差不多了”,调用 final 结束;
  • 上下文被 compact 后,之前的工作动量丢失,开始等待新的指令;
  • Goal 模式进入类似 Remain paused 的暂停状态循环。

处理方法

重新发送明确的继续指令,例如:

继续完成之前的任务。先检查当前文件、测试结果和未完成事项,再从上一个未完成步骤继续,直到达到原定结束条件。

也可以使用更短的:

continue
keep going
resume from last step

不要只说“继续”,最好同时告诉它:当前目标、已完成部分、未完成部分和完成标准。

4. 其他常见原因

模型容量不足

如果出现 Selected model is at capacity 一类提示,通常表示所选模型当前暂时无法接收任务。可以等待一段时间,或切换到当前可用的模型。

网络或连接短暂中断

网络断开后,前端可能没有立即恢复到正确状态。先确认页面连接是否恢复,再检查任务是否仍在运行;不要在不确定状态下重复提交可能产生副作用的命令。

上下文过长

上下文过长可能导致响应变慢、压缩频繁,或者模型丢失任务细节。可以主动执行 /compact(如果当前环境支持),然后明确告诉 Codex:

继续完成之前的任务。请先读取当前项目状态和已有变更,不要重新开始,也不要重复已经完成的工作。

实用应对方法(按优先级)

  1. 开启更自主的模式
  • 使用 Goal 模式并设置清晰结束条件
  • 打开 auto-approve(如果安全)
  • 把任务拆成更小的里程碑,减少一次跑太长
  1. 减少上下文压力

主动执行 /compact,然后告诉它“继续完成之前的任务”。

  1. 换模型或降低推理强度

有时候某些模型变体(比如某些 terra/luna 配置)更容易提前停。

实用应对顺序

第一步:检查当前状态

先判断 Codex 是在等批准、后台命令仍在运行,还是已经结束。可以尝试当前环境支持的 /status 或 /ps;不同界面和版本的命令可能不同。

同时检查:

  • 是否出现权限批准提示;
  • 终端命令是否仍在运行;
  • 是否有错误、限额或模型容量提示;
  • 工作区是否出现新的文件变更;
  • 测试、构建或开发服务器是否仍然存活。

第二步:明确要求继续

建议使用包含上下文的指令:

继续完成当前目标。请先检查已完成的文件、测试输出和 git diff,识别最后一个未完成步骤,然后继续执行;不要重复提交已经完成的工作。

如果使用 CLI,某些环境可能支持类似下面的恢复命令:

codex resume --last

该命令是否可用取决于当前 CLI 版本和运行方式;执行前先查看当前版本的帮助信息。

第三步:降低单次任务压力

  • 将大任务拆成需求分析、实现、测试、修复和提交几个里程碑;
  • 每个里程碑结束后保存文件和测试结果;
  • 减少一次性提供的无关上下文;
  • 在长任务开始时写清完成标准和禁止事项。

第四步:调整自主程度或模型

在安全范围内,可以使用更少人工打断的模式;如果某个模型变体频繁提前停止,也可以尝试当前环境提供的其他模型或降低推理强度。不要把特定模型(例如 terra 或 luna)的行为概括为对所有账户和版本都成立的规律。