Pular para o conteúdo principal
Rastreie o uso, custos e atividade de ferramentas do Claude Code em toda a sua organização exportando dados de telemetria através do OpenTelemetry (OTel). Claude Code exporta métricas como dados de série temporal via protocolo de métricas padrão, eventos via protocolo de logs/eventos e, opcionalmente, rastreamentos distribuídos via OpenTelemetry.
Para a Claude API ou Managed Agents, consulte OpenTelemetry para a Claude API.

Início rápido

Configure OpenTelemetry usando variáveis de ambiente:
Para verificar uma configuração que exporta métricas, verifique seu backend para a métrica 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 do OpenTelemetry para todos os utilizadores através do ficheiro de definições geridas. Consulte a precedência de definições para obter mais informações sobre como as definições são aplicadas. Exemplo de configuração de definições geridas:
Na aplicação Claude Desktop, as sessões do separador Code leem estas definições geridas a partir das fontes que chegam a cada tipo de sessão Desktop. O formulário OpenTelemetry para Cowork em Monitoring nas definições de Dados e privacidade da consola de administração aplica-se apenas a sessões Cowork, portanto, nem a CLI do terminal nem o separador Code exportam para um coletor que defina lá. Claude Code ignora as variáveis do exportador OpenTelemetry no .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 vai, ou capturar conteúdo. Defina-as nas definições geridas, ou deixe que cada programador as defina na sua shell ou ~/.claude/settings.json. Um repositório ainda pode desativar um sinal definindo o seu seletor de exportador, como OTEL_LOGS_EXPORTER, para none, a menos que as definições geridas, um ficheiro --settings, ou o ambiente a partir do qual inicia Claude Code defina essa variável. Claude Code não passa variáveis de ambiente OTEL_* para os subprocessos que gera, incluindo a ferramenta Bash, hooks, servidores MCP e servidores de linguagem. Uma aplicação instrumentada com OpenTelemetry que executa através da ferramenta Bash não herda o ponto final do exportador ou cabeçalhos de Claude Code, portanto, defina essas variáveis diretamente no comando se essa aplicação precisar de exportar a sua própria telemetria.

Como as definições geridas bloqueiam o destino OTLP

Quando define uma variável OTEL_EXPORTER_OTLP_* nas definições geridas, Claude Code remove variáveis conflitantes definidas pelo programador na inicialização e regista um aviso no registo de depuração. O que remove depende de qual variável define:
  • Pontos finais: quando define OTEL_EXPORTER_OTLP_ENDPOINT, Claude Code remove todos os pontos finais por sinal definidos pelo programador. Os programadores não podem apontar um sinal para um coletor diferente, portanto, não precisa de definir também as variáveis de ponto final por sinal nas definições geridas.
  • Protocolos: quando define OTEL_EXPORTER_OTLP_PROTOCOL, Claude Code remove todos os protocolos por sinal definidos pelo programador.
  • Credenciais: quando define OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_CLIENT_KEY, ou OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, Claude Code remove as versões por sinal definidas pelo programador dessa variável, mais todas as variáveis de ponto final definidas pelo programador, genéricas ou por sinal, uma vez que essas credenciais chegariam de outra forma a um coletor que as definições geridas não escolheram.
  • Seletores de exportador: OTEL_METRICS_EXPORTER, OTEL_LOGS_EXPORTER, e o OTEL_TRACES_EXPORTER beta seguem a precedência normal por chave. A definição de um programador ainda pode desativar um sinal ou mudá-lo para o exportador de consola, portanto, defina também os seletores nas definições geridas se precisar que estejam bloqueados. Nas fontes de administração, OTEL_LOGS_EXPORTER segue a unidade de telemetria enquanto os outros dois seletores se mesclam por chave. Requer Claude Code v2.1.223 ou posterior.
  • Pontos finais de rastreamento beta: com rastreamento beta detalhado ativo, Claude Code exporta registos e rastreamentos para BETA_TRACING_ENDPOINT em vez de através dos exportadores de registos e rastreamentos. Claude Code remove portanto um BETA_TRACING_ENDPOINT definido pelo programador sempre que qualquer uma destas definições geridas decide o destino de qualquer um dos dois sinais:
    • Um ponto final genérico ou de registos/rastreamentos ou credencial
    • Um otelHeadersHelper
    • Um seletor de exportador de registos ou rastreamentos definido para none, console, ou vazio, valores que mantêm o sinal fora de um coletor
    • CLAUDE_CODE_ENABLE_TELEMETRY desativado
    Um ponto final ou credencial apenas de métricas não o remove. Antes da v2.1.251, um BETA_TRACING_ENDPOINT definido pelo programador redirecionava os registos e rastreamentos que o rastreamento beta detalhado exporta mesmo quando as definições geridas fixavam o coletor.
Claude Code não remove variáveis por sinal que define nas próprias definições geridas, portanto, pode encaminhar um sinal para um coletor diferente definindo a sua variável lá, como o exemplo SIEM faz. Se definir uma credencial por sinal lá, Claude Code remove o ponto final definido pelo programador para esse sinal. Este comportamento de remoção altera para onde a telemetria é entregue, não o que Claude Code recolhe. Antes da v2.1.217, cada variável seguia a precedência de definições por chave independentemente, portanto, um ponto final específico de sinal definido nas definições do utilizador ou na shell redirecionava esse sinal para longe do coletor gerido. Quando a aplicação desktop ou um executor de ambiente auto-hospedado inicia Claude Code e nomeia um ponto final OTLP no ambiente que fornece, Claude Code fixa o destino da mesma forma: as variáveis de telemetria do iniciador removem variáveis definidas pelo programador exatamente como as definições geridas fazem. Claude Code não remove variáveis que o próprio iniciador definiu. Requer Claude Code v2.1.251 ou posterior.

Detalhes de configuração

Variáveis de configuração comuns

Estas variáveis configuram exportadores, endpoints e o comportamento de exportação para todas as implantações. Se você definir uma variável de endpoint ou de protocolo por sinal, como OTEL_EXPORTER_OTLP_METRICS_ENDPOINT, o Claude Code a usará no lugar 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, o Claude Code a mesclará com a variável genérica OTEL_EXPORTER_OTLP_HEADERS para esse sinal. Em máquinas com configurações gerenciadas, consulte Como as configurações gerenciadas bloqueiam o destino OTLP para saber o que o Claude Code remove. Para os protocolos http/protobuf e http/json, o Claude Code envia cada requisição de exportação com um cabeçalho Content-Length.

Autenticação mTLS

A forma de configurar certificados de cliente para o exportador OTLP depende do protocolo OTLP em uso para aquele sinal, definido por meio de OTEL_EXPORTER_OTLP_PROTOCOL ou da variável que o sobrescreve por sinal. A mesma configuração se aplica a métricas, logs e traces. Para grpc, o SDK do OpenTelemetry lê diretamente as variáveis OTLP padrão, portanto configurações existentes que definem as variáveis de métricas por sinal continuam funcionando. Em máquinas com configurações gerenciadas, o 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: Uma cardinalidade menor geralmente significa melhor desempenho e menores custos de armazenamento, mas dados menos granulares para análise.

Traces (beta)

O tracing distribuído exporta spans que vinculam cada prompt do usuário às requisições de API e execuções de ferramentas que ele aciona, para que você possa visualizar uma requisição completa como um único trace no seu backend de tracing. O tracing vem desativado por padrão. Para ativá-lo, defina CLAUDE_CODE_ENABLE_TELEMETRY=1 e CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, e depois defina OTEL_TRACES_EXPORTER para escolher para onde os spans são enviados. Os traces reutilizam a configuração OTLP comum para endpoint, protocolo, cabeçalhos e mTLS. Em máquinas com configurações gerenciadas, o Claude Code pode remover credenciais e endpoints por sinal definidos pelo desenvolvedor na inicialização. Os spans ocultam o texto do prompt do usuário, os detalhes de entrada das ferramentas e o conteúdo das ferramentas 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 tracing está ativo, os subprocessos Bash e PowerShell herdam automaticamente uma variável de ambiente TRACEPARENT contendo o contexto de trace W3C do span de execução de ferramenta ativo. Isso permite que qualquer subprocesso que leia TRACEPARENT aninhe seus próprios spans sob o mesmo trace, possibilitando tracing distribuído de ponta a ponta por meio de scripts e comandos que o Claude executa. Quando o tracing está ativo e o Claude Code está conectado diretamente à API da Anthropic, cada requisição ao modelo carrega um cabeçalho W3C traceparent definido com o contexto do span claude_code.llm_request, e o cabeçalho traceresponse da API é registrado como um link de span. Juntos, eles conectam os spans do lado do cliente do Claude Code ao trace do lado do servidor por meio de qualquer intermediário compatível. As requisições MCP HTTP de saída carregam traceparent da mesma forma. O cabeçalho não é enviado a provedores terceiros. Por padrão, o cabeçalho traceparent em requisições ao modelo e requisições MCP HTTP é enviado somente quando ANTHROPIC_BASE_URL não está definida ou aponta para a API da Anthropic, já que alguns proxies rejeitam cabeçalhos não reconhecidos. A variável TRACEPARENT dos subprocessos é controlada pela mesma opção, por consistência. Se você executa o Claude Code por meio de um proxy ANTHROPIC_BASE_URL personalizado e deseja que o contexto de trace seja propagado, defina CLAUDE_CODE_PROPAGATE_TRACEPARENT=1. No Agent SDK e em sessões não interativas iniciadas com -p, o Claude Code também lê TRACEPARENT e TRACESTATE do seu próprio ambiente ao iniciar cada span de interação. Isso permite que um processo incorporador passe seu contexto de trace W3C ativo para o subprocesso, de modo que os spans do Claude Code apareçam como filhos do trace distribuído do chamador. Sessões interativas ignoram o TRACEPARENT de entrada para evitar herdar acidentalmente valores do ambiente de CI ou de contêineres. O contexto de trace de entrada também se aplica a eventos. No Agent SDK e em sessões -p com TRACEPARENT definida, cada registro de log de evento OTLP carrega valores trace_id e span_id que o associam ao trace da sua aplicação, mesmo quando o exportador de traces não está configurado, para que o seu backend de logs possa correlacionar eventos com o restante do trace. Um registro emitido enquanto uma interação está ativa carrega os IDs do span de interação, mesmo quando o 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 span de interação ativo carrega diretamente os IDs do TRACEPARENT de entrada.

Hierarquia de spans

Cada prompt do usuário inicia um span raiz claude_code.interaction. Chamadas de API, chamadas de ferramenta e execuções de hooks são registradas como seus filhos. Os spans de ferramenta têm dois spans filhos próprios: um para o tempo gasto aguardando uma decisão de permissão e outro para a execução em si. Quando a ferramenta Agent, ou a ferramenta legada Task, cria um subagente, os spans de API e de ferramenta desse subagente ficam aninhados sob o span claude_code.tool do agente pai.
No Agent SDK e em sessões claude -p, o próprio claude_code.interaction se torna filho do span do chamador quando TRACEPARENT está definida no ambiente. Quando um hook PreToolUse adia uma chamada de ferramenta, o Claude Code salva o contexto de trace do turno que a adiou. Quando você retoma a sessão e a ferramenta é executada novamente, os spans da ferramenta se juntam ao trace daquele turno anterior como filhos do span claude_code.interaction do turno.

Atributos de span

Cada span carrega os atributos padrão mais um atributo span.type correspondente ao seu nome. As tabelas abaixo listam os atributos adicionais definidos em cada span. Os spans llm_request, tool.execution e hook definem o status ERROR do OpenTelemetry quando registram uma falha; os demais spans sempre terminam com o status UNSET. claude_code.interaction claude_code.llm_request Cada nova tentativa também é registrada como um evento de span gen_ai.request.attempt com os atributos attempt e client_request_id. claude_code.tool Evento de span tool.output em claude_code.tool Se você definir OTEL_LOG_TOOL_CONTENT=1, as chamadas de Read e Bash podem registrar um evento de span tool.output no span claude_code.tool. As chamadas de Edit e Write registram um somente quando você também define OTEL_LOG_TOOL_DETAILS=1. Essa variável não se limita a essas duas ferramentas, portanto verifique sua linha na tabela de configuração para ver os argumentos que ela adiciona em outros lugares. Ferramentas MCP, WebFetch e WebSearch também registram este evento, no Claude Code v2.1.283 ou posterior. O Claude Code grava este evento a partir do retorno bem-sucedido de uma chamada de ferramenta, portanto uma chamada que gera um erro não registra nada, qualquer que seja a ferramenta. Entre as chamadas que retornam, ele não registra nenhum evento tool.output para:
  • Uma chamada a qualquer ferramenta que não seja Read, Edit, Write, Bash, WebFetch, WebSearch e ferramentas MCP
  • Um Read que retorna algo diferente de texto de arquivo, como uma imagem, um PDF ou uma releitura de um arquivo cujo conteúdo não mudou
  • Uma chamada de Edit ou Write, a menos que você também defina OTEL_LOG_TOOL_DETAILS=1
  • Uma chamada de WebFetch ou WebSearch que o Claude Code moveu para segundo plano enquanto era executada, para que uma mensagem em espera pudesse chegar ao Claude. O resultado que chega mais tarde também não é registrado. Para saber quando o Claude Code move uma chamada, consulte Quando o Claude Code envia o que você colocou na fila para o terminal e o campo priority para sessões do Agent SDK
