- Codex CLI foi projetado como um agente que realiza alterações de software de alta qualidade com segurança e eficiência em ambientes locais
- Sua estrutura central, o loop do agente (agent loop), conecta ciclicamente a entrada do usuário, a inferência do modelo e as chamadas de ferramentas para executar tarefas significativas
- No processo do loop, a composição de prompts, a gestão da janela de contexto e o cache de prompts atuam como elementos centrais de desempenho e estabilidade
- O Codex se comunica com o modelo por meio da Responses API, e cada requisição é composta por um payload JSON completo, mantendo um funcionamento sem estado (stateless)
- Essa estrutura viabiliza recursos avançados como Zero Data Retention (ZDR), cache de prompts e compactação automática (compaction), formando a base para o projeto de agentes em larga escala
Visão geral do loop do agente do Codex
- O Codex CLI funciona com foco em uma estrutura de loop que coordena a interação entre usuário, modelo e ferramentas
- Recebe a entrada do usuário e monta o prompt a ser enviado ao modelo
- Quando o modelo gera uma resposta ou solicita uma chamada de ferramenta (tool call), o agente executa essa ação e adiciona o resultado novamente ao prompt
- Quando o modelo deixa de fazer chamadas de ferramenta e gera uma mensagem do assistant, um turno é encerrado
- Cada turno faz parte de uma conversa (conversation), e tanto as mensagens anteriores quanto o histórico de chamadas de ferramentas são incluídos no prompt da próxima requisição
- Como o tamanho do prompt é afetado pelo limite da janela de contexto (context window) do modelo, o Codex precisa gerenciá-la
Estrutura de comunicação entre a Responses API e o Codex
- O Codex CLI envia requisições HTTP para a Responses API para realizar a inferência do modelo
- O endpoint da API varia conforme a configuração, e pode ser usado em ambientes OpenAI, ChatGPT, Azure e locais (LM Studio, Ollama etc.)
- A requisição da API é composta por um payload JSON, e os principais campos são os seguintes
- mensagens system/developer: definem o contexto base do modelo
- instructions: lista de ferramentas que o modelo pode chamar
- tools: definições de ferramentas fornecidas pelo Codex CLI, pela Responses API e pelo usuário (como servidores MCP)
- input: lista de mensagens que inclui o histórico da conversa e informações do ambiente
- O Codex lê configurações em
~/.codex/config.toml e arquivos como AGENTS.md e skills dentro do projeto para inserir automaticamente instruções do usuário e informações do ambiente
Composição de prompts e tratamento de eventos
- O Codex organiza cada mensagem como um objeto JSON (
type, role, content) e o envia à Responses API
- Com base nesse JSON, o servidor gera o prompt do modelo e retorna a resposta como um stream SSE (Server-Sent Events)
- O evento
response.output_text.delta é usado para saída em streaming
- O evento
response.output_item.added é adicionado ao input da próxima requisição para manter o loop em execução
- O sistema é projetado para que o prompt anterior seja um prefixo exato do novo prompt, permitindo aproveitar o cache de prompts (prompt caching)
Otimização de desempenho: cache e arquitetura sem estado
- O Codex não usa
previous_response_id, mantendo uma estrutura de requisição totalmente sem estado (stateless)
- Isso permite suporte a clientes com Zero Data Retention (ZDR) e minimiza a retenção de dados
- O cache de prompts reutiliza o mesmo prefixo para linearizar o custo de amostragem
- Um cache hit só ocorre quando há correspondência exata de prefixo no prompt
- Mudanças na lista de ferramentas, no modelo, na configuração de sandbox ou no diretório de trabalho causam cache miss
- Como mudanças dinâmicas nas ferramentas MCP podem causar perda de cache, o Codex reflete essas alterações inserindo novas mensagens
Gestão da janela de contexto e compactação automática (compaction)
- Quando a conversa se alonga, o sistema executa compactação da conversa (compaction) para evitar ultrapassar a janela de contexto
- No início, o resumo era feito manualmente com o comando
/compact, mas agora usa automaticamente o endpoint /responses/compact da Responses API
- Esse endpoint retorna itens do tipo
type=compaction e encrypted_content criptografado para preservar a compreensão do modelo
- O Codex executa a compactação automaticamente ao ultrapassar o auto_compact_limit, garantindo a continuidade da conversa
Conclusão e direção futura
- O loop do agente do Codex é a estrutura central que integra inferência do modelo, chamadas de ferramentas, cache e gestão de contexto
- Essa estrutura torna possível um projeto de agentes de alto desempenho, sem estado e com foco em segurança
- Em posts futuros, a estrutura interna do Codex será abordada com mais detalhes, incluindo a arquitetura do CLI, a implementação do uso de ferramentas e o modelo de sandboxing
1 comentários
Comentários do Hacker News
O melhor deste post é que ele não tem nada de surpreendente. O Codex CLI é open source, então dá para olhar por dentro sem fazer engenharia reversa
A comunicação do Eric Traut, um desenvolvedor conhecido pelo Pyright, também é excelente. Ele participa ativamente de issues e PRs
Repositório no GitHub
Eu também contribuí com algumas melhorias para o CLI e continuo acompanhando os releases e PRs para ampliar meu conhecimento
O ponto interessante é que a compactação é feita como uma “mensagem criptografada que preserva o possível entendimento latente do modelo”
Quando o Codex ultrapassa o auto_compact_limit, ele usa esse endpoint automaticamente para reduzir o contexto da conversa com eficiência
O que me surpreendeu ao olhar por dentro do Codex é que os tokens de reasoning são mantidos no loop de chamadas de ferramentas do agente, mas apagados sempre que o turno do usuário muda
Então dá para manter contexto ao longo de vários turnos, mas algum contexto pode se perder entre pedidos relacionados do usuário
Eu faço o modelo registrar progresso, plano e debug em um arquivo Markdown para funcionar como uma espécie de snapshot entre várias janelas de contexto
Repositório no GitHub
O que eu realmente quero no Codex é um recurso de checkpoints no estilo Copilot. Há algumas issues sobre isso no GitHub (#2788, #3585), mas parece que não é prioridade da equipe
Tenho curiosidade sobre como eles gerenciam a manutenção de contexto ao agregar instruções do usuário no loop do agente, especialmente em conversas de vários turnos. Também queria saber se já testaram técnicas de ajuste dinâmico quando as exigências do usuário mudam
Gosto do Codex, mas ele parece mais lento do que a interface web do ChatGPT. Quando quero trocar ideias rapidamente, ainda sou mais produtivo copiando e colando pela web
O Codex frequentemente começa a mexer no código errado, então o loop de feedback fica lento e frustrante. Ainda assim, quando funciona bem, é excelente. Espero que um dia chegue ao ponto de ser tão rápido quanto a web, mas com trabalho local
Não foi um texto particularmente novo, mas ainda assim foi valioso. Seria bom se CLIs de programação com agentes facilitassem mais refletir sobre loops ou histórico. Já tentei consultar histórico de chat via MCP, mas é incômodo porque precisa ser especificado explicitamente. Aprendizado contínuo talvez resolva esse tipo de problema
Esse comportamento também pode ser observado com telemetria OTEL. Eu uso bastante o codex exec em modo headless, mas a falta de suporte interno de telemetria dificulta o debug
Por isso acabei criando o codex-plus para uso próprio. Ele espelha a interface do codex exec, foi implementado sobre o SDK em TypeScript e, após a execução, exporta logs de sessão para um coletor remoto de OpenTelemetry, permitindo análise com o codex-plus-log-viewer
A parte que descreve skills me pareceu estranha
Link do código relacionado
Fiquei me perguntando por que eles simplesmente não expõem o arquivo diretamente, em vez de fazer o modelo solicitá-lo como se fosse um arquivo comum
Eu me perguntava se alguém realmente usava o Codex CLI de forma séria. Já usei a extensão Codex para VSCode, Gemini CLI e Claude Code CLI, e todos tinham desempenho horrível.
Mas o novo Codex CLI refeito em Rust é absurdo de rápido. A UX também é impecável, até nos detalhes como atalhos. O Theo disse que eles deveriam ter focado em melhorar o modelo em vez de otimizar o CLI, mas depois de usar eu não consigo concordar nem um pouco
Artigo relacionado: Scribe Swebench Benchmark