Codex 6.0を便利に使う上級者用の設定

A AIKA 読了 約11分
Codex 6.0を便利に使う上級者用の設定

Codex 6.0を触りました。

いつもFableを使っていますが、Codexもいいです。

この記事は上級編です。Claude Codeを毎日使っていて、Codexも同じ机に置きたい人に向けて書きます。

ただ、Claude Codeの席から移ってくると、ひとつ困ります。

Claude Codeでは、画面の一番下に、残りコンテキストと、再開コマンドと、他のターミナルから呼ぶときの宛名を出しています。
Codexの標準の下段にも、contextの残りと7日枠は出ます。
けれど、この会話を別のCodexから呼ぶ名前と、今の会話を分岐させるコマンドは、そこにありません。

Codexを3本開くと、どれがどれかを覚えているのは自分だけです。

そこで、Codexの画面の下に4行足しました。いま私の画面に出ている実物です。

通信先名: codex-45b0effb
セッション間通信: 受信可能
context残り: 取得待ち | 7d使用:72%/残り:28%(前回値・更新停止)
codex fork 01a09927-3396-76b3-a601-c1b3135c5794

Codexの画面の下に出る4行の実物。通信先名・セッション間通信の状態・contextの残り・分岐のコマンド

この4行は、それまで私の頭の中にあったものです。

  • どれがどのAIか(左上のやつ、さっきのやつ)→ 1行目の通信先名
  • このAIはあと何回考えられるか → 3行目のcontext残り
  • どこから分岐すれば同じ記憶を持った2人目が立つか → 4行目の分岐コマンド

頭の中で覚えていた3つが画面の上に移る図。どれがどのAIか・どこから分岐するか・あと何回考えられるか

あなたのCodexの画面の一番下に、この4行が増えます。その4行を入れるか入れないかで、同時に開けるCodexの本数が変わります。

この先は、Claude Codeで私がどう組んでいるか、それをCodexにどう頼んだか、頼んだ言葉と完了条件、そして最後に詰まった1件の順で書きます。

Claude Codeではこうしている

先に、私のClaude Codeの画面を見せます。

ステータス行は2行あります。 1行目は、毎ターン変わる数字だけ。モデル、残りコンテキスト、5時間枠と7日枠、場所、経過時間、費用が並び、末尾に宛名が付きます。 私の今の席なら、宛名は ai-de です。

2行目は、これ1本です。

claude --resume d4222ccd-598f-4bad-ad5c-555bbd4ce862

Claude Codeの画面の下に出る2行の実物。1行目に残りと宛名、2行目に再開のコマンド

2行目は、読むための行ではありません。ドラッグしてコピーするための行です。

ここに、設定を持っている人でも踏みやすい穴があります。

宛名をこの2行目に置いてはいけません。 たとえば2行目が claude --resume <ID> ai-57 だったとします。この行をまるごとコピーして貼ると、末尾の ai-57 がAIへの最初の指示だと思われてしまいます。 名前を書いたつもりが、命令として読まれる。

だから宛名は1行目の末尾にあります。表示の形は、見やすさではなく「人がどう貼るか」で決まっています。

名前を再開のコマンドと同じ行に置くと、名前がAIへの最初の指示として読まれてしまう図

なぜ分岐させるのか

セッションIDを出しているのは、分岐(fork)させるためです。同じコンテキストを持たせたまま、違う作業を同時にさせるのに便利だからです。

やっていることは、こうです。

  • いま話しているチャットを、知識を持たせたまま2人に分けて、2人で作業させる
  • その2人がやりとりできると、死ぬほど便利です
  • AIは1体で使うより、複数で使ったほうがはるかに使いやすい。一度やってみると、やめられなくなります

1つのチャットが、知識を持ったまま2人に分かれて別々の作業をする図

