コンテンツにスキップ
OmniRoute source

Codex CLI — Configuration with OmniRoute (日本語)

有効な形式は TOML のみです。 現行の Codex は ~/.codex/config.toml のみを読み込みます(codex-cli 0.147.0 で確認済み:codex --help には、 -c/--config のオーバーライドが「~/.codex/config.toml から読み込まれる」と記載されています)。 以前の ~/.codex/config.yaml は旧 npm CLI 用のものであり、何の通知もなく無視されます。 ダッシュボードジェネレーター(/api/cli-tools/apply、ツール codex)は、既存のキーや 他のプロバイダーブロックを維持する保守的なマージ方式で TOML を書き込みます。 API キーは OMNIROUTE_API_KEY に保持され(ファイルには決して書き込まれません)、 残っている旧形式の config.yaml には変更を加えず、移行に関する注記として報告します。

そのまま貼り付けられる config.toml

Section titled “そのまま貼り付けられる config.toml”

<YOUR_HOST> と <YOUR_KEY> を実際の値に置き換えてください:

~/.codex/config.toml
model = "cx/gpt-5.5"
model_provider = "omniroute"
model_reasoning_effort = "xhigh"
model_context_window = 400000
model_auto_compact_token_limit = 350000
tool_output_token_limit = 32768 # ツール呼び出しごとの履歴保存上限
[model_providers.omniroute]
name = "OmniRoute"
base_url = "http://<YOUR_HOST>:20128/v1"
env_key = "OMNIROUTE_API_KEY"
requires_openai_auth = false
wire_api = "responses"
ターミナルウィンドウ
# ~/.bashrc または ~/.zshrc — 実際のキー値。config.toml には決して記載しない
export OMNIROUTE_API_KEY="<YOUR_KEY>"

macOS:ChatGPT アプリに同梱されている Codex

Section titled “macOS:ChatGPT アプリに同梱されている Codex”

ChatGPT デスクトップアプリを通じて Codex をインストールした場合、codex バイナリが アプリバンドル内にのみ存在し、シェルの PATH にまだ含まれていないことがあります。 リソースディレクトリをシェルの起動ファイルに追加してください:

ターミナルウィンドウ
export PATH="/Applications/ChatGPT.app/Contents/Resources:$PATH"

新しいシェルを開き、次のコマンドで確認します:

ターミナルウィンドウ
command -v codex
codex --version

認証なしのローカル OmniRoute:プレースホルダーキーで十分

Section titled “認証なしのローカル OmniRoute:プレースホルダーキーで十分”

Codex は、最初のリクエストが CLI から送信される前に、env_key で指定された 環境変数が存在することを検証します。ローカルの OmniRoute インスタンスで 認証が不要な場合は、空でない任意のプレースホルダーを使用できます:

ターミナルウィンドウ
export OMNIROUTE_API_KEY="${OMNIROUTE_API_KEY:-local}"

OmniRoute サーバーが保護されている場合やリモートにある場合は、代わりに実際のキーを使用してください。

一般的なホスト設定

アクセス方法 URL
ローカルネットワーク http://192.168.0.1:20128/v1
Tailscale http://100.x.x.x:20128/v1
ループバック http://localhost:20128/v1

wire_api = "responses" — すべてのモデルで動作する理由

Section titled “wire_api = "responses" — すべてのモデルで動作する理由”

Codex CLI は 2026 年 2 月に wire_api = "chat"(Chat Completions)を非推奨とし、現在は wire_api = "responses"(OpenAI Responses API)が必須です。v0.138 以降で wire_api = "chat" を設定すると、起動時に即座にクラッシュします。

GLM や Kimi を含む多くのプロバイダーは、現在も Chat Completions エンドポイントしか公開していません。DeepSeek V4 は現在、ネイティブの Responses API と Anthropic 互換エンドポイントの両方を公開しています。OmniRoute はデフォルトで Responses を使用し、DeepSeek の接続ごとに Anthropic 互換性を選択できます。

