Como manter as chaves de API fora do Codex CLI
O que o modelo do Codex CLI pode ver, o que os hooks do zn-gate verificam no Codex antes e depois de cada etapa e nos seus prompts, o que eles não conseguem fazer, como configurá-los e um teste curto com valores falsos.
O Codex CLI envia ao seu modelo tudo o que entra na conversa: os prompts que você digita, os arquivos que o agente lê, a saída dos comandos de shell e os resultados das ferramentas MCP. Uma chave de API em qualquer um desses pontos pode chegar ao modelo. O zn-gate instala hooks no Codex que verificam esses pontos. Esta página explica o que cada hook faz segundo a documentação do zn-gate, o que ele não consegue fazer, e traz um teste para você mesmo executar.
Por onde uma chave pode chegar ao modelo
Os hooks do zn-gate para o Codex observam quatro pontos de uma sessão:
- Um prompt que você digita. Um segredo colado nele pode ser bloqueado antes do envio.
- Um comando de shell ou um patch (
apply_patch). Leituras de arquivos.envcom valores e de arquivos de credenciais podem ser bloqueadas. - A saída de uma ferramenta. Ela pode ser limpa antes que o modelo a veja.
O registro de sessão do próprio Codex guarda a saída original, seja qual for o tratamento que o zn-gate dá ao que o modelo vê.
O que o zn-gate verifica no Codex
zn hooks install codex grava o hooks.json do Codex. Esta tabela segue o arquivo compat.md do repositório do zn-gate, que lista cada evento de hook do Codex e se ele foi executado em um Codex real.
| Evento de hook | O que o zn-gate faz |
|---|---|
PreToolUse |
Verifica comandos de shell e patches (Bash, apply_patch) antes que sejam executados, e nega a chamada com um motivo quando encontra um segredo, um arquivo de credenciais ou ~/.zn. Não verifica chamadas de ferramentas MCP. Verificado no Codex CLI 0.163.0. |
PostToolUse |
Limpa a saída da ferramenta: o resultado é substituído pelo seu texto limpo. Verificado no Codex CLI 0.163.0. |
Um terceiro evento, UserPromptSubmit, bloqueia um segredo colado em um prompt (verificado no Codex CLI 0.163.0).
Em PreToolUse, o zn-gate não responde allow, então a sua própria política de aprovação do Codex continua valendo.
O que o zn-gate não cobre no Codex
- O Codex descreve seus hooks como "a guardrail, not an enforcement boundary" (uma proteção, não um limite imposto). Se o hook do zn não puder ser executado, o Codex o registra como falho e a chamada ou o prompt seguem em frente.
- A limpeza tem perdas. O Codex não tem nenhum campo que reescreva o resultado de uma ferramenta, então o resultado é substituído pelo texto limpo do zn-gate e o modelo recebe texto em vez do resultado estruturado.
- O registro de sessão do próprio Codex guarda a saída original.
- Um segredo sem formato conhecido que não esteja no cofre nem em um arquivo
.envpode passar pela limpeza. - Um servidor definido na linha de comando do Codex com
-c mcp_servers.secrets..., ou em um perfil, não é visível para o hook. - A verificação
PreToolUsedo zn-gate cobre comandos de shell e patches, não as chamadas de ferramentas MCP, e o zn-gate não usa os outros eventos de hook do Codex. - No Windows, o comando do hook foi executado manualmente no PowerShell e no Prompt de Comando, não nos testes automatizados.
Como configurar
Você precisa do Node.js 18 ou posterior:
npm install -g zn-gate
zn hooks install codex
Abra o Codex e revise os hooks novos ou alterados com /hooks. O Codex só executa hooks novos depois que você confia neles ali. Depois execute zn-gate check em um terminal. Ele deve mostrar OK para o Codex CLI (o que a saída significa). Os passos completos estão na página de instalação para o Codex CLI.
Para tirar por completo os valores reais do seu .env, guarde-os no cofre do zn-gate. O seu .env passa a ter marcadores como __ZN_STRIPE_KEY__:
zn unlock
zn env shadow .env
Mais em Scrubber. Para desfazer os hooks: zn hooks uninstall codex.
Teste na sua própria máquina
Este teste usa valores falsos. Partes dele seguem o que a documentação diz que deveria acontecer e não as executamos de ponta a ponta no Codex, então confira cada passo você mesmo.
-
Em uma pasta nova e vazia, crie um arquivo
.envapenas com valores falsos:EXAMPLE_API_KEY=sk-test-EXAMPLE-not-a-real-key EXAMPLE_URL=https://example.com -
Instale os hooks (
zn hooks install codex), abra o Codex nessa pasta, confie nos hooks com/hookse executezn-gate checkem outro terminal. -
Peça ao Codex: "Run cat .env and tell me what it prints." Segundo o compat.md, o hook
PreToolUsedo zn-gate bloqueoucat .envno Codex CLI 0.163.0, e você deve ver uma mensagem do hook no lugar dos valores. -
Cole no prompt a chave de exemplo da documentação da AWS
AKIAIOSFODNN7EXAMPLE. Se o zn-gate reconhecer o formato, o prompt deve ser bloqueado. Se não for bloqueado, o formato pode não ser um dos que o zn-gate detecta. -
Opcional: execute
zn unlockezn env shadow .env, abra o arquivo e confira que ele contém marcadores. Peça ao Codex que o leia de novo e compare. -
Apague a pasta de teste ao terminar. Para remover os hooks:
zn hooks uninstall codex.
Aqui só contam os seus próprios resultados. Se algum passo se comportar de forma diferente do que esta página diz, escreva para nós informando a sua versão do Codex CLI.
Perguntas frequentes
O modelo do Codex pode ver as minhas chaves de API? Tudo o que o agente lê, executa ou recebe pode chegar ao modelo: arquivos, saída de shell, resultados MCP e prompts. Os hooks do zn-gate verificam esses pontos, com os limites descritos acima.
O zn-gate impede o Codex de ler o .env? Seus hooks bloqueiam leituras de arquivos .env com valores em comandos de shell e patches. O Codex chama seus hooks de uma proteção, não de um limite imposto.
Por que a saída limpa é texto simples? O Codex não tem nenhum campo que reescreva o resultado de uma ferramenta, então o zn-gate substitui o resultado inteiro pelo seu texto limpo.
Como desfazer? zn hooks uninstall codex.
Páginas relacionadas
Fontes
- zn-gate, compatibilidade por agente e eventos de hook do Codex: compat.md
- zn-gate, página de instalação para o Codex CLI: /pt/docs/install/codex/
- Codex CLI, documentação de hooks: https://learn.chatgpt.com/docs/hooks