Codex CLI — Configuration with OmniRoute (Português (Brasil))
TOML é o único formato efetivo. O Codex moderno lê exclusivamente
~/.codex/config.toml(verificado com codex-cli 0.147.0:codex --helpdocumenta que as substituições de-c/--configsão “carregadas de~/.codex/config.toml”). O antigo~/.codex/config.yamlpertencia à CLI npm legada e é silenciosamente ignorado. O gerador do painel (/api/cli-tools/apply, ferramentacodex) grava TOML com uma mesclagem conservadora — as chaves existentes e os blocos de outros provedores são preservados, a chave da API permanece emOMNIROUTE_API_KEY(nunca no arquivo), e umconfig.yamllegado remanescente é reportado como uma observação de migração sem ser alterado.
config.toml pronto para colar
Seção intitulada “config.toml pronto para colar”Substitua <YOUR_HOST> e <YOUR_KEY> pelos seus 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 # limite de armazenamento do histórico por chamada de ferramenta
[model_providers.omniroute]name = "OmniRoute"base_url = "http://<YOUR_HOST>:20128/v1"env_key = "OMNIROUTE_API_KEY"requires_openai_auth = falsewire_api = "responses"# ~/.bashrc ou ~/.zshrc — valor real da chave, nunca em config.tomlexport OMNIROUTE_API_KEY="<YOUR_KEY>"macOS: Codex incluído no aplicativo ChatGPT
Seção intitulada “macOS: Codex incluído no aplicativo ChatGPT”Se você instalou o Codex por meio do aplicativo ChatGPT para desktop, o binário
codex pode existir apenas dentro do pacote do aplicativo e ainda não estar no
PATH do seu shell. Adicione o diretório de recursos ao arquivo de inicialização
do seu shell:
export PATH="/Applications/ChatGPT.app/Contents/Resources:$PATH"Abra um novo shell e verifique:
command -v codexcodex --versionOmniRoute local sem autenticação: uma chave de espaço reservado é suficiente
Seção intitulada “OmniRoute local sem autenticação: uma chave de espaço reservado é suficiente”O Codex verifica se a variável de ambiente indicada por env_key existe
antes que a primeira solicitação saia da CLI. Se a sua instância local
do OmniRoute não exigir autenticação, qualquer valor não vazio de espaço
reservado funcionará:
export OMNIROUTE_API_KEY="${OMNIROUTE_API_KEY:-local}"Use uma chave real se o seu servidor OmniRoute estiver protegido ou for remoto.
Opções comuns de host
Acesso URL Rede local http://192.168.0.1:20128/v1Tailscale http://100.x.x.x:20128/v1Loopback http://localhost:20128/v1
wire_api = "responses" — por que funciona com todos os modelos
Seção intitulada “wire_api = "responses" — por que funciona com todos os modelos”A Codex CLI descontinuou wire_api = "chat" (Chat Completions) em fevereiro de 2026 e agora exige wire_api = "responses" (OpenAI Responses API). Definir wire_api = "chat" causa uma falha imediata na inicialização desde a v0.138.
Muitos provedores, incluindo GLM e Kimi, ainda expõem apenas um endpoint de Chat Completions. O DeepSeek V4 agora também expõe uma Responses API nativa, além de um endpoint compatível com a Anthropic; o OmniRoute usa Responses por padrão e permite que cada conexão do DeepSeek selecione a compatibilidade com a Anthropic.
O OmniRoute resolve isso de forma transparente:
Codex CLI → wire_api = "responses" → POST /v1/responses (OmniRoute) → O OmniRoute seleciona o protocolo nativo do provedor e faz a tradução quando necessário → POST /responses (DeepSeek V4) ou /chat/completions (Mistral / GLM / Kimi / outros)Você nunca precisa de um proxy de tradução separado ao usar o OmniRoute. Todos os modelos usam wire_api = "responses" — o OmniRoute cuida do restante.
wire_apié o padrão — o campo usa"responses"como valor padrão e pode ser completamente omitido doconfig.toml. Defina-o explicitamente apenas se quiser documentar a intenção.
Janela de contexto e compactação
Seção intitulada “Janela de contexto e compactação”Campos de configuração de tokens
Seção intitulada “Campos de configuração de tokens”| Campo | Descrição |
|---|---|
model_context_window |
Orçamento total de tokens para o modelo ativo. Defina-o como o limite anunciado do modelo. |
model_auto_compact_token_limit |
Limite que aciona a compactação automática do histórico. Máximo: 90% de model_context_window — valores acima de 90% são silenciosamente ignorados. |
tool_output_token_limit |
Limite de tokens armazenados no histórico por saída de chamada de ferramenta. Impede que uma única resposta grande de ferramenta preencha a janela. Este não é o máximo de saída — é um limite de armazenamento no histórico. |
compact_prompt |
Substituição inline do prompt do sistema usado durante a compactação (v0.138+). |
Observação sobre
model_max_output_tokens: Este campo não faz parte do esquema de configuração da Codex CLI (ausente da base de código Rust do Codex). Ele é silenciosamente ignorado se for definido. Não dependa dele — usetool_output_token_limitpara controlar quanto da saída das ferramentas é armazenado no histórico.
Janelas de contexto por modelo
Seção intitulada “Janelas de contexto por modelo”| Modelo | ID do OmniRoute | Janela de contexto | auto_compact |
tool_output_limit |
|---|---|---|---|---|
| GPT-5.5 | cx/gpt-5.5 |
400k confiáveis (máximo de 1M) | 350,000 | 32,768 |
| Kimi K2.7 (raciocínio) | 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 (raciocínio) | glm/glm-5.2 |
131,072 | 112,000 | 32,768 |
| MiMo V2.5 Pro (raciocínio) | opencode-go/mimo-v2.5-pro |
131,072 | 112,000 | 32,768 |
| Qwen 3.7 Plus (raciocínio) | 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 compactação:
effective_window = model_context_window - min(tool_output_token_limit, 20000). Valores acima de 20k não alteram o acionamento da compactação.
Regra prática: defina
model_auto_compact_token_limitcomo 85–88% demodel_context_window. Nunca ultrapasse 90% — o valor será silenciosamente ignorado.
Prefixo dos modelos: cx/
Seção intitulada “Prefixo dos modelos: cx/”Todos os modelos Codex no OmniRoute usam o prefixo cx/:
| Nome no Codex CLI | Modelo no OmniRoute |
|---|---|
cx/gpt-5.5 |
GPT-5.5 padrão |
cx/gpt-5.4 |
GPT-5.4 padrão |
cx/gpt-5.4-mini |
GPT-5.4 mini |
cx/gpt-5.1-codex-mini |
GPT-5.1 Codex mini |
Outros provedores usam seus próprios prefixos (kmc/, glm/, ds/, ollamacloud/, opencode-go/, mistral/) — o prefixo corresponde ao alias do provedor no OmniRoute.
Esforço de raciocínio
Seção intitulada “Esforço de raciocínio”Controla o quanto o modelo “pensa” antes de responder.
| Valor | Usar para |
|---|---|
none |
Sem raciocínio — resposta direta |
low |
Tarefas triviais (renomear, formatar) |
medium |
Padrão do servidor quando não especificado |
high |
Tarefas intermediárias (refatoração, depuração) |
xhigh |
Arquitetura, análise profunda, problemas complexos |
# Sobrescrever por invocaçãocodex -c model_reasoning_effort=low "renomeie a variável x para count"codex -c model_reasoning_effort=xhigh "projete o módulo de autenticação"Defina também um resumo do raciocínio para que o Desktop possa renderizar o texto do pensamento (não apenas blocos criptografados):
model_reasoning_effort = "xhigh" # ou ultra, quando houver suportemodel_reasoning_summary = "detailed" # auto | concise | detailed | noneOrçamento de raciocínio do OmniRoute (configuração do servidor)
Seção intitulada “Orçamento de raciocínio do OmniRoute (configuração do servidor)”No host do OmniRoute, Configurações → IA → Orçamento de raciocínio deve estar definido como passthrough para que o esforço/resumo do Codex chegue ao provedor upstream. O modo auto remove todos os campos reasoning / reasoning_effort do cliente e deixa os painéis de raciocínio vazios, mesmo quando o Codex está configurado corretamente.
Guia completo: THINKING_BUDGET.md.
A compactação e o cache de prompts são independentes e continuam funcionando com passthrough.
Perfis — configurações nomeadas por modelo/fluxo de trabalho
Seção intitulada “Perfis — configurações nomeadas por modelo/fluxo de trabalho”Os perfis permitem alternar o modelo + janela de contexto com uma única flag. Cada perfil é um arquivo simples
~/.codex/<name>.config.toml sobreposto ao config.toml base.
Regra de nomenclatura (Codex CLI v0.137+): o arquivo deve ser
~/.codex/<name>.config.toml— sem o prefixoprofile-. O CLI resolve-p kimi-k27→~/.codex/kimi-k27.config.toml. Se o arquivo não for encontrado, a configuração padrão será aplicada silenciosamente.
codex --profile kimi-k27 "analise 10 mil linhas desta base de código"codex -p glm52 "revisão da arquitetura"codex --profile deepseek-flash "renomeie a variável" # rápido, baratoPerfis de esforço (mesmo modelo, esforços diferentes)
Seção intitulada “Perfis de esforço (mesmo modelo, esforços diferentes)”codex -p low # cx/gpt-5.5, esforço=lowcodex -p medium # cx/gpt-5.5, esforço=mediumcodex -p high # cx/gpt-5.5, esforço=highcodex -p xhigh # cx/gpt-5.5, esforço=xhigh (padrão)codex -p chat # cx/gpt-5.5, nenhum esforço definido (padrão do servidor)Modelos de raciocínio (alto pensamento) — xhigh + resumo detalhado
Seção intitulada “Modelos de raciocínio (alto pensamento) — xhigh + resumo detalhado”| Perfil | Modelo | Contexto | Usar para |
|---|---|---|---|
kimi-k27 |
kmc/kimi-k2.7 |
128k | Melhor qualidade de raciocínio (Kimi) |
glm52 |
glm/glm-5.2 |
128k | Raciocínio GLM |
glm52max |
glm/glm-5.2-max |
128k | Raciocínio GLM máximo |
mimo-pro |
opencode-go/mimo-v2.5-pro |
128k | Raciocínio MiMo |
qwen37plus |
opencode-go/qwen3.7-plus |
32k | Raciocínio Qwen |
Bons modelos (bons) — esforço alto
Seção intitulada “Bons modelos (bons) — esforço alto”| Perfil | Modelo | Contexto | Usar para |
|---|---|---|---|
kimi-k26 |
kmc/kimi-k2.6 |
128k | Uso geral (Kimi) |
deepseek-pro |
ollamacloud/deepseek-v4-pro |
128k | DeepSeek Pro via OllamaCloud |
deepseek |
ds/deepseek-v4-pro |
1M | DeepSeek Pro direto, contexto gigantesco |
mimo |
opencode-go/mimo-v2.5 |
128k | MiMo para uso geral |
Modelos simples (simples) — sem esforço de raciocínio
Seção intitulada “Modelos simples (simples) — sem esforço de raciocínio”| Perfil | Modelo | Contexto | Usar para |
|---|---|---|---|
gemma4 |
ollamacloud/gemma4:31b |
32k | Econômico e competente |
nemotron |
ollamacloud/nemotron-3-super |
32k | NVIDIA Nemotron |
gptoss |
ollamacloud/gpt-oss:20b |
32k | GPT de código aberto |
Modelos rápidos — esforço baixo
Seção intitulada “Modelos rápidos — esforço baixo”| Perfil | Modelo | Contexto | Usar para |
|---|---|---|---|
deepseek-flash |
ollamacloud/deepseek-v4-flash |
64k | Tarefas rápidas |
gemini-flash |
ollamacloud/gemini-3-flash-preview |
1M | Muito rápido, contexto gigantesco |
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 |
Tabela de decisão rápida
Seção intitulada “Tabela de decisão rápida”| Tarefa | Perfil recomendado |
|---|---|
| Renomeação, formatação, código boilerplate | --profile deepseek-flash ou -p low |
| Explicação, revisão leve | -p chat ou -p gemini-flash |
| Depuração, refatoração moderada | -p medium ou -p kimi-k26 |
| Nova funcionalidade, testes complexos | -p high ou -p mimo |
| Arquitetura, análise aprofundada | -p kimi-k27 ou -p glm52 ou -p xhigh |
| Análise da base de código (requer ctx de 1M) | --profile deepseek ou --profile gemini-flash |
| Qualidade máxima de raciocínio | -p glm52max ou -p mimo-pro |
| Foco em economia | -p gemma4 ou -p gptoss |
Gerando perfis automaticamente com omniroute setup-codex
Seção intitulada “Gerando perfis automaticamente com omniroute setup-codex”Se você executar o OmniRoute em um VPS, poderá gerar automaticamente arquivos de perfil a partir do catálogo de modelos ativo:
# Em um VPS (usa o OmniRoute local na porta 20128)omniroute setup-codex
# Em qualquer máquina — aponte para o seu VPSomniroute setup-codex --remote http://100.x.x.x:20128 --api-key sk-xxx
# Visualize sem gravar arquivosomniroute setup-codex --remote http://100.x.x.x:20128 --dry-run
# Gere apenas os perfis do GLM e do Kimiomniroute setup-codex --only glm,kimi
# Grave em um diretório personalizadoomniroute setup-codex --codex-home /path/to/.codexO comando busca /v1/models, usa perfis ajustados para modelos conhecidos, recorre aos metadados do catálogo para outros modelos de texto compatíveis e grava ~/.codex/<name>.config.toml para cada um. É idempotente — pode ser executado novamente com segurança.
O OmniRoute também pode sincronizar automaticamente esses mesmos arquivos de perfil depois que uma descoberta/importação bem-sucedida de modelos do provedor altera o catálogo ativo. Esse recurso é opcional e fica desativado por padrão: ative-o no painel CLI Code (“CLI profile auto-sync” → Codex) ou defina OMNIROUTE_AUTO_SYNC_CODEX_PROFILES=true (ele também respeita CLI_ALLOW_CONFIG_WRITES, ativado por padrão). Quando habilitado, ele grava apenas arquivos de perfil ~/.codex/*.config.toml separados; nunca altera o ~/.codex/config.toml ativo/padrão, as configurações do Codex-lb, a autenticação ou a seleção do provedor.
Iniciando o Codex com omniroute launch-codex
Seção intitulada “Iniciando o Codex com omniroute launch-codex”Verifica a integridade da sua instância do OmniRoute antes de iniciar o Codex:
# Inicie usando o OmniRoute local (porta padrão 20128)omniroute launch-codex
# Inicie com um perfil específicoomniroute launch-codex --profile kimi-k27
# Inicie usando um VPS remotoomniroute launch-codex --remote http://100.x.x.x:20128/v1 --api-key sk-xxx
# Passe argumentos extras para o codexomniroute launch-codex --profile glm52 -- --yolo "fix this bug"O Codex também é um destino dos dois pontos de entrada genéricos orientados por manifesto
(bin/cli/cli-manifest.mjs):
# Seletor interativo de modelos → grava ~/.codex/<name>.config.toml (TOML, env_key)omniroute configure codex
# Inicie o codex com o provedor omniroute injetado por meio de flags -c (nenhuma configuração é gravada)omniroute run codexNovos recursos da CLI do Codex (v0.138–v0.141)
Seção intitulada “Novos recursos da CLI do Codex (v0.138–v0.141)”| Versão | Recurso |
|---|---|
| v0.138 | Transferência para o aplicativo desktop (/app), tokens de acesso pessoal v2, --profile como seletor exclusivo de perfil (tabelas [profiles] legadas no arquivo causam falha na inicialização) |
| v0.139 | web_search = "live" — pesquisa nativa na web no modo de código; oneOf/allOf nos esquemas de ferramentas MCP; diagnóstico de ambiente codex doctor |
| v0.140 | Visualização de tokens /usage durante a sessão; /import de sessões do Claude Code; subcomando codex delete <SESSION_ID>; autenticação do Amazon Bedrock por meio do objeto aws na configuração do provedor |
| v0.141 | Retransmissão Noise com criptografia E2E para executores remotos; correção do WAL do SQLite; suporte a TLS P-521 |
Novos campos de config.toml (após a v0.137)
Seção intitulada “Novos campos de config.toml (após a v0.137)”# Pesquisa nativa na web (v0.139)web_search = "live" # "disabled" | "cached" | "live"
# Prompt de sistema separado para o desenvolvedor (v0.138)developer_instructions = "Always prefer functional style."
# Prompt de compactação personalizadocompact_prompt = "Summarise the above as bullet points."
# Encaminhe /review para um modelo mais baratoreview_model = "glm/glm-5-turbo"
# Nível de serviço da OpenAIservice_tier = "fast" # "fast" | "flex"Novos campos de [model_providers.<id>]
Seção intitulada “Novos 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
# Cabeçalhos extras estáticos em todas as solicitações[model_providers.omniroute.http_headers]"X-Custom-Header" = "value"
# Cabeçalhos lidos de variáveis de ambiente[model_providers.omniroute.env_http_headers]"X-Trace-Id" = "TRACE_ID"
# Parâmetros extras de consulta da URL (úteis para o api-version do Azure)[model_providers.omniroute.query_params]"api-version" = "2024-12-01-preview"Autenticação do Amazon Bedrock (v0.140)
Seção intitulada “Autenticação do 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"Vários servidores
Seção intitulada “Vários 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 — configuração equivalente
Seção intitulada “Claude Code — configuração equivalente”Codex CLI (config.toml) |
Claude Code (variável de ambiente) | Efeito |
|---|---|---|
tool_output_token_limit = 32768 |
(não exposto diretamente) | Limite de histórico por ferramenta |
model_context_window = 400000 |
(determinado pelo modelo) | Janela de contexto |
| — | CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536 |
Máximo de tokens por resposta |
# ~/.bashrc — limite de tokens do Claude Codeexport CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536Referência rápida — flags da CLI
Seção intitulada “Referência rápida — flags da CLI”| Flag | Forma curta | Efeito |
|---|---|---|
--model <id> |
-m |
Substitui model nesta execução |
--profile <name> |
-p |
Carrega ~/.codex/<name>.config.toml |
--config key=value |
-c |
Substitui qualquer campo de config.toml (pode ser repetido) |
--enable <feature> |
— | Habilita à força uma flag de recurso |
--disable <feature> |
— | Desabilita à força uma flag de recurso |
--search |
— | Habilita a pesquisa ao vivo na web nesta execução |
Novidades na v0.140:
codex delete <SESSION_ID> # excluir uma sessãocodex delete <SESSION_ID> --force # ignorar confirmaçãocodex debug models --bundled # listar o catálogo de modelos incluídos como JSONDentro de uma sessão interativa:
| Comando | Efeito |
|---|---|
/model |
Abre o seletor de modelos |
/usage |
Mostra o uso de tokens desta sessão (v0.140) |
/app |
Transfere para o aplicativo de desktop (v0.138) |
/import |
Importa uma sessão do Claude Code (v0.140) |
/help |
Lista todos os comandos com barra |
Tarefas de longa duração
Seção intitulada “Tarefas de longa duração”Dois padrões do OmniRoute podem sabotar silenciosamente sessões de várias horas do Codex CLI. Nenhum deles é uma configuração do Codex CLI — ambos ficam do lado do OmniRoute. Usuários que migram uma configuração de proxies upstream que fixam contas e desabilitam limites de inatividade frequentemente encontram ambos os problemas e concluem que o OmniRoute “não consegue sustentar uma sessão longa”.
| Sintoma | Causa provável | Configuração |
|---|---|---|
| A sessão continua alternando entre contas / a continuidade do cache de prompts é perdida entre turnos | O TTL de afinidade de sessão é 0 (desabilitado) |
sessionAffinityTtlMs |
| A conexão é encerrada durante o raciocínio sem nenhum prompt visível para o cliente | O watchdog de inatividade do stream foi acionado após 10 minutos sem nenhum chunk upstream | STREAM_IDLE_TIMEOUT_MS |
Discussões relacionadas: #7126 (interrupções em tarefas longas), #5718 (por que a afinidade vem desabilitada por padrão). Acompanhamento: #7287.
1. Afinidade de sessão — fixe uma conversa em uma conta
Seção intitulada “1. Afinidade de sessão — fixe uma conversa em uma conta”Padrão: sessionAffinityTtlMs = 0 (desabilitado).
Onde configurar
- Painel → Configurações → Roteamento → Afinidade de sessão → TTL de afinidade (segundos) (
ComboDefaultsTab) - Ou faça PATCH das configurações com
sessionAffinityTtlMsem milissegundos (intervalo do Zod de0–86_400_000, ou seja, até 24 horas)
Renomeado em #7274 a partir de
codexSessionAffinityTtlMs, que era exclusivo do Codex. A chave legada ainda é aceita como um alias somente leitura; novas configurações devem usarsessionAffinityTtlMs. Agora, a afinidade se aplica a qualquer provedor quando o TTL é maior que0, não apenas ao Codex — consultedocs/architecture/RESILIENCE_GUIDE.md→ Afinidade de sessão.
O que deixa de funcionar quando permanece em 0
Cada turno de uma conversa de múltiplos turnos do Codex é roteado de forma independente pela estratégia de combinação ativa e pode chegar a uma conta diferente a cada turno. Isso interrompe a continuidade da sessão upstream / do cache de prompts. O OmniRoute só consulta os cabeçalhos de sessão do Codex (x-codex-session-id / x-session-id / x-omniroute-session) e campos do corpo, como prompt_cache_key / session_id, quando o TTL é maior que 0 (extractSessionAffinityKey em src/sse/services/auth.ts).
Recomendado para uma única tarefa de várias horas
Defina o TTL como um valor maior que a duração esperada da tarefa em tempo real (o máximo da interface é 86400 segundos = 24 horas):
| Duração esperada da tarefa | TTL de afinidade (interface, segundos) | sessionAffinityTtlMs |
|---|---|---|
| Algumas horas | 14400 (4h) |
14400000 |
| Durante a noite / ~12h | 43200 (12h) |
43200000 |
| Dia inteiro | 86400 (24h, máximo) |
86400000 |
A adesão é deliberada: desabilitar a afinidade favorece o balanceamento de carga entre contas; habilitá-la favorece a continuidade de uma sessão longa do agente. Este guia não altera o padrão — operadores que executam tarefas longas do Codex precisam habilitá-la explicitamente.
2. Tempo limite de inatividade do stream — não encerre turnos silenciosos de raciocínio
Seção intitulada “2. Tempo limite de inatividade do stream — não encerre turnos silenciosos de raciocínio”Padrão: STREAM_IDLE_TIMEOUT_MS = 600000 (10 minutos). Quando não definido, ele é herdado de REQUEST_TIMEOUT_MS; o valor-base compartilhado também é 600000. Consulte docs/guides/SETUP_GUIDE.md → Tempos limite.
O que deixa de funcionar com o padrão
Um turno de raciocínio / ferramenta do Codex que permanece silencioso por mais de 10 minutos sem nenhum chunk real do upstream é encerrado à força pelo watchdog de inatividade do SSE (open-sse/utils/stream.ts). O cliente frequentemente vê apenas a conexão cair — correspondendo a “parou automaticamente sem nenhuma notificação”.
Detalhe crítico: o heartbeat SSE sintético do OmniRoute não reinicia o relógio de inatividade. Somente um chunk real do corpo do upstream atualiza lastChunkTime. Um modelo silencioso que ainda está “pensando” parece idêntico a um upstream travado do ponto de vista do watchdog.
Inatividade relacionada do corpo no Undici: FETCH_BODY_TIMEOUT_MS (também usa por padrão a mesma referência de 10 minutos; 0 a desativa). Para streaming, FETCH_TIMEOUT_MS cobre apenas o estabelecimento da conexão / os primeiros cabeçalhos — quando o stream está ativo, as interrupções são controladas por STREAM_IDLE_TIMEOUT_MS e FETCH_BODY_TIMEOUT_MS.
Recomendado para uma única tarefa com várias horas de duração
No ambiente do processo do OmniRoute (.env / compose / systemd):
# Desativa os limites de inatividade do stream e do corpo para turnos longos de raciocínioSTREAM_IDLE_TIMEOUT_MS=0FETCH_BODY_TIMEOUT_MS=0Ou aumente-os para além do maior intervalo de silêncio esperado (os valores são em milissegundos):
# Exemplo: permite até 2 horas de silêncio entre chunks do upstreamSTREAM_IDLE_TIMEOUT_MS=7200000FETCH_BODY_TIMEOUT_MS=7200000Reinicie o OmniRoute após alterar essas variáveis de ambiente.
Procedimento concreto — tarefa do Codex com várias horas de duração
Seção intitulada “Procedimento concreto — tarefa do Codex com várias horas de duração”- Fixe a conta: Painel → Configurações → Roteamento → Afinidade de sessão → TTL de afinidade =
43200(12h) ou86400(máximo de 24h). - Aumente / desative os limites de inatividade no ambiente do OmniRoute:
STREAM_IDLE_TIMEOUT_MS=0FETCH_BODY_TIMEOUT_MS=0- Mantenha o
config.tomlhabitual do Codex (wire_api = "responses",base_urlcorreto,OMNIROUTE_API_KEY) — não existem opções de afinidade/inatividade no lado do Codex para esses dois comportamentos. - Reinicie o OmniRoute e, em seguida, inicie a tarefa longa do Codex.
Decisão sobre os padrões (#7287)
Seção intitulada “Decisão sobre os padrões (#7287)”| Opção | Padrão distribuído | Alterar neste guia? |
|---|---|---|
sessionAffinityTtlMs |
0 (desativado) |
Não — continua sendo opcional (balanceamento de carga vs. continuidade; consulte a Discussão #5718) |
STREAM_IDLE_TIMEOUT_MS |
600000 (10 min) |
Não — permanece em 10 minutos para o tráfego geral; operadores de tarefas longas do Codex aumentam ou desativam esse valor |
Alterar globalmente qualquer um desses padrões mudaria o comportamento para todos os clientes de uma instância, não apenas para o Codex. Documente as opções; mantenha os padrões inalterados até que uma decisão explícita do operador determine o contrário.
Diagnóstico de encerramentos por inatividade
Seção intitulada “Diagnóstico de encerramentos por inatividade”Quando o watchdog de inatividade é acionado, o OmniRoute registra uma linha com este formato:
[STREAM] Idle timeout: no data from codex for 600000ms (model: cx/gpt-5.5)Pesquise por Idle timeout: no data from (ou pelo código stream_idle_timeout / nome do erro StreamIdleTimeoutError). O segmento do provedor será aquele que o OmniRoute usou para essa solicitação (codex, outro ID de provedor ou provider se for desconhecido) — ele nem sempre é a string literal codex.
Solução de problemas
Seção intitulada “Solução de problemas”Error: wire_api = "chat" is no longer supported
Remova wire_api = "chat" da sua configuração. Defina wire_api = "responses" ou omita o campo (o padrão é "responses" desde a v0.138).
Error: model not found
Verifique se o modelo existe no OmniRoute com o prefixo correto. Use omniroute models list ou abra /dashboard/providers/<provider>.
Authentication error
Confirme se OMNIROUTE_API_KEY foi exportada: echo $OMNIROUTE_API_KEY.
ERROR: Missing environment variable: OMNIROUTE_API_KEY
O Codex valida se a variável de ambiente existe antes de fazer a primeira solicitação. Exporte
uma chave real para servidores protegidos ou um valor provisório não vazio, como
OMNIROUTE_API_KEY=local, quando sua instância local do OmniRoute não
exigir autenticação. Reinicie o shell caso tenha adicionado a variável a ~/.bashrc ou ~/.zshrc.
Connection refused
Verifique se o OmniRoute está em execução e se o host e a porta de base_url estão corretos para sua rede (local, Tailscale ou VPS).
A sessão falha ao se aproximar do limite de contexto
Defina model_context_window e model_auto_compact_token_limit explicitamente. Consulte a tabela de janela de contexto acima.
A compactação é acionada tarde demais
Reduza model_auto_compact_token_limit para 80–85% da janela. Nunca defina um valor acima de 90%.
O perfil não é carregado (-p <name> é ignorado silenciosamente)
Confirme se o arquivo existe em ~/.codex/<name>.config.toml (sem o prefixo profile-). Execute ls ~/.codex/*.config.toml.
Uma tarefa longa do Codex é interrompida durante a execução / alterna entre contas a cada interação
Consulte Tarefas de longa duração. Habilite a afinidade de sessão (com TTL maior que a duração da tarefa) e aumente ou desabilite STREAM_IDLE_TIMEOUT_MS / FETCH_BODY_TIMEOUT_MS. Pesquise Idle timeout: no data from nos logs do OmniRoute.
HagiCode
HagiCode é um ambiente de programação com agentes, fluxos estruturados, execução multiagente e visualizações Hero Dungeon.
Transforme ideias em software útil com um fluxo de trabalho com agentes mais inteligente, rápido e agradável.

- SmartFluxos estruturados transformam intenções em um caminho executável da ideia à entrega.
- EfficientFluxos multiagente mantêm pesquisa, implementação e revisão em andamento simultaneamente.
- FunO Hero Dungeon torna longas sessões de programação mais visuais e colaborativas.