O evento carrega estes atributos, cada um truncado no limite de conteúdo (60 KB por padrão). Condicionado por indica a variável de que um atributo precisa além de OTEL_LOG_TOOL_CONTENT=1, e para Edit e Write essa variável condiciona o próprio evento, e não o atributo. O atributo tool_name do span pai informa de 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 Uma decisão cancelled com source user_abort significa que uma mensagem que precisava de entrega imediata interrompeu o turno enquanto o prompt de permissão ou a verificação do modo auto estava pendente. Por exemplo, durante uma verificação do modo auto, o usuário tinha uma mensagem na fila e a enviou imediatamente. claude_code.tool.execution claude_code.hook Este span aparece somente quando o tracing beta detalhado está ativo, o que requer ENABLE_BETA_TRACING_DETAILED=1 e BETA_TRACING_ENDPOINT, um par que também altera para onde seus logs e traces vão. Defina o par no seu shell, nas configurações de usuário ou nas configurações gerenciadas; ambas as variáveis são ignoradas nas configurações de projeto e locais. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA sozinha não o produz. Em sessões interativas da CLI, o tracing beta detalhado também requer que sua organização esteja na lista de permissões para o recurso. O Agent SDK e sessões não interativas -p não exigem a lista de permissões. Atributos de conteúdo no tracing beta detalhado
Atributos adicionais que carregam conteúdo, como new_context, system_reminders, system_prompt_preview, user_system_prompt, tool_input e response.model_output, são emitidos somente quando o tracing beta detalhado está ativo. Eles não fazem parte do esquema estável de spans.
Estes atributos aparecem nos spans abaixo, e Condicionado por indica a variável de que um atributo precisa além do tracing beta detalhado. Valores mais longos que o limite de conteúdo (60 KB por padrão) são truncados. No tracing beta detalhado com OTEL_LOG_USER_PROMPTS=1, o Claude Code também emite um evento claude_code.system_prompt que carrega o system prompt completo, truncado no limite de conteúdo. Ele chega na primeira vez que uma sessão envia cada system prompt distinto, e novamente após a compactaçã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 somente aos protocolos http/protobuf e http/json. Com o protocolo grpc, o Claude Code usa apenas as variáveis de cabeçalhos estáticos, OTEL_EXPORTER_OTLP_HEADERS e suas variantes por sinal.

Configuração nas configurações

Adicione ao seu .claude/settings.json, substituindo o caminho pelo seu próprio script:
O valor pode ser o caminho para um arquivo executável, inclusive um caminho que contenha espaços, ou uma linha de comando do shell com argumentos. No Windows, o valor sempre é executado pelo shell, portanto coloque entre aspas, dentro do valor JSON, um caminho que contenha espaços.

Requisitos do script

O script deve gerar JSON válido com pares chave-valor de strings representando cabeçalhos HTTP:
Se o helper falhar ou imprimir uma saída que não atenda a esses requisitos, as exportações falham e o seu backend de telemetria não recebe nada da sessão até que o helper volte a funcionar. O Claude Code informa a falha em:
  • Uma notificação de aviso em sessões interativas, otelHeadersHelper failed; telemetry is not being exported, exibida uma vez por sessão quando o helper falha pela primeira vez
  • Saída de /status
  • O log de depuração, ao executar com --debug ou depois de executar /debug na sessão
  • stderr, em sessões não interativas iniciadas com -p

Comportamento de atualização

O script helper de cabeçalhos é executado na inicialização e periodicamente depois disso para oferecer suporte à atualização de tokens. Por padrão, o script é executado a cada 29 minutos. Personalize o intervalo com a variável de ambiente CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS.

Suporte a organizações com várias equipes

Organizações com várias equipes ou departamentos podem adicionar atributos personalizados para distinguir entre diferentes grupos usando a variável de ambiente OTEL_RESOURCE_ATTRIBUTES:
Esses atributos personalizados são incluídos em todas as métricas e eventos, permitindo que você:
  • Filtre métricas por equipe ou departamento
  • Acompanhe custos por centro de custo
  • Crie painéis específicos por equipe
  • Configure alertas para equipes específicas
O Claude Code anexa esses valores como atributos em cada ponto de dados de métrica e registro de evento, além de enviá-los no bloco de recurso OTLP. Como a maioria dos backends de métricas expõe os atributos dos pontos de dados como rótulos consultáveis, você pode agrupar e filtrar métricas diretamente pelas suas chaves personalizadas. Exceto pelos atributos de repositório vcs.*, as chaves personalizadas nunca sobrescrevem os atributos padrão, como user.id ou session.id: quando uma chave colide, o Claude Code mantém o valor integrado. Cada chave personalizada se torna um rótulo em todas as séries de métricas, portanto 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 dos pontos de dados, defina OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false. Consulte Controle de cardinalidade de métricas.
A variável de ambiente OTEL_RESOURCE_ATTRIBUTES usa pares key=value separados por vírgula com requisitos de formatação rigorosos:
  • Espaços não são permitidos: os valores não podem conter espaços. Por exemplo, user.organizationName=My Company é inválido
  • Formato: devem ser pares key=value separados por vírgula: key1=value1,key2=value2
  • Caracteres permitidos: apenas caracteres US-ASCII, excluindo caracteres de controle, espaços em branco, aspas duplas, vírgulas, ponto e vírgula e barras invertidas
  • Caracteres especiais: caracteres fora do intervalo permitido devem ser codificados em porcentagem
Para um valor que precisaria de um espaço, use sublinhados ou camelCase. Os exemplos a seguir definem org.name com cada forma:
Você pode codificar em porcentagem qualquer caractere, não apenas os excluídos. Este exemplo codifica tanto o espaço quanto o apóstrofo:
Colocar os valores entre aspas não faz o escape de espaços. Por exemplo, org.name="My Company" resulta no valor literal "My Company" com as aspas incluídas, e não My Company.

Atribuir telemetria a sessões SSH do Desktop

Para ver em qual máquina remota uma sessão SSH do Desktop foi executada, nomeie cada máquina em um atributo personalizado. Métricas e eventos não informam a máquina em que uma sessão foi executada. Em cada máquina remota, adicione OTEL_RESOURCE_ATTRIBUTES ao bloco env que ativa a telemetria, no arquivo de configurações gerenciadas que a sessão lê. Escreva o nome por extenso no arquivo de cada máquina. O Claude Code não expande o valor, portanto host.name=$(hostname) chega exatamente com esses caracteres. O exemplo a seguir nomeia a máquina build-7:
Quando nada mais define a variável, host.name chega no bloco de recurso, em sessões SSH do Desktop e na CLI dessa máquina. Para saber onde mais os atributos personalizados aparecem, consulte Suporte a organizações com várias equipes. Se o nome não chegar, verifique uma destas causas:
  • Você o definiu no computador que executa o Desktop: o Desktop não passa para a sessão SSH um valor que você define ali
  • Você o exportou em /etc/profile ou em outro arquivo que somente shells de login leem: o nome chega quando você executa claude a partir de um shell de login, mas não em uma sessão SSH do Desktop. O Desktop não inicia o Claude Code por meio de um shell de login. Em vez disso, defina a variável em env no arquivo de configurações gerenciadas na máquina remota.
  • Um valor contém um espaço: nesse caso, o Claude Code não copia nenhuma das chaves para eventos ou pontos de dados e não informa nenhum erro. Remova o espaço do valor.
  • Outra coisa já define a variável: em uma sessão que o aplicativo desktop inicia, uma variável já definida no ambiente de inicialização tem precedência sobre os arquivos de configurações. O log de depuração indica cada variável ignorada. Quando uma implantação do Desktop de terceiros especifica um endpoint OTLP no ambiente que ela fornece, esse ambiente carrega o próprio OTEL_RESOURCE_ATTRIBUTES do Desktop.

Exemplos de configuração

Defina estas variáveis de ambiente antes de executar claude. 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 no seu backend a métrica claude_code.session.count após iniciar uma sessão; o Início rápido aborda a verificação apenas de logs e o que verificar quando nada chega. Para depuração no console com um intervalo de exportação de 1 segundo:
Para OTLP sobre gRPC:
Para Prometheus, coletado de http://localhost:9464/metrics:
Em um ambiente auto-hospedado, a sessão vincula a porta 9464 somente na capacidade padrão de um do runner. Em capacidades maiores, o runner reexpõe os contadores e medidores da sessão em seu próprio endpoint /metrics. Para enviar métricas para vários exportadores:
Para enviar métricas e logs para endpoints ou backends diferentes:
Para exportar apenas métricas, sem eventos ou logs:
Para exportar apenas eventos e logs, sem métricas:

Telemetria de sessões em nuvem e Claude Tag

Sessões em nuvem, incluindo sessões do canal Claude Tag, são executadas em ambientes em nuvem em vez de nos dispositivos dos seus usuários, portanto um arquivo de configurações gerenciado ou perfil de shell nesses dispositivos não configura sua telemetria. Para sessões em ambientes hospedados pela Anthropic, esta seção aborda onde definir as variáveis de telemetria, como tornar seu coletor acessível a partir do ambiente e como distinguir sessões em nuvem e Claude Tag nos dados exportados. Para exportar telemetria dessas sessões, defina CLAUDE_CODE_ENABLE_TELEMETRY e as variáveis OTEL_*, usando as mesmas chaves do exemplo de configuração do administrador, em um de dois locais:
  • Configurações gerenciadas pelo servidor: adicione-as ao bloco env das configurações gerenciadas pelo servidor da sua organização. Claude Code busca essas configurações na inicialização onde as configurações gerenciadas pelo servidor se aplicam, o que inclui as máquinas dos seus usuários e sessões em nuvem diferentes das sessões do canal Claude Tag. Sessões Claude Tag não recebem suas configurações gerenciadas pelo servidor, portanto esta rota não as configura.
  • As variáveis do ambiente: adicione-as às variáveis de ambiente de um ambiente em nuvem para configurar apenas as sessões executadas nesse ambiente. Esta é a rota que alcança sessões Claude Tag.
Qualquer pessoa que use um ambiente pode ler suas variáveis, portanto não coloque uma credencial lá, como um token de coletor em OTEL_EXPORTER_OTLP_HEADERS. Um segredo de rede no ambiente também não ajuda, porque a exportação de telemetria do próprio Claude Code é uma das requisições que nunca recebem o segredo. Se seu coletor exigir uma credencial, configure toda a exportação através de configurações gerenciadas pelo servidor, porque quando você define uma credencial lá, Claude Code remove variáveis de endpoint definidas fora das configurações gerenciadas. Mantenha essas restrições em mente ao configurar telemetria para sessões em nuvem:
  • Deixe as sessões alcançarem o coletor: Claude Code envia a exportação através da rede da sessão, portanto se ela alcança o host em seu OTEL_EXPORTER_OTLP_ENDPOINT depende do nível de acesso à rede do ambiente. Se as sessões não conseguirem alcançar o domínio do coletor no nível que você escolheu, adicione o domínio à lista de permissões do ambiente, porque nenhuma configuração gerenciada pelo servidor adiciona domínios à lista de permissões de rede de um ambiente.
  • Canais Claude Tag: faça as alterações na allowlist e em qualquer variável de ambiente no ambiente compartilhado definido como padrão da sua organização ou fixado ao canal.
  • Cowork é configurado separadamente: sessões Cowork não recebem configurações gerenciadas pelo servidor, como a tabela de cobertura de superfície mostra, portanto o bloco env gerenciado pelo servidor não configura sua telemetria.

Atribuir telemetria a sessões em nuvem

Por padrão, métricas e eventos de uma sessão em nuvem carregam os atributos padrão, incluindo session.id, ccr.session.id e organization.id, para que você possa filtrar por sessão ou organização sem configuração extra. O valor ccr.session.id é o CLAUDE_CODE_REMOTE_SESSION_ID da sessão. Para convertê-lo na URL da transcrição da sessão, consulte Vincular saída de volta à sessão. Para distinguir sessões na nuvem, agrupe ou filtre por ccr.session.id, não por session.id. Para atribuir telemetria em mais detalhes, use estas opções:
  • Identificar sessões Claude Tag: defina OTEL_METRICS_INCLUDE_ENTRYPOINT=true, conforme descrito em Controle de cardinalidade de métricas. As métricas então carregam app.entrypoint, cujo valor é claude-in-slack para sessões Claude Tag.
  • Adicionar atributos personalizados: defina OTEL_RESOURCE_ATTRIBUTES no mesmo local onde você define as outras variáveis OTEL_* para essas sessões. Se você export no script de configuração do ambiente, o valor não alcança Claude Code: o script de configuração é um script Bash separado que é executado antes do Claude Code ser iniciado, e as variáveis que ele exporta terminam com ele.
