Codex começa a criptografar prompts de subagentes
(github.com/openai)- O MultiAgentV2 do Codex CLI passou a criptografar mensagens de
spawn_agent,send_messageefollowup_task, causando uma regressão na trilha de auditoria em que o conteúdo delegado deixa de ser legível por humanos no rollout, histórico e rastreamento do agente pai - Após o PR #26210, incorporado em 5 de junho de 2026,
InterAgentCommunication.contentfica vazio e o payload é armazenado apenas emencrypted_content; o histórico do destinatário e os logs de comunicação também registram texto cifrado - O problema independe de assinatura, modelo e plataforma, afeta builds a partir da 0.137.0 com MultiAgentV2 ativado e é separado da #26753, que trata de falhas de validação de requisição no schema da ferramenta de criptografia
- A correção proposta é manter tanto a
messagecriptografada para o modelo receptor quanto um campo obrigatório em texto claro para auditoria local, usando texto cifrado ou ID para identificação da entrega e aplicando o mesmo limite de tamanho aos dados de auditoria em texto claro - Um protótipo para
spawn_agentfoi implementado em um commit snapshot separado, mas ainda falta aplicar o mesmo contrato asend_messageefollowup_task, além das telas de histórico, replay e debug; a issue ainda está Open
Escopo de ocorrência e condições da regressão
- O PR de alteração de criptografia #26210 foi incorporado em 5 de junho de 2026, e o alvo são builds a partir da 0.137.0 que o incluem e ativam o MultiAgentV2
- As ferramentas afetadas são
spawn_agent,send_messageefollowup_task, independentemente de assinatura, modelo, sistema operacional ou ambiente de terminal - Como é uma regressão confirmada no comportamento do código incorporado, e não no estado do ambiente local, o relatório do Codex doctor não se aplica
- O procedimento de reprodução é o seguinte
- Ativar o MultiAgentV2 em um build que inclua o PR #26210
- Fazer o modelo chamar uma das ferramentas
spawn_agent,send_messageoufollowup_task - Verificar a tarefa do subagente no rollout, histórico ou rastreamento do agente pai
- Apenas texto cifrado aparece no lugar da tarefa ou do corpo da mensagem
Informações de auditoria local que desapareceram
- A entrega criptografada em si pode ser entendida como um reforço de privacidade, mas a implementação atual remove o conteúdo legível por humanos também do histórico de rollout local, dos resumos de rastreamento e das telas de auditoria/debug do lado do agente pai
- Como resultado, fica difícil responder às seguintes perguntas em uma revisão posterior do rollout
- Que tarefa o
spawn_agentatribuiu ao agente filho - Que mensagem foi enviada ao subagente
- Por que uma determinada thread filha foi criada
- Que tarefa o
- A issue #26753 trata de um problema em que o schema da ferramenta de criptografia retorna erro 400 durante a validação da requisição; esta issue trata da auditabilidade e capacidade de depuração depois que o schema é aprovado
- O objetivo não é necessariamente reverter a entrega criptografada, mas permitir a leitura local do conteúdo delegado mantendo a criptografia
Fluxo de dados no código atual
InterAgentCommunication::new_encrypted()inicializacontentcomo uma string vazia e armazena o payload apenas emencrypted_content- O construtor comum
new()armazena o texto claro emcontente deixaencrypted_contentvazio - O construtor criptografado faz o inverso: esvazia
contente coloca o valor emencrypted_content
- O construtor comum
to_model_input_item(), quando háencrypted_content, coloca apenas o cabeçalhoNEW_TASKouMESSAGEe o payload criptografado emResponseItem::AgentMessage- Portanto, mesmo que apenas o
contentem tempo de execução seja preenchido, umResponseItemlegível não é automaticamente persistido - É necessário um caminho separado de armazenamento para auditoria local
- Portanto, mesmo que apenas o
communication_from_tool_message()passa amessageda ferramenta diretamente paranew_encrypted(), criando um objeto de comunicação semcontentem texto claro- O processamento dos argumentos de
send_messageefollowup_taskdesserializa apenastargete amessagecriptografada- Mensagens vazias são rejeitadas, mas não há um campo acompanhante separado em texto claro
- O caminho compartilhado de entrega de mensagens usa esse valor diretamente na criação de
InterAgentCommunication
Por que o histórico e os logs ficam com texto cifrado
- O caminho de registro no lado receptor salva no histórico da conversa e no rollout o
ResponseItempara o modelo criado porto_model_input_item()- Em comunicações criptografadas, esse item contém o payload de entrega criptografado, não uma frase de auditoria legível
- O
InterAgentCommunicationMetadatae o respectivoResponseItemsão persistidos juntos no rollout
- O log de comunicação estruturado também substitui o
contentdo evento porencrypted_contentquandocontentestá vazio - Nessa estrutura, o texto cifrado entra até nos campos exibidos como mensagem legível por humanos, portanto os requisitos de manter a criptografia da entrega e de preservar dados de auditoria local não estão separados
Contrato proposto de conteúdo duplo
- A
messagecriptografada existente é mantida como payload de entrega para o modelo receptor - Um campo obrigatório de auditoria em texto claro é adicionado a cada ferramenta de comunicação do MultiAgentV2
spawn_agent:task_messagesend_message,followup_task: um nome consistente, comotask_messageoumessage_text
- Valores de auditoria em texto claro vazios são rejeitados na fronteira do handler
InterAgentCommunicationpassa a armazenar os dois valores juntosencrypted_content:messagecriptografadacontent: cópia de auditoria legível por humanos
to_model_input_item()não é alterado, de modo que apenas o texto cifrado seja entregue ao modelo receptor, não a cópia de auditoria local- O campo em texto claro é persistido na chamada da ferramenta do agente pai e no rollout, e também mantido nas arestas de interação do rastreamento estruturado e no log local de comunicação
- A correlação entre a chamada da ferramenta e o item entregue ao agente filho é determinada por texto cifrado ou ID, não por correspondência de texto claro
- O campo em texto claro é metadado de auditoria e não substitui o identificador da entrega criptografada
- O novo campo de auditoria em texto claro recebe o mesmo limite obrigatório de tamanho da mensagem de delegação correspondente, para impedir que itens de rollout ou contexto cresçam sem limite
Protótipo de spawn_agent e trabalho restante
- O commit snapshot
ignatremizov@df9a7c4implementa a estrutura proposta paraspawn_agent - O schema v2 de
spawn_agentdefinetask_messagecomo campo obrigatório - Depois da validação de
task_message, o código compõe texto claro e texto cifrado juntoscontentrecebe a cópia de auditoria em texto claroencrypted_contentmantém o payload criptografado para o modelo receptor
- Na redução do rastreamento de rollout, o conteúdo de auditoria e o conteúdo de correspondência da entrega também são separados, e o conteúdo de auditoria em texto claro é aplicado enquanto a entrega é vinculada pelo texto cifrado
- O trabalho restante é aplicar o mesmo contrato de conteúdo duplo a
send_messageefollowup_task, e fazer todas as telas de histórico, replay e debug voltadas ao usuário lerem a cópia de auditoria em vez do texto cifrado
Critérios de conclusão e estado atual
- Deve ser possível ler o texto claro de
spawn_agent,send_messageefollowup_taskv2 nos rollouts e históricos do agente pai - Mesmo com a criptografia ativada, o modelo filho deve receber apenas o payload de entrega criptografado
- As arestas do rastreamento estruturado de rollout devem conter
message_contentem texto claro com tamanho limitado - O log de comunicação deve usar o conteúdo de auditoria em texto claro quando disponível, e não substituir campos de mensagem legíveis por texto cifrado
- Retomada e replay devem preservar a cópia de auditoria sem injetá-la no contexto do modelo filho
- O comportamento existente de comunicação v1 em texto claro não deve mudar
- São necessários testes de regressão para as três ferramentas v2, validando em conjunto dados de auditoria local legíveis e entrada criptografada para o modelo receptor
- Na página fornecida, a issue está Open, e não há resultado indicando que uma correção tenha sido incorporada ao repositório upstream
1 comentários
Comentários do Hacker News
Este título é fácil de interpretar errado. Mais precisamente, significa que o Codex começou a criptografar prompts de subagentes para ocultá-los do usuário.
O título original era “Codex starts encrypting prompts, uses ciphertext for inference instead”.
ultrado GPT-5.6 distribui o trabalho entre vários subagentes. Antes, esse modo só estava disponível na interface web e provavelmente correspondia ao antigo modo pro.Se ele foi treinado com rollouts completos de aprendizado por reforço em que agentes interagem entre si, a OpenAI parece querer tratar esses prompts como rastros brutos de raciocínio, impedindo que outros os usem diretamente para treinamento.
Também há indícios de que o blob compactado opaco retornado pelo endpoint dedicado de compressão talvez não seja texto, mas uma representação da conversa em espaço latente; o fato de a fidelidade da compressão da OpenAI ser muito maior que a de outros fornecedores reforça essa hipótese. Eles podem ter aplicado uma técnica semelhante aos prompts dos subagentes, e fico curioso se também usam blobs criptografados ao criar subagentes de diferentes tipos de modelo.
Já aconteceu de eu examinar subagentes e fluxos de trabalho do Claude e concluir: “isso nem deveria ter sido executado”. Já usuários do Codex acabam tendo de gastar tokens às cegas em instruções de encaminhamento criptografadas que o orquestrador passa aos subagentes e em operações de shell.
Nós também tentamos permitir que empresas escolhessem o provedor de IA preferido ou obrigatório e suas próprias chaves de API, oferecendo um plano simples de preços, mas logo percebemos que os prompts de backend poderiam vazar para os clientes. Com rastros detalhados de execução, seria relativamente fácil fazer engenharia reversa do que fazemos, então acabamos abandonando essa ideia.
Agora entendo por que minha ferramenta local para inspecionar sessões de agentes de programação parou de funcionar em algumas situações.
É uma decisão de design interessante; fico curioso para saber quantas pessoas vão aceitar comandos externos criptografados a serem executados no computador do usuário.
Esconder o conteúdo do usuário por meio de criptografia é o tipo de abordagem que a RIAA usava com DRM por preocupação com violação de direitos autorais; fico em dúvida se isso também é uma escolha hostil ao usuário.
Continuo usando o endpoint Chat Completions justamente por causa desse tipo de comportamento. A OpenAI vem empurrando sutilmente os usuários para longe do Chat Completions e em direção à Responses API, que é mais fácil de ofuscar.
No Chat Completions, dá para controlar diretamente o procedimento de inferência; ativando recursos experimentais e configurando algumas opções meio confusas, é possível até criar um agente personalizado de busca em árvore de Monte Carlo (MCTS) com os modelos GPT-5.6 atuais.
No VS Copilot, é possível usar até gpt5.5 com o token de API do usuário e configurações de modelo, mas a família gpt5.6 atualmente não funciona. Suspeito que seja porque ele não força
reasoning_effortparanonede modo a satisfazer o novo comportamento de aumento das barreiras de entrada.Todos os modelos novos que estão saindo hoje em dia são modelos de raciocínio, então, de acordo com as recomendações, deve-se usar a Responses API.
Fico curioso se eles talvez impeçam o uso da assinatura do GPT em ferramentas alternativas de execução. Se não fizerem isso, não é um grande problema, e o
codex cliem si é uma ferramenta de execução surpreendentemente comumapp-serverexiste justamente para dar suporte a esse tipo de integração, então remover isso do Codex exigiria desmontar uma parte enormeEu também consigo integrar com muita facilidade usando a API RPC do
app-server, por isso uso o Codex mais do que qualquer outra coisa; hoje, uso quase tudo por meio da minha própria integração, em vez da TUI pública do CodexMas, se eles criptografarem os prompts, que são a entrada real de inferência no disco local, para que só o backend da OpenAI consiga vê-los, então, mesmo que a integração seja fácil, não será possível entender o que está acontecendo. É difícil entender por que a equipe considerou isso uma boa escolha
Se a OpenAI seguir o mesmo caminho, pretendo voltar para o Claude ou comprar mais um Spark e rodar localmente
https://github.com/openai/codex/blob/main/codex-rs/responses...
O título anterior no HN soava como se a inferência fosse feita diretamente sobre texto cifrado, o que gerou muita confusão. Para isso, seria preciso uma criptografia homomórfica muito mais avançada do que a que se conhece atualmente
Antes, o agente enviava prompts em texto claro ao subagente, e eles também ficavam nos logs e nos dados da sessão; por isso, mesmo ao usar o recurso experimental de subagentes, era possível abrir os dados e verificar o funcionamento interno
Agora, ao usar Sol ou Terra, o texto cifrado criado pelo backend é entregue ao subagente, e o subagente o usa novamente na inferência do backend da OpenAI. Luna parece não ser afetado, e não é a sessão inteira que é criptografada, apenas as mensagens delegadas entre agentes
A inferência interna da OpenAI não ocorre sobre texto cifrado, mas, para o usuário local, o que aparece é apenas texto cifrado em vez de texto em claro. Para deixar isso claro, o título foi alterado para “Codex starts encrypting sub-agent prompts”
Houve um relato recente no Twitter de que um subagente GPT-5.6 apagou por engano o diretório home de um usuário
Fico me perguntando se, ao impedir que se veja o que o subagente pretende fazer, as salvaguardas também não falharam
https://x.com/mattshumer_/status/2076794038456385546?s=20
Isso é uma forma de passar chaves de cache pelo cliente para reduzir o uso de tokens. Como é fácil contornar usando outras ferramentas de subtarefas, não pode ser uma defesa contra destilação de modelos
Fico curioso sobre exatamente onde a criptografia acontece. Eu achava que o agente principal chamava o subagente localmente; então fico na dúvida se, no Codex, o subagente é chamado nos servidores da OpenAI antes de chegar ao ambiente local
No Sol ou no Terra, em vez do prompt, é enviado um texto cifrado gerado pelo backend da OpenAI, e o subagente o usa novamente na inferência do backend. Luna parece não ser afetado; como não é a sessão inteira, mas apenas as mensagens delegadas entre agentes que são criptografadas, agora só o backend da OpenAI consegue descriptografar esse conteúdo
Eu estava me perguntando por que os serviços de revenda do mercado clandestino chinês tinham parado de funcionar desde ontem; provavelmente foi por causa dessa mudança
O principal objetivo parece ser dificultar tentativas de fazer proxy de grandes volumes de solicitações e respostas de usuários para usá-las no treinamento de modelos concorrentes
Mas é uma implementação ruim: usuários pagantes ficam sem nenhum meio de descobrir a causa quando algo dá errado, o que torna difícil usar adequadamente o recurso de múltiplos agentes