Ir al contenido
OmniRoute source

Codex CLI — Configuration with OmniRoute (Español)

TOML es el único formato efectivo. Las versiones modernas de Codex leen exclusivamente ~/.codex/config.toml (verificado con codex-cli 0.147.0: codex --help documenta que las sobrescrituras de -c/--config se «cargan desde ~/.codex/config.toml»). El antiguo ~/.codex/config.yaml pertenecía a la CLI heredada de npm y se ignora silenciosamente. El generador del panel (/api/cli-tools/apply, herramienta codex) escribe TOML mediante una combinación conservadora: se conservan las claves existentes y los bloques de otros proveedores, la clave de API permanece en OMNIROUTE_API_KEY (nunca en el archivo) y cualquier config.yaml heredado restante se indica en una nota de migración sin modificarlo.

Reemplaza <YOUR_HOST> y <YOUR_KEY> por tus valores:

~/.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 # límite de almacenamiento del historial por llamada a herramienta
[model_providers.omniroute]
name = "OmniRoute"
base_url = "http://<YOUR_HOST>:20128/v1"
env_key = "OMNIROUTE_API_KEY"
requires_openai_auth = false
wire_api = "responses"
Ventana de terminal
# ~/.bashrc o ~/.zshrc — valor real de la clave, nunca en config.toml
export OMNIROUTE_API_KEY="<YOUR_KEY>"

macOS: Codex incluido dentro de la aplicación ChatGPT

Sección titulada «macOS: Codex incluido dentro de la aplicación ChatGPT»

Si instalaste Codex mediante la aplicación de escritorio ChatGPT, es posible que el binario codex solo exista dentro del paquete de la aplicación y que todavía no esté en el PATH de tu shell. Añade el directorio de recursos al archivo de inicio de tu shell:

Ventana de terminal
export PATH="/Applications/ChatGPT.app/Contents/Resources:$PATH"

Abre una nueva shell y, a continuación, verifica:

Ventana de terminal
command -v codex
codex --version

OmniRoute local sin autenticación: basta con una clave de marcador de posición

Sección titulada «OmniRoute local sin autenticación: basta con una clave de marcador de posición»

Codex valida que exista la variable de entorno indicada por env_key antes de que la primera solicitud salga de la CLI. Si tu instancia local de OmniRoute no requiere autenticación, sirve cualquier marcador de posición no vacío:

Ventana de terminal
export OMNIROUTE_API_KEY="${OMNIROUTE_API_KEY:-local}"

Usa una clave real si tu servidor OmniRoute está protegido o es remoto.

Opciones de host habituales

Acceso URL
Red local http://192.168.0.1:20128/v1
Tailscale http://100.x.x.x:20128/v1
Bucle local http://localhost:20128/v1

wire_api = "responses" — por qué funciona con todos los modelos

Sección titulada «wire_api = "responses" — por qué funciona con todos los modelos»

La CLI de Codex dejó obsoleto wire_api = "chat" (Chat Completions) en febrero de 2026 y ahora requiere wire_api = "responses" (OpenAI Responses API). Establecer wire_api = "chat" provoca un bloqueo inmediato durante el arranque desde la versión v0.138.

Muchos proveedores, incluidos GLM y Kimi, todavía solo ofrecen un endpoint de Chat Completions. DeepSeek V4 ahora ofrece una Responses API nativa, además de un endpoint compatible con Anthropic; OmniRoute usa Responses de forma predeterminada y permite que cada conexión de DeepSeek seleccione la compatibilidad con Anthropic.

OmniRoute resuelve esto de forma transparente:

CLI de Codex
→ wire_api = "responses"
→ POST /v1/responses (OmniRoute)
→ OmniRoute selecciona el protocolo nativo del proveedor y traduce cuando es necesario
→ POST /responses (DeepSeek V4) o /chat/completions (Mistral / GLM / Kimi / otros)

Al usar OmniRoute, nunca necesitas un proxy de traducción independiente. Todos los modelos usan wire_api = "responses": OmniRoute se encarga del resto.

wire_api es el valor predeterminado: el campo usa "responses" de forma predeterminada y puede omitirse por completo de config.toml. Solo debes establecerlo explícitamente si quieres documentar la intención.


