Início rápido
Configure OpenTelemetry usando variáveis de ambiente:claude_code.session.count, que Claude Code emite quando uma sessão é iniciada. Para verificar uma configuração apenas de logs, envie um prompt e verifique o evento claude_code.user_prompt.
Se nada chegar, inicie Claude Code com claude --debug-file <path> e verifique o log que ele escreve nesse caminho. Claude Code relata falhas dos exportadores que você configura como erros [3P telemetry], onde 3P significa third-party. As linhas prefixadas com [Anthropic telemetry] descrevem a telemetria operacional separada da Anthropic e não indicam um problema com sua configuração.
Para opções de configuração completas, consulte a especificação OpenTelemetry.
Configuração do administrador
Os administradores podem configurar as definições de OpenTelemetry para todos os usuários através do arquivo de configurações gerenciadas. Consulte a precedência de configurações para obter mais informações sobre como as configurações são aplicadas. Exemplo de configuração de configurações gerenciadas:.claude/settings.json e .claude/settings.local.json de um repositório, portanto um repositório não pode usá-las para ativar a telemetria, escolher para onde ela vai ou capturar conteúdo. Defina-as nas configurações gerenciadas ou faça com que cada desenvolvedor as defina no seu shell ou ~/.claude/settings.json. Um repositório ainda pode desativar um sinal definindo seu seletor de exportador, como OTEL_LOGS_EXPORTER, como none, a menos que as configurações gerenciadas, um arquivo --settings ou o ambiente a partir do qual você inicia Claude Code defina essa variável.
Claude Code não passa variáveis de ambiente OTEL_* para os subprocessos que ele gera, incluindo a ferramenta Bash, hooks, servidores MCP e servidores de linguagem. Um aplicativo instrumentado com OpenTelemetry que você executa através da ferramenta Bash não herda o endpoint do exportador ou cabeçalhos do Claude Code, então defina essas variáveis diretamente no comando se esse aplicativo precisar exportar sua própria telemetria.
Como as configurações gerenciadas bloqueiam o destino OTLP
Quando você define uma variávelOTEL_EXPORTER_OTLP_* nas configurações gerenciadas, Claude Code remove variáveis conflitantes definidas pelo desenvolvedor na inicialização e registra um aviso no log de depuração. O que ele remove depende de qual variável você define:
-
Endpoints: quando você define
OTEL_EXPORTER_OTLP_ENDPOINT, Claude Code remove todos os endpoints por sinal definidos pelo desenvolvedor. Os desenvolvedores não podem apontar um sinal para um coletor diferente, portanto você não precisa também definir as variáveis de endpoint por sinal nas configurações gerenciadas. -
Protocolos: quando você define
OTEL_EXPORTER_OTLP_PROTOCOL, Claude Code remove todos os protocolos por sinal definidos pelo desenvolvedor. -
Credenciais: quando você define
OTEL_EXPORTER_OTLP_HEADERS,OTEL_EXPORTER_OTLP_CLIENT_KEYouOTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, Claude Code remove as versões por sinal definidas pelo desenvolvedor dessa variável, além de todas as variáveis de endpoint definidas pelo desenvolvedor, genéricas ou por sinal, já que essas credenciais de outra forma alcançariam um coletor que as configurações gerenciadas não escolheram. -
Seletores de exportador:
OTEL_METRICS_EXPORTER,OTEL_LOGS_EXPORTERe oOTEL_TRACES_EXPORTERbeta seguem a precedência normal por chave. Uma configuração do desenvolvedor ainda pode desabilitar um sinal ou alterá-lo para o exportador de console, portanto defina os seletores nas configurações gerenciadas também se você precisar que eles sejam bloqueados. Através de fontes de administrador,OTEL_LOGS_EXPORTERsegue a unidade de telemetria enquanto os outros dois seletores se mesclam por chave. Requer Claude Code v2.1.223 ou posterior. -
Endpoints de rastreamento beta: com rastreamento beta detalhado ativo, Claude Code exporta logs e rastreamentos para
BETA_TRACING_ENDPOINTem vez de através dos exportadores de logs e rastreamentos. Claude Code portanto remove umBETA_TRACING_ENDPOINTdefinido pelo desenvolvedor sempre que qualquer uma dessas configurações gerenciadas decide o destino de qualquer sinal:- Um endpoint genérico ou de logs/rastreamentos ou credencial
- Um
otelHeadersHelper - Um seletor de exportador de logs ou rastreamentos definido como
none,consoleou vazio, valores que mantêm o sinal fora de um coletor CLAUDE_CODE_ENABLE_TELEMETRYdesativado
BETA_TRACING_ENDPOINTdefinido pelo desenvolvedor redirecionava os logs e rastreamentos que o rastreamento beta detalhado exporta mesmo quando as configurações gerenciadas fixavam o coletor.
Detalhes de configuração
Variáveis de configuração comuns
Essas variáveis configuram exportadores, endpoints e comportamento de exportação para todas as implantações. Se você definir uma variável de endpoint ou protocolo por sinal, comoOTEL_EXPORTER_OTLP_METRICS_ENDPOINT, Claude Code a usa em vez da variável genérica para esse sinal. Se você definir uma variável de cabeçalhos por sinal, como OTEL_EXPORTER_OTLP_METRICS_HEADERS, Claude Code a mescla com a genérica OTEL_EXPORTER_OTLP_HEADERS para esse sinal.
Em máquinas com configurações gerenciadas, veja Como as configurações gerenciadas bloqueiam o destino OTLP para saber o que Claude Code remove.
Para os protocolos
http/protobuf e http/json, Claude Code envia cada solicitação de exportação com um cabeçalho Content-Length. Antes da v2.1.212, versões do Claude Code a partir da v2.1.191 enviavam essas solicitações com codificação de transferência em chunks; Azure Monitor e outros endpoints que exigem um comprimento declarado as rejeitavam com erros 411 Length Required ou 400.
Autenticação mTLS
Como você configura certificados de cliente para o exportador OTLP depende do protocolo OTLP em uso para esse sinal, definido viaOTEL_EXPORTER_OTLP_PROTOCOL ou a substituição por sinal. A mesma configuração se aplica a métricas, logs e rastreamentos.
Para
grpc, o SDK OpenTelemetry lê as variáveis OTLP padrão diretamente, então as configurações existentes que definem as variáveis de métricas por sinal continuam funcionando. Em máquinas com configurações gerenciadas, Claude Code pode remover credenciais e endpoints por sinal definidos pelo desenvolvedor na inicialização.
Controle de cardinalidade de métricas
As seguintes variáveis de ambiente controlam quais atributos são incluídos nas métricas para gerenciar a cardinalidade:
Cardinalidade mais baixa geralmente significa melhor desempenho e custos de armazenamento mais baixos, mas dados menos granulares para análise.
Rastreamentos (beta)
O rastreamento distribuído exporta spans que vinculam cada prompt do usuário às solicitações de API e execuções de ferramentas que ele dispara, para que você possa visualizar uma solicitação completa como um único rastreamento no seu backend de rastreamento. O rastreamento está desativado por padrão. Para ativá-lo, defina tantoCLAUDE_CODE_ENABLE_TELEMETRY=1 quanto CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, depois defina OTEL_TRACES_EXPORTER para escolher para onde os spans são enviados. Os rastreamentos reutilizam a configuração OTLP comum para endpoint, protocolo, cabeçalhos e mTLS. Em máquinas com configurações gerenciadas, Claude Code pode remover credenciais e endpoints por sinal definidos pelo desenvolvedor na inicialização.
Os spans reduzem o texto do prompt do usuário, detalhes de entrada de ferramenta e conteúdo de ferramenta por padrão. Defina
OTEL_LOG_USER_PROMPTS=1, OTEL_LOG_TOOL_DETAILS=1 e OTEL_LOG_TOOL_CONTENT=1 para incluí-los.
Quando o rastreamento está ativo, subprocessos Bash e PowerShell herdam automaticamente uma variável de ambiente TRACEPARENT contendo o contexto de rastreamento W3C do span de execução de ferramenta ativo. Isso permite que qualquer subprocesso que leia TRACEPARENT coloque seus próprios spans sob o mesmo rastreamento, permitindo rastreamento distribuído de ponta a ponta através de scripts e comandos que Claude executa.
Quando o rastreamento está ativo e Claude Code está conectado diretamente à API Anthropic, cada solicitação de modelo carrega um cabeçalho W3C traceparent definido para o contexto do span claude_code.llm_request, e o cabeçalho traceresponse da API é registrado como um link de span. Juntos, esses conectam os spans do lado do cliente do Claude Code ao rastreamento do lado do servidor através de qualquer intermediário compatível. As solicitações HTTP MCP de saída carregam traceparent da mesma forma. O cabeçalho não é enviado para provedores terceirizados.
Por padrão, o cabeçalho traceparent em solicitações de modelo e HTTP MCP é enviado apenas quando ANTHROPIC_BASE_URL não está definido ou aponta para a API Anthropic, já que alguns proxies rejeitam cabeçalhos não reconhecidos. A variável TRACEPARENT do subprocesso é controlada pelo mesmo switch para consistência. Se você executar Claude Code através de um proxy ANTHROPIC_BASE_URL customizado e quiser que o contexto de rastreamento seja propagado, defina CLAUDE_CODE_PROPAGATE_TRACEPARENT=1.
No Agent SDK e sessões não-interativas iniciadas com -p, Claude Code também lê TRACEPARENT e TRACESTATE de seu próprio ambiente ao iniciar cada span de interação. Isso permite que um processo de incorporação passe seu contexto de rastreamento W3C ativo para o subprocesso para que os spans do Claude Code apareçam como filhos do rastreamento distribuído do chamador. Sessões interativas ignoram TRACEPARENT de entrada para evitar herdar acidentalmente valores ambientes de CI ou ambientes de contêiner.
O contexto de rastreamento de entrada também se aplica a eventos. No Agent SDK e sessões -p com TRACEPARENT definido, cada registro de log de evento OTLP carrega valores trace_id e span_id que o unem ao rastreamento da sua aplicação, mesmo quando o exportador de rastreamentos não está configurado, para que seu backend de logging possa correlacionar eventos com o resto do rastreamento.
Um registro emitido enquanto uma interação está ativa carrega os IDs do span de interação, mesmo quando Claude Code o emite fora do contexto assíncrono do span, como em um callback de prompt de permissão ou para um registro armazenado em buffer durante a inicialização e exportado posteriormente. Um registro emitido sem nenhum span de interação ativo carrega os IDs TRACEPARENT de entrada diretamente. Antes da v2.1.214, registros emitidos fora do contexto assíncrono do span carregavam os IDs TRACEPARENT de entrada em vez dos IDs do span. Antes da v2.1.212, registros de eventos emitidos fora de um span ativo não carregavam trace_id ou span_id.
Hierarquia de span
Cada prompt do usuário inicia um span raizclaude_code.interaction. Chamadas de API, chamadas de ferramenta e execuções de hook são registradas como seus filhos. Os spans de ferramenta têm dois spans filhos próprios: um para o tempo gasto esperando uma decisão de permissão e outro para a execução em si. Quando a ferramenta Agent ou a ferramenta Task legada gera um subagente, os spans de API e ferramenta do subagente se aninham sob o span claude_code.tool do pai.
claude -p, claude_code.interaction em si se torna um filho do span do chamador quando TRACEPARENT está definido no ambiente.
Quando um hook PreToolUse adia uma chamada de ferramenta, Claude Code salva o contexto de rastreamento do turno que o adiou. Quando você retoma a sessão e a ferramenta é executada novamente, os spans da ferramenta se unem ao rastreamento daquele turno anterior como filhos do span claude_code.interaction do turno.
Atributos de span
Cada span carrega os atributos padrão mais um atributospan.type correspondendo ao seu nome. As tabelas abaixo listam os atributos adicionais definidos em cada span. Os spans llm_request, tool.execution e hook definem status OpenTelemetry ERROR quando registram uma falha; os outros spans sempre terminam com status UNSET.
claude_code.interaction
claude_code.llm_request
Cada tentativa de repetição também é registrada como um evento de span
gen_ai.request.attempt com atributos attempt e client_request_id.
claude_code.tool
tool.output span event on claude_code.tool
Se você definir OTEL_LOG_TOOL_CONTENT=1, chamadas Read e Bash podem registrar um evento de span tool.output no span claude_code.tool. Chamadas Edit e Write registram um apenas quando você também define OTEL_LOG_TOOL_DETAILS=1. Essa variável não é limitada a essas duas ferramentas, então verifique sua linha na tabela de configuração para os argumentos que ela adiciona em outro lugar.
Ferramentas MCP, WebFetch e WebSearch também registram este evento, no Claude Code v2.1.283 ou posterior.
Claude Code escreve este evento do retorno bem-sucedido de uma chamada de ferramenta, então uma chamada que gera um erro não registra nada, qualquer que seja a ferramenta. Entre as chamadas que retornam, ela não registra nenhum evento tool.output para:
- Uma chamada para qualquer ferramenta que não seja Read, Edit, Write, Bash, WebFetch, WebSearch e ferramentas MCP
- Um Read que retorna qualquer coisa que não seja texto de arquivo, como uma imagem, um PDF ou uma releitura de um arquivo cujo conteúdo não mudou
- Uma chamada Edit ou Write, a menos que você também defina
OTEL_LOG_TOOL_DETAILS=1 - Uma chamada WebFetch ou WebSearch que Claude Code moveu para o background porque você interrompeu o turno para enviar suas mensagens enfileiradas imediatamente enquanto a chamada era executada. Claude recebe esse resultado mais tarde, após o span da ferramenta ter terminado
Controlado Por nomeia a variável que um atributo precisa além de OTEL_LOG_TOOL_CONTENT=1, e para Edit e Write essa variável controla o evento em si em vez do atributo.
O atributo
tool_name do span pai informa qual ferramenta um evento veio. Um atributo cortado no limite de conteúdo é acompanhado por <attribute>_truncated e <attribute>_original_length.
claude_code.tool.blocked_on_user
claude_code.tool.execution
claude_code.hook
Este span aparece apenas quando rastreamento beta detalhado está ativo, o que requer ENABLE_BETA_TRACING_DETAILED=1 e BETA_TRACING_ENDPOINT, um par que também muda para onde seus logs e rastreamentos vão. Defina o par em seu shell, configurações de usuário ou configurações gerenciadas; ambas as variáveis são ignoradas em configurações de projeto e local. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA sozinho não o produz.
Em sessões CLI interativas, rastreamento beta detalhado também requer que sua organização esteja na lista de permissões para o recurso. Sessões Agent SDK e não-interativas -p não requerem lista de permissões.
Atributos adicionais que contêm conteúdo, como
new_context, system_prompt_preview, user_system_prompt, tool_input e response.model_output, são emitidos apenas quando rastreamento beta detalhado está ativo. Eles não fazem parte do esquema de span estável.O gate em new_context depende de qual span o carrega, e cada cópia é truncada no limite de conteúdo (60 KB por padrão). No span claude_code.tool ele carrega o resultado dessa chamada de ferramenta, qualquer que seja a ferramenta, e requer OTEL_LOG_TOOL_CONTENT=1. No span claude_code.interaction ele carrega o prompt do usuário, e no span claude_code.llm_request as novas mensagens do usuário e resultados de ferramenta dessa solicitação. Ambos requerem OTEL_LOG_USER_PROMPTS=1.user_system_prompt também requer OTEL_LOG_USER_PROMPTS=1. Ele carrega apenas o texto do prompt do sistema que você fornece através da opção SDK systemPrompt ou dos sinalizadores --system-prompt e --append-system-prompt, truncado no limite de conteúdo (60 KB por padrão), e é emitido uma vez por sessão em vez de por solicitação.Cabeçalhos dinâmicos
Para ambientes corporativos que exigem autenticação dinâmica, você pode configurar um script para gerar cabeçalhos dinamicamente. Cabeçalhos dinâmicos se aplicam apenas aos protocoloshttp/protobuf e http/json. Com o protocolo grpc, Claude Code usa apenas as variáveis de cabeçalhos estáticos, OTEL_EXPORTER_OTLP_HEADERS e suas variantes por sinal.
Configuração de configurações
Adicione ao seu.claude/settings.json, substituindo o caminho pelo seu próprio script:
Requisitos do script
O script deve gerar JSON válido com pares de chave-valor de string representando cabeçalhos HTTP:- Uma notificação de aviso em sessões interativas,
otelHeadersHelper failed; telemetry is not being exported, mostrada uma vez por sessão quando o auxiliar falha pela primeira vez - Saída de
/status - O log de depuração, ao executar com
--debugou após executar/debugna sessão - stderr, em sessões não-interativas iniciadas com
-p
Comportamento de atualização
O script auxiliar de cabeçalhos é executado na inicialização e periodicamente depois para suportar atualização de token. Por padrão, o script é executado a cada 29 minutos. Personalize o intervalo com a variável de ambienteCLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS.
Suporte a organizações multi-equipe
Organizações com múltiplas equipes ou departamentos podem adicionar atributos personalizados para distinguir entre diferentes grupos usando a variável de ambienteOTEL_RESOURCE_ATTRIBUTES:
- Filtre métricas por equipe ou departamento
- Rastreie custos por centro de custo
- Crie dashboards específicos de equipe
- Configure alertas para equipes específicas
vcs.* repository attributes, chaves personalizadas nunca substituem os atributos padrão como user.id ou session.id: quando uma chave colide, Claude Code mantém o valor integrado.
Cada chave personalizada se torna um rótulo em cada série de métrica, então valores de alta cardinalidade aumentam o custo de armazenamento no seu backend de métricas. Para enviar atributos personalizados apenas no bloco de recurso e omiti-los dos rótulos de ponto de dados, defina OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false. Veja Controle de cardinalidade de métricas.
Configurações de exemplo
Defina essas variáveis de ambiente antes de executarclaude. Cada cenário abaixo mostra uma configuração completa, e cada variável é descrita em Variáveis de configuração comuns. Para confirmar que uma configuração entrou em vigor, verifique seu backend para a métrica claude_code.session.count após iniciar uma sessão; o Início rápido cobre verificação apenas de logs e o que verificar quando nada chega.
Para depuração de console com intervalo de exportação de 1 segundo:
http://localhost:9464/metrics:
/metrics em vez disso.
Para enviar métricas para múltiplos exportadores:
Métricas e eventos disponíveis
Atributos padrão
Todas as métricas e eventos compartilham estes atributos padrão:
Quando Claude Code está conectado a um gateway de aplicativos Claude, a CLI marca as exportações com a identidade autenticada da sessão do gateway:
user.id é o assunto do IdP em vez de um identificador de instalação anônimo, user.email é o email conectado, e user.groups carrega a associação de grupo do IdP como uma string separada por vírgulas. Cada exportação também carrega identity.source: gateway-oidc. A identidade do gateway é aplicada por último, então as chaves user.* e identity.* definidas através de OTEL_RESOURCE_ATTRIBUTES são ignoradas em sessões de gateway.
Os eventos incluem adicionalmente os seguintes atributos. Estes nunca são anexados a métricas porque causariam cardinalidade ilimitada:
prompt.id: UUID correlacionando um prompt do usuário com todos os eventos subsequentes até o próximo prompt. Veja Atributos de correlação de eventos.workspace.host_paths: diretórios do workspace do host selecionados no aplicativo desktop, como um array de stringsworkflow.run_id: identificador de execução, prefixado comwf_, nos eventos de API e ferramenta emitidos por agentes que pertencem a uma execução de ferramenta Workflow. Filtrar eventos por umworkflow.run_idreconstrói as requisições de API e resultados de ferramentas dessa execução. O identificador cobre os agentes que o script de workflow gera e quaisquer agentes que esses gerem por sua vez, como invocações de skills. Corresponde ao identificador de execução relatado no resultado da ferramenta Workflow. Ausente em todos os outros eventos. Requer Claude Code v2.1.202 ou posteriorworkflow.name: nome do workflow, ometa.namedo seu script, emitido junto comworkflow.run_id. Os nomes de workflow integrados aparecem literalmente quando a execução executa o script integrado não modificado. Nomes de autoria do usuário, incluindo cópias editadas de scripts integrados, são substituídos porcustoma menos queOTEL_LOG_TOOL_DETAILS=1esteja definido. Requer Claude Code v2.1.202 ou posterior
Atributos de repositório
DefinaOTEL_METRICS_INCLUDE_REPOSITORY=true para marcar métricas e eventos com a identidade do repositório da sessão, para que um coletor compartilhado possa atribuir uso por repositório. Requer Claude Code v2.1.269 ou posterior.
Claude Code deriva esses atributos uma vez por sessão do remote origin do repositório. Quando os remotes HTTPS e SSH de um repositório nomeiam o mesmo host e o mesmo caminho, como fazem no GitHub, GitLab e Bitbucket Cloud, ambos produzem valores idênticos:
Os valores são convertidos para minúsculas, e credenciais, strings de consulta e fragmentos da URL remota nunca aparecem neles. Os atributos são omitidos quando a sessão não tem um remote
origin, quando o remote não é em forma de URL, ou quando o único repositório envolvente é seu diretório home.
Para obter esses atributos de uma sessão na nuvem, defina as variáveis de telemetria, incluindo OTEL_METRICS_INCLUDE_REPOSITORY, em seu ambiente na nuvem. Também permita o domínio do seu coletor no acesso à rede do ambiente.
Uma chave vcs.* que você declara em OTEL_RESOURCE_ATTRIBUTES substitui o valor derivado para essa chave. Se você declarar vcs.repository.url.full, Claude Code nunca lê o remote e relata apenas as chaves que você declara.
Se clones HTTPS e SSH de um repositório relatarem valores diferentes, como em uma instalação auto-hospedada cujo URL de clone HTTPS carrega um prefixo de caminho que o URL SSH não tem, declare vcs.repository.url.full em OTEL_RESOURCE_ATTRIBUTES junto com todas as outras chaves vcs.* que você quer relatadas. Cada clone então relata a identidade que você declara.
Os atributos fluem apenas para seus próprios exportadores; a telemetria da Anthropic descarta todas as chaves vcs.*.
Métricas
Claude Code exporta as seguintes métricas. A coluna Unit mostra a string de unidade OpenTelemetry anexada a cada métrica; métricas de contagem não carregam nenhuma.
Quando
prometheus é o único exportador listado em OTEL_METRICS_EXPORTER, Claude Code omite as unidades USD, tokens, e s das métricas exportadas para que o scrape permaneça em formato de texto Prometheus válido. Os nomes das métricas não mudam, e configurações que combinam exportadores, como otlp,prometheus, mantêm as unidades. Antes da v2.1.216, o scrape do Prometheus incluía linhas # UNIT apenas do OpenMetrics que alguns scrapers rejeitavam.
Detalhes das métricas
Cada métrica inclui os atributos padrão listados acima. Métricas com atributos adicionais específicos do contexto são anotadas abaixo.Contador de sessão
Incrementado no início de cada sessão. Atributos:- Todos os atributos padrão
start_type: Como a sessão foi iniciada. Um de"fresh","resume","continue", ou"agents_view". O valor"agents_view"identifica o processo do dashboardclaude agents, uma UI local iniciada pelo usuário em vez de uma sessão conversacional. Filtre neste valor para separar inicializações de processo de UI de sessões conversacionais em seus dashboards.
Contador de linhas de código
Incrementado quando código é adicionado ou removido. Atributos:- Todos os atributos padrão
type: ("added","removed")model: Identificador do modelo para o modelo que fez a alteração (por exemplo, “claude-sonnet-5”)
Contador de pull request
Incrementado quando Claude Code cria uma pull request ou merge request através de um comando shell ou uma ferramenta MCP. Atributos:- Todos os atributos padrão
Contador de commit
Incrementado ao criar commits git via Claude Code. Atributos:- Todos os atributos padrão
Contador de custo
Incrementado após cada requisição de API. Os atributosagent.name, skill.name, plugin.name, mcp_server.name, e mcp_tool.name cada um redige alguns nomes para um placeholder "custom" ou "third-party" por padrão. Se você definir OTEL_LOG_TOOL_DETAILS=1, eles carregam os nomes reais em vez disso. Antes da v2.1.273, os contadores de custo e token e os eventos api_request, api_error, e api_refusal carregavam os valores redatados mesmo com OTEL_LOG_TOOL_DETAILS=1 definido.
Atributos:
- Todos os atributos padrão
model: Identificador do modelo (por exemplo, “claude-sonnet-5”)query_source: Categoria do subsistema que emitiu a requisição. Um de"main","subagent", ou"auxiliary"speed:"fast"quando a requisição usou modo rápido. Ausente caso contrárioeffort: Nível de esforço aplicado à requisição:"low","medium","high","xhigh", ou"max". Ausente quando Claude Code não envia nível de esforço, por exemplo em um modelo que não suporta esforço.agent.name: Tipo de subagente que emitiu a requisição. Nomes de agentes integrados e agentes de plugins do marketplace oficial aparecem literalmente. Outros nomes de agentes definidos pelo usuário são substituídos por"custom". Ausente quando a requisição não foi emitida por um tipo de subagente nomeado.skill.name: Skill ativa para a requisição, definida pela ferramenta Skill, um comando/, ou herdada por um subagente gerado. Nomes de skills integrados, agrupados, definidos pelo usuário e de plugins do marketplace oficial aparecem literalmente. Nomes de skills de plugins de terceiros são substituídos por"third-party". Ausente quando nenhuma skill está ativa.plugin.name: Plugin proprietário quando a skill ativa ou subagente é fornecido por um plugin. Nomes de plugins do marketplace oficial aparecem literalmente. Nomes de plugins de terceiros são substituídos por"third-party". Ausente quando nem a skill nem o subagente tem um plugin proprietário.marketplace.name: Marketplace do qual o plugin proprietário foi instalado. Emitido apenas para plugins do marketplace oficial, mesmo comOTEL_LOG_TOOL_DETAILS=1definido. Ausente caso contrário.mcp_server.name: Servidor MCP cujo resultado de ferramenta esta requisição consumiu. Nomes de servidores integrados, proxied por claude.ai e do registro oficial aparecem literalmente. Nomes de servidores configurados pelo usuário são substituídos por"custom". Ausente quando a requisição não consumiu resultado de ferramenta MCP. Antes da v2.1.222, Claude Code definia este atributo em cada requisição após uma chamada de ferramenta MCP, não apenas em requisições que consumiram um resultado de ferramenta, então dashboards que o agregam mostram uma queda após você atualizar.mcp_tool.name: Ferramenta MCP cujo resultado esta requisição consumiu, com o mesmo comportamento de redação e versão quemcp_server.name. Ausente quando a requisição não consumiu resultado de ferramenta MCP.
Contador de tokens
Incrementado após cada requisição de API. Atributos:- Todos os atributos padrão
type: ("input","output","cacheRead","cacheCreation")model: Identificador do modelo (por exemplo, “claude-sonnet-5”)query_source: Categoria do subsistema que emitiu a requisição. Um de"main","subagent", ou"auxiliary"speed:"fast"quando a requisição usou modo rápido. Ausente caso contrárioeffort: Nível de esforço aplicado à requisição. Veja Contador de custo para detalhes.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribuição de skill, plugin, agente e MCP para a requisição. Veja Contador de custo para definições e comportamento de redação.
Contador de decisão da ferramenta de edição de código
Incrementado quando o usuário aceita ou rejeita o uso da ferramenta Edit, Write, ou NotebookEdit. Atributos:- Todos os atributos padrão
tool_name: Nome da ferramenta ("Edit","Write","NotebookEdit")decision: Decisão do usuário ("accept","reject")source: De onde a decisão veio. Um de"config","hook","user_permanent","user_temporary","user_abort", ou"user_reject". Veja o evento de decisão de ferramenta para o que cada valor significa.language: Linguagem de programação do arquivo editado, como"TypeScript","Python","JavaScript", ou"Markdown". Retorna"unknown"para extensões de arquivo não reconhecidas.
Contador de tempo ativo
Rastreia o tempo real gasto usando ativamente Claude Code, excluindo tempo ocioso. Esta métrica é incrementada durante interações do usuário, como digitação e leitura de respostas, e durante processamento da CLI, como execução de ferramentas e geração de resposta de IA. Atributos:- Todos os atributos padrão
type:"user"para interações de teclado,"cli"para execução de ferramentas e respostas de IA
Eventos
Claude Code exporta os seguintes eventos via logs/eventos OpenTelemetry (quandoOTEL_LOGS_EXPORTER está configurado):
Atributos de correlação de eventos
Quando um usuário envia um prompt, Claude Code pode fazer múltiplas chamadas de API e executar várias ferramentas. O atributoprompt.id permite vincular todos esses eventos de volta ao único prompt que os acionou.
Para rastrear toda atividade acionada por um único prompt, filtre seus eventos por um valor específico de
prompt.id. Isto retorna o evento user_prompt, quaisquer eventos api_request, e quaisquer eventos tool_result que ocorreram ao processar esse prompt.
event.sequence começa em 0 cada vez que um processo Claude Code inicia e conta para cima pela vida desse processo. Continua contando através de /clear, que atribui um novo session.id. Se você retomar uma sessão sem fazer fork, a sessão mantém seu session.id mas toma seus valores de event.sequence do processo que a retomou, então dentro de uma sessão um evento posterior pode carregar um valor menor que um anterior, ou repetir um. Para ordenar os eventos de uma sessão, ordene por event.timestamp e use event.sequence para ordenar eventos que compartilham um timestamp.
Para reconstrução em nível de mensagem, cada classe de evento carrega uma chave que corresponde a um campo na transcrição da sessão. O formato de entrada da transcrição é interno ao Claude Code e muda entre versões, então um pipeline que se une nestes campos pode quebrar em qualquer release; trate as uniões como específicas da versão em vez de um contrato estável:
message.uuidemuser_prompt,assistant_response, eapi_response_bodyrequest_idnos eventos de API, persistido comorequestIdnas entradas de assistente da transcriçãotool_use_idem eventostool_resultetool_decision
Evento de prompt do usuário
Registrado quando um usuário envia um prompt. Nome do Evento:claude_code.user_prompt
Atributos:
- Todos os atributos padrão
event.name:"user_prompt"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosprompt_length: Comprimento do promptprompt: Conteúdo do prompt. Redatado por padrão. DefinaOTEL_LOG_USER_PROMPTS=1para incluí-lomessage.uuid: UUID da mensagem do usuário resultante, correspondendo à entrada da transcrição persistida. Ausente em dispatches de comando, que podem produzir zero ou muitas mensagens. Requer Claude Code v2.1.214 ou posteriorcommand_name: Nome do comando quando o prompt invoca um. Nomes de comando integrados e agrupados comocompactoudebugsão emitidos como estão; aliases comoresetemitem conforme digitado em vez do nome canônico. Nomes de comando personalizados, de plugin e MCP colapsam paracustomoumcpa menos queOTEL_LOG_TOOL_DETAILS=1esteja definidocommand_source: Origem do comando quando presente:builtin,custom, oumcp. Comandos fornecidos por plugin relatam comocustom
Evento de resposta do assistente
Registrado após cada requisição de API que retorna conteúdo de texto do modelo. Apenas os blocos de texto da resposta são incluídos; blocos de pensamento e blocos de uso de ferramenta são excluídos. Requer Claude Code v2.1.193 ou posterior. Nome do Evento:claude_code.assistant_response
Atributos:
- Todos os atributos padrão
event.name:"assistant_response"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosresponse_length: Comprimento do texto de resposta em caracteresresponse: Texto de resposta, truncado no limite de conteúdo (60 KB por padrão). Redatado para<REDACTED>por padrão. DefinaOTEL_LOG_ASSISTANT_RESPONSES=1para incluí-lo. QuandoOTEL_LOG_ASSISTANT_RESPONSESnão está definido,OTEL_LOG_USER_PROMPTSo controla em vez disso, então definaOTEL_LOG_ASSISTANT_RESPONSES=0para manter respostas redatadas enquanto o log de prompt está ativadomodel: Identificador do modelo (por exemplo, “claude-sonnet-5”)request_id: ID de requisição de API, descrito em Atributos de correlação de eventosmessage.uuid: UUID da entrada final da transcrição da resposta. Uma resposta de API é persistida como uma entrada de transcrição por bloco de conteúdo; esta é a última, da qual oparentUuiddo próximo turno se encadeia. Requer Claude Code v2.1.214 ou posteriorquery_source: Subsistema que emitiu a requisição, como"repl_main_thread","compact", ou um nome de subagente
Evento de resultado de ferramenta
Registrado quando uma ferramenta completa a execução. Não emitido se a chamada de ferramenta foi rejeitada; veja o evento de decisão de ferramenta para rejeições. Nome do Evento:claude_code.tool_result
Atributos:
- Todos os atributos padrão
event.name:"tool_result"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventostool_name: Nome da ferramentatool_use_id: Identificador único para esta invocação de ferramenta. Corresponde aotool_use_idpassado para hooks, permitindo correlação entre eventos OTel e dados capturados por hook.success:"true"ou"false"duration_ms: Tempo de execução em milissegundoserror_type: String de categoria de erro quando a ferramenta falhou, como"Error:ENOENT"ou"ShellError"error(quandoOTEL_LOG_TOOL_DETAILS=1): Mensagem de erro completa quando a ferramenta falhoudecision_type: Sempre"accept", já que este evento é emitido apenas após a ferramenta ser executada. Chamadas rejeitadas não produzem um resultado de ferramentadecision_source: De onde a decisão de permissão veio. Um de"config","hook","user_permanent", ou"user_temporary". Veja o evento de decisão de ferramenta para o que cada valor significa. As fontes apenas de rejeição"user_abort"e"user_reject"nunca aparecem neste evento.tool_input_size_bytes: Tamanho da entrada de ferramenta serializada em JSON em bytestool_result_size_bytes: Tamanho do resultado da ferramenta em bytesmcp_server_scope: Identificador de escopo do servidor MCP (para ferramentas MCP)vcs.ref.head.revision,vcs.ref.head.name,vcs.ref.head.type(quandoOTEL_LOG_TOOL_DETAILS=1): a identidade do commit de uma execução bem-sucedida degit commitexecutada pela ferramenta Bash ou PowerShell.vcs.ref.head.revisioné o SHA do commit,vcs.ref.head.nameé o branch no qual foi feito o commit, evcs.ref.head.typeébranch. O nome e tipo são omitidos quando o commit foi feito em um HEAD desanexado. Requer Claude Code v2.1.269 ou posteriortool_parameters(quandoOTEL_LOG_TOOL_DETAILS=1): String JSON contendo parâmetros específicos da ferramenta. Para servidores integrados do Claude Desktop, em sessões que Claude Desktop possui, o parmcp_server_name/mcp_tool_nameé incluído mesmo com a flag desativada, a mesma exceção de autoria do host que o evento de decisão de ferramenta, requerendo Claude Code v2.1.214 ou posterior. Os parâmetros variam por ferramenta:- Para ferramenta Bash: inclui
bash_command,full_command,timeout,description, edangerouslyDisableSandbox, maisgit_commit_idegit_branchquando um comandogit commité bem-sucedido.git_commit_idé o SHA completo do commit quando o commit é o HEAD do diretório de trabalho da sessão, e o SHA abreviado do git caso contrário.git_branché o branch no qual foi feito o commit, omitido em um HEAD desanexado - Para a ferramenta Bash do workspace do aplicativo desktop, que também relata
tool_namecomoBash: inclui apenasbash_command,full_command, etimeout - Para ferramentas MCP: inclui
mcp_server_name,mcp_tool_name - Para ferramenta Skill: inclui
skill_name - Para ferramenta Agent ou ferramenta Task legada: inclui
subagent_type
- Para ferramenta Bash: inclui
tool_input(quandoOTEL_LOG_TOOL_DETAILS=1): Argumentos de ferramenta serializados em JSON. Valores individuais acima de 512 caracteres são truncados, e o payload completo é limitado a ~4 K caracteres. Aplica-se a todas as ferramentas incluindo ferramentas MCP.
Evento de requisição de API
Registrado para cada requisição de API para Claude. Nome do Evento:claude_code.api_request
Atributos:
- Todos os atributos padrão
event.name:"api_request"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosmodel: Modelo usado (por exemplo, “claude-sonnet-5”)cost_usd: Custo estimado em USDcost_usd_micros: Custo estimado em milionésimos de dólar americano, emitido como um inteiroduration_ms: Duração da requisição em milissegundosinput_tokens: Número de tokens de entradaoutput_tokens: Número de tokens de saídacache_read_tokens: Número de tokens lidos do cachecache_creation_tokens: Número de tokens usados para criação de cacherequest_id: ID de requisição de API, como"req_011...", descrito em Atributos de correlação de eventos.client_request_id: UUID gerado pelo cliente enviado como o header de requisiçãox-client-request-id; veja a tabela atributos de correlação de eventos para quando está presente. Requer Claude Code v2.1.214 ou posteriorspeed:"fast"ou"normal", indicando se o modo rápido estava ativoquery_source: Subsistema que emitiu a requisição, como"repl_main_thread","compact", ou um nome de subagenteeffort: Nível de esforço aplicado à requisição:"low","medium","high","xhigh", ou"max". Ausente quando Claude Code não envia nível de esforço, por exemplo em um modelo que não suporta esforço.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribuição de skill, plugin, agente e MCP para a requisição. Veja Contador de custo para definições e comportamento de redação.
Evento de erro de API
Registrado quando uma requisição de API para Claude falha. Nome do Evento:claude_code.api_error
Atributos:
- Todos os atributos padrão
event.name:"api_error"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosmodel: Modelo usado (por exemplo, “claude-sonnet-5”)error: Mensagem de errostatus_code: Código de status HTTP como um número. Ausente para erros não-HTTP como falhas de conexão.duration_ms: Duração da requisição em milissegundosattempt: Número total de tentativas feitas, incluindo a requisição inicial (1significa que nenhuma retentativa ocorreu)request_id: ID de requisição de API, como"req_011...", descrito em Atributos de correlação de eventos.client_request_id: UUID gerado pelo cliente enviado como o header de requisiçãox-client-request-id. Disponível mesmo quando uma falha como timeout ou erro de conexão nunca produziu umrequest_iddo servidor; veja a tabela atributos de correlação de eventos para quando está presente. Requer Claude Code v2.1.214 ou posteriorspeed:"fast"ou"normal", indicando se o modo rápido estava ativoquery_source: Subsistema que emitiu a requisição, como"repl_main_thread","compact", ou um nome de subagenteeffort: Nível de esforço aplicado à requisição. Ausente quando Claude Code não envia nível de esforço, por exemplo em um modelo que não suporta esforço.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribuição de skill, plugin, agente e MCP para a requisição. Veja Contador de custo para definições e comportamento de redação.
Evento de recusa de API
Registrado quando uma requisição de API retornastop_reason: "refusal". Recusas chegam em um stream de resposta bem-sucedido em vez de como um erro HTTP, então o evento api_error não dispara para elas. Este evento permite rastrear a frequência de recusa e agrupar recusas pelos mesmos atributos que api_request e api_error.
Nome do Evento: claude_code.api_refusal
Atributos:
- Todos os atributos padrão
event.name:"api_refusal"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosmodel: Identificador do modelo da requisiçãorequest_id: ID de requisição de API, como"req_011...", descrito em Atributos de correlação de eventos.query_source: Subsistema que emitiu a requisição, como"repl_main_thread","compact", ou um nome de subagente. Vejaapi_requestpara definições.speed: Ou"fast"quando Modo rápido está ativo, ou"normal"attempt: Número de tentativa de retentativa. A primeira tentativa é1.effort: Nível de esforço aplicado à requisição. Ausente quando Claude Code não envia nível de esforço, por exemplo em um modelo que não suporta esforço.server_fallback_hop:truequando o fallback de modelo do lado do servidor da API já retentou esta recusa em um modelo diferente, então o usuário não viu esta recusa particular.falsequando a requisição terminou em uma recusa. Um único turno pode emitir tanto um evento de hoptruequanto um evento finalfalseposterior quando o modelo de fallback também recusa.has_category:truequando a resposta da API carregava umstop_details.categoryde"cyber","bio","frontier_llm", ou"reasoning_extraction".falsequando a resposta não carregava categoria ou um valor fora desse conjunto. Ausente quandoserver_fallback_hopétrue, porque blocos de hop não carregamstop_details.has_explanation:truequando a resposta da API carregava umstop_details.explanation, caso contráriofalse. Ausente quandoserver_fallback_hopétrue.category: O valorstop_details.categoryda resposta da API. Um de"cyber","bio","frontier_llm", ou"reasoning_extraction". Presente apenas quandoOTEL_LOG_TOOL_DETAILS=1está definido ehas_categoryétrue.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribuição de skill, plugin, agente e MCP para a requisição. Veja Contador de custo para definições e comportamento de redação.
Evento de corpo de requisição de API
Registrado para cada tentativa de requisição de API quandoOTEL_LOG_RAW_API_BODIES está definido. Um evento é emitido por tentativa, então retentativas com parâmetros ajustados cada uma produz seu próprio evento.
Nome do Evento: claude_code.api_request_body
Atributos:
- Todos os atributos padrão
event.name:"api_request_body"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosbody: Parâmetros de requisição da API Messages serializados em JSON, como o prompt do sistema, mensagens e ferramentas, truncados no limite de conteúdo (60 KB por padrão). Conteúdo de pensamento estendido em turnos anteriores do assistente é redatado. Emitido apenas em modo inline (OTEL_LOG_RAW_API_BODIES=1).body_ref: Caminho absoluto para um arquivo<dir>/<uuid>.request.jsoncontendo o corpo não truncado. Emitido apenas em modo arquivo (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Comprimento do corpo não truncado. Bytes UTF-8 quandoOTEL_LOG_RAW_API_BODIES=file:<dir>, ou unidades de código UTF-16 quando=1body_truncated:"true"quando truncamento inline ocorreu. Ausente em modo arquivo e quando nenhum truncamento ocorreu.model: Identificador do modelo dos parâmetros de requisiçãoquery_source: Subsistema que emitiu a requisição (por exemplo,"compact")request_body_id: UUID que identifica o corpo de requisição desta tentativa. O eventoapi_response_bodypara a tentativa que é bem-sucedida carrega o mesmo valor, então você pode emparelhar uma resposta com a requisição exata que a produziu. Requer Claude Code v2.1.274 ou posterior
Evento de corpo de resposta de API
Registrado para cada resposta de API bem-sucedida quandoOTEL_LOG_RAW_API_BODIES está definido.
Em modo arquivo (OTEL_LOG_RAW_API_BODIES=file:<dir>), Claude Code também anexa uma linha JSON a <dir>/index.jsonl para cada resposta bem-sucedida, com os campos timestamp, session_id, query_source, model, request_id, message_id, message_uuid, request_file, e response_file. Leia-o para encontrar os arquivos de requisição e resposta atrás de uma determinada mensagem de transcrição sem consultar seu backend de telemetria. O arquivo de índice requer Claude Code v2.1.274 ou posterior.
Nome do Evento: claude_code.api_response_body
Atributos:
- Todos os atributos padrão
event.name:"api_response_body"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosbody: Resposta da API Messages serializada em JSON, incluindo o id, blocos de conteúdo, uso e razão de parada, truncada no limite de conteúdo (60 KB por padrão). Conteúdo de pensamento estendido é redatado. Emitido apenas em modo inline (OTEL_LOG_RAW_API_BODIES=1).body_ref: Caminho absoluto para um arquivo<dir>/<request_id>.response.jsoncontendo o corpo não truncado. Emitido apenas em modo arquivo (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Comprimento do corpo não truncado. Bytes UTF-8 quandoOTEL_LOG_RAW_API_BODIES=file:<dir>, ou unidades de código UTF-16 quando=1body_truncated:"true"quando truncamento inline ocorreu. Ausente em modo arquivo e quando nenhum truncamento ocorreu.model: Identificador do modeloquery_source: Subsistema que emitiu a requisiçãorequest_id: ID de requisição de API, como"req_011...", descrito em Atributos de correlação de eventos.request_body_id: Orequest_body_iddo eventoapi_request_bodyque esta resposta responde. Requer Claude Code v2.1.274 ou posteriormessage.id: ID de mensagem que a API atribuiu à resposta, o campoiddo corpo da resposta. Requer Claude Code v2.1.274 ou posteriormessage.uuid: UUID da entrada final da transcrição da resposta. Junto comrequest_body_id, vincula uma mensagem de transcrição aos corpos de requisição e resposta atrás dela. Requer Claude Code v2.1.274 ou posterior
Evento de decisão de ferramenta
Registrado quando uma decisão de permissão de ferramenta é feita (aceitar/rejeitar). Nome do Evento:claude_code.tool_decision
Atributos:
- Todos os atributos padrão
event.name:"tool_decision"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventostool_name: Nome da ferramenta (por exemplo, “Read”, “Edit”, “Write”, “NotebookEdit”)tool_use_id: Identificador único para esta invocação de ferramenta. Corresponde aotool_use_idpassado para hooks, permitindo correlação entre eventos OTel e dados capturados por hook.decision: Ou"accept"ou"reject"tool_source: Sempre presente. A proveniência da ferramenta, como um conjunto fechado de valores de autoria da CLI. Requer Claude Code v2.1.214 ou posterior"builtin": as próprias ferramentas da CLI"mcp": servidores MCP em geral"sdk_host_builtin_mcp": um servidor em processo integrado ao próprio Claude Desktop, em uma sessão que Claude Desktop possui. Claude Desktop possui uma sessão que iniciou de um de seus próprios pontos de entrada,claude-desktop,claude-desktop-3p, oulocal-agent, quando essa sessão não é um filho aninhado; sessões aninhadas, incluindo sessões que Claude Code gera, relatam esses servidores como"mcp"
source: De onde a decisão veio:"config": Decidido automaticamente sem solicitar, baseado em configurações de projeto, regras de permissão ou negação nas configurações pessoais do usuário, política gerenciada pela empresa, flags--allowedToolsou--disallowedTools, o modo de permissão ativo, uma concessão com escopo de sessão de um prompt anterior na mesma sessão CLI interativa, ou porque a ferramenta é inerentemente segura. O evento não indica qual dessas fontes correspondeu. Claude Code também relata"config"quando a própria requisição de prompt de permissão falha, por exemplo quando o callbackcanUseTooldo Agent SDK ou a ferramenta--permission-prompt-toolretorna um resultado inválido, ou quando o stream de entrada fecha enquanto a requisição está pendente. Antes da v2.1.216, Claude Code relatava essas falhas como"user_reject"."hook": Um hookPreToolUseouPermissionRequestretornou a decisão."user_permanent": Emitido quando o usuário escolheu “Sim, e não pergunte novamente para …” em um prompt de permissão, que salva uma regra de permissão em suas configurações pessoais. Na CLI interativa isto é emitido apenas para essa escolha em si; chamadas posteriores que correspondem à regra salva emitem"config"em vez disso. Em sessões Agent SDK ou não-interativas-p, tanto a escolha inicial quanto correspondências posteriores de regra emitem"user_permanent". Tratado como uma aceitação."user_temporary": Emitido quando o usuário escolheu “Sim” em um prompt de permissão para uma aprovação única, ou escolheu uma opção que concede acesso pelo resto da sessão em um prompt de edição ou leitura de arquivo. Na CLI interativa isto é emitido apenas para a escolha em si; chamadas posteriores permitidas por essa concessão com escopo de sessão emitem"config"em vez disso. Em sessões Agent SDK ou não-interativas-p, tanto a escolha quanto correspondências posteriores emitem"user_temporary". Tratado como uma aceitação."user_abort": Emitido quando o usuário descartou o prompt de permissão sem responder. Em sessões Agent SDK e não-interativas-p, isto inclui interromper o turno enquanto uma requisição de permissãocanUseToolou--permission-prompt-toolestá pendente; antes da v2.1.216, Claude Code relatava essa interrupção como"user_reject". Tratado como uma rejeição."user_reject": Emitido quando o usuário escolheu “Não” quando solicitado. Na CLI interativa isto é emitido apenas para essa escolha em si; chamadas que correspondem a uma regra de negação nas configurações pessoais do usuário emitem"config"em vez disso. Em sessões Agent SDK ou não-interativas-p, chamadas que correspondem a uma regra de negação em configurações pessoais emitem"user_reject". Tratado como uma rejeição.
tool_parameters(quandoOTEL_LOG_TOOL_DETAILS=1): String JSON contendo parâmetros específicos da ferramenta. Mesma forma que o evento de resultado de ferramenta, menos campos pós-execução comogit_commit_id. Os valores podem diferir detool_resultpara uma chamada aceita se a decisão de permissão reescreve a entrada da ferramenta viaupdatedInput. Use este atributo para ver qual comando foi rejeitado quandodecisioné"reject".- Para ferramentas
"sdk_host_builtin_mcp":mcp_server_nameemcp_tool_namesão incluídos mesmo quandoOTEL_LOG_TOOL_DETAILSestá desativado, porque a aplicação host define esses nomes; sem eles, uma chamada rejeitada para um desses servidores integrados seria não atribuível no stream padrão. Para servidores MCP configurados pelo usuário, otool_namedo evento é sempre o literal"mcp_tool", e os nomes do servidor e ferramenta aparecem apenas emtool_parameterscom a flag ativada; conteúdo de argumento requer a flag em todos os lugares. Requer Claude Code v2.1.214 ou posterior - Para ferramenta Bash: inclui
bash_command,full_command,timeout,description,dangerouslyDisableSandbox. A ferramenta bash do workspace do aplicativo desktop também relatatool_namecomoBash, mas inclui apenasbash_command,full_command, etimeout - Para ferramentas MCP: inclui
mcp_server_name,mcp_tool_name - Para ferramenta Skill: inclui
skill_name - Para ferramenta Agent ou ferramenta Task legada: inclui
subagent_type
- Para ferramentas
Evento de mudança de modo de permissão
Registrado quando o modo de permissão muda, por exemplo de ciclagemShift+Tab, saída do modo de plano, ou uma verificação de gate de modo automático.
Nome do Evento: claude_code.permission_mode_changed
Atributos:
- Todos os atributos padrão
event.name:"permission_mode_changed"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosfrom_mode: O modo de permissão anterior, por exemplo"default","plan","acceptEdits","auto", ou"bypassPermissions"to_mode: O novo modo de permissãotrigger: O que causou a mudança. Um de"shift_tab","exit_plan_mode","auto_gate_denied", ou"auto_opt_in". Ausente quando a transição origina do SDK ou bridge
Evento de autenticação
Registrado quando/login ou /logout é concluído.
Nome do Evento: claude_code.auth
Atributos:
- Todos os atributos padrão
event.name:"auth"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosaction:"login"ou"logout"success:"true"ou"false"auth_method: Método de autenticação, como"oauth"error_category: Tipo de erro categórico quando a ação falhou. A mensagem de erro bruta nunca é incluídastatus_code: Código de status HTTP como uma string quando a ação falhou com um erro HTTP
Evento de conexão do servidor MCP
Registrado quando um servidor MCP se conecta, desconecta, ou falha em conectar. Nome do Evento:claude_code.mcp_server_connection
Atributos:
- Todos os atributos padrão
event.name:"mcp_server_connection"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosstatus:"connected","failed", ou"disconnected"transport_type: Transporte do servidor, como"stdio","sse", ou"http"server_scope: Escopo no qual o servidor está configurado, como"user","project", ou"local"duration_ms: Duração da tentativa de conexão em milissegundoserror_code: Código de erro quando a conexão falhouis_plugin:truequando o servidor é fornecido por um plugin,falsecaso contrárioplugin_id_hash(quandois_pluginétrue): Hash estável do nome do plugin e marketplace, para agrupar eventos por plugin sem expor o nome. Claude Code o computa conforme descrito no evento de plugin carregadoplugin.name(quandois_pluginétrue): Nome do plugin que fornece o servidor. Para plugins de terceiros isto é a string literal"third-party"a menos queOTEL_LOG_TOOL_DETAILS=1; isto protege nomes de plugins de terceiros de aparecerem em logs por padrão. Plugins de fontes oficiais da Anthropic são sempre identificados por nome. Os atributosplugin_id_hasheplugin.namefluem para seu próprio backend de monitoramento e não são enviados para a Anthropicserver_name(quandoOTEL_LOG_TOOL_DETAILS=1): Nome do servidor configuradoerror(quandoOTEL_LOG_TOOL_DETAILS=1): Mensagem de erro completa quando a conexão falhou
Evento de erro interno
Registrado quando Claude Code captura um erro interno inesperado. Apenas o nome da classe de erro e um código estilo errno são registrados. A mensagem de erro e stack trace nunca são incluídos. Este evento não é emitido ao executar contra Amazon Bedrock, Google Cloud’s Agent Platform, ou Microsoft Foundry, ou quandoDISABLE_ERROR_REPORTING está definido.
Nome do Evento: claude_code.internal_error
Atributos:
- Todos os atributos padrão
event.name:"internal_error"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventoserror_name: Nome da classe de erro, como"TypeError"ou"SyntaxError"error_code: Código errno do Node.js como"ENOENT"quando presente no erro
Evento de plugin instalado
Registrado quando um plugin termina de instalar, tanto do comando CLIclaude plugin install quanto da UI interativa /plugin.
Nome do Evento: claude_code.plugin_installed
Atributos:
- Todos os atributos padrão
event.name:"plugin_installed"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosmarketplace.is_official:"true"se o marketplace é um marketplace oficial da Anthropic,"false"caso contrárioinstall.trigger:"cli"ou"ui"plugin.name: Nome do plugin instalado. Para marketplaces de terceiros isto é incluído apenas quandoOTEL_LOG_TOOL_DETAILS=1plugin.version: Versão do plugin quando declarada na entrada do marketplace. Para marketplaces de terceiros isto é incluído apenas quandoOTEL_LOG_TOOL_DETAILS=1marketplace.name: Marketplace do qual o plugin foi instalado. Para marketplaces de terceiros isto é incluído apenas quandoOTEL_LOG_TOOL_DETAILS=1
Evento de plugin carregado
Registrado uma vez por plugin habilitado no início da sessão. Use este evento para inventariar quais plugins estão ativos em sua frota, como complemento aplugin_installed que registra a ação de instalação em si.
Nome do Evento: claude_code.plugin_loaded
Atributos:
- Todos os atributos padrão
event.name:"plugin_loaded"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosplugin.name: nome do plugin. Para plugins fora do marketplace oficial e pacote integrado o valor é"third-party"a menos queOTEL_LOG_TOOL_DETAILS=1marketplace.name: marketplace do qual o plugin foi instalado, quando conhecido. Redatado para"third-party"sob a mesma condição queplugin.nameplugin.version: versão do manifesto do plugin. Incluído apenas quando o nome não é redatado e o manifesto declara uma versãoplugin.scope: categoria de proveniência para o plugin:"official","community","org","user-local", ou"default-bundle"enabled_via: como o plugin veio a ser habilitado:"default-enable","org-policy","admin-install","seed-mount", ou"user-install". O valor"admin-install"significa que o plugin está definido como obrigatório ou auto-instalação para sua organização em Configurações da Organização > Plugins & skills. Antes da v2.1.246, Claude Code relatava esses plugins como"user-install"ou"seed-mount"plugin_id_hash: hash determinístico do nome do plugin e marketplace, enviado apenas para seu exportador configurado. Permite contar os plugins de terceiros distintos carregados em sua frota sem registrar seus nomes. Para plugins sincronizados de claude.ai, Claude Code faz hash do nome do plugin com o nome do marketplace que claude.ai relata para o plugin, ou comsyncedcaso contrário. Antes da v2.1.246, Claude Code não usava o nome do marketplace que claude.ai relata no hashhas_hooks: se o plugin contribui hookshas_mcp: se o plugin contribui servidores MCPhost_owned_mcp:truequando o host SDK gerencia as conexões MCP deste plugin e Claude Code pulou a leitura da configuração do servidor MCP do plugin,falsecaso contrário. Requer Claude Code v2.1.172 ou posteriorskill_path_count: número de diretórios de skill que o plugin declaracommand_path_count: número de diretórios de comando que o plugin declaraagent_path_count: número de diretórios de agente que o plugin declarasafe_mode:"true"quando a sessão foi iniciada com--safe-mode,"false"caso contrário. Em modo seguro este evento relata apenas inventário configurado; os comandos, skills, hooks e servidores MCP do plugin não carregam. Requer Claude Code v2.1.169 ou posterior
Evento de skill ativada
Registrado quando uma skill é invocada, seja Claude a chama através da ferramenta Skill ou você a executa como um comando/.
Nome do Evento: claude_code.skill_activated
Atributos:
- Todos os atributos padrão
event.name:"skill_activated"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosskill.name: Nome da skill. Para skills definidas pelo usuário e de plugins de terceiros o valor é o placeholder"custom_skill"a menos queOTEL_LOG_TOOL_DETAILS=1invocation_trigger: Como a skill foi acionada ("user-slash","claude-proactive", ou"nested-skill")skill.source: De onde a skill foi carregada (por exemplo,"bundled","userSettings","projectSettings","plugin")skill.kind:"workflow"quando a skill é uma skill de workflow. Ausente caso contrárioplugin.name(quandoOTEL_LOG_TOOL_DETAILS=1ou o plugin é de um marketplace oficial): Nome do plugin proprietário quando a skill é fornecida por um pluginmarketplace.name(quandoOTEL_LOG_TOOL_DETAILS=1ou o plugin é de um marketplace oficial): Marketplace do qual o plugin proprietário foi instalado, quando a skill é fornecida por um plugin
Evento de menção @
Registrado quando Claude Code resolve uma menção@ em um prompt. Nem toda menção emite um evento: caminhos de saída antecipada como negações de permissão, arquivos superdimensionados, anexos de referência PDF e falhas de listagem de diretório retornam sem registrar.
Nome do Evento: claude_code.at_mention
Atributos:
- Todos os atributos padrão
event.name:"at_mention"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosmention_type: Tipo de menção ("file","directory","agent","mcp_resource","peer"). O valor"peer"significa que você mencionou uma de suas outras sessões Claude Code. Requer Claude Code v2.1.232 ou posteriorsuccess: Se a menção foi resolvida com sucesso ("true"ou"false")
Evento de retentativas de API esgotadas
Registrado uma vez quando uma requisição de API falha após mais de uma tentativa. Emitido junto com o eventoapi_error final.
Nome do Evento: claude_code.api_retries_exhausted
Atributos:
- Todos os atributos padrão
event.name:"api_retries_exhausted"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosmodel: Modelo usadoerror: Mensagem de erro finalstatus_code: Código de status HTTP como um número. Ausente para erros não-HTTP.total_attempts: Número total de tentativas feitastotal_retry_duration_ms: Tempo total de wall-clock em todas as tentativasspeed:"fast"ou"normal"
Evento de hook registrado
Registrado uma vez por hook configurado no início da sessão. Use este evento para inventariar quais hooks estão ativos em sua frota, como complemento aos eventos por execuçãohook_execution_start e hook_execution_complete.
Nome do Evento: claude_code.hook_registered
Atributos:
- Todos os atributos padrão
event.name:"hook_registered"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventoshook_event: tipo de evento de hook, como"PreToolUse"ou"PostToolUse"hook_type: tipo de implementação de hook:"command","prompt","mcp_tool","http", ou"agent"hook_source: onde o hook é definido:"userSettings","projectSettings","localSettings","flagSettings","policySettings", ou"pluginHook"safe_mode:"true"quando a sessão foi iniciada com--safe-mode,"false"caso contrário. Requer Claude Code v2.1.169 ou posteriorhook_matcher(quandoOTEL_LOG_TOOL_DETAILS=1): a string de matcher da configuração do hook, quando uma está definidaplugin.name(quandohook_sourceé"pluginHook"): nome do plugin contribuidor. Para plugins fora do marketplace oficial e pacote integrado o valor é"third-party"a menos queOTEL_LOG_TOOL_DETAILS=1plugin_id_hash(quandohook_sourceé"pluginHook"): hash determinístico do nome do plugin e marketplace, enviado apenas para seu exportador configurado. Permite contar plugins contribuidores distintos sem registrar seus nomes. Claude Code o computa conforme descrito no evento de plugin carregado
Evento de início de execução de hook
Registrado quando um ou mais hooks começam a executar para um evento de hook. Nome do Evento:claude_code.hook_execution_start
Atributos:
- Todos os atributos padrão
event.name:"hook_execution_start"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventoshook_event: Tipo de evento de hook, como"PreToolUse"ou"PostToolUse"hook_name: Nome completo do hook incluindo matcher, como"PreToolUse:Write"num_hooks: Número de comandos de hook correspondentesmanaged_only:"true"quando apenas hooks de política gerenciada são permitidoshook_source:"policySettings"ou"merged"safe_mode:"true"quando a sessão foi iniciada com--safe-mode,"false"caso contrário. Requer Claude Code v2.1.169 ou posteriorhook_definitions: Configuração de hook serializada em JSON. Incluído apenas quando rastreamento beta detalhado eOTEL_LOG_TOOL_DETAILS=1estão ambos habilitados
Evento de conclusão de execução de hook
Registrado quando todos os hooks para um evento de hook terminaram. Nome do Evento:claude_code.hook_execution_complete
Atributos:
- Todos os atributos padrão
event.name:"hook_execution_complete"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventoshook_event: Tipo de evento de hookhook_name: Nome completo do hook incluindo matchernum_hooks: Número de comandos de hook correspondentesnum_success: Contagem que completou com sucessonum_blocking: Contagem que retornou uma decisão de bloqueionum_non_blocking_error: Contagem que falhou sem bloquearnum_cancelled: Contagem cancelada antes da conclusãototal_duration_ms: Duração de wall-clock de todos os hooks correspondentesstdout_chars: Total de caracteres de stdout em todos os hooks correspondentes que tiveram sucesso. Requer Claude Code v2.1.280 ou posterioradditional_context_chars: Total de caracteres deadditionalContextretornados pelos hooks correspondentes. Requer Claude Code v2.1.280 ou posteriorsystem_message_chars: Total de caracteres desystemMessageretornados pelos hooks correspondentes. Requer Claude Code v2.1.280 ou posteriorinitial_user_message_chars: Total de caracteres deinitialUserMessageretornados pelos hooks correspondentes. Requer Claude Code v2.1.280 ou posteriornum_outputs_persisted: Número de saídas de hook acima do limite de 10.000 caracteres que Claude Code salvou em um arquivo. Requer Claude Code v2.1.280 ou posteriormanaged_only:"true"quando apenas hooks de política gerenciada são permitidoshook_source:"policySettings"ou"merged"safe_mode:"true"quando a sessão foi iniciada com--safe-mode,"false"caso contrário. Requer Claude Code v2.1.169 ou posteriorhook_definitions: Configuração de hook serializada em JSON. Incluído apenas quando rastreamento beta detalhado eOTEL_LOG_TOOL_DETAILS=1estão ambos habilitados
Evento de métricas de plugin de hook
Registrado quando um hook de plugin do marketplace oficial emite métricas por invocação. Apenas plugins instalados de um marketplace oficial da Anthropic podem emitir estes. Plugins de marketplace de terceiros e hooks configurados pelo usuário não emitem para este evento. Use este evento para monitorar comportamento de plugin como taxas de descoberta, custos e durações de sua própria pilha de observabilidade. Nome do Evento:claude_code.hook_plugin_metrics
Atributos:
- Todos os atributos padrão
event.name:"hook_plugin_metrics"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosplugin_id: identificador do plugin em forma<name>@<marketplace>hook_event: tipo de evento de hook que emitiu as métricas- Até 20 chaves de métrica emitidas pelo plugin. Os nomes correspondem a
^[a-z][a-z0-9_]{0,39}$. Os valores são booleano ou número.
Evento de compactação
Registrado quando a compactação de conversa é concluída. Nome do Evento:claude_code.compaction
Atributos:
- Todos os atributos padrão
event.name:"compaction"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventostrigger:"auto"ou"manual"success:"true"ou"false"duration_ms: Duração da compactaçãopre_tokens: Contagem aproximada de tokens antes da compactaçãopost_tokens: Contagem aproximada de tokens após compactaçãoerror: Mensagem de erro quando a compactação falhouprecompute_reuse: Definido apenas quandotriggeré"manual". A compactação automática pode preparar um resumo em background antes da janela de contexto ficar cheia, e este atributo registra se/compactreutilizou esse resumo preparado."hit"significa que foi reutilizado;"miss_custom_instructions","miss_hook", e"miss_not_ready"dão a razão pela qual um resumo fresco foi computado em vez disso. Requer Claude Code v2.1.153 ou posterior
Evento de conclusão de subagente
Registrado quando um subagente termina e retorna seu resultado para a conversa que o iniciou. Use-o para agregar uso de ferramenta e tempo de execução por tipo de subagente; para agregações de token ou custo, use o contador de tokens e contador de custo filtrados paraquery_source "subagent", já que o total_tokens deste evento cobre apenas a requisição final. A categoria "subagent" também conta requisições de hooks baseados em agente, que não emitem evento de subagente.
Nome do Evento: claude_code.subagent_completed
Atributos:
- Todos os atributos padrão
event.name:"subagent_completed"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosagent_type: O tipo de subagente. Nomes de agentes integrados e agentes de plugins do marketplace oficial aparecem literalmente; outros nomes de agente são substituídos por"custom"a menos queOTEL_LOG_TOOL_DETAILS=1esteja definidoagent.source: De onde a definição do agente veio:built-in,plugin, ou a fonte de configurações que definiu um agente personalizado, comouserSettingsouprojectSettingsis_built_in: Se o subagente é um tipo de agente integradois_async: Se o subagente executou em backgroundtotal_tokens: A pegada de token da requisição final de API do subagente: tokens de entrada, criação de cache, leitura de cache e saída dessa única requisição, aproximadamente o tamanho do contexto do subagente na conclusão. Não uma soma em toda a execuçãototal_tool_uses: Número de chamadas de ferramenta que o subagente fez em toda a execuçãoduration_ms: Tempo de execução em milissegundosmodel: O modelo que o subagente foi resolvido para executarfinal_model: O modelo que produziu a resposta final do subagente, que difere demodelapós uma mudança no meio da execução como um fallback. Requer Claude Code v2.1.212 ou posteriormodel_swapped: Se mais de um modelo serviu as requisições do subagente. Requer Claude Code v2.1.212 ou posteriorplugin_id_hash,plugin.name: Presente para agentes fornecidos por plugin. Nomes de plugins do marketplace oficial aparecem literalmente; outros nomes de plugin são substituídos por"third-party"a menos queOTEL_LOG_TOOL_DETAILS=1esteja definido
Evento de pesquisa de feedback
Registrado quando uma pesquisa de qualidade de sessão é mostrada ou respondida. Veja Pesquisas de qualidade de sessão para o que as pesquisas coletam e como controlá-las. Nome do Evento:claude_code.feedback_survey
Atributos:
- Todos os atributos padrão
event.name:"feedback_survey"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosevent_type: Evento do ciclo de vida da pesquisa, por exemplo"appeared","responded", ou"transcript_prompt_appeared"appearance_id: ID único vinculando os eventos emitidos para uma instância de pesquisasurvey_type: Qual pesquisa produziu o evento."session"é o prompt de classificação “Como Claude está se saindo?”response: A seleção do usuário em eventosrespondedenabled_via_override:truequandoCLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTELestá definido. Emitido como um booleano, não uma string. Presente em eventos de pesquisasession. Filtre neste atributo para confirmar que a substituição é aplicada em uma frota
Evento de varredura de retenção
Registrado uma vez por execução da varredura de limpeza de retenção, que deleta transcrições de sessão e outros dados de aplicação mais antigos que a configuraçãocleanupPeriodDays. Claude Code executa a varredura em background no máximo uma vez por sessão, e uma execução que não deleta nada ainda emite o evento. Se Claude Code executou a varredura em qualquer sessão na mesma máquina nos últimos 24 horas, ele atrasa a varredura desta sessão por pelo menos 10 minutos, então uma sessão que sai mais cedo não emite nada. Quando você executa claude -p com --bare, Claude Code não executa a varredura e não emite nada.
Como todo evento OTel nesta página, ele vai apenas para o backend de telemetria que você configura. Requer Claude Code v2.1.227 ou posterior.
Quando Claude Code não pode determinar com segurança o período de retenção, ele pausa a varredura e emite o evento com result definido para "skipped" e um skip_reason. Quando configurações gerenciadas definem cleanupPeriodDays, o valor gerenciado fixa o período de retenção e a varredura é executada mesmo quando um arquivo de configurações em um escopo de prioridade mais baixa está quebrado ou inválido. Quando managed-settings.json em si não pode ser lido, Claude Code ainda pausa a varredura a menos que o nível gerenciado forneça cleanupPeriodDays de outro lugar, como configurações gerenciadas pelo servidor ou um drop-in managed-settings.d/ ao lado do arquivo quebrado. Os atributos do contador de exclusão estão presentes apenas quando result é "complete".
Nome do Evento: claude_code.retention_sweep
Atributos:
- Todos os atributos padrão
event.name:"retention_sweep"event.timestamp: Timestamp ISO 8601event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventosresult:"complete"quando a varredura foi executada,"skipped"quando Claude Code a pausouperiod_days: O valorcleanupPeriodDaysdas configurações mescladas, em dias, ou30quando nenhuma fonte o define. Em eventos pulados, o valor que a varredura teria usado, computado das fontes de configurações que Claude Code pôde lerused_default:"true"quando nenhuma fonte de configurações legível definecleanupPeriodDays,"false"caso contrário. Em eventos completos,"true"significa que o padrão de 30 dias foi aplicadoskip_reason: Por que Claude Code pausou a varredura. Presente apenas quandoresulté"skipped":"user_source_disabled": Configurações do usuário são excluídas, por exemplo pela flag--setting-sourcesou opçãosettingSourcesdo SDK, e nenhuma fonte habilitada fornececleanupPeriodDays"settings_unknowable": Um arquivo de configurações não pôde ser lido ou analisado, entãocleanupPeriodDaysoudesktopSessionCleanupPeriodDayspode estar definido para um valor que Claude Code não pode ver"settings_invalid_key_set": Configurações têm erros de validação ecleanupPeriodDaysoudesktopSessionCleanupPeriodDaysestá explicitamente definido, então fazer fallback para o padrão poderia deletar ou manter arquivos contra essa configuração
transcripts_deleted: Número de transcrições de sessão, os arquivos~/.claude/projects/*/*.jsonlde nível superior, que a varredura deletoutranscripts_exempted_desktop: Número de transcrições passadas do período de retenção que a varredura manteve sob a regra de Claude Desktop e Cowork. Estes não contam parafiles_past_cutoff. Requer Claude Code v2.1.248 ou posteriorsession_files_deleted: Número de artefatos que a varredura de arquivos de sessão deletou: transcrições mais arquivos complementares por sessão como sidecars, gravações e resultados de ferramentasartifacts_deleted: Total de itens que a varredura deletou em todos os diretórios de dados que cobre, incluindo os arquivos de sessão. Algumas varreduras contam uma árvore de diretório removida inteira como um item e algumas passagens de limpeza não contribuem para o contador, então trate o valor como um piso em vez de uma contagem exata de arquivosfiles_retained_fresh: Arquivos inspecionados e deixados em lugar porque ainda estão dentro do período de retenção. Apenas varreduras por arquivo contam estes, então o valor é um piso; um valor diferente de zero é o estado estável normalfiles_past_cutoff: Arquivos mais antigos que o período de retenção que a varredura falhou em deletar, por exemplo por causa de um erro de permissão ou um arquivo mantido aberto. Um valor acima de zero significa que arquivos sobreviveram ao período de retenção configurado; zero não é prova de que nenhum fez, porque uma remoção falhada de um diretório inteiro conta paraerror_countem vez dissoerror_count: Número de erros que a varredura encontrou ao listar ou deletar arquivos
Evento de configurações gerenciadas resolvidas
Registrado com as configurações gerenciadas que uma sessão resolveu: uma vez no início da sessão, novamente quando as configurações gerenciadas ou o auxiliar de política mudam de estado durante a sessão, e quando Claude Code recusa iniciar ou termina a sessão por uma das razões que o atributoerror.type lista.
Use este evento para encontrar máquinas executando em uma fonte gerenciada inesperada, máquinas cujo auxiliar de política está falhando, e a razão pela qual uma máquina recusou iniciar.
Requer Claude Code v2.1.274 ou posterior.
Por padrão, o evento carrega as fontes gerenciadas e o estado do auxiliar de política mas não as configurações em si. Para adicionar o atributo managed_settings.settings redatado e o digest managed_settings.resolved_sha256, defina OTEL_LOG_MANAGED_SETTINGS=1:
- Defina-o no bloco
envde configurações gerenciadas, configurações do usuário, ou--settings, ou no ambiente com o qual você inicia Claude Code. Um valor em configurações de projeto ou local não o ativa, porque um repositório clonado pode escrevê-los. - Configurações gerenciadas pelo servidor podem defini-lo sem mostrar o diálogo de aprovação de segurança, porque a variável apenas adiciona sua própria política redatada da organização a um evento que sua organização já recebe.
claude_code.managed_settings_resolved
Atributos:
- Todos os atributos padrão
-
event.name:"managed_settings_resolved" -
event.timestamp: Timestamp ISO 8601 -
event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos -
managed_settings.trigger:"startup"para o evento de início de sessão,"change"quando as configurações gerenciadas ou o estado do auxiliar de política mudaram mais tarde na sessão, ou"refused"quando uma política de configurações gerenciadas parou a sessão. Claude Code envia um eventochangeapenas quando um atributo difere do último evento que enviou, e um valor de configuração alterado conta mesmo quandoOTEL_LOG_MANAGED_SETTINGSestá desativado -
error.type: por que Claude Code parou a sessão. Presente apenas em eventosrefused:"helper_failed": uma execução do auxiliar de política falhou"policy_invalid": as configurações gerenciadas contêm um erro que impede Claude Code de iniciar, ou uma fonte de administrador falhou em carregar, então Claude Code não pode verificar a imposição de login da organização"consent_rejected": o usuário rejeitou o diálogo de aprovação de segurança para configurações gerenciadas pelo servidor"force_refresh_failed": a busca de configurações queforceRemoteSettingsRefreshrequer falhou"gateway_rejected": um gateway de aplicativos Claude respondeu ao carregamento de configurações gerenciadas com HTTP 403"version_below_minimum": esta versão de Claude Code está abaixo derequiredMinimumVersionou acima derequiredMaximumVersion"_OTHER": o carregamento de configurações gerenciadas do gateway de aplicativos Claude falhou por outro motivo
-
managed_settings.sources: cada fonte gerenciada que entrega pelo menos uma chave de política, prioridade mais alta primeiro, incluindo fontes cujas chaves não entram em efeito sobfirst-wins. Os valores são"remote","plist"ou"hklm"para a política MDM ou nível de SO,"file"para arquivos de configurações gerenciadas e drop-ins,"parent"quando um host de incorporação fornece configurações, e"hkcu"para o valor de registro HKCU do Windows quando Claude Code o lê. Uma fonte que carrega apenas chaves de controle, ou que Claude Code não pôde ler, não está listada. Emitido como um array de strings, vazio quando nenhuma fonte gerenciada entrega uma chave de política -
managed_settings.source_behavior: o valormanagedSourcesBehaviorque Claude Code leu,"first-wins"ou"merge"."first-wins"quando nenhuma fonte define a chave -
managed_settings.helper.state: estado do auxiliar de política que a fonte MDM ou arquivo selecionada configura:"ok": a saída do auxiliar serve como as configurações gerenciadas"bad_path","not_a_file","exit_nonzero","timed_out","oversize","parse_failed","envelope_invalid", ou"schema_rejected": a última execução do auxiliar falhou. Falhas do auxiliar descreve os casos"none": nenhum auxiliar está configurado, ou a fonte que o configura não é uma política MDM ou arquivo de configurações gerenciadas
-
managed_settings.helper.applied:"output"enquanto a saída do próprio auxiliar serve como as configurações gerenciadas,"none"quando não serve -
managed_settings.helper.entry:"policyHelper"quando Claude Code selecionou umpolicyHelper. Ausente quando selecionou nenhum auxiliar -
managed_settings.helper.path: opathconfigurado do auxiliar. Presente sempre que Claude Code selecionou um auxiliar, independentemente deOTEL_LOG_MANAGED_SETTINGSestar definido -
managed_settings.resolved_sha256(quandoOTEL_LOG_MANAGED_SETTINGS=1): SHA-256 das configurações gerenciadas resolvidas antes da redação, serializadas como JSON com chaves ordenadas recursivamente e sem espaço em branco. Máquinas com o mesmo digest executam a mesma política. Claude Code envia o digest apenas com o opt-in porque uma política curta pode ser recuperada fazendo hash de suposições. Ausente quando nenhuma configuração gerenciada foi resolvida, e em eventosrefused -
managed_settings.settings(quandoOTEL_LOG_MANAGED_SETTINGS=1): os nomes e forma das configurações gerenciadas resolvidas como uma string JSON, com os valores redatados. Ausente em eventosrefused. Claude Code o constrói a partir de seu esquema de configurações:- Um nome de configuração que o esquema declara é exportado, e uma chave que não declara é deixada de fora
- Booleanos, números e valores de string que o esquema restringe a um conjunto fixo de opções, como
permissions.defaultMode, são exportados como estão.sandbox.network.httpProxyPortesandbox.network.socksProxyPortsão exportados como"[REDACTED]" - Toda outra string, como
model,apiKeyHelper, todo valorenv, toda URL e todo comando, é exportado como"[REDACTED]" - Os nomes de entrada de mapas, como nomes de variáveis
enve IDs de plugin, são exportados como estão. Uma configuração cujas entradas o esquema não digita, comovimInsertModeRemaps, é exportada como um único"[REDACTED]", esandbox.ignoreViolationsé exportado como uma lista de suas listas de caminho sem os padrões de comando - Uma lista mantém seu comprimento, com cada entrada redatada pelas mesmas regras
- Uma regra
permissions.allow,permissions.deny, oupermissions.aské exportada como seu nome de ferramenta com o conteúdo redatado, comoRead([REDACTED]), quando a ferramenta é integrada nesta versão de Claude Code ou é uma referênciamcp__comomcp__jira__create_issue. Qualquer outra regra é exportada como"[REDACTED]" - Hooks seguem as mesmas regras, então campos de opção fixa e numéricos como
typeetimeoutmostram, enquanto cada comando, URL,matcher, e condiçãoifé exportada como"[REDACTED]"
apiKeyHelper, duas variáveisenv, e uma regra de negação são exportadas como{"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}. Claude Code corta o valor em 8 KB de UTF-8, e o valor cortado não é JSON válido -
managed_settings.settings_truncated(quandomanaged_settings.settingsestá presente):truequando Claude Code cortoumanaged_settings.settingsem 8 KB,falsecaso contrário. Emitido como um booleano, não uma string
Interpretar dados de métricas e eventos
As métricas e eventos exportados suportam uma gama de análises:Monitoramento de uso
Monitoramento de custo
A métricaclaude_code.cost.usage ajuda com:
- Rastreamento de tendências de uso entre equipes ou indivíduos
- Identificação de sessões de alto uso para otimização
- Atribuição de gastos a skills, plugins ou tipos de subagente específicos via atributos
skill.name,plugin.nameeagent.name
As métricas de custo são aproximações. Para dados de faturamento oficiais, consulte seu provedor de API (Claude Console, Amazon Bedrock ou Google Cloud’s Agent Platform).
ANTHROPIC_BASE_URL transmite uso progressivamente em vários frames. Antes da v2.1.214, streams que carregavam uso em mais de um frame inflacionavam claude_code.cost.usage e claude_code.token.usage por aproximadamente uma solicitação completa extra por frame extra.
Alertas e segmentação
Alertas comuns a considerar:- Picos de custo
- Consumo incomum de tokens
- Alto volume de sessão de usuários específicos
model está disponível em claude_code.token.usage, claude_code.cost.usage e a partir da v2.1.172, claude_code.lines_of_code.count.
Divisões por modelo de commits podem ser apenas aproximadas unindo contra as métricas de token ou custo em session.id, já que uma sessão pode abranger vários modelos. Filtre o lado do token ou custo para linhas onde query_source é "main" para que solicitações auxiliares e de subagente não atribuam os commits da sessão a um modelo que não os fez.
Detectar esgotamento de tentativas
Claude Code retenta solicitações de API falhadas internamente e emite um único eventoclaude_code.api_error apenas depois de desistir, então o evento em si é o sinal terminal para essa solicitação. Tentativas de repetição intermediárias não são registradas como eventos separados.
O atributo attempt no evento registra o número total de tentativas. CLAUDE_CODE_MAX_RETRIES tem como padrão 10 e é limitado a 15. A partir da v2.1.199, você pode definir CLAUDE_CODE_RETRY_WATCHDOG para aumentar o padrão e remover o limite.
Quando a solicitação esgota todas as tentativas em um erro transitório, attempt é igual a um a mais do que esse limite efetivo: 11 por padrão, e nunca mais de 16 a menos que o watchdog esteja definido. Um valor menor indica um erro não retentável, como uma resposta 400, ou uma causa com seu próprio orçamento de tentativas menor. Por exemplo, Claude Code retenta uma falha ao carregar credenciais da AWS ou Google Cloud no máximo duas vezes.
Para distinguir uma sessão que se recuperou de uma que travou, agrupe eventos por session.id e verifique se um evento api_request posterior existe após o erro.
Análise de eventos
Os dados de eventos descrevem cada interação do Claude Code em detalhes: Padrões de uso de ferramentas: analise eventos de resultado de ferramentas para identificar:- Ferramentas mais frequentemente usadas
- Taxas de sucesso da ferramenta
- Tempos médios de execução da ferramenta
- Padrões de erro por tipo de ferramenta
Auditar eventos de segurança
Os eventos OpenTelemetry são a fonte de dados de auditoria para atividade do Claude Code. Cada evento carrega atributos de identidade que vinculam chamadas de ferramenta, atividade MCP e decisões de permissão de volta ao usuário que as acionou. O exportador de logs OTLP pode entregar esses eventos a qualquer plataforma Security Information and Event Management (SIEM) com um receptor OTLP, ou a um OpenTelemetry Collector que encaminha para seu SIEM.Atribuir ações a usuários
Os atributos padrão em cada evento incluem a identidade do usuário autenticado:user.email, user.account_uuid, user.account_id e organization.id quando conectado com uma conta Claude ou, em uma sessão na nuvem, quando as credenciais da própria sessão as carregam, mais user.id e o session.id por sessão. user.id é um identificador com escopo de instalação, exceto em sessões do gateway de aplicativos Claude, onde é o assunto do IdP do token emitido pelo gateway.
Chamadas de ferramenta MCP, comandos Bash e edições de arquivo são, portanto, atribuídas ao desenvolvedor que iniciou a sessão. Claude Code não atua sob uma conta de serviço separada; a identidade registrada em cada evento é a própria conta Claude do desenvolvedor, ou a identidade do IdP do desenvolvedor em uma sessão do gateway de aplicativos Claude.
Quando Claude Code autentica com uma chave de API direta, ou contra Amazon Bedrock, Google Cloud’s Agent Platform ou Microsoft Foundry, não há conta Claude na sessão e apenas user.id e session.id são preenchidos. Nessas implantações, anexe identidade do usuário você mesmo com OTEL_RESOURCE_ATTRIBUTES, definido por usuário através do arquivo de configurações gerenciadas ou um wrapper de inicialização. Sessões do gateway de aplicativos Claude não precisam de nada disso: a CLI marca a identidade do IdP automaticamente, conforme descrito em Atributos padrão.
Auditoria de atividade MCP
Para capturar atividade do servidor MCP com detalhe completo de chamada, ative o exportador de logs e definaOTEL_LOG_TOOL_DETAILS=1. Cada operação MCP então produz eventos estruturados que carregam o nome do servidor, nome da ferramenta e argumentos de chamada junto com os atributos de identidade padrão:
Sem
OTEL_LOG_TOOL_DETAILS, esses eventos descartam o detalhe de identificação:
tool_result: mantémmcp_server_scopee umtool_namereduzido ao literal"mcp_tool"para servidores configurados pelo usuário, omite conteúdo de argumentos. Para servidores integrados do Claude Desktop, em sessões que Claude Desktop possui, também mantém o parmcp_server_name/mcp_tool_namedentro detool_parameters, a mesma exceção de autoria de host quetool_decision, exigindo Claude Code v2.1.214 ou posteriortool_decision: mantémtool_sourcee umtool_namereduzido ao literal"mcp_tool"para servidores configurados pelo usuário, omite conteúdo de argumentos. Para servidores integrados do Claude Desktop, em sessões que Claude Desktop possui, também mantém o parmcp_server_name/mcp_tool_namedentro detool_parameters;tool_sourcee o par de nomes exigem Claude Code v2.1.214 ou posteriormcp_server_connection: omiteserver_namee a mensagem de erro, mas mantémis_plugin,plugin_id_hasheplugin.name, com nomes de plugins não-Anthropic reduzidos ao literal"third-party", para que servidores fornecidos por plugins permaneçam distinguíveis sem registro detalhado
Mapear questões de segurança para eventos
Ao construir regras de detecção, procure o sinal que você deseja monitorar e consulte seu backend para o evento correspondente e atributos:
Claude Code emite apenas o fluxo de eventos bruto. Detecção de anomalias, linha de base, correlação entre sessões e alertas são responsabilidade do seu SIEM ou backend de observabilidade.
Enviar eventos para um SIEM
AponteOTEL_EXPORTER_OTLP_LOGS_ENDPOINT para o receptor OTLP do seu SIEM, ou para um OpenTelemetry Collector que encaminha para a API de ingestão nativa do seu SIEM. O seguinte exemplo de configurações gerenciadas exporta apenas eventos, com detalhe completo de ferramenta ativado para auditoria MCP e Bash:
claude_code.user_prompt. Se nada chegar, inicie Claude Code com claude --debug-file <path> e verifique esse log para erros de exportação [3P telemetry].
Considerações de backend
Sua escolha de backends de métricas, logs e rastreamentos determina os tipos de análises que você pode realizar:Para métricas
- Bancos de dados de série temporal: Cálculos de taxa, métricas agregadas
- Armazenamentos colunares: Consultas complexas, análise de usuário único
- Plataformas de observabilidade completas: Consultas avançadas, visualização, alertas
Para eventos/logs
- Sistemas de agregação de logs: Busca de texto completo, análise de logs
- Armazenamentos colunares: Análise de eventos estruturados
- Plataformas de observabilidade completas: Correlação entre métricas e eventos
Para rastreamentos
Escolha um backend que suporte armazenamento de rastreamento distribuído e correlação de span:- Sistemas de rastreamento distribuído: Visualização de span, waterfalls de solicitação, análise de latência
- Plataformas de observabilidade completas: Busca de rastreamento e correlação com métricas e logs
Informações de serviço
Todas as métricas e eventos são exportados com os seguintes atributos de recurso:service.name:claude-codepara sessões de terminal,claude-code-desktoppara sessões iniciadas a partir da aba Code no aplicativo Claude Desktopservice.version: Versão atual do Claude Code, ou a versão do aplicativo Desktop para sessões da aba Codeos.type: Tipo de sistema operacional (por exemplo,linux,darwin,windows)os.version: String de versão do sistema operacionalhost.arch: Arquitetura do host (por exemplo,amd64,arm64)wsl.version: Número de versão do WSL (apenas presente ao executar no Windows Subsystem for Linux)- Nome do Medidor:
com.anthropic.claude_code
service.name = claude-code, adicione claude-code-desktop ao filtro para também capturar telemetria de sessões da aba Code.
Recursos de medição de ROI
Para um guia abrangente sobre como medir o retorno sobre investimento para Claude Code, incluindo configuração de telemetria, análise de custo, métricas de produtividade e relatórios automatizados, consulte o Guia de Medição de ROI do Claude Code. Este repositório fornece configurações Docker Compose prontas para uso, configurações Prometheus e OpenTelemetry, e modelos para gerar relatórios de produtividade integrados com ferramentas como Linear.Segurança e privacidade
- A exportação OpenTelemetry para seu backend é opt-in e requer configuração explícita. Para a telemetria operacional separada da Anthropic e como desabilitá-la, consulte Uso de dados
- Conteúdos de arquivo brutos e trechos de código não são incluídos em métricas ou eventos. Os spans de rastreamento são um caminho de dados separado: veja o ponto
OTEL_LOG_TOOL_CONTENTabaixo - Quando autenticado via OAuth,
user.emailé incluído em atributos de telemetria, enviado apenas para o endpoint OTel que você configura, nunca para a Anthropic. Se isso for uma preocupação para sua organização, trabalhe com seu backend de telemetria para filtrar ou reduzir este campo - O conteúdo do prompt do usuário não é coletado por padrão. Apenas o comprimento do prompt é registrado. Para incluir conteúdo do prompt, defina
OTEL_LOG_USER_PROMPTS=1. Sob rastreamento beta detalhado, esta variável alcança mais do que apenas texto de prompt: ela também controla o atributo de spannew_context, que carrega resultados de ferramenta no spanclaude_code.llm_request - O texto de resposta do assistente não é coletado por padrão. Apenas o comprimento da resposta é registrado. Para incluir texto de resposta, defina
OTEL_LOG_ASSISTANT_RESPONSES=1. Como todos os dados OpenTelemetry do Claude Code, o texto de resposta é enviado apenas para o endpoint OTel que você configura, nunca para a Anthropic. Quando esta variável não está definida,OTEL_LOG_USER_PROMPTSé usado como fallback, portanto definaOTEL_LOG_ASSISTANT_RESPONSES=0se você quiser conteúdo de prompt sem conteúdo de resposta - Argumentos de entrada de ferramenta e parâmetros não são registrados por padrão. Para incluí-los, defina
OTEL_LOG_TOOL_DETAILS=1. Para os servidores integrados do Claude Desktop, em sessões que o Claude Desktop possui,tool_decisionetool_resultcarregam o parmcp_server_name/mcp_tool_name, nomes criados pelo host em vez de conteúdo de argumentos, mesmo com a flag desativada. A exceção requer Claude Code v2.1.214 ou posterior. Estes dados são enviados apenas para o endpoint OTEL que você configura, nunca para a Anthropic. Os argumentos ainda podem conter valores sensíveis, portanto configure seu backend de telemetria para filtrar ou reduzir esses atributos conforme necessário. Quando ativado:- Eventos
tool_resultetool_decisionincluem um atributotool_parameterscom comandos Bash, nomes de servidor MCP e ferramenta, e nomes de skill. Campos comofull_commandsão emitidos sem truncamento - Eventos
tool_resultadicionalmente incluem um atributotool_inputcom caminhos de arquivo, URLs, padrões de busca e outros argumentos. Valores individuais com mais de 512 caracteres são truncados e o total é limitado a ~4 K caracteres - Eventos
user_promptincluem ocommand_nameverbatim para comandos customizados, plugin e MCP - Os contadores de custo e token e os eventos
api_request,api_erroreapi_refusalcarregam nomes reais de agente, skill, plugin e servidor MCP e nomes de ferramenta em seus atributos de atribuição - Spans de rastreamento incluem o mesmo atributo
tool_inpute atributos derivados de entrada comofile_path, com o mesmo truncamento quetool_input
- Eventos
- O conteúdo de ferramenta não é registrado em spans de rastreamento por padrão. Para incluí-lo, defina
OTEL_LOG_TOOL_CONTENT=1. O spanclaude_code.toolentão carrega um evento de spantool.outputcom conteúdos de arquivo brutos, saída de comando Bash e o que ferramentas MCP, WebFetch e WebSearch retornam, truncado no limite de conteúdo (60 KB por padrão) por atributo. Resultados de ferramentas MCP, WebFetch e WebSearch requerem Claude Code v2.1.283 ou posterior. O conteúdo de ferramenta também alcança spans através denew_context, cujo controle difere por span. Configure seu backend de telemetria para filtrar ou reduzir esses atributos conforme necessário - Corpos de solicitação e resposta da API Anthropic Messages brutos não são registrados por padrão. Para incluí-los, defina
OTEL_LOG_RAW_API_BODIESem suas configurações de shell, usuário ou gerenciadas. É ignorado em configurações de projeto e local. Os corpos contêm o histórico de conversa completo, incluindo o prompt do sistema, cada turno anterior de usuário e assistente, e resultados de ferramenta, portanto ativar isso implica consentimento para tudo que os outros sinalizadores de conteúdoOTEL_LOG_*revelariam. O Claude Code sempre reduz o conteúdo de pensamento estendido do Claude desses corpos, independentemente de outras configurações. O valor que você define determina como o Claude Code entrega os corpos:-
Com
=1, Claude Code emite eventos de logapi_request_bodyeapi_response_bodypara cada chamada de API. O atributobodydos eventos carrega a carga útil serializada em JSON, truncada no limite de conteúdo (60 KB por padrão) -
Com
=file:<dir>, Claude Code escreve corpos não truncados em arquivos.request.jsone.response.jsonsob esse diretório, e os eventos carregam um caminhobody_refem vez do corpo inline. Envie o diretório com um coletor de log ou sidecar em vez de através do fluxo de telemetria. Para cada resposta bem-sucedida, Claude Code também anexa uma linha aindex.jsonlnesse diretório, vinculando o arquivo de resposta ao arquivo de solicitação que o produziu e à mensagem de transcrição em que se tornou. Cada linha não contém conteúdo de mensagem, e a seção evento de corpo de resposta da API lista seus campos. O arquivo de índice requer Claude Code v2.1.274 ou posterior
-
Com