← Todos os Posts

Codex aposentou a política untrusted: o que mudar

Do guia: Codex CLI Comprehensive Guide

O Codex CLI v0.149.0 (estável, 20 de agosto de 2026) aposentou a política de aprovação untrusted no PR #39630, “Retire the untrusted approval policy” (aposentar a política de aprovação untrusted).1 O PR remove untrusted “from the CLI, configuration schema, and MCP tool interface” (da CLI, do schema de configuração e da interface de ferramentas MCP), e um approval_policy = "untrusted" explícito agora falha “with an actionable error” (com um erro acionável).4 Reproduzido no 0.149.1, em 25 de agosto de 2026: o lançamento de uma sessão é interrompido com Error: approval_policy = "untrusted" is no longer supported; remove this setting, esteja o valor no config.toml, em um arquivo de perfil ou em um override -c, e o binário codex rejeita -a untrusted já na análise dos argumentos.5 Troque o valor por on-request e deixe o modo de sandbox como está; para a configuração mais cautelosa, combine --sandbox read-only com on-request.3 O conjunto atual de políticas é on-request, never e a forma granular em tabela.2 Atualizado até a v0.149.1 (24 de agosto de 2026, UTC), o latest do npm.1 {.answer-block}

TL;DR

  • A mudança: o changelog completo da v0.149.0 lista o PR #39630, “Retire the untrusted approval policy”. As notas de lançamento não trazem nenhum texto de migração além desse título;1 a descrição do PR traz: untrusted saiu da CLI, do schema de configuração e da interface de ferramentas MCP, e configurações explícitas “now fail with an actionable error” (agora falham com um erro acionável).4
  • Quem precisa agir: qualquer pessoa com approval_policy = "untrusted" em ~/.codex/config.toml ou em um perfil, e qualquer pessoa que passe --ask-for-approval untrusted (ou -a untrusted) em scripts, aliases ou CI.
  • A substituição: on-request, com o modo de sandbox inalterado. read-only mais on-request é o par que a documentação chama de “Safe read-only browsing” (navegação segura somente leitura).2 A antiga combinação workspace-write mais untrusted não tem sucessor direto; o prompt por comando agora vive nas regras de exec policy.48
  • O conjunto atual: on-request, never ou approval_policy = { granular = { ... } } para controle por categoria. Os modos de sandbox continuam sendo read-only, workspace-write e danger-full-access.2
  • Falha rápida, não silenciosa: um approval_policy = "untrusted" esquecido interrompe a sessão com Error: approval_policy = "untrusted" is no longer supported; remove this setting, seja no config.toml, em um arquivo de perfil ou em um override -c. O codex doctor informa apenas que a configuração não pôde ser carregada, sem nomear a chave.5

O que mudou no Codex 0.149?

Os itens de destaque são novas superfícies, entre elas o painel codex agents, o codex queue e um codex doctor mais amplo; a mudança na aprovação fica mais abaixo, no changelog completo.1 A descrição do PR #39630 traz o detalhe que as notas de lançamento omitem. Dois dos seus três tópicos importam aqui: “Remove untrusted from the CLI, configuration schema, and MCP tool interface. Explicit approval_policy = "untrusted" settings now fail with an actionable error.” (remover untrusted da CLI, do schema de configuração e da interface de ferramentas MCP; configurações explícitas de approval_policy = "untrusted" agora falham com um erro acionável) e “Remove the known-safe command allowlist. Projects marked untrusted now request approval for every command unless an explicit exec policy rule allows it.” (remover a lista de comandos conhecidamente seguros; projetos marcados como untrusted agora pedem aprovação para todo comando, a menos que uma regra explícita de exec policy o permita).4 Uma correção de bug no mesmo lançamento importa para os mesmos leitores: “Resumed and forked threads now restore their active permission profile instead of silently falling back to current defaults.” (threads retomadas e bifurcadas agora restauram seu perfil de permissão ativo em vez de recair silenciosamente nos padrões atuais).1