Campo Descripción
model_context_window Presupuesto total de tokens para el modelo activo. Establézcalo en el límite anunciado del modelo.
model_auto_compact_token_limit Umbral que activa la compactación automática del historial. Máximo: 90% de model_context_window — los valores superiores al 90% se ignoran silenciosamente.
tool_output_token_limit Límite de tokens almacenados en el historial por cada salida de una llamada a una herramienta. Evita que una única respuesta grande de una herramienta llene la ventana. No es la salida máxima — es un límite de almacenamiento en el historial.
compact_prompt Reemplazo en línea del prompt del sistema utilizado durante la compactación (v0.138+).

Nota sobre model_max_output_tokens: Este campo no forma parte del esquema de configuración de Codex CLI (no está presente en el código fuente de Codex en Rust). Si se establece, se ignora silenciosamente. No dependa de él; utilice tool_output_token_limit para controlar cuánta salida de las herramientas se almacena en el historial.

Modelo ID de OmniRoute Ventana de contexto auto_compact tool_output_limit
GPT-5.5 cx/gpt-5.5 400k fiables (1M máx.) 350,000 32,768
Kimi K2.7 (razonamiento) 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 (razonamiento) glm/glm-5.2 131,072 112,000 32,768
MiMo V2.5 Pro (razonamiento) opencode-go/mimo-v2.5-pro 131,072 112,000 32,768
Qwen 3.7 Plus (razonamiento) 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

Fórmula de compactación: effective_window = model_context_window - min(tool_output_token_limit, 20000). Los valores superiores a 20k no modifican el umbral de compactación.

Regla general: establezca model_auto_compact_token_limit entre el 85 y el 88% de model_context_window. Nunca supere el 90%: se ignorará silenciosamente.


Todos los modelos Codex en OmniRoute utilizan el prefijo cx/:

Nombre en Codex CLI Modelo de OmniRoute
cx/gpt-5.5 GPT-5.5 estándar
cx/gpt-5.4 GPT-5.4 estándar
cx/gpt-5.4-mini GPT-5.4 mini
cx/gpt-5.1-codex-mini GPT-5.1 Codex mini

Los demás proveedores utilizan su propio prefijo (kmc/, glm/, ds/, ollamacloud/, opencode-go/, mistral/): el prefijo coincide con el alias del proveedor en OmniRoute.


Controla cuánto “piensa” el modelo antes de responder.

Valor Usar para
none Sin razonamiento: respuesta directa
low Tareas triviales (renombrar, formatear)
medium Valor predeterminado del servidor si no se especifica
high Tareas intermedias (refactorización, depuración)
xhigh Arquitectura, análisis profundo, problemas complejos
Ventana de terminal
# Reemplazo para cada invocación
codex -c model_reasoning_effort=low "rename variable x to count"
codex -c model_reasoning_effort=xhigh "design the auth module"

Configure también un resumen del razonamiento para que Desktop pueda mostrar el texto del pensamiento (no solo bloques cifrados):

~/.codex/config.toml
model_reasoning_effort = "xhigh" # o ultra cuando sea compatible
model_reasoning_summary = "detailed" # auto | concise | detailed | none

Presupuesto de pensamiento de OmniRoute (configuración del servidor)

Sección titulada «Presupuesto de pensamiento de OmniRoute (configuración del servidor)»

En el host de OmniRoute, Settings → AI → Thinking Budget debe establecerse en passthrough para que el esfuerzo/resumen de Codex llegue al proveedor ascendente. El modo auto elimina todos los campos reasoning / reasoning_effort del cliente y dejará vacíos los paneles de pensamiento incluso cuando Codex esté configurado correctamente.

Guía completa: THINKING_BUDGET.md.

La compresión y la caché de prompts son independientes y siguen funcionando con passthrough.


Perfiles: configuraciones con nombre por modelo/flujo de trabajo

Sección titulada «Perfiles: configuraciones con nombre por modelo/flujo de trabajo»

Los perfiles permiten cambiar el modelo y la ventana de contexto con una sola opción. Cada perfil es un archivo plano ~/.codex/&lt;name&gt;.config.toml que se superpone al config.toml base.