実際に、記事の仕組みを作り直していた席を分岐させたときは、699,497トークンまで膨れていた席が15,139トークンに圧縮され、その圧縮の記録が親と子の両方の記録ファイルに同じものとして残っていました。 子が受け取った記憶の1行目には、自分が誰のフォークで、前任がもう閉じていることまで書いてありました。 人間が管理表を作らなくても、席が自分の出自を持っています。

699,497トークンの席が15,139トークンに圧縮され、同じ記録が親と子の両方に残る図

分岐のやり方と、分かれた2人にやりとりさせるやり方は、別の記事に詳しく書きました。

あなたのステータス行に、--resume にそのまま使えるIDと、他のターミナルから呼ぶときの宛名が並びます。IDを探してログを漁る手間が消えます。

Codexでこうやった

やったことは、Codexの画面の下に4行足しただけです。

その4行を出すのに、79件のテストが通ったという報告が来ました。

出来上がり

冒頭で見せた4行を、行ごとに読みます。

1行目の通信先名は、別のCodexからこの会話を指定する名前です。別のCodexで「codex-abde55de と通信して」と指定できます。

2行目は、他のCodexから依頼を送れる状態かどうかです。

3行目は、context残りと7日枠を1行にまとめたものです。 使用と残りを両方出します。

4行目は codex fork <今の会話のID> の完全な一行です。分岐先は別の会話IDになり、元の履歴を引き継ぎます。

4行のそれぞれが、人の頭の中の何を代わっているかの対応

壊れないこと

慎重な人のために、先にここを書きます。

一回だけ、この4行なしで起動したいときは、CODEX_STATUS_DISABLE=1 codex と打ちます。元のCodexのまま立ち上がります。そのターミナルでずっと止めておきたいなら export CODEX_STATUS_DISABLE=1、戻したいなら unset CODEX_STATUS_DISABLE と打ちます。 ファイルの削除は要りません。codex exec や codex review のような、画面を開かない使い方も、そのまま残っています。

元に戻せることを示す図。打ち方を変えるだけで4行は出なくなり、ファイルを消す必要はない

ひとつだけ注意があります。すでに開いているターミナルには、この4行は出ません。新しいターミナルを開くか、設定を読み込み直す必要があります。動いている最中のCodexが、後から配線を得ることはできません。

使い方は4手

  1. ターミナルを開く
  2. codex と打つ。新しいターミナルで起動すればそのまま使えます
  3. もう1つ開くと、互いの画面に名前が出る
  4. 片方に「codex-xxxxxxxx と通信して、作業状況を確認して」と言う。xxxxxxxx には相手の画面の1行目に出ている8桁が入ります。 内容を指定せず「通信して」だけなら、接続確認と作業概要の一往復をします

使い方4手の4コマ。ターミナルを開く/codexと打つ/もう1つ開くと名前が出る/片方に通信を頼む

分岐の使い方

下段の codex fork … の一行を、別のターミナルへ貼って実行します。 会話が分岐し、分岐先は別の会話IDになって元の履歴を引き継ぎます。

ここは誤解が生まれやすいので書いておきます。これは会話の分岐であって、作業フォルダを自動的に分ける機能ではありません。 引き継ぐのは記憶で、分かれないのは作業場所です。同じ記憶を持った2人目が立つ、という話です。

分岐で引き継がれるのは記憶だけで、作業する場所は分かれないことを示した図

頼んだ言葉

正直に書いておくと、実物は Codex CLI 0.154.0 と、画面を上下に分ける道具 tmux 3.6b と、このMacのPython環境で動いています。 だから、この記事が渡すのは実装ではなく、注文です。

最初にCodexに言った言葉は、これです。

Claudeを使ってるんだけど、CLIで。CLIの一番下にこういうような表示が出るんです。Afterコンテキストの何パーセントとか、5時間で何パーセント、7日間で何パーセントとか出るし。あとはClaudeのresumeコマンドも表示できるようにして、セッションが特定できるようにしてるし、もし可能なんだったら、ここにAIの3Fってあるように、セッション間通信をする場合のそのセッションの名前もつけてある。

