Skip to main content

Command Palette

Search for a command to run...

Equipes e Empresarial

Referência do protocolo de exportação do OpenTelemetry

Complemento da Exportação do OpenTelemetry. Toda a especificação do protocolo: todas as métricas, eventos de log, atributos, enums e regras de presença.

A especificação é aditiva. Aceite atributos, eventos e valores de enum desconhecidos. Renomeações e remoções são comunicadas explicitamente.

Transporte e escopo

  • Protobuf binário via OTLP/HTTP (application/x-protobuf), POST
  • Endpoints: <base>/v1/metrics e <base>/v1/logs
  • Escopo: cursor.telemetry / 0.1.0

Atributos do recurso

Um recurso por agrupamento de (equipe, usuário, Surface, ponto de entrada, versão da Surface).

AtributoTipoPresençaValores / observações
service.namestringSempreConstante cursor
service.versionstringOpcionalVersão do cliente quando a origem for desktop/CLI; geralmente ausente em cloud_agent / bugbot
cursor.team.idintSempreID da sua equipe
cursor.surfacestringSempreunspecified
cursor.entrypointstringSempreunspecified
cursor.user.idintOpcionalID de usuário opaco no escopo da equipe quando a origem tiver um. Nos logs cloud_agent.*, corresponde ao proprietário da execução. Uma execução iniciada com uma chave de API da equipe ou uma conta de serviço não tem proprietário e não inclui atributos de usuário. Não exija sua presença.
cursor.user.account_idstringOpcionalO ID user_... do membro, ou seja, o valor que GET /teams/members na API de administração retorna como id. Um registro inclui este atributo e cursor.user.id juntos ou nenhum dos dois.
cursor.user.emailstringOpcionalO email do membro. Presente quando cursor.user.id está presente e o membro tem um email. Não é exportado para equipes que usam o Privacy Mode (legado). Não exija sua presença.

Famílias

Os IDs de família correspondem aos controles em Configurações da equipe. Todas vêm ativadas por padrão em um novo destino, exceto conversation_content, que permanece desativada até que a equipe faça a adesão e o destino ative o controle de cada tipo (consulte Conteúdo da conversa).

ID da famíliaSinaisPadrãoAbrange
model_usagemétricas + logsAtivadatoken.usage, cost.usage; api.request, api.error, api.correction
tool_callsmétricasAtivadatool.calls
skills_hooks_pluginslogsAtivadaskill.activated (todas as Surfaces, incluindo o Cherri Bot), hook.execution_complete, plugin.installed
cloud_agentslogsAtivadacloud_agent.pull_request, cloud_agent.setup, cloud_agent.artifact, cloud_agent.mcp_auth_error
grok_bot_agent_actionslogsAtivada (requer Action Recording)grok_bot.mcp_tool_call, grok_bot.shell_command, grok_bot.browser_navigation, grok_bot.computer_use_session, grok_bot.tool_result, grok_bot.tool_decision, grok_bot.file_transfer, grok_bot.message_delivery, grok_bot.routine_run, grok_bot.guardrail, grok_bot.delegation
conversation_contentlogsDesativada (adesão da equipe + controles do destino por tipo)conversation.user_message, conversation.assistant_message, conversation.tool_io

A família grok_bot_agent_actions, assim como o skill.activated quando emitido por um Bot, contém dados de Action Recording. Esses dados só são enviados depois que um admin da equipe ativa o Action Recording na página do Cherri Bot do dashboard. O Privacy Mode (legado) força a gravação a ficar desativada.

Métricas

Todas as métricas são somas monotônicas de delta. Os datapoints das métricas não carregam IDs de correlação; estes aparecem apenas nos logs.

Consuma as métricas como somas de deltas por série. Uma série é composta pelo recurso, pelo nome da métrica e pelo conjunto exato de atributos do datapoint. As janelas da mesma série podem se sobrepor entre flushes.

cursor.token.usage

Unidade {token}. Família model_usage.

AtributoTipoPresençaValores / observações
cursor.token.typestringSempreinputoutputcache_readcache_creation
cursor.model.namestringOpcionalModelo público solicitado após a consolidação da intenção roteada (auto: para Auto, thinking: para Thinking, pro: para Pro, premium: para Premium; caso contrário, sem alterações). Ausente no Bugbot ou quando a origem não tinha modelo.
cursor.api.statusstringOpcionalsuccesserroredaborted
cursor.api.billableboolOpcional

cursor.tool.calls

Unidade {call}. Família tool_calls. Valor 1 por chamada de ferramenta concluída.

AtributoTipoPresençaValores / observações
cursor.tool.kindstringSemprebuiltin
cursor.tool.namestringSempreID da ferramenta integrada (por exemplo, read, shell) ou nome da ferramenta MCP do cliente (aberto)
cursor.tool.statusstringSempresuccess
cursor.mcp.server.namestringSomente MCPNome de exibição do servidor definido pelo cliente (aberto)

cursor.cost.usage

Unidade USD (double). Família model_usage. Custo estimado, na medida do possível, no momento do evento, não é uma fatura. Sujeito a cursor.api.correction. Para BYOK, esta é somente a Taxa de Tokens do Cherri Code, não os gastos do provedor.

AtributoTipoPresençaValores / observações
cursor.model.namestringOpcionalMesmas regras de consolidação que token.usage

Eventos de log

Níveis de severidade: INFO=9, WARN=13, ERROR=17.

Atributos comuns de logs

AtributoTipoPresençaObservações
cursor.event.idstringSempreChave de deduplicação. Opaco. Determinístico entre tentativas, reinícios de worker e replay do Kafka do Cherri Code. O prefixo customer-telemetry:v1:... é estável; trate a string inteira como opaca.
cursor.source_event.idstringSempreIdentidade opaca da fonte interna. Vários sinais podem compartilhar o mesmo valor.
cursor.request.idstringOpcionalEm api.request, api.error, skill.activated (exceto ativações de Bot), hook.execution_complete, plugin.installed. Nunca em api.correction, cloud_agent.* ou grok_bot.*. Não dependa dele em conversation.*.
cursor.conversation.idstringOpcionalIDE/CLI: UUID do composer. Agente em nuvem: ID de agente bc-... visível ao cliente. Cherri Bot (grok_bot.* e qualquer log com cursor.surface=grok_bot): o identificador do Bot. Esse valor é o ID da conversa do Bot. Chave de associação para reconstruir sessões entre logs de api, skill/hook, cloud_agent, grok_bot e conversation.
cursor.usage_event.idstringOpcionalSomente em api.request / api.error / api.correction. Chave no nível da solicitação para exportações de uso do Cherri Code e faturamento.