Em sessões do canal Claude Tag, Claude funciona como a identidade compartilhada da sua organização em vez de qualquer membro, portanto não confie nos atributos user.* para identificar quem marcou Claude.

Métricas e eventos disponíveis

Atributos padrão

Todas as métricas e eventos compartilham estes atributos padrão: Em sessões conectadas a um gateway de aplicativos Claude por meio de /login, a CLI marca as exportações com a identidade autenticada: user.id é o subject do IdP, user.email é o e-mail conectado e user.groups carrega a associação a grupos 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, portanto as chaves user.* e identity.* definidas por meio de OTEL_RESOURCE_ATTRIBUTES são ignoradas nessas sessões.
Eventos que o Claude Code registra antes de um desenvolvedor fazer login não carregam a identidade do gateway. Quando o Claude Code abre uma sessão desconectada do gateway, por exemplo depois que o gateway encerra o login, os eventos de inicialização registrados antes do login carregam o user.id anônimo e nenhum identity.source. Esses incluem managed_settings_resolved, plugin_loaded e mcp_server_connection.
Para os atributos de identidade em sessões do Claude Desktop e do Cowork que se conectam por meio de um gateway, consulte a referência de telemetry do gateway. Os eventos incluem adicionalmente os seguintes atributos. Eles nunca são anexados às métricas porque causariam cardinalidade ilimitada:
  • prompt.id: UUID que correlaciona um prompt do usuário com todos os eventos subsequentes até o próximo prompt. Consulte Atributos de correlação de eventos.
  • workspace.host_paths: diretórios do workspace do host selecionados no aplicativo desktop, como um array de strings
  • workflow.run_id: identificador de execução, com o prefixo wf_, nos eventos de API e de ferramenta emitidos por agentes que pertencem a uma execução da ferramenta Workflow. Filtrar eventos por um workflow.run_id reconstrói as requisições de API e os resultados de ferramenta dessa execução. O identificador abrange os agentes que o script do workflow cria e quaisquer agentes que esses criem por sua vez, como invocações de skills. Ele corresponde ao identificador de execução informado no resultado da ferramenta Workflow.
  • workflow.name: nome do workflow, o meta.name do seu script, emitido junto com workflow.run_id. Nomes de workflows integrados aparecem literalmente quando a execução roda o script integrado sem modificações. Nomes criados pelo usuário, incluindo cópias editadas de scripts integrados, são substituídos por custom, a menos que OTEL_LOG_TOOL_DETAILS=1 esteja definido.
  • agent_id: identificador do subagente que gerou o evento, como a3f2c1b4d5e6f7a80. Os eventos que o carregam incluem os eventos de API e de ferramenta de um subagente, seus eventos assistant_response e subagent_completed para o subagente concluído. Ausente em eventos da sessão principal e de colegas de equipe em processo. O agent_id do span do subagente é o mesmo valor, ou adiciona um rótulo após o a inicial, como em acompact-3f2c1b4d5e6f7a80. Requer Claude Code v2.1.310 ou posterior
  • parent_agent_id: o agent_id do agente que criou ou retomou por último o subagente que gerou o evento. Ausente quando esse agente é a sessão principal. Requer Claude Code v2.1.310 ou posterior

Atributos de repositório

Defina OTEL_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 o uso por repositório. Requer Claude Code v2.1.269 ou posterior. O Claude Code deriva esses atributos uma vez por sessão a partir 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 acontece no GitHub, GitLab e Bitbucket Cloud, ambos produzem valores idênticos: Os valores são convertidos para minúsculas, e credenciais, query strings e fragmentos da URL do remote nunca aparecem neles. Os atributos são omitidos quando a sessão não tem remote origin, quando o remote não tem formato de URL ou quando o único repositório que a contém é o seu diretório pessoal. Para obter esses atributos de uma sessão na nuvem, defina as variáveis de telemetria, incluindo OTEL_METRICS_INCLUDE_REPOSITORY, no seu ambiente de nuvem. Permita também 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 dessa chave. Se você declarar vcs.repository.url.full, o Claude Code nunca lê o remote e informa apenas as chaves que você declarar. Se clones HTTPS e SSH de um repositório informarem valores diferentes, como em uma instalação auto-hospedada cuja URL de clone HTTPS carrega um prefixo de caminho que a URL SSH não tem, declare vcs.repository.url.full em OTEL_RESOURCE_ATTRIBUTES junto com todas as outras chaves vcs.* que você deseja informar. Todos os clones passam então a informar a identidade que você declarar. Os atributos fluem apenas para os seus próprios exportadores; a telemetria da Anthropic descarta todas as chaves vcs.*.

Métricas

O Claude Code exporta as seguintes métricas. A coluna Unidade mostra a string de unidade do OpenTelemetry anexada a cada métrica; métricas de contagem não carregam nenhuma. Quando prometheus é o único exportador listado em OTEL_METRICS_EXPORTER, o Claude Code omite as unidades USD, tokens e s das métricas exportadas para que o scrape continue 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.

Detalhes das métricas

Cada métrica inclui os atributos padrão listados acima. Métricas com atributos adicionais específicos de contexto são indicadas abaixo.

Contador de sessões

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 painel claude agents, uma UI local iniciada pelo usuário em vez de uma sessão conversacional. Filtre por esse valor para separar inicializações de processos de UI de sessões conversacionais nos seus painéis.

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 que fez a alteração (por exemplo, “claude-sonnet-5”)

Contador de pull requests

Incrementado quando o Claude Code cria um pull request ou merge request por meio de um comando de shell ou de uma ferramenta MCP. Atributos:

Contador de commits

Incrementado ao criar commits do git por meio do Claude Code. Atributos:

Contador de custo

Incrementado após cada requisição de API. Os atributos agent.name, skill.name, plugin.name, mcp_server.name e mcp_tool.name ocultam, cada um, alguns nomes substituindo-os por um placeholder "custom" ou "third-party" por padrão. Se você definir OTEL_LOG_TOOL_DETAILS=1, eles passam a carregar os nomes reais. Antes da v2.1.273, os contadores de custo e de tokens e os eventos api_request, api_error e api_refusal carregavam os valores ocultados 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 o modo rápido. Ausente caso contrário
  • effort: Nível de esforço aplicado à requisição: "low", "medium", "high", "xhigh" ou "max". Ausente quando o Claude Code não envia nível de esforço, por exemplo em um modelo que não oferece suporte a 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 ou por um comando /, ou herdada por um subagente gerado. Nomes de skills integradas, incluídas, definidas 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 ou o subagente ativo é 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 têm um plugin proprietário.
  • marketplace.name: Marketplace de onde o plugin proprietário foi instalado. Emitido apenas para plugins do marketplace oficial, mesmo com OTEL_LOG_TOOL_DETAILS=1 definido. Ausente caso contrário.
  • mcp_server.name: Servidor MCP cujo resultado de ferramenta esta requisição consumiu. Nomes de servidores integrados, com proxy do 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 nenhum resultado de ferramenta MCP. Antes da v2.1.222, o Claude Code definia esse atributo em todas as requisições após uma chamada de ferramenta MCP, não apenas nas requisições que consumiam um resultado de ferramenta, portanto painéis que o agregam mostram uma queda após a atualização.
  • mcp_tool.name: Ferramenta MCP cujo resultado esta requisição consumiu, com o mesmo comportamento de ocultação e de versão que mcp_server.name. Ausente quando a requisição não consumiu nenhum 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"). O tipo "input" exclui tokens lidos do cache de prompt ou gravados nele, que são contados em "cacheRead" e "cacheCreation". O tipo "cacheCreation" conta em conjunto as gravações em cache com os tempos de vida de cache de cinco minutos e de uma hora.
  • 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 o modo rápido. Ausente caso contrário
  • effort: Nível de esforço aplicado à requisição. Consulte Contador de custo para obter 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. Consulte Contador de custo para definições e comportamento de ocultação.

Contador de decisões da ferramenta de edição de código

Incrementado quando o usuário aceita ou rejeita o uso das ferramentas 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 veio a decisão. Um de "config", "hook", "user_permanent", "user_temporary", "user_abort" ou "user_reject". Consulte o Evento de decisão de ferramenta para saber 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 o Claude Code, excluindo o tempo ocioso. Essa métrica é incrementada durante interações do usuário, como digitar e ler respostas, e durante o processamento da CLI, como execução de ferramentas e geração de respostas 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

O Claude Code exporta os seguintes eventos por meio de logs/eventos do OpenTelemetry (quando OTEL_LOGS_EXPORTER está configurado):

Atributos de correlação de eventos

Quando um usuário envia um prompt, o Claude Code pode fazer várias chamadas de API e executar várias ferramentas. O atributo prompt.id permite vincular todos esses eventos ao único prompt que os acionou. Para rastrear toda a atividade acionada por um único prompt, filtre seus eventos por um valor específico de prompt.id. Isso retorna o evento user_prompt, quaisquer eventos api_request e quaisquer eventos tool_result que ocorreram durante o processamento desse prompt. event.sequence começa em 0 cada vez que um processo do Claude Code é iniciado e é incrementado durante toda a vida desse processo. Ele continua contando após /clear, que atribui um novo session.id. Se você retomar uma sessão sem bifurcá-la, a sessão mantém seu session.id, mas obtém seus valores de event.sequence do processo que a retomou; portanto, dentro de uma sessão, um evento posterior pode carregar um valor menor que um anterior, ou repeti-lo. Para ordenar os eventos de uma sessão, classifique por event.timestamp e use event.sequence para ordenar eventos que compartilham o mesmo timestamp. Para reconstrução no nível de mensagens, cada classe de evento carrega uma chave que corresponde a um campo na transcrição da sessão. O formato das entradas da transcrição é interno ao Claude Code e muda entre versões, portanto um pipeline que faz junções por esses campos pode quebrar em qualquer release; trate as junções como específicas de versão em vez de um contrato estável:
  • message.uuid em user_prompt, assistant_response e api_response_body
  • request_id nos eventos de API, persistido como requestId nas entradas de assistente da transcrição
  • tool_use_id nos eventos tool_result e tool_decision, e nos eventos safety_event, exceto os referentes ao fim de um turno

Evento de prompt do usuário

