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.tomlexport OMNIROUTE_API_KEY="<YOUR_KEY>"macOS:內建於 ChatGPT 應用程式中的 Codex
Section titled “macOS:內建於 ChatGPT 應用程式中的 Codex”如果你是透過 ChatGPT 桌面應用程式安裝 Codex,codex 二進位檔可能
只存在於應用程式套件內,尚未加入 shell 的 PATH。請將
資源目錄加入你的 shell 啟動檔案:
export PATH="/Applications/ChatGPT.app/Contents/Resources:$PATH"開啟新的 shell,然後驗證:
command -v codexcodex --version本機未驗證的 OmniRoute:使用佔位金鑰即可
Section titled “本機未驗證的 OmniRoute:使用佔位金鑰即可”在第一個請求離開 CLI 之前,Codex 會驗證 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 現在除了 Anthropic 相容端點之外,也提供原生 Responses API;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 “上下文視窗與壓縮”Token 設定欄位
Section titled “Token 設定欄位”| 欄位 | 說明 |
|---|---|
model_context_window |
目前模型的 Token 總預算。請設為該模型標示的上限。 |
model_auto_compact_token_limit |
觸發自動歷史記錄壓縮的閾值。上限:model_context_window 的 90% — 超過 90% 的值會被無提示地忽略。 |
tool_output_token_limit |
歷史記錄中每次工具呼叫輸出可儲存的 Token 上限。避免單一大型工具回應占滿視窗。這不是最大輸出量 — 而是歷史記錄的儲存上限。 |
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 "將變數 x 重新命名為 count"codex -c model_reasoning_effort=xhigh "設計驗證模組"另外也請設定推理摘要,讓 Desktop 能呈現思考文字(而不只是加密的資料區塊):
model_reasoning_effort = "xhigh" # 支援時也可使用 ultramodel_reasoning_summary = "detailed" # auto | concise | detailed | noneOmniRoute 思考預算(伺服器設定)
Section titled “OmniRoute 思考預算(伺服器設定)”在 OmniRoute 主機上,Settings → AI → Thinking Budget 必須設為 passthrough,Codex 的強度/摘要設定才能傳到上游。auto 模式會移除所有用戶端的 reasoning / reasoning_effort 欄位,即使 Codex 已正確設定,也會導致思考面板內容為空。
完整指南:THINKING_BUDGET.md。
壓縮與提示快取彼此獨立,並且在 passthrough 模式下仍會正常運作。
設定檔 — 依模型/工作流程命名的設定
Section titled “設定檔 — 依模型/工作流程命名的設定”設定檔可讓你使用單一旗標切換模型與上下文視窗。每個設定檔都是一個扁平的
~/.codex/<name>.config.toml,會疊加在基礎 config.toml 之上。
**命名規則(Codex CLI v0.137+):**檔案必須命名為
~/.codex/<name>.config.toml— 不可加上profile-前綴。 CLI 會將-p kimi-k27解析為~/.codex/kimi-k27.config.toml。如果找不到該檔案,便會直接套用預設設定而不顯示提示。
codex --profile kimi-k27 "分析此程式碼庫的 10k 行程式碼"codex -p glm52 "架構審查"codex --profile deepseek-flash "重新命名變數" # 快速、便宜強度設定檔(相同模型,不同強度)
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 |
| 任務 | 建議的設定檔 |
|---|---|
| 重新命名、格式化、樣板程式碼 | --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 上下文) | --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
# 從任何機器執行——指向您的 VPSomniroute 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 設定檔自動同步」→ 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
# 將額外引數傳遞給 codexomniroute launch-codex --profile glm52 -- --yolo "fix this bug"Codex 也是兩個由資訊清單驅動之通用進入點的目標
(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"——從程式碼模式使用原生網路搜尋;MCP 工具結構描述中的 oneOf/allOf;codex doctor 環境診斷 |
| v0.140 | 工作階段內的 /usage 權杖檢視;從 Claude Code 工作階段執行 /import;codex delete <SESSION_ID> 子命令;透過提供者設定中的 aws 物件進行 Amazon Bedrock 驗證 |
| v0.141 | 適用於遠端執行器的端對端加密 Noise 中繼;SQLite WAL 修正;P-521 TLS 支援 |
新增的 config.toml 欄位(v0.137 之後)
Section titled “新增的 config.toml 欄位(v0.137 之後)”# 原生網路搜尋(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"[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 |
每次回應的最大 token 數 |
# ~/.bashrc — Claude Code token 上限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 |
— | 為此次呼叫啟用即時網頁搜尋 |
v0.140 新增:
codex delete <SESSION_ID> # 刪除工作階段codex delete <SESSION_ID> --force # 跳過確認codex debug models --bundled # 以 JSON 列出內建模型目錄在互動式工作階段中:
| 指令 | 效果 |
|---|---|
/model |
開啟模型選擇器 |
/usage |
顯示此工作階段的 token 使用量(v0.140) |
/app |
移交至桌面應用程式(v0.138) |
/import |
匯入 Claude Code 工作階段(v0.140) |
/help |
列出所有斜線指令 |
長時間執行的任務
Section titled “長時間執行的任務”OmniRoute 的兩項預設值可能會在不知不覺中破壞持續數小時的 Codex CLI 工作階段。兩者都不是 Codex CLI 設定,而是位於 OmniRoute 端。從會固定帳號並停用閒置中止機制的上游代理移轉設定時,使用者經常會同時遇到這兩個問題,並因此認為 OmniRoute「無法維持長時間工作階段」。
| 症狀 | 可能原因 | 調整項目 |
|---|---|---|
| 工作階段持續切換帳號/各輪之間的提示快取連續性中斷 | 工作階段親和性 TTL 為 0(已停用) |
sessionAffinityTtlMs |
| 推理過程中連線中斷,且未向用戶端顯示任何提示 | 串流閒置監視器在上游 10 分鐘未傳送資料區塊後觸發 | STREAM_IDLE_TIMEOUT_MS |
相關討論:#7126(長時間任務中斷)、#5718(親和性預設停用的原因)。追蹤議題:#7287。
1. 工作階段親和性 — 將單一對話固定至單一帳號
Section titled “1. 工作階段親和性 — 將單一對話固定至單一帳號”預設值: sessionAffinityTtlMs = 0(已停用)。
設定位置
- 儀表板 → 設定 → 路由 → 工作階段親和性 → 親和性 TTL(秒)(
ComboDefaultsTab) - 或透過 PATCH 設定中的
sessionAffinityTtlMs,單位為毫秒(Zod 範圍為0–86_400_000,即最長 24 小時)
在 #7274 中由僅適用於 Codex 的
codexSessionAffinityTtlMs重新命名而來。舊版鍵仍可作為唯讀別名使用;新設定應使用sessionAffinityTtlMs。只要 TTL 大於0,親和性現在就會套用至任何提供者,而不僅限於 Codex — 請參閱docs/architecture/RESILIENCE_GUIDE.md→ 工作階段親和性。
維持為 0 時會發生什麼問題
多輪 Codex 對話中的每一輪都會由目前啟用的組合策略獨立路由,因此每一輪都可能落到不同的帳號。這會破壞上游工作階段/提示快取的連續性。只有當 TTL 大於 0 時,OmniRoute 才會查閱 Codex 工作階段標頭(x-codex-session-id / x-session-id / x-omniroute-session)以及 prompt_cache_key / session_id 等本文欄位(src/sse/services/auth.ts 中的 extractSessionAffinityKey)。
針對持續數小時的單一任務之建議
將 TTL 設為高於任務預期的實際經過時間(UI 上限為 86400 秒 = 24 小時):
| 預期任務時間 | 親和性 TTL(UI,秒) | sessionAffinityTtlMs |
|---|---|---|
| 數小時 | 14400(4 小時) |
14400000 |
| 整夜/約 12 小時 | 43200(12 小時) |
43200000 |
| 一整天 | 86400(24 小時,上限) |
86400000 |
選擇加入是刻意的設計:停用親和性有利於在多個帳號之間進行負載平衡;啟用親和性則有利於維持單一長時間代理工作階段的連續性。本指南不會變更預設值 — 執行長時間 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)——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)。提供者區段會顯示 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/<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,請重新啟動 shell。
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。使用 grep 在 OmniRoute 日誌中搜尋 Idle timeout: no data from。
HagiCode
HagiCode 是智慧代理程式開發工作台,結合結構化工作流程、多代理程式執行與 Hero Dungeon 介面,將想法化為交付成果。
以更聰明、更快速且更有趣的智慧代理程式工作流程,打造實用的軟體。

- Smart結構化流程將意圖轉化為從構想到交付的可執行步驟。
- Efficient多代理程式工作流程讓研究、實作與審查並行進行。
- FunHero Dungeon 讓長時間的程式協作更直覺、更有參與感。