cursor.api.request

INFO, corpo api_request. Família model_usage.

AtributoTipoPresençaObservações
cursor.api.request.input_tokensintSempre
cursor.api.request.output_tokensintSempre
cursor.api.request.cache_read_tokensintSempre
cursor.api.request.cache_creation_tokensintSempre
cursor.model.namestringOpcional
cursor.api.billableboolOpcional
cursor.grok_bot.turn.idstringSomente na surface grok_botMesmo valor de cursor.request.id: o turno do Bot que fez a chamada ao modelo. Associe-o aos registros de ação grok_bot.* do turno. Uma chamada ao modelo do Cherri Bot feita fora de um turno (geração de avatar) contém aqui um id que não se associa a nenhum registro de ação. Nunca aparece em outras surfaces

cursor.api.error

ERROR, corpo api_error. Família model_usage. Não há mensagens de erro brutas. Atributos de tipo e status com baixa cardinalidade estão planejados; não dependa deles ainda.

AtributoTipoPresençaObservações
cursor.model.namestringOpcional
cursor.api.billableboolOpcional
cursor.grok_bot.turn.idstringSomente na surface grok_botMesmo valor de cursor.request.id; veja api.request

cursor.api.correction

WARN, corpo api_correction_<kind>. Família model_usage. Finalização do faturamento: o evento de uso não foi cobrado retroativamente. Faça a associação por cursor.usage_event.id e descarte todo o grupo para fins de faturamento. Deliberadamente não inclui cursor.model.name.

AtributoTipoPresençaValores
cursor.api.correction.kindstringSemprenot_billed_errorednot_billed_aborted_before_timeout

cursor.skill.activated

INFO, corpo skill_activated. Família skills_hooks_plugins.

AtributoTipoPresençaValores / observações
cursor.skill.namestringSempreCriada pelo cliente (aberta)
cursor.skill.triggerstringSempreagent_read
cursor.skill.sourcestringSempreunspecified
cursor.plugin.namestringOpcionalQuando a skill veio de um plugin. Atualmente não é exportado para ativações do Cherri Bot

Um Bot que lê um SKILL.md exporta este mesmo evento com cursor.surface=grok_bot, e o registro inclui os atributos compartilhados grok_bot.* para que possa ser associado às demais ações do turno. cursor.skill.name é o slug da pasta da skill, cursor.skill.trigger é agent_read ou skill_name_in_prompt (skills invocadas com / ou @ ainda não são registradas), e cursor.skill.source é builtin para skills gerenciadas pelo Cherri Code, plugin para skills de plugins instalados, user para as skills do próprio Bot e, nos demais casos, segue a mesma classificação de qualquer outra surface. cursor.grok_bot.tool_call.id é o id da chamada Read que ativou a skill e permite associá-la à respectiva linha tool_result. As ativações do Bot incluem cursor.conversation.id, mas nunca cursor.request.id, e só são enviadas quando o Action Recording está ativado.

cursor.hook.execution_complete

INFO (ERROR para failed / timeout), corpo hook_execution_complete. Família skills_hooks_plugins.

AtributoTipoPresençaValores / observações
cursor.hook.namestringSempreConfigurado pelo cliente (aberto)
cursor.hook.typestringSemprepre_tool_use
cursor.hook.outcomestringSempresuccess
cursor.hook.duration_msintSempre
cursor.plugin.namestringOpcionalQuando o hook é originado de um plugin

cursor.plugin.installed

INFO, corpo plugin_installed. Família skills_hooks_plugins. Sem conversation.id (a instalação não está no escopo de uma conversa).

AtributoTipoPresençaValores / observações
cursor.plugin.namestringSempreAberto
cursor.plugin.scopestringSempreunspecified

cursor.cloud_agent.pull_request

INFO (opened) / WARN (creation_failed), corpo cloud_agent_pull_request_<kind>. Família cloud_agents. conversation.id = bc-....

AtributoTipoPresençaValores / observações
cursor.cloud_agent.pull_request.kindstringSempreopenedcreation_failed
cursor.cloud_agent.pull_request.numberintApenas opened
cursor.cloud_agent.pull_request.draftboolApenas opened

creation_failed é emitido em tempo real. opened pode ser esparso enquanto o produtor é lançado gradualmente.

cursor.cloud_agent.setup

INFO (started / completed) / ERROR (failed), corpo cloud_agent_setup_<kind>. Família cloud_agents. conversation.id = bc-....

AtributoTipoPresençaValores / observações
cursor.cloud_agent.setup.kindstringSemprestarted
cursor.cloud_agent.setup.duration_msintTipos terminais, quando presentescompleted / failed
cursor.cloud_agent.setup.reasonstringSomente failedVocabulário aberto (por exemplo, install_command_failed)

cursor.cloud_agent.artifact

INFO, corpo cloud_agent_artifact_created. Família cloud_agents. conversation.id = bc-....

AtributoTipoPresençaValores / observações
cursor.cloud_agent.artifact.file_namestringSempreAberto
cursor.cloud_agent.artifact.content_typestringOpcionalMIME

cursor.cloud_agent.mcp_auth_error

ERROR, corpo cloud_agent_mcp_auth_error. Família cloud_agents. conversation.id = bc-....

Um servidor MCP que você conectou rejeitou as credenciais da execução. As chamadas de ferramenta desse servidor falharam, mas a execução continuou. ERROR porque somente você pode corrigir a integração; crie um alerta para detectar Automações e agentes em nuvem que perdem silenciosamente um servidor MCP.

