Referencia del formato de transmisión de la exportación de OpenTelemetry
Complemento de la Exportación de OpenTelemetry. Documenta toda la superficie del formato de transmisión: cada métrica, evento de registro, atributo, enumeración y regla de presencia.
La superficie es aditiva. Se toleran atributos, eventos y valores de enumeración desconocidos. Los cambios de nombre y las eliminaciones se notificarán explícitamente.
Transporte y ámbito
- Protobuf binario OTLP/HTTP (
application/x-protobuf),POST - Endpoints:
<base>/v1/metricsy<base>/v1/logs - Ámbito:
cursor.telemetry/0.1.0
Atributos del recurso
Un recurso por cada agrupación de (equipo, usuario, superficie, punto de entrada, versión de la superficie).
| Atributo | Tipo | Presencia | Valores/notas |
|---|---|---|---|
service.name | string | Siempre | Constante cursor |
service.version | string | Opcional | Versión del cliente cuando el origen es Desktop/CLI; normalmente ausente en cloud_agent / bugbot |
cursor.team.id | int | Siempre | ID de tu equipo |
cursor.surface | string | Siempre | unspecified |
cursor.entrypoint | string | Siempre | unspecified |
cursor.user.id | int | Opcional | ID de usuario opaco con ámbito de equipo cuando el origen dispone de uno. En los registros cloud_agent.* corresponde al propietario de la ejecución. Una ejecución iniciada con una clave de API del equipo o una cuenta de servicio no tiene propietario y no incluye atributos de usuario. No exijas su presencia. |
cursor.user.account_id | string | Opcional | El ID user_... del miembro, es decir, el valor que GET /teams/members de la Admin API devuelve como id. Un registro incluye este atributo y cursor.user.id, o ninguno de los dos. |
cursor.user.email | string | Opcional | El correo electrónico del miembro. Está presente cuando cursor.user.id también lo está y el miembro tiene un correo electrónico. No se exporta en equipos que usan el modo de privacidad (heredado). No exijas su presencia. |
Familias
Los IDs de familia coinciden con los toggles de Configuración del equipo. Todas están activadas por defecto en un destino nuevo, excepto conversation_content, que permanece desactivada hasta que el equipo dé su activación y el destino active el toggle de cada tipo (consulta Contenido de las conversaciones).
| ID de familia | Señales | Por defecto | Incluye |
|---|---|---|---|
model_usage | métricas + registros | Activada | token.usage, cost.usage; api.request, api.error, api.correction |
tool_calls | métricas | Activada | tool.calls |
skills_hooks_plugins | registros | Activada | skill.activated (en todas las superficies, incluido el Bot de Grok), hook.execution_complete, plugin.installed |
cloud_agents | registros | Activada | cloud_agent.pull_request, cloud_agent.setup, cloud_agent.artifact, cloud_agent.mcp_auth_error |
grok_bot_agent_actions | registros | Activada (requiere grabación de acciones) | 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 | registros | Desactivada (activación del equipo + toggles del destino por tipo) | conversation.user_message, conversation.assistant_message, conversation.tool_io |
La familia grok_bot_agent_actions, así como skill.activated cuando lo emite un Bot, contienen datos de grabación de acciones. Solo se envían después de que un administrador de equipo active Grabación de acciones en la página del Bot de Grok del panel de control. El modo de privacidad (heredado) fuerza la desactivación de la grabación.
Métricas
Todas las métricas son sumas delta monotónicas. Los puntos de datos de las métricas no incluyen ID de correlación; estos aparecen únicamente en los registros.
Consuma las métricas como sumas de deltas por serie. Una serie se define por el recurso, el nombre de la métrica y el conjunto exacto de atributos de los puntos de datos. Las ventanas de una misma serie pueden solaparse entre emisiones.
cursor.token.usage
Unidad: {token}. Familia: model_usage.
| Atributo | Tipo | Presencia | Valores / notas | |||
|---|---|---|---|---|---|---|
cursor.token.type | string | Siempre | input | output | cache_read | cache_creation |
cursor.model.name | string | Opcional | Modelo público solicitado tras la consolidación de la intención enrutada (auto: a Auto, thinking: a Thinking, pro: a Pro, premium: a Premium; en caso contrario, se conserva sin cambios). No se incluye en Bugbot o cuando la fuente no tenía modelo. | |||
cursor.api.status | string | Opcional | success | errored | aborted | |
cursor.api.billable | bool | Opcional |
cursor.tool.calls
Unidad {call}. Familia tool_calls. Valor 1 por cada llamada a una herramienta completada.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.tool.kind | string | Siempre | builtin |
cursor.tool.name | string | Siempre | ID de herramienta integrada (p. ej., read, shell) o nombre de herramienta MCP del cliente (abierto) |
cursor.tool.status | string | Siempre | success |
cursor.mcp.server.name | string | Solo MCP | Nombre para mostrar del servidor definido por el cliente (abierto) |
cursor.cost.usage
Unidad USD (double). Familia model_usage. Coste estimado al momento del evento, no es una factura. Sujeto a cursor.api.correction. Para BYOK, esta es solo la tasa de tokens de Cherri Code, no el gasto del proveedor.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.model.name | string | Opcional | Mismas reglas de consolidación que token.usage |
Eventos de registro
Niveles de gravedad: INFO=9, WARN=13, ERROR=17.
Atributos comunes de los registros
| Atributo | Tipo | Presencia | Notas |
|---|---|---|---|
cursor.event.id | string | Siempre | Clave de deduplicación. Opaca. Determinista entre reintentos, reinicios de workers y replay de Kafka de Cherri Code. El prefijo customer-telemetry:v1:... es estable; trate toda la cadena como opaca. |
cursor.source_event.id | string | Siempre | Identidad de origen interna opaca. Varias señales pueden compartir un mismo valor. |
cursor.request.id | string | Opcional | En api.request, api.error, skill.activated (excepto activaciones de Bot), hook.execution_complete, plugin.installed. Nunca en api.correction, cloud_agent.* ni grok_bot.*. No dependa de él en conversation.*. |
cursor.conversation.id | string | Opcional | IDE/CLI: UUID de composer. Agente en la nube: ID de agente bc-... visible para el cliente. Bot de Grok (grok_bot.* y cualquier registro con cursor.surface=grok_bot): el identificador del Bot. Ese valor es el ID de conversación del Bot. Clave de unión para reconstruir sesiones entre registros de api, skill/hook, cloud_agent, grok_bot y conversation. |
cursor.usage_event.id | string | Opcional | Solo en api.request / api.error / api.correction. Clave a nivel de solicitud para las exportaciones de consumo y facturación de Cherri Code. |
cursor.api.request
INFO, cuerpo api_request. Familia model_usage.
| Atributo | Tipo | Presencia | Notas |
|---|---|---|---|
cursor.api.request.input_tokens | int | Siempre | |
cursor.api.request.output_tokens | int | Siempre | |
cursor.api.request.cache_read_tokens | int | Siempre | |
cursor.api.request.cache_creation_tokens | int | Siempre | |
cursor.model.name | string | Opcional | |
cursor.api.billable | bool | Opcional | |
cursor.grok_bot.turn.id | string | Solo en la superficie grok_bot | Mismo valor que cursor.request.id: la interacción del Bot que realizó la llamada al modelo. Únelo con los registros de acción grok_bot.* de esa interacción. Una llamada al modelo del Bot de Grok realizada fuera de una interacción (generación de avatares) incluye aquí un id que no se une con ningún registro de acción. Nunca aparece en otras superficies |
cursor.api.error
ERROR, cuerpo api_error. Familia model_usage. No se incluyen mensajes de error sin procesar. Se planean atributos de tipo y estado con baja cardinalidad; no dependa aún de ellos.
| Atributo | Tipo | Presencia | Notas |
|---|---|---|---|
cursor.model.name | string | Opcional | |
cursor.api.billable | bool | Opcional | |
cursor.grok_bot.turn.id | string | Solo en la superficie grok_bot | Mismo valor que cursor.request.id; consulte api.request |
cursor.api.correction
WARN, cuerpo api_correction_<kind>. Familia model_usage. Finalización de la facturación: el evento de consumo no se facturó de forma retroactiva. Unir mediante cursor.usage_event.id y descartar todo el grupo de la facturación. Deliberadamente no incluye cursor.model.name.
| Atributo | Tipo | Presencia | Valores |
|---|---|---|---|
cursor.api.correction.kind | string | Siempre | not_billed_errored |
cursor.skill.activated
INFO, cuerpo skill_activated. Familia skills_hooks_plugins.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.skill.name | string | Siempre | Creado por el cliente (abierto) |
cursor.skill.trigger | string | Siempre | agent_read |
cursor.skill.source | string | Siempre | unspecified |
cursor.plugin.name | string | Opcional | Cuando la skill procede de un plugin. Por ahora no se exporta en las activaciones del Bot de Grok |
Cuando un Bot lee un SKILL.md, exporta este mismo evento con cursor.surface=grok_bot, y el registro incluye los atributos compartidos grok_bot.* para poder vincularlo con las demás acciones de la interacción. cursor.skill.name es el slug de la carpeta de la skill; cursor.skill.trigger es agent_read o skill_name_in_prompt (las skills invocadas con / o @ todavía no se registran), y cursor.skill.source es builtin para las skills gestionadas por Cherri Code, plugin para las skills de plugins instalados, user para las del propio Bot y, en los demás casos, se clasifica igual que en cualquier otra superficie. cursor.grok_bot.tool_call.id es el id de la operación Read que activó la skill y permite vincularla con su fila tool_result. Las activaciones del Bot incluyen cursor.conversation.id, nunca cursor.request.id, y solo se envían cuando la grabación de acciones está activada.
cursor.hook.execution_complete
INFO (ERROR para failed / timeout), cuerpo hook_execution_complete. Familia skills_hooks_plugins.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.hook.name | string | Siempre | Configurado por el cliente (abierto) |
cursor.hook.type | string | Siempre | pre_tool_use |
cursor.hook.outcome | string | Siempre | success |
cursor.hook.duration_ms | int | Siempre | |
cursor.plugin.name | string | Opcional | Cuando el hook procede de un plugin |
cursor.plugin.installed
INFO, cuerpo plugin_installed. Familia skills_hooks_plugins. Sin conversation.id (la instalación no está asociada a una conversación).
| Atributo | Tipo | Presencia | Valores/notas |
|---|---|---|---|
cursor.plugin.name | string | Siempre | Abierto |
cursor.plugin.scope | string | Siempre | unspecified |
cursor.cloud_agent.pull_request
INFO (opened) / WARN (creation_failed), cuerpo cloud_agent_pull_request_<kind>. Familia cloud_agents. conversation.id = bc-....
| Atributo | Tipo | Presencia | Valores / notas | |
|---|---|---|---|---|
cursor.cloud_agent.pull_request.kind | string | Siempre | opened | creation_failed |
cursor.cloud_agent.pull_request.number | int | Solo en opened | ||
cursor.cloud_agent.pull_request.draft | bool | Solo en opened |
creation_failed se emite de inmediato. opened puede ser parcial mientras el productor realiza el despliegue.
cursor.cloud_agent.setup
INFO (started / completed) / ERROR (failed), cuerpo cloud_agent_setup_<kind>. Familia cloud_agents. conversation.id = bc-....
| Atributo | Tipo | Presencia | Valores/notas |
|---|---|---|---|
cursor.cloud_agent.setup.kind | string | Siempre | started |
cursor.cloud_agent.setup.duration_ms | int | Tipos terminales, si está presente | completed / failed |
cursor.cloud_agent.setup.reason | string | Solo failed | Vocabulario abierto (p. ej., install_command_failed) |
cursor.cloud_agent.artifact
INFO, cuerpo cloud_agent_artifact_created. Familia cloud_agents. conversation.id = bc-....
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.cloud_agent.artifact.file_name | string | Siempre | Abierto |
cursor.cloud_agent.artifact.content_type | string | Opcional | MIME |
cursor.cloud_agent.mcp_auth_error
ERROR, cuerpo cloud_agent_mcp_auth_error. Familia cloud_agents. conversation.id = bc-....
Un servidor MCP que conectaste rechazó las credenciales de la ejecución. Las llamadas a herramientas de ese servidor fallaron mientras la ejecución continuaba. ERROR, ya que solo tú puedes solucionar la integración; configura una alerta para detectar automatizaciones y agentes en la nube que pierdan silenciosamente un servidor MCP.
| Atributo | Tipo | Presencia | Valores/notas |
|---|---|---|---|
cursor.mcp.server.name | string | Siempre | Nombre para mostrar del servidor definido por el cliente (abierto), p. ej., github. Mismo espacio de valores que el atributo del punto de datos cursor.tool.calls. |
Atributos compartidos grok_bot.*
El propio Bot se identifica mediante cursor.conversation.id en todos los registros grok_bot.*; su valor es el ID de conversación del Bot. cursor.grok_bot.subagent.id identifica al subagente cuando es este quien actúa. Los eventos grok_bot.* transportan las acciones del Bot procedentes de la grabación de acciones. Familia grok_bot_agent_actions. Todos los registros tienen cursor.surface=grok_bot.
Cada evento contiene metadatos sobre una acción, nunca su contenido. En estos eventos nunca se exportan los argumentos ni los resultados de las herramientas, las rutas y nombres de archivo, el cuerpo y los destinatarios de los mensajes, las credenciales, los datos de tarjetas ni el razonamiento del clasificador de Auto-review; los argumentos y resultados de MCP solo se envían en el registro opcional cursor.conversation.tool_io, que debe activarse expresamente. Las excepciones se indican en cada evento: el texto del comando de shell (con secretos eliminados y limitado a 8 KiB), la URL normalizada y el título de la página del navegador, y los nombres de host sin más datos. Todos los campos de texto libre se depuran para eliminar patrones de credenciales, números de tarjetas de pago y tokens de OAuth antes de que puedan llegar a tu colector.
Cada evento también incluye estos atributos:
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.grok_bot.provenance | cadena | Siempre | client (informado por la computadora del Bot de Grok; sin garantías) |
cursor.grok_bot.turn.id | cadena | Opcional | ID de solicitud de la interacción del Bot (o de la solicitud del subagente) que realizó la acción. El mismo valor aparece como cursor.grok_bot.turn.id en los registros api.request y api.error de la interacción |
cursor.grok_bot.root_turn.id | cadena | Opcional | ID de solicitud de la interacción visible para el usuario a la que corresponde la acción. Igual a turn.id fuera de los subagentes; para la acción de un subagente, es la interacción que lo generó. Ausente con procedencia server |
cursor.grok_bot.subagent.id | cadena | Opcional | ID de conversación del subagente que realizó la acción. Ausente cuando la realizó el Bot de nivel superior y con procedencia server |
cursor.grok_bot.box.id | cadena | Opcional | ID de la computadora del Bot de Grok. Ausente con procedencia server |
cursor.grok_bot.event.sequence | int | Opcional | Número de secuencia monótono por interacción, asociado a turn.id. Úsalo para ordenar las acciones de una interacción en lugar de los relojes del cliente. No es consecutivo: una interacción reanudada tras esperar una aprobación continúa por encima de su último número, y un reintento continúa desde su propio bloque, de modo que las filas reintentadas siguen quedando después de la primera ejecución. Ausente en versiones anteriores del Bot de Grok |
cursor.grok_bot.tool_call.id | cadena | Opcional | ID de la llamada a herramienta de la acción. Todas las filas generadas por una misma llamada a herramienta tienen el mismo valor (su tool_result, sus filas tool_decision y su fila específica de la herramienta, como mcp_tool_call), por lo que se pueden relacionar mediante él. Ausente cuando la acción no se atribuye a una llamada a herramienta (una navegación del navegador, un comando de shell) |
cursor.grok_bot.initiated_by | cadena | Opcional | Quién inició la interacción a la que pertenece la acción: user (un mensaje escrito o una llamada de voz) |
cursor.grok_bot.mcp_tool_call
INFO (ERROR para el estado failure), cuerpo grok_bot_mcp_tool_call. Familia grok_bot_agent_actions. Una llamada a herramienta MCP realizada por un Bot. Esta fila nunca incluye los argumentos ni los resultados de la herramienta. En las llamadas http, un equipo con la E/S de herramientas activada los recibe como dos registros cursor.conversation.tool_io, unidos a esta fila mediante cursor.grok_bot.tool_call.id.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.tool.name | cadena | Siempre | Nombre de herramienta MCP definido por el cliente (abierto) |
cursor.tool.status | cadena | Siempre | success |
cursor.grok_bot.mcp.transport | cadena | Siempre | http (observado por el server) |
cursor.grok_bot.mcp.duration_ms | int | Siempre | |
cursor.mcp.server.name | cadena | Opcional | Nombre para mostrar del servidor definido por el cliente (abierto) |
cursor.grok_bot.tool_call.id está presente en cada llamada MCP. Las llamadas a conectores, incluidas las herramientas del navegador en la computadora del Bot de Grok, se registran aquí y nunca como tool_result, por lo que cada llamada a herramienta se registra una sola vez.
cursor.grok_bot.shell_command
INFO (WARN cuando se bloquea), cuerpo grok_bot_shell_command. Familia grok_bot_agent_actions. Un comando de shell que un Bot ejecutó o cuya ejecución se bloqueó. El registro se escribe cuando el comando finaliza y conserva la hora de emisión como marca de tiempo, por lo que el registro de un comando largo llega mucho después de su marca de tiempo.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.grok_bot.shell.command | string | Siempre | Texto del comando con secretos eliminados, de 8 KiB como máximo (abierto) |
cursor.grok_bot.shell.command_truncated | bool | Siempre | True cuando el comando de origen superó el límite |
cursor.grok_bot.shell.kind | string | Siempre | foreground |
cursor.grok_bot.shell.target | string | Siempre | box (la computadora del Bot de Grok) |
cursor.grok_bot.shell.allowed | bool | Siempre | Decisión de la política de shell |
cursor.grok_bot.shell.blocked_reason | string | Opcional | Motivo de la política al bloquearse; con secretos eliminados (abierto) |
cursor.grok_bot.shell.classification_reasons | string[] | Opcional | Como máximo 10 motivos de clasificación de la política; con secretos eliminados (abierto) |
cursor.grok_bot.shell.machine_id | string | Opcional | Solo para el destino user_machine: la máquina registrada del usuario en la que se ejecutó el comando (abierto). Solo se indica si la máquina estaba registrada al inicio de la interacción |
cursor.grok_bot.shell.exit_code | int | Opcional | Código de salida del proceso; -1 si una señal lo finalizó o se canceló. Ausente en comandos background y cuando el comando nunca llegó a devolver un código de salida (conexión perdida, rechazado antes de ejecutarse) |
cursor.grok_bot.shell.duration_ms | int | Opcional | Tiempo real transcurrido desde la emisión hasta la finalización, incluida la conexión a la computadora y cualquier espera antes de que se iniciara el proceso. Presente en todos los registros foreground y ausente en background |
cursor.grok_bot.browser_navigation
INFO, cuerpo grok_bot_browser_navigation. Familia grok_bot_agent_actions. conversation.id es el identificador del Bot.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.grok_bot.browser.url | string | Siempre | scheme://host/path normalizado (abierto). Los esquemas no jerárquicos nunca se exportan |
cursor.grok_bot.browser.page_title | string | Opcional | Con secretos eliminados (abierto) |
cursor.grok_bot.computer_use_session
INFO, cuerpo grok_bot_computer_use_session. Familia grok_bot_agent_actions. Resumen de una sesión de un subagente de uso de computadora: solo recuentos y tiempo real. Sin coordenadas, texto escrito ni capturas de pantalla. cursor.grok_bot.turn.id es la interacción padre que invocó al subagente, cursor.grok_bot.subagent.id es el propio subagente, cursor.grok_bot.tool_call.id es la invocación y cursor.grok_bot.initiated_by siempre es subagent.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.grok_bot.computer_use.action_count | int | Siempre | |
cursor.grok_bot.computer_use.duration_ms | int | Siempre | |
cursor.grok_bot.computer_use.screenshot_count | int | Siempre | |
cursor.grok_bot.computer_use.action_counts.<kind> | int | Opcional | Un atributo por cada tipo de acción con un recuento positivo. <kind> puede ser click, drag, key, mouse_move, screenshot, scroll, type o wait |
cursor.grok_bot.tool_result
INFO (success / cancelled), WARN (denied), ERROR (error), cuerpo grok_bot_tool_result. Familia grok_bot_agent_actions. Una llamada a herramienta integrada, ya resuelta, realizada por un Bot (read, web_search, send_to_user, task, shell, ...). Es la fila que genera cada herramienta integrada, de modo que ninguna herramienta que un Bot pueda llamar queda sin registrar. Las llamadas de conectores (MCP) son filas mcp_tool_call y nunca aparecen aquí.
cursor.grok_bot.tool_call.id vincula la fila con las filas tool_decision de la misma llamada. Un mismo id puede tener dos filas tool_result cuando una llamada se vuelve a ejecutar tras un fallo transitorio del flujo del modelo, así que, para contar llamadas, cuenta los ids distintos.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.tool.name | cadena | Siempre | Id de la herramienta integrada, en minúsculas; comparte el espacio de valores de la dimensión integrada tool.name de cursor.tool.calls (read, shell, web_search, ...) |
cursor.grok_bot.tool_result.outcome | cadena | Siempre | success (la herramienta devolvió un resultado, incluso si entregó un rechazo al modelo como texto; las filas tool_decision de la llamada indican si la acción se realizó) |
cursor.grok_bot.tool_result.duration_ms | int | Siempre | |
cursor.grok_bot.tool_result.error_category | cadena | Opcional | Motivo codificado cuando outcome no es success: invalid_args, user_rejected, timeout, provider_error, hook_denied o un nombre de clase de error como TimeoutError (abierto) |
cursor.grok_bot.tool_result.target_host | cadena | Opcional | El host, sin más, sobre el que actuó una herramienta, en el caso de herramientas dirigidas a un sitio: list_credentials indica el sitio al que se limitó una búsqueda de credenciales; request_virtual_card, el comercio. En minúsculas, sin www., puerto, ruta, consulta ni userinfo. Ausente para cualquier otra herramienta, cuando la llamada no indicó ningún sitio y cuando la llamada nunca se ejecutó (abierto) |
Interpreta outcome como «cómo terminó la llamada», no como «si la acción se realizó». Los shells, las acciones del navegador y de la computadora, y las solicitudes de herramientas locales que la persona rechazó registran el rechazo como denied con error_category user_rejected. El correo, las escrituras de rutinas, las transferencias de archivos de conectores, los lanzamientos de subagentes y las acciones de agentes en la nube devuelven el rechazo al modelo como texto, por lo que su tool_result indica success, mientras que la fila tool_decision registra el rechazo.
cursor.grok_bot.tool_decision
INFO (allowed / held), WARN (denied / timed_out), cuerpo grok_bot_tool_decision. Familia grok_bot_agent_actions. Una decisión sobre si una llamada a herramienta de un Bot puede ejecutarse: quién la tomó, mediante qué modo de aprobación y cuál fue. Una llamada puede tener varias decisiones (Auto-review se niega a permitirla automáticamente y luego una persona responde a la tarjeta), cada una con su propio registro. Se vinculan con la fila tool_result, mcp_tool_call o computer_use_session de la llamada mediante cursor.grok_bot.tool_call.id. La justificación del clasificador, el texto de la tarjeta y los argumentos nunca aparecen aquí.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.grok_bot.decision.id | cadena | Siempre | Id generado al tomarse la decisión, antes de que ninguna persona vea una tarjeta. En una decisión human, es el id de la tarjeta o de la solicitud de permiso que respondió la persona, y el mismo valor que lleva una fila de escalado guardrail de la misma llamada (abierto) |
cursor.tool.name | cadena | Siempre | Id de la herramienta integrada, en minúsculas; el mismo valor que el tool_result de la llamada. La decisión de una llamada a un conector lleva mcp, mientras que su fila mcp_tool_call lleva el nombre de la herramienta del servidor |
cursor.grok_bot.decision.source | cadena | Siempre | human |
cursor.grok_bot.decision.approval_mode | cadena | Siempre | auto_allow |
cursor.grok_bot.decision.outcome | cadena | Siempre | allowed |
cursor.grok_bot.decision.rule_id | cadena | Opcional | Id opaco de la regla de Auto-review que decidió; ausente hasta que el clasificador atribuya su veredicto a una regla (abierto) |
Qué significa cada origen:
policyes toda clasificación de Auto-review aplicada,allowedodenied, en cualquier superficie: los shells, las llamadas a conectores, el correo, las escrituras de rutinas y los lanzamientos de agentes en la nube y subagentes. Un clasificador que falla o no cumple su plazo cuenta comopolicydenied, al igual que una regla de revisión que envía una llamada a una persona sin clasificarla.humanes el desenlace de una tarjeta de Auto-review (approval_modeauto_reviewcuando el clasificador escaló,ask_humancuando la superficie siempre pregunta, como al enviar feedback del producto, reclamar una bandeja de entrada de correo, hacer una llamada telefónica o importar cookies de Chrome), o una solicitud de permiso de herramienta local respondida en la propia computadora de la persona (local_tool_permission). Las respuestas "Siempre" y "Nunca" se registran comoallowedydenied, igual que una respuesta puntual.hookes el rechazo de un hook previo a la herramienta.automatices una llamada sobre la que no se pronunció ningún control, de modo que cualquier otra llamada integrada que se haya resuelto lleva al menos una decisión. Hay tres tipos de llamada que no llevan ninguna: una llamada que la propia herramienta rechazó antes de que se ejecutara ningún control (sutool_resultindicadenied); una tarjeta que la persona responde después de que terminó la interacción (una solicitud de relleno de credenciales, de secreto o de tarjeta virtual), porque la respuesta llega en una interacción posterior; y una llamada cancelada antes de que se pronunciara ningún control, ya que una llamadacancelledsolo lleva las autorizaciones y retenciones registradas antes de interrumpirse. Una solicitud de tarjeta virtual también termina la interacción desde dentro de su propia llamada, por lo que sutool_resultindicacancelled.
Una llamada que Auto-review rechazó y que luego respondió una persona lleva ambas filas, policy denied y después human, en el orden de event.sequence. No hay atributo de aprobador: las tarjetas de un Bot solo las responde su propietario, que es el cursor.user.id del registro.
cursor.grok_bot.file_transfer
INFO (success), WARN (denied), ERROR (error), cuerpo grok_bot_file_transfer. Familia grok_bot_agent_actions. Un movimiento de archivo que un Bot intentó entre su computadora y otro extremo: la máquina del usuario, una cuenta conectada de Google Drive, OneDrive o Gmail, o la lectura de un archivo de la máquina del usuario directamente en el contexto del Bot. Solo metadatos: la dirección, el extremo remoto, cuántos bytes se movieron y cómo terminó. La ruta, el nombre del archivo y el contenido nunca se exportan. La lectura de un archivo en la propia computadora del Bot es una fila tool_result, no este evento. cursor.grok_bot.tool_call.id vincula la fila con el tool_result de la llamada y, si el movimiento se rechazó, con su tool_decision.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.grok_bot.file.direction | cadena | Siempre | Desde el punto de vista de la computadora del Bot: download (los bytes llegaron a ella) |
cursor.grok_bot.file.target | cadena | Siempre | user_machine (la computadora del usuario) |
cursor.grok_bot.file.outcome | cadena | Siempre | success |
cursor.grok_bot.file.bytes | int | Opcional | Bytes movidos; presente cuando el movimiento se completó (un archivo vacío exporta 0). En un read, son los bytes entregados al Bot, por lo que una lectura por rangos cuenta su salida, no el tamaño del archivo |
cursor.grok_bot.file.error_category | cadena | Opcional | Motivo codificado cuando outcome es error: source_missing, too_large, read_failed, write_failed, invalid_file, un resultado del conector como needs_auth o not_found, un errno como ECONNRESET o el nombre de una clase de error. Un único token, nunca un mensaje (abierto) |
cursor.grok_bot.file.machine_id | cadena | Opcional | La máquina del usuario en el extremo remoto cuando target es user_machine: el id opaco que figura en la lista de máquinas del Bot (abierto). Solo se identifica una máquina registrada al inicio de la interacción |
cursor.grok_bot.message_delivery
INFO (sent / held), ERROR (failed), cuerpo grok_bot_message_delivery. Familia grok_bot_agent_actions. Un mensaje saliente de un Bot: a su usuario en el chat de Bot de Grok, a otro de los Bots del usuario, a una conversación de Slack o Discord a través de la cual se contactó al Bot, a destinatarios de correo electrónico externos, a la aplicación Mensajes del Mac del usuario o a una tarjeta de borrador que el propio usuario envía o descarta. La fila indica adónde fue el mensaje y si llegó, pero nunca qué decía ni el nombre de su destinatario: no incluye cuerpo, asunto, destinatario, nombre de adjunto ni longitud. cursor.grok_bot.tool_call.id une la fila con el tool_result de la misma llamada de envío.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.grok_bot.message_delivery.destination_type | cadena | Siempre | user (el propio usuario del Bot, en el chat o en una llamada de voz) |
cursor.grok_bot.message_delivery.destination_id | cadena | Opcional | agent: el id opaco del Bot de destino; ausente cuando el Bot no pudo resolverlo. channel: los primeros 32 caracteres hexadecimales del SHA-256 de <platform>:<chat>[:<thread>] (por ejemplo, slack:C0123ABC:1699999999.000100), de modo que todas las filas dirigidas a una misma conversación llevan un único valor que puedes calcular a partir de una dirección que ya tienes, sin que la dirección en sí salga nunca. Ausente para user, draft, email y apple_messages, por lo que nunca se exporta una dirección de correo electrónico, un número de teléfono ni un id de chat, ni con hash ni sin él (abierto) |
cursor.grok_bot.message_delivery.result | cadena | Siempre | sent |
cursor.grok_bot.message_delivery.failure_category | cadena | Opcional | Motivo codificado cuando result no es sent, como awaiting_user, blocked, target_not_found, forbidden, no_inbox, sender_not_owned, not_approved, route_unverified, declined, permission_denied o el nombre de una clase de error (abierto) |
cursor.conversation.message.id | cadena | Opcional | Cuando está presente, el id del mensaje enviado en las filas user, channel y draft, con la estructura que usan los registros de mensajes de la familia (<sessionId>/g<generation>/<entryId>, por ejemplo, g0/t3s1), de modo que la fila de entrega se une con el registro assistant_message de esa familia mediante una sola clave. Nunca aparece en filas agent, email o apple_messages |
cursor.grok_bot.routine_run
INFO (success / cancelled), ERROR (error), cuerpo grok_bot_routine_run. Familia grok_bot_agent_actions. Una ejecución de rutina finalizada por un Bot: qué rutina se disparó, por qué, cómo terminó y cuánto tardó. Cherri Code registra la fila al cerrar la ejecución (procedencia server), así que la ejecución se registra aunque la computadora del Bot de Grok no estuviera observando, y la fila no incluye box.id, event.sequence ni tool_call.id. Siempre incluye cursor.grok_bot.initiated_by=routine y cursor.entrypoint=automation. Nunca incluye la instrucción de la rutina, su nombre ni el texto de la interacción.
cursor.grok_bot.turn.id es la interacción en la que se realizó la ejecución, por lo que las filas tool_result, shell_command y mcp_tool_call propias de la ejecución se unen mediante este campo. Si la ejecución se realizó como subagente de rutina, o falló antes de que se planificara una interacción, no incluye turn.id.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.grok_bot.routine.id | cadena | Siempre | El id estable de la rutina (opaco) |
cursor.grok_bot.routine_run.id | cadena | Siempre | El id de la ejecución, el mismo valor que muestra el historial de ejecuciones de la rutina (opaco) |
cursor.grok_bot.routine_run.trigger | cadena | Siempre | schedule (la disparó una programación cron) |
cursor.grok_bot.routine_run.outcome | cadena | Siempre | success (la interacción se completó o se pausó a la espera del usuario) |
cursor.grok_bot.routine_run.duration_ms | int | Siempre | Tiempo real desde el disparo hasta la resolución |
No se registran las ejecuciones que se pausan a la espera de una aprobación y se resuelven con la interacción reanudada, ni las que fallan antes de que empiece ninguna interacción. La grabación de acciones es una función de equipo, por lo que las ejecuciones de un propietario personal (sin equipo) se omiten, igual que cualquier otra acción del Bot.
cursor.grok_bot.guardrail
INFO (continued), WARN (warned / stopped), cuerpo grok_bot_guardrail. Familia grok_bot_agent_actions. Una medida de protección que interviene en una interacción del Bot: el detector de bucles que se activa ante una salida o llamadas a herramientas repetidas, la defensa contra bots de un sitio que rechaza el navegador del Bot, o Auto-review que detiene una llamada a herramienta para consultar a una persona, junto con la espera posterior. Solo campos codificados; la justificación del clasificador y el texto de la tarjeta nunca se exportan. La decisión en sí (el rechazo de Auto-review, la respuesta de la persona) es una fila tool_decision y nunca se repite aquí; una fila de escalado se vincula con ella mediante cursor.grok_bot.decision.id.
Las filas se emiten con WARN cuando la medida de protección modificó la interacción (un aviso, una detención, una espera que terminó en rechazo o sin respuesta) y con INFO cuando solo observó o la interacción siguió adelante. Una fila por activación: un bloqueo cuenta una vez por episodio, así que una página que sigue en el mismo bloqueo tras varias recargas genera una sola fila.
Un escalado genera dos filas por tarjeta, en el orden en que ocurrieron. La fila tool_escalation es la solicitud: se mostró una tarjeta porque una llamada en revisión no podía ejecutarse sin la intervención de una persona. La fila pause es el final de la espera: la persona permitió (resumed) o rechazó (denied) la acción, o nadie respondió antes de que la tarjeta caducara o se retirara (abandoned). Si la espera terminó porque una persona detuvo o redirigió la interacción en lugar de responder, la segunda fila es interrupted. Ambas filas incluyen el cursor.tool.name de la herramienta escalada, el cursor.grok_bot.tool_call.id de la llamada y el id de la tarjeta como cursor.grok_bot.decision.id, el mismo valor que incluye la fila tool_decision human de esa llamada, de modo que la solicitud, la espera y la respuesta se vinculan mediante una sola clave.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.grok_bot.guardrail.kind | cadena | Siempre | loop_detected |
cursor.grok_bot.guardrail.detector | cadena | Siempre | Lo que se activó, como un único token en snake_case: un tipo de bucle (single_message_single_line, multi_message, multi_message_outbound_flood, ...), una familia de bloqueo de bots (cloudflare_challenge, recaptcha, datadome, akamai, ...) o, en los tipos de escalado, la superficie de Auto-review que realizó la consulta (host_shell, box_shell, mcp, computer, automation_write, cloud_agent, subagent, feedback, bot_share) (abierto) |
cursor.grok_bot.guardrail.action | cadena | Siempre | warned (se advirtió al Bot y siguió adelante) |
cursor.grok_bot.guardrail.source | cadena | Siempre | runtime (un detector: loop_detected, bot_blocked) |
cursor.grok_bot.guardrail.count | int | Opcional | El recuento que activó el detector: las repeticiones que detectó una fila loop_detected. Ausente cuando el detector no cuenta nada |
cursor.grok_bot.guardrail.target_host | cadena | Opcional | Solo bot_blocked: el host que rechazó al Bot, en minúsculas y sin www., puerto, ruta, consulta ni userinfo (abierto) |
cursor.tool.name | cadena | Opcional | Solo tipos de escalado: el id de la herramienta integrada de la llamada escalada, el mismo valor que incluyen sus filas tool_decision y tool_result |
cursor.grok_bot.guardrail.resolution | cadena | Opcional | Solo pause e interrupted: resumed (la persona permitió la acción) |
cursor.grok_bot.guardrail.duration_ms | int | Opcional | Solo pause e interrupted: la espera, desde la creación de la tarjeta hasta la respuesta o su retirada. Nunca es negativa |
cursor.grok_bot.decision.id | cadena | Opcional | Solo tipos de escalado: el id de la tarjeta, que coincide con el decision.id de la fila tool_decision human con la que se resuelve la misma llamada (abierto) |
cursor.grok_bot.tool_call.id está presente en los tipos de escalado y ausente en las detecciones, que no se atribuyen a una única llamada a herramienta. Si Auto-review rechaza una llamada sin nadie a quien consultar, no se genera ninguna tarjeta y la llamada solo incluye su tool_decision.
cursor.grok_bot.delegation
INFO (dispatched, completed con success o stopped), ERROR (completed con error), cuerpo grok_bot_delegation. Familia grok_bot_agent_actions. Trabajo que un Bot delegó a otro agente y el resultado que devuelve: un subagente en segundo plano que despachó, o un agente en la nube de Cherri Code que lanzó o al que respondió. Solo IDs y resultado; nunca la instrucción, el texto del resultado ni las acciones propias del delegado. Las llamadas a herramientas de un subagente se registran en sus propias filas grok_bot.* con initiated_by=subagent; la ejecución de un agente en la nube pertenece a la familia cloud_agents.
Cada delegación genera dos registros que comparten target_id: dispatched cuando se entregó el trabajo y completed cuando el resultado volvió al Bot. Los registros completed usan como turn.id la interacción que recibió el resultado, no la que lo despachó. cursor.grok_bot.tool_call.id es la llamada que despachó el trabajo (o la llamada de detención en un registro subagent_stop); aparece en el registro dispatched y en el registro completed de un subagente, pero no en la finalización de un agente en la nube.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.grok_bot.delegation.direction | cadena | Siempre | dispatched |
cursor.grok_bot.delegation.kind | cadena | Siempre | cloud_agent_launch |
cursor.grok_bot.delegation.target | cadena | Siempre | cloud_agent |
cursor.grok_bot.delegation.target_id | cadena | Siempre | El ID del agente en la nube (bc-..., el mismo valor que la familia cloud_agents exporta como cursor.conversation.id) o el ID de conversación del subagente (sand-subagent-...). Opaco |
cursor.grok_bot.delegation.outcome | cadena | Solo completed | success |
cursor.grok_bot.delegation.duration_ms | int | Opcional | Tiempo real transcurrido desde el despacho hasta el resultado en registros completed. Ausente cuando el delegado se ejecutó fuera de la interacción receptora y en todos los registros dispatched |
Límites conocidos:
- No se registran: una orientación inyectada en la interacción en curso de un agente en la nube (sin nueva ejecución), un lanzamiento o respuesta que Cherri Code rechazó, la cancelación de un agente en la nube, una ejecución iniciada por otra persona que el Bot solo observa ni el subagente de una rutina que reactiva a su padre.
- Un subagente detenido aún puede entregar después una finalización
error, por lo que un mismotarget_idpuede tener tanto un registrostoppedcomo unoerror. - El registro
completedde un agente en la nube es de mejor esfuerzo: cuando el Bot vuelve a observar un agente que lanzó en una interacción anterior, la finalización puede llevar el tipocloud_agent_launch, y un lanzamiento que se vuelve a observar a mitad de la ejecución puede dejar sudispatchedsin uncompleted. Empareja ambos registros portarget_idy ten en cuenta que puede faltar la finalización. - La entrega es de tipo «al menos una vez», como en todas las filas
grok_bot.*: un lanzamiento, una respuesta o una finalización que se reintenta tras un fallo puede registrarse dos veces para un mismotarget_id. Deduplica primero porcursor.event.id.
Contenido de las conversaciones
Familia conversation_content. Los eventos conversation.* son los únicos registros cuyo cuerpo es un payload (texto del mensaje o uno de los lados de una llamada a una herramienta MCP) en lugar de un nombre de evento constante. Enruta según el nombre del evento de registro, igual que con cualquier otra familia. cursor.conversation.user_message es una instrucción, cursor.conversation.assistant_message es una respuesta y cursor.conversation.tool_io contiene los argumentos o el resultado de una llamada a una herramienta MCP; no analices el cuerpo para distinguirlos.
Cuerpo. Texto depurado. Los mensajes tienen un límite de 32 KiB y cada lado de una llamada a herramienta, de 8 KiB. cursor.conversation.content_truncated se establece siempre que el cuerpo exportado es un prefijo del texto depurado, ya sea porque el origen superó el límite o porque la censura hizo que lo superara, y en tool_io también cuando la depuración dejó imposible de analizar un cuerpo que no superaba el límite.
Identidad. Los registros incluyen los atributos de registro comunes. cursor.conversation.id los une con los registros api.request, skill.activated, hook.execution_complete, cloud_agent.* y grok_bot.* de la conversación. Los únicos identificadores de usuario son los atributos de recurso opcionales cursor.user.*; los atributos de registro no incluyen ninguno. No dependas de cursor.request.id, de cursor.usage_event.id ni, en los registros de mensajes, de cursor.grok_bot.turn.id; tool_io incluye turn.id como atributo compartido grok_bot.*.
Superficies. Solo agentes en la nube y Bot de Grok. Las conversaciones de agentes en la nube llegan con cursor.surface=cloud_agent en el recurso. Las conversaciones del Bot de Grok llegan con cursor.surface=grok_bot, junto con los registros de acciones grok_bot.* del Bot cuando la grabación de acciones está activada. tool_io es exclusivo del Bot de Grok. Las conversaciones del IDE, la CLI y la aplicación de escritorio aún no forman parte de esta familia. Filtra o enruta según cursor.surface.
Toggles. Cada evento se envía solo si están activados la activación del equipo y su toggle en el destino: user_message requiere Prompts, assistant_message requiere Responses y tool_io requiere Tool I/O. La página de configuración describe los toggles.
Los tres eventos son de nivel INFO e incluyen estos atributos:
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.conversation.provenance | cadena | Siempre | server (observado por Cherri Code). client está reservado; acéptalo. |
cursor.conversation.message.id | cadena | Siempre | ID del mensaje dentro de la conversación |
cursor.conversation.turn.id | cadena | Opcional | ID de la interacción dentro de la conversación. Distinto de cursor.grok_bot.turn.id en los registros de mensajes; igual a él en tool_io. |
cursor.conversation.content_truncated | bool | Siempre | Verdadero cuando el cuerpo es un prefijo del texto depurado o, en tool_io, cuando la depuración lo dejó imposible de analizar |
cursor.conversation.user_message
INFO. Cuerpo: el texto depurado de una instrucción del usuario.
cursor.conversation.assistant_message
INFO. Cuerpo: el texto final depurado del assistant para la respuesta.
cursor.conversation.tool_io
INFO. Cuerpo: el JSON compacto depurado de un lado de una llamada a herramienta MCP, de 8 KiB como máximo. Se generan dos registros por cada llamada a herramienta MCP del Bot de Grok ejecutada mediante el transporte http: el registro arguments contiene el objeto JSON que envió el Bot, y el registro result contiene la respuesta del conector. Si la llamada tiene éxito, se trata del texto y el contenido estructurado de la herramienta; si falla, del mensaje de error, rechazo o denegación. Los bytes de imagen se reemplazan por su tipo MIME. Las llamadas stdio en la computadora del Bot de Grok solo informan metadatos y no generan ningún registro tool_io. Requiere activar el toggle Tool I/O del destino, además de la activación del equipo.
Ambos registros incluyen los atributos de correlación grok_bot.* compartidos (provenance, turn.id, tool_call.id, event.sequence), por lo que cursor.grok_bot.tool_call.id está presente y los une con las filas cursor.grok_bot.mcp_tool_call y cursor.grok_bot.tool_decision de la llamada. cursor.tool.name, cursor.tool.status y cursor.mcp.server.name repiten los valores de la fila de metadatos para que cada registro pueda leerse de forma independiente.
| Atributo | Tipo | Presencia | Valores / notas |
|---|---|---|---|
cursor.conversation.tool_io.direction | cadena | Siempre | arguments |
cursor.tool.name | cadena | Siempre | Nombre de herramienta MCP definido por el cliente (abierto) |
cursor.tool.status | cadena | Siempre | success |
cursor.mcp.server.name | cadena | Opcional | Nombre para mostrar del servidor definido por el cliente (abierto) |
cursor.grok_bot.provenance | cadena | Siempre | server |
cursor.grok_bot.tool_call.id | cadena | Siempre | Clave para unir con las filas mcp_tool_call y tool_decision de la llamada |
cursor.grok_bot.turn.id | cadena | Opcional | Mismo valor que cursor.conversation.turn.id en este registro |
cursor.grok_bot.event.sequence | int | Opcional | Número de secuencia de la llamada dentro de su interacción; no aparece en versiones anteriores del Bot de Grok |
Cuando cursor.conversation.content_truncated es true, el cuerpo no se puede analizar como JSON: o bien es un prefijo del texto depurado, o bien la depuración lo dejó imposible de analizar y Cherri Code lo exportó marcado en lugar de exportar un cuerpo menos depurado. Comprueba la marca antes de analizarlo. Ambos lados pasan por el mismo depurador que el texto de los mensajes, además de una pasada basada en claves que oculta el valor de cualquier miembro o asignación JSON cuya clave haga referencia a una credencial (password, passphrase, token, api_key, secret, secret_key, access_key, authorization, cookie, private_key, credentials y compuestos como client_secret o x-api-key), sea cual sea el aspecto del valor. Los pares de encabezados también cuentan: en [{"name":"Authorization","value":"Basic ..."}], se oculta el elemento hermano value de un miembro name, key o header que figure en la lista, así como el segundo elemento de un array de dos elementos cuyo primer elemento figure en la lista (["password","..."]). Los campos de tarjeta almacenados como números ("cvc": 123) se convierten en [REDACTED: Card], y los escapes ASCII \uXXXX se decodifican antes de la depuración. Un bloque de clave privada repartido entre los elementos de un mismo array (líneas de un archivo, bloques de texto de un resultado) se oculta desde su línea BEGIN hasta su línea END; si está repartido entre campos no relacionados, no. La pasada basada en claves llega hasta un nivel dentro del JSON anidado en un valor de cadena; los documentos recodificados a mayor profundidad solo se depuran según la forma del valor. Consulta E/S de herramientas MCP para saber qué no detecta el depurador.
Identidad y uniones
| Objetivo | Campo | Cobertura |
|---|---|---|
| Deduplicar registros | cursor.event.id | Todos los registros |
| Agrupar por sesión o Bot | cursor.conversation.id | Registros cuando está presente. Para el Bot de Grok, este valor es el identificador del Bot (su id de conversación). |
| Agrupar la actividad del Bot de Grok por interacción | cursor.grok_bot.turn.id | Registros grok_bot.*, registros skill.activated del Bot, registros conversation.tool_io y registros api.request / api.error con cursor.surface=grok_bot, cuando está presente. No dependas de él en conversation.user_message ni en conversation.assistant_message. |
| Ordenar las acciones de una interacción del Bot | cursor.grok_bot.event.sequence | Registros grok_bot.* y conversation.tool_io de las versiones actuales del Bot de Grok. Ordena por este campo; no esperes que sea consecutivo |
| Agrupar las filas de una llamada a herramienta del Bot | cursor.grok_bot.tool_call.id | tool_result, tool_decision, mcp_tool_call, computer_use_session, file_transfer, message_delivery, delegation, escalados de medidas de protección, skill.activated del Bot y, con la E/S de herramientas activada, ambos lados de conversation.tool_io |
| Unir una solicitud de aprobación con su respuesta | cursor.grok_bot.decision.id | tool_decision y las filas guardrail tool_escalation / pause / interrupted de la misma llamada |
| Agregar las acciones de un subagente a su agente principal | cursor.grok_bot.root_turn.id | Registros grok_bot.* con procedencia client; cursor.grok_bot.subagent.id identifica al subagente |
| Adjuntar instrucciones y respuestas a una sesión | cursor.conversation.id | Registros conversation.* (agentes en la nube y Bot de Grok), solo con la activación de conversation_content |
| Agrupar instrucciones y respuestas por interacción | cursor.conversation.turn.id | Registros conversation.* cuando está presente |
| Agrupar por usuario | Atributo de recurso cursor.user.account_id | Registros y métricas cuando está presente. Se une con id en la respuesta de GET /teams/members de la Admin API. cursor.user.email, en el mismo recurso, identifica directamente al miembro. |
| Conciliar la facturación | cursor.usage_event.id | Registros api.request, api.error y api.correction |
Los registros exportados no incluyen los campos trace_id ni span_id de OpenTelemetry. Usa cursor.conversation.id y cursor.grok_bot.turn.id para correlacionar el Bot y la interacción. Las métricas no incluyen ids de correlación; usa los registros api.request para obtener los totales de tokens por conversación.
Consulta Unir sesiones en la página de configuración para ver ejemplos prácticos.
Semántica de entrega
- Registros se entregan al menos una vez. Los fallos transitorios se resuelven automáticamente durante unos 7 días; se deduplican por
event.id. Los rechazos definitivos (4xx persistentes, payloads incorrectos) no se reenvían. - Métricas se entregan como máximo una vez. Las solicitudes de métricas fallidas no se reintentan ni se reenvían.
- Sin garantía de orden. Las correcciones pueden llegar después de las solicitudes que corrigen; ordene por marca de tiempo del registro.
- Se respeta el éxito parcial de OTLP. Los elementos rechazados no se reenvían.
- No hay carga retroactiva anterior a la activación del destino. La retención en el origen antes de la exportación también es de unos 7 días (independiente de la ventana de reintentos de entrega).