Use estas opções quando precisar de mais controle sobre provedores, políticas e integrações. Para começar, consulte Configuração básica.
Para saber mais sobre instruções de projeto, recursos reutilizáveis, comandos de barra personalizados, fluxos de trabalho com subagentes e integrações, consulte Personalização. Para conhecer as chaves de configuração, consulte a Referência de configuração.
Como aplicar estes exemplos ao acesso ao computador local com o modo Work na nuvem
Estes exemplos descrevem a configuração do Codex. Consulte a Referência de configuração antes de adaptá-los ao acesso ao computador local com o modo Work na nuvem.
- Escopo das políticas: No modo Work com acesso local e nos dots, quando a política gerenciada está habilitada, o orquestrador compartilhado na nuvem segue as disposições compatíveis da política global. O computador conectado segue os requisitos de execução local aplicáveis. Os contêineres do modo Work na nuvem continuam seguindo as políticas existentes do modo Work na nuvem.
- Execução local: Os requisitos de MDM e os requisitos legados para dispositivos gerenciados têm precedência sobre a Segurança do agente. A Segurança do agente, por sua vez, tem precedência sobre o arquivo de requisitos do sistema do dispositivo.
- Hooks corporativos: Quando habilitado para o espaço de trabalho, esse recurso oferece suporte a hooks MCP definidos por administradores. Eles são executados no coordenador da nuvem (orquestrador) em eventos compatíveis do ciclo de vida e das ferramentas. A orquestração na nuvem não oferece suporte a hooks de comando nem a hooks provenientes da configuração local ou de plugins, mesmo quando as ferramentas são executadas localmente.
- Auditoria: Antes de usar esses hooks para auditoria, teste a conexão de callback, confirme quais eventos ela recebe e verifique como as falhas afetam a tarefa. Os hooks MCP não fornecem uma trilha de auditoria completa da API de Compliance.
- Outras configurações: A configuração gerenciada não transfere provedores de modelos personalizados nem caminhos locais do host para esse recurso. Consulte as restrições de rede e as regras de mesclagem de cada campo em Configuração gerenciada.
Consulte Hooks para saber quais recursos são compatíveis e como configurá-los.
Perfis
Os perfis permitem salvar camadas de configuração com nomes próprios e alternar entre elas pela CLI. Quando você passa --profile profile-name, o Codex carrega ~/.codex/config.toml e, em seguida, aplica a configuração de ~/.codex/profile-name.config.toml sobre ela. Os nomes dos perfis podem conter letras, números, hífens e sublinhados.
Crie um arquivo TOML separado para cada perfil. Use as chaves de configuração no nível superior do arquivo de perfil, sem aninhá-las em [profiles.profile-name].
O exemplo usa o GPT-6.1 Sol. Para usá-lo, a conta ou o espaço de trabalho com que você fez login precisa ter acesso ao modelo. Se ele estiver indisponível, escolha um modelo ao qual você tenha acesso.
# ~/.codex/deep-review.config.toml
model = "gpt-6.1-sol"
model_reasoning_effort = "medium"
approval_policy = "on-request"
model_catalog_json = "/Users/me/.codex/model-catalogs/deep-review.json"codex --profile deep-review
codex exec --profile deep-review "review this change"
O arquivo de perfil tem precedência sobre a configuração básica do usuário, mas fica abaixo das configurações do projeto e da CLI. Por isso, basta incluir nele os valores que diferem da configuração básica. Os arquivos de perfil também podem substituir model_catalog_json. Quando os dois arquivos definem essa chave, o Codex usa o valor do perfil.
A partir do Codex 0.134.0, --profile deixou de ler [profiles.profile-name] de config.toml, e o Codex deixou de aceitar o seletor de nível superior profile = "profile-name". Mova as configurações legadas do perfil para ~/.codex/profile-name.config.toml e remova a tabela [profiles.profile-name] correspondente e o seletor profile = "profile-name" de config.toml.
Como substituir configurações em uma única execução pela CLI
Você pode editar ~/.codex/config.toml ou substituir configurações em uma única execução pela CLI:
- Prefira opções específicas quando disponíveis (por exemplo,
--model). - Use
-c/--configpara substituir o valor de uma chave qualquer.
Os exemplos abaixo que selecionam o GPT-6.1 Sol também exigem acesso a esse modelo. Se você não tiver acesso, substitua-o por um modelo disponível para você:
# Dedicated flag
codex --model gpt-6.1-sol
# Generic key/value override (value is TOML, not JSON)
codex --config model='"gpt-6.1-sol"'
codex --config sandbox_workspace_write.network_access=true
codex --config 'shell_environment_policy.include_only=["PATH","HOME"]'Observações:
- As chaves podem usar notação de ponto para definir valores aninhados (por exemplo,
mcp_servers.context7.enabled=false). - Os valores de
--configsão interpretados como TOML. Na dúvida, coloque o valor entre aspas para que o shell não o divida nos espaços. - Se não conseguir interpretar o valor como TOML, o Codex o tratará como uma string.
Onde ficam a configuração e os dados de estado
O Codex armazena seu estado local em CODEX_HOME (por padrão, ~/.codex).
Entre os arquivos e dados mais comuns estão:
config.toml(sua configuração local)auth.json(se você armazena credenciais em arquivo) ou o chaveiro de credenciais do sistema operacionalhistory.jsonl(se a persistência do histórico estiver habilitada)- Outros dados de estado específicos do usuário, como logs e caches
Para mais detalhes sobre autenticação, incluindo os modos de armazenamento de credenciais, consulte Autenticação. Para ver a lista completa de chaves de configuração, consulte a Referência de configuração.
Para saber mais sobre configurações padrão compartilhadas, regras e habilidades mantidas em repositórios ou caminhos do sistema, consulte Configuração da equipe.
Se você só precisa direcionar o provedor integrado da OpenAI para um proxy de LLM, um roteador ou um projeto com residência de dados habilitada, defina openai_base_url em config.toml em vez de criar um provedor. Isso altera a URL base do provedor integrado openai sem exigir uma entrada separada em model_providers.<id>.
openai_base_url = "https://us.api.openai.com/v1"
Arquivos de configuração do projeto (.codex/config.toml)
Além da configuração do usuário, o Codex lê configurações específicas do projeto nos arquivos .codex/config.toml do repositório. O Codex percorre o caminho da raiz do projeto até o diretório de trabalho atual e carrega cada .codex/config.toml que encontra. Se vários arquivos definirem a mesma chave, prevalecerá o valor do arquivo mais próximo do diretório de trabalho.
Por segurança, o Codex só carrega os arquivos de configuração específicos do projeto quando o projeto é confiável. Se o projeto não for confiável, o Codex ignorará as camadas .codex/ do projeto, incluindo .codex/config.toml, os hooks locais e as regras locais do projeto. As camadas do usuário e do sistema são independentes e continuam sendo carregadas.
Caminhos relativos na configuração de um projeto (por exemplo, model_instructions_file) são resolvidos a partir da pasta .codex/ que contém o config.toml.
Os arquivos de configuração do projeto não podem substituir configurações que redirecionam credenciais, alteram metadados de solicitações de aplicativos sob controle do host, mudam a autenticação do provedor, selecionam perfis de configuração ou executam comandos de notificação ou telemetria na máquina local. O Codex ignora as seguintes chaves no arquivo .codex/config.toml do projeto e exibe um aviso na inicialização quando as encontra: openai_base_url, chatgpt_base_url, apps_mcp_product_sku, model_provider, model_providers, notify, profile, profiles, experimental_realtime_ws_base_url e otel. Defina as chaves de provedor, notificação e telemetria no arquivo de configuração do usuário ~/.codex/config.toml. Para selecionar perfis de configuração, use --profile profile-name e ~/.codex/profile-name.config.toml.
Hooks
O Codex também pode carregar hooks do ciclo de vida a partir de arquivos hooks.json ou de tabelas [hooks] definidas diretamente nos arquivos config.toml que ficam junto às camadas de configuração ativas.
Na prática, os quatro locais mais úteis são:
~/.codex/hooks.json~/.codex/config.toml<repo>/.codex/hooks.json<repo>/.codex/config.toml
Os hooks locais do projeto só são carregados quando a camada .codex/ do projeto é confiável. Os hooks do usuário independem da confiança atribuída ao projeto.
Os hooks definidos diretamente em TOML usam a mesma estrutura de eventos de hooks.json:
[[hooks.PreToolUse]]
matcher = "^Bash$"
[[hooks.PreToolUse.hooks]]
type = "command"
command = '/usr/bin/python3 "$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use_policy.py"'
timeout = 30
statusMessage = "Checking Bash command"
Se a mesma camada contiver tanto hooks.json quanto uma tabela [hooks], o Codex carregará ambos e exibirá um aviso. Prefira um único formato por camada.
Para consultar a lista atual de eventos, os campos de entrada, o comportamento da saída e as limitações, veja Hooks.
Funções dos agentes ([agents] em config.toml)
Para configurar as funções dos subagentes ([agents] em config.toml), consulte Subagentes.
Detecção da raiz do projeto
O Codex localiza a configuração do projeto (por exemplo, camadas .codex/ e arquivos AGENTS.md) percorrendo os diretórios superiores a partir do diretório de trabalho até encontrar a raiz do projeto.
Por padrão, o Codex considera como raiz do projeto um diretório que contém .git. Para personalizar esse comportamento, defina project_root_markers em config.toml:
# Treat a directory as the project root when it contains any of these markers.
project_root_markers = [".git", ".hg", ".sl"]
Defina project_root_markers = [] para pular a busca nos diretórios superiores e usar o diretório de trabalho atual como raiz do projeto.
Provedores de modelos personalizados
Se sua organização oferece um gateway de modelos, siga as instruções em Conectar-se a um gateway para configurar e verificar o cliente. Para implantar o gateway em toda a organização, consulte Implantar um gateway.
Um provedor de modelos define como o Codex se conecta a um modelo, incluindo a URL base, a API de comunicação, a autenticação e os cabeçalhos HTTP opcionais. Escolha um ID exclusivo para cada provedor personalizado. O Codex reserva os IDs openai, ollama, lmstudio, amazon-bedrock, amazon-bedrock-runtime e gcp para seus provedores integrados.
Defina outros provedores e use model_provider para indicar qual deles usar:
model = "gpt-6.1-sol"
model_provider = "proxy"
[model_providers.proxy]
name = "OpenAI using LLM proxy"
base_url = "http://proxy.example.com"
env_key = "OPENAI_API_KEY"
[model_providers.local_ollama]
name = "Ollama"
base_url = "http://localhost:11434/v1"
[model_providers.mistral]
name = "Mistral"
base_url = "https://api.mistral.ai/v1"
env_key = "MISTRAL_API_KEY"Se um provedor personalizado oferecer suporte ao endpoint independente de pesquisa na Web, declare esse recurso na configuração do provedor:
[model_providers.proxy]
name = "OpenAI using LLM proxy"
base_url = "https://proxy.example.com/v1"
env_key = "OPENAI_API_KEY"
supports_standalone_web_search = true
O valor padrão dessa configuração é false para provedores personalizados. A pesquisa independente na Web está em desenvolvimento e vem desativada por padrão. Definir o recurso do provedor como true não basta para ativá-lo. O provedor precisa oferecer um endpoint compatível, e tanto o modelo selecionado quanto o ambiente de execução precisam oferecer suporte à pesquisa independente. O modo de web_search configurado e as restrições gerenciadas de pesquisa continuam valendo.
Adicione cabeçalhos às solicitações quando necessário:
[model_providers.example]
http_headers = { "X-Example-Header" = "example-value" }
env_http_headers = { "X-Example-Features" = "EXAMPLE_FEATURES" }
Para fazer login pelo navegador com o provedor de identidade da organização, use o OAuth nativo do gateway. Configure [model_providers.<id>.gateway_oauth] com as URLs de autorização e de token, o ID público do cliente e as configurações de envio do token. Essa opção funciona com requires_openai_auth = false e dispensa o login com o ChatGPT, o PowerShell, a CLI do Azure e um utilitário externo de credenciais. O gateway precisa aceitar o token OAuth no cookie ou no cabeçalho personalizado configurado.
Use a autenticação por comando quando o provedor exigir que o Codex obtenha tokens de portador de um utilitário externo de credenciais:
[model_providers.proxy]
name = "OpenAI using LLM proxy"
base_url = "https://proxy.example.com/v1"
wire_api = "responses"
[model_providers.proxy.auth]
command = "/usr/local/bin/fetch-codex-token"
args = ["--audience", "codex"]
timeout_ms = 5000
refresh_interval_ms = 300000
O comando de autenticação não recebe dados em stdin e precisa escrever o token na saída padrão. O Codex remove os espaços em branco no início e no fim, trata um token vazio como erro e renova o token antecipadamente no intervalo definido por refresh_interval_ms. Defina refresh_interval_ms = 0 para renovar o token somente após uma nova tentativa de autenticação. Não combine [model_providers.<id>.auth] com env_key, experimental_bearer_token ou requires_openai_auth.
Provedor do Amazon Bedrock
Defina model_provider como amazon-bedrock para usar o endpoint do Bedrock Mantle ou como amazon-bedrock-runtime para usar o endpoint do Runtime. Para selecionar as credenciais e a região da AWS para o Mantle, configure a tabela aws desse provedor.
model_provider = "amazon-bedrock"
model = "<bedrock-model-id>"
[model_providers.amazon-bedrock.aws]
profile = "default"
region = "eu-central-1"
Se você omitir profile, o Codex usará a cadeia de credenciais padrão da AWS. Defina region como a região compatível do Bedrock que deverá processar as solicitações.
Para ver todas as etapas de configuração, as opções de autenticação, os modelos compatíveis e a disponibilidade dos recursos, consulte Usar o ChatGPT Work e o Codex com o Amazon Bedrock.
Provedor do Google Cloud Vertex AI
Para usar um modelo ao qual seu projeto tem acesso no Vertex AI, defina o provedor integrado em config.toml.
model_provider = "gcp"
[model_providers.gcp]
project_id = "my-project"
location = "global"
Se você omitir project_id ou location, o Codex lerá GOOGLE_CLOUD_PROJECT ou GOOGLE_CLOUD_LOCATION, respectivamente. O local padrão é global.
Para usar a autenticação padrão, instale a CLI do Google Cloud na máquina que executa o Codex. Para fazer login localmente, execute gcloud auth application-default login. O Codex executa gcloud auth application-default print-access-token para obter tokens de acesso.
Para usar um arquivo ADC específico, defina credential_file com o caminho absoluto do arquivo na tabela [model_providers.gcp]. O Codex atribui esse caminho à variável GOOGLE_APPLICATION_CREDENTIALS ao executar o comando de autenticação.
Se sua implantação usar outro endpoint, um comando diferente para obter tokens ou cabeçalhos estáticos, configure base_url, auth ou http_headers, conforme o caso, em [model_providers.gcp].
Modo OSS (provedores locais)
O Codex pode usar um provedor local de “código aberto”, como Ollama ou LM Studio, quando você passa --oss. Escolha um provedor para uma única execução com --local-provider ou defina o provedor padrão em oss_provider. Se você não definir nenhum dos dois, a CLI interativa pedirá que escolha um provedor. Nesse caso, codex exec encerrará a execução com um erro.
# Default local provider used with `--oss`
oss_provider = "ollama" # or "lmstudio"
Provedor do Azure e ajustes por provedor
[model_providers.azure]
name = "Azure"
base_url = "https://YOUR_PROJECT_NAME.openai.azure.com/openai"
env_key = "AZURE_OPENAI_API_KEY"
query_params = { api-version = "2025-04-01-preview" }
wire_api = "responses"
request_max_retries = 4
stream_max_retries = 10
stream_idle_timeout_ms = 300000
Para alterar a URL base do provedor integrado da OpenAI, use openai_base_url. Não crie [model_providers.openai], pois não é possível substituir os IDs dos provedores integrados.
Organizações da API que usam residência de dados
Em projetos criados com a residência de dados habilitada, você pode criar um provedor de modelos para atualizar base_url com o prefixo correto. Espaços de trabalho do ChatGPT com residência de dados dispensam um provedor personalizado. Quando você faz login com o ChatGPT, o Codex respeita as configurações de residência do espaço de trabalho.
model_provider = "openaidr"
[model_providers.openaidr]
name = "OpenAI Data Residency"
base_url = "https://us.api.openai.com/v1" # Replace 'us' with domain prefix
Raciocínio, nível de detalhe e limites do modelo
model_reasoning_summary = "none" # Disable summaries
model_verbosity = "low" # Shorten responses
model_context_window = 128000 # Context window size
model_verbosity se aplica apenas aos provedores que usam a API Responses. Os provedores que usam Chat Completions ignoram essa configuração.
Políticas de aprovação e modos de sandbox
Escolha o rigor da política de aprovação, que determina quando o Codex pausa, e o nível da sandbox, que determina o acesso a arquivos e à rede.
Para saber como editar config.toml, consulte Combinações comuns de sandbox e aprovação, Caminhos protegidos em raízes com permissão de gravação e Acesso à rede.
O Codex e o ChatGPT Work deixaram de oferecer suporte a approval_policy = "untrusted". Consulte Migrar da política de aprovação descontinuada untrusted para conhecer as configurações compatíveis e as opções mais rigorosas para aprovações decorrentes da configuração do projeto.
Para saber mais sobre os perfis de permissão em versão beta que configuram em conjunto o acesso ao sistema de arquivos e à rede, consulte Permissões.
Você também pode usar uma política de aprovação granular (approval_policy = { granular = { ... } }) para permitir ou rejeitar automaticamente categorias específicas de solicitações. Assim, você mantém as aprovações interativas habituais em alguns casos e nega automaticamente outras solicitações, como as de request_permissions ou de execução de scripts de habilidades.
Defina approvals_reviewer = "auto_review" para encaminhar as solicitações de aprovação interativa elegíveis à Revisão automática. Para substituir a política do revisor, consulte Configuração da Revisão automática.
approval_policy = "on-request" # Other options: never or { granular = { ... } }
approvals_reviewer = "user" # Or "auto_review" for Auto-review
sandbox_mode = "workspace-write"
allow_login_shell = false # Optional hardening: disallow login shells for shell tools
# Example granular approval policy:
# approval_policy = { granular = {
# sandbox_approval = true,
# rules = true,
# mcp_elicitations = true,
# request_permissions = false,
# skill_approval = false
# } }
[sandbox_workspace_write]
exclude_tmpdir_env_var = false # Allow $TMPDIR
exclude_slash_tmp = false # Allow /tmp
writable_roots = ["/Users/YOU/.pyenv/shims"]
network_access = false # Opt in to outbound network
Perfis de permissão nomeados
Para conhecer os perfis integrados, a sintaxe dos perfis personalizados e o modelo completo de configuração do sistema de arquivos e da rede, consulte Permissões.
Para ver a lista completa de chaves e as restrições impostas pelos requisitos, consulte a Referência de configuração e Configuração gerenciada.
No modo workspace-write, alguns ambientes mantêm .git/, .agents/, .codex/ e .aws/ como somente leitura, mesmo quando o restante do espaço de trabalho permite gravação. Por isso, comandos como git commit ainda podem exigir aprovação para execução fora da sandbox. Se quiser impedir que o Codex execute comandos específicos (por exemplo, bloquear git commit fora da sandbox), use regras.
Para desativar completamente o ambiente isolado, use a configuração abaixo somente se o seu ambiente já isolar os processos:
sandbox_mode = "danger-full-access"
Política de ambiente do shell
shell_environment_policy controla quais variáveis de ambiente o Codex passa aos comandos que inicia. Comece com um ambiente vazio usando inherit = "none" ou herde um conjunto reduzido de variáveis com inherit = "core". Adicione valores explícitos e filtros por chave para evitar passar segredos desnecessários aos comandos.
[shell_environment_policy]
inherit = "core"
set = { MY_FLAG = "1" }
ignore_default_excludes = false
[shell_environment_policy.filters]
"AWS_*" = "exclude"
"AZURE_*" = "exclude"
Os padrões dos filtros não diferenciam maiúsculas de minúsculas e aceitam * e ?. Use "exclude" para remover as variáveis que correspondem ao padrão. Quando algum padrão usa "include", o Codex mantém apenas as variáveis que correspondem a um padrão de inclusão. Os filtros de inclusão não restauram variáveis já excluídas. Ao mesclar as chaves de filtro de diferentes camadas de configuração, o Codex não diferencia maiúsculas de minúsculas.
O valor padrão de ignore_default_excludes é true, portanto o Codex não remove automaticamente as variáveis cujos nomes contêm KEY, SECRET ou TOKEN. Defina o valor como false para aplicar essas exclusões automáticas antes dos filtros explícitos.
O Codex aplica primeiro as exclusões automáticas, depois as exclusões personalizadas, os valores de set e, por último, a lista de padrões de inclusão. Como set é aplicado após as exclusões, ele pode restaurar uma variável excluída. A lista de padrões de inclusão ainda pode remover o valor restaurado.
As listas legadas exclude e include_only continuam compatíveis com as configurações existentes. Não combine nenhuma delas com [shell_environment_policy.filters] na mesma camada de configuração. O Codex rejeita essa combinação.
Servidores MCP
Consulte a documentação do MCP para obter detalhes sobre a configuração.
Observabilidade e telemetria
Habilite a exportação de logs do OpenTelemetry (OTel) para acompanhar as execuções do Codex, incluindo solicitações à API, eventos SSE e outros eventos, prompts, aprovações e resultados de ferramentas. A exportação vem desativada por padrão. Para ativá-la, use [otel]:
[otel]
environment = "staging" # defaults to "dev"
exporter = "none" # set to otlp-http or otlp-grpc to send events
log_user_prompt = false # redact user prompts unless explicitly enabled
Os administradores podem definir quais exportadores e configurações individuais de log são obrigatórios em requirements.toml.
Escolha um exportador:
[otel]
exporter = { otlp-http = {
endpoint = "https://otel.example.com/v1/logs",
protocol = "binary",
headers = { "x-otlp-api-key" = "${OTLP_TOKEN}" }
}}
[otel]
exporter = { otlp-grpc = {
endpoint = "https://otel.example.com:4317",
headers = { "x-otlp-meta" = "abc123" }
}}
Com exporter = "none", o Codex registra os eventos sem enviá-los. Os exportadores agrupam os eventos em lotes de forma assíncrona e enviam os dados pendentes no encerramento. Os metadados dos eventos incluem o nome do serviço, a versão da CLI, a etiqueta de ambiente, o ID da conversa, o modelo, as configurações de sandbox e aprovação e campos específicos de cada evento (consulte a Referência de configuração).
Eventos emitidos
O Codex emite eventos de log estruturados para execuções e uso de ferramentas. Alguns exemplos:
codex.conversation_starts(modelo, configurações de raciocínio e política de sandbox e aprovação)codex.api_request(tentativa, status, indicação de sucesso, duração e detalhes do erro)codex.sse_event(tipo de evento do fluxo, sucesso ou falha, duração e contagem de tokens emresponse.completed)codex.websocket_requestecodex.websocket_event(duração da solicitação e, para cada mensagem, tipo, indicação de sucesso e erro)codex.user_prompt(comprimento do prompt, com o conteúdo oculto a menos que seu registro seja habilitado explicitamente)codex.agent_response(respostas finais do agente principal e dos subagentes iniciados, registradas quandootel.log_agent_responses = true)codex.guardian_assessment(revisões automáticas de solicitações de aprovação já concluídas, registradas quandootel.log_guardian_assessments = true)codex.tool_decision(aprovação ou recusa e se a decisão veio da configuração ou do usuário)codex.tool_result(duração, indicação de sucesso e trecho da saída)
Métricas OTel emitidas
Quando o pipeline de métricas OTel está habilitado, o Codex emite contadores e histogramas de duração para atividades da API, dos fluxos de eventos e das ferramentas.
Cada métrica abaixo também inclui as etiquetas de metadados padrão auth_mode, originator, session_source, model e app.version.
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
codex.api_request |
contador | status, success |
Número de solicitações à API por status HTTP e por sucesso ou falha. |
codex.api_request.duration_ms |
histograma | status, success |
Duração das solicitações à API em milissegundos. |
codex.sse_event |
contador | kind, success |
Número de eventos SSE por tipo de evento e por sucesso ou falha. |
codex.sse_event.duration_ms |
histograma | kind, success |
Tempo de processamento dos eventos SSE em milissegundos. |
codex.websocket.request |
contador | success |
Número de solicitações WebSocket por sucesso ou falha. |
codex.websocket.request.duration_ms |
histograma | success |
Duração das solicitações WebSocket em milissegundos. |
codex.websocket.event |
contador | kind, success |
Número de mensagens ou eventos WebSocket por tipo e por sucesso ou falha. |
codex.websocket.event.duration_ms |
histograma | kind, success |
Tempo de processamento das mensagens ou eventos WebSocket em milissegundos. |
codex.tool.call |
contador | tool, success |
Número de chamadas por nome da ferramenta e por sucesso ou falha. |
codex.tool.call.duration_ms |
histograma | tool, success |
Tempo de execução em milissegundos por nome da ferramenta e resultado. |
Para mais orientações sobre segurança e privacidade na telemetria, consulte Segurança.
Métricas
Por padrão, o Codex envia periodicamente à OpenAI um pequeno volume de dados anônimos sobre uso e funcionamento. Esses dados ajudam a detectar problemas no Codex e mostram quais recursos e opções de configuração estão em uso, para que a equipe do Codex possa definir prioridades. As métricas não contêm informações de identificação pessoal (PII). A coleta de métricas independe da exportação de logs e rastreamentos do OTel.
Para desativar a análise de uso e o exportador de métricas integrado statsig, defina a opção de análise na configuração:
[analytics]
enabled = false
Para desativar também um exportador personalizado de métricas OTLP, defina otel.metrics_exporter = "none".
Cada métrica inclui seus próprios campos e os campos de contexto padrão abaixo.
Campos de contexto padrão (presentes em todos os eventos e métricas)
auth_mode:swic|api|unknown.model: nome do modelo usado.app.version: versão do Codex.
Catálogo de métricas
Cada métrica inclui os campos obrigatórios e os campos de contexto padrão descritos acima. Os nomes das métricas abaixo omitem o prefixo codex..
A maioria dos nomes de métricas fica em codex-rs/otel/src/metrics/names.rs. O catálogo também inclui métricas de recursos específicos emitidas fora desse arquivo.
Quando uma métrica inclui o campo tool, ele indica a ferramenta interna usada (por exemplo, apply_patch ou shell). O campo não contém o comando de shell que o codex tenta executar nem o patch que tenta aplicar.
Ambiente de execução e transporte de dados do modelo
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
api_request |
contador | status, success |
Número de solicitações à API por status HTTP e por sucesso ou falha. |
api_request.duration_ms |
histograma | status, success |
Duração das solicitações à API em milissegundos. |
sse_event |
contador | kind, success |
Número de eventos SSE por tipo de evento e por sucesso ou falha. |
sse_event.duration_ms |
histograma | kind, success |
Tempo de processamento dos eventos SSE em milissegundos. |
websocket.request |
contador | success |
Número de solicitações WebSocket por sucesso ou falha. |
websocket.request.duration_ms |
histograma | success |
Duração das solicitações WebSocket em milissegundos. |
websocket.event |
contador | kind, success |
Número de mensagens ou eventos WebSocket por tipo e por sucesso ou falha. |
websocket.event.duration_ms |
histograma | kind, success |
Tempo de processamento das mensagens ou eventos WebSocket em milissegundos. |
responses_api_overhead.duration_ms |
histograma | Tempo adicional da API Responses informado nas respostas WebSocket. | |
responses_api_inference_time.duration_ms |
histograma | Tempo de inferência da API Responses informado nas respostas WebSocket. | |
responses_api_engine_iapi_ttft.duration_ms |
histograma | Tempo até o primeiro token na IAPI do mecanismo da API Responses. | |
responses_api_engine_service_ttft.duration_ms |
histograma | Tempo até o primeiro token no serviço do mecanismo da API Responses. | |
responses_api_engine_iapi_tbt.duration_ms |
histograma | Tempo entre tokens na IAPI do mecanismo da API Responses. | |
responses_api_engine_service_tbt.duration_ms |
histograma | Tempo entre tokens no serviço do mecanismo da API Responses. | |
transport.fallback_to_http |
contador | from_wire_api |
Número de vezes que o transporte passou de WebSocket para HTTP como alternativa. |
remote_models.fetch_update.duration_ms |
histograma | Tempo para buscar as definições de modelos remotos. | |
remote_models.load_cache.duration_ms |
histograma | Tempo para carregar o cache de modelos remotos. | |
startup_prewarm.duration_ms |
histograma | status |
Duração do pré-aquecimento na inicialização, por resultado. |
startup_prewarm.age_at_first_turn_ms |
histograma | status |
Tempo decorrido desde o pré-aquecimento na inicialização até sua resolução pelo primeiro turno real. |
cloud_requirements.fetch.duration_ms |
histograma | Duração da busca dos requisitos de nuvem gerenciados pelo espaço de trabalho. | |
cloud_requirements.fetch_attempt |
contador | Ver observação | Tentativas de buscar os requisitos de nuvem gerenciados pelo espaço de trabalho. |
cloud_requirements.fetch_final |
contador | Ver observação | Resultado final da busca dos requisitos de nuvem gerenciados pelo espaço de trabalho. |
cloud_requirements.load |
contador | trigger, outcome |
Resultado do carregamento dos requisitos de nuvem gerenciados pelo espaço de trabalho. |
A métrica cloud_requirements.fetch_attempt inclui os campos trigger, attempt, outcome e status_code. A métrica cloud_requirements.fetch_final inclui os campos trigger, outcome, reason, attempt_count e status_code.
Atividade dos turnos e das ferramentas
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
turn.e2e_duration_ms |
histograma | Duração total de um turno, do início ao fim. | |
turn.ttft.duration_ms |
histograma | Tempo até o primeiro token do turno. | |
turn.ttfm.duration_ms |
histograma | Tempo até o primeiro item de saída do modelo no turno. | |
turn.network_proxy |
contador | active, tmp_mem_enabled |
Indica se o proxy de rede gerenciado estava ativo no turno. |
turn.memory |
contador | read_allowed, feature_enabled, config_use_memories, has_citations |
Disponibilidade de leitura da memória e uso de citações de memória por turno. |
turn.tool.call |
histograma | tmp_mem_enabled |
Número de chamadas de ferramentas no turno. |
turn.token_usage |
histograma | token_type, tmp_mem_enabled |
Uso de tokens por turno e por tipo de token (total, input, cached_input, output ou reasoning_output). |
tool.call |
contador | tool, success |
Número de chamadas por nome da ferramenta e por sucesso ou falha. |
tool.call.duration_ms |
histograma | tool, success |
Tempo de execução em milissegundos por nome da ferramenta e resultado. |
tool.unified_exec |
contador | tty |
Chamadas da ferramenta de execução unificada por modo de TTY. |
approval.requested |
contador | tool, approved |
Resultado da solicitação de aprovação de uma ferramenta (approved, approved_with_amendment, approved_for_session, denied, abort). |
mcp.call |
contador | Ver observação | Resultado da chamada de uma ferramenta MCP. |
mcp.call.duration_ms |
histograma | Ver observação | Duração da chamada de uma ferramenta MCP. |
mcp.tools.list.duration_ms |
histograma | cache |
Tempo para listar as ferramentas MCP, com indicação de acerto ou falha de cache. |
mcp.tools.fetch_uncached.duration_ms |
histograma | Duração das buscas de ferramentas MCP que não foram encontradas no cache. | |
mcp.tools.cache_write.duration_ms |
histograma | Duração das gravações no cache de ferramentas MCP dos Apps do Codex. | |
hooks.run |
contador | hook_name, source, status |
Número de execuções de hooks por nome, origem e status. |
hooks.run.duration_ms |
histograma | hook_name, source, status |
Duração da execução do hook em milissegundos. |
As métricas mcp.call e mcp.call.duration_ms incluem status. Em chamadas normais de ferramentas, também incluem tool e, quando disponíveis, connector_id e connector_name. Chamadas MCP bloqueadas nos Apps do Codex podem emitir mcp.call apenas com status.
Conversas, tarefas e recursos
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
feature.state |
contador | feature, value |
Valores dos recursos que diferem dos padrões (uma linha para cada valor diferente do padrão). |
status_line |
contador | Sessão iniciada com uma linha de status configurada. | |
model_warning |
contador | Aviso enviado ao modelo. | |
thread.started |
contador | is_git |
Nova conversa criada, com indicação de que o diretório de trabalho está ou não em um repositório Git. |
conversation.turn.count |
contador | Turnos do usuário e do assistente por conversa, registrados no fim da conversa. | |
thread.fork |
contador | source |
Nova conversa criada por fork de uma conversa existente. |
thread.rename |
contador | Conversa renomeada. | |
thread.side |
contador | source |
Conversa paralela criada. |
thread.skills.enabled_total |
histograma | Número de habilidades habilitadas para uma nova conversa. | |
thread.skills.kept_total |
histograma | Número de habilidades habilitadas mantidas após a renderização do prompt. | |
thread.skills.truncated |
histograma | Indica se a renderização das habilidades truncou a lista de habilidades habilitadas (1 ou 0). |
|
task.compact |
contador | type |
Número de compactações por tipo (remote ou local), incluindo as manuais e as automáticas. |
task.review |
contador | Número de revisões iniciadas. | |
task.undo |
contador | Número de ações de desfazer iniciadas. | |
task.user_shell |
contador | Número de ações de shell do usuário (por exemplo, ! na TUI). |
|
shell_snapshot |
contador | Ver observação | Indica se a captura de um snapshot do shell foi bem-sucedida. |
shell_snapshot.duration_ms |
histograma | success |
Tempo para capturar um snapshot do shell. |
skill.injected |
contador | status, skill |
Resultados da injeção de habilidades, por habilidade. |
plugins.startup_sync |
contador | transport, status |
Tentativas de sincronizar os plugins selecionados na inicialização. |
plugins.startup_sync.final |
contador | transport, status |
Resultado final da sincronização dos plugins selecionados na inicialização. |
multi_agent.spawn |
contador | role |
Criações de agentes por função. |
multi_agent.resume |
contador | Retomadas de agentes. | |
multi_agent.nickname_pool_reset |
contador | Redefinições do conjunto de apelidos dos agentes. |
A métrica shell_snapshot inclui success e, em caso de falha, failure_reason.
Memória e estado local
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
memory.phase1 |
contador | status |
Número de tarefas da fase 1 da memória por status. |
memory.phase1.e2e_ms |
histograma | Duração total da fase 1 da memória. | |
memory.phase1.output |
contador | Saídas gravadas na fase 1 da memória. | |
memory.phase1.token_usage |
histograma | token_type |
Uso de tokens na fase 1 da memória por tipo de token. |
memory.phase2 |
contador | status |
Número de tarefas da fase 2 da memória por status. |
memory.phase2.e2e_ms |
histograma | Duração total da fase 2 da memória. | |
memory.phase2.input |
contador | Número de entradas na fase 2 da memória. | |
memory.phase2.token_usage |
histograma | token_type |
Uso de tokens na fase 2 da memória por tipo de token. |
memories.usage |
contador | kind, tool, success |
Uso da memória por tipo, ferramenta e sucesso ou falha. |
external_agent_config.detect |
contador | Ver observação | Detecções de configurações externas de agentes por tipo de item de migração. |
external_agent_config.import |
contador | Ver observação | Importações de configurações externas de agentes por tipo de item de migração. |
db.backfill |
contador | status |
Resultados do preenchimento inicial do banco de dados de estado (upserted, failed). |
db.backfill.duration_ms |
histograma | status |
Duração do preenchimento inicial do banco de dados de estado. |
db.error |
contador | stage |
Erros em operações do banco de dados de estado. |
As métricas external_agent_config.detect e external_agent_config.import incluem migration_type. As migrações de habilidades também incluem skills_count.
Sandbox do Windows
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
windows_sandbox.setup_success |
contador | originator, mode |
Configurações bem-sucedidas da sandbox do Windows. |
windows_sandbox.setup_failure |
contador | originator, mode |
Falhas na configuração da sandbox do Windows. |
windows_sandbox.setup_duration_ms |
histograma | result, originator, mode |
Duração da configuração da sandbox do Windows. |
windows_sandbox.elevated_setup_success |
contador | Configurações bem-sucedidas da sandbox do Windows com privilégios elevados. | |
windows_sandbox.elevated_setup_failure |
contador | Ver observação | Falhas na configuração da sandbox do Windows com privilégios elevados. |
windows_sandbox.elevated_setup_canceled |
contador | Ver observação | Tentativas canceladas de configurar a sandbox do Windows com privilégios elevados. |
windows_sandbox.elevated_setup_duration_ms |
histograma | result |
Duração da configuração da sandbox do Windows com privilégios elevados. |
windows_sandbox.elevated_prompt_shown |
contador | Exibição da solicitação de configuração da sandbox com privilégios elevados. | |
windows_sandbox.elevated_prompt_accept |
contador | O usuário aceitou a solicitação de configuração da sandbox com privilégios elevados. | |
windows_sandbox.elevated_prompt_use_legacy |
contador | O usuário escolheu a sandbox legada na solicitação de configuração com privilégios elevados. | |
windows_sandbox.elevated_prompt_quit |
contador | O usuário saiu pela solicitação de configuração com privilégios elevados. | |
windows_sandbox.fallback_prompt_shown |
contador | Exibição da solicitação com alternativas de configuração da sandbox. | |
windows_sandbox.fallback_retry_elevated |
contador | O usuário tentou novamente a configuração com privilégios elevados na solicitação com alternativas. | |
windows_sandbox.fallback_use_legacy |
contador | O usuário escolheu a sandbox legada na solicitação com alternativas. | |
windows_sandbox.fallback_prompt_quit |
contador | O usuário saiu pela solicitação com alternativas. | |
windows_sandbox.legacy_setup_preflight_failed |
contador | Ver observação | Falha na verificação preliminar da configuração da sandbox legada do Windows. |
windows_sandbox.setup_elevated_sandbox_command |
contador | Chamada do comando de configuração da sandbox com privilégios elevados. | |
windows_sandbox.createprocessasuserw_failed |
contador | error_code, path_kind, exe, level |
Falhas de CreateProcessAsUserW no Windows. |
As métricas de falha de configuração com privilégios elevados incluem code e message quando há detalhes sobre a falha de configuração do Windows. Também podem incluir originator quando emitidas pelo fluxo de configuração compartilhado. A métrica windows_sandbox.legacy_setup_preflight_failed inclui originator quando emitida pelo fluxo de configuração compartilhado, mas as falhas na verificação preliminar da solicitação com alternativas podem não incluir nenhum campo.
Controles de feedback
Por padrão, os clientes locais permitem enviar feedback por meio de /feedback. Para desativar a coleta de feedback no aplicativo ChatGPT para desktop, na CLI do Codex e na extensão de IDE de uma máquina, atualize a configuração:
[feedback]
enabled = false
Quando a coleta está desativada, /feedback exibe uma mensagem informando isso, e o Codex rejeita os envios de feedback.
Ocultar ou exibir eventos de raciocínio
Para reduzir o ruído causado pela saída de “raciocínio”, por exemplo, nos logs de CI, você pode ocultá-la:
hide_agent_reasoning = true
Para exibir o conteúdo bruto do raciocínio quando o modelo o emitir:
show_raw_agent_reasoning = true
Habilite a exibição do raciocínio bruto somente se isso for aceitável no seu fluxo de trabalho. Alguns modelos ou provedores, como gpt-oss, não emitem raciocínio bruto. Nesse caso, a configuração não tem efeito visível.
Notificações
Use notify para acionar um programa externo sempre que o Codex emitir um evento compatível (atualmente, apenas agent-turn-complete). Essa opção é útil para notificações na área de trabalho, webhooks de chat, atualizações de CI ou alertas por outros canais que as notificações integradas da TUI não abrangem.
notify = ["python3", "/path/to/notify.py"]
Exemplo abreviado de notify.py que reage a agent-turn-complete:
#!/usr/bin/env python3
import argparse
import json
import subprocess
import sys
def main() -> int:
parser = argparse.ArgumentParser(
description="Show a Codex turn-completion notification on macOS."
)
parser.add_argument("notification", type=json.loads, help="Codex notification JSON")
notification = parser.parse_args().notification
if notification.get("type") != "agent-turn-complete":
return 0
title = f"Codex: {notification.get('last-assistant-message', 'Turn Complete!')}"
message = " ".join(notification.get("input-messages", []))
subprocess.check_output(
[
"terminal-notifier",
"-title",
title,
"-message",
message,
"-group",
"codex-" + notification.get("thread-id", ""),
"-activate",
"com.googlecode.iterm2",
]
)
return 0
if __name__ == "__main__":
sys.exit(main())O script recebe um único argumento JSON. Entre os campos comuns estão:
type(atualmente,agent-turn-complete)thread-id(identificador da sessão)turn-id(identificador do turno)cwd(diretório de trabalho)input-messages(mensagens do usuário que deram origem ao turno)last-assistant-message(texto da última mensagem do assistente)
Salve o script no disco e indique seu caminho em notify.
Diferenças entre notify e tui.notifications
notifyexecuta um programa externo (útil para webhooks, notificadores de desktop e hooks de CI).tui.notificationsé um recurso integrado à TUI que permite filtrar as notificações por tipo de evento (por exemplo,agent-turn-completeeapproval-requested).tui.notification_methodcontrola como a TUI emite notificações no terminal (auto,osc9oubel).tui.notification_conditiondetermina se as notificações da TUI são emitidas apenas quando o terminal está sem foco (unfocused) ou sempre (always).
No modo auto, o Codex dá preferência às notificações OSC 9 (uma sequência de escape que alguns terminais interpretam como notificação de desktop) e usa BEL (\x07) como alternativa.
Consulte a Referência de configuração para ver as chaves exatas.
Persistência do histórico
Por padrão, o Codex salva as transcrições das sessões locais em CODEX_HOME (por exemplo, ~/.codex/history.jsonl). Para desativar a persistência do histórico local:
[history]
persistence = "none"
Para limitar o tamanho do arquivo de histórico, defina history.max_bytes. Quando o arquivo ultrapassa o limite, o Codex descarta as entradas mais antigas e compacta o arquivo, preservando os registros mais recentes.
[history]
max_bytes = 104857600 # 100 MiB
Citações clicáveis
Se a integração entre o terminal e o editor oferecer suporte ao recurso, o Codex poderá exibir citações de arquivos como links clicáveis. Configure file_opener para escolher o esquema de URI usado pelo Codex:
file_opener = "vscode" # or cursor, windsurf, vscode-insiders, none
Por exemplo, uma citação como /home/user/project/main.py:42 pode ser convertida em um link clicável como vscode://file/...:42.
Como o Codex localiza as instruções do projeto
O Codex lê AGENTS.md e os arquivos relacionados e inclui uma quantidade limitada de instruções do projeto no primeiro turno de cada sessão. Duas configurações controlam esse comportamento:
project_doc_max_bytes: quantidade de dados a ler de cada arquivoAGENTS.mdproject_doc_fallback_filenames: outros nomes de arquivo a procurar quando não houverAGENTS.mdem determinado nível da hierarquia de diretórios
Para ver as instruções detalhadas, consulte Instruções personalizadas com AGENTS.md.
Desktop
As opções desta seção se aplicam apenas ao aplicativo ChatGPT para desktop.
Adicionar manipuladores de arquivos personalizados
No arquivo de configuração do usuário ~/.codex/config.toml, adicione entradas em desktop.custom_file_handlers para abrir arquivos em editores ou inicializadores internos que o aplicativo ChatGPT para desktop não aceita por padrão. Cada entrada adiciona uma opção de editor aos menus Abrir em do aplicativo. O aplicativo exibe a opção quando command é um caminho absoluto existente ou quando o comando pode ser localizado pelo PATH do aplicativo.
O exemplo a seguir mostra três maneiras de passar um arquivo a um manipulador:
# Append the opened path directly after the command.
[desktop.custom_file_handlers.vscodium]
label = "VSCodium"
icon = "/Users/you/.codex/icons/vscodium.png"
command = "codium"
# Place fixed arguments before the opened path.
[desktop.custom_file_handlers.textedit]
label = "TextEdit"
icon = "/Users/you/.codex/icons/textedit.png"
command = "/usr/bin/open"
args = ["-a", "TextEdit"]
# Append one JSON argument with the path and editor context.
[desktop.custom_file_handlers.company_editor]
label = "Company Editor"
icon = "/opt/company/editor/icon.png"
command = "/opt/company/bin/editor"
input = "json_argument"
Salve config.toml e reinicie o aplicativo ChatGPT para desktop.
O ID do manipulador é o último segmento do cabeçalho da tabela TOML. Ele deve ter de 1 a 64 caracteres e começar com uma letra ou um número ASCII. Os demais caracteres podem ser apenas letras ou números ASCII, pontos, sublinhados ou hífens. O aplicativo disponibiliza o ID com o prefixo custom:. Por exemplo, company_editor se torna custom:company_editor. Coloque entre aspas os IDs que contêm ponto para que o TOML não os interprete como tabelas aninhadas. Por exemplo:
[desktop.custom_file_handlers."company.editor"]
label = "Company Editor"
icon = "/opt/company/editor/icon.png"
command = "/opt/company/bin/editor"
Cada manipulador aceita os seguintes campos:
| Campo | Obrigatório | Descrição |
|---|---|---|
label |
Sim | Nome exibido no aplicativo. |
icon |
Sim | Ícone incluído no aplicativo, como apps/vscode.png, URL data:image/... em base64, URI file: ou caminho local absoluto de uma imagem. Se a origem não for compatível, o aplicativo usará o ícone padrão do VS Code. |
command |
Sim | Caminho do executável ou nome do comando que o aplicativo deve localizar e executar. |
args |
Não | Lista de strings inserida entre command e a entrada do arquivo. O padrão é []. |
input |
Não | Como o aplicativo envia a entrada do arquivo: path, json_argument ou json_stdin. O padrão é path. |
supports_ssh |
Não | Indica se o manipulador deve estar disponível para arquivos em espaços de trabalho SSH. O padrão é false. Use json_stdin quando o manipulador precisar de detalhes sobre o host remoto e o caminho. |
O valor de input determina o que vem depois de args:
pathacrescenta o caminho como último argumento do comando.json_argumentacrescenta um objeto JSON comtarget,path,appPathelocation. O valor delocationé um objeto comlineecolumnnumerados a partir de 1, ounull.json_stdinescreve o objeto JSON na entrada padrão em vez de acrescentar um argumento. O objeto também incluihostConfig,remoteWorkspaceRooteremotePath. Esses campos têm o valornullquando não se aplicam.
Por exemplo, company_editor pode receber este argumento quando o usuário abre um ponto específico do código-fonte:
{
"target": "custom:company_editor",
"path": "/repo/src/index.ts",
"appPath": null,
"location": { "line": 12, "column": 3 }
}
Quando você seleciona um manipulador personalizado como editor preferido, o aplicativo salva a escolha da mesma forma que para um editor integrado, inclusive nas preferências específicas de cada projeto.
Opções da TUI
Executar codex sem um subcomando abre a interface interativa do terminal (TUI). O Codex disponibiliza configurações específicas da TUI em [tui], incluindo:
tui.notifications: habilitar ou desabilitar notificações (ou restringi-las a tipos específicos)tui.notification_method: escolherauto,osc9oubelpara as notificações do terminaltui.notification_condition: escolherunfocusedoualwayspara definir quando emitir notificaçõestui.animations: habilitar ou desabilitar animações ASCII e efeitos de brilhotui.alternate_screen: controlar o uso da tela alternativa (defina comoneverpara preservar o histórico de rolagem do terminal)tui.show_tooltips: mostrar ou ocultar as dicas de introdução na tela de boas-vindas
O valor padrão de tui.notification_method é auto. No modo auto, o Codex dá preferência às notificações OSC 9 (uma sequência de escape que alguns terminais interpretam como notificação de desktop) quando o terminal parece oferecer suporte a elas. Caso contrário, usa BEL (\x07).
Consulte a Referência de configuração para ver a lista completa de chaves.