AtributoTipoPresençaValores / observações
cursor.mcp.server.namestringSempreNome de exibição do servidor definido pelo cliente (aberto), por exemplo, github. Mesmo espaço de valores do atributo de ponto de dados cursor.tool.calls.

Atributos grok_bot.* compartilhados

O próprio bot é identificado por cursor.conversation.id em todo registro grok_bot.*, e esse valor é o conversation id do Bot; cursor.grok_bot.subagent.id identifica um subagente quando um deles atuou. Os eventos grok_bot.* transportam as ações do Bot registradas pelo Action Recording. Família grok_bot_agent_actions. Todo registro tem cursor.surface=grok_bot.

Cada evento contém metadados sobre uma ação, nunca o conteúdo dela. Argumentos e resultados de ferramentas, caminhos e nomes de arquivos, corpos e destinatários de mensagens, credenciais, dados de cartão e o raciocínio do classificador do Auto-review nunca são exportados nesses eventos; argumentos e resultados de MCP são enviados apenas no registro opcional cursor.conversation.tool_io. As exceções são indicadas em cada evento: o texto do comando de shell (com secrets removidos e limitado a 8 KiB), a URL normalizada e o título da página no navegador, e hostnames simples. Todo campo de texto livre passa por uma remoção de padrões de credenciais, números de cartão de pagamento e tokens OAuth antes de chegar ao seu coletor.

Cada evento também carrega estes atributos:

AtributoTipoPresençaValores / observações
cursor.grok_bot.provenancestringSempreclient (reportado pelo computador do Bot; melhor esforço)
cursor.grok_bot.turn.idstringOpcionalRequest id do turno do Bot (ou da solicitação do subagente) que executou a ação. O mesmo valor aparece como cursor.grok_bot.turn.id nos registros api.request e api.error do turno
cursor.grok_bot.root_turn.idstringOpcionalRequest id do turno voltado ao usuário ao qual a ação atende. Igual a turn.id fora de subagentes; para a ação de um subagente, é o turno que o criou. Ausente com proveniência server
cursor.grok_bot.subagent.idstringOpcionalConversation id do subagente que executou a ação. Ausente quando a ação foi executada pelo Bot de nível superior e com proveniência server
cursor.grok_bot.box.idstringOpcionalID do Computador do Cherri Bot. Ausente com proveniência server
cursor.grok_bot.event.sequenceintOpcionalNúmero de sequência monotônico por turno, indexado por turn.id. Use-o para ordenar as ações de um turno, em vez dos relógios do cliente. Não é contínuo: um turno retomado após uma espera por aprovação continua acima do seu último número, e uma nova tentativa continua a partir do seu próprio bloco, de modo que as linhas repetidas continuam ordenadas após a primeira execução. Ausente em versões antigas do Cherri Bot
cursor.grok_bot.tool_call.idstringOpcionalID da chamada de ferramenta da ação. Todas as linhas produzidas por uma mesma chamada de ferramenta carregam o mesmo valor (seu tool_result, suas linhas tool_decision e sua linha específica da ferramenta, como mcp_tool_call), o que permite relacioná-las por ele. Ausente quando a ação não é atribuída a uma chamada de ferramenta (uma navegação no navegador, um comando de shell)
cursor.grok_bot.initiated_bystringOpcionalQuem iniciou o turno ao qual a ação pertence: user (uma mensagem digitada ou chamada de voz)

cursor.grok_bot.mcp_tool_call

INFO (ERROR para o status failure), corpo grok_bot_mcp_tool_call. família grok_bot_agent_actions. Uma chamada de ferramenta MCP feita por um Bot. Esta linha nunca contém os argumentos ou resultados da ferramenta. Para chamadas http, uma equipe com o tool I/O habilitado os recebe como dois registros cursor.conversation.tool_io, associados a esta linha por cursor.grok_bot.tool_call.id.

AtributotipoPresençaValores / observações
cursor.tool.namestringSempreNome da ferramenta MCP definido pelo cliente (aberto)
cursor.tool.statusstringSempresuccess
cursor.grok_bot.mcp.transportstringSemprehttp (observado pelo servidor)
cursor.grok_bot.mcp.duration_msintSempre
cursor.mcp.server.namestringOpcionalnome de exibição do servidor definido pelo cliente (aberto)

cursor.grok_bot.tool_call.id está presente em todas as chamadas MCP. As chamadas de conector, incluindo as ferramentas de navegador no computador do Bot, são registradas aqui e nunca como tool_result, de modo que cada chamada de ferramenta é registrada uma única vez.

cursor.grok_bot.shell_command

INFO (WARN quando bloqueado), corpo grok_bot_shell_command. Família grok_bot_agent_actions. Um shell command que um bot executou ou foi impedido de executar. O registro é gravado quando o comando é concluído e mantém o horário de emissão como timestamp; por isso, o registro de um comando longo chega bem depois do seu timestamp.

AtributoTipoPresençavalores / observações
cursor.grok_bot.shell.commandstringSempreTexto do comando com secrets removidos, de no máximo 8 KiB (open)
cursor.grok_bot.shell.command_truncatedboolSempreTrue quando o comando de origem excedeu o limite
cursor.grok_bot.shell.kindstringSempreforeground
cursor.grok_bot.shell.targetstringSemprebox (o Cherri Bot computer)
cursor.grok_bot.shell.allowedboolSempreDecisão da policy do shell
cursor.grok_bot.shell.blocked_reasonstringOpcionalMotivo da policy quando bloqueado; com secrets removidos (open)
cursor.grok_bot.shell.classification_reasonsstring[]OpcionalNo máximo 10 motivos de classificação da policy; com secrets removidos (open)
cursor.grok_bot.shell.machine_idstringOpcionalApenas para o target user_machine: a máquina do usuário registrada em que o comando foi executado (open). Só é identificada uma máquina registrada no início do turno
cursor.grok_bot.shell.exit_codeintOpcionalCódigo de saída do processo; -1 quando encerrado por um sinal ou abortado. Ausente para comandos background e quando o comando nunca gerou um código de saída (conexão perdida, rejeitado antes de ser executado)
cursor.grok_bot.shell.duration_msintOpcionalTempo real decorrido da emissão até a conclusão, incluindo a conexão com o computador e qualquer espera antes do início do processo. Presente em todo registro foreground, ausente em background