Registrado quando um prompt é enviado, incluindo em turnos que o Claude Code inicia por conta própria. Nome do evento: claude_code.user_prompt Atributos:
  • Todos os atributos padrão
  • event.name: "user_prompt"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • prompt_length: Comprimento do prompt
  • prompt: Conteúdo do prompt. Ocultado por padrão. Defina OTEL_LOG_USER_PROMPTS=1 para incluí-lo
  • prompt_text: Mesmo valor de prompt, ocultado sob a mesma condição. Um backend que armazena nomes de atributos com pontos como objetos aninhados lê prompt.id como id dentro de um objeto chamado prompt e pode perder a string do prompt. Nesse caso, leia prompt_text. Requer Claude Code v2.1.287 ou posterior
  • message.uuid: UUID da mensagem do usuário resultante, correspondente à entrada persistida na transcrição. Ausente em despachos de comandos, que podem produzir zero ou várias mensagens.
  • command_name: Nome do comando quando o prompt invoca um. Nomes de comandos integrados e incluídos, como compact ou debug, são emitidos como estão; aliases como reset são emitidos conforme digitados, em vez do nome canônico. Nomes de comandos personalizados, de plugins e de MCP são reduzidos a custom ou mcp, a menos que OTEL_LOG_TOOL_DETAILS=1 esteja definido
  • command_source: Origem do comando, quando presente: builtin, custom ou mcp. Comandos fornecidos por plugins são informados como custom

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. Nome do evento: claude_code.assistant_response Atributos:
  • Todos os atributos padrão
  • event.name: "assistant_response"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • response_length: Comprimento do texto da resposta em caracteres
  • response: Texto da resposta, truncado no limite de conteúdo (60 KB por padrão). Ocultado como <REDACTED> por padrão. Defina OTEL_LOG_ASSISTANT_RESPONSES=1 para incluí-lo. Quando OTEL_LOG_ASSISTANT_RESPONSES não está definido, OTEL_LOG_USER_PROMPTS o controla; portanto, defina OTEL_LOG_ASSISTANT_RESPONSES=0 para manter as respostas ocultadas enquanto o log de prompts estiver ativado
  • model: Identificador do modelo (por exemplo, “claude-sonnet-5”)
  • request_id: ID da requisição de API, descrito em Atributos de correlação de eventos
  • message.uuid: UUID da entrada final da resposta na transcrição. Uma resposta de API é persistida como uma entrada de transcrição por bloco de conteúdo; esta é a última, à qual o parentUuid do próximo turno se encadeia.
  • query_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 conclui a execução. Não é emitido se a chamada de ferramenta foi rejeitada; consulte 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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • tool_name: Nome da ferramenta
  • tool_use_id: Identificador exclusivo desta invocação de ferramenta. Corresponde ao tool_use_id passado aos hooks, permitindo a correlação entre eventos OTel e dados capturados por hooks.
  • request_id: o request_id da resposta de API que continha esta chamada de ferramenta, para que você possa unir a chamada aos eventos de API dessa resposta. Ausente quando essa resposta não tinha ID de requisição, ou quando nenhuma resposta de API continha a chamada. Requer Claude Code v2.1.310 ou posterior
  • success: "true" ou "false"
  • duration_ms: Tempo de execução em milissegundos
  • error_type: String da categoria de erro quando a ferramenta falhou, como "Error:ENOENT" ou "ShellError"
  • error (quando OTEL_LOG_TOOL_DETAILS=1): Mensagem de erro completa quando a ferramenta falhou
  • decision_type: Sempre "accept", já que este evento só é emitido após a execução da ferramenta. Chamadas rejeitadas não produzem um resultado de ferramenta
  • decision_source: De onde veio a decisão de permissão. Um de "config", "hook", "user_permanent" ou "user_temporary". Consulte o Evento de decisão de ferramenta para saber o que cada valor significa. As origens exclusivas de rejeição "user_abort" e "user_reject" nunca aparecem neste evento.
  • tool_input_size_bytes: Tamanho da entrada da ferramenta serializada em JSON, em bytes
  • tool_result_size_bytes: Tamanho do resultado da ferramenta em bytes
  • mcp_server_scope: Identificador de escopo do servidor MCP (para ferramentas MCP)
  • vcs.ref.head.revision, vcs.ref.head.name, vcs.ref.head.type (quando OTEL_LOG_TOOL_DETAILS=1): a identidade do commit de um git commit bem-sucedido executado pela ferramenta Bash ou PowerShell. vcs.ref.head.revision é o SHA do commit, vcs.ref.head.name é o branch em que o commit foi feito e vcs.ref.head.type é branch. O nome e o tipo são omitidos quando o commit foi feito em um HEAD desanexado. Requer Claude Code v2.1.269 ou posterior
  • tool_parameters (quando OTEL_LOG_TOOL_DETAILS=1): String JSON contendo parâmetros específicos da ferramenta. Para os servidores integrados do Claude Desktop, em sessões que pertencem ao Claude Desktop, o par mcp_server_name/mcp_tool_name é incluído mesmo com a flag desativada, a mesma exceção definida pelo host que no Evento de decisão de ferramenta. Os parâmetros variam por ferramenta:
    • Para a ferramenta Bash: inclui bash_command, full_command, timeout, description e dangerouslyDisableSandbox, além de git_commit_id e git_branch quando um comando git 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 em que o commit foi feito, omitido em um HEAD desanexado
    • Para a ferramenta Bash do workspace do aplicativo desktop, que também informa tool_name como Bash: inclui apenas bash_command, full_command e timeout
    • Para ferramentas MCP: inclui mcp_server_name, mcp_tool_name
    • Para a ferramenta Skill: inclui skill_name
    • Para a ferramenta Agent ou a ferramenta legada Task: inclui subagent_type
  • tool_input (quando OTEL_LOG_TOOL_DETAILS=1): Argumentos da ferramenta serializados em JSON. Valores individuais com mais 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 ao Claude. Nome do evento: claude_code.api_request Atributos:
  • Todos os atributos padrão
  • event.name: "api_request"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • model: Modelo usado (por exemplo, “claude-sonnet-5”)
  • cost_usd: Custo estimado em USD
  • cost_usd_micros: Custo estimado em milionésimos de dólar americano, emitido como um inteiro
  • duration_ms: Duração da requisição em milissegundos
  • input_tokens: Número de tokens de entrada, excluindo tokens lidos do cache de prompt ou gravados nele
  • output_tokens: Número de tokens de saída
  • cache_read_tokens: Número de tokens lidos do cache
  • cache_creation_tokens: Número de tokens usados para criação de cache
  • cache_creation_5m_tokens, cache_creation_1h_tokens: o número de tokens que a resposta da API informa como gravados no cache com um tempo de vida de cache de cinco minutos e o número gravado com um tempo de vida de uma hora. Ambos são 0 quando a resposta da API não os informa, mesmo quando cache_creation_tokens é maior que zero. Requer Claude Code v2.1.300 ou posterior
  • request_id: ID da 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 cabeçalho de requisição x-client-request-id; consulte a tabela de atributos de correlação de eventos para saber quando ele está presente
  • speed: "fast" ou "normal", indicando se o modo rápido estava ativo
  • query_source: Subsistema que emitiu a requisição, como "repl_main_thread", "compact" ou um nome de subagente
  • effort: Nível de esforço aplicado à requisição: "low", "medium", "high", "xhigh" ou "max". Ausente quando o Claude Code não envia nível de esforço, por exemplo em um modelo que não oferece suporte a 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. Consulte Contador de custo para definições e comportamento de ocultação.

Evento de erro de API

Registrado quando uma requisição de API ao Claude falha. Nome do evento: claude_code.api_error Atributos:
  • Todos os atributos padrão
  • event.name: "api_error"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • model: Modelo usado (por exemplo, “claude-sonnet-5”)
  • error: Mensagem de erro
  • status_code: Código de status HTTP como número. Ausente para erros não HTTP, como falhas de conexão.
  • duration_ms: Duração da requisição em milissegundos
  • attempt: Número de tentativas feitas, incluindo a requisição inicial. Detectar o esgotamento de novas tentativas indica quando a contagem recomeça
  • request_id: ID da 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 cabeçalho de requisição x-client-request-id. Disponível mesmo quando uma falha, como um timeout ou erro de conexão, nunca produziu um request_id do servidor; consulte a tabela de atributos de correlação de eventos para saber quando ele está presente.
  • speed: "fast" ou "normal", indicando se o modo rápido estava ativo
  • query_source: Subsistema que emitiu a requisição, como "repl_main_thread", "compact" ou um nome de subagente
  • effort: Nível de esforço aplicado à requisição. Ausente quando o Claude Code não envia nível de esforço, por exemplo em um modelo que não oferece suporte a 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. Consulte Contador de custo para definições e comportamento de ocultação.

Evento de recusa de API

Registrado quando uma requisição de API retorna stop_reason: "refusal". As recusas chegam em um stream de resposta bem-sucedido em vez de como um erro HTTP, portanto o evento api_error não é disparado para elas. Este evento permite acompanhar a frequência de recusas e agrupá-las 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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • model: Identificador do modelo da requisição
  • request_id: ID da 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. Consulte api_request para definições.
  • speed: "fast" quando o modo rápido está ativo, ou "normal"
  • attempt: Número da tentativa. A primeira tentativa é 1.
  • effort: Nível de esforço aplicado à requisição. Ausente quando o Claude Code não envia nível de esforço, por exemplo em um modelo que não oferece suporte a esforço.
  • server_fallback_hop: true quando o fallback de modelo no lado do servidor da API já tentou novamente esta recusa em um modelo diferente, de modo que o usuário não viu esta recusa em particular. false quando a requisição terminou em uma recusa. Um único turno pode emitir tanto um evento de salto true quanto um evento final false posterior quando o modelo de fallback também recusa.
  • has_category: true quando a resposta da API carregou um stop_details.category de "cyber", "bio", "frontier_llm" ou "reasoning_extraction". false quando a resposta não carregou nenhuma categoria ou um valor fora desse conjunto. Ausente quando server_fallback_hop é true, porque blocos de salto não carregam stop_details.
  • has_explanation: true quando a resposta da API carregou um stop_details.explanation, caso contrário false. Ausente quando server_fallback_hop é true.
  • category: O valor de stop_details.category da resposta da API. Um de "cyber", "bio", "frontier_llm" ou "reasoning_extraction". Presente apenas quando OTEL_LOG_TOOL_DETAILS=1 está definido e has_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. Consulte Contador de custo para definições e comportamento de ocultação.

Evento de corpo de requisição de API

