Codexの「リモート圧縮」、画像を含む会話履歴でトークン予算を守れていなかったバグが直った
Codex 0.150.1(2026年8月27日)で、保持している画像をトークン予算に正しく算入しないままリモート圧縮していたバグが修正され、この挙動がデフォルトで有効になった。スクリーンショットを多用するセッションで会話履歴が想定より膨らんでいた可能性がある変更を、実装PRの本文まで遡って確認した。

目次
Codexには、会話が長くなったときに古い履歴を要約して圧縮する「リモート圧縮」という仕組みがある。0.150.1(2026年8月27日公開)のリリースノートに、この圧縮が画像を正しく扱えていなかったというバグ修正が記録されている。
3行まとめ
- Codexのリモート圧縮は、保持中の画像をトークン予算に算入していなかった。この機能フラグ
compaction_image_budgetは0.150.0でオプトイン導入(PR #40280)され、0.150.1でデフォルト有効化(PR #40994→#41003)された- PR差分を確認すると、フラグの定義は
stage: UnderDevelopment, default_enabled: falseからstage: Stable, default_enabled: trueへ変わっていた。無効化は~/.codex/config.tomlの[features] compaction_image_budget = falseで今も可能- 画像・その直前の開始タグ・直後の終了タグは「不可分な単位」として扱われ、途中で分割されない。一方
InputAudio(音声)は今回の変更後もトークン予算に算入されない(0固定)という非対称な仕様が実装コードから確認できた
Remote compaction now counts retained images toward its token budget by default, trimming older images as needed. (#41003)
(リモート圧縮は、保持している画像をデフォルトでトークン予算に算入するようになり、必要に応じて古い画像から間引くようになった)
何が壊れていたのか
この変更を最初に実装したPR #40280(0.150.0でオプトイン機能として導入)の本文には、バグの原因がこう説明されている。
Remote compaction's retained-message budget counted text but not images, so image-heavy history could retain more context than the budget represented.
(リモート圧縮の保持メッセージ予算は、テキストは数えるが画像は数えていなかった。そのため画像の多い履歴では、予算が示す以上のコンテキストを保持してしまうことがあった)
つまり、スクリーンショットを貼り付けながら長時間作業するようなセッションでは、圧縮の目安になっている「トークン予算」が実際の消費量を過小評価していた可能性がある、というバグだ。修正内容は次のように説明されている。
- Add the opt-in
compaction_image_budgetfeature to charge retained images using the existing image size estimate.- Keep images and their adjacent labels atomic when truncating a boundary message, while preserving existing text, audio, metadata, and client-authored developer-message behavior.
- Stop backfilling older messages when an image at the truncation boundary does not fit.
(オプトインのcompaction_image_budget機能を追加し、既存の画像サイズ推定を使って保持中の画像に対しても課金(トークン予算への算入)する。境界のメッセージを切り詰める際、画像とその隣接ラベルを不可分な単位として扱い、既存のテキスト・音声・メタデータ・クライアントが作成した開発者メッセージの挙動は維持する。切り詰めの境界にある画像が収まらない場合、それより古いメッセージへのバックフィルを止める)
0.150.0では任意設定、0.150.1でデフォルト有効に
この機能自体は0.150.0の時点でcompaction_image_budgetというオプトイン機能として実装されていた(PR #40280)。これをデフォルト有効に切り替えたのはPR #40994「Enable retained-image budgeting by default」で、さらにこのPR #40994を0.150系のリリースラインへバックポートしたのがPR #41003である。0.150.1で既定有効になったのは、この#40994→#41003という系譜による。バックポートPR #41003の本文はこう説明している。
Enable
compaction_image_budgetby default so retained images count against the existing remote-compaction token budget and older images are trimmed as needed. Explicitly disabling the feature preserves the previous behavior.
(compaction_image_budgetをデフォルトで有効にし、保持されている画像が既存のリモート圧縮トークン予算に対して正しく算入され、必要に応じて古い画像から間引かれるようにする。明示的にこの機能を無効化すれば、以前の挙動を維持できる)
明示的に無効化すれば旧挙動に戻せる、という互換性への配慮も明記されている。実際にPR差分を確認すると、この機能フラグの定義自体が次のように書き換わっていた。
| 0.150.0時点(PR #40280) | 0.150.1時点(PR #40994) | |
|---|---|---|
stage |
UnderDevelopment(開発中) |
Stable(安定版) |
default_enabled |
false(既定オフ) |
true(既定オン) |
出典: codex-rs/features/src/lib.rsのPR #40280・#40994差分(2026年8月29日確認)
Codexの機能フラグはFeature::CompactionImageBudgetというRust側の定数と、設定ファイル上のキーcompaction_image_budgetが対応しており、これは他の実験的機能と同じ[features]セクションの仕組みに乗っている。つまり、既定でオンになった今でも、~/.codex/config.tomlに[features]セクションを設けcompaction_image_budget = falseと書けば、明示的に旧挙動へ戻せる、という設計だ。
画像は「不可分な単位」、音声はそもそも予算に入らない
修正の実装コード(compact_remote_v2_images.rs)を確認すると、圧縮時にメッセージを切り詰める際の扱いが、コンテンツの種類によって次のように異なっていた。
- 画像(
InputImage):画像本体と、その前後に隣接するハーネスのタグ(開始・終了を示すテキスト)は「不可分(atomic)」として扱われ、画像だけを部分的に残して隣のタグを消す、といった分割はされない - テキスト(
InputText/OutputText):既存の「中間部分を切り詰める」ポリシーがそのまま適用される - 音声(
InputAudio):トークン数が常に0として計算される。つまり、今回の修正後も音声コンテンツはリモート圧縮のトークン予算に算入されない仕様のままだ
出典: codex-rs/core/src/compact_remote_v2_images.rsのPR #40280差分(2026年8月29日確認)
「画像だけでなく音声も今回の修正で予算に入るようになったのでは」と誤解しそうになるが、実装コードを読む限り、今回のPRが対処したのはあくまで画像の見落としであり、音声を予算計算に含める変更は行われていない。
画像を多用するセッションほど影響が大きい変更
このバグ修正は、コード中心のテキストだけのセッションではほぼ影響がなく、スクリーンショットや図表を貼り付けながら長時間作業するセッションで効いてくる性質のものだ。従来は画像がトークン予算の計算から漏れていた分、実際のコンテキストウィンドウの消費量とCodexが認識している消費量にズレが生じ、想定より早く(あるいは想定と違うタイミングで)コンテキストが逼迫していた可能性がある。
修正前後でのコンテキスト消費量の実測比較はしていない
本記事はCodex 0.150.1のリリースノート本文と、実装PR #40280・デフォルト有効化PR #40994・バックポートPR #41003の本文のみを情報源としている。この記事を書いている自分の手元で、実際に画像を多数含む長いセッションを再現し、修正前後でコンテキストウィンドウの消費量やリモート圧縮のタイミングがどう変わるかを比較する検証は行っていない。
関連記事: Codex Goal Mode 一般提供開始 / コンテキストウィンドウとRAM使用量の計算式 / Codexに「中断されたら実行されるフック」が追加
感想・指摘はコメント欄へ。
出典・参照資料
AIニュースの解説を動画でも
YouTubeでは注目ニュースの背景を解説し、Xでは新着記事をお知らせしています。
コメント
まだコメントはありません。最初のコメントを書いてみませんか?
AIについて聞きたいことはありますか?
質問箱で無料で受け付けています。回答は公開され、他の方の参考にもなります。
質問箱を見る →新しい記事をメールで受け取る
AIの新しい発表を、出典付きで整理して届けます。