cursor.grok_bot.browser_navigation

INFO, corpo grok_bot_browser_navigation. Família grok_bot_agent_actions. conversation.id é o identificador do Bot.

AtributoTipoPresençaValores / observações
cursor.grok_bot.browser.urlstringSemprescheme://host/path normalizado (open). Esquemas não hierárquicos nunca são exportados
cursor.grok_bot.browser.page_titlestringOpcionalCom secrets removidos (open)

cursor.grok_bot.computer_use_session

INFO, corpo grok_bot_computer_use_session. Family grok_bot_agent_actions. Resumo de uma sessão de subagent de computer-use: apenas contagens e tempo total. Sem coordenadas, texto digitado ou capturas de tela. cursor.grok_bot.turn.id é o turno pai que invocou o subagent, cursor.grok_bot.subagent.id é o próprio subagent, cursor.grok_bot.tool_call.id é a invocação e cursor.grok_bot.initiated_by é sempre subagent.

AttributetipoPresençaValores / observações
cursor.grok_bot.computer_use.action_countintSempre
cursor.grok_bot.computer_use.duration_msintSempre
cursor.grok_bot.computer_use.screenshot_countintSempre
cursor.grok_bot.computer_use.action_counts.<kind>intOptionalUm atributo para cada tipo de ação com contagem positiva. <kind> pode ser click, drag, key, mouse_move, screenshot, scroll, type ou wait

cursor.grok_bot.tool_result

INFO (success / cancelled), WARN (denied), ERROR (error), body grok_bot_tool_result. Família grok_bot_agent_actions. Uma chamada de ferramenta integrada já concluída, feita por um Bot (read, web_search, send_to_user, task, shell, ...). Toda ferramenta integrada produz esta linha, então nenhuma ferramenta que um Bot pode chamar fica sem registro. Chamadas de conector (MCP) geram linhas mcp_tool_call e nunca aparecem aqui.

cursor.grok_bot.tool_call.id associa a linha às linhas tool_decision da mesma chamada. Um mesmo id pode ter duas linhas tool_result quando uma chamada é executada novamente após uma falha transitória no stream do modelo, então conte ids distintos ao contabilizar chamadas.

AtributoTipoPresençaValores / observações
cursor.tool.namestringSempreId da ferramenta integrada, em minúsculas; mesmo espaço de valores da dimensão tool.name integrada de cursor.tool.calls (read, shell, web_search, ...)
cursor.grok_bot.tool_result.outcomestringSempresuccess (a ferramenta retornou, inclusive quando repassou uma recusa ao modelo como texto; as linhas tool_decision da chamada indicam se a ação ocorreu)
cursor.grok_bot.tool_result.duration_msintSempre
cursor.grok_bot.tool_result.error_categorystringOpcionalMotivo codificado quando outcome não é success: invalid_args, user_rejected, timeout, provider_error, hook_denied ou um nome de classe de erro como TimeoutError (aberto)
cursor.grok_bot.tool_result.target_hoststringOpcionalO host puro sobre o qual a ferramenta atuou, para ferramentas que têm um site como alvo: list_credentials informa o site ao qual a busca de credencial foi restrita; request_virtual_card, o comerciante. Em minúsculas, sem www., porta, caminho, query ou userinfo. Ausente para todas as outras ferramentas, quando a chamada não indicou nenhum site e quando a chamada nunca foi executada (aberto)

Interprete outcome como "como a chamada retornou", e não como "se a ação ocorreu". Shells, ações de navegador e de computador e solicitações de ferramentas locais recusadas pela pessoa relatam a recusa como denied, com error_category user_rejected. E-mail, gravações de rotina, transferências de arquivos por conector, inicializações de subagentes e ações de agente em nuvem repassam a recusa ao modelo como texto; por isso, o tool_result delas indica success, enquanto a linha tool_decision registra a recusa.

cursor.grok_bot.tool_decision

INFO (allowed / held), WARN (denied / timed_out), corpo grok_bot_tool_decision. Família grok_bot_agent_actions. Uma decisão sobre se uma chamada de ferramenta de um Bot pode ser executada: quem a tomou, por qual modo de aprovação e qual foi. Uma chamada pode ter várias decisões (o Auto-review se recusa a permitir automaticamente e, em seguida, uma pessoa responde ao card), cada uma com seu próprio registro. Elas se vinculam à linha tool_result, mcp_tool_call ou computer_use_session da chamada por meio de cursor.grok_bot.tool_call.id. A justificativa do classificador, o texto do card e os argumentos nunca aparecem aqui.

AtributoTipoPresençaValores / observações
cursor.grok_bot.decision.idstringSempreId gerado quando a decisão é tomada, antes que qualquer pessoa veja um card. Para uma decisão human, é o id do card ou da solicitação de permissão que a pessoa respondeu, e o mesmo valor presente em uma linha de escalonamento guardrail da mesma chamada (aberto)
cursor.tool.namestringSempreId da ferramenta nativa, em minúsculas; o mesmo valor do tool_result da chamada. A decisão de uma chamada de conector traz mcp, enquanto sua linha mcp_tool_call traz o nome da ferramenta no servidor
cursor.grok_bot.decision.sourcestringSemprehuman
cursor.grok_bot.decision.approval_modestringSempreauto_allow
cursor.grok_bot.decision.outcomestringSempreallowed
cursor.grok_bot.decision.rule_idstringOpcionalId opaco da regra do Auto-review que tomou a decisão; ausente até que o classificador atribua seu veredito a uma regra (aberto)