Registrado para cada tentativa de requisição de API quando OTEL_LOG_RAW_API_BODIES está definido. Um evento é emitido por tentativa, portanto novas tentativas com parâmetros ajustados produzem, cada uma, 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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • body: Parâmetros de requisição da Messages API serializados em JSON, como o system prompt, mensagens e ferramentas, truncados no limite de conteúdo (60 KB por padrão). O conteúdo de pensamento estendido em turnos anteriores do assistente é ocultado. Emitido apenas no modo inline (OTEL_LOG_RAW_API_BODIES=1).
  • body_ref: Caminho absoluto para um arquivo <dir>/<uuid>.request.json contendo o corpo não truncado. Emitido apenas no modo de arquivo (OTEL_LOG_RAW_API_BODIES=file:<dir>).
  • body_length: Comprimento do corpo não truncado. Bytes UTF-8 quando OTEL_LOG_RAW_API_BODIES=file:<dir>, ou unidades de código UTF-16 quando =1
  • body_truncated: "true" quando ocorreu truncamento inline. Ausente no modo de arquivo e quando não ocorreu truncamento.
  • model: Identificador do modelo dos parâmetros da requisição
  • query_source: Subsistema que emitiu a requisição (por exemplo, "compact")
  • request_body_id: UUID que identifica o corpo da requisição desta tentativa. O evento api_response_body da tentativa bem-sucedida carrega o mesmo valor, para que você possa 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 quando OTEL_LOG_RAW_API_BODIES está definido. No modo de arquivo (OTEL_LOG_RAW_API_BODIES=file:<dir>), o Claude Code também acrescenta 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 por trás de uma determinada mensagem da 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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • body: Resposta da Messages API serializada em JSON, incluindo o id, blocos de conteúdo, uso e motivo de parada, truncada no limite de conteúdo (60 KB por padrão). O conteúdo de pensamento estendido é ocultado. Emitido apenas no modo inline (OTEL_LOG_RAW_API_BODIES=1).
  • body_ref: Caminho absoluto para um arquivo <dir>/<request_id>.response.json contendo o corpo não truncado. Emitido apenas no modo de arquivo (OTEL_LOG_RAW_API_BODIES=file:<dir>).
  • body_length: Comprimento do corpo não truncado. Bytes UTF-8 quando OTEL_LOG_RAW_API_BODIES=file:<dir>, ou unidades de código UTF-16 quando =1
  • body_truncated: "true" quando ocorreu truncamento inline. Ausente no modo de arquivo e quando não ocorreu truncamento.
  • model: Identificador do modelo
  • query_source: Subsistema que emitiu a requisição
  • request_id: ID da requisição de API, como "req_011...", descrito em Atributos de correlação de eventos.
  • request_body_id: O request_body_id do evento api_request_body ao qual esta resposta responde. Requer Claude Code v2.1.274 ou posterior
  • message.id: ID da mensagem que a API atribuiu à resposta, o campo id do corpo da resposta. Requer Claude Code v2.1.274 ou posterior
  • message.uuid: UUID da entrada final da resposta na transcrição. Junto com request_body_id, ele vincula uma mensagem da transcrição aos corpos de requisição e resposta por trá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 é tomada (aceitar/rejeitar). Nome do evento: claude_code.tool_decision Atributos:
  • Todos os atributos padrão
  • event.name: "tool_decision"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • tool_name: Nome da ferramenta (por exemplo, “Read”, “Edit”, “Write”, “NotebookEdit”)
  • tool_use_id: Identificador exclusivo desta invocação de ferramenta. Corresponde ao tool_use_id passado aos hooks, permitindo a correlação entre eventos OTel e dados capturados por hooks.
  • request_id: o request_id da resposta de API que continha esta chamada de ferramenta, para que você possa unir a chamada aos eventos de API dessa resposta. Ausente quando essa resposta não tinha ID de requisição, ou quando nenhuma resposta de API continha a chamada. Requer Claude Code v2.1.310 ou posterior
  • decision: "accept" ou "reject"
  • tool_source: Sempre presente. A procedência da ferramenta, como um conjunto fechado de valores definidos pela CLI:
    • "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 pertence ao Claude Desktop. Uma sessão pertence ao Claude Desktop quando ele a iniciou a partir de um de seus próprios entrypoints, claude-desktop, claude-desktop-3p ou local-agent, e essa sessão não é filha aninhada; sessões aninhadas, incluindo sessões que o próprio Claude Code gera, informam esses servidores como "mcp"
  • source: De onde veio a decisão:
    • "config": Decidido automaticamente sem solicitar confirmação, por uma destas origens:
      • Configurações do projeto
      • Regras de permissão ou negação nas configurações pessoais do usuário
      • Política gerenciada corporativa
      • Flags --allowedTools ou --disallowedTools
      • O modo de permissão ativo
      • O classificador do modo auto, cujo veredito o mesmo evento registra em classifier_verdict
      • Uma concessão para o restante da sessão, dada em um prompt de permissão anterior na mesma sessão interativa da CLI
      • A ferramenta ser inerentemente segura
      O valor de source não indica qual dessas origens correspondeu. Para descobrir qual delas recusou uma chamada, procure o Evento de segurança com o mesmo tool_use_id e leia seus atributos category e rule_source. Algumas chamadas recusadas não têm evento de segurança. O Claude Code também informa "config" quando a própria requisição do prompt de permissão falha. Por exemplo, essa requisição falha quando o callback canUseTool do Agent SDK ou a ferramenta --permission-prompt-tool retorna um resultado inválido, ou quando o stream de entrada é fechado enquanto a requisição está pendente.
    • "hook": Um hook PreToolUse ou PermissionRequest retornou a decisão.
    • "user_permanent": Emitido quando o usuário escolheu “Yes, and don’t ask again for …” em um prompt de permissão, o que salva uma regra de allow nas suas configurações pessoais. Na CLI interativa, isso é emitido apenas para essa escolha em si; chamadas posteriores que correspondem à regra salva emitem "config". Em sessões do Agent SDK ou não interativas com -p, tanto a escolha inicial quanto as correspondências posteriores com a regra emitem "user_permanent". Tratado como aceitação.
    • "user_temporary": Emitido quando o usuário escolheu “Yes” em um prompt de permissão para uma aprovação única, ou escolheu uma opção que concede acesso pelo restante da sessão em um prompt de edição ou leitura de arquivo. Na CLI interativa, isso é emitido apenas para a escolha em si; chamadas posteriores permitidas por essa concessão com escopo de sessão emitem "config". Em sessões do Agent SDK ou não interativas com -p, tanto a escolha quanto as correspondências posteriores emitem "user_temporary". Tratado como aceitação.
    • "user_abort": Emitido quando o usuário dispensou o prompt de permissão sem responder. Em sessões do Agent SDK e não interativas com -p, isso inclui interromper o turno enquanto uma requisição de permissão de canUseTool ou --permission-prompt-tool está pendente. Tratado como rejeição.
    • "user_reject": Emitido quando o usuário escolheu “No” ao ser solicitado. Na CLI interativa, isso é emitido apenas para essa escolha em si; chamadas que correspondem a uma regra de deny nas configurações pessoais do usuário emitem "config". Em sessões do Agent SDK ou não interativas com -p, chamadas que correspondem a uma regra de deny nas configurações pessoais emitem "user_reject". Tratado como rejeição.
  • classifier_verdict: O veredito do classificador do modo auto para a chamada, ou o motivo pelo qual o Claude Code negou a chamada quando nenhum veredito veio. Requer Claude Code v2.1.301 ou posterior
    • "allow": o classificador aprovou a chamada
    • "block": o classificador bloqueou a chamada. Uma verificação do classificador que falha no meio do caminho também pode terminar como "block", portanto uma indisponibilidade parcial do classificador pode aparecer como mais bloqueios em vez de como "unavailable"
    • "no_verdict": a verificação foi executada, mas não deu nenhum veredito utilizável, então o Claude Code negou a chamada. A negação não significa que o classificador considerou a chamada insegura
    • "unavailable": a requisição ao classificador falhou, por exemplo por rate limit, timeout ou erro de conexão, então o Claude Code negou a chamada. Com a revisão do classificador no lado do servidor, também marca uma chamada negada porque o servidor não retornou nenhum veredito de segurança
    O atributo também aparece em chamadas no modo de planejamento quando o classificador revisa comandos no modo de planejamento. O atributo está ausente nestes casos:
    • Uma regra de permissão de permissão ou negação decidiu a chamada
    • O Claude Code aprovou a chamada no modo auto sem consultar o classificador
    • O usuário respondeu ao prompt que o Claude Code mostrou após bloqueios repetidos
    • Em uma execução com -p sem --permission-prompt-tool, o Claude Code negou a chamada após bloqueios repetidos porque não havia ninguém para responder a um prompt. Esse evento informa decision como "reject" e source como "config"
  • classifier_category (quando OTEL_LOG_TOOL_DETAILS=1): O nome da regra integrada que o classificador indicou quando bloqueou a chamada, em minúsculas com sublinhados, como "data_exfiltration" para a regra Data Exfiltration. Requer Claude Code v2.1.301 ou posterior. O atributo está presente quando ambas as condições são verdadeiras:
    • classifier_verdict é "block"
    • O classificador indicou exatamente uma regra, e essa regra é integrada, e não uma que você escreveu
    Antes da v2.1.302, o atributo também estava ausente em qualquer bloqueio decidido pela revisão do classificador do lado do servidor.
  • permission_mode: Modo de permissão ativo quando a verificação de permissão desta chamada começou: "default", "plan", "acceptEdits", "bypassPermissions", "dontAsk" ou "auto". O modo manual aparece como "default". Uma chamada de subagente informa o modo de permissão do subagente em vez do da sessão. Requer Claude Code v2.1.301 ou posterior
  • tool_parameters (quando OTEL_LOG_TOOL_DETAILS=1): String JSON contendo parâmetros específicos da ferramenta. Mesmo formato que o Evento de resultado de ferramenta, sem os campos pós-execução, como git_commit_id. Os valores podem diferir de tool_result para uma chamada aceita se a decisão de permissão reescrever a entrada da ferramenta por meio de updatedInput. Use este atributo para ver qual comando foi rejeitado quando decision é "reject".
    • Para ferramentas "sdk_host_builtin_mcp": mcp_server_name e mcp_tool_name são incluídos mesmo quando OTEL_LOG_TOOL_DETAILS está desativado, porque o aplicativo host define esses nomes; sem eles, uma chamada rejeitada a um desses servidores integrados não poderia ser atribuída no stream padrão. Para servidores MCP configurados pelo usuário, o tool_name do evento é sempre o literal "mcp_tool", e os nomes do servidor e da ferramenta aparecem apenas em tool_parameters com a flag ativada; o conteúdo dos argumentos requer a flag em todos os casos.
    • Para a ferramenta Bash: inclui bash_command, full_command, timeout, description, dangerouslyDisableSandbox. A ferramenta bash do workspace do aplicativo desktop também informa tool_name como Bash, mas inclui apenas bash_command, full_command e timeout
    • Para ferramentas MCP: inclui mcp_server_name, mcp_tool_name
    • Para a ferramenta Skill: inclui skill_name
    • Para a ferramenta Agent ou a ferramenta legada Task: inclui subagent_type
Se você reduzir o OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT do SDK do OpenTelemetry para um valor abaixo do número de atributos de um evento tool_decision, o SDK descarta os atributos que o Claude Code definiu por último. O SDK descarta estes antes de qualquer outro atributo, nesta ordem, ignorando os que o evento não carrega:
  1. parent_agent_id
  2. agent_id
  3. request_id
  4. permission_mode
  5. classifier_category
  6. classifier_verdict
permission_mode, classifier_category e classifier_verdict são descartados nessa ordem no Claude Code v2.1.302 ou posterior. parent_agent_id, agent_id e request_id requerem v2.1.310 ou posterior.

Evento de segurança

Registrado quando uma verificação recusa uma chamada de ferramenta ou exige um prompt de permissão, exceto para chamadas sem evento de segurança. Também registrado quando o proxy de rede do sandbox recusa uma conexão ou requisição, e quando um hook bloqueia um resultado. Requer Claude Code v2.1.307 ou posterior. O evento é exportado com os outros eventos e não tem uma configuração separada. Os atributos próprios do evento não contêm texto de comandos, caminhos de arquivos, nomes de host nem nomes de servidores e ferramentas MCP. O registro também contém os atributos padrão que todo evento possui, que podem incluir workspace.host_paths e os atributos de repositório. Para ver o comando ou a ferramenta MCP por trás de um evento, defina OTEL_LOG_TOOL_DETAILS=1 e leia tool_parameters no evento tool_decision correspondente. Nome do evento: claude_code.safety_event Atributos:
  • Todos os atributos padrão
  • event.name: "safety_event"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • category: A verificação ou o resultado, um valor de categoria
  • decision: "accept", "reject" ou "sent_back" quando um hook bloqueou um resultado ou o fim de um turno
  • decision_source: Quem ou o que decidiu, um valor de source de tool_decision ou "other"
  • reason_code: O motivo da verificação, como "rule:policySettings", "mode:dontAsk", "hook:PreToolUse", "classifier:auto-mode", "bashMiss:too-complex" ou "unknown"
  • reason_type: O tipo de motivo da verificação, como "rule", "subcommandResults", "mode", "hook", "classifier" ou "asyncAgent"
  • rule_source: Origem de configuração da regra envolvida, como "policySettings", "userSettings", "projectSettings", "localSettings", "flagSettings", "cliArg" ou "session"
  • grant_scope: "once" ou "session" para um prompt aprovado sem salvar uma regra em um arquivo de configurações
  • circuit_breaker: A verificação de segurança integrada, como "dangerousRemoval", "outsideReadsBlocked" ou "claudeSettingsFile"
  • classifier_category: Com OTEL_LOG_TOOL_DETAILS=1, a regra integrada por trás de um bloqueio do modo auto, como "data_exfiltration"
  • hook_event: "pre_tool_use" para um hook PreToolUse, ou "post_tool_use", "post_tool_use_failure", "stop" ou "subagent_stop" em eventos "hook_review"
  • tool_class: "bash" para Bash e Monitor, "powershell", "file" para Read, Edit, Write, NotebookEdit, Glob e Grep, "web" para WebFetch e WebSearch, "mcp" ou "other"
  • tool_name: O nome da ferramenta, como "Bash" para uma ferramenta integrada, ou "mcp_tool", "skill_tool", "dynamic_tool" ou "other_tool"
  • tool_source: "builtin", "mcp" ou "sdk_host_builtin_mcp", como em tool_decision
  • permission_mode: O modo de permissão da chamada no momento da verificação: "default", "plan", "acceptEdits", "bypassPermissions", "dontAsk" ou "auto"
  • tool_use_id: O ID da chamada, como em tool_decision e tool_result
  • sandbox_violation_count: Quantas conexões ou requisições distintas do comando da chamada o proxy de rede do sandbox recusou, de "0" a "20", como string. As recusas são contadas para um comando em sandbox que terminou em primeiro plano
  • sandbox_enabled: "true" se o sandboxing estiver ativado para a sessão, caso contrário "false"
Estes são os atributos próprios do evento quando uma regra de deny das configurações gerenciadas recusa um comando Bash:
Para encontrar recusas do proxy em qualquer category, filtre por um sandbox_violation_count que esteja presente e não seja "0". Para encontrar chamadas recusadas porque ninguém podia responder a um prompt sem categoria, procure eventos tool_decision que informam "reject" com source "config" e nenhum evento de segurança compartilhando seu tool_use_id. Essas recusas ocorrem em uma execução -p sem --permission-prompt-tool e sem --permission-prompts none. Verifique chamadas como estas em busca de um evento tool_decision, já que elas não têm evento de segurança, exceto eventos "sandbox_network", "sandbox_other" ou "hook_review" enviados após sua execução:
  • Uma chamada aprovada em um prompt sem categoria
  • Uma chamada que um callback canUseTool ou uma ferramenta --permission-prompt-tool aprovou em um prompt exigido apenas por um hook PreToolUse
  • Uma chamada de AskUserQuestion ou ExitPlanMode, recusada ou não
Um prompt não tem categoria quando nenhum valor de category nomeia sua verificação, como o prompt do modo default para uma edição dentro do seu diretório de trabalho.

Evento de alteração do modo de permissão

Registrado quando o modo de permissão muda, por exemplo ao alternar com Shift+Tab, ao sair do modo de planejamento ou em uma verificação de acesso do modo auto. Para agrupar chamadas de ferramenta pelo modo de permissão em que cada uma foi verificada, use permission_mode no Evento de decisão de ferramenta. Nome do evento: claude_code.permission_mode_changed Atributos:
  • Todos os atributos padrão
  • event.name: "permission_mode_changed"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • from_mode: O modo de permissão anterior, por exemplo "default", "plan", "acceptEdits", "auto" ou "bypassPermissions"
  • to_mode: O novo modo de permissão
  • trigger: O que causou a alteração, por exemplo "shift_tab", "exit_plan_mode" ou "auto_gate_denied". Ausente em algumas alterações, como quando o SDK define o modo de permissão por meio de setPermissionMode()

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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • action: "login" ou "logout"
  • success: "true" ou "false"
  • auth_method: Método de autenticação, como "oauth"
  • error_category: Tipo categórico de erro quando a ação falhou. A mensagem de erro bruta nunca é incluída
  • status_code: Código de status HTTP como string quando a ação falhou com um erro HTTP

Evento de conexão de servidor MCP

