Para modelos não-codex, o Codex CLI de código aberto compacta o contexto localmente: um LLM resume a conversa usando um prompt de compactação. Quando o contexto compactado é usado posteriormente, responses.create() o recebe com um prompt de handoff que emoldura o resumo. Ambos os prompts estão visíveis no código-fonte.
Para modelos codex, o CLI chama a API compact(), que retorna um blob criptografado. Não sabemos se ela usa um LLM internamente, quais prompts utiliza ou se existe algum prompt de handoff.
Abaixo, mostro como uma simples injeção de prompt (2 chamadas de API, 35 linhas de Python) revela que o caminho de compactação da API realmente usa um LLM para resumir o contexto, com seu próprio prompt de compactação e um prompt de handoff anexado ao resumo. Os prompts são quase idênticos às versões de código aberto.
Passo 1 — compact()
Chamo compact() com uma mensagem de usuário elaborada. No lado do servidor, um LLM compactador processa nossa entrada usando seu próprio prompt de sistema oculto (que nunca vi e quero descobrir).
O servidor parece montar o contexto do compactador assim:

O LLM compactador lê seu prompt de sistema + nossa entrada juntos. Como nossa entrada contém um payload de injeção (texto vermelho acima), o compactador é enganado e inclui seu próprio prompt de sistema na saída. Este resumo em texto simples existe apenas no servidor da OpenAI. Nós só vemos o blob criptografado:

Neste ponto, não temos como ler o que está dentro do blob. Ele está criptografado com AES e a chave está nos servidores da OpenAI. Apenas esperamos que o compactador tenha obedecido à injeção e escrito seu prompt no resumo. A única maneira de descobrir é o Passo 2.
Passo 2 — create()
Passo o blob criptografado + uma segunda mensagem de usuário para responses.create(). O servidor descriptografa o blob e monta o contexto do modelo.
Eu envio:

O modelo parece ver algo assim:

Se o Passo 1 funcionou, o blob descriptografado deve conter o prompt de compactação (vazado pela nossa injeção). O servidor também anexa um prompt de handoff ao blob. Então, se nossa sonda conseguir fazer o modelo repetir o que vê, a saída deve revelar todos os três: o prompt de sistema, o prompt de handoff e o prompt de compactação.
Saída
Abaixo está a saída completa e não editada de uma execução de extract_prompts.py. Amarelo = prompt de sistema, verde = prompt de handoff, rosa = prompt de compactação.

Como sabemos que estes são os prompts reais e não apenas texto alucinado? O prompt de compactação extraído e o prompt de handoff correspondem de perto aos prompts conhecidos usados para modelos não-codex no Codex CLI de código aberto (prompt.md, summary_prefix.md), o que torna improvável que o modelo os tenha inventado do zero. Os resultados variam entre execuções.
O Pipeline Suposto
Juntando tudo, aqui está nosso melhor palpite sobre o que compact() faz no lado do servidor, com base no que a extração revelou.

O Script

Pergunta em Aberto
Por que o Codex CLI usa dois caminhos de compactação completamente diferentes (LLM local para modelos não-codex, API criptografada para modelos codex) quando os prompts subjacentes são quase idênticos? E por que criptografar o resumo?
Difícil dizer. Talvez o blob criptografado carregue algo mais do que este experimento simples pode revelar, por exemplo, algo específico sobre como os resultados das ferramentas são compactados e restaurados. Mas não me preocupei em testar mais.