O que cada origem significa:

  • policy é toda classificação aplicada pelo Auto-review, allowed ou denied, em qualquer surface: os shells, chamadas de conector, e-mail, gravações de rotina e inicializações de agente em nuvem e de subagente. Um classificador que falha ou perde o prazo gera um policy denied, assim como uma regra de revisão que encaminha uma chamada a uma pessoa sem classificá-la.
  • human é o desfecho de um card do Auto-review (approval_mode auto_review quando o classificador escalou, ask_human quando a surface sempre pergunta, como feedback do produto, reivindicação de uma caixa de entrada de e-mail, realização de uma ligação telefônica ou importação de cookies do Chrome), ou uma solicitação de permissão de ferramenta local respondida no próprio computador da pessoa (local_tool_permission). Respostas "Sempre" e "Nunca" são registradas como allowed e denied, assim como uma resposta pontual.
  • hook é a recusa de um hook pré-ferramenta.
  • automatic é uma chamada sobre a qual nenhuma barreira se pronunciou; assim, toda outra chamada nativa concluída tem pelo menos uma decisão. Três tipos de chamada não têm nenhuma: uma chamada que a própria ferramenta recusou antes de qualquer barreira ser executada (seu tool_result indica denied); um card que a pessoa responde depois que o turno terminou (uma solicitação de preenchimento de credencial, de secret ou de cartão virtual), porque a resposta chega em um turno posterior; e uma chamada cancelada antes que qualquer barreira se pronunciasse, já que uma chamada cancelled traz apenas as permissões e retenções registradas antes de ser interrompida. Uma solicitação de cartão virtual também encerra o turno de dentro da própria chamada, por isso seu tool_result indica cancelled.

Uma chamada recusada pelo Auto-review e depois respondida por uma pessoa tem as duas linhas, policy denied e depois human, na ordem de event.sequence. Não há atributo de aprovador: os cards de um Bot são respondidos apenas pelo seu proprietário, que é o cursor.user.id do registro.

cursor.grok_bot.file_transfer

INFO (success), WARN (denied), ERROR (error), corpo grok_bot_file_transfer. Família grok_bot_agent_actions. Uma transferência de arquivo que um Bot tentou fazer entre o computador dele e outro endpoint: a máquina do usuário, uma conta conectada do Google Drive, OneDrive ou Gmail, ou a leitura de um arquivo na máquina do usuário diretamente para o contexto do Bot. Apenas metadados: a direção, a outra ponta, quantos bytes foram transferidos e o resultado. O caminho, o nome do arquivo e o conteúdo nunca são exportados. A leitura de um arquivo no próprio computador do Bot gera uma linha tool_result, não este evento. cursor.grok_bot.tool_call.id associa a linha ao tool_result da chamada e, no caso de uma transferência recusada, ao respectivo tool_decision.

AtributoTipoPresençaValores / observações
cursor.grok_bot.file.directionstringSempreDo ponto de vista do computador do Bot: download (os bytes chegaram a ele)
cursor.grok_bot.file.targetstringSempreuser_machine (o computador do usuário)
cursor.grok_bot.file.outcomestringSempresuccess
cursor.grok_bot.file.bytesintOpcionalBytes transferidos; presente quando a transferência foi concluída (um arquivo vazio exporta 0). Em um read, indica os bytes entregues ao Bot; portanto, uma leitura parcial conta a própria saída, não o tamanho do arquivo
cursor.grok_bot.file.error_categorystringOpcionalMotivo codificado quando outcome é error: source_missing, too_large, read_failed, write_failed, invalid_file, um resultado de conector como needs_auth ou not_found, um errno como ECONNRESET ou o nome de uma classe de erro. Um único token, nunca uma mensagem (aberto)
cursor.grok_bot.file.machine_idstringOpcionalA máquina do usuário na outra ponta quando target é user_machine: o id opaco informado pela lista de máquinas do Bot (aberto). Só é identificada uma máquina registrada no início do turno

cursor.grok_bot.message_delivery

INFO (sent / held), ERROR (failed), corpo grok_bot_message_delivery. Família grok_bot_agent_actions. Uma mensagem de saída de um Bot: para o usuário dele no chat do Cherri Bot, para outro Bot do usuário, para uma conversa do Slack ou Discord pela qual o Bot foi acionado, para destinatários de email externos, para o app Mensagens do Mac do usuário ou para um cartão de rascunho que o próprio usuário envia ou descarta. A linha indica para onde a mensagem foi e se ela chegou, nunca o que ela dizia nem o nome do destinatário: sem corpo, assunto, destinatário, nome de anexo ou tamanho. cursor.grok_bot.tool_call.id associa a linha ao tool_result da mesma chamada de envio.

AtributoTipoPresençaValores / observações
cursor.grok_bot.message_delivery.destination_typestringSempreuser (o próprio usuário do Bot, no chat ou em uma chamada de voz)
cursor.grok_bot.message_delivery.destination_idstringOpcionalagent: o id opaco do Bot de destino; ausente quando o Bot não conseguiu identificar um. channel: os primeiros 32 caracteres hexadecimais do SHA-256 de <platform>:<chat>[:<thread>] (por exemplo, slack:C0123ABC:1699999999.000100), de modo que todas as linhas de uma mesma conversa têm um único valor, que você pode calcular a partir de um endereço que já tem, sem que o endereço em si seja exportado. Ausente para user, draft, email e apple_messages, de modo que endereços de email, números de telefone e ids de chat nunca são exportados, com ou sem hash (aberto)
cursor.grok_bot.message_delivery.resultstringSempresent
cursor.grok_bot.message_delivery.failure_categorystringOpcionalMotivo codificado quando result não é sent, como awaiting_user, blocked, target_not_found, forbidden, no_inbox, sender_not_owned, not_approved, route_unverified, declined, permission_denied ou o nome de uma classe de erro (aberto)
cursor.conversation.message.idstringOpcionalQuando presente, o id da mensagem enviada em linhas user, channel e draft, no formato usado pelos registros de mensagem da família (<sessionId>/g<generation>/<entryId>, por exemplo, g0/t3s1), de modo que a linha de entrega se associa ao registro assistant_message dessa família por uma única chave. Nunca aparece em linhas agent, email ou apple_messages

cursor.grok_bot.routine_run

INFO (success / cancelled), ERROR (error), corpo grok_bot_routine_run. Família grok_bot_agent_actions. Uma execução de rotina concluída por um Bot: qual rotina foi disparada, por quê, como terminou e quanto tempo levou. O Cherri Code registra a linha ao encerrar a execução (proveniência server), então a execução é registrada mesmo que o computador do Bot não esteja observando, e a linha não contém box.id, event.sequence nem tool_call.id. Ela sempre contém cursor.grok_bot.initiated_by=routine e cursor.entrypoint=automation. Nunca inclui o prompt da rotina, o nome dela nem o texto do turno.