Registrado quando um servidor MCP se conecta, se desconecta ou não consegue se conectar. Nome do evento: claude_code.mcp_server_connection Atributos:
  • Todos os atributos padrão
  • event.name: "mcp_server_connection"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • status: "connected", "failed" ou "disconnected"
  • transport_type: Transporte do servidor, como "stdio", "sse" ou "http"
  • server_scope: Escopo em que o servidor está configurado, como "user", "project" ou "local"
  • duration_ms: Duração da tentativa de conexão em milissegundos
  • error_code: Código de erro quando a conexão falhou
  • is_plugin: true quando o servidor é fornecido por um plugin, false caso contrário
  • plugin_id_hash (quando is_plugin é true): Hash estável do nome do plugin e do marketplace, para agrupar eventos por plugin sem expor o nome. O Claude Code o calcula conforme descrito no evento de plugin carregado
  • plugin.name (quando is_plugin é true): Nome do plugin que fornece o servidor. Para plugins de terceiros, esta é a string literal "third-party", a menos que OTEL_LOG_TOOL_DETAILS=1; isso impede que nomes de plugins de terceiros apareçam nos logs por padrão. Plugins de fontes oficiais da Anthropic são sempre identificados pelo nome. Os atributos plugin_id_hash e plugin.name fluem para o seu próprio backend de monitoramento e não são enviados à Anthropic
  • server_name (quando OTEL_LOG_TOOL_DETAILS=1): Nome do servidor configurado
  • error (quando OTEL_LOG_TOOL_DETAILS=1): Mensagem de erro completa quando a conexão falhou

Evento de erro interno

Registrado quando o Claude Code captura um erro interno inesperado. Apenas o nome da classe do erro e um código no estilo errno são registrados. A mensagem de erro e o stack trace nunca são incluídos. Este evento não é emitido ao executar com Amazon Bedrock, Agent Platform do Google Cloud ou Microsoft Foundry, nem quando DISABLE_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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • error_name: Nome da classe do 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 ser instalado, tanto pelo comando da CLI claude plugin install quanto pela UI interativa /plugin. Nome do evento: claude_code.plugin_installed Atributos:
  • Todos os atributos padrão
  • event.name: "plugin_installed"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • marketplace.is_official: "true" se o marketplace for um marketplace oficial da Anthropic, "false" caso contrário
  • install.trigger: "cli" ou "ui"
  • plugin.name: Nome do plugin instalado. Para marketplaces de terceiros, é incluído apenas quando OTEL_LOG_TOOL_DETAILS=1
  • plugin.version: Versão do plugin, quando declarada na entrada do marketplace. Para marketplaces de terceiros, é incluída apenas quando OTEL_LOG_TOOL_DETAILS=1
  • marketplace.name: Marketplace de onde o plugin foi instalado. Para marketplaces de terceiros, é incluído apenas quando OTEL_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 toda a sua frota, como complemento a plugin_installed, que registra a própria ação de instalação. Nome do evento: claude_code.plugin_loaded Atributos:
  • Todos os atributos padrão
  • event.name: "plugin_loaded"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • plugin.name: nome do plugin. Para plugins fora do marketplace oficial e do pacote integrado, o valor é "third-party", a menos que OTEL_LOG_TOOL_DETAILS=1
  • marketplace.name: marketplace de onde o plugin foi instalado, quando conhecido. Ocultado como "third-party" sob a mesma condição que plugin.name
  • plugin.version: versão do manifesto do plugin. Incluída apenas quando o nome não está ocultado e o manifesto declara uma versão
  • plugin.scope: categoria de procedência do plugin: "official", "community", "org", "user-local" ou "default-bundle"
  • enabled_via: como o plugin passou a estar 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 de instalação automática para a sua organização em Organization settings > Plugins & skills. Antes da v2.1.246, o Claude Code informava esses plugins como "user-install" ou "seed-mount"
  • plugin_id_hash: hash determinístico do nome do plugin e do marketplace, enviado apenas ao seu exportador configurado. Permite contar os plugins de terceiros distintos carregados em toda a sua frota sem registrar seus nomes. Para plugins sincronizados do claude.ai, o Claude Code calcula o hash do nome do plugin com o nome do marketplace que o claude.ai informa para o plugin, ou com synced caso contrário. Antes da v2.1.246, o Claude Code não usava no hash o nome do marketplace informado pelo claude.ai
  • has_hooks: se o plugin contribui com hooks, por meio de configuração de hooks ou como um mod
  • has_mcp: se o plugin contribui com servidores MCP
  • host_owned_mcp: true quando o host do SDK gerencia as conexões MCP deste plugin e o Claude Code deixou de ler a configuração de servidor MCP do plugin, false caso contrário
  • skill_path_count: número de diretórios de skills que o plugin declara
  • command_path_count: número de diretórios de comandos que o plugin declara
  • agent_path_count: número de diretórios de agentes que o plugin declara
  • safe_mode: "true" quando a sessão foi iniciada com --safe-mode, "false" caso contrário. No modo seguro, este evento informa apenas o inventário configurado; os comandos, skills, hooks e servidores MCP do plugin não são carregados. Requer Claude Code v2.1.169 ou posterior

Evento de skill ativada

Registrado quando uma skill é invocada, seja quando o Claude a chama pela ferramenta Skill ou quando 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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • skill.name: Nome da skill. Para skills definidas pelo usuário e de plugins de terceiros, o valor é o placeholder "custom_skill", a menos que OTEL_LOG_TOOL_DETAILS=1
  • invocation_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ário
  • plugin.name (quando OTEL_LOG_TOOL_DETAILS=1 ou o plugin é de um marketplace oficial): Nome do plugin proprietário quando a skill é fornecida por um plugin
  • marketplace.name (quando OTEL_LOG_TOOL_DETAILS=1 ou o plugin é de um marketplace oficial): Marketplace de onde o plugin proprietário foi instalado, quando a skill é fornecida por um plugin

Evento de menção com @

Registrado quando o Claude Code resolve uma menção com @ em um prompt. Nem toda menção emite um evento: caminhos de saída antecipada, como negações de permissão, arquivos grandes demais, anexos de referência de PDF e falhas na listagem de diretórios, retornam sem registrar em log. Cada vez que o Claude Code lê um prompt, ele registra no máximo 100 eventos com mention_type igual a "agent" e 100 com "mcp_resource". Menções além de qualquer um desses limites ainda são resolvidas, mas não emitem evento. Nome do evento: claude_code.at_mention Atributos:
  • Todos os atributos padrão
  • event.name: "at_mention"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • mention_type: Tipo de menção ("file", "directory", "agent", "mcp_resource", "peer"). O valor "peer" significa que você mencionou uma das suas outras sessões do Claude Code. Requer Claude Code v2.1.232 ou posterior
  • success: Se a menção foi resolvida com sucesso ("true" ou "false")

Evento de novas tentativas de API esgotadas

Registrado uma vez quando uma requisição de API falha após mais de uma tentativa. Emitido junto com o evento api_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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • model: Modelo usado
  • error: Mensagem de erro final
  • status_code: Código de status HTTP como número. Ausente para erros não HTTP.
  • total_attempts: Número total de tentativas feitas
  • total_retry_duration_ms: Tempo total de relógio em todas as tentativas
  • speed: "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 toda a sua frota, como complemento aos eventos por execução hook_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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • hook_event: tipo de evento do hook, como "PreToolUse" ou "PostToolUse"
  • hook_type: tipo de implementação do hook: "command", "prompt", "mcp_tool", "http" ou "agent"
  • hook_source: onde o hook está 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 posterior
  • hook_matcher (quando OTEL_LOG_TOOL_DETAILS=1): a string do matcher da configuração do hook, quando houver uma definida
  • plugin.name (quando hook_source é "pluginHook"): nome do plugin contribuinte. Para plugins fora do marketplace oficial e do pacote integrado, o valor é "third-party", a menos que OTEL_LOG_TOOL_DETAILS=1
  • plugin_id_hash (quando hook_source é "pluginHook"): hash determinístico do nome do plugin e do marketplace, enviado apenas ao seu exportador configurado. Permite contar os plugins contribuintes distintos sem registrar seus nomes. O Claude Code o calcula 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 ser executados 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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • hook_event: Tipo de evento do hook, como "PreToolUse" ou "PostToolUse"
  • hook_name: Nome completo do hook incluindo o matcher, como "PreToolUse:Write"
  • num_hooks: Número de comandos de hook correspondentes
  • managed_only: "true" quando apenas hooks de política gerenciada são permitidos
  • hook_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 posterior
  • hook_definitions: Configuração do hook serializada em JSON. Incluída apenas quando o tracing beta detalhado e OTEL_LOG_TOOL_DETAILS=1 estão ambos habilitados

Evento de conclusão da execução de hooks

Registrado quando todos os hooks de um evento de hook terminam. Nome do evento: claude_code.hook_execution_complete Atributos:
  • Todos os atributos padrão
  • event.name: "hook_execution_complete"
  • event.timestamp: timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • hook_event: Tipo de evento de hook
  • hook_name: Nome completo do hook, incluindo o matcher
  • num_hooks: Número de comandos de hook correspondentes
  • num_success: Quantidade que foi concluída com sucesso
  • num_blocking: Quantidade que retornou uma decisão de bloqueio
  • num_non_blocking_error: Quantidade que falhou sem bloquear
  • num_cancelled: Quantidade cancelada antes da conclusão
  • total_duration_ms: Duração em tempo real de todos os hooks correspondentes
  • stdout_chars: Total de caracteres de stdout dos hooks correspondentes que tiveram sucesso. Requer Claude Code v2.1.280 ou posterior
  • additional_context_chars: Total de caracteres de additionalContext retornados pelos hooks correspondentes. Requer Claude Code v2.1.280 ou posterior
  • system_message_chars: Total de caracteres de systemMessage retornados pelos hooks correspondentes. Requer Claude Code v2.1.280 ou posterior
  • initial_user_message_chars: Total de caracteres de initialUserMessage retornados pelos hooks correspondentes. Requer Claude Code v2.1.280 ou posterior
  • num_outputs_persisted: Número de saídas de hooks acima do limite de 10.000 caracteres que o Claude Code salvou em um arquivo. Requer Claude Code v2.1.280 ou posterior
  • managed_only: "true" quando apenas hooks de política gerenciada são permitidos
  • hook_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 posterior
  • hook_definitions: Configuração de hooks serializada em JSON. Incluído somente quando tanto o rastreamento beta detalhado quanto OTEL_LOG_TOOL_DETAILS=1 estão ativados

Evento de métricas de plugin de hook

Registrado quando um hook de plugin do marketplace oficial emite métricas por invocação. Somente plugins instalados de um marketplace oficial da Anthropic podem emitir essas métricas. Plugins de marketplaces de terceiros e hooks configurados pelo usuário não emitem este evento. Use este evento para monitorar o comportamento de plugins, como taxas de descobertas, custos e durações, a partir da sua própria stack 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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • plugin_id: identificador do plugin no formato <name>@<marketplace>
  • hook_event: tipo de evento de hook que emitiu as métricas
  • Até 20 chaves de métricas emitidas pelo plugin. Os nomes correspondem a ^[a-z][a-z0-9_]{0,39}$. Os valores são booleanos ou números.

Evento de compactação

Registrado quando a compactação da conversa é concluída. Nome do evento: claude_code.compaction Atributos:
  • Todos os atributos padrão
  • event.name: "compaction"
  • event.timestamp: timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • trigger: "auto" ou "manual"
  • success: "true" ou "false"
  • duration_ms: Duração da compactação
  • pre_tokens: Contagem aproximada de tokens antes da compactação
  • post_tokens: Contagem aproximada de tokens após a compactação
  • error: Mensagem de erro quando a compactação falhou
  • precompute_reuse: Definido apenas quando trigger é "manual", ou quando trigger é "auto" para uma compactação por inatividade em uma sessão interativa no terminal. A compactação automática pode preparar um resumo em segundo plano antes que a janela de contexto se encha, e este atributo registra se a compactação reutilizou esse resumo preparado. "hit" significa que ele foi reutilizado; "miss_custom_instructions", "miss_hook" e "miss_not_ready" indicam o motivo pelo qual um novo resumo foi calculado em vez disso

Evento de subagente concluído

