Error running remote compact task は、Codexが長い会話を小さな継続用コンテキストへ圧縮できなかったことを示すラッパーです。これだけではネットワーク障害、利用上限、モデル不具合のどれかは決まりません。stream切断、request timeout、providerにcompact routeがない、parameter非互換、context超過、Request blocked、応答の解析失敗、子プロセス終了待ちなどが同じ先頭文の後ろに続きます。
最初に.codexを削除したり、ログアウト・モデル変更・ネットワーク変更・新規チャット作成を同時に行ったりしないでください。完全なエラー、Codexのversionと利用面、時刻、認証方法、最後に完了した操作を保存します。Git差分、未追跡ファイル、動作中プロセス、remote jobも確認します。圧縮の失敗は、直前の書き込みが取り消されたことを意味しません。書き込みを繰り返す前に、部分的に完了していないかを調べる必要があります。
同じ先頭文でも、止まった境界は違う
完全なメッセージを次のように読めば、最初の確認を小さくできます。
streamが完了前に切れた
stream disconnected before completion や stream closed before response.completed は、最終イベントまで接続が続かなかった状態です。Codexを動かしているhostとserviceの間、proxy/VPN、Remote SSH側のネットワーク、またはclient buildを確認します。account、model、project、routeを変えず、元のsessionを一度だけresumeして、前回と同じ地点で止まるかを比較します。
requestがtimeoutした
一時的な需要増加を含むtimeoutなら、短い間隔を置いた一度の再試行には診断価値があります。複数の同じtaskを同時に開始すると、どの処理がfileやremote serviceへ書き込んだか分からなくなります。同じsuffixが繰り返される場合は、待ち時間を延ばす前にrouteとversionを固定して再現性を確認します。
404やparameterエラーになった
404 Not Found は、設定されたbase URLにcompaction endpointがない可能性を示します。通常の/responsesが成功しても、/responses/compact、同じparameter、同じstream eventが実装されているとは限りません。Unknown parameter、service_tier、variant、unexpected outputなどが続く場合も、client・model・custom providerの契約を確認し、完全なresponse bodyを残します。
context、content、processが原因を名乗っている
input exceeds ... context window や ran out of room なら、圧縮対象自体が収まらないか、選択されたmodelのcontext条件が異なります。Request blockedなら同じ入力を何度送ってもtransportの検証にはなりません。timeout waiting for child process to exitなら、watcher、dev server、stdin待ち、child tree、閉じていないhandleを持つ最後のcommandが対象です。この三つを「圧縮サーバーが遅い」でまとめないことが重要です。

ChatGPTログインとcustom providerを混同しない
OpenAIの Compact a response は、公開Responses APIのPOST /responses/compactを説明しています。modelのcompactionガイドでは、結果は継続に使う不透明なstateであり、内部形式へ依存しないよう示されています。
しかし、CodexでChatGPTにログインする経路、OpenAI API keyを直接使う経路、custom provider/base URLを使う経路は同じ契約ではありません。Desktop Appとterminalは異なるproxy環境を持つことがあり、containerやRemote SSHではDNSやcertificateも別です。browserでChatGPTが開く事実はbrowserの経路しか証明せず、通常responseの成功はcompact routeの成功を証明しません。
元のsessionを一度だけ安全に戻す
OpenAIの Codex developer commands では、/status、/compact、codex resume、codex exec resume、codex doctor、/feedbackが別の用途として定義されています。利用中のbuildに表示されるcommandを基準にし、次の順序で一つの境界だけを変えます。
- file変更、実行中process、remote job、すでに発生した可能性があるwriteを記録する。
- 完全なerror、version、surface、認証/provider経路、session IDを保存する。
- 一回限りのstream/timeoutに見えるなら、同じ条件で元のsessionを一度resumeする。
- 404、parameter、parser、child processのように境界が明示されているなら、その一条件だけを修正する。
- read-onlyまたは簡単に戻せる小さな操作で確認してから、元の作業量へ戻す。
resume直後に毎回同じ圧縮へ入り直す場合、loopを続けません。目的、完了済み作業、決定事項、変更file、実施したcheck、未解決risk、次の一手だけを短いhandoffにします。その状態からforkまたは新しいsessionを始めれば、会話の冗長部分を失ってもtaskの状態は残せます。resumeは会話の継続を助けますが、外部への書き込みを自動的にidempotentにはしません。
全削除や全変更は診断にならない
cacheや.codex全体の削除は、壊れたobjectだけでなくsession locator、config、証拠も消す可能性があります。具体的なlocal state破損が示されたときだけ、backup後に対象を限定します。model変更は能力、context、routeを同時に変えるため、成功しても元の原因を特定できません。timeout延長が有効なのは、同じoperationが少し遅れて正常終了すると確認できる場合だけです。404、invalid parameter、policy block、crash、deadlockには効きません。
完全なerrorがHTTP 429やusage windowなら Codexのrate limit診断へ進みます。圧縮が止まった段階か分からない場合は Codex timeoutの境界確認から始めます。commandのnetwork、provider、config優先順位が原因なら Codex sandboxとconfig.tomlで実行環境を分けて確認します。
再現する場合は、Codex versionとsurface、OS、認証種類、secretを除いたprovider/base URL、完全なerrorと時刻、session/request ID、最後に完了した操作、自動または手動compaction、最小再現、必要なlog断片を残します。token、email、private prompt、source code、project識別子は共有前に削除してください。

復旧で優先するのは再試行回数ではありません。suffixが示す境界を一つ選び、その次の可逆な操作で確認することです。先に作業を守れば、次の試行は進捗と診断の両方を生みます。



