故障处理

Codex CLI 翻不到之前的输出?终端模式、tmux 与回看验证

Codex CLI 无法向上滚动,或 tmux 只显示启动前的内容?先区分 Fullscreen、Scrollback 与终端历史,按 /tui 和 --no-alt-screen 对照,并用编号输出验证;看不到不等于记录丢失。

Codex 已经回复了一长段,往上滚却只能看到启动 Codex 之前的 shell 内容;或者在 tmux 中按回看快捷键,只看到很少的历史行。先查是谁在管理滚动:Codex 的 Fullscreen 视图、终端自身,还是 tmux 的 copy-mode。当前视图翻不到,不能直接认定输出没有生成或会话记录已经丢失。

本文处理本地交互式 Codex CLI 的回看问题。脚本或 CI 中的 codex exec 没输出,转到输出流与退出状态排查;要继续另一条已保存聊天,参考恢复会话指南。两种情况不靠切终端模式判断。

先按现象选检查起点

看到的情况 先检查 不要直接下的结论
回滚出现启动 Codex 前的内容 CLI 的终端模式,以及当前回看入口 新回复已被删除
tmux copy-mode 历史很少或显示 [0/0] 当前 pane、模式与实际保留历史 整条会话没有保存
只能看到末段,开头或代码缺行 用已知内容对照视图与导出 最后一行出现就说明全文完整
调整窗格大小后才错位 固定尺寸与调整尺寸的单独对照 都是同一个滚动模式问题
输出中的字符变成乱码 原文件、解码和显示是否一致 切模式能修复已写坏的文件

1. 先记录出问题的执行端,不急着重装

在运行 CLI 的那个环境中检查版本与帮助;SSH、WSL 和容器要在其内部检查,不能拿宿主机版本代替:

codex --version
codex --help

同时记录终端程序及版本、系统、是否经过 SSH 或 tmux,以及窗口大小。IDE 的集成终端运行 CLI 与 IDE 扩展面板是不同入口;本文不把 CLI 参数当成扩展设置。

预期结果: 能对应具体客户端和执行环境,并确认本机帮助是否包含 --no-alt-screen。在 Codex 输入框查看 /tui 是否可用,而不是在 shell 中执行 /tui。不存在时先核客户端、实际可执行文件和安装渠道,见版本与入口检查;不要先删除配置或历史。

Fullscreen 和 Scrollback 的区别

当前官方命令说明提供两种终端模式。Fullscreen 在 Codex 的全屏视图里滚动;Scrollback 使用终端原生回看。终端滚轮、终端滚动条、Codex 内的导航和 tmux copy-mode 可能面对不同的缓冲区,快捷键也可能被某一层接收。

不要把“双击 Esc”“方向键上下”当成所有版本通用的回看方法。先看当前 CLI 的 ? 帮助或键位设置;编辑历史消息的操作不等于只读回看,不要误提交改写后的提示。

2026 年 9 月的 #48057 中,贡献者解释了当时 Fullscreen 默认行为与 /tui 切换;#48315 的 0.157.0 Linux 报告作者则在切换并重启后关闭了问题。这些记录说明有过相符的用户卡点,不证明当前所有版本默认相同、所有缺行都同因,或某一发行版已修复全部问题。

2. 用 /tui 选择 Scrollback,再重启验证

适用条件: 当前交互 CLI 支持 /tui,希望使用终端原生历史回看。

  1. 在仍运行的 Codex 输入框中输入 /tui。
  2. 选择 Scrollback 并确认,观察保存提示。
  3. 记录当前聊天与项目位置,保存需要保留的工作;待当前回合和相关命令妥善结束,再退出并重新启动 CLI。
  4. 如需继续原聊天,用已确认的恢复入口选回目标会话;重新启动不等于自动恢复正确聊天。

预期结果: 下一次启动采用保存的模式。仅看到“已保存”还不够,必须继续第 4 节的回看检查;模式变更也不能保证重新补出终端早已丢弃的历史行。官方要求重启生效

