O npm install não funciona no Codex CLI? Era o sandbox

Meu primeiro problema logo depois da instalação não foi um pedido de aprovação. Foi que o npm install não funcionava no Codex CLI.

Os arquivos eram editados normalmente, mas a instalação de dependências ficava parada. Por um bom tempo, achei que era problema do próprio npm.

Vou direto à conclusão. Não convém forçar com sudo.

Além disso, aprovação e sandbox são dois eixos completamente diferentes. Sem separar os dois, a confusão se repete: “Eu permiti, por que não roda?”

Por que o npm install não funciona no Codex CLI com workspace-write?

O modo workspace-write permite escrever arquivos, mas o acesso à rede é uma configuração separada. Por isso, um comando que precisa de rede, como o npm install, pode ser bloqueado mesmo com as edições funcionando.

No começo, achei que o npm estava estranho. Afinal, os arquivos de código continuavam sendo editados sem problema.

Com a instalação concluída, coloquei o Codex para fazer trabalho real. As mudanças de código passavam bem.

Só a etapa de instalar dependências travava, várias vezes.

Por um tempo, desconfiei da configuração do npm. A causa real era a condição de acesso à rede do sandbox.

Desde então, trato “pode escrever arquivos?” e “pode usar a rede?” como duas permissões totalmente separadas.

Segundo a documentação oficial, o workspace-write trata a escrita no sistema de arquivos e o acesso à rede como limites diferentes (Documentação da OpenAI: Sandbox).

Mas não consegui confirmar na documentação o nome exato da chave de configuração. Por isso, aqui só digo que o acesso à rede é controlado por uma configuração separada.

Vale usar sudo quando o npm install -g dá EACCES?

No meu caso, não: com sudo o pacote instala na hora, mas depois as permissões ficam mais emaranhadas. O que resolveu foi organizar o caminho de instalação do Node e reinstalar num ambiente Node do usuário.

Esse EACCES foi um problema separado, do começo da instalação.

Na mesma máquina conviviam o Node do sistema e um gerenciador de versões do Node que eu tinha instalado à parte. Ao instalar um pacote global do npm, apareceu um problema de permissão.

Minha primeira reação foi sudo npm install -g .... Parei ali, porque já tinha passado por isso antes.

Depois de organizar o caminho do Node e reinstalar, o problema sumiu.

O que tirei dessa tentativa e erro: aparecer EACCES não quer dizer que se deva partir para o sudo sem pensar.

Aprovação vs sandbox no Codex CLI: o que muda de fato?

A opção approval_policy decide quando perguntar a uma pessoa, e a sandbox_mode decide até onde o agente pode executar sem perguntar. São dois eixos independentes, então uma aprovação permissiva não libera o sandbox.

No começo, eu não tinha essa distinção clara.

Diagrama do Codex CLI que mostra approval_policy e sandbox_mode como dois eixos independentes
A aprovação decide quando o Codex pergunta. O sandbox decide até onde ele pode executar sem perguntar.

Por que entendi never como “liberar tudo”

Quando vi approval_policy = "never", meu primeiro pensamento foi simples: “Agora tudo vai ser permitido automaticamente.”

Não foi assim. Mesmo com never, as ações fora do sandbox continuaram restritas.

Segundo a documentação oficial, --ask-for-approval never foi projetado para funcionar com todos os modos de --sandbox.

A documentação também diz que as restrições do sandbox continuam valendo, seja qual for a aprovação (Documentação da OpenAI: Agent approvals & security).

O que observar em setembro de 2026

O que conto aqui foi verificado em setembro de 2026. Os nomes de flags e os valores de configuração do Codex CLI vêm mudando de uma versão para outra.

Opções copiadas de um tutorial antigo podem não bater com a versão mais recente.