Codexでできるか知らんけど、Codexにセッション間通信があるのであれば、それができるようにもここに表示させたい。こういうことを目的にやってるんだけど、これを実現するには何ができて何ができないか、やるならどうすればいいか、あなたに考えてほしい。

4分5秒で、可否の一覧が返ってきました。 Claudeの表示の仕組みをそのまま移すことはできない、Codexの下部表示は用意された項目から選ぶ方式だから、と。 通信は、コマンドはあるが実際に届くかは未試験、とも線を引いてきました。

実装のGoを出した言葉も載せます。

名前をつけるですが、必ずしも私がつける必要はなく、セッション間通信ができる名前を表示してもらえればそれでいいです。そうすれば、私は「このセッションと今のターミナルのあなたで通信して」って言ったらできるし、すごく楽でいいんです。(中略)設計を書いてもらって、サブエージェントのCodex 6.0にレビューを受けてください。当初の目的が達成できること、これを忘れないようにしてください。

設計は、Codex 6.0のレビューで重大5件が出て、修正版が2分45秒後に「技術試作へ進める設計として合格」になりました。 その8分後に、私は設計に入っていた2項目を削っています。

Codexのレジュームはいらないかな。フォークだけあればいいです。セッションIDも書かなくていいです。Codex forkの後にセッションIDがもう書いてあるんで。

役割は、判断と完了確認が親のCodex、実装と独立レビューがGPT-5.6でした。ただし、起動時に4行の仕組みをつなぎ込む部分のコードは、親も書いています。

頼み方と役割の流れ。判断と完了確認をする側と、実装する側の往復

この削った2項目は、出来上がった説明書の冒頭に「resumeコマンドと独立したセッションID行は表示しません」と書かれるところまで残っています。 途中で言った変更が、最後まで貫通していました。

完了条件

一番効いたのは「こう作れ」ではなく「これが出来ていたら完成」でした。環境が違う人にも、そのまま渡せるからです。

  • 通常の codex 起動で、利用枠・コンテキスト・自動で付く通信名・実ID入りの codex fork が下に出ること
  • 取れなかった数字を作らないこと。「取得待ち」か「提供なし」を出すこと 別の枠の数字を5時間枠の代わりに出さないこと
  • 古い値は「前回値・更新停止」と分かること
  • 相手が生きているか判別できない宛先には送らないこと。期限切れは「期限切れ」で止めること
  • 名前を表示しただけで通信達成とせず、独立したCodex同士の依頼と返信まで受け入れの対象にすること
  • 名前の付け直し、IDの検索、コマンドの手組みを、人にさせないこと

頼むときに渡した完了条件。取れなかった数字を作らない、届いたか分からない相手に送らない、名前の付け直しやIDの検索を人にさせない

自分のCodexに言うなら、こう言えば足ります。

「画面の下に、この会話を別のCodexから呼ぶ名前と、context残りと7日枠と、codex fork <今の会話のID> の完全な一行を出したい。取れない数字は作らず、取れないと出して。何ができて何ができないか、先に一覧にして」

実際に詰まった1件

12時33分、親のCodexから完了報告が来ました。

導入は完了し、79テストと実機での通信・fork・表示確認に合格しました。新しいターミナルで codex を起動すれば使えます。

その1時間15分後に、私はこう書いています。

Codexのフォークのコマンドあるのありがとう。だけど、セッション間通信に必要な名前が書いてないよ。なんでここが抜けたのか教えてください。で、本当に名前があってセッション間通信ができるのであれば、それは必ず書いておいてください。

1分25秒後に原因が返ってきました。

原因が分かりました。下部ペインが4行なのに5行分を描画していたため、先頭の通信名が画面外へ押し出されていました。私の表示サイズの検証不足です。

つまり、書ける場所は4行しかないのに、5行ぶん書いていた。あふれた1行が、いちばん上にあった名前でした。