OmniRoute はこの問題を透過的に解決します:

Codex CLI
→ wire_api = "responses"
→ POST /v1/responses(OmniRoute)
→ OmniRoute がプロバイダーのネイティブプロトコルを選択し、必要に応じて変換
→ POST /responses(DeepSeek V4)または /chat/completions(Mistral / GLM / Kimi / その他)

OmniRoute を使用する場合、別個の変換プロキシは必要ありません。すべてのモデルで wire_api = "responses" を使用します — 残りは OmniRoute が処理します。

wire_api はデフォルトです — このフィールドのデフォルト値は "responses" であり、config.toml から完全に省略できます。意図を明示する目的で文書化する場合に限り、明示的に設定してください。


コンテキストウィンドウと圧縮

Section titled “コンテキストウィンドウと圧縮”
フィールド 説明
model_context_window アクティブなモデルの総トークン予算。モデルが公表している上限に設定します。
model_auto_compact_token_limit 履歴の自動圧縮を開始するしきい値。最大値: model_context_window の90% — 90%を超える値は通知なく無視されます。
tool_output_token_limit ツール呼び出しごとに履歴へ保存される出力トークン数の上限。単一の大きなツール応答によってウィンドウが埋まるのを防ぎます。最大出力ではありません — 履歴への保存上限です。
compact_prompt 圧縮時に使用されるシステムプロンプトのインラインオーバーライド(v0.138以降)。

model_max_output_tokens に関する注意: このフィールドは Codex CLIの設定スキーマには含まれていません(CodexのRustコードベースには存在しません)。設定しても通知なく無視されます。このフィールドに依存せず、履歴に保存されるツール出力の量を制御するには tool_output_token_limit を使用してください。

モデル別コンテキストウィンドウ

Section titled “モデル別コンテキストウィンドウ”
モデル OmniRoute ID コンテキストウィンドウ auto_compact tool_output_limit
GPT-5.5 cx/gpt-5.5 400k(安定)、最大1M 350,000 32,768
Kimi K2.7(思考) kmc/kimi-k2.7 131,072 112,000 32,768
Kimi K2.6 kmc/kimi-k2.6 131,072 112,000 32,768
GLM-5.2 / 5.2-max(思考) glm/glm-5.2 131,072 112,000 32,768
MiMo V2.5 Pro(思考) opencode-go/mimo-v2.5-pro 131,072 112,000 32,768
Qwen 3.7 Plus(思考) opencode-go/qwen3.7-plus 32,768 28,000 16,384
DeepSeek V4 Pro(OllamaCloud) ollamacloud/deepseek-v4-pro 131,072 112,000 32,768
DeepSeek V4 Pro ds/deepseek-v4-pro 1,000,000 900,000 65,536
MiMo V2.5 opencode-go/mimo-v2.5 131,072 112,000 32,768
Gemma 4 31B(OllamaCloud) ollamacloud/gemma4:31b 32,768 28,000 16,384
Nemotron 3 Super(OllamaCloud) ollamacloud/nemotron-3-super 32,768 28,000 16,384
GPT-OSS 20B(OllamaCloud) ollamacloud/gpt-oss:20b 32,768 28,000 16,384
DeepSeek V4 Flash(OllamaCloud) ollamacloud/deepseek-v4-flash 65,536 56,000 16,384
Gemini 3 Flash Preview(OllamaCloud) ollamacloud/gemini-3-flash-preview 1,000,000 850,000 32,768
GLM-5 Turbo glm/glm-5-turbo 131,072 112,000 16,384
GLM-4.7 Flash glm/glm-4.7-flash 131,072 112,000 16,384
Mistral Large Latest mistral/mistral-large-latest 262,144 220,000 16,384

圧縮の計算式: effective_window = model_context_window - min(tool_output_token_limit, 20000)。20kを超える値は、圧縮の開始条件に影響しません。

目安: model_auto_compact_token_limit は model_context_window の85~88%に設定してください。90%を超える値は通知なく無視されるため、決して設定しないでください。