Por exemplo, o valor approval_policy = "untrusted" foi removido por um PR mesclado em agosto de 2026. A partir da 0.149.0, se o arquivo de configuração ainda tiver esse valor, o Codex nem inicia e dá erro (openai/codex PR #39630).

Hoje, a documentação oficial lista três valores de approval_policy: on-request, never e granular, de controle detalhado. Não consegui confirmar o valor “unless-trusted”, citado com frequência.

Por isso, sempre que mexo de novo no config.toml, acho mais seguro reabrir a ajuda da CLI e a referência oficial de configuração.

config.toml do Codex CLI com as configurações approval_policy e sandbox_mode
No config.toml, approval_policy e sandbox_mode são configurados separadamente. (redesenhado com IA)

Quanto tempo as aprovações custam com workspace-write e danger-full-access?

Repeti a mesma refatoração 5 vezes: workspace-write + on-request levou 14–16 minutos, e danger-full-access em ambiente isolado, 11–13 minutos. É uma medição pessoal, não um número geral.

Rodei tudo num repositório pessoal/POC, num macOS com Apple Silicon. Mudei só duas condições.

Condição Tempo (média, faixa em 5 execuções) Aprovações
workspace-write + on-request 14–16 min 2–4
danger-full-access (ambiente isolado) 11–13 min Nenhuma (sem pedido de aprovação)

De onde vieram as 2–4 aprovações?

Com workspace-write + on-request, cada execução teve em geral umas 2–4 intervenções de permissão. As edições de arquivos dentro do workspace e os testes normais seguiam quase sem pausa.

Codex CLI no modo workspace-write pedindo aprovação de permissão no terminal
Pedido de aprovação com workspace-write + on-request. (redesenhado com IA)

Na maioria das vezes, as pausas vinham em momentos parecidos: quando algo precisava de acesso à rede ou de um arquivo fora do workspace.

14–16 min contra 11–13 min, e por que não generalizo

Com danger-full-access num ambiente isolado, o tempo parado por aprovações quase desaparece (veja a tabela).

Não vou transformar isso em “danger-full-access é 20% mais rápido” como número geral. A diferença real dependia muito de quanto acesso fora do sandbox a tarefa exigia.

Também não medi com timestamps precisos. São cinco repetições pessoais, nada mais.

Em quais ambientes eu uso danger-full-access?

Meu critério é usar só em ambientes que dá para descartar inteiros, como Docker, uma VM descartável ou um worktree separado. O modo read-only, o mais conservador, nem permite escrita, então fica fora desta comparação.

Segundo a documentação oficial, o danger-full-access é um modo que remove por completo os limites do sistema de arquivos e da rede (Documentação da OpenAI: Sandbox).

Na documentação, a flag --dangerously-bypass-approvals-and-sandbox (alias --yolo) não aparece como “EXTREMELY DANGEROUS”. O rótulo é [Elevated Risk] No sandbox; no approvals (not recommended), com um aviso para usar com cuidado (Documentação da OpenAI: Agent approvals & security).

As flags --sandbox/-s e --profile aparecem na documentação. Para --worktree e --approve-for-me, não achei respaldo no que verifiquei desta vez, então não trato delas aqui.

Repositório pessoal, POC da empresa e experimentos de automação

Na prática, separo três ambientes. No repositório pessoal, uso workspace-write + on-request no host macOS.

Na POC da empresa, fico principalmente em workspace-write, num repositório de desenvolvimento. O acesso a credenciais e à produção fica totalmente separado, em outras ferramentas e ambientes.

Só experimentos de automação de baixo risco ganham permissões mais amplas, em Docker ou num worktree descartável.

Três bases de permissão do Codex CLI: repositório pessoal, POC da empresa e experimentos de automação
Meu padrão é workspace-write. Permissões mais amplas só vão para ambientes que dá para descartar inteiros.

Meu padrão é sempre workspace-write.

O critério não é velocidade. A pergunta é: “Se este agente executar algo errado, tudo bem o efeito chegar fora do workspace?”

Na maioria dos casos, a resposta é não. Nos meus repositórios de desenvolvimento do dia a dia no host, não deixo uma opção de bypass como padrão só por ser cômodo.

Poucos perfis, de propósito

Não crio perfis demais. Deixo a configuração padrão conservadora e, além dela, mantenho mais ou menos um perfil separado: o de ambientes isolados.

Codex CLI vs Antigravity CLI: qual pediu menos aprovações?

Na minha comparação pessoal, o Codex com workspace-write + on-request pareceu pedir menos intervenções que o Antigravity CLI (pode variar com a ferramenta e o momento). Na mesma tarefa, o Antigravity levou cerca de 18 minutos no modo de aprovação e cerca de 12 no modo automático.

Ferramenta / modo Tempo Aprovações Bloqueios
Antigravity CLI, modo de aprovação ~18 min 6–7 4
Antigravity CLI, modo automático ~12 min – –
Codex workspace-write + on-request 14–16 min 2–4 –

Comparado com meus testes do Antigravity, no Codex tive relativamente menos a sensação de aprovar um por um até os comandos normais do workspace.

Para o uso diário de um agente de programação, essa combinação foi mais cômoda.

Nos dois casos, julguei pelo mesmo critério: o blast radius (até onde o estrago chega) e a reversibilidade.

Uma coisa não mudou. Sem distinguir sandbox e aprovação, a confusão é a mesma em qualquer ferramenta.

Qual combinação do Codex equivale exatamente ao --dangerously-skip-permissions do Claude Code é algo que não trato a fundo neste post.

Para mim, o sandbox não é algo que ligo por desconfiar do agente

Por melhores que os modelos fiquem, sobram caminhos de falha que não dependem do raciocínio deles. Por exemplo: comandos de shell, scripts de pacote, um caminho errado ou uma limpeza de teste inesperada.

Meu padrão é confinar o blast radius de um erro dentro do workspace, não poupar alguns cliques de aprovação.

Referências


Este artigo foi localizado a partir do original em coreano: https://jjeongil.tistory.com/3566.