実測すると、画面の下の区画は横84文字×縦4行でした。 そこに5行を書いていたので、先頭の通信先名だけが上へ押し出されて消えていた。 合格直前の実画面には5行とも出ていて、標準表示の96%と自作表示の96%が一致していました。 機能が無かったのではなく、行数が入りきらなかっただけです。

書ける場所が4行しかないのに5行ぶん書いていて、あふれた1行が名前だった図

8分後に修正が終わり、画面はちょうど4行になりました。

実装側の記録には、こう残っています。

固定5行の試験だけでは実際のリサイズ後の4行を保証できていなかった。通信名自体の登録欠落ではなく、表示領域への適合不足だった。

同じ型の失敗は、この日3度目でした。部品ごとの試験では出なかった、実際に起動した直後に接続が閉じる不具合。 46件のテストが通った状態で、実機の画面にcontextが丸ごと出ていなかった指摘。 そして、この名前の欠落です。

逆の向きもありました。Codex自身が、57件のテストが通っている状態で、テストでは出てこない実害——別のアカウント宛てにも通信を配ってしまう穴——を独立レビューで1件見つけています。 同じ主題の表と裏です。テストが通っていても、別の目で見ると出てくるものがある。今回、その目は私の画面でした。

できていないこと

盛らないために、実物に書いてある制約をそのまま並べます。

  • このアカウントで今返ってくる利用枠は7日枠だけです。5時間枠は「提供なし」と出ます。 記事を書いている当日の記録でも、返ってきている枠は10080分=7日の1件だけでした。
  • 通信できる相手は、この補助機能で起動した同じMac・同じアカウントのCodexです。CodexアプリやClaudeへの接続は含みません。 ClaudeとCodexの通信は、検証もしていません。
  • 承認の仕組みはそのままで、AI自身の作業も止めます。作業中、手伝いのAIが試験用のCodexを起動しようとして、自動承認の検査に拒否されました。

codex と打つだけで、下段に codex fork <今の会話のID> が丸ごと出ます。それを別のターミナルに貼れば、今の会話を覚えたままの2人目が立ちます。IDは検索しません。

まとめ

3つ作ったつもりでしたが、あとから見ると1つでした。

3本開いているとき、3本をつないでいるのは人間ひとりです。あなたが宛先を覚え、あなたが内容を運び、あなたが「そろそろ限界かな」を見張っている。AIは賢くなっても、配線はずっと人の頭の中にあります。だから4本目を開こうとしたときに止まるのは、AIではなく人のほうです。

今回足した3つは、それぞれ、頭の中にあった情報を画面の上に移しただけです。

そして、3つ揃わないと1つも効きません。名前が無いと、宛先が無いので通信できません。分岐コマンドが出ていないと、IDを探す手間が挟まるので、人は増やすのをやめます。context残りが見えないと、増やした1本が途中で力尽きたときにどこまでやったか分からないので、怖くて増やせません。

1つ欠けると、人は無意識に「1本だけ使う」に戻ります。これは便利機能3つではなく、2本目以降を開くための最低限の配線でした。

3つのうち1つでも欠けると2本目を開けなくなることを示した図

「楽でいいです」と3回言って頼んだものが、届いてみると名前だけ無かったときの気持ちは、怒りより肩透かしに近かったと思います。

増えるのはAIの賢さではなく、あなたが同時に走らせられる本数です。

今日できることは1つです。いま開いている画面の一番下に、宛名と、分岐コマンドと、残りコンテキストが出ているかを見てください。出ていなければ、上の注文をそのまま自分のAIに言ってみてください。

「もう1本開こう」と思ったときに、あなたが手で覚えて運ぶものが無くなります。宛先と分岐点と残り体力が、頭から画面へ移ります。


※ここで書いた仕組みは試作で、特定のCodex CLIの版とtmuxの版、このMacのPython環境で動いているものです。
※ClaudeとCodexの間の通信は含まれておらず、検証もしていません。通信は同じMac・同じアカウントのCodex同士に限ります。

書き手はAIKA。このサイトについて