Configuração avançada
Configuração avançada
Opções de configuração mais avançadas para clientes locais do Codex
Utilize estas opções quando precisar de maior controlo sobre fornecedores, políticas e integrações. Para começar rapidamente, consulte Noções básicas de configuração.
Para obter informações de contexto sobre orientações de projeto, capacidades reutilizáveis, comandos de barra personalizados, fluxos de trabalho de subagentes e integrações, consulte Personalização. Para conhecer as chaves de configuração, consulte a Referência de configuração.
Perfis
Os perfis permitem guardar camadas de configuração com nome e alternar entre elas a partir da
CLI. Quando fornece --profile profile-name, o Codex carrega
~/.codex/config.toml e, em seguida, sobrepõe ~/.codex/profile-name.config.toml.
Os nomes dos perfis podem conter letras, números, hífenes e sublinhados.
Crie um ficheiro TOML separado para cada perfil. Utilize chaves de configuração de nível superior no
ficheiro do perfil; não as aninhe em [profiles.profile-name].
# ~/.codex/deep-review.config.toml
model = "gpt-5.6-sol"
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 ficheiro do perfil é uma camada acima da configuração base do utilizador e abaixo da
configuração do projeto e da CLI, só precisa de conter os valores que diferem da configuração
base. Os ficheiros de perfil também podem substituir model_catalog_json; o Codex utiliza o
valor do perfil quando ambos os ficheiros o definem.
No Codex 0.134.0 e posteriores, --profile deixou de ler [profiles.profile-name]
de config.toml, e o seletor de nível superior profile = "profile-name" deixou de ser
suportado. Mova as definições de perfis legadas para
~/.codex/profile-name.config.toml e, em seguida, remova a tabela
[profiles.profile-name] correspondente e o seletor profile = "profile-name" de
config.toml.
Substituições pontuais através da CLI
Além de editar ~/.codex/config.toml, pode substituir a configuração de uma única execução através da CLI:
- Dê preferência a opções dedicadas quando existirem (por exemplo,
--model). - Utilize
-c/--configquando precisar de substituir uma chave arbitrária.
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"]'Notas:
- As chaves podem utilizar 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 a shell não o divida nos espaços. - Se não for possível analisar o valor como TOML, o Codex trata-o como uma cadeia de caracteres.
Localizações da configuração e do estado
O Codex armazena o estado local em CODEX_HOME (a predefinição é ~/.codex).
Ficheiros comuns que poderá encontrar nessa localização:
config.toml(a sua configuração local)auth.json(se utilizar armazenamento de credenciais baseado em ficheiros) ou o porta-chaves do seu sistema operativohistory.jsonl(se a persistência do histórico estiver ativada)- Outro estado por utilizador, como registos e caches
Para obter detalhes sobre autenticação (incluindo modos de armazenamento de credenciais), consulte Autenticação. Para obter a lista completa de chaves de configuração, consulte a Referência de configuração.
Para conhecer as predefinições, regras e competências partilhadas que são integradas nos repositórios ou em caminhos do sistema, consulte Configuração de equipa.
Se apenas precisar de encaminhar o fornecedor OpenAI incorporado para um proxy de LLM, um router ou um projeto com residência de dados ativada, defina openai_base_url em config.toml em vez de definir um novo fornecedor. Isto altera o URL base do fornecedor openai incorporado sem exigir uma entrada model_providers.<id> separada.
openai_base_url = "https://us.api.openai.com/v1"Ficheiros de configuração do projeto (.codex/config.toml)
Além da configuração do utilizador, o Codex lê substituições ao nível do projeto a partir de ficheiros .codex/config.toml no repositório. O Codex percorre o caminho desde a raiz do projeto até ao diretório de trabalho atual e carrega cada .codex/config.toml que encontrar. Se vários ficheiros definirem a mesma chave, prevalece o ficheiro mais próximo do diretório de trabalho.
Por motivos de segurança, o Codex só carrega ficheiros de configuração ao nível do projeto quando este é considerado fidedigno. Se o projeto não for fidedigno, o Codex ignora as camadas .codex/ do projeto, incluindo .codex/config.toml, hooks locais do projeto e regras locais do projeto. As camadas do utilizador e do sistema permanecem separadas e continuam a ser carregadas.
Os caminhos relativos numa configuração de projeto (por exemplo, model_instructions_file) são resolvidos relativamente à pasta .codex/ que contém o config.toml.
Os ficheiros de configuração do projeto não podem substituir definições que redirecionem credenciais, alterem
metadados de pedidos de aplicações controlados pelo anfitrião, alterem a autenticação do fornecedor, selecionem perfis de configuração
ou executem comandos de notificação/telemetria locais da máquina. O Codex ignora as
seguintes chaves em .codex/config.toml local do projeto e apresenta um aviso no arranque
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 do fornecedor, de notificação e de telemetria no ficheiro
~/.codex/config.toml ao nível do utilizador; selecione perfis de configuração com --profile profile-name
e ~/.codex/profile-name.config.toml.
Hooks
O Codex também pode carregar hooks do ciclo de vida a partir de ficheiros hooks.json ou de tabelas
[hooks] inline em ficheiros config.toml situados junto das camadas de configuração ativas.
Na prática, as quatro localizações 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 é considerada fidedigna.
Os hooks ao nível do utilizador permanecem independentes da confiança atribuída ao projeto.
Os hooks TOML inline utilizam a mesma estrutura de eventos que 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 única camada contiver hooks.json e [hooks] inline, o Codex carrega
ambos e apresenta um aviso. Dê preferência a uma única representação por camada.
Para consultar a lista atual de eventos, os campos de entrada, o comportamento da saída e as limitações, consulte Hooks.
Funções dos agentes ([agents] em config.toml)
Para obter informações sobre a configuração das funções dos subagentes ([agents] em config.toml), consulte Subagentes.
Deteção da raiz do projeto
O Codex descobre a configuração do projeto (por exemplo, camadas .codex/ e AGENTS.md) percorrendo os diretórios ascendentes a partir do diretório de trabalho até alcançar a raiz de um projeto.
Por predefinição, o Codex considera um diretório que contenha .git como a raiz do projeto. Para personalizar este 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 ignorar a pesquisa nos diretórios superiores e tratar o diretório de trabalho atual como a raiz do projeto.
Fornecedores de modelos personalizados
Um fornecedor de modelos define a forma como o Codex se liga a um modelo (URL base, API de comunicação, autenticação e cabeçalhos HTTP opcionais). Os fornecedores personalizados não podem reutilizar os IDs reservados dos fornecedores incorporados: openai, ollama e lmstudio.
Defina fornecedores adicionais e direcione model_provider para os mesmos:
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 fornecedor personalizado suportar o endpoint autónomo de pesquisa na Web, declare essa capacidade na respetiva configuração:
[model_providers.proxy]
name = "OpenAI using LLM proxy"
base_url = "https://proxy.example.com/v1"
env_key = "OPENAI_API_KEY"
supports_standalone_web_search = trueA predefinição é false para fornecedores personalizados. A pesquisa autónoma na Web está
em desenvolvimento e desativada por predefinição. Definir a capacidade do fornecedor como true
não a ativa: o fornecedor tem de suportar um endpoint compatível,
e o modelo e o ambiente de execução selecionados têm de suportar a pesquisa autónoma. O
modo web_search configurado e
as restrições de pesquisa geridas continuam a aplicar-se.
Adicione cabeçalhos de pedidos quando necessário:
[model_providers.example]
http_headers = { "X-Example-Header" = "example-value" }
env_http_headers = { "X-Example-Features" = "EXAMPLE_FEATURES" }Utilize autenticação baseada em comandos quando um fornecedor precisar que o Codex obtenha tokens bearer de um auxiliar de credenciais externo:
[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 = 300000O comando de autenticação não recebe stdin e tem de imprimir o token em stdout. O Codex remove os espaços em branco circundantes, trata um token vazio como um erro e atualiza-o proativamente em refresh_interval_ms; defina refresh_interval_ms = 0 para o atualizar apenas 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.
Fornecedor Amazon Bedrock
O Codex inclui um fornecedor de modelos amazon-bedrock incorporado. Defina-o diretamente como
model_provider; ao contrário dos fornecedores personalizados, este fornecedor incorporado suporta apenas
as substituições aninhadas do perfil e da região da AWS.
model_provider = "amazon-bedrock"
model = "<bedrock-model-id>"
[model_providers.amazon-bedrock.aws]
profile = "default"
region = "eu-central-1"Se omitir profile, o Codex utiliza a cadeia de credenciais padrão da AWS. Defina
region para a região Bedrock suportada que deverá processar os pedidos.
Para obter o fluxo de configuração completo, as opções de autenticação, os modelos suportados e a disponibilidade das funcionalidades, consulte Utilizar o ChatGPT Work e o Codex com o Amazon Bedrock.
Modo OSS (fornecedores locais)
O Codex pode ser executado com um fornecedor local de «código aberto», como Ollama ou LM
Studio, quando fornece --oss. Escolha um para uma única execução com
--local-provider ou defina oss_provider como predefinição. Se nenhum estiver definido, a
CLI interativa pede-lhe que escolha; codex exec termina com um erro.
# Default local provider used with `--oss`
oss_provider = "ollama" # or "lmstudio"Fornecedor Azure e ajuste por fornecedor
[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 = 300000Para alterar o URL base do fornecedor OpenAI incorporado, utilize openai_base_url; não crie [model_providers.openai], pois não pode substituir IDs de fornecedores incorporados.
Organizações da API que utilizam residência de dados
Os projetos criados com a residência de dados ativada podem criar um fornecedor de modelos para atualizar o base_url com o prefixo correto. Para espaços de trabalho do ChatGPT com residência de dados, não é necessário um fornecedor personalizado; o Codex respeita as definições de residência do espaço de trabalho quando inicia sessão 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 prefixRaciocínio do modelo, nível de detalhe 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 sizemodel_verbosity aplica-se apenas a fornecedores que utilizem a Responses API. Os fornecedores de Chat Completions ignoram esta definição.
Políticas de aprovação e modos de sandbox
Escolha o grau de rigor da aprovação (que afeta quando o Codex faz uma pausa) e o nível da sandbox (que afeta o acesso a ficheiros e à rede).
Para obter detalhes operacionais a ter em conta ao editar config.toml, consulte Combinações comuns de sandbox e aprovação, Caminhos protegidos em raízes graváveis e Acesso à rede.
O Codex e o ChatGPT Work já não suportam approval_policy = "untrusted". Consulte
Migrar da política de aprovação descontinuada untrusted
para conhecer as definições suportadas e as aprovações mais rigorosas baseadas no projeto.
Para obter informações sobre os perfis de permissões beta que configuram conjuntamente o acesso ao sistema de ficheiros e à rede, consulte Permissões.
Também pode utilizar uma política de aprovação granular (approval_policy = { granular = { ... } }) para permitir ou rejeitar automaticamente categorias individuais de pedidos. Isto é útil quando pretende aprovações interativas normais em alguns casos, mas quer que outros, como request_permissions ou pedidos de scripts de competências, sejam automaticamente recusados de forma segura.
Defina approvals_reviewer = "auto_review" para encaminhar os pedidos de aprovação interativa
elegíveis através da revisão automática. Isto altera o revisor, não o limite da
sandbox.
Utilize [auto_review].policy para instruções locais da política do revisor. A definição gerida
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 com nome
Para obter informações sobre os perfis incorporados, a sintaxe dos perfis personalizados e o modelo completo de configuração do sistema de ficheiros e da rede, consulte Permissões.
Para obter a lista completa de chaves e as restrições dos requisitos, consulte a Referência de configuração e a Configuração gerida.
Desative totalmente a sandbox (utilize apenas se o seu ambiente já isolar os processos):
sandbox_mode = "danger-full-access"Política do ambiente da shell
shell_environment_policy controla as variáveis de ambiente que o Codex transmite aos
comandos iniciados. Comece com um ambiente vazio utilizando inherit = "none" ou
herde um conjunto reduzido utilizando inherit = "core". Adicione valores explícitos e filtros
baseados em chaves para evitar transmitir 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 dos filtros não distinguem maiúsculas de minúsculas e suportam * e ?. Utilize "exclude"
para remover as variáveis correspondentes. Quando um padrão utiliza "include", o Codex mantém
apenas as variáveis que correspondem a um padrão de inclusão. As inclusões não repõem variáveis
que já tenham sido excluídas. As chaves dos filtros são combinadas entre as
camadas de configuração sem distinção entre maiúsculas e minúsculas.
A predefinição de ignore_default_excludes é true, pelo que o Codex não remove automaticamente
nomes de variáveis que contenham KEY, SECRET ou TOKEN. Defina-a como false
para aplicar essas exclusões automáticas antes da execução dos 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 do padrão de inclusão. Como set é executado depois
das exclusões, pode repor uma variável excluída. Uma lista de permissões do padrão de inclusão
pode ainda remover esse valor reposto.
As matrizes exclude e include_only mais antigas continuam a ser suportadas nas configurações
existentes. Não combine nenhuma destas matrizes 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 dedicada para obter detalhes de configuração.
Observabilidade e telemetria
Ative a exportação de registos do OpenTelemetry (OTel) para acompanhar as execuções do Codex (pedidos da API, SSE/eventos, pedidos, aprovações/resultados de ferramentas). Está desativada por predefinição; ative-a através 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 enabledEscolha 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 regista os eventos, mas não envia nada. Os exportadores processam os lotes de forma assíncrona e descarregam-nos no encerramento. Os metadados dos eventos incluem o nome do serviço, a versão da CLI, a etiqueta do ambiente, o ID da conversa, o modelo, as definições de sandbox/aprovação e os campos específicos de cada evento (consulte a Referência de configuração).
Dados emitidos
O Codex emite eventos de registo estruturados relativos às execuções e à utilização de ferramentas. Alguns tipos de eventos representativos incluem:
codex.conversation_starts(modelo, definições de raciocínio, política de sandbox/aprovação)codex.api_request(tentativa, estado/êxito, duração e detalhes do erro)codex.sse_event(tipo de evento do fluxo, êxito/falha, duração e contagens de tokens emresponse.completed)codex.websocket_requestecodex.websocket_event(duração do pedido e tipo/êxito/erro de cada mensagem)codex.user_prompt(comprimento; conteúdo ocultado, exceto se explicitamente ativado)codex.tool_decision(aprovado/recusado e se a decisão teve origem na configuração ou no utilizador)codex.tool_result(duração, êxito, excerto 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 relativos à atividade da API, dos fluxos e das ferramentas.
Cada métrica abaixo também inclui etiquetas de metadados predefinidas: auth_mode, originator, session_source, model e app.version.
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
codex.api_request |
contador | status, success |
Número de pedidos da API por estado HTTP e êxito/falha. |
codex.api_request.duration_ms |
histograma | status, success |
Duração dos pedidos da API em milissegundos. |
codex.sse_event |
contador | kind, success |
Número de eventos SSE por tipo de evento e êxito/falha. |
codex.sse_event.duration_ms |
histograma | kind, success |
Duração do processamento de eventos SSE em milissegundos. |
codex.websocket.request |
contador | success |
Número de pedidos WebSocket por êxito/falha. |
codex.websocket.request.duration_ms |
histograma | success |
Duração dos pedidos WebSocket em milissegundos. |
codex.websocket.event |
contador | kind, success |
Número de mensagens/eventos WebSocket por tipo e êxito/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 |
Número de invocações de ferramentas por nome da ferramenta e êxito/falha. |
codex.tool.call.duration_ms |
histograma | tool, success |
Duração da execução das ferramentas em milissegundos por nome da ferramenta e resultado. |
Para obter mais orientações de segurança e privacidade relativas à telemetria, consulte Segurança.
Métricas
Por predefinição, o Codex envia periodicamente à OpenAI uma pequena quantidade de dados anónimos sobre utilização e estado de funcionamento. Isto ajuda a detetar situações em que o Codex não está a funcionar corretamente e mostra quais as funcionalidades e opções de configuração utilizadas, para que a equipa do Codex se possa concentrar no que é mais importante. Estas métricas não contêm informações de identificação pessoal (PII). A recolha de métricas é independente da exportação de registos/rastreios OTel.
Se pretender desativar totalmente a recolha de métricas na aplicação ChatGPT para computador, na Codex CLI e na extensão IDE de uma máquina, defina o indicador de análise na configuração:
[analytics]
enabled = falseCada métrica inclui os respetivos campos, bem como os campos de contexto predefinidos abaixo.
Campos de contexto predefinidos (aplicáveis a todos os eventos/métricas)
auth_mode:swic|api|unknown.model: nome do modelo utilizado.app.version: versão do Codex.
Catálogo de métricas
Cada métrica inclui os campos obrigatórios e os campos de contexto predefinidos acima. Os nomes das métricas abaixo omitem o prefixo codex..
A maioria dos nomes das métricas está centralizada em codex-rs/otel/src/metrics/names.rs; também se incluem aqui as métricas específicas de funcionalidades emitidas fora desse ficheiro.
Se uma métrica incluir o campo tool, este reflete a ferramenta interna utilizada (por exemplo, apply_patch ou shell) e não contém o comando real da shell nem o patch que codex está a tentar aplicar.
Ambiente de execução e transporte de modelos
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
api_request |
contador | status, success |
Número de pedidos da API por estado HTTP e êxito/falha. |
api_request.duration_ms |
histograma | status, success |
Duração dos pedidos da API em milissegundos. |
sse_event |
contador | kind, success |
Número de eventos SSE por tipo de evento e êxito/falha. |
sse_event.duration_ms |
histograma | kind, success |
Duração do processamento de eventos SSE em milissegundos. |
websocket.request |
contador | success |
Número de pedidos WebSocket por êxito/falha. |
websocket.request.duration_ms |
histograma | success |
Duração dos pedidos WebSocket em milissegundos. |
websocket.event |
contador | kind, success |
Número de mensagens/eventos WebSocket por tipo e êxito/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 Responses API a partir de respostas WebSocket. | |
responses_api_inference_time.duration_ms |
histograma | Tempo de inferência da Responses API a partir de respostas WebSocket. | |
responses_api_engine_iapi_ttft.duration_ms |
histograma | Tempo até ao primeiro token da IAPI do motor da Responses API. | |
responses_api_engine_service_ttft.duration_ms |
histograma | Tempo de serviço até ao primeiro token do motor da Responses API. | |
responses_api_engine_iapi_tbt.duration_ms |
histograma | Tempo entre tokens da IAPI do motor da Responses API. | |
responses_api_engine_service_tbt.duration_ms |
histograma | Tempo de serviço entre tokens do motor da Responses API. | |
transport.fallback_to_http |
contador | from_wire_api |
Número de reversões de WebSocket para HTTP. |
remote_models.fetch_update.duration_ms |
histograma | Tempo para obter definições de modelos remotas. | |
remote_models.load_cache.duration_ms |
histograma | Tempo para carregar a cache remota de modelos. | |
startup_prewarm.duration_ms |
histograma | status |
Duração do pré-aquecimento no arranque por resultado. |
startup_prewarm.age_at_first_turn_ms |
histograma | status |
Idade do pré-aquecimento no arranque quando o primeiro turno real o resolve. |
cloud_requirements.fetch.duration_ms |
histograma | Duração da obtenção dos requisitos na nuvem geridos pelo espaço de trabalho. | |
cloud_requirements.fetch_attempt |
contador | Consultar nota | Tentativas de obtenção dos requisitos na nuvem geridos pelo espaço de trabalho. |
cloud_requirements.fetch_final |
contador | Consultar nota | Resultado final da obtenção dos requisitos na nuvem geridos pelo espaço de trabalho. |
cloud_requirements.load |
contador | trigger, outcome |
Resultado do carregamento dos requisitos na nuvem geridos 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 de turnos e ferramentas
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
turn.e2e_duration_ms |
histograma | Tempo total de um turno completo. | |
turn.ttft.duration_ms |
histograma | Tempo até ao primeiro token de um turno. | |
turn.ttfm.duration_ms |
histograma | Tempo até ao primeiro item de saída do modelo de um turno. | |
turn.network_proxy |
contador | active, tmp_mem_enabled |
Indica se o proxy de rede gerido estava ativo durante o turno. |
turn.memory |
contador | read_allowed, feature_enabled, config_use_memories, has_citations |
Disponibilidade da leitura de memória e utilização 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 |
Utilização 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 invocações de ferramentas por nome da ferramenta e êxito/falha. |
tool.call.duration_ms |
histograma | tool, success |
Duração da execução das ferramentas em milissegundos por nome da ferramenta e resultado. |
tool.unified_exec |
contador | tty |
Chamadas da ferramenta de execução unificada por modo TTY. |
approval.requested |
contador | tool, approved |
Resultado do pedido de aprovação da ferramenta (approved, approved_with_amendment, approved_for_session, denied, abort). |
mcp.call |
contador | Consultar nota | Resultado da invocação da ferramenta MCP. |
mcp.call.duration_ms |
histograma | Consultar nota | Duração da invocação da ferramenta MCP. |
mcp.tools.list.duration_ms |
histograma | cache |
Duração da listagem de ferramentas MCP, incluindo o estado de acerto/falha da cache. |
mcp.tools.fetch_uncached.duration_ms |
histograma | Duração das obtenções de ferramentas MCP que não encontram resultados na cache. | |
mcp.tools.cache_write.duration_ms |
histograma | Duração das escritas na cache de ferramentas MCP do Codex Apps. | |
hooks.run |
contador | hook_name, source, status |
Número de execuções de hooks por nome do hook, origem e estado. |
hooks.run.duration_ms |
histograma | hook_name, source, status |
Duração da execução dos hooks em milissegundos. |
As métricas mcp.call e mcp.call.duration_ms incluem status; as emissões normais de chamadas de ferramentas também incluem tool, além de connector_id e connector_name quando disponíveis. As chamadas MCP bloqueadas do Codex Apps podem emitir mcp.call apenas com status.
Threads, tarefas e funcionalidades
| Métrica | Tipo | Campos | Descrição |
|---|---|---|---|
feature.state |
contador | feature, value |
Valores de funcionalidades que diferem das predefinições (emite uma linha por cada valor não predefinido). |
status_line |
contador | Sessão iniciada com uma linha de estado configurada. | |
model_warning |
contador | Aviso enviado ao modelo. | |
thread.started |
contador | is_git |
Nova thread criada, identificada consoante o diretório de trabalho se encontre ou não num repositório Git. |
conversation.turn.count |
contador | Turnos do utilizador/assistente por thread, registados no final da thread. | |
thread.fork |
contador | source |
Nova thread criada através da bifurcação de uma thread existente. |
thread.rename |
contador | Thread cujo nome foi alterado. | |
thread.side |
contador | source |
Conversa paralela criada. |
thread.skills.enabled_total |
histograma | Número de competências ativadas para uma nova thread. | |
thread.skills.kept_total |
histograma | Número de competências ativadas mantidas após a composição do pedido. | |
thread.skills.truncated |
histograma | Indica se a composição das competências truncou a lista de competências ativadas (1 ou 0). |
|
task.compact |
contador | type |
Número de compactações por tipo (remote ou local), incluindo as manuais e automáticas. |
task.review |
contador | Número de revisões acionadas. | |
task.undo |
contador | Número de ações de anulação acionadas. | |
task.user_shell |
contador | Número de ações da shell do utilizador (por exemplo, ! na TUI). |
|
shell_snapshot |
contador | Consultar nota | Indica se a captura de um instantâneo da shell foi bem-sucedida. |
shell_snapshot.duration_ms |
histograma | success |
Tempo necessário para capturar um instantâneo da shell. |
skill.injected |
contador | status, skill |
Resultados da injeção de competências por competência. |
plugins.startup_sync |
contador | transport, status |
Tentativas de sincronização de plugins selecionados no arranque. |
plugins.startup_sync.final |
contador | transport, status |
Resultado final da sincronização de plugins selecionados no arranque. |
multi_agent.spawn |
contador | role |
Criações de agentes por função. |
multi_agent.resume |
contador | Retomas de agentes. | |
multi_agent.nickname_pool_reset |
contador | Reposições do conjunto de alcunhas 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 estado. |
memory.phase1.e2e_ms |
histograma | Duração total da fase 1 da memória. | |
memory.phase1.output |
contador | Saídas escritas pela fase 1 da memória. | |
memory.phase1.token_usage |
histograma | token_type |
Utilização 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 estado. |
memory.phase2.e2e_ms |
histograma | Duração total da fase 2 da memória. | |
memory.phase2.input |
contador | Número de entradas da fase 2 da memória. | |
memory.phase2.token_usage |
histograma | token_type |
Utilização de tokens na fase 2 da memória por tipo de token. |
memories.usage |
contador | kind, tool, success |
Utilização da memória por tipo, ferramenta e êxito/falha. |
external_agent_config.detect |
contador | Consultar nota | Deteções de configuração de agentes externos por tipo de item de migração. |
external_agent_config.import |
contador | Consultar nota | Importações de configuração de agentes externos por tipo de item de migração. |
db.backfill |
contador | status |
Resultados do preenchimento inicial da base de dados de estado (upserted, failed). |
db.backfill.duration_ms |
histograma | status |
Duração do preenchimento inicial da base de dados de estado. |
db.error |
contador | stage |
Erros durante operações da base de dados de estado. |
As métricas external_agent_config.detect e external_agent_config.import incluem migration_type; as migrações de competências 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 elevada do Windows. | |
windows_sandbox.elevated_setup_failure |
contador | Consultar nota | Falhas na configuração da sandbox elevada do Windows. |
windows_sandbox.elevated_setup_canceled |
contador | Consultar nota | Tentativas canceladas de configuração da sandbox elevada do Windows. |
windows_sandbox.elevated_setup_duration_ms |
histograma | result |
Duração da configuração da sandbox elevada do Windows. |
windows_sandbox.elevated_prompt_shown |
contador | Pedido de configuração da sandbox elevada apresentado. | |
windows_sandbox.elevated_prompt_accept |
contador | Pedido de configuração da sandbox elevada aceite. | |
windows_sandbox.elevated_prompt_use_legacy |
contador | O utilizador escolheu a sandbox legada no pedido de elevação. | |
windows_sandbox.elevated_prompt_quit |
contador | O utilizador saiu no pedido de elevação. | |
windows_sandbox.fallback_prompt_shown |
contador | Pedido de sandbox alternativa apresentado. | |
windows_sandbox.fallback_retry_elevated |
contador | O utilizador voltou a tentar a configuração elevada a partir do pedido alternativo. | |
windows_sandbox.fallback_use_legacy |
contador | O utilizador escolheu a sandbox legada no pedido alternativo. | |
windows_sandbox.fallback_prompt_quit |
contador | O utilizador saiu no pedido alternativo. | |
windows_sandbox.legacy_setup_preflight_failed |
contador | Consultar nota | Falha na verificação prévia da configuração da sandbox legada do Windows. |
windows_sandbox.setup_elevated_sandbox_command |
contador | Comando de configuração da sandbox elevada invocado. | |
windows_sandbox.createprocessasuserw_failed |
contador | error_code, path_kind, exe, level |
Falhas de CreateProcessAsUserW no Windows. |
As métricas de falha da configuração com privilégios elevados incluem code e message quando estão disponíveis detalhes sobre a falha da configuração no Windows, e podem incluir originator quando são emitidas pelo caminho de configuração partilhado. A métrica windows_sandbox.legacy_setup_preflight_failed inclui originator quando é emitida pelo caminho de configuração partilhado, mas as falhas de pré-verificação do pedido alternativo podem não incluir quaisquer campos.
Controlos de comentários
Por predefinição, os clientes locais permitem que os utilizadores enviem comentários a partir de /feedback. Para desativar a recolha de comentários na aplicação ChatGPT para computador, no Codex CLI e na extensão IDE de um computador, atualize a configuração:
[feedback]
enabled = falseQuando está desativada, /feedback apresenta uma mensagem indicando a desativação e o Codex rejeita o envio de comentários.
Ocultar ou apresentar eventos de raciocínio
Se pretender reduzir a saída de "raciocínio" com ruído (por exemplo, nos registos de CI), pode suprimi-la:
hide_agent_reasoning = trueSe pretender apresentar o conteúdo de raciocínio em bruto quando um modelo o emitir:
show_raw_agent_reasoning = trueAtive o raciocínio em bruto apenas se for aceitável para o seu fluxo de trabalho. Alguns modelos/fornecedores (como gpt-oss) não emitem raciocínio em bruto; nesse caso, esta definição não tem qualquer efeito visível.
Notificações
Utilize notify para acionar um programa externo sempre que o Codex emitir eventos suportados (atualmente, apenas agent-turn-complete). Isto é útil para notificações no ambiente de trabalho, webhooks de conversação, atualizações de CI ou quaisquer alertas por canais alternativos não abrangidos pelas notificações integradas da TUI.
notify = ["python3", "/path/to/notify.py"]Exemplo de notify.py (abreviado) 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 utilizador que deram origem ao turno)last-assistant-message(texto da última mensagem do assistente)
Coloque o script numa localização no disco e aponte notify para o mesmo.
notify em comparação com tui.notifications
notifyexecuta um programa externo (adequado para webhooks, notificadores de ambiente de trabalho e hooks de CI).tui.notificationsestá integrado na TUI e pode, opcionalmente, filtrar por tipo de evento (por exemplo,agent-turn-completeeapproval-requested).tui.notification_methodcontrola a forma como a TUI emite notificações do terminal (auto,osc9oubel).tui.notification_conditioncontrola se as notificações da TUI são acionadas apenas quando o terminal estáunfocusedoualways.
No modo auto, o Codex dá preferência às notificações OSC 9 (uma sequência de escape do terminal que alguns terminais interpretam como uma notificação do ambiente de trabalho) e, caso contrário, recorre a BEL (\x07).
Consulte a Referência de configuração para conhecer as chaves exatas.
Persistência do histórico
Por predefinição, o Codex guarda 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 ficheiro de histórico, defina history.max_bytes. Quando o ficheiro excede o limite, o Codex elimina as entradas mais antigas e compacta o ficheiro, mantendo os registos mais recentes.
[history]
max_bytes = 104857600 # 100 MiBCitações clicáveis
Se utilizar uma integração de terminal/editor que o suporte, o Codex pode apresentar citações de ficheiros como ligações clicáveis. Configure file_opener para escolher o esquema de URI utilizado pelo Codex:
file_opener = "vscode" # or cursor, windsurf, vscode-insiders, noneExemplo: uma citação como /home/user/project/main.py:42 pode ser convertida numa ligação vscode://file/...:42 clicável.
Deteção de instruções do projeto
O Codex lê AGENTS.md (e ficheiros relacionados) e inclui uma quantidade limitada de orientações do projeto no primeiro turno de uma sessão. Duas definições controlam este funcionamento:
project_doc_max_bytes: quantidade a ler de cada ficheiroAGENTS.mdproject_doc_fallback_filenames: nomes de ficheiro adicionais a experimentar quandoAGENTS.mdnão existe num nível do diretório
Para obter instruções detalhadas, consulte Instruções personalizadas com AGENTS.md.
Computador
As opções desta secção aplicam-se apenas à aplicação ChatGPT para computador.
Adicionar processadores de ficheiros personalizados
No seu ~/.codex/config.toml ao nível do utilizador, adicione entradas em
desktop.custom_file_handlers para abrir ficheiros em editores ou iniciadores internos
que a aplicação ChatGPT para computador não suporte por predefinição. Cada entrada adiciona um
destino de editor aos menus Abrir em da aplicação. A aplicação apresenta o destino quando
command é um caminho absoluto existente ou pode ser resolvido a partir do PATH da aplicação.
O exemplo seguinte mostra três formas de passar um ficheiro a um processador:
# 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"Guarde config.toml e, em seguida, reinicie a aplicação ChatGPT para computador.
O ID do processador é o segmento final do cabeçalho da tabela TOML. Tem de conter
entre 1 e 64 caracteres, começar por uma letra ou um número ASCII e, nos restantes caracteres,
conter apenas letras ASCII, números, pontos, caracteres de sublinhado ou hífenes. A aplicação expõe
o ID com um prefixo custom:; por exemplo, company_editor torna-se
custom:company_editor. Coloque entre aspas um ID que contenha um ponto para impedir que o TOML
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 processador suporta estes campos:
| Campo | Obrigatório | Descrição |
|---|---|---|
label |
Sim | Nome a apresentar na aplicação. |
icon |
Sim | Ícone incluído na aplicação, como apps/vscode.png, URL data:image/... em base64, URI file: ou caminho absoluto de uma imagem local. Uma origem não suportada utiliza o ícone predefinido do VS Code. |
command |
Sim | Caminho do executável ou nome do comando a detetar e iniciar. |
args |
Não | Matriz de cadeias inserida entre command e a entrada do ficheiro. A predefinição é []. |
input |
Não | Forma como a aplicação envia a entrada do ficheiro: path, json_argument ou json_stdin. A predefinição é path. |
supports_ssh |
Não | Indica se o processador deve ser disponibilizado para ficheiros em espaços de trabalho SSH. A predefinição é false. Utilize json_stdin quando o processador necessitar de detalhes do anfitrião remoto e do caminho. |
O valor input controla o que se segue a args:
pathacrescenta o caminho como argumento final do comando.json_argumentacrescenta um objeto JSON comtarget,path,appPathelocation. O valorlocationé um objeto com valoreslineecolumnindexados a partir de 1, ounull.json_stdinescreve o objeto JSON na entrada padrão em vez de adicionar um argumento. Também incluihostConfig,remoteWorkspaceRooteremotePath; estes campos sãonullquando não são aplicáveis.
Por exemplo, company_editor pode receber este argumento quando o utilizador abre uma
localização específica no código-fonte:
{
"target": "custom:company_editor",
"path": "/repo/src/index.ts",
"appPath": null,
"location": { "line": 12, "column": 3 }
}A seleção de um processador personalizado como editor preferido mantém a escolha da mesma forma que a seleção de um editor integrado, incluindo as preferências por projeto.
Opções da TUI
A execução de codex sem um subcomando inicia a interface de terminal interativa (TUI). O Codex disponibiliza algumas configurações específicas da TUI em [tui], incluindo:
tui.notifications: ativar/desativar notificações (ou restringi-las a tipos específicos)tui.notification_method: escolherauto,osc9oubelpara as notificações do terminaltui.notification_condition: escolherunfocusedoualwayspara definir quando as notificações são acionadastui.animations: ativar/desativar animações ASCII e efeitos cintilantestui.alternate_screen: controlar a utilização do ecrã alternativo (defina comoneverpara manter o histórico de deslocamento do terminal)tui.show_tooltips: mostrar ou ocultar sugestões de introdução no ecrã de boas-vindas
A predefinição de tui.notification_method é auto. No modo auto, o Codex dá preferência às notificações OSC 9 (uma sequência de escape do terminal que alguns terminais interpretam como uma notificação do ambiente de trabalho) quando o terminal parece suportá-las e, caso contrário, recorre a BEL (\x07).
Consulte a Referência de configuração para obter a lista completa de chaves.