cursor.grok_bot.turn.id é o turno em que a execução ocorreu, então as linhas tool_result, shell_command e mcp_tool_call da própria execução fazem join por ele. Uma execução que ocorreu como subagente de rotina, ou que falhou antes de um turno ser planejado, não contém turn.id.

AtributoTipoPresençaValores / observações
cursor.grok_bot.routine.idstringSempreO id estável da rotina (opaco)
cursor.grok_bot.routine_run.idstringSempreO id da execução, o mesmo valor exibido no histórico de execução da rotina (opaco)
cursor.grok_bot.routine_run.triggerstringSempreschedule (disparada por um agendamento cron)
cursor.grok_bot.routine_run.outcomestringSempresuccess (o turno foi concluído ou pausado aguardando o usuário)
cursor.grok_bot.routine_run.duration_msintSempreTempo real, do disparo à conclusão

Não são registradas uma execução que pausa aguardando aprovação e é concluída pelo turno retomado, nem uma execução que falhou antes de qualquer turno começar. O Action Recording é uma funcionalidade de equipe, então execuções de um proprietário pessoal (sem equipe) são ignoradas, assim como qualquer outra ação do Bot.

cursor.grok_bot.guardrail

INFO (continued), WARN (warned / stopped), corpo grok_bot_guardrail. Família grok_bot_agent_actions. Um guardrail intervindo em um turno do Bot: o detector de loop disparando por saída ou chamadas de ferramenta repetidas, a defesa contra bots de um site recusando o navegador do Bot, ou o Auto-review interrompendo uma chamada de ferramenta para consultar uma pessoa, junto com a espera que se seguiu. Somente campos codificados; a justificativa do classifier e o texto do card nunca são exportados. A decisão em si (a recusa do Auto-review, a resposta da pessoa) é uma linha tool_decision e nunca é repetida aqui; uma linha de escalonamento se associa a ela por cursor.grok_bot.decision.id.

As linhas usam WARN quando o guardrail alterou o turno (um alerta, uma parada, uma espera que terminou em recusa ou sem resposta) e INFO quando ele apenas observou ou o turno seguiu adiante. Uma linha por disparo: um bloqueio conta uma vez por episódio, então uma página que continua no mesmo bloqueio mesmo após recarregamentos gera uma única linha.

Um escalonamento gera duas linhas para um mesmo card, na ordem em que ocorreram. A linha tool_escalation é a solicitação: um card foi exibido porque uma chamada em revisão não podia ser executada sem uma pessoa. A linha pause é o fim da espera: a pessoa permitiu (resumed) ou recusou (denied) a ação, ou ninguém respondeu antes de o card expirar ou ser retirado (abandoned). Quando a espera terminou porque uma pessoa parou ou redirecionou o turno em vez de responder, a segunda linha é interrupted. Ambas as linhas incluem o cursor.tool.name da ferramenta escalonada, o cursor.grok_bot.tool_call.id da chamada e o id do card como cursor.grok_bot.decision.id — o mesmo valor presente na linha tool_decision human dessa chamada —, de modo que a solicitação, a espera e a resposta se associam por uma única chave.

AtributoTipoPresençaValores / observações
cursor.grok_bot.guardrail.kindstringSempreloop_detected
cursor.grok_bot.guardrail.detectorstringSempreO que foi acionado, como um único token snake_case: um tipo de loop (single_message_single_line, multi_message, multi_message_outbound_flood, ...), uma família de bloqueio de bot (cloudflare_challenge, recaptcha, datadome, akamai, ...) ou, nos tipos de escalonamento, a surface do Auto-review que fez a solicitação (host_shell, box_shell, mcp, computer, automation_write, cloud_agent, subagent, feedback, bot_share) (aberto)
cursor.grok_bot.guardrail.actionstringSemprewarned (o Bot recebeu um alerta e continuou)
cursor.grok_bot.guardrail.sourcestringSempreruntime (um detector: loop_detected, bot_blocked)
cursor.grok_bot.guardrail.countintOpcionalA contagem que acionou o detector: o número de repetições registradas por uma linha loop_detected. Ausente quando o detector não faz contagem
cursor.grok_bot.guardrail.target_hoststringOpcionalSomente bot_blocked: o host que recusou o Bot, em minúsculas e sem www., porta, caminho, query ou userinfo (aberto)
cursor.tool.namestringOpcionalSomente tipos de escalonamento: o id da ferramenta nativa da chamada escalonada, o mesmo valor presente nas linhas tool_decision e tool_result correspondentes
cursor.grok_bot.guardrail.resolutionstringOpcionalSomente pause e interrupted: resumed (a pessoa permitiu a ação)
cursor.grok_bot.guardrail.duration_msintOpcionalSomente pause e interrupted: o tempo de espera, da criação do cartão até a resposta ou a retirada do cartão. Nunca é negativo
cursor.grok_bot.decision.idstringOpcionalSomente tipos de escalonamento: o id do cartão, que corresponde ao decision.id da linha tool_decision human com a qual a mesma chamada é resolvida (aberto)

cursor.grok_bot.tool_call.id está presente nos tipos de escalonamento e ausente nas detecções, que não são atribuídas a uma única chamada de ferramenta. Uma chamada recusada pelo Auto-review sem ninguém a quem consultar não abre cartão e contém apenas o seu tool_decision.

cursor.grok_bot.delegation

INFO (dispatched, completed com success ou stopped), ERROR (completed com error), corpo grok_bot_delegation. Família grok_bot_agent_actions. Trabalho que um Bot repassou a outro agente e o resultado que voltou: um subagente em segundo plano que ele despachou ou um agente em nuvem do Cherri Code que ele iniciou ou ao qual respondeu. Apenas IDs e resultado; nunca o prompt, o texto do resultado ou as ações do próprio delegado. As chamadas de ferramenta de um subagente geram suas próprias linhas grok_bot.* com initiated_by=subagent; a execução de um agente em nuvem fica na família cloud_agents.