Registrado quando um subagente termina e retorna seu resultado à conversa que o iniciou. Use-o para agregar o uso de ferramentas e o tempo de execução por tipo de subagente; para agregações de tokens ou custos, use o contador de tokens e o contador de custos filtrados por query_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 agentes, 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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • agent_type: O tipo de subagente. Nomes de agentes integrados e agentes de plugins do marketplace oficial aparecem literalmente; outros nomes de agentes são substituídos por "custom", a menos que OTEL_LOG_TOOL_DETAILS=1 esteja definido
  • agent.source: De onde veio a definição do agente: built-in, plugin ou a fonte de configurações que definiu um agente personalizado, como userSettings ou projectSettings
  • is_built_in: Se o subagente é um tipo de agente integrado
  • is_async: Se o subagente foi executado em segundo plano
  • total_tokens: A quantidade de tokens da requisição final da API do subagente: os 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 ao longo da execução
  • total_tool_uses: Número de chamadas de ferramenta que o subagente fez ao longo de toda a execução
  • duration_ms: Tempo de execução em milissegundos
  • model: O modelo com o qual o subagente foi resolvido para executar
  • final_model: O modelo que produziu a resposta final do subagente, que difere de model após uma troca no meio da execução, como um fallback
  • model_swapped: Se mais de um modelo atendeu às requisições do subagente
  • plugin_id_hash, plugin.name: Presentes para agentes fornecidos por plugins. Nomes de plugins do marketplace oficial aparecem literalmente; outros nomes de plugins são substituídos por "third-party", a menos que OTEL_LOG_TOOL_DETAILS=1 esteja definido

Evento de pesquisa de feedback

Registrado quando uma pesquisa de qualidade da sessão é exibida ou respondida. Consulte Pesquisas de qualidade da sessão para saber 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 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • event_type: Evento do ciclo de vida da pesquisa, por exemplo "appeared", "responded" ou "transcript_prompt_appeared"
  • appearance_id: ID exclusivo que vincula os eventos emitidos para uma instância de pesquisa
  • survey_type: Qual pesquisa produziu o evento. "session" é o prompt de avaliação “How is Claude doing?”
  • response: A seleção do usuário em eventos responded
  • enabled_via_override: true quando CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL está definido. Emitido como booleano, não como string. Presente em eventos de pesquisa session. Filtre por este atributo para confirmar que a substituição está aplicada em toda uma frota

Evento de varredura de retenção

