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> を実際の値に置き換えてください:
model = "cx/gpt-5.5"model_provider = "omniroute"model_reasoning_effort = "xhigh"model_context_window = 400000model_auto_compact_token_limit = 350000tool_output_token_limit = 32768 # ツール呼び出しごとの履歴保存上限
[model_providers.omniroute]name = "OmniRoute"base_url = "http://<YOUR_HOST>:20128/v1"env_key = "OMNIROUTE_API_KEY"requires_openai_auth = falsewire_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 codexcodex --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/v1Tailscale 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 “コンテキストウィンドウと圧縮”トークン設定フィールド
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%を超える値は通知なく無視されるため、決して設定しないでください。
モデルのプレフィックス: cx/
Section titled “モデルのプレフィックス: cx/”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 だけでなく思考テキストも表示できるように、推論の要約を設定します。
model_reasoning_effort = "xhigh" # サポートされている場合は ultra も使用可能model_reasoning_summary = "detailed" # auto | concise | detailed | noneOmniRoute の思考予算(サーバー設定)
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/<name>.config.toml です。
命名規則(Codex CLI v0.137+): ファイルは
~/.codex/<name>.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、強度=lowcodex -p medium # cx/gpt-5.5、強度=mediumcodex -p high # cx/gpt-5.5、強度=highcodex -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 の思考 |
優れたモデル — high 強度
Section titled “優れたモデル — high 強度”| プロファイル | モデル | コンテキスト | 用途 |
|---|---|---|---|
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 |
高速モデル — low 強度
Section titled “高速モデル — low 強度”| プロファイル | モデル | コンテキスト | 用途 |
|---|---|---|---|
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 |
クイック選択表
Section titled “クイック選択表”| タスク | 推奨プロファイル |
|---|---|
| 名前変更、フォーマット、定型コード | --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/<name>.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/<name>.config.toml を書き込み(TOML、env_key)omniroute configure codex
# -c フラグを介して omniroute プロバイダーを注入し、codex を起動(設定は書き込まない)omniroute run codexCodex 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.<id>] フィールド
Section titled “新しい [model_providers.<id>] フィールド”[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"Amazon Bedrock 認証(v0.140)
Section titled “Amazon Bedrock 認証(v0.140)”[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"複数のサーバー
Section titled “複数のサーバー”[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"Claude Code — 同等の設定
Section titled “Claude Code — 同等の設定”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 <id> |
-m |
この呼び出しで model を上書きします |
--profile <name> |
-p |
~/.codex/<name>.config.toml を読み込みます |
--config key=value |
-c |
config.toml の任意のフィールドを上書きします(繰り返し指定可能) |
--enable <feature> |
— | 機能フラグを強制的に有効化します |
--disable <feature> |
— | 機能フラグを強制的に無効化します |
--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 |
すべてのスラッシュコマンドを一覧表示します |
長時間実行タスク
Section titled “長時間実行タスク”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=0FETCH_BODY_TIMEOUT_MS=0または、想定される最長の無出力時間より長い値に引き上げます(値の単位はミリ秒です)。
# 例:アップストリームチャンク間で最大 2 時間の無出力を許可STREAM_IDLE_TIMEOUT_MS=7200000FETCH_BODY_TIMEOUT_MS=7200000これらの環境変数を変更した後、OmniRoute を再起動してください。
具体的な手順 — 数時間にわたる Codex タスク
Section titled “具体的な手順 — 数時間にわたる Codex タスク”- アカウントを固定: Dashboard → Settings → Routing → Session affinity → Affinity TTL =
43200(12 時間)または86400(最大 24 時間)。 - OmniRoute の環境で、アイドルによる切断時間を延長または無効化します。
STREAM_IDLE_TIMEOUT_MS=0FETCH_BODY_TIMEOUT_MS=0- 通常どおり Codex の
config.toml(wire_api = "responses"、正しいbase_url、OMNIROUTE_API_KEY)を使用します。この 2 つの動作に対応する、Codex 側のアフィニティ / アイドル設定はありません。 - OmniRoute を再起動してから、長時間の Codex タスクを開始します。
デフォルト値に関する決定(#7287)
Section titled “デフォルト値に関する決定(#7287)”| 設定項目 | 提供時のデフォルト | このガイドで変更するか? |
|---|---|---|
sessionAffinityTtlMs |
0(無効) |
いいえ — オプトインのまま(負荷分散と継続性のトレードオフ。Discussion #5718 を参照) |
STREAM_IDLE_TIMEOUT_MS |
600000(10 分) |
いいえ — 一般的なトラフィック向けには 10 分のまま。長時間 Codex を運用する場合は延長または無効化します |
どちらかのデフォルト値をグローバルに変更すると、Codex だけでなく、そのインスタンスを利用するすべてのクライアントの動作が変わります。設定項目を文書化し、運用者による明示的な決定が下されるまでは、デフォルト値を変更しないでください。
アイドルによる切断の診断
Section titled “アイドルによる切断の診断”アイドルウォッチドッグが作動すると、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 になるとは限りません。
トラブルシューティング
Section titled “トラブルシューティング”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/<provider> を開いてください。
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 <name> が警告なしに無視される)
ファイルが ~/.codex/<name>.config.toml に存在することを確認してください(profile- プレフィックスは不要です)。ls ~/.codex/*.config.toml を実行してください。
長時間実行される Codex タスクが途中で切断される/ターン間でアカウントが切り替わる
長時間実行タスクを参照してください。セッションアフィニティ(TTL はタスクの実行時間より長く設定)を有効にし、STREAM_IDLE_TIMEOUT_MS/FETCH_BODY_TIMEOUT_MS の値を引き上げるか、無効にしてください。OmniRoute のログで Idle timeout: no data from を grep してください。
HagiCode
HagiCode は構造化ワークフロー、マルチエージェント実行、Hero Dungeon ビューを備えたエージェント型コーディングワークスペースです。
よりスマートで速く、楽しいエージェント型ワークフローで、使いやすいソフトウェアを形にします。

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