Cada delegação gera dois registros com o mesmo target_id: dispatched, quando o trabalho é repassado, e completed, quando o resultado volta ao Bot. Registros completed usam como turn.id o turno que recebeu o resultado, e não o turno que fez o despacho. cursor.grok_bot.tool_call.id é a chamada que fez o despacho (ou a chamada de parada, em um registro subagent_stop); ele aparece no registro dispatched e no registro completed de um subagente, mas fica ausente na conclusão de um agente em nuvem.

AtributoTipoPresençaValores / observações
cursor.grok_bot.delegation.directionstringSempredispatched
cursor.grok_bot.delegation.kindstringSemprecloud_agent_launch
cursor.grok_bot.delegation.targetstringSemprecloud_agent
cursor.grok_bot.delegation.target_idstringSempreO ID do agente em nuvem (bc-..., o mesmo valor que a família cloud_agents exporta como cursor.conversation.id) ou o ID da conversa do subagente (sand-subagent-...). Opaco
cursor.grok_bot.delegation.outcomestringApenas completedsuccess
cursor.grok_bot.delegation.duration_msintOpcionalTempo real entre o despacho e o resultado em registros completed. Ausente quando o delegado foi executado fora do turno que recebeu o resultado e em todos os registros dispatched

Limitações conhecidas:

  • Não são registrados: uma orientação injetada no turno em andamento de um agente em nuvem (sem nova execução), um início ou resposta rejeitado pelo Cherri Code, o cancelamento de um agente em nuvem, uma execução iniciada por outra pessoa que o Bot apenas acompanha e o subagente de uma rotina despertando seu agente pai.
  • Um subagente parado ainda pode entregar depois uma conclusão error, então um mesmo target_id pode ter tanto um registro stopped quanto um error.
  • O registro completed de um agente em nuvem é de melhor esforço: quando o Bot volta a acompanhar um agente que iniciou em um turno anterior, a conclusão pode vir com kind cloud_agent_launch, e um início que volta a ser acompanhado no meio da execução pode ficar com o dispatched sem o completed correspondente. Associe os dois registros pelo target_id e trate a possível ausência da conclusão.
  • A entrega é do tipo pelo menos uma vez (at-least-once), como em todas as linhas grok_bot.*: um início, resposta ou conclusão reenviado após uma falha pode ser registrado duas vezes para o mesmo target_id. Deduplique primeiro por cursor.event.id.

Conteúdo da conversa

Família conversation_content. Os eventos conversation.* são os únicos registros de log cujo corpo é um payload (texto da mensagem ou um dos lados de uma chamada de ferramenta MCP), e não um nome de evento constante. Roteie pelo nome do evento de log, como em todas as outras famílias. cursor.conversation.user_message é um prompt, cursor.conversation.assistant_message é uma resposta e cursor.conversation.tool_io são os argumentos ou o resultado de uma chamada de ferramenta MCP; não analise o corpo para diferenciá-los.

Corpo. Texto com secrets removidos. As mensagens são limitadas a 32 KiB, e cada lado de uma chamada de ferramenta, a 8 KiB. cursor.conversation.content_truncated é definido sempre que o corpo exportado é um prefixo do texto ocultado, seja porque a origem ultrapassou o limite, seja porque a ocultação a fez ultrapassá-lo, e, em tool_io, também quando a remoção de secrets tornou impossível analisar um corpo que estava dentro do limite.

Identidade. Os registros incluem os atributos comuns de log. cursor.conversation.id os associa aos logs api.request, skill.activated, hook.execution_complete, cloud_agent.* e grok_bot.* da conversa. Os únicos identificadores de usuário são os atributos do recurso opcionais cursor.user.*; os atributos de log não incluem nenhum. Não dependa de cursor.request.id, cursor.usage_event.id ou, nos registros de mensagem, cursor.grok_bot.turn.id; tool_io inclui turn.id como um atributo compartilhado grok_bot.*.

Superfícies. Apenas agentes na nuvem e Cherri Bot. Conversas de Cloud Agent chegam com cursor.surface=cloud_agent no recurso. Conversas do Cherri Bot chegam com cursor.surface=grok_bot, junto com os logs de ação grok_bot.* do Bot quando o Action Recording está ativado. tool_io é exclusivo do Cherri Bot. Conversas do IDE, da CLI e do desktop ainda não fazem parte desta família. Filtre ou roteie por cursor.surface.

Controles. Cada evento só é enviado com a adesão da equipe e o respectivo controle do destino ativados: user_message requer Prompts, assistant_message requer Responses e tool_io requer Tool I/O. A página de configuração explica os controles.

Os três eventos são INFO e incluem estes atributos:

AtributoTipoPresençaValores / observações
cursor.conversation.provenancestringSempreserver (observado pelo Cherri Code). client é reservado; aceite-o.
cursor.conversation.message.idstringSempreId da mensagem na conversa
cursor.conversation.turn.idstringOpcionalId do turno na conversa. Distinto de cursor.grok_bot.turn.id nos registros de mensagem; igual a ele em tool_io.
cursor.conversation.content_truncatedboolSempreTrue quando o corpo é um prefixo do texto ocultado ou, em tool_io, quando a remoção de secrets o tornou impossível de analisar

cursor.conversation.user_message

INFO. Corpo: o texto com secrets removidos de um prompt do usuário.

cursor.conversation.assistant_message

INFO. Corpo: o texto final do assistente com secrets removidos para a resposta.

cursor.conversation.tool_io

INFO. Corpo: o JSON compacto, com secrets removidos, de um dos lados de uma chamada de ferramenta MCP, com no máximo 8 KiB. São dois registros por chamada de ferramenta MCP do Cherri Bot executada via transporte http: o registro arguments contém o JSON object enviado pelo Bot, e o registro result contém a resposta do conector. Em caso de sucesso, isso corresponde ao texto e ao conteúdo estruturado da ferramenta; em caso de falha, à mensagem de erro, rejeição ou negação. Os bytes de imagens são substituídos pelo respectivo tipo MIME. Chamadas stdio no Bot's computer informam apenas metadados e não geram registro tool_io. Requer o controle Tool I/O do destino, além da adesão da equipe.

