Modos de Sandbox e Aprovação do Codex: Guia Completo (2026)
O Codex divide a segurança em duas configurações independentes: o modo sandbox (o que o agente PODE fazer) e a política de aprovação (quando ele deve PERGUNTAR antes de fazer). O padrão é workspace-write + on-request. Nunca combine danger-full-access com never (ou --yolo) fora de um ambiente descartável. Este guia cobre os três modos de sandbox, as três políticas de aprovação, como alterná-los via CLI/config.toml, a nova camada Permission Profiles e uma tabela de decisão para escolher o par certo em menos de um minuto.
- Os mecanismos de sandbox/aprovação do Codex (e a nova camada Permission Profiles) mudam rápido, e a documentação oficial está atualmente dividida em vários caminhos em learn.chatgpt.com; os detalhes abaixo foram conferidos com a documentação oficial no momento em que escrevo (08/2026) - verifique a documentação ao vivo antes de depender dela.
Modo sandbox vs. política de aprovação - duas perguntas diferentes
O Codex faz a si mesmo duas perguntas totalmente separadas antes de fazer qualquer coisa: "O que eu ESTOU AUTORIZADO a fazer?" (modo sandbox) e "Quando eu devo PERGUNTAR primeiro?" (política de aprovação). Segundo a documentação oficial learn.chatgpt.com/codex/sandboxing, as duas camadas funcionam de forma independente - um sandbox totalmente aberto não significa que o Codex pare de te perguntar, e uma política de aprovação rígida não significa que o Codex fique automaticamente limitado no que pode tocar.
Novo no Codex? Leia o que é o OpenAI Codex antes deste mergulho na configuração. Uma linha para evitar confusão: este é o sistema de permissões do próprio Codex - não tem nada a ver com instalar o AgentKit por cima dele.
Os três modos de sandbox
O modo sandbox decide o que o Codex pode tocar na sua máquina SEM esperar sua confirmação. Segundo a documentação oficial de sandbox (acessada em 08/2026), há três níveis:
| Modo sandbox | O que o Codex pode fazer | Nível de risco |
|---|---|---|
read-only | Apenas lê arquivos; não pode escrever/modificar nada no disco nem executar comandos com efeitos colaterais. | Baixo |
workspace-write (padrão) | Lê/escreve dentro do diretório do workspace atual (mais alguns caminhos temporários do sistema); qualquer coisa fora desse escopo ainda precisa de aprovação separada. | Médio |
danger-full-access | Sem fronteira de sistema de arquivos - lê/escreve em qualquer lugar onde o processo do Codex tenha permissão de nível de SO para tocar. | Alto |
O workspace-write é o que o Codex escolhe por padrão quando você não especifica nada - também é o que eu uso na maior parte do dia a dia de programação, já que é amplo o suficiente para trabalho de verdade sem abrir a máquina inteira.
Exemplo rápido: abra o Codex em um repositório em que você já está programando, não mude nada, e ele assume workspace-write por padrão - livre para editar arquivos dentro do repositório. Mas se ele tentar escrever fora desse escopo (digamos, tocar em ~/.ssh/ ou em outro diretório do sistema), isso é uma ação fora do sandbox - ela é bloqueada de vez ou dispara um passo de pergunta separado, dependendo da política de aprovação definida ao mesmo tempo.
As três políticas de aprovação
A política de aprovação decide quando o Codex deve PARAR e te perguntar, totalmente separada do que ele está autorizado a fazer. Segundo a documentação oficial de aprovações e segurança de agentes (acessada em 08/2026), há três níveis:
| Política de aprovação | Quando o Codex pergunta |
|---|---|
untrusted | Pergunta antes da maioria dos comandos, mesmo os que parecem inofensivos - a configuração mais cautelosa. |
on-request (padrão para pastas versionadas) | O Codex decide sozinho quais comandos são seguros para executar diretamente e só pergunta quando julga um comando arriscado ou fora do sandbox atual. |
never | Nunca pergunta - segue direto conforme o modo sandbox definido, incluindo comandos arriscados. |
A parte que a maioria dos guias ignora: a documentação oficial afirma que on-request é o padrão "para pastas versionadas" - não um padrão incondicional para toda pasta. Quase todos os outros guias que eu verifiquei (nos dois idiomas) pulam essa condição. Se você estiver rodando o Codex fora de um diretório versionado pelo git, não presuma que on-request esteja ativo - confira a sua configuração real.
Como alternar modos - /permissions, flags da CLI, config.toml
Três formas comuns de definir o modo sandbox + a política de aprovação:
- Na sessão (CLI): digite
/permissionspara abrir o seletor e escolher direto. - IDE/desktop: um controle de permissão bem no compositor.
- Flags de inicialização:
--sandboxe--ask-for-approval. - Configuração persistente: as chaves
sandbox_modeeapproval_policyem~/.codex/config.toml.
Um exemplo real para um pipeline de CI (ninguém por perto para responder prompts):
codex --sandbox read-only --ask-for-approval never
Esse par funciona em execuções não interativas porque o Codex nunca para para esperar entrada (never), enquanto read-only impede que ele escreva qualquer coisa inesperada. Essa configuração combina diretamente com o modo como você monta o AGENTS.md para o Codex - veja o guia de AGENTS.md para o Codex para juntar os dois em um único fluxo de trabalho.
Permission Profiles - a camada de configuração mais nova
Além do par clássico sandbox_mode/approval_policy acima, o Codex tem uma camada de configuração mais nova: os Permission Profiles, confirmados por uma consulta direta a learn.chatgpt.com/docs/permissions (acessada em 08/2026). Como funciona:
- A chave
default_permissionsaponta para um perfil interno ou personalizado. - Três perfis internos:
:read-only,:workspace,:danger-full-access- correspondendo aproximadamente aos três modos de sandbox acima, só que com nomes diferentes. - Você pode escrever seu próprio perfil com uma tabela
[permissions.<name>], declarando quais caminhos são legíveis, graváveis ou explicitamente negados. - O acesso à rede é separado:
network.enabled(rede ligada/desligada) é distinto defeatures.network_proxy(roteado por um proxy controlado).
Sinceramente: quase ninguém cobre isso nos resultados de busca que eu verifiquei enquanto pesquisava este texto - só um artigo menciona, e de forma isolada, nunca colocado ao lado do par sandbox_mode/approval_policy para comparação. E uma coisa que a documentação oficial não deixa clara: a precedência se você definir default_permissions e sandbox_mode/approval_policy ao mesmo tempo. Algumas fontes não oficiais chutam que sandbox_mode vence, mas eu não encontrei uma página de documentação primária confirmando isso diretamente - então não trate como fato. O movimento seguro na prática: escolha um sistema e seja consistente - ou o par legado completo, ou os Permission Profiles completos, não misture os dois.
Um exemplo conceitual para você visualizar o valor real dessa camada (não é sintaxe de campo oficial confirmada): você quer um perfil que leia o repositório inteiro, mas só possa escrever em um diretório logs/, negando explicitamente alguns caminhos sensíveis como .env ou .ssh/ mesmo que, de outro modo, eles caíssem dentro do escopo de leitura mais amplo. Esse é um controle por caminho que o par clássico sandbox_mode/approval_policy (apenas três níveis amplos) não consegue fazer. Verifique a sintaxe exata dos campos na documentação ao vivo antes de confiar nela, já que esta é uma parte da documentação adicionada recentemente.
Tabela de decisão - qual modo para qual tarefa
Esta é a tabela que eu de fato uso para decidir em menos de um minuto, em vez de repensar tudo toda vez que abro o Codex:
| Cenário | sandbox_mode | approval_policy | Por quê |
|---|---|---|---|
| Somente leitura, planejamento | read-only | on-request | Nada para escrever, então é seguro mesmo se o Codex avaliar mal um risco. |
| Programação do dia a dia num repositório local (o próprio padrão do Codex) | workspace-write | on-request | Acesso suficiente para trabalho de verdade, enquanto o Codex ainda pergunta em comandos arriscados ou fora do sandbox. |
| Tarefas locais repetitivas e confiáveis | workspace-write | untrusted | Um pouco contraintuitivo: use untrusted (pergunta mais) em tarefas repetitivas para confirmar rápido, passo a passo, em vez de pular tudo com never. |
| CI/CD, não interativo | read-only (ou um workspace-write bem restrito) | never | Não há ninguém para clicar em aprovar, então tem que ser never; mantenha o sandbox o mais restrito possível para compensar. |
| Precisa mesmo de acesso ao sistema inteiro | danger-full-access | on-request | Ainda mantém uma camada de pergunta antes de o Codex tocar em algo perigoso fora do workspace. |
| Somente sandbox descartável (contêiner/VM de uso único) | danger-full-access | never/--yolo | O par mais arriscado só é aceitável quando a máquina inteira é descartável depois da sessão. |
Uma linha para lembrar: nunca combine danger-full-access com never/--yolo fora de um ambiente descartável. É a única linha desta tabela que abre mão das duas camadas de segurança de uma vez.
A lição de segurança em produção - um tapa de verdade
A tabela acima soa razoável no papel, mas o motivo de ela existir não é teórico. O próprio artigo deste site como usar o /goal com eficácia conta o "Slap #1": o objetivo estava escrito com clareza - fazer deploy apenas em staging - mas depois de alguns auto-compactos, o agente saiu de contexto, esqueceu o limite e fez deploy direto em produção, mesmo com um hook lembrando-o da tarefa após cada compactação.
É exatamente essa a falha que esta tabela de decisão evita: a linha de segurança precisa morar em um sandbox_mode/approval_policy real (um limite técnico que o Codex tem de obedecer), não numa nota dentro de um prompt ou objetivo (algo que um agente pode esquecer depois de compactação de contexto suficiente). Se o seu ambiente de produção estiver em qualquer lugar ao alcance do Codex, não defina approval_policy = never para esse escopo, por mais certeza que você tenha de já ter dito para ele não fazer.
Em outras palavras, a tabela de decisão acima não é um exercício teórico para pendurar na parede. É a resposta técnica para exatamente a pergunta que o Slap #1 levanta: como impedir que um agente persistente que saiu de contexto toque em algo que não deveria. Um lembrete em prompt pode ser esquecido; um limite definido em sandbox_mode/approval_policy não pode.
O AgentKit roda dentro do modo que você escolher
Para ser direta sobre o limite: o AgentKit não toca nem contorna o sandbox ou a política de aprovação do Codex. Ele é só uma camada de skills/fluxo de trabalho que roda dentro de qualquer modo ativo no momento - se você definir read-only + untrusted, o AgentKit fica preso a esse mesmo limite, sem nenhum privilégio próprio. Instalando para o Codex: ak kit init engineer --target codex, depois chame $ak:cook dentro de uma nova sessão do Codex - veja como usar o AgentKit com o Codex para o passo a passo completo.
Quer workflows/skills prontos que ficam dentro do sandbox que você escolher? O AgentKit Engineer Kit adiciona ak:cook, ak:code-review, ak:ship para o Codex - ele não muda nenhuma das permissões existentes do Codex, você continua controlando sandbox/aprovação exatamente como antes.
Adquira o AgentKit Engineer Kit - 20% de desconto, agora $79.20 →
Perguntas frequentes (FAQ)
Qual é o modo sandbox padrão do Codex?
workspace-write - o Codex pode ler/escrever dentro do diretório do workspace atual, sem acesso livre ao sistema todo. Ele se combina com a política de aprovação padrão, on-request, para pastas versionadas.
on-request sempre pergunta antes de cada comando?
Não. O on-request deixa o Codex decidir sozinho quais comandos são seguros para executar diretamente, e só pergunta quando julga um comando arriscado ou fora do escopo do sandbox atual - diferente de untrusted, que pergunta antes da maioria dos comandos.
Qual é a diferença entre danger-full-access e --yolo?
danger-full-access é um valor de sandbox_mode (remove a fronteira do sistema de arquivos). --yolo (a flag que contorna os dois) vai além - ela junta o sandbox mais amplo com uma política de aprovação never em uma única flag, o que a torna mais arriscada do que danger-full-access sozinho. Confirme o nome exato da flag na sua instalação antes de usá-la, já que essa superfície muda com frequência.
Dá para usar Permission Profiles e sandbox_mode juntos?
Tecnicamente você pode declarar os dois, mas a documentação oficial não deixa claro qual vence em um conflito. Não trate nenhuma afirmação de precedência como confirmada - a abordagem segura é escolher um sistema (legado ou Permission Profiles) e manter a consistência.
Qual modo você deve usar para CI/CD?
read-only (ou um workspace-write bem restrito) combinado com never - como não há ninguém para responder prompts em um pipeline, a aprovação tem que ser never, então compense com o sandbox mais apertado que ainda funcione.
O /permissions altera meu config.toml permanentemente?
Esse é um detalhe para verificar ao vivo antes de depender dele - o comportamento pode diferir entre uma mudança só de sessão e algo realmente gravado de volta no config.toml. A checagem mais segura é abrir o config.toml depois de trocar pelo seletor e confirmar você mesma se foi salvo.
Conclusão
O modelo de segurança do Codex se resume a duas camadas independentes: o modo sandbox (o que ele pode fazer) e a política de aprovação (quando ele deve perguntar). O padrão workspace-write + on-request serve para a maior parte da programação do dia a dia; nunca combine danger-full-access com never/--yolo fora de um ambiente descartável. Use a tabela de decisão acima em vez de adivinhar, e lembre-se da lição do Slap #1: a linha de segurança pertence à configuração, não a uma nota em prompt.