Item do lançamento Texto verbatim da fonte Por que importa aqui
PR #39630 “Retire the untrusted approval policy” O valor que você precisa remover
Correção de restauração de threads (PR #39153) “Resumed and forked threads now restore their active permission profile instead of silently falling back to current defaults.” Sessões antigas carregam a política antiga; verifique o que uma thread retomada informa
Expansão do codex doctor “diagnoses endpoint protection, network/proxy failures, desktop app state, and update connectivity” A primeira ferramenta a rodar depois de editar a configuração, embora não nomeie uma chave aposentada

Cada linha cita as notas de lançamento da v0.149.0.1

Quem precisa editar alguma coisa?

Quatro lugares carregam o valor. Encontre todos primeiro, porque um perfil ou um alias do shell reafirma a política antiga depois que você corrige o arquivo principal.

Local O que procurar Dono típico
~/.codex/config.toml approval_policy = "untrusted" Desenvolvedor individual
Arquivos de perfil (~/.codex/<name>.config.toml) approval_policy = "untrusted" Quem tem mais de um preset
Tabelas legadas [profiles.<name>] no config.toml approval_policy = "untrusted" dentro da tabela. O Codex ignora a tabela sem --profile (a menos que você passe --strict-config, que rejeita campos não reconhecidos), e --profile se recusa a iniciar enquanto uma existir; mova as chaves para ~/.codex/<name>.config.toml e corrija o valor lá5 Quem configurou presets antes do formato de um arquivo por perfil
Scripts, aliases, Makefiles, CI --ask-for-approval untrusted, --ask-for-approval=untrusted, -a untrusted, -c approval_policy=untrusted Automação e ferramentas de equipe

A falha da tabela legada é barulhenta. No 0.149.1, codex exec --profile safe "hi" com uma tabela [profiles.safe] ainda no config.toml é interrompido com Error loading config.toml: --profile `safe` cannot be used while .../config.toml contains legacy `profile = "safe"` or `[profiles.safe]` config; move those settings into .../safe.config.toml ..., então o --profile safe de um colega falha antes de o Codex ler o valor de aprovação.5

Um grep para cada lado:

# Config and profiles: match the key, not the bare word
grep -rnE 'approval_policy\s*=\s*"untrusted"' ~/.codex/*.toml .codex/config.toml 2>/dev/null

# Scripts, aliases, CI
grep -rn --exclude-dir=node_modules \
  -e "ask-for-approval untrusted" -e "ask-for-approval=untrusted" \
  -e "-a untrusted" -e "approval_policy=untrusted" \
  ~/.zshrc ~/.bashrc . 2>/dev/null

# CI directories: read every bare hit, because YAML can split a flag from its value
grep -rn --exclude-dir=node_modules "untrusted" .github .gitlab-ci.yml .circleci 2>/dev/null

O primeiro grep casa com a chave, e não com a palavra solta, por um motivo. trust_level = "untrusted" é uma configuração diferente; deixe-a em paz. A referência de configuração define projects.<path>.trust_level como a chave que marca “a project or worktree as trusted or untrusted” (um projeto ou worktree como confiável ou não confiável), e projetos não confiáveis “skip project-scoped .codex/ layers, including project-local config, hooks, and rules” (pulam as camadas .codex/ com escopo de projeto, incluindo configuração local do projeto, hooks e regras).7 O PR #39630 muda o que um projeto não confiável faz com os comandos, não a chave: “Projects marked untrusted now request approval for every command unless an explicit exec policy rule allows it.”4 Um localizar-e-substituir cego de untrusted corrompe essa chave.

Arquivos de perfil são o mecanismo documentado de presets (~/.codex/<name>.config.toml, selecionado com codex --profile <name>), então o perfil de um colega pode reintroduzir o valor aposentado, não importa o que o config principal diga.2

Qual é o conjunto atual de políticas de aprovação?

A segurança do Codex vem de duas camadas: o modo de sandbox decide o que o Codex consegue fazer tecnicamente, e a política de aprovação decide quando o Codex precisa parar e perguntar.2 A aposentadoria toca apenas a segunda.

Camada Valores atuais Observações
Política de aprovação on-request, never, { granular = { ... } } on-request é o padrão interativo no preset Auto; never desativa os prompts; granular mantém as categorias escolhidas interativas e rejeita automaticamente o resto2
Modo de sandbox read-only, workspace-write, danger-full-access workspace-write mantém a rede desligada, a menos que [sandbox_workspace_write] network_access = true2
Preset Auto --sandbox workspace-write --ask-for-approval on-request Lê, edita e executa comandos no workspace; pergunta antes de editar fora dele ou de usar a rede2
Navegação segura somente leitura --sandbox read-only --ask-for-approval on-request Lê arquivos e responde perguntas; pergunta antes de edições, comandos ou rede2
Não interativo (CI) --sandbox read-only --ask-for-approval never Só lê, nunca pergunta2

A forma granular cobre cinco categorias de prompt: sandbox_approval, rules (prompts de execpolicy), mcp_elicitations, request_permissions e skill_approval.2 Nenhuma delas reproduz untrusted, que era uma regra de classificação de comandos (executar automaticamente leituras conhecidamente seguras, perguntar antes de qualquer coisa que pudesse alterar estado), e não um filtro de categorias de prompt.2

workspace-write mais untrusted, a linha que a documentação chama de “Automatically edit but ask for approval to run untrusted commands” (editar automaticamente, mas pedir aprovação para executar comandos não confiáveis), não tem sucessor direto.2 workspace-write mais on-request para de perguntar sobre comandos que rodam dentro do sandbox; read-only mais on-request pergunta tanto sobre edições quanto sobre comandos.2 O PR #39630 removeu “the known-safe command allowlist” (a lista de comandos conhecidamente seguros) e nomeia o mecanismo sobrevivente para prompt por comando: “Projects marked untrusted now request approval for every command unless an explicit exec policy rule allows it.”4 Regras de exec policy são o mesmo mecanismo por trás da categoria rules da tabela granular, os “execpolicy-rule prompts” que a página de aprovações lista.2 Responsáveis por segurança que dependiam de untrusted em um workspace gravável devem construir essas regras. A documentação de regras restringe o escopo delas a comandos que rodam fora do sandbox; uma prefix_rule com decision = "prompt" pergunta “before each matching invocation” (antes de cada invocação correspondente):8

# ~/.codex/rules/default.rules
prefix_rule(pattern = ["git", "push"], decision = "prompt")

O sandbox somente leitura continua sendo a alternativa bruta que bloqueia mutações de vez.3

Quais são as edições exatas?

O mapeamento é uma linha: untrusted vira on-request, e o modo de sandbox fica como estava.3

Antes (aposentado) Depois Onde
approval_policy = "untrusted" approval_policy = "on-request" config.toml e todos os arquivos de perfil
--ask-for-approval untrusted --ask-for-approval on-request Scripts e aliases que lançam o binário TUI codex
-a untrusted -a on-request Flag abreviada, apenas no binário codex
-c approval_policy=untrusted -c approval_policy=on-request Override inline; a forma que o codex exec aceita
sandbox_mode = "read-only" + untrusted sandbox_mode = "read-only" + on-request O exemplo de config.toml da documentação, rotulado “Always ask for approval mode”2

Config principal (um arquivo de perfil recebe a edição idêntica):

# ~/.codex/config.toml (before)
approval_policy = "untrusted"
sandbox_mode    = "read-only"

# ~/.codex/config.toml (after)
approval_policy = "on-request"
sandbox_mode    = "read-only"

Um script:

# before
codex --sandbox workspace-write --ask-for-approval untrusted "$@"

# after
codex --sandbox workspace-write --ask-for-approval on-request "$@"

O par -a/--ask-for-approval pertence ao binário TUI codex. O codex exec não tem essa flag: no 0.149.1, codex exec --ask-for-approval untrusted "hi" falha com error: unexpected argument '--ask-for-approval' found.5 Para o codex exec, defina a política na configuração ou passe-a inline:

# non-interactive run, policy set inline
codex exec --sandbox workspace-write -c approval_policy=never "$@"

Duas decisões de julgamento vêm a seguir. Primeiro, onde ninguém pode responder a um prompt, o binário interativo codex sob on-request trava na primeira aprovação; o par não interativo documentado é --sandbox read-only --ask-for-approval never, e codex exec --sandbox workspace-write é o ponto de entrada não interativo documentado.2 Segundo, se você combinava untrusted com danger-full-access para ter “poder total, mas perguntando sempre”, essa propriedade não sobrevive à troca. Os dois exemplos de prompt de on-request na documentação são sair do sandbox e usar a rede, e danger-full-access remove os dois gatilhos.2 Prompts das outras quatro categorias da tabela granular continuam disparando sob acesso total: regras de exec policy com decision = "prompt", elicitações MCP, aprovações de skills e prompts de request_permissions.28 A configuração opcional approvals_reviewer = "auto_review" encaminha os prompts elegíveis por um agente revisor; ela se aplica apenas a políticas interativas, então continua disponível depois da migração.2

Como verificar se a mudança pegou?

  1. Rode codex doctor. Com o valor aposentado ainda na configuração, sua linha de config começa com ✗ config config could not be loaded e a linha de detalhe diz · failed to load Codex config; o doctor não nomeia a chave problemática. O erro nomeado vem de lançar o codex ou o codex exec. Uma linha limpa no doctor significa que o valor sumiu; uma linha com falha significa que você ainda precisa lançar uma sessão para ver qual chave.5 O erro de lançamento é idêntico esteja o valor no config.toml, em um arquivo de perfil selecionado com --profile ou em um override -c approval_policy=untrusted.5 A forma de flag falha antes, na análise dos argumentos: codex -a untrusted --version imprime error: invalid value 'untrusted' for '--ask-for-approval <APPROVAL_POLICY>' seguido de [possible values: on-request, never].5
  2. Inicie uma sessão descartável em um diretório de rascunho e rode /status. A linha Permissions mostra a política ativa, e on-request aparece ali como “Ask for approval”.5 O /permissions abre o menu de presets em vez de informar o modo ativo, então leia o /status.5 O /status também lista os diretórios do workspace.2
  3. Retome uma thread mais antiga. O PR #39153, “Restore permission profiles when resuming threads” (restaurar perfis de permissão ao retomar threads), agora restaura “the latest persisted approval policy, approvals reviewer, and active permission-profile ID when resuming or forking a thread” (a última política de aprovação persistida, o revisor de aprovações e o ID do perfil de permissão ativo ao retomar ou bifurcar uma thread).6 Uma thread retomada cuja política persistida é untrusted continua sem teste; trate esse caso como desconhecido até abrir uma.

Uma ressalva sobre a própria documentação. A página oficial “Agent approvals & security”, conforme capturada em 24 de agosto e reverificada em 25 de agosto de 2026, ainda mostra --ask-for-approval untrusted na sua tabela de combinações, ainda carrega o parágrafo em prosa que começa com “With --ask-for-approval untrusted, Codex runs only known-safe read operations automatically” (com --ask-for-approval untrusted, o Codex executa automaticamente apenas operações de leitura conhecidamente seguras) e ainda usa approval_policy = "untrusted" no seu exemplo de config.toml.2 A entrada approval_policy da referência de configuração lista untrusted primeiro na sua união de tipos, enquanto a descrição marca um valor diferente como aposentado: “on-failure is deprecated; use on-request for interactive runs or never for non-interactive runs.” (on-failure está obsoleto; use on-request para execuções interativas ou never para execuções não interativas).7 O PR e o binário são o registro autoritativo; a documentação está atrasada em relação a eles. Não copie o bloco de exemplo da documentação para uma instalação nova do 0.149 sem trocar o valor.

FAQ

O que substitui approval_policy = "untrusted" no Codex?

approval_policy = "on-request", com o seu sandbox_mode atual inalterado. Para a combinação mais cautelosa, defina sandbox_mode = "read-only" junto.3

Qual versão do Codex aposentou a política untrusted?

A v0.149.0, estável em 20 de agosto de 2026, via PR #39630 no changelog completo. A v0.149.1 (24 de agosto de 2026, UTC) é o latest atual do npm.1

O que acontece se eu deixar untrusted no config.toml?

O Codex se recusa a iniciar a sessão. No 0.149.1, o codex exec é interrompido com Error: approval_policy = "untrusted" is no longer supported; remove this setting, o mesmo erro aparece para um arquivo de perfil e para -c approval_policy=untrusted, e o codex doctor informa apenas que a configuração não pôde ser carregada.5 O PR #39630 descreve o comportamento como falhar “with an actionable error” (com um erro acionável).4

on-request é menos seguro do que untrusted era?

Dentro de workspace-write, sim: untrusted perguntava antes de qualquer comando que pudesse alterar estado, e on-request executa comandos dentro do sandbox sem perguntar.2 A camada de sandbox recupera parte da margem: read-only bloqueia gravações independentemente da política, e on-request ainda pergunta antes de qualquer escalada.3 Para prompt por comando em um workspace gravável, escreva regras de exec policy, o mecanismo que o PR #39630 nomeia.48

Preciso mudar meu modo de sandbox também?

Não. A aposentadoria afeta apenas a política de aprovação; mantenha read-only, workspace-write ou danger-full-access como você tinha.3

Principais conclusões

Para desenvolvedores individuais: - Faça grep em ~/.codex/*.toml por approval_policy = "untrusted" (não pela palavra solta), substitua cada ocorrência por on-request e deixe sandbox_mode e qualquer trust_level = "untrusted" em paz. - Rode codex doctor, depois /status em uma sessão de rascunho, e retome uma thread antiga para ver o que o 0.149 restaura.

Para equipes que mantêm perfis e scripts compartilhados: - Corrija arquivos de perfil e overrides inline no mesmo commit que o config.toml; uma tabela legada [profiles.<name>] bloqueia o --profile por completo até você movê-la para ~/.codex/<name>.config.toml.5 - Converta jobs sem supervisão para --sandbox read-only --ask-for-approval never no binário codex, ou codex exec --sandbox workspace-write -c approval_policy=never; o binário interativo codex sob on-request trava em um prompt que ninguém vai responder, e o codex exec não tem a flag --ask-for-approval.5

Para responsáveis por segurança: - O classificador untrusted (executar automaticamente leituras seguras, perguntar em mutações) não tem equivalente granular; o PR #39630 aponta para regras de exec policy (“unless an explicit exec policy rule allows it”) para prompt por comando,4 escritas como uma prefix_rule com decision = "prompt" em ~/.codex/rules/default.rules,8 e o sandbox somente leitura bloqueia mutações de vez. - Considere approvals_reviewer = "auto_review" onde um agente revisor possa substituir um humano em prompts elegíveis.

Referências


  1. OpenAI, notas de lançamento do Codex CLI v0.149.0, publicadas em 20 de agosto de 2026 (estável). Novos recursos citados verbatim; o PR #39630 “Retire the untrusted approval policy” aparece no changelog completo do lançamento; a correção de bug de restauração de threads citada verbatim. A v0.149.1 (publicada em 24 de agosto de 2026, UTC) é o latest do npm. Verificado em 24 de agosto de 2026. 

  2. OpenAI, “Agent approvals & security”. Camadas de sandbox e aprovação, o preset Auto, a tabela de combinações comuns (incluindo as linhas “Safe read-only browsing” e “Automatically edit but ask for approval to run untrusted commands”), --ask-for-approval never, a tabela granular de approval_policy e sua categoria “execpolicy-rule prompts”, approvals_reviewer, arquivos de perfil, /status para os diretórios do workspace e codex exec para execuções não interativas. Conforme capturada em 24 de agosto de 2026 e reverificada em 25 de agosto de 2026, a página ainda mostra untrusted na sua tabela de combinações, no parágrafo em prosa que começa com “With --ask-for-approval untrusted,” e no seu exemplo de config.toml

  3. Blake Crosley, guia do Codex CLI, guia v2.59 (25 de agosto de 2026). Mapeamento editorial de migração: approval_policy = "untrusted" para approval_policy = "on-request" com o modo de sandbox inalterado; read-only mais on-request rotulado como “Maximum safety” (segurança máxima) na tabela de modos de sandbox do guia. 

  4. OpenAI, PR #39630, “Retire the untrusted approval policy”, mesclado em 20 de agosto de 2026 (UTC). Descrição citada verbatim: “Remove untrusted from the CLI, configuration schema, and MCP tool interface. Explicit approval_policy = "untrusted" settings now fail with an actionable error.” e “Remove the known-safe command allowlist. Projects marked untrusted now request approval for every command unless an explicit exec policy rule allows it.” Verificado em 25 de agosto de 2026. 

  5. Reprodução do autor no Codex CLI 0.149.1 (npx -y @openai/[email protected] com um CODEX_HOME de rascunho), 25 de agosto de 2026. Cobre o erro de argumento de -a untrusted; o erro de configuração de approval_policy = "untrusted" vindo de codex exec --skip-git-repo-check com o valor no config.toml, em ~/.codex/safe.config.toml sob --profile safe e como -c approval_policy=untrusted; a saída do codex doctor com essa configuração; a rejeição de codex exec --ask-for-approval; o erro da tabela legada [profiles.safe] sob --profile safe; e o rótulo de Permissions do /status

  6. OpenAI, PR #39153, “Restore permission profiles when resuming threads”, mesclado em 18 de agosto de 2026 (UTC). Descrição citada verbatim: “Restore the latest persisted approval policy, approvals reviewer, and active permission-profile ID when resuming or forking a thread.” Verificado em 25 de agosto de 2026. 

  7. OpenAI, Referência de configuração do Codex, obtida como Markdown em 25 de agosto de 2026. A união de tipos da entrada approval_policy diz untrusted | on-request | never | { granular = { ... } } (chaves granulares omitidas) e sua descrição inclui “on-failure is deprecated; use on-request for interactive runs or never for non-interactive runs.”; a entrada projects.<path>.trust_level define o marcador de projeto confiável/não confiável citado acima. 

  8. OpenAI, Rules, obtida em 25 de agosto de 2026. A página abre com “Rules are experimental and may change.” (as regras são experimentais e podem mudar). Os três valores do campo decision, citados verbatim: “allow: Run the command outside the sandbox without prompting.” “prompt: Prompt before each matching invocation.” “forbidden: Block the request without prompting.” O arquivo da camada do usuário é ~/.codex/rules/default.rules, o caminho em que o Codex grava “when you add a command to the allow list in the TUI” (quando você adiciona um comando à lista de permitidos na TUI); o exemplo da própria página pergunta antes de gh pr view. O Codex “applies the most restrictive decision when more than one rule matches (forbidden > prompt > allow).” (aplica a decisão mais restritiva quando mais de uma regra corresponde). 

Artigos relacionados

Install and Update Claude Code CLI: Mac, Linux, Windows

Every way to install, update, pin, and uninstall the Claude Code CLI -- native installer, Homebrew, winget, or npm -- on…

7 min de leitura

Os hooks do Codex tornam a estrutura de agentes real

Hooks do Codex, Remote SSH e controle pelo celular tornam o trabalho com agentes operacional. Evidência, aprovações e cu…

11 min de leitura

Foundation Models a partir do Python: a CLI fm

O macOS 27 traz a CLI fm e um Foundation Models SDK para Python: crie scripts para o modelo on-device da Apple e pipelin…

13 min de leitura