Registrado uma vez por execução da varredura de limpeza de retenção, que exclui transcrições de sessão e outros dados da aplicação mais antigos que a configuração cleanupPeriodDays. O Claude Code executa a varredura em segundo plano no máximo uma vez por sessão, e uma execução que não exclui nada ainda assim emite o evento. Se o Claude Code executou a varredura em qualquer sessão na mesma máquina nas últimas 24 horas, ele adia a varredura desta sessão em pelo menos 10 minutos, portanto uma sessão que termina antes disso não emite nada. Quando você executa claude -p com --bare, o Claude Code não executa a varredura e não emite nada. Como todos os eventos OTel desta página, ele vai apenas para o backend de telemetria que você configurar. Requer Claude Code v2.1.227 ou posterior. Quando o Claude Code não consegue determinar com segurança o período de retenção, ele pausa a varredura e emite o evento com result definido como "skipped" e um skip_reason. Quando as 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á corrompido ou inválido. Quando o próprio managed-settings.json não pode ser lido, o 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 arquivo drop-in managed-settings.d/ ao lado do arquivo corrompido. Os atributos de contagem de exclusões estão presentes somente quando result é "complete". Nome do evento: claude_code.retention_sweep Atributos:
  • Todos os atributos padrão
  • event.name: "retention_sweep"
  • event.timestamp: timestamp ISO 8601
  • event.sequence: contador por processo para ordenar eventos, descrito em Atributos de correlação de eventos
  • result: "complete" quando a varredura foi executada, "skipped" quando o Claude Code a pausou
  • period_days: O valor de cleanupPeriodDays das configurações mescladas, em dias, ou 30 quando nenhuma fonte o define. Em eventos ignorados, o valor que a varredura teria usado, calculado a partir das fontes de configurações que o Claude Code conseguiu ler
  • used_default: "true" quando nenhuma fonte de configurações legível define cleanupPeriodDays, "false" caso contrário. Em eventos concluídos, "true" significa que o padrão de 30 dias foi aplicado
  • skip_reason: Por que o Claude Code pausou a varredura. Presente apenas quando result é "skipped":
    • "user_source_disabled": As configurações do usuário estão excluídas, por exemplo pela flag --setting-sources ou pela opção settingSources do SDK, e nenhuma origem habilitada fornece cleanupPeriodDays
    • "settings_unknowable": Um arquivo de configurações não pôde ser lido ou analisado, portanto cleanupPeriodDays ou desktopSessionCleanupPeriodDays pode estar definido com um valor que o Claude Code não consegue ver
    • "settings_invalid_key_set": As configurações têm erros de validação e cleanupPeriodDays ou desktopSessionCleanupPeriodDays está explicitamente definido, portanto recorrer ao padrão poderia excluir ou manter arquivos em desacordo com essa configuração
    • "remote_settings_unknowable": Uma sessão na aba Code do Claude Desktop em uma implantação de terceiros solicitou configurações gerenciadas pelo servidor. Ela não recebeu nenhuma resposta utilizável, portanto cleanupPeriodDays pode estar definido com um valor que o Claude Code não consegue ver
  • transcripts_deleted: Número de transcrições de sessão, os arquivos de nível superior ~/.claude/projects/*/*.jsonl, que a varredura excluiu
  • transcripts_exempted_desktop: Número de transcrições além do período de retenção que a varredura manteve pela regra do Claude Desktop e Cowork. Elas não contam para files_past_cutoff. Requer Claude Code v2.1.248 ou posterior
  • session_files_deleted: Número de artefatos que a varredura de arquivos de sessão excluiu: transcrições mais arquivos complementares por sessão, como sidecars, gravações e resultados de ferramentas
  • artifacts_deleted: Total de itens que a varredura excluiu nos diretórios de dados que ela abrange, incluindo os arquivos de sessão. Algumas varreduras contam uma árvore de diretórios removida inteira como um item e algumas etapas de limpeza não contribuem para o contador, então trate o valor como um mínimo e não como uma contagem exata de arquivos
  • files_retained_fresh: Arquivos inspecionados e mantidos porque ainda estão dentro do período de retenção. Somente varreduras por arquivo os contam, então o valor é um mínimo; um valor diferente de zero é o estado normal
  • files_past_cutoff: Arquivos mais antigos que o período de retenção que a varredura não conseguiu excluir, por exemplo por causa de um erro de permissão ou de um arquivo mantido aberto. A contagem também inclui cada pasta obsoleta que a varredura encontra em skills/synced/ ou plugins/synced/, quer ela mova a pasta para a lixeira ou não. Além dessas pastas, um valor acima de zero significa que arquivos sobreviveram ao período de retenção configurado; zero não é prova de que nenhum sobreviveu, porque uma falha ao remover um diretório inteiro conta para error_count em vez disso
  • error_count: Número de erros que a varredura encontrou ao listar ou excluir 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 estado do auxiliar de política mudam durante a sessão, e quando o Claude Code se recusa a iniciar ou encerra a sessão por um dos motivos listados no atributo error.type. Use este evento para encontrar máquinas executando com uma fonte gerenciada inesperada, máquinas cujo auxiliar de política está falhando e o motivo pelo qual uma máquina se recusou a iniciar. Requer Claude Code v2.1.274 ou posterior. Por padrão, o evento contém as fontes gerenciadas e o estado do auxiliar de política, mas não as próprias configurações. Para adicionar o atributo redigido managed_settings.settings e o digest managed_settings.resolved_sha256, defina OTEL_LOG_MANAGED_SETTINGS=1:
  • Defina-o no bloco env das configurações gerenciadas, das configurações do usuário ou de --settings, ou no ambiente com o qual você inicia o Claude Code. Um valor nas configurações do projeto ou locais não o ativa, porque um repositório clonado pode gravá-las.
  • As configurações gerenciadas pelo servidor podem defini-lo sem exibir a caixa de diálogo de aprovação de segurança, porque a variável apenas adiciona a própria política redigida da sua organização a um evento que sua organização já recebe.
Em uma sessão interativa em uma pasta na qual você não confiou, o Claude Code não exporta o evento de recusa. Nome do evento: 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 da 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 interrompeu a sessão. O Claude Code envia um evento change somente quando um atributo difere do último evento enviado, e um valor de configuração alterado conta mesmo quando OTEL_LOG_MANAGED_SETTINGS está desativado
  • error.type: por que o Claude Code interrompeu a sessão. Presente somente em eventos refused:
    • "helper_failed": uma execução do auxiliar de política falhou
    • "policy_invalid": as configurações gerenciadas contêm um erro que impede o Claude Code de iniciar, ou uma fonte de administrador falhou ao carregar por um motivo diferente de leitura negada, então o Claude Code não consegue verificar o login da organização ou a imposição de provedor
    • "provider_not_allowed": a sessão usaria um provedor de API, ou enviaria o tráfego de um provedor para um host, que a lista gerenciada allowedProviders não permite. Requer Claude Code v2.1.285 ou posterior
    • "consent_rejected": o usuário rejeitou a caixa de diálogo de aprovação de segurança para configurações gerenciadas pelo servidor
    • "force_refresh_failed": a busca de configurações exigida por forceRemoteSettingsRefresh falhou
    • "gateway_rejected": um gateway de aplicativos Claude respondeu ao carregamento das configurações gerenciadas com HTTP 403
    • "version_below_minimum": esta versão do Claude Code está abaixo de requiredMinimumVersion ou acima de requiredMaximumVersion
    • "_OTHER": o carregamento das configurações gerenciadas do gateway de aplicativos Claude falhou por outro motivo
  • managed_settings.sources: toda fonte gerenciada que fornece pelo menos uma chave de política, da maior prioridade para a menor, incluindo fontes cujas chaves não têm efeito em first-wins. Os valores são "remote", "plist" ou "hklm" para a política MDM ou de nível do sistema operacional, "file" para arquivos de configurações gerenciadas e drop-ins, "parent" quando um host incorporador fornece configurações, e "hkcu" para o valor do registro HKCU do Windows quando o Claude Code o lê. Uma fonte que contém apenas chaves de controle, ou que o Claude Code não conseguiu ler, não é listada. Emitido como um array de strings, vazio quando nenhuma fonte gerenciada fornece uma chave de política
  • managed_settings.source_behavior: o valor de managedSourcesBehavior que o 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 de 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 nem um arquivo de configurações gerenciadas
  • managed_settings.helper.applied: "output" enquanto a própria saída do auxiliar serve como as configurações gerenciadas, "none" quando não serve
  • managed_settings.helper.entry: "policyHelper" quando o Claude Code selecionou um policyHelper. Ausente quando nenhum auxiliar foi selecionado
  • managed_settings.helper.path: o path configurado do auxiliar. Presente sempre que o Claude Code selecionou um auxiliar, esteja OTEL_LOG_MANAGED_SETTINGS definido ou não
  • managed_settings.resolved_sha256 (quando OTEL_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ços em branco. Máquinas com o mesmo digest executam a mesma política. O Claude Code envia o digest somente com a ativação opcional porque uma política curta pode ser recuperada calculando hashes de tentativas. Ausente quando nenhuma configuração gerenciada foi resolvida e em eventos refused
  • managed_settings.settings (quando OTEL_LOG_MANAGED_SETTINGS=1): os nomes e a estrutura das configurações gerenciadas resolvidas como uma string JSON, com os valores redigidos. Ausente em eventos refused. O Claude Code o constrói a partir do seu esquema de configurações:
    • Um nome de configuração que o esquema declara é exportado, e uma chave que ele não declara é omitida
    • 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.httpProxyPort e sandbox.network.socksProxyPort são exportados como "[REDACTED]"
    • Todas as outras strings, como model, apiKeyHelper, todos os valores de env, todas as URLs e todos os comandos, são exportadas como "[REDACTED]"
    • Os nomes das entradas de mapas, como nomes de variáveis de env e IDs de plugins, são exportados como estão. Uma configuração cujas entradas o esquema não tipa, como vimInsertModeRemaps, é exportada como um único "[REDACTED]", e sandbox.ignoreViolations é exportado como uma lista de suas listas de caminhos sem os padrões de comando
    • Uma lista mantém seu comprimento, com cada entrada redigida pelas mesmas regras
    • Uma regra permissions.allow, permissions.deny ou permissions.ask é exportada como o nome da ferramenta com o conteúdo redigido, como Read([REDACTED]), quando a ferramenta está integrada a esta versão do Claude Code ou é uma referência mcp__, como mcp__jira__create_issue. Qualquer outra regra é exportada como "[REDACTED]"
    • Hooks seguem as mesmas regras, então campos de opções fixas e numéricos, como type e timeout, aparecem, enquanto cada comando, URL, matcher e condição if é exportado como "[REDACTED]"
    Por exemplo, configurações gerenciadas com apiKeyHelper, duas variáveis de env 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])"]}}. O Claude Code corta o valor em 8 KB de UTF-8, e o valor cortado não é JSON válido
  • managed_settings.settings_truncated (quando managed_settings.settings está presente): true quando o Claude Code cortou managed_settings.settings em 8 KB, false caso contrário. Emitido como booleano, não como 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étrica claude_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.name e agent.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).
Claude Code conta cada resposta de streaming em relação às métricas de custo e token exatamente uma vez, incluindo quando um gateway ou proxy atrás de ANTHROPIC_BASE_URL transmite uso progressivamente em vários frames.

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
Todas as métricas podem ser segmentadas pelos atributos padrão. O atributo model está disponível em claude_code.token.usage, claude_code.cost.usage e 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 evento claude_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 de tentativas. CLAUDE_CODE_MAX_RETRIES tem como padrão 10 e é limitado a 15; com CLAUDE_CODE_RETRY_WATCHDOG definido, o padrão é maior e não há limite. Quando a requisição esgota todas as novas tentativas em um erro transitório, attempt é no máximo um a mais do que esse limite efetivo: 11 por padrão. Um valor menor ainda pode significar que as novas tentativas se esgotaram: attempt recomeça a partir de 1 cada vez que Claude Code reenvia a requisição após uma falha de streaming. 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
Monitoramento de desempenho: rastreie durações de solicitações de API e tempos de execução de ferramentas para identificar gargalos de desempenho.

Mapear tokens de entrada para as convenções semânticas GenAI do OpenTelemetry

Claude Code exporta as contagens de tokens de entrada conforme aparecem no bloco de uso da resposta da API, portanto esses valores excluem tokens lidos ou gravados no cache de prompt: Claude Code não define atributos gen_ai.usage.*. As convenções semânticas GenAI do OpenTelemetry dizem que gen_ai.usage.input_tokens deve incluir tokens lidos e gravados no cache. Para calcular esse total:
  • A partir do span ou evento: some input_tokens, cache_read_tokens e cache_creation_tokens
  • A partir da métrica claude_code.token.usage: some seus tipos "input", "cacheRead" e "cacheCreation"
As convenções também definem atributos separados para leituras e gravações de cache:
  • cache_read_tokens corresponde a gen_ai.usage.cache_read.input_tokens
  • cache_creation_tokens corresponde a gen_ai.usage.cache_write.input_tokens. Versões mais antigas das convenções nomeiam o atributo de gravação de cache como gen_ai.usage.cache_creation.input_tokens, portanto use o nome que seu backend espera.

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 através de /login, onde é o assunto do IdP do token emitido pelo gateway. Em uma sessão que um desenvolvedor inicia, chamadas de ferramenta MCP, comandos Bash e edições de arquivo são, portanto, atribuídas a esse desenvolvedor. 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. Em sessões de canal Claude Tag, Claude funciona como a identidade compartilhada da sua organização. 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: veja Atributos padrão para a identidade que suas exportações carregam.

Auditoria de atividade MCP

Para capturar atividade do servidor MCP com detalhe completo de chamada, ative o exportador de logs e defina OTEL_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ém mcp_server_scope e um tool_name reduzido 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 par mcp_server_name/mcp_tool_name dentro de tool_parameters, a mesma exceção de autoria de host que tool_decision
  • tool_decision: mantém tool_source e um tool_name reduzido 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 par mcp_server_name/mcp_tool_name dentro de tool_parameters
  • mcp_server_connection: omite server_name e a mensagem de erro, mas mantém is_plugin, plugin_id_hash e plugin.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.

Mapear caminhos de saída para controles gerenciados e eventos

A tabela associa caminhos que podem levar conteúdo da sessão para fora de uma máquina, além da retenção local, às chaves de configurações gerenciadas que os restringem e aos eventos que os registram. Para o que o próprio Claude Code envia à Anthropic, como relatórios de /feedback, veja Uso de dados. Os nomes têm links para suas entradas de referência, que fornecem os valores e padrões. As entradas allowedHttpHookUrls, managed-mcp.json e de eventos de hook exigem mais do que a tabela mostra:
  • allowedHttpHookUrls: as entradas são mescladas entre os arquivos de configurações, então um desenvolvedor pode adicionar itens a uma lista gerenciada vazia. allowManagedHooksOnly decide quais hooks são executados
  • managed-mcp.json: para desativar o MCP, veja Desativar o MCP completamente. Para confirmar que Claude Code lê o arquivo, veja Validar a configuração
  • Eventos de hook: Claude Code registra hook_execution_start e hook_execution_complete uma vez por evento de hook, abrangendo todos os hooks correspondentes. OTEL_LOG_TOOL_DETAILS=1 sozinho não registra a URL de um hook HTTP. A configuração do hook aparece apenas em hook_definitions, que também exige o rastreamento beta detalhado
OTEL_LOG_TOOL_DETAILS=1 adiciona strings de comando, nomes de servidores e ferramentas e a entrada das ferramentas a esses eventos. Esse detalhe pode conter o mesmo conteúdo sensível que a própria sessão, então ative-o apenas quando seu coletor estiver aprovado para armazenar esse conteúdo.

Verificar a varredura de retenção

Para dar a todas as máquinas o mesmo período de retenção, defina cleanupPeriodDays nas configurações gerenciadas. Para verificar se as máquinas executam a varredura com esse valor, colete o evento retention_sweep. period_days e os contadores são strings, então converta-os em números antes de compará-los. Uma máquina que funciona como esperado pode ficar sem um evento por motivos como estes:
  • Ninguém inicia o Claude Code: nenhuma varredura é executada, e a máquina mantém seus dados até a próxima inicialização
  • Uma sessão permanece aberta: Claude Code executa a varredura no máximo uma vez por sessão
  • Uma sessão termina cedo: uma varredura que não terminou quando a sessão é encerrada não emite nada, assim como uma que para devido a um erro inesperado
A varredura não abrange todos os caminhos. Mantidos até que você os exclua lista o que permanece, e Limpar dados locais mostra como removê-los.

Enviar eventos para um SIEM

Aponte OTEL_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:
Para confirmar que os eventos chegam, envie um prompt em uma sessão executada sob essa configuração e verifique seu SIEM para o evento 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:

Backends 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

Backends para eventos e 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

Backends 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
Para organizações que exigem métricas de Usuário Ativo Diário/Semanal/Mensal (DAU/WAU/MAU), considere backends que suportam consultas eficientes de valor único.

Informações de serviço

Todas as métricas e eventos são exportados com os seguintes atributos de recurso:
  • service.name: claude-code para sessões de terminal, claude-code-desktop para sessões locais iniciadas a partir da aba Code no aplicativo Claude Desktop
  • service.version: Versão atual do Claude Code, ou a versão do aplicativo Desktop para sessões locais da aba Code
  • os.type: Tipo de sistema operacional (por exemplo, linux, darwin, windows)
  • os.version: String de versão do sistema operacional
  • host.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
Se seus pipelines de coletor ou painéis filtrarem em service.name = claude-code, adicione claude-code-desktop ao filtro para também capturar telemetria de sessões locais 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 do OpenTelemetry para o seu backend é opcional e requer configuração explícita. Para a telemetria operacional separada da Anthropic e como desativá-la, consulte Uso de dados
  • O conteúdo bruto de arquivos e trechos de código não são incluídos em métricas ou eventos. Os spans de trace são um caminho de dados separado: consulte o item sobre OTEL_LOG_TOOL_CONTENT abaixo
  • Quando autenticado via OAuth, user.email é incluído nos atributos de telemetria, enviado apenas para o endpoint OTel que você configurar, nunca para a Anthropic. Se isso for uma preocupação para a sua organização, trabalhe com o seu backend de telemetria para filtrar ou ocultar esse campo
  • O conteúdo dos prompts do usuário não é coletado por padrão. Apenas o comprimento do prompt é registrado. Para incluir o conteúdo do prompt, defina OTEL_LOG_USER_PROMPTS=1. Quando ativado:
    • Os eventos user_prompt carregam o texto do prompt em dois atributos, prompt e prompt_text. Se você descartar ou mascarar o texto do prompt do evento pelo nome do atributo no seu coletor, nomeie ambos os atributos na regra Este processador attributes do OpenTelemetry Collector exclui ambos os atributos nos pipelines que o listam:
    • Com o tracing ativado, o span claude_code.interaction carrega o texto do prompt no seu atributo user_prompt
    • No tracing beta detalhado, os spans também carregam as novas mensagens do usuário, resultados de ferramentas e lembretes do sistema enviados com cada requisição, o texto do system prompt e a saída do modelo. Atributos de conteúdo no tracing beta detalhado lista cada atributo. O evento claude_code.system_prompt carrega o system prompt completo
  • O texto das respostas do assistente não é coletado por padrão. Apenas o comprimento da resposta é registrado. Para incluir o texto da resposta, defina OTEL_LOG_ASSISTANT_RESPONSES=1. Como todos os dados do OpenTelemetry do Claude Code, o texto da resposta é enviado apenas para o endpoint OTel que você configurar, nunca para a Anthropic. Quando essa variável não está definida, OTEL_LOG_USER_PROMPTS é usada como fallback, então defina OTEL_LOG_ASSISTANT_RESPONSES=0 se quiser o conteúdo do prompt sem o conteúdo da resposta nos eventos. No tracing beta detalhado, o span claude_code.llm_request ainda carrega a saída do modelo em response.model_output, que segue OTEL_LOG_USER_PROMPTS em vez dessa variável
  • Os argumentos e parâmetros de entrada das ferramentas não são registrados em log por padrão. Para incluí-los, defina OTEL_LOG_TOOL_DETAILS=1. Para os servidores integrados do Claude Desktop, em sessões que pertencem ao Claude Desktop, tool_decision e tool_result carregam o par mcp_server_name/mcp_tool_name, nomes definidos pelo host em vez de conteúdo de argumentos, mesmo com a flag desativada. Esses dados são enviados apenas para o endpoint OTEL que você configurar, nunca para a Anthropic. Os argumentos ainda podem conter valores sensíveis, então configure o seu backend de telemetria para filtrar ou ocultar esses atributos conforme necessário. Quando ativado:
    • Os eventos tool_result e tool_decision incluem um atributo tool_parameters com comandos Bash, nomes de servidores MCP e de ferramentas, e nomes de skills. Campos como full_command são emitidos sem truncamento
    • Os eventos tool_result incluem adicionalmente um atributo tool_input com caminhos de arquivos, URLs, padrões de pesquisa e outros argumentos. Valores individuais com mais de 512 caracteres são truncados e o total é limitado a ~4 K caracteres
    • Os eventos user_prompt incluem o command_name literal para comandos personalizados, de plugins e MCP
    • Os contadores de custo e de tokens e os eventos api_request, api_error e api_refusal carregam os nomes reais de agentes, skills, plugins, servidores MCP e ferramentas nos seus atributos de atribuição
    • O span claude_code.tool carrega atributos derivados da entrada, como file_path. No tracing beta detalhado, ele também carrega um atributo tool_input
  • O conteúdo das ferramentas não é registrado em log nos spans de trace por padrão. Para incluí-lo, defina OTEL_LOG_TOOL_CONTENT=1. O span claude_code.tool passa então a carregar um evento de span tool.output com o conteúdo bruto de arquivos, a saída de comandos Bash e o que as ferramentas MCP, WebFetch e WebSearch retornam, truncados no limite de conteúdo (60 KB por padrão) por atributo. Os resultados de ferramentas MCP, WebFetch e WebSearch requerem o Claude Code v2.1.283 ou posterior. O conteúdo das ferramentas também chega aos spans por meio de new_context, cuja condição difere por span. Configure o seu backend de telemetria para filtrar ou ocultar esses atributos conforme necessário
  • Os corpos brutos de requisição e resposta da Anthropic Messages API não são registrados em log por padrão. Para incluí-los, defina OTEL_LOG_RAW_API_BODIES no seu shell, nas configurações de usuário ou nas configurações gerenciadas. Ela é ignorada nas configurações de projeto e locais. Os corpos contêm o histórico completo da conversa, incluindo o system prompt, todos os turnos anteriores do usuário e do assistente, e os resultados de ferramentas, portanto ativar essa opção implica consentimento com tudo o que as outras flags de conteúdo OTEL_LOG_* revelariam. O Claude Code sempre remove (oculta) 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, o Claude Code emite eventos de log api_request_body e api_response_body para cada chamada de API. O atributo body dos eventos carrega o payload serializado em JSON, truncado no limite de conteúdo (60 KB por padrão)
    • Com =file:<dir>, o Claude Code grava os corpos sem truncamento em arquivos .request.json e .response.json nesse diretório, e os eventos carregam um caminho body_ref em vez do corpo embutido. Envie o diretório com um coletor de logs ou sidecar, em vez de pelo fluxo de telemetria. Para cada resposta bem-sucedida, o Claude Code também acrescenta uma linha ao index.jsonl nesse diretório, vinculando o arquivo de resposta ao arquivo de requisição que a produziu e à mensagem da transcrição em que ela se tornou. Cada linha não contém conteúdo de mensagens, e a seção evento de corpo de resposta da API lista seus campos. O arquivo de índice requer o Claude Code v2.1.274 ou posterior

Monitorar Claude Code no Amazon Bedrock

Para orientação detalhada de monitoramento de uso do Claude Code para Amazon Bedrock, consulte Implementação de Monitoramento do Claude Code (Amazon Bedrock).