OmniRoute のすべての Codex モデルでは、cx/ プレフィックスを使用します。

Codex CLI 名 OmniRoute モデル
cx/gpt-5.5 GPT-5.5 標準
cx/gpt-5.4 GPT-5.4 標準
cx/gpt-5.4-mini GPT-5.4 mini
cx/gpt-5.1-codex-mini GPT-5.1 Codex mini

その他のプロバイダーは、それぞれ独自のプレフィックス(kmc/、glm/、ds/、ollamacloud/、opencode-go/、mistral/)を使用します。プレフィックスは OmniRoute のプロバイダーエイリアスと一致します。


応答する前にモデルがどの程度「思考」するかを制御します。

値 用途
none 推論なし — 直接応答
low 単純なタスク(名前変更、フォーマット)
medium 指定されていない場合のサーバー既定値
high 中程度のタスク(リファクタリング、デバッグ)
xhigh アーキテクチャ、詳細な分析、複雑な問題
ターミナルウィンドウ
# 呼び出しごとのオーバーライド
codex -c model_reasoning_effort=low "rename variable x to count"
codex -c model_reasoning_effort=xhigh "design the auth module"

また、Desktop が暗号化された blob だけでなく思考テキストも表示できるように、推論の要約を設定します。

~/.codex/config.toml
model_reasoning_effort = "xhigh" # サポートされている場合は ultra も使用可能
model_reasoning_summary = "detailed" # auto | concise | detailed | none

OmniRoute の思考予算(サーバー設定)

Section titled “OmniRoute の思考予算(サーバー設定)”

OmniRoute ホストでは、Codex の強度/要約をアップストリームに到達させるために、Settings → AI → Thinking Budget を passthrough に設定する必要があります。auto モードでは、クライアントのすべての reasoning / reasoning_effort フィールドが削除され、Codex が正しく設定されていても思考パネルが空になります。

完全なガイド: THINKING_BUDGET.md。

圧縮とプロンプトキャッシュは独立しており、passthrough でも引き続き機能します。


プロファイル — モデル/ワークフローごとの名前付き設定

Section titled “プロファイル — モデル/ワークフローごとの名前付き設定”

プロファイルを使用すると、1 つのフラグでモデルとコンテキストウィンドウを切り替えられます。各プロファイルは、ベースの config.toml に重ねて適用されるフラットな ~/.codex/&lt;name&gt;.config.toml です。

命名規則(Codex CLI v0.137+): ファイルは ~/.codex/&lt;name&gt;.config.toml でなければなりません。profile- プレフィックスは付けません。 CLI は -p kimi-k27 → ~/.codex/kimi-k27.config.toml と解決します。ファイルが見つからない場合は、既定値が暗黙的に適用されます。

ターミナルウィンドウ
codex --profile kimi-k27 "analyze 10k lines of this codebase"
codex -p glm52 "architecture review"
codex --profile deepseek-flash "rename variable" # 高速、低コスト

強度プロファイル(同じモデル、異なる強度)

Section titled “強度プロファイル(同じモデル、異なる強度)”
ターミナルウィンドウ
codex -p low # cx/gpt-5.5、強度=low
codex -p medium # cx/gpt-5.5、強度=medium
codex -p high # cx/gpt-5.5、強度=high
codex -p xhigh # cx/gpt-5.5、強度=xhigh(既定)
codex -p chat # cx/gpt-5.5、強度未設定(サーバー既定値)

思考モデル(高い思考能力)— xhigh + 詳細な要約

Section titled “思考モデル(高い思考能力)— xhigh + 詳細な要約”
プロファイル モデル コンテキスト 用途
kimi-k27 kmc/kimi-k2.7 128k 最高の思考品質(Kimi)
glm52 glm/glm-5.2 128k GLM の思考
glm52max glm/glm-5.2-max 128k GLM の最大思考能力
mimo-pro opencode-go/mimo-v2.5-pro 128k MiMo の思考
qwen37plus opencode-go/qwen3.7-plus 32k Qwen の思考
プロファイル モデル コンテキスト 用途
kimi-k26 kmc/kimi-k2.6 128k 汎用(Kimi)
deepseek-pro ollamacloud/deepseek-v4-pro 128k OllamaCloud 経由の DeepSeek Pro
deepseek ds/deepseek-v4-pro 1M DeepSeek Pro への直接接続、巨大コンテキスト
mimo opencode-go/mimo-v2.5 128k MiMo 汎用

