O indicador de contexto do Codex mostra 55% de uso, sobra quase metade da janela, e mesmo assim aparece Compacting... no meio da tarefa. Não é impressão: o contador que decide a compactação não é o mesmo número que a interface mostra, e nele o raciocínio antigo do modelo entra duas vezes.
Este guia explica de onde vem a diferença, como reconhecer o caso e o que dá para configurar hoje para a compactação parar de te pegar no meio do trabalho. Tudo foi conferido no código-fonte do repositório openai/codex, na tag rust-v0.163.0 (estável atual) e na main, em 18/10/2026.
Por que o Codex compacta o contexto com 55% de uso?
Porque o contador de compactação soma uma estimativa do raciocínio antigo por cima do total que o servidor já informou, e esse total já inclui esse raciocínio. O resultado passa do limite muito antes da barra encher.
Trecho de codex-rs/core/src/context_manager/history.rs:
if server_reasoning_included {
last_tokens.saturating_add(items_after_last_model_generated_tokens)
} else {
last_tokens
.saturating_add(self.get_non_last_reasoning_items_tokens())
.saturating_add(items_after_last_model_generated_tokens)
}
O Codex só deixa de somar a estimativa quando o servidor avisa, pelo header x-reasoning-included, que o raciocínio já está no total. Nas reproduções publicadas na issue #53913, esse header não veio nem na conexão nem nos metadados da resposta. Sem ele, cada item de raciocínio criptografado das rodadas anteriores é estimado a partir do tamanho do conteúdo e somado de novo.
Quanto isso infla a conta
Os números abaixo foram reconstruídos pelos próprios autores das issues, com a soma fechando exatamente no gatilho da compactação:
| Caso | Barra mostrava | Estimativa somada de novo | Contador de compactação | Limite |
|---|---|---|---|---|
| #53309, janela de 1M configurada | 459.164 (cerca de 55%) | 324.498 | 788.399 | 784.800 |
| #53913, janela de 500k | 255.367 (54%) | 200.147 | 455.514 | 450.000 |
Outros relatos na mesma issue, entre 15 e 17/10/2026, mostram compactação com 56%, 65% e 66% de uso, inclusive no Codex CLI 0.163.0. Todos com gpt-6.1-sol em esforço high ou maior.

Como saber se é esse o problema?
Três sinais juntos: a compactação começa bem abaixo de 90% na barra, a sessão é longa e o esforço de raciocínio está em high ou acima. Confira a versão e o esforço:
codex --version
grep -E 'model_reasoning_effort|model_auto_compact_token_limit|model_context_window' ~/.codex/config.toml
Quanto mais longa a conversa e mais alto o esforço, mais itens de raciocínio se acumulam, e maior a parcela contada duas vezes. Sessão curta ou esforço baixo quase não sente o bug.
Aumentar o model_auto_compact_token_limit resolve?
Não. O valor configurado é limitado a 90% da janela de contexto, então colocar um número maior não empurra o gatilho para frente. Trecho de codex-rs/protocol/src/openai_models.rs:
let context_limit = self
.resolved_context_window()
.map(|context_window| (context_window * 9) / 10);
...
config_limit.map_or(context_limit, |limit| std::cmp::min(limit, context_limit))
Um dos relatos (#54825) testou até o maior inteiro de 64 bits e o limite efetivo continuou em 90%. Também não existe chave no config.toml para desligar a compactação automática.
Como contornar a compactação prematura no Codex?
Dá para reduzir a conta dobrada e escolher o momento em que a compactação acontece. São três ajustes, do mais simples ao mais fino.
1. Baixe o esforço de raciocínio
A estimativa cresce com o tamanho do raciocínio guardado, então menos raciocínio por resposta significa menos conta dobrada. No ~/.codex/config.toml:
model_reasoning_effort = "medium"
Ou troque só na sessão com /model. Deixe high para o trecho que precisa, não para a conversa inteira.
2. Compacte você, na pausa certa
O pior da compactação automática é cair no meio de uma tarefa longa. Antes de pedir uma mudança grande, rode:
/compact
Você escolhe o momento, a tarefa começa só com o resumo no contexto e a chance de ela ser interrompida cai.
3. Ligue a compactação no fim do turno
O Codex tem uma chave que compacta depois da resposta final, quando você está entre uma tarefa e outra, em vez de esperar o gatilho do meio do trabalho:
model_post_turn_compact_threshold_percent = 70
O valor é a porcentagem da janela útil que dispara essa compactação, de 0 a 100. Zero ou ausente desliga. Ela usa o mesmo contador inflado, então não corrige a conta; o que muda é a hora: a compactação passa a acontecer na pausa, não no meio da próxima tarefa.
Quando sai a correção oficial?
Ainda não saiu. A issue #53309 está aberta desde 12/10/2026, e o mesmo trecho que soma a estimativa segue na main em 18/10, sem PR de correção da OpenAI ligado a ela. Acompanhe a issue e, quando a correção entrar numa versão estável, volte o esforço para o nível que você usava.
Antes de compactar, vale olhar o que de fato ocupa o contexto. Na Verboo Code, o /context mostra isso, e o /compact roda quando você decide.



