Use estas opções quando precisar de mais controle sobre provedores, políticas e integrações. Para começar rapidamente, consulte Configuração básica.
Para saber mais sobre orientações de projeto, capacidades reutilizáveis, comandos de barra personalizados, fluxos de trabalho de subagentes e integrações, consulte Personalização. Para ver as chaves de configuração, consulte Referência de configuração.
Perfis
Os perfis permitem salvar camadas de configuração nomeadas e alternar entre elas pela
CLI. Ao passar --profile profile-name, o Codex carrega
~/.codex/config.toml e, em seguida, aplica ~/.codex/profile-name.config.toml sobre essa configuração.
Os nomes dos perfis podem conter letras, números, hífens e sublinhados.
Crie um arquivo TOML separado para cada perfil. Use chaves de configuração de nível superior no
arquivo do perfil; não as aninhe em [profiles.profile-name].
# ~/.codex/deep-review.config.toml
model = "gpt-5.5"
model_reasoning_effort = "xhigh"
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"
Como o arquivo de perfil fica em uma camada acima da configuração base do usuário e abaixo da
configuração do projeto e da CLI, ele só precisa conter os valores que diferem da
configuração base. Os arquivos de perfil também podem substituir model_catalog_json; quando ambos os arquivos definem essa chave, o Codex usa o
valor do perfil.
A partir do Codex 0.134.0, --profile não lê mais [profiles.profile-name]
de config.toml, e o seletor de nível superior profile = "profile-name" não
tem mais suporte. Mova as configurações legadas de perfil para
~/.codex/profile-name.config.toml; depois, remova a tabela correspondente
[profiles.profile-name] e o seletor profile = "profile-name" de
config.toml.
Substituições pontuais pela CLI
Além de editar ~/.codex/config.toml, você pode substituir configurações para uma única execução pela CLI:
- Prefira flags específicas quando estiverem disponíveis (por exemplo,
--model). - Use
-c/--configquando precisar substituir uma chave qualquer.
Exemplos:
# Dedicated flag
codex --model gpt-5.6-terra
# Generic key/value override (value is TOML, not JSON)
codex --config model='"gpt-5.6-terra"'
codex --config sandbox_workspace_write.network_access=true
codex --config 'shell_environment_policy.include_only=["PATH","HOME"]'
Observações:
- As chaves podem usar a notação de ponto para definir valores aninhados (por exemplo,
mcp_servers.context7.enabled=false). - Os valores de
--configsão analisados como TOML. Em caso de dúvida, coloque o valor entre aspas para que o shell não o divida nos espaços. - Se o valor não puder ser analisado como TOML, o Codex o trata como uma string.
Locais de configuração e estado
O Codex armazena seu estado local em CODEX_HOME (o padrão é ~/.codex).
Arquivos comuns que você pode encontrar nesse local:
config.toml(sua configuração local)auth.json(se você usar armazenamento de credenciais em arquivo) ou o chaveiro do sistema operacionalhistory.jsonl(se a persistência do histórico estiver ativada)- Outros dados de estado específicos do usuário, como logs e caches
Para ver detalhes da autenticação (incluindo os modos de armazenamento de credenciais), consulte Autenticação. Para ver a lista completa das chaves de configuração, consulte Referência de configuração.
Para saber mais sobre valores padrão, regras e habilidades compartilhados mantidos 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 ativada, defina openai_base_url em config.toml em vez de definir um novo provedor. Isso altera a URL base do provedor integrado openai sem exigir uma entrada model_providers.<id> separada.
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ê substituições no escopo do projeto em arquivos .codex/config.toml dentro do repositório. O Codex percorre os diretórios desde a raiz do projeto até o diretório de trabalho atual e carrega cada .codex/config.toml que encontrar. Se vários arquivos definirem a mesma chave, prevalece o arquivo mais próximo do diretório de trabalho.
Por segurança, o Codex só carrega arquivos de configuração no escopo do projeto quando o projeto é confiável. Se o projeto não for confiável, o Codex ignora as camadas .codex/ do projeto, incluindo .codex/config.toml, ganchos locais do projeto e regras locais do projeto. As camadas do usuário e do sistema permanecem separadas e continuam sendo carregadas.
Os caminhos relativos em uma configuração de projeto (por exemplo, model_instructions_file) são resolvidos em relação à pasta .codex/ que contém o arquivo config.toml.
Os arquivos de configuração do projeto não podem substituir configurações que redirecionem credenciais, alterem
metadados de solicitações do aplicativo controlados pelo host, mudem a autenticação do provedor, selecionem perfis de configuração
ou executem, na máquina local, comandos de notificação ou telemetria. O Codex ignora as
seguintes chaves no arquivo local do projeto .codex/config.toml 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
~/.codex/config.toml do usuário; selecione perfis de configuração com --profile profile-name
e ~/.codex/profile-name.config.toml.
Ganchos
O Codex também pode carregar ganchos de ciclo de vida de arquivos hooks.json ou de tabelas
[hooks] incluídas em arquivos config.toml localizados 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 ganchos locais do projeto só são carregados quando a camada .codex/ do projeto é considerada confiável.
Os ganchos no nível do usuário não dependem da confiabilidade do projeto.
Os ganchos definidos no próprio arquivo 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 uma camada contiver tanto hooks.json quanto uma tabela [hooks] incorporada, o Codex carregará
ambos e emitirá um aviso. Prefira uma única representação por camada.
Para ver a lista atual de eventos, os campos de entrada, o comportamento da saída e as limitações, consulte Ganchos.
Funções de agentes ([agents] em config.toml)
Para configurar funções de subagentes ([agents] em config.toml), consulte Subagentes.
Detecção da raiz do projeto
O Codex encontra a configuração do projeto (por exemplo, camadas .codex/ e AGENTS.md) subindo na hierarquia a partir do diretório de trabalho até chegar à raiz de um projeto.
Por padrão, o Codex considera um diretório que contém .git como a raiz do projeto. 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 não pesquisar os diretórios superiores e considerar o diretório de trabalho atual como a raiz do projeto.
Provedores de modelos personalizados
Um provedor de modelos define como o Codex se conecta a um modelo (URL base, API de comunicação, autenticação e cabeçalhos HTTP opcionais). Os provedores personalizados não podem reutilizar os IDs reservados dos provedores integrados: openai, ollama e lmstudio.
Defina provedores adicionais e configure model_provider para apontar para eles:
model = "gpt-5.6-terra"
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 de pesquisa na Web independente, declare essa capacidade 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
Essa configuração usa false por padrão em provedores personalizados. A pesquisa na Web independente está
em desenvolvimento e desativada por padrão. Definir essa capacidade do provedor como true
não ativa a pesquisa: o provedor precisa oferecer suporte a um endpoint compatível,
e o modelo e o ambiente de execução selecionados precisam oferecer suporte à pesquisa independente. O
modo web_search configurado e as
restrições de pesquisa gerenciadas continuam em vigor.
Adicione cabeçalhos de solicitação quando necessário:
[model_providers.example]
http_headers = { "X-Example-Header" = "example-value" }
env_http_headers = { "X-Example-Features" = "EXAMPLE_FEATURES" }
Use autenticação baseada em comando quando um provedor precisar que o Codex obtenha tokens bearer de um auxiliar 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 nenhuma entrada por stdin e deve imprimir o token em stdout. O Codex remove os espaços em branco no início e no fim, trata um token vazio como erro e o renova de forma proativa no intervalo definido por refresh_interval_ms; defina refresh_interval_ms = 0 para renová-lo 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
O Codex inclui um provedor de modelos amazon-bedrock integrado. Defina-o diretamente como valor de
model_provider; ao contrário dos provedores personalizados, esse provedor integrado oferece suporte apenas
às substituições aninhadas de perfil e região da AWS.
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 usa a cadeia de credenciais padrão da AWS. Defina
region como a região compatível do Bedrock que deve processar as solicitações.
Para ver o fluxo completo 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.
Modo OSS (provedores locais)
O Codex pode ser executado com um provedor local de "código aberto", como Ollama ou LM
Studio, quando você passa --oss. Escolha um para uma única execução com
--local-provider ou defina oss_provider como padrão. Se nenhuma dessas opções estiver definida, a
CLI interativa solicita que você escolha um; o comando codex exec termina com erro.
# Default local provider used with `--oss`
oss_provider = "ollama" # or "lmstudio"
Provedor do Azure e ajustes específicos 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 ativada, é possível criar um provedor de modelos para atualizar base_url com o prefixo correto. Para workspaces do ChatGPT com residência de dados, não é necessário um provedor personalizado; o Codex respeita as configurações de residência do workspace quando você entra com o ChatGPT.
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 do modelo, nível de detalhamento e limites
model_reasoning_summary = "none" # Disable summaries
model_verbosity = "low" # Shorten responses
model_supports_reasoning_summaries = true # Force reasoning
model_context_window = 128000 # Context window size
model_verbosity se aplica apenas aos provedores que usam a Responses API. Os provedores de Chat Completions ignoram essa configuração.
Políticas de aprovação e modos de sandbox
Escolha o grau de rigor das aprovações (afeta quando o Codex faz uma pausa) e o nível do sandbox (afeta o acesso a arquivos e à rede).
Para conhecer os detalhes operacionais a considerar ao editar config.toml, consulte Combinações comuns de sandbox e aprovação, Caminhos protegidos em diretórios raiz com permissão de escrita e Acesso à rede.
O Codex e o ChatGPT Work não oferecem mais suporte a approval_policy = "untrusted". Consulte
Migre da política de aprovação descontinuada untrusted
para conhecer as configurações compatíveis e as aprovações mais rigorosas derivadas do projeto.
Para saber mais sobre os perfis de permissões em beta que configuram o acesso ao sistema de arquivos e à rede em conjunto, consulte Permissões.
Você também pode usar uma política de aprovação granular (approval_policy = { granular = { ... } }) para permitir ou rejeitar automaticamente categorias individuais de solicitações. Isso é útil quando você quer aprovações interativas normais em alguns casos, mas quer que outros, como solicitações de request_permissions ou de scripts de habilidades, sejam bloqueados automaticamente por segurança.
Defina approvals_reviewer = "auto_review" para encaminhar solicitações interativas de aprovação
elegíveis para revisão automática. Isso altera quem faz a revisão, sem alterar os limites
do sandbox.
Use [auto_review].policy para instruções locais da política do revisor. A configuração gerenciada
guardian_policy_config tem precedência.
approval_policy = "on-request" # Other options: never or { granular = { ... } }
approvals_reviewer = "user" # Or "auto_review" for automatic 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
[auto_review]
policy = """
Use your organization's automatic review policy.
"""
Perfis de permissões nomeados
Para saber mais sobre 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 de requisitos, consulte Referência de configuração e Configuração gerenciada.
No modo workspace-write, alguns ambientes mantêm .git/ e .codex/
como somente leitura, mesmo quando o restante do workspace permite escrita. Por isso,
comandos como git commit ainda podem exigir aprovação para serem executados fora do
sandbox. Se você quiser que o Codex deixe de executar comandos específicos (por exemplo, bloquear git
commit fora do sandbox), use
regras.
Desative completamente o ambiente isolado (use apenas se o seu ambiente já isolar processos):
sandbox_mode = "danger-full-access"
Política de ambiente do shell
shell_environment_policy controla quais variáveis do ambiente o Codex passa para
os comandos iniciados. Comece com um ambiente vazio usando inherit = "none", ou
herde um conjunto reduzido usando inherit = "core". Adicione valores explícitos e filtros
por chave para evitar passar segredos desnecessários aos comandos iniciados.
[shell_environment_policy]
inherit = "core"
set = { MY_FLAG = "1" }
ignore_default_excludes = false
[shell_environment_policy.filters]
"AWS_*" = "exclude"
"AZURE_*" = "exclude"
Os padrões de filtro não diferenciam maiúsculas de minúsculas e aceitam * e ?. Use "exclude"
para remover as variáveis correspondentes. Quando algum padrão usa "include", o Codex mantém
apenas as variáveis que correspondem a um padrão de inclusão. As inclusões não restauram variáveis
que já foram excluídas. As chaves de filtro são mescladas entre as camadas de configuração
sem diferenciar maiúsculas de minúsculas.
O valor padrão de ignore_default_excludes é true, portanto o Codex não remove automaticamente
variáveis cujos nomes contêm KEY, SECRET ou TOKEN. Defina-o como false
para aplicar essas exclusões automáticas antes da execução dos seus filtros explícitos.
O Codex aplica primeiro as exclusões automáticas, depois as exclusões personalizadas, os valores de
set e, por fim, a lista de permissões baseada em padrões de inclusão. Como set é executado após
as exclusões, ele pode restaurar uma variável excluída. Uma lista de permissões baseada em padrões de inclusão
ainda pode remover esse valor restaurado.
Os arrays antigos exclude e include_only continuam sendo aceitos nas configurações
existentes. Não combine nenhum desses arrays com
[shell_environment_policy.filters] na mesma camada de configuração; o Codex
rejeita essa combinação.
Servidores MCP
Consulte a documentação específica do MCP para ver os detalhes de configuração.
Observabilidade e telemetria
Ative a exportação de logs do OpenTelemetry (OTel) para acompanhar as execuções do Codex (requisições de API, SSE/eventos, prompts, aprovações/resultados de ferramentas). A exportação vem desativada por padrão; ative-a por meio de [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
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" }
}}
Se exporter = "none", o Codex registra os eventos, mas não envia nada. Os exportadores agrupam os eventos em lotes de forma assíncrona e enviam os dados pendentes no encerramento. Os metadados dos eventos incluem nome do serviço, versão da CLI, tag do ambiente, ID da conversa, modelo, configurações de sandbox/aprovação e campos específicos de cada evento (consulte Referência de configuração).
O que é emitido
O Codex emite eventos de log estruturados para execuções e uso de ferramentas. Alguns exemplos de tipos de eventos são:
codex.conversation_starts(modelo, configurações de raciocínio, política de sandbox/aprovação)codex.api_request(tentativa, status/sucesso, duração e detalhes do erro)codex.sse_event(tipo de evento do fluxo, sucesso/falha, duração e contagens de tokens emresponse.completed)codex.websocket_requestecodex.websocket_event(duração da requisição e tipo/sucesso/erro de cada mensagem)codex.user_prompt(comprimento; conteúdo ocultado, a menos que seu registro seja explicitamente ativado)codex.tool_decision(aprovado/negado e se a decisão veio da configuração ou do usuário)codex.tool_result(duração, sucesso, trecho da saída)
Métricas OTel emitidas
Quando o pipeline de métricas OTel está ativado, o Codex emite contadores e histogramas de duração para atividades de API, fluxos e ferramentas.
Cada métrica abaixo também inclui as tags 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 | Contagem de requisições de API por status HTTP e sucesso/falha. |
codex.api_request.duration_ms | histograma | status, success | Duração das requisições de API em milissegundos. |
codex.sse_event | contador | kind, success | Contagem de eventos SSE por tipo de evento e sucesso/falha. |
codex.sse_event.duration_ms | histograma | kind, success | Duração do processamento de eventos SSE em milissegundos. |
codex.websocket.request | contador | success | Contagem de requisições WebSocket por sucesso/falha. |
codex.websocket.request.duration_ms | histograma | success | Duração das requisições WebSocket em milissegundos. |
codex.websocket.event | contador | kind, success | Contagem de mensagens/eventos WebSocket por tipo e sucesso/falha. |
codex.websocket.event.duration_ms | histograma | kind, success | Duração do processamento de mensagens/eventos WebSocket em milissegundos. |
codex.tool.call | contador | tool, success | Contagem de chamadas de ferramentas por nome da ferramenta e sucesso/falha. |
codex.tool.call.duration_ms | histograma | tool, success | Duração da execução de ferramentas em milissegundos por nome da ferramenta e resultado. |
Para mais orientações de segurança e privacidade sobre telemetria, consulte Segurança.
Métricas
Por padrão, o Codex envia periodicamente uma pequena quantidade de dados anônimos de uso e integridade à OpenAI. Isso ajuda a detectar quando o Codex não está funcionando corretamente e mostra quais recursos e opções de configuração estão sendo usados, para que a equipe do Codex possa se concentrar no que mais importa. Essas métricas não contêm informações de identificação pessoal (PII). A coleta de métricas é independente da exportação de logs/rastreamentos do OTel.
Se quiser desativar completamente a coleta de métricas no aplicativo do ChatGPT para desktop, na Codex CLI e na extensão para IDE em uma máquina, defina a opção de análise de uso na sua configuração:
[analytics]
enabled = false
Cada métrica inclui seus próprios campos, além dos campos de contexto padrão abaixo.
Campos de contexto padrão (aplicáveis a 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, além dos campos de contexto padrão acima. Os nomes das métricas abaixo omitem o prefixo codex..
A maioria dos nomes de métricas está centralizada em codex-rs/otel/src/metrics/names.rs; as métricas específicas de recursos emitidas fora desse arquivo também estão incluídas aqui.
Se uma métrica incluir o campo tool, ele indica a ferramenta interna usada (por exemplo, apply_patch ou shell) e não contém o comando de shell ou patch que o codex está tentando aplicar.
Ambiente de execução e transporte do modelo
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
api_request | contador | status, success | Contagem de requisições à API por status HTTP e sucesso/falha. |
api_request.duration_ms | histograma | status, success | Duração das requisições à API em milissegundos. |
sse_event | contador | kind, success | Contagem de eventos SSE por tipo de evento e sucesso/falha. |
sse_event.duration_ms | histograma | kind, success | Duração do processamento de eventos SSE em milissegundos. |
websocket.request | contador | success | Contagem de requisições WebSocket por sucesso/falha. |
websocket.request.duration_ms | histograma | success | Duração das requisições WebSocket em milissegundos. |
websocket.event | contador | kind, success | Contagem de mensagens/eventos WebSocket por tipo e sucesso/falha. |
websocket.event.duration_ms | histograma | kind, success | Duração do processamento de mensagens/eventos WebSocket em milissegundos. |
responses_api_overhead.duration_ms | histograma | Tempo de sobrecarga da API Responses obtido das respostas WebSocket. | |
responses_api_inference_time.duration_ms | histograma | Tempo de inferência da API Responses obtido das 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 | Intervalo entre tokens na IAPI do mecanismo da API Responses. | |
responses_api_engine_service_tbt.duration_ms | histograma | Intervalo entre tokens no serviço do mecanismo da API Responses. | |
transport.fallback_to_http | contador | from_wire_api | Contagem de vezes em que HTTP foi usado como alternativa ao WebSocket. |
remote_models.fetch_update.duration_ms | histograma | Tempo para buscar definições remotas de modelos. | |
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 quando o primeiro turno real o resolve. |
cloud_requirements.fetch.duration_ms | histograma | Duração da busca dos requisitos na nuvem gerenciados pelo workspace. | |
cloud_requirements.fetch_attempt | contador | Veja a observação | Tentativas de busca dos requisitos na nuvem gerenciados pelo workspace. |
cloud_requirements.fetch_final | contador | Veja a observação | Resultado final da busca dos requisitos na nuvem gerenciados pelo workspace. |
cloud_requirements.load | contador | trigger, outcome | Resultado do carregamento dos requisitos na nuvem gerenciados pelo workspace. |
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 de turnos e ferramentas
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
turn.e2e_duration_ms | histograma | Tempo do início ao fim de um turno completo. | |
turn.ttft.duration_ms | histograma | Tempo até o primeiro token de um turno. | |
turn.ttfm.duration_ms | histograma | Tempo até o primeiro item de saída do modelo em um turno. | |
turn.network_proxy | contador | active, tmp_mem_enabled | Indica se o proxy de rede gerenciado estava ativo durante o turno. |
turn.memory | contador | read_allowed, feature_enabled, config_use_memories, has_citations | Disponibilidade de leitura de memórias e uso de citações de memórias 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, agrupado por tipo de token (total, input, cached_input, output ou reasoning_output). |
tool.call | contador | tool, success | Contagem de chamadas de ferramentas por nome da ferramenta e sucesso/falha. |
tool.call.duration_ms | histograma | tool, success | Duração da execução de ferramentas em milissegundos, por nome da ferramenta e resultado. |
tool.unified_exec | contador | tty | Chamadas da ferramenta exec unificada por modo TTY. |
approval.requested | contador | tool, approved | Resultado da solicitação de aprovação de ferramenta (approved, approved_with_amendment, approved_for_session, denied, abort). |
mcp.call | contador | Veja a observação | Resultado da chamada de ferramenta MCP. |
mcp.call.duration_ms | histograma | Veja a observação | Duração da chamada de ferramenta MCP. |
mcp.tools.list.duration_ms | histograma | cache | Duração da listagem de ferramentas MCP, incluindo o estado de acerto/erro de cache. |
mcp.tools.fetch_uncached.duration_ms | histograma | Duração das buscas de ferramentas MCP não 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 | Contagem de execuções de hooks por nome do hook, 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; os eventos emitidos em chamadas normais de ferramentas também incluem tool, além de connector_id e connector_name quando disponíveis. Chamadas MCP bloqueadas dos 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 de recursos que diferem dos padrões (uma linha é emitida 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 uma marcação que indica se o diretório de trabalho está em um repositório Git. |
conversation.turn.count | contador | Turnos do usuário e do assistente por conversa, registrados ao final da conversa. | |
thread.fork | contador | source | Nova conversa criada a partir de um 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 manuais e automáticas. |
task.review | contador | Número de revisões acionadas. | |
task.undo | contador | Número de ações de desfazer acionadas. | |
task.user_shell | contador | Número de ações do usuário no shell (! na TUI, por exemplo). | |
shell_snapshot | contador | Veja a observação | Indica se a captura do estado do shell foi bem-sucedida. |
shell_snapshot.duration_ms | histograma | success | Tempo para capturar o estado do shell. |
skill.injected | contador | status, skill | Resultados da injeção de habilidades, por habilidade. |
plugins.startup_sync | contador | transport, status | Tentativas de sincronização dos plug-ins selecionados por curadoria durante a inicialização. |
plugins.startup_sync.final | contador | transport, status | Resultado final da sincronização dos plug-ins selecionados por curadoria durante a 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 de 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 | Contagem 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 | Contagem 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 | Contagem de entradas da 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 de memória por tipo, ferramenta e sucesso/falha. |
external_agent_config.detect | contador | Veja a observação | Detecções de configurações de agentes externos por tipo de item de migração. |
external_agent_config.import | contador | Veja a observação | Importações de configurações de agentes externos por tipo de item de migração. |
db.backfill | contador | status | Resultados da carga retroativa inicial do banco de dados de estado (upserted, failed). |
db.backfill.duration_ms | histograma | status | Duração da carga retroativa inicial do banco de dados de estado. |
db.error | contador | stage | Erros durante operações no 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 do Sandbox do Windows concluídas com sucesso. |
windows_sandbox.setup_failure | contador | originator, mode | Falhas na configuração do Sandbox do Windows. |
windows_sandbox.setup_duration_ms | histograma | result, originator, mode | Duração da configuração do Sandbox do Windows. |
windows_sandbox.elevated_setup_success | contador | Configurações do Sandbox do Windows com privilégios elevados concluídas com sucesso. | |
windows_sandbox.elevated_setup_failure | contador | Veja a observação | Falhas na configuração do Sandbox do Windows com privilégios elevados. |
windows_sandbox.elevated_setup_canceled | contador | Veja a observação | Tentativas canceladas de configuração do Sandbox do Windows com privilégios elevados. |
windows_sandbox.elevated_setup_duration_ms | histograma | result | Duração da configuração do Sandbox do Windows com privilégios elevados. |
windows_sandbox.elevated_prompt_shown | contador | Prompt de configuração do sandbox com privilégios elevados exibido. | |
windows_sandbox.elevated_prompt_accept | contador | Prompt de configuração do sandbox com privilégios elevados aceito. | |
windows_sandbox.elevated_prompt_use_legacy | contador | O usuário escolheu o sandbox legado no prompt 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 | Solicitação de sandbox alternativo exibida. | |
windows_sandbox.fallback_retry_elevated | contador | O usuário tentou novamente a configuração com privilégios elevados pela solicitação alternativa. | |
windows_sandbox.fallback_use_legacy | contador | O usuário escolheu o sandbox legado pela solicitação alternativa. | |
windows_sandbox.fallback_prompt_quit | contador | O usuário saiu pela solicitação alternativa. | |
windows_sandbox.legacy_setup_preflight_failed | contador | Veja a observação | Falha na verificação prévia da configuração do sandbox legado do Windows. |
windows_sandbox.setup_elevated_sandbox_command | contador | Comando de configuração do sandbox com privilégios elevados invocado. | |
windows_sandbox.createprocessasuserw_failed | contador | error_code, path_kind, exe, level | Falhas de CreateProcessAsUserW no Windows. |
As métricas de falha na configuração com privilégios elevados incluem code e message quando há detalhes disponíveis sobre a falha de configuração do Windows, e 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 prévia da solicitação alternativa podem não incluir nenhum campo.
Controles de feedback
Por padrão, os clientes locais permitem que os usuários enviem feedback por meio de /feedback. Para desativar a coleta de feedback no aplicativo do ChatGPT para desktop, na Codex CLI e na extensão para IDE em uma máquina, atualize sua 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
Se quiser reduzir o ruído causado pela saída de "raciocínio" (por exemplo, nos logs de CI), você pode suprimi-la:
hide_agent_reasoning = true
Se quiser exibir o conteúdo bruto de raciocínio quando um modelo o emitir:
show_raw_agent_reasoning = true
Ative o raciocínio bruto somente se isso for aceitável para seu fluxo de trabalho. Alguns modelos/provedores (como gpt-oss) não emitem raciocínio bruto; nesse caso, essa configuração não tem efeito visível.
Notificações
Use notify para acionar um programa externo sempre que o Codex emitir eventos compatíveis (atualmente, apenas agent-turn-complete). Isso é útil para notificações pop-up na área de trabalho, webhooks de chat, atualizações de CI ou quaisquer alertas por canais externos que as notificações integradas da TUI não cubram.
notify = ["python3", "/path/to/notify.py"]
Exemplo de notify.py (truncado) que reage a agent-turn-complete:
#!/usr/bin/env python3
import json, subprocess, sys
def main() -> int:
notification = json.loads(sys.argv[1])
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. Os campos comuns incluem:
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 em algum local do disco e configure notify para apontar para ele.
notify versus tui.notifications
notifyexecuta um programa externo (útil para webhooks, notificadores da área de trabalho e ganchos de CI).tui.notificationsé integrado à TUI e pode, opcionalmente, filtrar 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_conditioncontrola se as notificações da TUI são disparadas 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 de terminal que alguns terminais interpretam como uma notificação da área de trabalho) e, caso contrário, 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 remove as entradas mais antigas e compacta o arquivo, preservando os registros mais recentes.
[history]
max_bytes = 104857600 # 100 MiB
Citações clicáveis
Se você usa uma integração de terminal/editor compatível com esse recurso, o Codex pode exibir citações de arquivos como links clicáveis. Configure file_opener para escolher o esquema de URI que o Codex usa:
file_opener = "vscode" # or cursor, windsurf, vscode-insiders, none
Exemplo: uma citação como /home/user/project/main.py:42 pode ser reescrita como um link clicável vscode://file/...:42.
Detecção de instruções do projeto
O Codex lê AGENTS.md (e arquivos relacionados) e inclui uma quantidade limitada de orientações do projeto no primeiro turno de uma sessão. Duas configurações controlam esse comportamento:
project_doc_max_bytes: quanto conteúdo ler de cada arquivoAGENTS.mdproject_doc_fallback_filenames: nomes de arquivos adicionais a procurar quandoAGENTS.mdnão existe em um nível de diretório
Para um passo a passo detalhado, consulte Instruções personalizadas com AGENTS.md.
Desktop
As opções desta seção se aplicam apenas ao aplicativo do ChatGPT para desktop.
Adicionar manipuladores de arquivos personalizados
No arquivo ~/.codex/config.toml do seu usuário, adicione entradas em
desktop.custom_file_handlers para abrir arquivos em editores ou inicializadores internos
que o aplicativo do ChatGPT para desktop não suporta por padrão. Cada entrada adiciona uma
opção de editor aos menus Abrir em do aplicativo. O aplicativo lista essa opção quando
command é um caminho absoluto existente ou pode ser encontrado no PATH do aplicativo.
O exemplo a seguir mostra três maneiras de passar um arquivo para 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 do ChatGPT para desktop.
O ID do manipulador é o último segmento do cabeçalho da tabela TOML. Ele deve conter
de 1 a 64 caracteres, começar com uma letra ou um número ASCII e conter, nas demais posições,
apenas letras ASCII, números, pontos, sublinhados ou hifens. O aplicativo expõe
o ID com o prefixo custom:; por exemplo, company_editor se torna
custom:company_editor. Coloque entre aspas um ID que contenha um ponto para que o TOML não
o interprete como uma tabela aninhada. 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 estes 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 absoluto de uma imagem local. Uma origem sem suporte usa o ícone padrão do VS Code. |
command | Sim | Caminho do executável ou nome do comando a detectar e iniciar. |
args | Não | Array de strings inserido 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 | Define se o manipulador será oferecido para arquivos em workspaces SSH. O padrão é false. Use json_stdin quando o manipulador precisar de detalhes do host remoto e do caminho. |
O valor de input controla 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 com valores delineecolumncontados a partir de 1, ounull.json_stdingrava o objeto JSON na entrada padrão em vez de adicionar um argumento. 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 uma
posição específica no código-fonte:
{
"target": "custom:company_editor",
"path": "/repo/src/index.ts",
"appPath": null,
"location": { "line": 12, "column": 3 }
}
Selecionar um manipulador personalizado como editor preferido salva a escolha da mesma forma que selecionar um editor integrado, inclusive nas preferências por projeto.
Opções da TUI
Executar codex sem subcomando inicia a interface interativa de terminal (TUI). O Codex disponibiliza algumas configurações específicas da TUI em [tui], incluindo:
tui.notifications: ative/desative as notificações (ou restrinja-as a tipos específicos)tui.notification_method: escolhaauto,osc9oubelpara as notificações do terminaltui.notification_condition: escolhaunfocusedoualwayspara definir quando as notificações são disparadastui.animations: ative/desative animações ASCII e efeitos de brilhotui.alternate_screen: controle o uso da tela alternativa (defina comoneverpara manter o histórico de rolagem do terminal)tui.show_tooltips: mostre ou oculte dicas de primeiros passos na tela de boas-vindas
O 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 de terminal que alguns terminais interpretam como notificação na área de trabalho) 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.