Pular para o conteúdo
OmniRoute source

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 --help documenta que as substituições de -c/--config são “carregadas de ~/.codex/config.toml”). O antigo ~/.codex/config.yaml pertencia à CLI npm legada e é silenciosamente ignorado. O gerador do painel (/api/cli-tools/apply, ferramenta codex) grava TOML com uma mesclagem conservadora — as chaves existentes e os blocos de outros provedores são preservados, a chave da API permanece em OMNIROUTE_API_KEY (nunca no arquivo), e um config.yaml legado remanescente é reportado como uma observação de migração sem ser alterado.

Substitua <YOUR_HOST> e <YOUR_KEY> pelos seus 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 # 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 = false
wire_api = "responses"
Janela do terminal
# ~/.bashrc ou ~/.zshrc — valor real da chave, nunca em config.toml
export OMNIROUTE_API_KEY="<YOUR_KEY>"

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:

Janela do terminal
export PATH="/Applications/ChatGPT.app/Contents/Resources:$PATH"

Abra um novo shell e verifique:

Janela do terminal
command -v codex
codex --version

OmniRoute 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á:

Janela do terminal
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/v1
Tailscale http://100.x.x.x:20128/v1
Loopback 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 do config.toml. Defina-o explicitamente apenas se quiser documentar a intenção.


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 — use tool_output_token_limit para controlar quanto da saída das ferramentas é armazenado no histórico.

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_limit como 85–88% de model_context_window. Nunca ultrapasse 90% — o valor será silenciosamente ignorado.


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.


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
Janela do terminal
# Sobrescrever por invocação
codex -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):

~/.codex/config.toml
model_reasoning_effort = "xhigh" # ou ultra, quando houver suporte
model_reasoning_summary = "detailed" # auto | concise | detailed | none

Orç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/&lt;name&gt;.config.toml sobreposto ao config.toml base.

Regra de nomenclatura (Codex CLI v0.137+): o arquivo deve ser ~/.codex/&lt;name&gt;.config.toml — sem o prefixo profile-. 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.

Janela do terminal
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, barato

Perfis de esforço (mesmo modelo, esforços diferentes)

Seção intitulada “Perfis de esforço (mesmo modelo, esforços diferentes)”
Janela do terminal
codex -p low # cx/gpt-5.5, esforço=low
codex -p medium # cx/gpt-5.5, esforço=medium
codex -p high # cx/gpt-5.5, esforço=high
codex -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
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
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
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:

Janela do terminal
# Em um VPS (usa o OmniRoute local na porta 20128)
omniroute setup-codex
# Em qualquer máquina — aponte para o seu VPS
omniroute setup-codex --remote http://100.x.x.x:20128 --api-key sk-xxx
# Visualize sem gravar arquivos
omniroute setup-codex --remote http://100.x.x.x:20128 --dry-run
# Gere apenas os perfis do GLM e do Kimi
omniroute setup-codex --only glm,kimi
# Grave em um diretório personalizado
omniroute setup-codex --codex-home /path/to/.codex

O 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/&lt;name&gt;.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.


Verifica a integridade da sua instância do OmniRoute antes de iniciar o Codex:

Janela do terminal
# Inicie usando o OmniRoute local (porta padrão 20128)
omniroute launch-codex
# Inicie com um perfil específico
omniroute launch-codex --profile kimi-k27
# Inicie usando um VPS remoto
omniroute launch-codex --remote http://100.x.x.x:20128/v1 --api-key sk-xxx
# Passe argumentos extras para o codex
omniroute 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):

Janela do terminal
# Seletor interativo de modelos → grava ~/.codex/&lt;name&gt;.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 codex

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
# 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 personalizado
compact_prompt = "Summarise the above as bullet points."
# Encaminhe /review para um modelo mais barato
review_model = "glm/glm-5-turbo"
# Nível de serviço da OpenAI
service_tier = "fast" # "fast" | "flex"
[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"
[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 (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
Janela do terminal
# ~/.bashrc — limite de tokens do Claude Code
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536

Flag Forma curta Efeito
--model &lt;id&gt; -m Substitui model nesta execução
--profile &lt;name&gt; -p Carrega ~/.codex/&lt;name&gt;.config.toml
--config key=value -c Substitui qualquer campo de config.toml (pode ser repetido)
--enable &lt;feature&gt; — Habilita à força uma flag de recurso
--disable &lt;feature&gt; — Desabilita à força uma flag de recurso
--search — Habilita a pesquisa ao vivo na web nesta execução

Novidades na v0.140:

Janela do terminal
codex delete <SESSION_ID> # excluir uma sessão
codex delete <SESSION_ID> --force # ignorar confirmação
codex debug models --bundled # listar o catálogo de modelos incluídos como JSON

Dentro 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

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 sessionAffinityTtlMs em milissegundos (intervalo do Zod de 0–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 usar sessionAffinityTtlMs. Agora, a afinidade se aplica a qualquer provedor quando o TTL é maior que 0, não apenas ao Codex — consulte docs/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):

Janela do terminal
# Desativa os limites de inatividade do stream e do corpo para turnos longos de raciocínio
STREAM_IDLE_TIMEOUT_MS=0
FETCH_BODY_TIMEOUT_MS=0

Ou aumente-os para além do maior intervalo de silêncio esperado (os valores são em milissegundos):

Janela do terminal
# Exemplo: permite até 2 horas de silêncio entre chunks do upstream
STREAM_IDLE_TIMEOUT_MS=7200000
FETCH_BODY_TIMEOUT_MS=7200000

Reinicie 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”
  1. Fixe a conta: Painel → Configurações → Roteamento → Afinidade de sessão → TTL de afinidade = 43200 (12h) ou 86400 (máximo de 24h).
  2. Aumente / desative os limites de inatividade no ambiente do OmniRoute:
Janela do terminal
STREAM_IDLE_TIMEOUT_MS=0
FETCH_BODY_TIMEOUT_MS=0
  1. Mantenha o config.toml habitual do Codex (wire_api = "responses", base_url correto, OMNIROUTE_API_KEY) — não existem opções de afinidade/inatividade no lado do Codex para esses dois comportamentos.
  2. Reinicie o OmniRoute e, em seguida, inicie a tarefa longa do Codex.
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.

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.


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/&lt;provider&gt;.

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 &lt;name&gt; é ignorado silenciosamente) Confirme se o arquivo existe em ~/.codex/&lt;name&gt;.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.


Código-fonte do OmniRoute (a58000c7685f)

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.

Interface principal do HagiCode no tema claro
  • 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.
Acessar HagiCode