若需要一次启动对照,且本机帮助确认支持,可在保存工作并退出 CLI 后,在同一环境的 shell 中运行:

codex --no-alt-screen

若要继续指定会话,应先看当前 codex resume --help,选回正确会话;不要为了测试在重要任务中盲目重复请求。--no-alt-screen 是启动参数,当前 CLI 帮助说明它以 inline 模式保留终端 scrollback;它不是清理会话或扩大执行权限的开关。

失败后继续: 启动参数仍可覆盖保存选择,检查真实启动命令、别名或包装脚本。官方高级配置也列出 tui.alternate_screen,但不要把手改一个键视为所有版本的模式选择都已同步;优先使用本机实际提供的菜单与帮助。配置来源不明时参考配置加载排查,每次只改一项。

3. 在 tmux 中,单独核对 copy-mode

适用条件: CLI 确实运行在 tmux pane 内。先在相同 tmux 环境的 shell 中读取:

tmux -V
tmux show-options -v prefix
tmux show-options -v history-limit

这些命令查询版本和当前会话选项,不会增加历史或还原内容。若终端说找不到 tmux 或无法连接 server,先确认检查位置;不要因此在另一台机器新建会话,把它当作原故障的证据。

默认 prefix 是 Ctrl+B:按下后松开,再按 [ 进入 copy-mode;使用自定义 prefix 时按实际配置。观察模式提示,再按当前 copy-mode 键表进行回看和退出,不把按键继续发给正在输入的 Codex。多层 tmux/SSH 还要确认是哪一层接收了 prefix。tmux 官方手册

预期结果: 先确认进入了目标 pane 的 copy-mode,再验证指定内容是否可见。终端滚轮无效,不等于 tmux copy-mode 也无效;反过来也一样。仅有 [0/0],还不能解释记录去向。

tmux 的 pane 历史有长度边界;alternate screen 与普通滚动历史也不同。本次隔离检查中,普通编号输出能进入历史,alternate screen 中较早的编号却不在同一历史捕获里;退出 alternate screen 后原普通屏幕仍可恢复。因此,不要仅为回看而全局关闭 tmux 的 alternate-screen 支持,也不要认为调大历史上限会找回已经丢弃的旧行。先完成单一模式对照,仍失败再记录原因未明。

4. 用已知编号验证,不只问“现在能滚了吗”

先把“普通 shell 的回滚”和“Codex 回复的回看”分开测试。只在无敏感资料、没有正在执行的重要操作的练习会话中进行。

先检查终端与 tmux 的基础回滚

下面适用于 Bash/zsh,使用子 shell 中的临时变量,只打印固定文字,不读写项目文件:

(
  probe_line=1
  while [ "$probe_line" -le 60 ]; do
    printf 'SCROLL_PROBE_%03d\n' "$probe_line"
    probe_line=$((probe_line + 1))
  done
  printf 'CODE_A: alpha\nCODE_B: beta\nCODE_C: gamma\n'
)

窗口若足以显示全部输出,可暂时缩小到需要滚动的高度。先在不经过 tmux 的普通终端练习窗口运行,按该终端支持的原生方式回看;再在 tmux pane 中运行同样样例,分别试原生回看与 copy-mode。两者不是同一个测试结果,逐项记录。Windows 原生 PowerShell 不直接使用这段 shell 代码;WSL 则需确认实际 shell。

通过依据: 能找到 001、030、060,并完整读到三行 CODE 文本。若普通终端样例也不能回看,先查终端的回看入口、缓冲区和键位;若只有 tmux 内失败,查目标层、pane、模式和历史边界。不直接判定 Codex 或持久记录故障。

再检查 Codex 的已完成回复

选一段本来就需要回看的、无敏感内容的已完成回复,记录可核对的首、中、尾和一段多行代码。也可另建练习聊天,要求输出上面的编号序列与三行固定文字、不运行命令和修改文件;这一步会实际请求模型,可能消耗额度,且模型未必按要求输出,需核对实际回复。

在固定窗口尺寸下,对照当前模式和重启后的 Scrollback:能否回看指定片段、顺序是否一致、代码是否缺行。若要检查缩放问题,完成固定尺寸对照后,再单独调整窗口并复查,不同时更换模式、终端与窗口尺寸。

结果 能说明什么 下一步
样例片段都能回看 本次环境与样例通过 再核原回复,不推断所有长会话都正常
切模式后恢复回看 模式差异与本次表现有关 保留版本及对照结果,不宣布所有重绘问题已修复
缺行但导出中有原文 本次导出包含那些内容 继续查回看路径,不报告记录丢失
回看和导出都缺片段 目前还没有取得该片段 核正确聊天、生成情况及导出范围,不能单独证明删除

5. 需要复制或保存时,另验内容完整性

当前官方说明中,/raw 用于更直接的选择与复制,不是“恢复全部旧输出”的命令。需要文件时,待当前回合结束,在支持的 CLI 中使用 /export,或指定一个尚不存在、已授权保存的私有目标:

/export scrollback-check.md

先确认保存位置和重名文件处理,不覆盖已有文件。官方将其描述为导出 Markdown 会话;保存后仍需打开实际文件,对照目标回复的首、中、尾与多行代码。工具调用、工具输出、附件和超长内容是否以你需要的形式保留,要另按实际导出检查,不能由文件存在或导出成功推断。导出说明与raw 模式说明

回看完整、会话导出完整和任务真正完成是不同验收目标。若你要确认代码、测试或交付是否完成,继续按任务状态与实际成果核对,而不是只看最后一条回复。

仍失败时,交出最小复现记录

保留 CLI/终端/tmux/系统版本、执行位置与嵌套关系、启动参数、所选模式、是否重启、固定窗口尺寸、复现步骤和具体缺失编号。分别记录原生回看、copy-mode、Codex 视图与导出结果;不知道哪一层失效时明确写“尚未定位”。截图与日志先去除私人路径、聊天内容和凭据,再交给支持或维护者。

不用清空配置、删会话、全局改 tmux 设置或反复重跑真实任务作为第一步。找不到已保存聊天再转到会话查找;若是文件内容实际发生变化,参考改动范围与编码核对。

本文实际核验范围

2026 年 10 月 23 日,核对上述官方资料;本机为 macOS 27.0.1、Codex CLI 0.163.0-alpha.11.2。tmux 3.7c 来自官方构建发布,校验发行文件 SHA256 后仅在临时目录运行,没有全局安装。这些版本是本次检查环境,不是最低支持版本或故障修复版本。

在独立 PTY、独立 tmux server、空白 HOME 与 CODEX_HOME 下,验证普通编号输出、copy-mode 顶底位置、alternate screen/退出恢复、有限历史与固定短行缩放,源样例文件哈希未变。真实 CLI 菜单保存 Scrollback 后,重启才从 alternate screen 切出;用仅监听本机的固定回复服务对照 Fullscreen、Scrollback 与 --no-alt-screen:前者的 tmux 历史缺首段,后两者可查到所核编号与代码。Fullscreen 下该回复的导出文件仍包含相同片段,直接说明这次“看不到”并不等于记录丢失。测试中短历史上限曾截掉开头,另在足够历史的新 pane 中复验通过;没有把短历史结果算成 CLI 模式故障。

未实测: 原生 Terminal 应用的鼠标/键盘回滚体验、真实模型服务、真实工具输出的导出完整性,以及 Windows、Linux 桌面、SSH 和用户自定义键位组合。原生终端 UI 自动操作受限,因此终端窗口步骤依据官方说明和读者对照方法,不冒称逐端实测;PTY 与 tmux 的检查也不代替 GUI 操作。没有读取真实认证或历史、修改用户配置或连接共享 Codex daemon;样例服务不代表模型理解或生产服务行为。局部片段通过不能证明全部会话、所有代码或任务已完整保存。

社区讨论

补充你的经验或问题

评论由 GitHub Discussions 承载;参与讨论需要登录 GitHub。