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 --helpdocumenta que las sobrescrituras de-c/--configse «cargan desde~/.codex/config.toml»). El antiguo~/.codex/config.yamlpertenecía a la CLI heredada de npm y se ignora silenciosamente. El generador del panel (/api/cli-tools/apply, herramientacodex) escribe TOML mediante una combinación conservadora: se conservan las claves existentes y los bloques de otros proveedores, la clave de API permanece enOMNIROUTE_API_KEY(nunca en el archivo) y cualquierconfig.yamlheredado restante se indica en una nota de migración sin modificarlo.
config.toml listo para copiar y pegar
Sección titulada «config.toml listo para copiar y pegar»Reemplaza <YOUR_HOST> y <YOUR_KEY> por tus valores:
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 # 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 = falsewire_api = "responses"# ~/.bashrc o ~/.zshrc — valor real de la clave, nunca en config.tomlexport 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:
export PATH="/Applications/ChatGPT.app/Contents/Resources:$PATH"Abre una nueva shell y, a continuación, verifica:
command -v codexcodex --versionOmniRoute 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:
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/v1Tailscale http://100.x.x.x:20128/v1Bucle 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_apies el valor predeterminado: el campo usa"responses"de forma predeterminada y puede omitirse por completo deconfig.toml. Solo debes establecerlo explícitamente si quieres documentar la intención.
Ventana de contexto y compactación
Sección titulada «Ventana de contexto y compactación»Campos de configuración de tokens
Sección titulada «Campos de configuración de tokens»| 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; utilicetool_output_token_limitpara controlar cuánta salida de las herramientas se almacena en el historial.
Ventanas de contexto por modelo
Sección titulada «Ventanas de contexto por modelo»| 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_limitentre el 85 y el 88% demodel_context_window. Nunca supere el 90%: se ignorará silenciosamente.
Prefijo del modelo: cx/
Sección titulada «Prefijo del modelo: cx/»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.
Esfuerzo de razonamiento
Sección titulada «Esfuerzo de razonamiento»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 |
# Reemplazo para cada invocacióncodex -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):
model_reasoning_effort = "xhigh" # o ultra cuando sea compatiblemodel_reasoning_summary = "detailed" # auto | concise | detailed | nonePresupuesto 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/<name>.config.toml que se superpone al config.toml base.
Regla de nomenclatura (Codex CLI v0.137+): el archivo debe ser
~/.codex/<name>.config.toml, sin el prefijoprofile-. La CLI resuelve-p kimi-k27como~/.codex/kimi-k27.config.toml. Si no se encuentra el archivo, se aplica silenciosamente la configuración predeterminada.
codex --profile kimi-k27 "analyze 10k lines of this codebase"codex -p glm52 "architecture review"codex --profile deepseek-flash "rename variable" # rápido, económicoPerfiles de esfuerzo (mismo modelo, distinto esfuerzo)
Sección titulada «Perfiles de esfuerzo (mismo modelo, distinto esfuerzo)»codex -p low # cx/gpt-5.5, esfuerzo=lowcodex -p medium # cx/gpt-5.5, esfuerzo=mediumcodex -p high # cx/gpt-5.5, esfuerzo=highcodex -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 |
Buenos modelos: esfuerzo alto
Sección titulada «Buenos modelos: esfuerzo alto»| 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 |
Modelos rápidos: esfuerzo bajo
Sección titulada «Modelos rápidos: esfuerzo bajo»| 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 |
Tabla de decisión rápida
Sección titulada «Tabla de decisión rápida»| 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:
# Desde un VPS (usa OmniRoute local en el puerto 20128)omniroute setup-codex
# Desde cualquier equipo: apunta a tu VPSomniroute setup-codex --remote http://100.x.x.x:20128 --api-key sk-xxx
# Vista previa sin escribir archivosomniroute setup-codex --remote http://100.x.x.x:20128 --dry-run
# Generar únicamente perfiles de GLM y Kimiomniroute setup-codex --only glm,kimi
# Escribir en un directorio personalizadoomniroute setup-codex --codex-home /path/to/.codexEl 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/<name>.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.
Inicio de Codex con omniroute launch-codex
Sección titulada «Inicio de Codex con omniroute launch-codex»Comprueba el estado de tu instancia de OmniRoute antes de iniciar Codex:
# Iniciar con OmniRoute local (puerto predeterminado 20128)omniroute launch-codex
# Iniciar con un perfil específicoomniroute launch-codex --profile kimi-k27
# Iniciar con un VPS remotoomniroute launch-codex --remote http://100.x.x.x:20128/v1 --api-key sk-xxx
# Pasar argumentos adicionales a codexomniroute 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):
# Selector interactivo de modelos → escribe ~/.codex/<name>.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 codexNuevas 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 personalizadocompact_prompt = "Summarise the above as bullet points."
# Enviar /review a un modelo más económicoreview_model = "glm/glm-5-turbo"
# Nivel de servicio de OpenAIservice_tier = "fast" # "fast" | "flex"Nuevos campos de [model_providers.<id>]
Sección titulada «Nuevos campos de [model_providers.<id>]»[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"Autenticación de Amazon Bedrock (v0.140)
Sección titulada «Autenticación de Amazon Bedrock (v0.140)»[model_providers.bedrock]base_url = "https://bedrock-runtime.us-east-1.amazonaws.com"
[model_providers.bedrock.aws]profile = "default" # Perfil de ~/.aws/credentialsregion = "us-east-1"Varios servidores
Sección titulada «Varios servidores»[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 — configuración equivalente
Sección titulada «Claude Code — configuración equivalente»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 |
# ~/.bashrc — límite de tokens de Claude Codeexport CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536Referencia rápida — opciones de la CLI
Sección titulada «Referencia rápida — opciones de la CLI»| Opción | Abreviatura | Efecto |
|---|---|---|
--model <id> |
-m |
Sobrescribe model para esta ejecución |
--profile <name> |
-p |
Carga ~/.codex/<name>.config.toml |
--config key=value |
-c |
Sobrescribe cualquier campo de config.toml (se puede repetir) |
--enable <feature> |
— | Habilita de forma forzada una opción de funcionalidad |
--disable <feature> |
— | 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:
codex delete <SESSION_ID> # elimina una sesióncodex delete <SESSION_ID> --force # omite la confirmacióncodex debug models --bundled # muestra el catálogo de modelos incluidos como JSONDentro 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 |
Tareas de larga duración
Sección titulada «Tareas de larga duración»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
sessionAffinityTtlMsen milisegundos (intervalo de Zod de0a86_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 usarsessionAffinityTtlMs. Ahora la afinidad se aplica a cualquier proveedor cuando el TTL es superior a0, no solo a Codex; consultedocs/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):
# Deshabilitar los límites de inactividad del flujo y del cuerpo para turnos de razonamiento largosSTREAM_IDLE_TIMEOUT_MS=0FETCH_BODY_TIMEOUT_MS=0O auméntelos por encima del intervalo de silencio más largo que espere (los valores están en milisegundos):
# Ejemplo: permitir hasta 2 horas de silencio entre fragmentos del origenSTREAM_IDLE_TIMEOUT_MS=7200000FETCH_BODY_TIMEOUT_MS=7200000Reinicie 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»- Fije la cuenta: Panel → Configuración → Enrutamiento → Afinidad de sesión → TTL de afinidad =
43200(12 h) o86400(máximo de 24 h). - Aumente / deshabilite los límites de inactividad en el entorno de OmniRoute:
STREAM_IDLE_TIMEOUT_MS=0FETCH_BODY_TIMEOUT_MS=0- Mantenga el
config.tomlhabitual de Codex (wire_api = "responses", elbase_urlcorrecto,OMNIROUTE_API_KEY); no existen opciones de afinidad/inactividad del lado de Codex para estos dos comportamientos. - 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.
Diagnóstico de cortes por inactividad
Sección titulada «Diagnóstico de cortes por inactividad»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.
Solución de problemas
Sección titulada «Solución de problemas»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/<provider>.
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 <name> se ignora silenciosamente)
Confirma que el archivo exista en ~/.codex/<name>.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.
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.

- 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.