シンプルなモデル — 推論強度なし

Section titled “シンプルなモデル — 推論強度なし”
プロファイル モデル コンテキスト 用途
gemma4 ollamacloud/gemma4:31b 32k コスト効率が高く高性能
nemotron ollamacloud/nemotron-3-super 32k NVIDIA Nemotron
gptoss ollamacloud/gpt-oss:20b 32k オープンソース GPT
プロファイル モデル コンテキスト 用途
deepseek-flash ollamacloud/deepseek-v4-flash 64k 短時間で完了するタスク
gemini-flash ollamacloud/gemini-3-flash-preview 1M 非常に高速、巨大コンテキスト
glm5turbo glm/glm-5-turbo 128k GLM Turbo
glm47flash glm/glm-4.7-flash 128k GLM Flash
mistral mistral/mistral-large-latest 256k Mistral Large
タスク 推奨プロファイル
名前変更、フォーマット、定型コード --profile deepseek-flash または -p low
説明、簡易レビュー -p chat または -p gemini-flash
デバッグ、中程度のリファクタリング -p medium または -p kimi-k26
新機能、複雑なテスト -p high または -p mimo
アーキテクチャ、詳細な分析 -p kimi-k27 または -p glm52 または -p xhigh
コードベース分析(1M ctx が必要) --profile deepseek または --profile gemini-flash
最高品質の推論 -p glm52max または -p mimo-pro
コスト重視 -p gemma4 または -p gptoss

omniroute setup-codex によるプロファイルの自動生成

Section titled “omniroute setup-codex によるプロファイルの自動生成”

VPS 上で OmniRoute を実行している場合、稼働中のモデルカタログからプロファイルファイルを自動生成できます。

ターミナルウィンドウ
# VPS から(ポート 20128 のローカル OmniRoute を使用)
omniroute setup-codex
# 任意のマシンから — VPS を指定
omniroute setup-codex --remote http://100.x.x.x:20128 --api-key sk-xxx
# ファイルを書き込まずにプレビュー
omniroute setup-codex --remote http://100.x.x.x:20128 --dry-run
# GLM および Kimi のプロファイルのみを生成
omniroute setup-codex --only glm,kimi
# カスタムディレクトリに書き込み
omniroute setup-codex --codex-home /path/to/.codex

このコマンドは /v1/models を取得し、既知のモデルには調整済みのプロファイルを使用します。その他の互換性のあるテキストモデルについてはカタログのメタデータにフォールバックし、モデルごとに ~/.codex/&lt;name&gt;.config.toml を書き込みます。冪等であるため、安全に再実行できます。

