Codex CLIで過去の応答が見られない?
(tmuxのコピーモード)

Codex CLIを使っていて、「さっきの応答をもう一度読み返したい」と思ったことはないでしょうか。
↑キーを押したら過去の応答ではなく自分のプロンプトが戻ってきて、「あれ?」となった経験があるかもしれません。

私もまったく同じ状況に陥りました。
原因はCodex CLIではなく、tmuxの仕組みにありました。
1

関連記事

1. 何が起きていたのか

私の接続構成はこうなっています。

何が起きていたのか 接続構成 WezTerm ssh tmux Codex CLI ↑キー → シェル入力履歴が表示される Codexの応答は表示されない 原因はCodex CLIではなく tmux の仕組み コピーモードで解決できる
WezTerm → ssh → tmux → Codex CLI

この構成で↑キーを押すと、Codexの過去の応答ではなく、シェルの入力履歴が表示されます。
↑キーはシェルが管理している「自分が過去に打ったコマンド」を呼び出す操作で、Codexの応答とは無関係です。

「Codexの応答を遡れた気がする」という瞬間もありました。
これはtmuxのコピーモードに偶然入っていたためです。

1.1. 3つの「履歴」が混在している

ターミナル周りには、独立した履歴が3つあります。

3つの履歴が混在している WezTerm 画面出力を そのまま保存 マウスホイールで 遡れる ※tmuxなし環境のみ tmux 内部履歴 tmux独自の バッファ コピーモードで 自由にスクロール可 ← ここを使う シェル履歴 bash / zsh が 管理するコマンド ↑キーで呼び出し 応答は含まれない ↑キーの正体はこれ

WezTermのスクロールバックは、端末エミュレータが画面に出力したテキストをそのまま保存したものです。
tmuxを使っていない環境ではマウスホイールで遡れます。
2

tmuxの内部履歴は、tmuxが独自に持つバッファです。
コピーモードに入ると、ここを自由にスクロールできます。
3

シェルの入力履歴は、bashやzshが管理するもので、↑キーで呼び出せます。
自分が過去に入力したコマンドのみが対象で、Codexの応答は含まれません。
4

↑キーを押したときに出てきたのは3番目、つまりシェルの入力履歴でした。
Codexの応答を遡るには2番目、tmuxの内部履歴にアクセスする必要があります。

2. コピーモードの使い方

tmuxのコピーモードは、tmuxが画面制御を引き受けて履歴をスクロールできるようにするモードです。

コピーモードの使い方 Ctrl+b [ 入る コピーモード開始 スクロール ↑↓ / PageUp/Down q 抜ける 通常モードに戻る Tips: viキーバインド有効化 ~/.config/tmux/tmux.conf に追記 set -g mode-keys vi k/j で上下、Ctrl+u/d で半ページ、/ で検索

通常時はキー入力がそのままアプリに送られますが、コピーモード中はtmuxがキーを解釈します。

操作キー
コピーモードに入るCtrl+b [
抜けるq
上にスクロール または PageUp
下にスクロール または PageDown

Ctrl+b はtmuxのプレフィックスキーで、tmuxへの命令はすべてここから始まります。
5

viキーバインドを有効にすると、kj で上下移動、Ctrl+uCtrl+d で半ページ移動、/ で検索もできます。
~/.config/tmux/tmux.conf に以下を追記すると有効になります。
6

set -g mode-keys viCode language: JavaScript (javascript)

3. まとめ

  • ↑キーで出てくるのはシェルの入力履歴で、Codexの応答ではない
  • Codexの過去の応答を読み返すには Ctrl+b [ でコピーモードに入る
  • 読み終わったら q で通常モードに戻る

tmuxを使っているとキー入力を「誰が処理しているか」が状況によって変わります。
コピーモードの存在を知っておくだけで、作業中の「あれ?」がかなり減ります。

  1. Codex CLIはOpenAIが提供するオープンソースのコーディングエージェントです。ローカルのターミナルから直接コードの読み取り・変更・実行を行えます。 – Codex CLI Overview
  2. WezTermはRustで実装されたGPUアクセラレーション対応のクロスプラットフォームターミナルエミュレータです。スクロールバック履歴の検索機能も内蔵しています。 – WezTerm – Wez’s Terminal Emulator
  3. tmuxの履歴バッファのデフォルトは2000行です。長い出力が必要な場合は set -g history-limit 10000 のように ~/.config/tmux/tmux.conf で増やせます。 – Advanced Use · tmux/tmux Wiki
  4. シェルの入力履歴はGNU Readlineが管理しています。bashでは HISTSIZE で件数を、HISTFILE で保存先を制御できます。zshでは HISTFILESAVEHIST が対応する変数です。 – Comparison of command shells – Wikipedia
  5. プレフィックスキーは変更可能です。Ctrl+a に変更したい場合は set -g prefix C-aunbind C-b を設定ファイルに追記します。 – tmux cheatsheet
  6. コピーモードでの検索はviモードでは /(下方向)と ?(上方向)、Emacsモードでは Ctrl+s(下方向)と Ctrl+r(上方向)です。 – tmux in practice: scrollback buffer