Regla de nomenclatura (Codex CLI v0.137+): el archivo debe ser ~/.codex/&lt;name&gt;.config.toml, sin el prefijo profile-. La CLI resuelve -p kimi-k27 como ~/.codex/kimi-k27.config.toml. Si no se encuentra el archivo, se aplica silenciosamente la configuración predeterminada.

Ventana de terminal
codex --profile kimi-k27 "analyze 10k lines of this codebase"
codex -p glm52 "architecture review"
codex --profile deepseek-flash "rename variable" # rápido, económico

Perfiles de esfuerzo (mismo modelo, distinto esfuerzo)

Sección titulada «Perfiles de esfuerzo (mismo modelo, distinto esfuerzo)»
Ventana de terminal
codex -p low # cx/gpt-5.5, esfuerzo=low
codex -p medium # cx/gpt-5.5, esfuerzo=medium
codex -p high # cx/gpt-5.5, esfuerzo=high
codex -p xhigh # cx/gpt-5.5, esfuerzo=xhigh (predeterminado)
codex -p chat # cx/gpt-5.5, sin esfuerzo configurado (valor predeterminado del servidor)

Modelos de pensamiento (alto razonamiento): xhigh + resumen detallado

Sección titulada «Modelos de pensamiento (alto razonamiento): xhigh + resumen detallado»
Perfil Modelo Contexto Usar para
kimi-k27 kmc/kimi-k2.7 128k Mejor calidad de razonamiento (Kimi)
glm52 glm/glm-5.2 128k Razonamiento de GLM
glm52max glm/glm-5.2-max 128k Razonamiento máximo de GLM
mimo-pro opencode-go/mimo-v2.5-pro 128k Razonamiento de MiMo
qwen37plus opencode-go/qwen3.7-plus 32k Razonamiento de Qwen
Perfil Modelo Contexto Usar para
kimi-k26 kmc/kimi-k2.6 128k Uso general (Kimi)
deepseek-pro ollamacloud/deepseek-v4-pro 128k DeepSeek Pro mediante OllamaCloud
deepseek ds/deepseek-v4-pro 1M DeepSeek Pro directo, contexto enorme
mimo opencode-go/mimo-v2.5 128k MiMo de uso general

Modelos sencillos: sin esfuerzo de razonamiento

Sección titulada «Modelos sencillos: sin esfuerzo de razonamiento»
Perfil Modelo Contexto Usar para
gemma4 ollamacloud/gemma4:31b 32k Económico y competente
nemotron ollamacloud/nemotron-3-super 32k NVIDIA Nemotron
gptoss ollamacloud/gpt-oss:20b 32k GPT de código abierto
Perfil Modelo Contexto Usar para
deepseek-flash ollamacloud/deepseek-v4-flash 64k Tareas rápidas
gemini-flash ollamacloud/gemini-3-flash-preview 1M Muy rápido, contexto enorme
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
Tarea Perfil recomendado
Renombrar, formatear, código repetitivo --profile deepseek-flash o -p low
Explicar, revisión ligera -p chat o -p gemini-flash
Depurar, refactorización moderada -p medium o -p kimi-k26
Nueva funcionalidad, pruebas complejas -p high o -p mimo
Arquitectura, análisis profundo -p kimi-k27 o -p glm52 o -p xhigh
Análisis del código base (requiere contexto de 1M) --profile deepseek o --profile gemini-flash
Máxima calidad de razonamiento -p glm52max o -p mimo-pro
Enfoque en minimizar costes -p gemma4 o -p gptoss

Generación automática de perfiles con omniroute setup-codex

Sección titulada «Generación automática de perfiles con omniroute setup-codex»

Si ejecutas OmniRoute en un VPS, puedes generar automáticamente archivos de perfil a partir del catálogo de modelos activo:

Ventana de terminal
# Desde un VPS (usa OmniRoute local en el puerto 20128)
omniroute setup-codex
# Desde cualquier equipo: apunta a tu VPS
omniroute setup-codex --remote http://100.x.x.x:20128 --api-key sk-xxx
# Vista previa sin escribir archivos
omniroute setup-codex --remote http://100.x.x.x:20128 --dry-run
# Generar únicamente perfiles de GLM y Kimi
omniroute setup-codex --only glm,kimi
# Escribir en un directorio personalizado
omniroute setup-codex --codex-home /path/to/.codex

