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/metricse<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).
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
service.name | string | Sempre | Constante cursor |
service.version | string | Opcional | Versão do cliente quando a origem for desktop/CLI; geralmente ausente em cloud_agent / bugbot |
cursor.team.id | int | Sempre | ID da sua equipe |
cursor.surface | string | Sempre | unspecified |
cursor.entrypoint | string | Sempre | unspecified |
cursor.user.id | int | Opcional | ID 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_id | string | Opcional | O 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.email | string | Opcional | O 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ília | Sinais | Padrão | Abrange |
|---|---|---|---|
model_usage | métricas + logs | Ativada | token.usage, cost.usage; api.request, api.error, api.correction |
tool_calls | métricas | Ativada | tool.calls |
skills_hooks_plugins | logs | Ativada | skill.activated (todas as Surfaces, incluindo o Cherri Bot), hook.execution_complete, plugin.installed |
cloud_agents | logs | Ativada | cloud_agent.pull_request, cloud_agent.setup, cloud_agent.artifact, cloud_agent.mcp_auth_error |
grok_bot_agent_actions | logs | Ativada (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_content | logs | Desativada (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.
| Atributo | Tipo | Presença | Valores / observações | |||
|---|---|---|---|---|---|---|
cursor.token.type | string | Sempre | input | output | cache_read | cache_creation |
cursor.model.name | string | Opcional | Modelo 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.status | string | Opcional | success | errored | aborted | |
cursor.api.billable | bool | Opcional |
cursor.tool.calls
Unidade {call}. Família tool_calls. Valor 1 por chamada de ferramenta concluída.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.tool.kind | string | Sempre | builtin |
cursor.tool.name | string | Sempre | ID da ferramenta integrada (por exemplo, read, shell) ou nome da ferramenta MCP do cliente (aberto) |
cursor.tool.status | string | Sempre | success |
cursor.mcp.server.name | string | Somente MCP | Nome 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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.model.name | string | Opcional | Mesmas regras de consolidação que token.usage |
Eventos de log
Níveis de severidade: INFO=9, WARN=13, ERROR=17.
Atributos comuns de logs
| Atributo | Tipo | Presença | Observações |
|---|---|---|---|
cursor.event.id | string | Sempre | Chave 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.id | string | Sempre | Identidade opaca da fonte interna. Vários sinais podem compartilhar o mesmo valor. |
cursor.request.id | string | Opcional | Em 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.id | string | Opcional | IDE/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.id | string | Opcional | Somente 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.
| Atributo | Tipo | Presença | Observações |
|---|---|---|---|
cursor.api.request.input_tokens | int | Sempre | |
cursor.api.request.output_tokens | int | Sempre | |
cursor.api.request.cache_read_tokens | int | Sempre | |
cursor.api.request.cache_creation_tokens | int | Sempre | |
cursor.model.name | string | Opcional | |
cursor.api.billable | bool | Opcional | |
cursor.grok_bot.turn.id | string | Somente na surface grok_bot | Mesmo 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.
| Atributo | Tipo | Presença | Observações |
|---|---|---|---|
cursor.model.name | string | Opcional | |
cursor.api.billable | bool | Opcional | |
cursor.grok_bot.turn.id | string | Somente na surface grok_bot | Mesmo 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.
| Atributo | Tipo | Presença | Valores | |
|---|---|---|---|---|
cursor.api.correction.kind | string | Sempre | not_billed_errored | not_billed_aborted_before_timeout |
cursor.skill.activated
INFO, corpo skill_activated. Família skills_hooks_plugins.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.skill.name | string | Sempre | Criada pelo cliente (aberta) |
cursor.skill.trigger | string | Sempre | agent_read |
cursor.skill.source | string | Sempre | unspecified |
cursor.plugin.name | string | Opcional | Quando 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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.hook.name | string | Sempre | Configurado pelo cliente (aberto) |
cursor.hook.type | string | Sempre | pre_tool_use |
cursor.hook.outcome | string | Sempre | success |
cursor.hook.duration_ms | int | Sempre | |
cursor.plugin.name | string | Opcional | Quando 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).
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.plugin.name | string | Sempre | Aberto |
cursor.plugin.scope | string | Sempre | unspecified |
cursor.cloud_agent.pull_request
INFO (opened) / WARN (creation_failed), corpo cloud_agent_pull_request_<kind>. Família cloud_agents. conversation.id = bc-....
| Atributo | Tipo | Presença | Valores / observações | |
|---|---|---|---|---|
cursor.cloud_agent.pull_request.kind | string | Sempre | opened | creation_failed |
cursor.cloud_agent.pull_request.number | int | Apenas opened | ||
cursor.cloud_agent.pull_request.draft | bool | Apenas 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-....
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.cloud_agent.setup.kind | string | Sempre | started |
cursor.cloud_agent.setup.duration_ms | int | Tipos terminais, quando presentes | completed / failed |
cursor.cloud_agent.setup.reason | string | Somente failed | Vocabulário aberto (por exemplo, install_command_failed) |
cursor.cloud_agent.artifact
INFO, corpo cloud_agent_artifact_created. Família cloud_agents. conversation.id = bc-....
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.cloud_agent.artifact.file_name | string | Sempre | Aberto |
cursor.cloud_agent.artifact.content_type | string | Opcional | MIME |
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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.mcp.server.name | string | Sempre | Nome 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:
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.grok_bot.provenance | string | Sempre | client (reportado pelo computador do Bot; melhor esforço) |
cursor.grok_bot.turn.id | string | Opcional | Request 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.id | string | Opcional | Request 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.id | string | Opcional | Conversation 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.id | string | Opcional | ID do Computador do Cherri Bot. Ausente com proveniência server |
cursor.grok_bot.event.sequence | int | Opcional | Nú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.id | string | Opcional | ID 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_by | string | Opcional | Quem 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.
| Atributo | tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.tool.name | string | Sempre | Nome da ferramenta MCP definido pelo cliente (aberto) |
cursor.tool.status | string | Sempre | success |
cursor.grok_bot.mcp.transport | string | Sempre | http (observado pelo servidor) |
cursor.grok_bot.mcp.duration_ms | int | Sempre | |
cursor.mcp.server.name | string | Opcional | nome 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.
| Atributo | Tipo | Presença | valores / observações |
|---|---|---|---|
cursor.grok_bot.shell.command | string | Sempre | Texto do comando com secrets removidos, de no máximo 8 KiB (open) |
cursor.grok_bot.shell.command_truncated | bool | Sempre | True quando o comando de origem excedeu o limite |
cursor.grok_bot.shell.kind | string | Sempre | foreground |
cursor.grok_bot.shell.target | string | Sempre | box (o Cherri Bot computer) |
cursor.grok_bot.shell.allowed | bool | Sempre | Decisão da policy do shell |
cursor.grok_bot.shell.blocked_reason | string | Opcional | Motivo da policy quando bloqueado; com secrets removidos (open) |
cursor.grok_bot.shell.classification_reasons | string[] | Opcional | No máximo 10 motivos de classificação da policy; com secrets removidos (open) |
cursor.grok_bot.shell.machine_id | string | Opcional | Apenas 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_code | int | Opcional | Có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_ms | int | Opcional | Tempo 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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.grok_bot.browser.url | string | Sempre | scheme://host/path normalizado (open). Esquemas não hierárquicos nunca são exportados |
cursor.grok_bot.browser.page_title | string | Opcional | Com 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.
| Attribute | tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.grok_bot.computer_use.action_count | int | Sempre | |
cursor.grok_bot.computer_use.duration_ms | int | Sempre | |
cursor.grok_bot.computer_use.screenshot_count | int | Sempre | |
cursor.grok_bot.computer_use.action_counts.<kind> | int | Optional | Um 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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.tool.name | string | Sempre | Id 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.outcome | string | Sempre | success (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_ms | int | Sempre | |
cursor.grok_bot.tool_result.error_category | string | Opcional | Motivo 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_host | string | Opcional | O 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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.grok_bot.decision.id | string | Sempre | Id 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.name | string | Sempre | Id 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.source | string | Sempre | human |
cursor.grok_bot.decision.approval_mode | string | Sempre | auto_allow |
cursor.grok_bot.decision.outcome | string | Sempre | allowed |
cursor.grok_bot.decision.rule_id | string | Opcional | Id 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,allowedoudenied, 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 umpolicydenied, 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_modeauto_reviewquando o classificador escalou,ask_humanquando 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 comoallowededenied, 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 (seutool_resultindicadenied); 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 chamadacancelledtraz 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 seutool_resultindicacancelled.
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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.grok_bot.file.direction | string | Sempre | Do ponto de vista do computador do Bot: download (os bytes chegaram a ele) |
cursor.grok_bot.file.target | string | Sempre | user_machine (o computador do usuário) |
cursor.grok_bot.file.outcome | string | Sempre | success |
cursor.grok_bot.file.bytes | int | Opcional | Bytes 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_category | string | Opcional | Motivo 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_id | string | Opcional | A 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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.grok_bot.message_delivery.destination_type | string | Sempre | user (o próprio usuário do Bot, no chat ou em uma chamada de voz) |
cursor.grok_bot.message_delivery.destination_id | string | Opcional | agent: 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.result | string | Sempre | sent |
cursor.grok_bot.message_delivery.failure_category | string | Opcional | Motivo 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.id | string | Opcional | Quando 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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.grok_bot.routine.id | string | Sempre | O id estável da rotina (opaco) |
cursor.grok_bot.routine_run.id | string | Sempre | O id da execução, o mesmo valor exibido no histórico de execução da rotina (opaco) |
cursor.grok_bot.routine_run.trigger | string | Sempre | schedule (disparada por um agendamento cron) |
cursor.grok_bot.routine_run.outcome | string | Sempre | success (o turno foi concluído ou pausado aguardando o usuário) |
cursor.grok_bot.routine_run.duration_ms | int | Sempre | Tempo 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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.grok_bot.guardrail.kind | string | Sempre | loop_detected |
cursor.grok_bot.guardrail.detector | string | Sempre | O 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.action | string | Sempre | warned (o Bot recebeu um alerta e continuou) |
cursor.grok_bot.guardrail.source | string | Sempre | runtime (um detector: loop_detected, bot_blocked) |
cursor.grok_bot.guardrail.count | int | Opcional | A 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_host | string | Opcional | Somente bot_blocked: o host que recusou o Bot, em minúsculas e sem www., porta, caminho, query ou userinfo (aberto) |
cursor.tool.name | string | Opcional | Somente 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.resolution | string | Opcional | Somente pause e interrupted: resumed (a pessoa permitiu a ação) |
cursor.grok_bot.guardrail.duration_ms | int | Opcional | Somente 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.id | string | Opcional | Somente 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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.grok_bot.delegation.direction | string | Sempre | dispatched |
cursor.grok_bot.delegation.kind | string | Sempre | cloud_agent_launch |
cursor.grok_bot.delegation.target | string | Sempre | cloud_agent |
cursor.grok_bot.delegation.target_id | string | Sempre | O 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.outcome | string | Apenas completed | success |
cursor.grok_bot.delegation.duration_ms | int | Opcional | Tempo 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 mesmotarget_idpode ter tanto um registrostoppedquanto umerror. - O registro
completedde 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 kindcloud_agent_launch, e um início que volta a ser acompanhado no meio da execução pode ficar com odispatchedsem ocompletedcorrespondente. Associe os dois registros pelotarget_ide 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 mesmotarget_id. Deduplique primeiro porcursor.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:
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.conversation.provenance | string | Sempre | server (observado pelo Cherri Code). client é reservado; aceite-o. |
cursor.conversation.message.id | string | Sempre | Id da mensagem na conversa |
cursor.conversation.turn.id | string | Opcional | Id do turno na conversa. Distinto de cursor.grok_bot.turn.id nos registros de mensagem; igual a ele em tool_io. |
cursor.conversation.content_truncated | bool | Sempre | True 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.
| Atributo | Tipo | Presença | Valores / observações |
|---|---|---|---|
cursor.conversation.tool_io.direction | string | Always | arguments |
cursor.tool.name | string | Always | Customer-defined MCP tool name (aberto) |
cursor.tool.status | string | Always | success |
cursor.mcp.server.name | string | Optional | Customer-defined server display name (aberto) |
cursor.grok_bot.provenance | string | Always | server |
cursor.grok_bot.tool_call.id | string | Always | Chave de associação com as linhas mcp_tool_call e tool_decision da chamada |
cursor.grok_bot.turn.id | string | Optional | Mesmo valor de cursor.conversation.turn.id neste registro |
cursor.grok_bot.event.sequence | int | Optional | Nú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
| Objetivo | Campo | Cobertura |
|---|---|---|
| Deduplicar logs | cursor.event.id | Todo registro de log |
| Agrupar por sessão ou Bot | cursor.conversation.id | Logs quando presente. Para o Cherri Bot, esse valor é o identificador do Bot (o id da conversa dele). |
| Agrupar a atividade do Cherri Bot por turno | cursor.grok_bot.turn.id | Logs 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 Bot | cursor.grok_bot.event.sequence | Logs 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 Bot | cursor.grok_bot.tool_call.id | tool_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 resposta | cursor.grok_bot.decision.id | tool_decision e as linhas guardrail tool_escalation / pause / interrupted da mesma chamada |
| Consolidar as ações de um subagente no agente pai | cursor.grok_bot.root_turn.id | Logs grok_bot.* com proveniência client; cursor.grok_bot.subagent.id identifica o subagente |
| Anexar prompts e respostas a uma sessão | cursor.conversation.id | Logs conversation.* (agente na nuvem e Cherri Bot), apenas com a adesão a conversation_content |
| Agrupar prompts e respostas por turno | cursor.conversation.turn.id | Logs conversation.* quando presente |
| Agrupar por usuário | atributo do recurso cursor.user.account_id | Logs 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 faturamento | cursor.usage_event.id | Logs 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).