Ambos os registros contêm os atributos de correlação grok_bot.* compartilhados (provenance, turn.id, tool_call.id, event.sequence). Por isso, cursor.grok_bot.tool_call.id está sempre presente e os associa às linhas cursor.grok_bot.mcp_tool_call e cursor.grok_bot.tool_decision da chamada. cursor.tool.name, cursor.tool.status e cursor.mcp.server.name repetem os valores da linha de metadados, para que cada registro possa ser lido de forma independente.

AtributoTipoPresençaValores / observações
cursor.conversation.tool_io.directionstringAlwaysarguments
cursor.tool.namestringAlwaysCustomer-defined MCP tool name (aberto)
cursor.tool.statusstringAlwayssuccess
cursor.mcp.server.namestringOptionalCustomer-defined server display name (aberto)
cursor.grok_bot.provenancestringAlwaysserver
cursor.grok_bot.tool_call.idstringAlwaysChave de associação com as linhas mcp_tool_call e tool_decision da chamada
cursor.grok_bot.turn.idstringOptionalMesmo valor de cursor.conversation.turn.id neste registro
cursor.grok_bot.event.sequenceintOptionalNúmero de sequência da chamada dentro do turno; ausente em versões mais antigas do Cherri Bot

Quando cursor.conversation.content_truncated é true, o corpo não pode ser analisado como JSON: ou ele é um prefixo do texto ocultado, ou a remoção de secrets o tornou impossível de analisar e o Cherri Code o exportou sinalizado, em vez de exportar um corpo com menos secrets removidos. Verifique a flag antes de fazer a análise. Os dois lados passam pelo mesmo removedor de secrets aplicado ao texto das mensagens, além de uma etapa baseada em chaves que oculta o valor de qualquer membro ou atribuição JSON cuja chave indique uma credencial (password, passphrase, token, api_key, secret, secret_key, access_key, authorization, cookie, private_key, credentials e compostos como client_secret ou x-api-key), seja qual for a aparência do valor. Pares de cabeçalho também contam: em [{"name":"Authorization","value":"Basic ..."}], o value irmão de um membro name, key ou header que esteja na lista é ocultado, assim como o segundo item de uma matriz de dois itens cujo primeiro item esteja na lista (["password","..."]). Campos de cartão armazenados como números ("cvc": 123) passam a ser [REDACTED: Card], e escapes ASCII \uXXXX são decodificados antes da remoção de secrets. Um bloco de chave privada dividido entre os itens de uma mesma matriz (linhas de um arquivo, blocos de texto de um resultado) é ocultado da linha BEGIN até a linha END; já um bloco dividido entre campos não relacionados não é. A etapa baseada em chaves alcança um nível de JSON aninhado dentro de um valor string; em documentos recodificados em níveis mais profundos, os secrets são removidos apenas com base no formato do valor. Consulte MCP tool I/O para saber o que o removedor de secrets não detecta.

Identidade e associações

ObjetivoCampoCobertura
Deduplicar logscursor.event.idTodo registro de log
Agrupar por sessão ou Botcursor.conversation.idLogs quando presente. Para o Cherri Bot, esse valor é o identificador do Bot (o id da conversa dele).
Agrupar a atividade do Cherri Bot por turnocursor.grok_bot.turn.idLogs grok_bot.*, logs skill.activated do Bot, logs conversation.tool_io e logs api.request / api.error com cursor.surface=grok_bot, quando presente. Não dependa dele em conversation.user_message nem em conversation.assistant_message.
Ordenar as ações de um turno do Botcursor.grok_bot.event.sequenceLogs grok_bot.* e conversation.tool_io das versões atuais do Cherri Bot. Ordene por ele; não espere que a sequência seja contínua
Agrupar as linhas de uma chamada de ferramenta do Botcursor.grok_bot.tool_call.idtool_result, tool_decision, mcp_tool_call, computer_use_session, file_transfer, message_delivery, delegation, escalonamentos de guardrail, skill.activated do Bot e, com o Tool I/O habilitado, os dois lados de conversation.tool_io
Associar uma solicitação de aprovação à sua respostacursor.grok_bot.decision.idtool_decision e as linhas guardrail tool_escalation / pause / interrupted da mesma chamada
Consolidar as ações de um subagente no agente paicursor.grok_bot.root_turn.idLogs grok_bot.* com proveniência client; cursor.grok_bot.subagent.id identifica o subagente
Anexar prompts e respostas a uma sessãocursor.conversation.idLogs conversation.* (agente na nuvem e Cherri Bot), apenas com a adesão a conversation_content
Agrupar prompts e respostas por turnocursor.conversation.turn.idLogs conversation.* quando presente
Agrupar por usuárioatributo do recurso cursor.user.account_idLogs e métricas quando presente. Associa-se ao id na resposta de GET /teams/members da API de administração. cursor.user.email, no mesmo recurso, identifica o membro diretamente.
Reconciliar faturamentocursor.usage_event.idLogs api.request, api.error e api.correction

Os logs exportados não incluem os campos trace_id nem span_id do OpenTelemetry. Use cursor.conversation.id e cursor.grok_bot.turn.id para correlacionar Bot e turno. As métricas não incluem ids de correlação; use os logs api.request para obter os totais de tokens por conversa.

Veja Associação de sessões na página de configuração para exemplos práticos.

Semântica de entrega

  • Logs são entregues pelo menos uma vez. Falhas transitórias são resolvidas automaticamente por cerca de 7 dias; elimine duplicatas com base em event.id. Rejeições definitivas (4xx persistente, payloads inválidos) não são reenviadas.
  • Métricas são entregues no máximo uma vez. Solicitações de métricas com falha não são repetidas nem reenviadas.
  • Sem garantia de ordenação. As correções podem chegar após as solicitações que corrigem; ordene pelo timestamp do registro.
  • Sucesso parcial do OTLP é respeitado. Itens rejeitados não são reenviados.
  • Não há preenchimento retroativo de dados anteriores à ativação do destino. A retenção na fonte antes da exportação também é de cerca de 7 dias (separada da janela de novas tentativas de entrega).