El comando obtiene /v1/models, utiliza perfiles optimizados para los modelos conocidos, recurre a los metadatos del catálogo para otros modelos de texto compatibles y escribe ~/.codex/&lt;name&gt;.config.toml para cada uno. Es idempotente, por lo que puede volver a ejecutarse de forma segura.

OmniRoute también puede sincronizar automáticamente estos mismos archivos de perfil después de que un descubrimiento o una importación correctos de modelos de proveedores modifiquen el catálogo activo. Esta función es opcional y está desactivada de forma predeterminada: actívala desde el panel de CLI Code (“Sincronización automática de perfiles de CLI” → Codex), o establece OMNIROUTE_AUTO_SYNC_CODEX_PROFILES=true (también respeta CLI_ALLOW_CONFIG_WRITES, activado de forma predeterminada). Cuando está activada, solo escribe archivos de perfil ~/.codex/*.config.toml independientes; nunca modifica el archivo activo o predeterminado ~/.codex/config.toml, la configuración de Codex-lb, la autenticación ni la selección del proveedor.


Comprueba el estado de tu instancia de OmniRoute antes de iniciar Codex:

Ventana de terminal
# Iniciar con OmniRoute local (puerto predeterminado 20128)
omniroute launch-codex
# Iniciar con un perfil específico
omniroute launch-codex --profile kimi-k27
# Iniciar con un VPS remoto
omniroute launch-codex --remote http://100.x.x.x:20128/v1 --api-key sk-xxx
# Pasar argumentos adicionales a codex
omniroute launch-codex --profile glm52 -- --yolo "fix this bug"

Codex también es un destino de los dos puntos de entrada genéricos basados en manifiestos (bin/cli/cli-manifest.mjs):

Ventana de terminal
# Selector interactivo de modelos → escribe ~/.codex/&lt;name&gt;.config.toml (TOML, env_key)
omniroute configure codex
# Iniciar codex con el proveedor de omniroute inyectado mediante indicadores -c (sin escribir configuración)
omniroute run codex

Nuevas funciones de Codex CLI (v0.138–v0.141)

Sección titulada «Nuevas funciones de Codex CLI (v0.138–v0.141)»
Versión Función
v0.138 Transferencia a la aplicación de escritorio (/app), tokens de acceso personal v2, --profile como selector exclusivo de perfiles (las tablas [profiles] heredadas dentro del archivo provocan un fallo al iniciar)
v0.139 web_search = "live" — búsqueda web nativa desde el modo de código; oneOf/allOf en los esquemas de herramientas MCP; diagnóstico del entorno con codex doctor
v0.140 Vista de tokens /usage durante la sesión; /import desde sesiones de Claude Code; subcomando codex delete <SESSION_ID>; autenticación de Amazon Bedrock mediante el objeto aws en la configuración del proveedor
v0.141 Retransmisión Noise cifrada de extremo a extremo para ejecutores remotos; corrección de SQLite WAL; compatibilidad con TLS P-521

Nuevos campos de config.toml (posteriores a v0.137)

Sección titulada «Nuevos campos de config.toml (posteriores a v0.137)»
# Búsqueda web nativa (v0.139)
web_search = "live" # "disabled" | "cached" | "live"
# Prompt del sistema independiente para desarrolladores (v0.138)
developer_instructions = "Always prefer functional style."
# Prompt de compactación personalizado
compact_prompt = "Summarise the above as bullet points."
# Enviar /review a un modelo más económico
review_model = "glm/glm-5-turbo"
# Nivel de servicio de OpenAI
service_tier = "fast" # "fast" | "flex"

Nuevos campos de [model_providers.&lt;id&gt;]

Sección titulada «Nuevos campos de [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
# Encabezados adicionales estáticos en cada solicitud
[model_providers.omniroute.http_headers]
"X-Custom-Header" = "value"
# Encabezados leídos de variables de entorno
[model_providers.omniroute.env_http_headers]
"X-Trace-Id" = "TRACE_ID"
# Parámetros de consulta de URL adicionales (útiles para api-version de Azure)
[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" # Perfil de ~/.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 (variable de entorno) Efecto
tool_output_token_limit = 32768 (no está expuesto directamente) Límite del historial por herramienta
model_context_window = 400000 (determinado por el modelo) Ventana de contexto
— CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536 Máximo de tokens por respuesta
Ventana de terminal
# ~/.bashrc — límite de tokens de Claude Code
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536

Opción Abreviatura Efecto
--model &lt;id&gt; -m Sobrescribe model para esta ejecución
--profile &lt;name&gt; -p Carga ~/.codex/&lt;name&gt;.config.toml
--config key=value -c Sobrescribe cualquier campo de config.toml (se puede repetir)
--enable &lt;feature&gt; — Habilita de forma forzada una opción de funcionalidad
--disable &lt;feature&gt; — Deshabilita de forma forzada una opción de funcionalidad
--search — Habilita la búsqueda web en tiempo real para esta ejecución

Novedades en v0.140:

Ventana de terminal
codex delete <SESSION_ID> # elimina una sesión
codex delete <SESSION_ID> --force # omite la confirmación
codex debug models --bundled # muestra el catálogo de modelos incluidos como JSON

Dentro de una sesión interactiva:

Comando Efecto
/model Abre el selector de modelos
/usage Muestra el uso de tokens de esta sesión (v0.140)
/app Transfiere el control a la aplicación de escritorio (v0.138)
/import Importa una sesión de Claude Code (v0.140)
/help Muestra todos los comandos con barra diagonal

Dos valores predeterminados de OmniRoute pueden sabotear silenciosamente las sesiones de Codex CLI que duran varias horas. Ninguno es un ajuste de Codex CLI: ambos se configuran del lado de OmniRoute. Los usuarios que migran una configuración desde proxies de origen que fijan cuentas y deshabilitan los límites de inactividad suelen encontrarse con ambos problemas y concluyen que OmniRoute «no puede mantener una sesión larga».

Síntoma Causa probable Ajuste
La sesión sigue cambiando de cuenta / se pierde la continuidad de la caché de prompts entre turnos El TTL de afinidad de sesión es 0 (deshabilitado) sessionAffinityTtlMs
La conexión se interrumpe en pleno razonamiento sin ningún aviso visible para el cliente El supervisor de inactividad del flujo se activó tras 10 minutos sin fragmentos del servicio de origen STREAM_IDLE_TIMEOUT_MS

Debates relacionados: #7126 (interrupciones en tareas largas), #5718 (por qué la afinidad está desactivada de forma predeterminada). Seguimiento: #7287.

1. Afinidad de sesión — fijar una conversación a una cuenta

Sección titulada «1. Afinidad de sesión — fijar una conversación a una cuenta»

Valor predeterminado: sessionAffinityTtlMs = 0 (deshabilitado).

Dónde configurarlo

  • Panel → Configuración → Enrutamiento → Afinidad de sesión → TTL de afinidad (segundos) (ComboDefaultsTab)
  • O actualice la configuración mediante PATCH con sessionAffinityTtlMs en milisegundos (intervalo de Zod de 0 a 86_400_000, es decir, hasta 24 horas)

En #7274 se cambió el nombre de codexSessionAffinityTtlMs, que era exclusivo de Codex. La clave heredada sigue aceptándose como alias de solo lectura; las configuraciones nuevas deben usar sessionAffinityTtlMs. Ahora la afinidad se aplica a cualquier proveedor cuando el TTL es superior a 0, no solo a Codex; consulte docs/architecture/RESILIENCE_GUIDE.md → Afinidad de sesión.

Qué deja de funcionar cuando permanece en 0

Cada turno de una conversación de Codex con varios turnos se enruta de forma independiente según la estrategia combinada activa y puede dirigirse a una cuenta diferente en cada turno. Esto rompe la continuidad de la sesión o de la caché de prompts en el servicio de origen. OmniRoute solo consulta los encabezados de sesión de Codex (x-codex-session-id / x-session-id / x-omniroute-session) y los campos del cuerpo, como prompt_cache_key / session_id, cuando el TTL es superior a 0 (extractSessionAffinityKey en src/sse/services/auth.ts).

Recomendación para una única tarea de varias horas

Establezca el TTL por encima de la duración real prevista de la tarea (el máximo de la interfaz de usuario es de 86400 segundos = 24 horas):

Duración prevista de la tarea TTL de afinidad (interfaz, segundos) sessionAffinityTtlMs
Unas pocas horas 14400 (4 h) 14400000
Toda la noche / ~12 h 43200 (12 h) 43200000
Un día completo 86400 (24 h, máximo) 86400000

La activación voluntaria es intencionada: deshabilitar la afinidad favorece el equilibrio de carga entre cuentas; habilitarla favorece la continuidad de una sesión larga de un agente. Esta guía no cambia el valor predeterminado: los operadores que ejecuten tareas largas de Codex deben habilitarla explícitamente.

2. Tiempo de espera por inactividad del flujo — no interrumpir turnos de razonamiento silenciosos

Sección titulada «2. Tiempo de espera por inactividad del flujo — no interrumpir turnos de razonamiento silenciosos»

Valor predeterminado: STREAM_IDLE_TIMEOUT_MS = 600000 (10 minutos). Cuando no está definido, hereda de REQUEST_TIMEOUT_MS; el valor base compartido también es 600000. Consulte docs/guides/SETUP_GUIDE.md → Tiempos de espera.

Qué deja de funcionar con el valor predeterminado

Un turno de razonamiento / herramienta de Codex que permanece en silencio durante más de 10 minutos sin ningún fragmento real del origen es cerrado forzosamente por el monitor de inactividad SSE (open-sse/utils/stream.ts). El cliente suele ver una simple desconexión, lo que coincide con “se detuvo automáticamente sin ninguna notificación”.

Detalle crítico: el latido SSE sintético de OmniRoute no reinicia el temporizador de inactividad. Solo un fragmento real del cuerpo del origen actualiza lastChunkTime. Desde el punto de vista del monitor, un modelo silencioso que todavía está “pensando” es idéntico a un origen bloqueado.

Inactividad relacionada del cuerpo de Undici: FETCH_BODY_TIMEOUT_MS (también usa de forma predeterminada la misma referencia de 10 minutos; 0 la deshabilita). Para streaming, FETCH_TIMEOUT_MS solo cubre el establecimiento de la conexión / los primeros encabezados; una vez que el flujo está activo, los bloqueos se rigen por STREAM_IDLE_TIMEOUT_MS y FETCH_BODY_TIMEOUT_MS.

Recomendado para una única tarea de varias horas

En el entorno del proceso de OmniRoute (.env / compose / systemd):

Ventana de terminal
# Deshabilitar los límites de inactividad del flujo y del cuerpo para turnos de razonamiento largos
STREAM_IDLE_TIMEOUT_MS=0
FETCH_BODY_TIMEOUT_MS=0

O auméntelos por encima del intervalo de silencio más largo que espere (los valores están en milisegundos):

Ventana de terminal
# Ejemplo: permitir hasta 2 horas de silencio entre fragmentos del origen
STREAM_IDLE_TIMEOUT_MS=7200000
FETCH_BODY_TIMEOUT_MS=7200000

Reinicie OmniRoute después de cambiar estas variables de entorno.

Receta concreta — tarea de Codex de varias horas

Sección titulada «Receta concreta — tarea de Codex de varias horas»
  1. Fije la cuenta: Panel → Configuración → Enrutamiento → Afinidad de sesión → TTL de afinidad = 43200 (12 h) o 86400 (máximo de 24 h).
  2. Aumente / deshabilite los límites de inactividad en el entorno de OmniRoute:
Ventana de terminal
STREAM_IDLE_TIMEOUT_MS=0
FETCH_BODY_TIMEOUT_MS=0
  1. Mantenga el config.toml habitual de Codex (wire_api = "responses", el base_url correcto, OMNIROUTE_API_KEY); no existen opciones de afinidad/inactividad del lado de Codex para estos dos comportamientos.
  2. Reinicie OmniRoute y, a continuación, inicie la tarea larga de Codex.

Decisión sobre los valores predeterminados (#7287)

Sección titulada «Decisión sobre los valores predeterminados (#7287)»
Opción Valor predeterminado publicado ¿Cambiarlo en esta guía?
sessionAffinityTtlMs 0 (desactivado) No — sigue siendo opcional (equilibrio de carga frente a continuidad; consulte la Discusión #5718)
STREAM_IDLE_TIMEOUT_MS 600000 (10 min) No — se mantiene en 10 minutos para el tráfico general; los operadores de Codex con tareas largas lo aumentan o deshabilitan

Cambiar globalmente cualquiera de los valores predeterminados modificaría el comportamiento para todos los clientes de una instancia, no solo para Codex. Documente las opciones; deje intactos los valores predeterminados hasta que una decisión explícita del operador indique lo contrario.

Cuando se activa el monitor de inactividad, OmniRoute registra una línea con esta forma:

[STREAM] Tiempo de espera por inactividad: no se recibieron datos de codex durante 600000ms (modelo: cx/gpt-5.5)

Busque con grep Idle timeout: no data from (o el código stream_idle_timeout / nombre del error StreamIdleTimeoutError). El segmento del proveedor será el que OmniRoute haya usado para esa solicitud (codex, otro identificador de proveedor o provider si es desconocido); no siempre es la cadena literal codex.


Error: wire_api = "chat" is no longer supported Elimina wire_api = "chat" de la configuración. Establece wire_api = "responses" u omite el campo (el valor predeterminado es "responses" desde v0.138).

Error: model not found Verifica que el modelo exista en OmniRoute con el prefijo correcto. Usa omniroute models list o abre /dashboard/providers/&lt;provider&gt;.

Authentication error Confirma que OMNIROUTE_API_KEY esté exportada: echo $OMNIROUTE_API_KEY.

ERROR: Missing environment variable: OMNIROUTE_API_KEY Codex comprueba que la variable de entorno exista antes de realizar la primera solicitud. Exporta una clave real para los servidores protegidos o un valor provisional no vacío, como OMNIROUTE_API_KEY=local, cuando tu instancia local de OmniRoute no requiera autenticación. Reinicia el shell si la añadiste a ~/.bashrc o ~/.zshrc.

Connection refused Verifica que OmniRoute esté en ejecución y que el host/puerto de base_url sea correcto para tu red (local, Tailscale o VPS).

La sesión falla cerca del límite de contexto Establece model_context_window y model_auto_compact_token_limit de forma explícita. Consulta la tabla de ventanas de contexto anterior.

La compactación se activa demasiado tarde Reduce model_auto_compact_token_limit al 80–85 % de la ventana. Nunca lo establezcas por encima del 90 %.

El perfil no se carga (-p &lt;name&gt; se ignora silenciosamente) Confirma que el archivo exista en ~/.codex/&lt;name&gt;.config.toml (sin el prefijo profile-). Ejecuta ls ~/.codex/*.config.toml.

Una tarea larga de Codex se interrumpe durante la ejecución o cambia de cuenta entre turnos Consulta Tareas de larga duración. Habilita la afinidad de sesión (con un TTL superior a la duración de la tarea) y aumenta o deshabilita STREAM_IDLE_TIMEOUT_MS / FETCH_BODY_TIMEOUT_MS. Busca Idle timeout: no data from en los registros de OmniRoute con grep.


Código fuente de OmniRoute (a58000c7685f)

HagiCode

HagiCode es un espacio de trabajo de programación con agentes, flujos estructurados, ejecución multiagente y vistas de Hero Dungeon.

Convierte ideas en software útil con un flujo de trabajo con agentes más inteligente, rápido y ameno.

Interfaz principal de HagiCode con tema claro
  • SmartLos flujos estructurados convierten la intención en un itinerario ejecutable desde la idea hasta la entrega.
  • EfficientLos flujos multiagente permiten avanzar en paralelo con la investigación, implementación y revisión.
  • FunHero Dungeon hace que las largas sesiones de programación sean visuales y colaborativas.
Visitar HagiCode