OmniRoute は、プロバイダーのモデル検出またはインポートが正常に完了して稼働中のカタログが変更された後、これらと同じプロファイルファイルを自動同期することもできます。これはオプトイン方式で、デフォルトでは無効です。CLI Code ダッシュボードから切り替えるか(「CLI profile auto-sync」→ Codex)、OMNIROUTE_AUTO_SYNC_CODEX_PROFILES=true を設定してください(デフォルトで有効な CLI_ALLOW_CONFIG_WRITES も尊重されます)。有効にすると、個別の ~/.codex/*.config.toml プロファイルファイルのみが書き込まれます。アクティブまたはデフォルトの ~/.codex/config.toml、Codex-lb の設定、認証、プロバイダーの選択が変更されることはありません。


omniroute launch-codex による Codex の起動

Section titled “omniroute launch-codex による Codex の起動”

Codex を起動する前に、OmniRoute インスタンスのヘルスチェックを実行します。

ターミナルウィンドウ
# ローカルの OmniRoute に接続して起動(デフォルトポートは 20128)
omniroute launch-codex
# 特定のプロファイルを使用して起動
omniroute launch-codex --profile kimi-k27
# リモート VPS に接続して起動
omniroute launch-codex --remote http://100.x.x.x:20128/v1 --api-key sk-xxx
# 追加の引数を codex に渡す
omniroute launch-codex --profile glm52 -- --yolo "fix this bug"

Codex は、マニフェスト駆動の汎用エントリーポイント 2 種類 (bin/cli/cli-manifest.mjs)のターゲットでもあります。

ターミナルウィンドウ
# 対話式モデル選択 → ~/.codex/&lt;name&gt;.config.toml を書き込み(TOML、env_key)
omniroute configure codex
# -c フラグを介して omniroute プロバイダーを注入し、codex を起動(設定は書き込まない)
omniroute run codex

Codex CLI の新機能(v0.138–v0.141)

Section titled “Codex CLI の新機能(v0.138–v0.141)”
バージョン 機能
v0.138 デスクトップアプリへの引き継ぎ(/app)、v2 パーソナルアクセストークン、排他的なプロファイルセレクターとしての --profile(従来のファイル内 [profiles] テーブルは起動時にクラッシュを引き起こします)
v0.139 web_search = "live" — コードモードからのネイティブ Web 検索、MCP ツールスキーマでの oneOf/allOf、codex doctor による環境診断
v0.140 セッション内での /usage トークン表示、Claude Code セッションからの /import、codex delete <SESSION_ID> サブコマンド、プロバイダー設定内の aws オブジェクトを介した Amazon Bedrock 認証
v0.141 リモート実行環境向けの E2E 暗号化 Noise リレー、SQLite WAL の修正、P-521 TLS のサポート

新しい config.toml フィールド(v0.137 以降)

Section titled “新しい config.toml フィールド(v0.137 以降)”
# ネイティブ Web 検索(v0.139)
web_search = "live" # "disabled" | "cached" | "live"
# 独立した開発者向けシステムプロンプト(v0.138)
developer_instructions = "Always prefer functional style."
# カスタム圧縮プロンプト
compact_prompt = "Summarise the above as bullet points."
# /review をより低コストのモデルにルーティング
review_model = "glm/glm-5-turbo"
# OpenAI サービス階層
service_tier = "fast" # "fast" | "flex"

新しい [model_providers.&lt;id&gt;] フィールド

Section titled “新しい [model_providers.&lt;id&gt;] フィールド”
[model_providers.omniroute]
base_url = "http://100.x.x.x:20128/v1"
env_key = "OMNIROUTE_API_KEY"
requires_openai_auth = false
# すべてのリクエストに付加する静的な追加ヘッダー
[model_providers.omniroute.http_headers]
"X-Custom-Header" = "value"
# 環境変数から読み取るヘッダー
[model_providers.omniroute.env_http_headers]
"X-Trace-Id" = "TRACE_ID"
# 追加の URL クエリパラメーター(Azure の api-version に便利)
[model_providers.omniroute.query_params]
"api-version" = "2024-12-01-preview"
[model_providers.bedrock]
base_url = "https://bedrock-runtime.us-east-1.amazonaws.com"
[model_providers.bedrock.aws]
profile = "default" # ~/.aws/credentials のプロファイル
region = "us-east-1"

[model_providers.omniroute-main]
base_url = "http://192.168.0.1:20128/v1"
env_key = "OMNIROUTE_API_KEY"
[model_providers.omniroute-tailscale]
base_url = "http://100.x.x.x:20128/v1"
env_key = "OMNIROUTE_API_KEY"

Codex CLI (config.toml) Claude Code(環境変数) 効果
tool_output_token_limit = 32768 (直接は公開されていません) ツールごとの履歴上限
model_context_window = 400000 (モデルによって決まります) コンテキストウィンドウ
— CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536 レスポンスごとの最大トークン数
ターミナルウィンドウ
# ~/.bashrc — Claude Code のトークン上限
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536

クイックリファレンス — CLI フラグ

Section titled “クイックリファレンス — CLI フラグ”
フラグ 短縮形 効果
--model &lt;id&gt; -m この呼び出しで model を上書きします
--profile &lt;name&gt; -p ~/.codex/&lt;name&gt;.config.toml を読み込みます
--config key=value -c config.toml の任意のフィールドを上書きします(繰り返し指定可能)
--enable &lt;feature&gt; — 機能フラグを強制的に有効化します
--disable &lt;feature&gt; — 機能フラグを強制的に無効化します
--search — この呼び出しでリアルタイム Web 検索を有効化します

v0.140 の新機能:

ターミナルウィンドウ
codex delete <SESSION_ID> # セッションを削除
codex delete <SESSION_ID> --force # 確認をスキップ
codex debug models --bundled # バンドルされたモデルカタログを JSON で一覧表示

対話型セッション内:

コマンド 効果
/model モデル選択画面を開きます
/usage このセッションのトークン使用量を表示します(v0.140)
/app デスクトップアプリに引き継ぎます(v0.138)
/import Claude Code セッションをインポートします(v0.140)
/help すべてのスラッシュコマンドを一覧表示します

OmniRoute の2つのデフォルト設定が、数時間にわたる Codex CLI セッションを気付かないうちに妨害する可能性があります。どちらも Codex CLI の設定ではなく、OmniRoute 側の設定です。アカウントを固定し、アイドル時の切断を無効にする上流プロキシから設定を移行したユーザーは、この両方の問題に遭遇し、OmniRoute では「長時間セッションを維持できない」と結論付けることが少なくありません。

症状 考えられる原因 設定項目
セッションがアカウントを切り替え続ける/ターン間でプロンプトキャッシュの連続性が失われる セッションアフィニティの TTL が 0(無効) sessionAffinityTtlMs
クライアント側にプロンプトが表示されないまま、推論途中で接続が切れる 上流からのチャンクがない状態が10分続き、ストリームアイドル監視が作動した STREAM_IDLE_TIMEOUT_MS

関連ディスカッション:#7126(長時間タスクの切断)、#5718(アフィニティがデフォルトで無効になっている理由)。追跡用:#7287。

1. セッションアフィニティ — 1つの会話を1つのアカウントに固定する

Section titled “1. セッションアフィニティ — 1つの会話を1つのアカウントに固定する”

デフォルト: sessionAffinityTtlMs = 0(無効)。

設定場所

  • ダッシュボード → 設定 → ルーティング → セッションアフィニティ → アフィニティ TTL(秒)(ComboDefaultsTab)
  • または、ミリ秒単位の sessionAffinityTtlMs を使用して設定を PATCH します(Zod の範囲は 0~86_400_000、つまり最大24時間)

#7274 で Codex 専用の codexSessionAffinityTtlMs から名称変更されました。従来のキーは引き続き読み取り専用エイリアスとして受け付けられますが、新しい設定では sessionAffinityTtlMs を使用してください。TTL が 0 を超えると、アフィニティは Codex だけでなく、あらゆるプロバイダーに適用されるようになりました。詳細は docs/architecture/RESILIENCE_GUIDE.md → セッションアフィニティを参照してください。

0 のままにした場合に発生する問題

複数ターンにわたる Codex の会話では、各ターンがアクティブなコンボ戦略によって個別にルーティングされるため、ターンごとに異なるアカウントへ送られる可能性があります。これにより、上流のセッション/プロンプトキャッシュの連続性が失われます。OmniRoute が Codex のセッションヘッダー(x-codex-session-id / x-session-id / x-omniroute-session)および prompt_cache_key / session_id などのボディフィールドを参照するのは、TTL が 0 より大きい場合だけです(src/sse/services/auth.ts の extractSessionAffinityKey)。

数時間にわたる単一タスクの推奨設定

TTL は、タスクの予想実経過時間より長く設定してください(UI の最大値は 86400秒 = 24時間):

タスクの予想所要時間 アフィニティ TTL(UI、秒) sessionAffinityTtlMs
数時間 14400(4時間) 14400000
一晩/約12時間 43200(12時間) 43200000
丸1日 86400(24時間、最大値) 86400000

オプトイン方式になっているのは意図的です。アフィニティを無効にするとアカウント間の負荷分散が優先され、有効にすると1つの長時間エージェントセッションの連続性が優先されます。このガイドではデフォルト設定を変更しません。長時間の Codex タスクを実行する運用者は、明示的に有効化する必要があります。

2. ストリームアイドルタイムアウト — 静かな推論ターンを切断しない

Section titled “2. ストリームアイドルタイムアウト — 静かな推論ターンを切断しない”

デフォルト: STREAM_IDLE_TIMEOUT_MS = 600000(10分)。未設定の場合は REQUEST_TIMEOUT_MS を継承します。共通の基準値も 600000 です。docs/guides/SETUP_GUIDE.md → タイムアウトを参照してください。

デフォルト設定で発生する問題

Codex の推論 / ツールターンで、実際のアップストリームチャンクがない状態が 10 分以上続くと、SSE アイドルウォッチドッグ(open-sse/utils/stream.ts)によって強制終了されます。クライアント側では単に接続が切断されたように見えることが多く、「通知なしで自動的に停止した」という現象と一致します。

重要な点:OmniRoute が生成する SSE ハートビートでは、アイドル時間の計測はリセットされません。lastChunkTime を更新するのは、実際のアップストリームのボディチャンクだけです。まだ「思考中」で出力のないモデルは、ウォッチドッグから見ると停止したアップストリームと区別できません。

関連する Undici のボディ非アクティブタイムアウト:FETCH_BODY_TIMEOUT_MS(これも同じ 10 分の基準値がデフォルトで、0 にすると無効になります)。ストリーミングでは、FETCH_TIMEOUT_MS が対象とするのは接続の確立 / 最初のヘッダーまでのみです。ストリームが開始された後の停止は、STREAM_IDLE_TIMEOUT_MS と FETCH_BODY_TIMEOUT_MS によって制御されます。

数時間にわたる単一タスクの推奨設定

OmniRoute プロセスの環境(.env / compose / systemd)で、次のように設定します。

ターミナルウィンドウ
# 長時間の推論ターン向けに、ストリームのアイドルおよびボディ非アクティブによる切断を無効化
STREAM_IDLE_TIMEOUT_MS=0
FETCH_BODY_TIMEOUT_MS=0

または、想定される最長の無出力時間より長い値に引き上げます(値の単位はミリ秒です)。

ターミナルウィンドウ
# 例:アップストリームチャンク間で最大 2 時間の無出力を許可
STREAM_IDLE_TIMEOUT_MS=7200000
FETCH_BODY_TIMEOUT_MS=7200000

これらの環境変数を変更した後、OmniRoute を再起動してください。

具体的な手順 — 数時間にわたる Codex タスク

Section titled “具体的な手順 — 数時間にわたる Codex タスク”
  1. アカウントを固定: Dashboard → Settings → Routing → Session affinity → Affinity TTL = 43200(12 時間)または 86400(最大 24 時間)。
  2. OmniRoute の環境で、アイドルによる切断時間を延長または無効化します。
ターミナルウィンドウ
STREAM_IDLE_TIMEOUT_MS=0
FETCH_BODY_TIMEOUT_MS=0
  1. 通常どおり Codex の config.toml(wire_api = "responses"、正しい base_url、OMNIROUTE_API_KEY)を使用します。この 2 つの動作に対応する、Codex 側のアフィニティ / アイドル設定はありません。
  2. OmniRoute を再起動してから、長時間の Codex タスクを開始します。

デフォルト値に関する決定(#7287)

Section titled “デフォルト値に関する決定(#7287)”
設定項目 提供時のデフォルト このガイドで変更するか?
sessionAffinityTtlMs 0(無効) いいえ — オプトインのまま(負荷分散と継続性のトレードオフ。Discussion #5718 を参照)
STREAM_IDLE_TIMEOUT_MS 600000(10 分) いいえ — 一般的なトラフィック向けには 10 分のまま。長時間 Codex を運用する場合は延長または無効化します

どちらかのデフォルト値をグローバルに変更すると、Codex だけでなく、そのインスタンスを利用するすべてのクライアントの動作が変わります。設定項目を文書化し、運用者による明示的な決定が下されるまでは、デフォルト値を変更しないでください。

アイドルウォッチドッグが作動すると、OmniRoute は次のような形式の行をログに出力します。

[STREAM] Idle timeout: no data from codex for 600000ms (model: cx/gpt-5.5)

Idle timeout: no data from(またはコード stream_idle_timeout / エラー名 StreamIdleTimeoutError)を grep してください。プロバイダー部分には、そのリクエストで OmniRoute が使用した値(codex、別のプロバイダー ID、または不明な場合は provider)が入ります。常にリテラル文字列 codex になるとは限りません。


Error: wire_api = "chat" is no longer supported 設定から wire_api = "chat" を削除してください。wire_api = "responses" を設定するか、このフィールドを省略してください(v0.138 以降のデフォルトは "responses" です)。

Error: model not found 正しいプレフィックスを使用したモデルが OmniRoute に存在することを確認してください。omniroute models list を使用するか、/dashboard/providers/&lt;provider&gt; を開いてください。

Authentication error OMNIROUTE_API_KEY がエクスポートされていることを確認してください:echo $OMNIROUTE_API_KEY。

ERROR: Missing environment variable: OMNIROUTE_API_KEY Codex は、最初のリクエストを行う前に環境変数が存在することを検証します。認証で保護されたサーバーの場合は実際のキーをエクスポートしてください。また、ローカルの OmniRoute インスタンスで認証が不要な場合は、OMNIROUTE_API_KEY=local のような空でないプレースホルダーを指定してください。~/.bashrc または ~/.zshrc に追加した場合は、シェルを再起動してください。

Connection refused OmniRoute が実行中であり、base_url のホスト/ポートがネットワーク環境(ローカル、Tailscale、VPS)に対して正しいことを確認してください。

コンテキスト上限付近でセッションがクラッシュする model_context_window と model_auto_compact_token_limit を明示的に設定してください。上記のコンテキストウィンドウの表を参照してください。

圧縮の実行タイミングが遅すぎる model_auto_compact_token_limit をウィンドウの 80~85% に下げてください。90% を超える値には設定しないでください。

プロファイルが読み込まれない(-p &lt;name&gt; が警告なしに無視される) ファイルが ~/.codex/&lt;name&gt;.config.toml に存在することを確認してください(profile- プレフィックスは不要です)。ls ~/.codex/*.config.toml を実行してください。

長時間実行される Codex タスクが途中で切断される/ターン間でアカウントが切り替わる 長時間実行タスクを参照してください。セッションアフィニティ(TTL はタスクの実行時間より長く設定)を有効にし、STREAM_IDLE_TIMEOUT_MS/FETCH_BODY_TIMEOUT_MS の値を引き上げるか、無効にしてください。OmniRoute のログで Idle timeout: no data from を grep してください。


OmniRoute ソースコード (a58000c7685f)

HagiCode

HagiCode は構造化ワークフロー、マルチエージェント実行、Hero Dungeon ビューを備えたエージェント型コーディングワークスペースです。

よりスマートで速く、楽しいエージェント型ワークフローで、使いやすいソフトウェアを形にします。

HagiCode ライトテーマのメイン画面
  • Smart構造化ワークフローは意図をアイデアから変更のリリースまで実行可能な道筋にします。
  • Efficientマルチエージェントのワークフローで調査、実装、レビューを並行して進めます。
  • FunHero Dungeon により長時間のコーディングを視覚的で協力的な体験にします。
HagiCode を見る