Codex 升级后文件改动卡片消失:原因与恢复方法
Codex 升级后,代码有改动但对话里的文件改动卡片不再出现,通常不是文件没改,而是模型改用 Python 或 shell 直接写文件,绕过了 apply_patch 结构化补丁。文章梳理模式、工具调用和模型遵循度三类原因,给出提示词、检查清单与兜底方案。
升级到 26.924.22138 后,修改代码时对话里原本会出现的文件改动卡片不再显示,这是讨论里提到的核心问题。卡片不是文件本身,而是客户端把结构化补丁调用渲染出来的可视化结果。卡片消失不等于代码没改:先看 git status 和 git diff,再判断是显示层、工具调用层还是模型遵循层的问题。
先确认改动有没有落盘
打开项目目录,先执行:
git status --short
git diff --stat
git diff
如果 git diff 能看到改动,说明文件已经写入,只是卡片没有渲染出来;如果没有任何改动,说明模型可能只在聊天里给了代码,或者写文件失败。把这两种情况分开,后面的排查会清晰很多。
文件改动卡片为什么会消失
卡片通常来自模型对结构化补丁工具的调用。Codex 在修改文件时如果使用 apply_patch,客户端就能拿到“哪个文件、改了哪些行”的信息,进而渲染成卡片。反过来,如果模型用 Python 脚本、cat、sed、heredoc 或 shell 重定向直接覆盖文件,客户端看到的只是一条命令及其输出,无法稳定还原逐文件差异,卡片就可能不出现。
常见的几类原因可以这样对照:
| 现象 | 更可能的原因 | 先做什么 |
|---|---|---|
卡片没了,但 git diff 有改动 |
模型改用 shell/Python 写文件 | 新会话中明确要求使用 apply_patch |
| 对话只给代码块,没有实际改动 | 处于纯聊天模式,或没有文件工具权限 | 确认当前是 Codex 模式并已打开工作区 |
| 有时有卡片,有时没有 | 模型遵循度波动,或任务太大 | 拆小任务,逐文件修改 |
| 升级后所有新会话都没有卡片 | 可能是版本回归或 UI 问题 | 做最小复现,查官方发布说明 |
需要特别说明工具名:有些回复建议要求模型用 edit 工具,但在不少 Codex 环境里实际暴露的是 apply_patch,并没有名为 edit 的工具。照抄不存在的工具名,可能让模型找不到可用工具,反而退回用 Python 或 shell 写文件。应以当前客户端的工具列表为准。
恢复卡片的可操作步骤
1. 新建会话,避免旧上下文影响
旧会话里可能已经形成“用 Python 改文件”的上下文惯性。先新建一个任务,重新打开项目目录,并确认没有切到纯聊天模式。纯聊天模式只负责对话,不会产生文件改动卡片。
2. 在指令里明确要求使用 apply_patch
可以用一段固定提示词:
修改代码时请使用 apply_patch 生成结构化补丁,不要用 Python 脚本、cat、sed、heredoc 或 shell 重定向直接写入文件。每完成一组修改,列出被修改的文件。
如果当前环境的工具名不是 apply_patch,把它替换成工具列表里真实存在的名称。不要同时要求两个不存在的工具。
3. 把规则写进项目级指令
如果当前版本支持项目级指令文件,例如 AGENTS.md,可以把约束固定下来:
# 代码修改约定
- 修改源码必须通过 apply_patch。
- 禁止用 Python 或 shell 重定向写源码。
- 每次修改后列出变更文件。
这样比每次口头提醒更稳定,也能减少长会话中规则被冲淡的概率。
4. 把任务拆小,逐文件修改
一次让模型重构十几个文件,它更容易选择“用脚本批量处理”的捷径。可以改成“只改这个文件”“先只改这个函数”,并在每轮结束后检查 git diff。小步修改既容易触发结构化补丁,也方便回滚。
5. 查看工具调用记录
展开对话里的工具调用详情,确认模型到底有没有调用 apply_patch。如果调用了但卡片仍然不出现,问题更可能在客户端渲染或版本回归;如果没有调用,问题就在提示词、模式或模型遵循度。
6. 用 git diff 做兜底
卡片只是可观测性,不是代码安全的唯一保障。开始任务前先提交或暂存当前改动,任务结束后用 git diff 审查,再运行测试。即使卡片暂时不显示,也不会因此丢失对改动的掌控。
版本、模式与模型波动的取舍
模型能力波动确实会让指令遵循变差,表现为有时用 apply_patch、有时用 Python 写文件。这类情况通常不是所有会话必然复现,换用当前账号可用的稳定模型或调整推理档位后再试,更有参考价值。
如果新会话、明确提示、最小复现都失败,而且升级前正常、升级后所有项目都没有卡片,才更像版本回归或 UI 问题。此时先查看官方发布说明和已知问题;需要回退时只从官方渠道获取旧版本,不要安装来路不明的包。版本号和功能状态会变化,具体以官方最新说明为准。
模式问题也要排除:如果客户端有 Codex 与聊天模式的切换,确认当前处于能调用文件工具的模式。误切到纯聊天模式时,模型只能回复代码块,自然不会有改动卡片。
检查清单
- 运行
git status和git diff,确认改动是否真的落盘。 - 新建会话,确认处于 Codex 模式并已打开正确工作区。
- 明确要求使用
apply_patch,禁止 Python/shell 直接写文件。 - 如有项目级指令文件,把规则固化进去。
- 展开工具调用记录,确认是否真的调用了补丁工具。
- 用一个文件的最小修改做复现,排除任务过大和上下文干扰。
- 仍不显示时,查官方发布说明,必要时按官方方式更新或回退并反馈。
小结
文件改动卡片消失,多数时候不是代码没改,而是模型绕过了结构化补丁工具。先把 git diff 作为事实来源,再用明确提示词和项目规则把模型拉回 apply_patch;如果最小复现仍然失败,再按版本回归或模式问题处理。这样既能恢复卡片,也不会把代码审查完全寄托在 UI 上。