Skip to main content

Command Palette

Search for a command to run...

团队与企业版

OpenTelemetry 导出协议参考

OpenTelemetry 导出的配套文档。完整传输协议:涵盖每项指标、日志事件、属性、枚举值和存在性规则。

传输协议仅以新增方式演进。可兼容未知的属性、事件和枚举值。如有重命名或移除,将明确通知。

传输协议和范围

  • OTLP/HTTP 二进制 Protobuf (application/x-protobuf) ,POST
  • 端点:<base>/v1/metrics 和 <base>/v1/logs
  • 范围:cursor.telemetry / 0.1.0

资源属性

每个 (团队、用户、来源、入口点、来源版本) 组合对应一个资源。

属性类型是否存在值 / 说明
service.namestring始终固定为 cursor
service.versionstring可选来源为桌面端/命令行界面时的客户端版本;cloud_agent / bugbot 通常不包含此项
cursor.team.idint始终你的团队 ID
cursor.surfacestring始终unspecified
cursor.entrypointstring始终unspecified
cursor.user.idint可选如果来源提供用户 ID,则为不透明的团队范围用户 ID。在 cloud_agent.* 日志中,此项表示该 run 的所有者。使用团队 API 密钥或服务账户发起的 run 没有所有者,也不包含任何用户属性。请勿要求此项必须存在。
cursor.user.account_idstring可选成员的 user_... ID,即 Admin API 中 GET /teams/members 以 id 返回的值。一条记录要么同时包含此项和 cursor.user.id,要么两者都不包含。
cursor.user.emailstring可选成员的电子邮件。当 cursor.user.id 存在且该成员有电子邮件时包含此项。启用隐私模式 (旧版) 的团队不会导出此项。请勿要求此项必须存在。

系列

系列 id 与团队设置中的开关一一对应。新建导出目标时,除 conversation_content 外,所有系列均默认开启;conversation_content 默认关闭,需团队启用,并在导出目标中为每种内容类型分别打开开关后才会生效 (参见 对话内容)。

系列 id信号默认值涵盖内容
model_usage指标 + 日志开启token.usage、cost.usage;api.request、api.error、api.correction
tool_calls指标开启tool.calls
skills_hooks_plugins日志开启skill.activated (所有来源,包括 Cherri Bot) 、hook.execution_complete、plugin.installed
cloud_agents日志开启cloud_agent.pull_request、cloud_agent.setup、cloud_agent.artifact、cloud_agent.mcp_auth_error
grok_bot_agent_actions日志开启 (需启用操作录制)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日志关闭 (需团队启用 + 在导出目标中按内容类型分别打开开关)conversation.user_message、conversation.assistant_message、conversation.tool_io

grok_bot_agent_actions 系列,以及由 Bot 发出的 skill.activated,均包含操作录制数据。只有在团队管理员于仪表盘的 Cherri Bot 页面开启 操作录制 后,这些数据才会开始导出。隐私模式 (旧版) 会强制关闭录制。

指标

所有指标均为单调递增的 delta 总和。指标数据点不包含关联 ID;关联 ID 仅存在于日志中。

应将指标视为每个序列的 delta 总和。一个序列由资源、指标名称和完全一致的数据点属性集定义。同一序列的时间窗口可能会跨多次 flush 重叠。

cursor.token.usage

单位:{token}。系列:model_usage。

属性类型是否存在值 / 说明
cursor.token.typestring始终存在inputoutputcache_readcache_creation
cursor.model.namestring可选路由意图归并后的请求公有模型 (auto: 映射为 Auto,thinking: 映射为 Thinking,pro: 映射为 Pro,premium: 映射为 Premium;否则原样保留) 。Bugbot 或源数据中没有模型时不包含此字段。
cursor.api.statusstring可选successerroredaborted
cursor.api.billablebool可选

cursor.tool.calls

单位 {call}。系列 tool_calls。每次成功完成工具调用时取值为 1。

属性类型是否存在值 / 说明
cursor.tool.kindstring始终builtin
cursor.tool.namestring始终内置 ID (例如 read、shell) 或客户 MCP 工具名称 (开放)
cursor.tool.statusstring始终success
cursor.mcp.server.namestring仅 MCP客户定义的服务器显示名称 (开放)

cursor.cost.usage

单位:USD (double) 。系列:model_usage。事件发生时的尽力估算费用,并非发票。可能会受 cursor.api.correction 修正。对于 BYOK (自带密钥),这仅为 Cherri Code Token 费率,不含 provider 支出。

属性类型是否存在值 / 说明
cursor.model.namestring可选与 token.usage 相同的折叠规则

日志事件

严重级别:INFO=9、WARN=13、ERROR=17。

通用日志属性

属性类型是否存在说明
cursor.event.idstring始终**去重键。**不透明。在重试、worker 重新启动以及 Cherri Code Kafka 重放期间保持确定性。前缀 customer-telemetry:v1:... 是稳定的;请将整个字符串视为不透明值。
cursor.source_event.idstring始终不透明的内部源标识。多个信号可能共用一个值。
cursor.request.idstring可选适用于 api.request、api.error、skill.activated (Bot 激活除外) 、hook.execution_complete、plugin.installed。绝不适用于 api.correction、cloud_agent.* 或 grok_bot.*。请勿在 conversation.* 上依赖该属性。
cursor.conversation.idstring可选IDE/命令行界面:composer UUID。云端代理:客户可见的 bc-... 智能体 ID。Cherri Bot (grok_bot.*,以及任何带 cursor.surface=grok_bot 的日志) :该 Bot 的标识符,此值即为该 Bot 的对话 ID。用于跨 api、skill/hook、cloud_agent、grok_bot 和 conversation 日志重建会话的关联键。
cursor.usage_event.idstring可选仅适用于 api.request / api.error / api.correction。用于关联 Cherri Code 用量和计费导出的请求粒度键。

cursor.api.request

INFO,响应体为 api_request。系列为 model_usage。

属性类型是否存在说明
cursor.api.request.input_tokensint始终
cursor.api.request.output_tokensint始终
cursor.api.request.cache_read_tokensint始终
cursor.api.request.cache_creation_tokensint始终
cursor.model.namestring可选
cursor.api.billablebool可选
cursor.grok_bot.turn.idstring仅限 grok_bot 来源值与 cursor.request.id 相同,表示发起此次模型调用的 Bot 轮次。可用它关联该轮次的 grok_bot.* 操作记录。在轮次之外发起的 Cherri Bot 模型调用 (如头像生成) 也会在此处带有 id,但该 id 无法关联到任何操作记录。其他来源中不会出现

cursor.api.error

ERROR,响应体为 api_error。系列为 model_usage。无原始错误消息。低基数的 kind 和 status 属性已规划;暂勿依赖这些属性。

属性类型是否存在说明
cursor.model.namestring可选
cursor.api.billablebool可选
cursor.grok_bot.turn.idstring仅限 grok_bot 来源与 cursor.request.id 的值相同;参见 api.request

cursor.api.correction

WARN,响应体为 api_correction_<kind>。系列为 model_usage。计费结算:该用量事件被追溯为不计费。按 cursor.usage_event.id 关联,并将整个群组排除在计费之外。特意不包含 cursor.model.name。

属性类型是否存在值
cursor.api.correction.kindstring始终not_billed_errorednot_billed_aborted_before_timeout

cursor.skill.activated

INFO,响应体为 skill_activated。系列为 skills_hooks_plugins。

属性类型是否存在值 / 说明
cursor.skill.namestring始终客户自定义 (开放)
cursor.skill.triggerstring始终agent_read
cursor.skill.sourcestring始终unspecified
cursor.plugin.namestring可选当技能来自插件时。目前 Cherri Bot 激活时不会导出此属性

Bot 读取 SKILL.md 时也会导出同一事件,并带有 cursor.surface=grok_bot;该记录还会携带共享的 grok_bot.* 属性,以便与该轮次中的其他操作关联。cursor.skill.name 为技能的文件夹 slug;cursor.skill.trigger 为 agent_read 或 skill_name_in_prompt (通过 / 或 @ 调用的技能暂不记录) ;cursor.skill.source 的取值规则为:Cherri Code 托管的技能为 builtin,已安装的插件技能为 plugin,Bot 自有技能为 user,其余情况的分类方式与其他来源一致。cursor.grok_bot.tool_call.id 是激活该技能的 Read 调用的 id,可用于关联对应的 tool_result 行。Bot 激活事件携带 cursor.conversation.id,但从不携带 cursor.request.id,且仅在开启操作录制时才会上报。

cursor.hook.execution_complete

INFO (failed / timeout 时为 ERROR) ,响应体为 hook_execution_complete。系列:skills_hooks_plugins。

属性类型是否必填值 / 说明
cursor.hook.namestring始终由客户配置 (开放)
cursor.hook.typestring始终pre_tool_use
cursor.hook.outcomestring始终success
cursor.hook.duration_msint始终
cursor.plugin.namestring可选钩子来自插件时

cursor.plugin.installed

INFO,响应体为 plugin_installed。系列为 skills_hooks_plugins。不含 conversation.id (安装不属于对话范围) 。

属性类型是否存在值 / 说明
cursor.plugin.namestring始终打开
cursor.plugin.scopestring始终unspecified

cursor.cloud_agent.pull_request

INFO (opened) / WARN (creation_failed) ,响应体为 cloud_agent_pull_request_<kind>。系列为 cloud_agents。conversation.id = bc-...。

属性类型是否存在值 / 说明
cursor.cloud_agent.pull_request.kindstring始终openedcreation_failed
cursor.cloud_agent.pull_request.numberint仅 opened
cursor.cloud_agent.pull_request.draftbool仅 opened

creation_failed 已启用。生产者逐步推出期间,opened 可能只包含部分字段。

cursor.cloud_agent.setup

INFO (started / completed) / ERROR (failed) ,响应体为 cloud_agent_setup_<kind>。模型系列为 cloud_agents。conversation.id = bc-...。

属性类型是否存在值 / 说明
cursor.cloud_agent.setup.kindstring始终存在started
cursor.cloud_agent.setup.duration_msint终止类型中存在时completed / failed
cursor.cloud_agent.setup.reasonstring仅 failed开放词汇 (如 install_command_failed)

cursor.cloud_agent.artifact

INFO,响应体 cloud_agent_artifact_created。模型系列 cloud_agents。conversation.id = bc-...。

属性类型是否必填值 / 说明
cursor.cloud_agent.artifact.file_namestring始终Open
cursor.cloud_agent.artifact.content_typestring可选MIME

cursor.cloud_agent.mcp_auth_error

ERROR,响应体为 cloud_agent_mcp_auth_error。系列为 cloud_agents。conversation.id = bc-...。

你连接的 MCP 服务器拒绝了本次运行的凭据。运行仍会继续,但该服务器的工具调用将失败。由于只有你能修复此集成,因此记为 ERROR;请针对该 ERROR 设置告警,以便及时发现自动化和云端代理在无提示的情况下失去 MCP 服务器。

属性类型是否存在值 / 说明
cursor.mcp.server.namestring始终用户定义的服务器显示名称 (开放) ,例如 github。取值范围与 cursor.tool.calls 数据点属性相同。

共享的 grok_bot.* 属性

每条 grok_bot.* 记录都通过 cursor.conversation.id 标识 Bot 本身,其值即为 Bot 的对话 ID;当有子智能体执行操作时,cursor.grok_bot.subagent.id 会指明该子智能体。grok_bot.* 事件承载来自操作录制的 Bot 操作,所属系列为 grok_bot_agent_actions。每条记录都带有 cursor.surface=grok_bot。

每个事件都只是关于操作的元数据,绝不包含操作内容。工具参数和结果、文件路径和文件名、消息正文和收件人、凭据、银行卡信息,以及 Auto-review 模式分类器的推理过程均不会在这些事件中导出;MCP 参数和结果仅通过需主动启用的 cursor.conversation.tool_io 记录发送。例外情况会在各事件中单独说明:shell 命令文本 (经机密信息清理,上限 8 KiB) 、规范化后的浏览器 URL 和页面标题,以及纯主机名。所有自由文本字段在到达你的收集器之前,都会清除其中疑似凭据的内容、支付卡号和 OAuth 令牌。

每个事件还携带以下属性:

属性类型是否存在取值 / 说明
cursor.grok_bot.provenancestring始终client (由 Bot 的计算机上报;尽力而为)
cursor.grok_bot.turn.idstring可选执行该操作的 Bot 轮次 (或子智能体请求) 的请求 ID。该轮次的 api.request 和 api.error 记录中的 cursor.grok_bot.turn.id 也是同一个值
cursor.grok_bot.root_turn.idstring可选该操作所服务的面向用户轮次的请求 ID。在子智能体之外与 turn.id 相同;对于子智能体的操作,则为派生该子智能体的轮次。server 来源时不存在
cursor.grok_bot.subagent.idstring可选执行该操作的子智能体的对话 ID。由顶层 Bot 执行时不存在,server 来源时也不存在
cursor.grok_bot.box.idstring可选Cherri Bot 电脑 ID。server 来源时不存在
cursor.grok_bot.event.sequenceint可选按轮次单调递增的序号,以 turn.id 为键。请按此序号 (而非客户端时钟) 对同一轮次的操作排序。序号不连续:等待批准后恢复的轮次会从其最后一个序号之后继续编号,重试则从其自身的号段继续,因此重试的行仍会排在首次运行之后。较早的 Cherri Bot 版本中不存在
cursor.grok_bot.tool_call.idstring可选该操作的工具调用 ID。同一工具调用产生的所有行 (其 tool_result、tool_decision 行,以及 mcp_tool_call 等特定于工具的行) 都携带相同的值,因此可据此关联。当操作不归属于任何工具调用时 (如浏览器导航、shell 命令) 不存在
cursor.grok_bot.initiated_bystring可选该操作所属轮次的发起方:user (输入的消息或语音通话)

cursor.grok_bot.mcp_tool_call

INFO (failure 状态时为 ERROR) ,响应体 grok_bot_mcp_tool_call。系列为 grok_bot_agent_actions。表示 Bot 发起的一次 MCP 工具调用。此行绝不会包含工具参数或结果。对于 http 调用,已启用工具 I/O 的团队会以两条 cursor.conversation.tool_io 记录的形式收到这些内容,并通过 cursor.grok_bot.tool_call.id 与此行关联。

属性类型是否存在值 / 说明
cursor.tool.namestring始终客户定义的 MCP 工具名称 (开放取值)
cursor.tool.statusstring始终success
cursor.grok_bot.mcp.transportstring始终http (服务器侧观测)
cursor.grok_bot.mcp.duration_msint始终
cursor.mcp.server.namestring可选客户定义的服务器显示名称 (开放取值)

每次 MCP 调用都会包含 cursor.grok_bot.tool_call.id。连接器调用 (包括 Bot 计算机上的浏览器工具) 均记录在此事件中,而不会记录为 tool_result,因此每次工具调用只会记录一次。

cursor.grok_bot.shell_command

INFO(被阻止时为 WARN),响应体 grok_bot_shell_command。系列 grok_bot_agent_actions。Bot 已运行或被阻止运行的 shell 命令。该记录在命令结束时写入,并以命令发出时间作为时间戳,因此长时间运行的命令,其记录会在时间戳之后很久才到达。

属性类型是否存在值 / 说明
cursor.grok_bot.shell.commandstring始终经机密信息清理的命令文本,最多 8 KiB(open)
cursor.grok_bot.shell.command_truncatedbool始终源命令超出上限时为 True
cursor.grok_bot.shell.kindstring始终foreground
cursor.grok_bot.shell.targetstring始终box(Cherri Bot 电脑)
cursor.grok_bot.shell.allowedbool始终shell 策略判定结果
cursor.grok_bot.shell.blocked_reasonstring可选被阻止时的策略原因;经机密信息清理(open)
cursor.grok_bot.shell.classification_reasonsstring[]可选最多 10 条策略分类原因;经机密信息清理(open)
cursor.grok_bot.shell.machine_idstring可选仅适用于 user_machine 目标:运行该命令的已注册用户机器(open)。仅标明在轮次开始时已注册的机器
cursor.grok_bot.shell.exit_codeint可选进程退出码;被信号终止或中止时为 -1。background 命令以及命令未产生退出结果(连接断开、运行前被拒绝)时不包含此字段
cursor.grok_bot.shell.duration_msint可选从发出到结束的实际耗时,包括连接到计算机的时间以及进程启动前的所有等待时间。每条 foreground 记录均包含,background 记录不包含

cursor.grok_bot.browser_navigation

INFO,响应体 grok_bot_browser_navigation。系列 grok_bot_agent_actions。conversation.id 为该 Bot 的标识符。

属性类型是否存在值 / 说明
cursor.grok_bot.browser.urlstring始终规范化后的 scheme://host/path (open) 。非层级式 scheme 从不导出
cursor.grok_bot.browser.page_titlestring可选经机密信息清理 (open)

cursor.grok_bot.computer_use_session

INFO,响应体 grok_bot_computer_use_session。系列 grok_bot_agent_actions。单个计算机使用子智能体会话的摘要:仅包含次数和实际耗时,不含坐标、输入文本或屏幕截图。cursor.grok_bot.turn.id 为调用该子智能体的父轮次,cursor.grok_bot.subagent.id 为子智能体本身,cursor.grok_bot.tool_call.id 为此次调用,cursor.grok_bot.initiated_by 始终为 subagent。

属性类型是否存在值 / 说明
cursor.grok_bot.computer_use.action_countint始终
cursor.grok_bot.computer_use.duration_msint始终
cursor.grok_bot.computer_use.screenshot_countint始终
cursor.grok_bot.computer_use.action_counts.<kind>int可选计数大于 0 的每种操作类型各对应一个属性。<kind> 为 click、drag、key、mouse_move、screenshot、scroll、type、wait 之一

cursor.grok_bot.tool_result

INFO (success / cancelled) 、WARN (denied) 、ERROR (error) ,body 为 grok_bot_tool_result。系列:grok_bot_agent_actions。表示 Bot 发起的一次已结束的内置工具调用 (read、web_search、send_to_user、task、shell 等) 。每个内置工具都会生成这一行,因此 Bot 可调用的任何工具都不会漏记。连接器 (MCP) 调用记录为 mcp_tool_call 行,不会出现在此处。

cursor.grok_bot.tool_call.id 用于将该行与同一调用的 tool_decision 行关联。如果调用在模型流出现瞬时故障后重新运行,同一 id 可能对应两条 tool_result 行,因此统计调用次数时请按去重后的 id 计数。

属性类型是否存在取值 / 说明
cursor.tool.namestring始终内置工具 id,小写;取值空间与 cursor.tool.calls 的内置 tool.name 维度相同 (read、shell、web_search 等)
cursor.grok_bot.tool_result.outcomestring始终success (工具已返回,包括以文本形式向模型返回拒绝的工具;操作是否实际发生,以该调用的 tool_decision 行为准)
cursor.grok_bot.tool_result.duration_msint始终
cursor.grok_bot.tool_result.error_categorystring可选outcome 不为 success 时的编码原因:invalid_args、user_rejected、timeout、provider_error、hook_denied,或 TimeoutError 等错误类名 (开放)
cursor.grok_bot.tool_result.target_hoststring可选对于以站点为目标的工具,表示其作用的纯主机名:list_credentials 报告凭据查找所限定的站点,request_virtual_card 报告商户。小写,不含 www.、端口、路径、查询参数或 userinfo。其他所有工具、调用未指定站点或调用从未运行时,该字段不存在 (开放)

请将 outcome 理解为“调用如何返回”,而非“操作是否发生”。对于 shell、浏览器和计算机操作,以及被用户拒绝的本地工具请求,拒绝会报告为 denied,且 error_category 为 user_rejected。邮件、例程写入、连接器文件传输、子智能体启动以及云端代理操作则以文本形式将拒绝返回给模型,因此其 tool_result 显示为 success,拒绝信息由 tool_decision 行记录。

cursor.grok_bot.tool_decision

INFO (allowed / held) ,WARN (denied / timed_out) ,body 为 grok_bot_tool_decision。系列为 grok_bot_agent_actions。记录 Bot 的某次工具调用能否运行的一项决定:由谁做出、通过哪种批准模式、结果是什么。一次调用可能包含多项决定 (例如 Auto-review 模式拒绝自动放行,随后由人员回应卡片) ,每项决定各自对应一条记录。这些记录通过 cursor.grok_bot.tool_call.id 与该调用的 tool_result、mcp_tool_call 或 computer_use_session 行关联。分类器的判断依据、卡片文案和参数均不会出现在此处。

属性类型是否存在取值 / 说明
cursor.grok_bot.decision.idstring始终在做出决定时生成的 id,早于任何人员看到卡片。对于 human 决定,它是人员所回应的卡片或权限请求的 id,也是同一调用的 guardrail 升级行所携带的值 (开放)
cursor.tool.namestring始终内置工具 id,小写;与该调用的 tool_result 取值相同。连接器调用的决定携带 mcp,而其 mcp_tool_call 行携带服务器的工具名称
cursor.grok_bot.decision.sourcestring始终human
cursor.grok_bot.decision.approval_modestring始终auto_allow
cursor.grok_bot.decision.outcomestring始终allowed
cursor.grok_bot.decision.rule_idstring可选做出决定的 Auto-review 模式规则的不透明 id;在分类器将其决定归因于某条规则之前不存在 (开放)

各来源的含义:

  • policy 表示在任何来源上执行的每一次 Auto-review 模式分类,无论结果是 allowed 还是 denied,涵盖 shell、连接器调用、邮件、例程写入,以及云端代理和子智能体的启动。分类器失败或超时记为 policy denied;评审规则未经分类就将调用转交人员处理时,同样如此记录。
  • human 表示 Auto-review 模式卡片的最终结果 (分类器升级时 approval_mode 为 auto_review;来源始终需要询问时为 ask_human,例如产品反馈、认领邮件收件箱、拨打电话或导入 Chrome Cookie) ,或人员在其本人计算机上回应的本地工具权限请求 (local_tool_permission) 。“始终”和“从不”的回答与一次性回答相同,分别记为 allowed 和 denied。
  • hook 表示工具前钩子的拒绝。
  • automatic 表示没有任何关卡介入的调用,因此其余所有已完成的内置调用都至少带有一项决定。有三类调用不带任何决定:在任何关卡运行前就被工具本身拒绝的调用 (其 tool_result 显示为 denied) ;人员在轮次结束后才回应的卡片 (凭据填写请求、机密信息请求或虚拟卡请求) ,因为回应会在后续轮次中才到达;以及在任何关卡介入前就被取消的调用,因为 cancelled 调用只带有被中断前已记录的放行和挂起决定。此外,虚拟卡请求会在其自身调用内部结束轮次,因此其 tool_result 显示为 cancelled。

若调用先被 Auto-review 模式拒绝、随后由人员回应,则会同时带有两行,按 event.sequence 顺序依次为 policy denied 和 human。没有审批人属性:Bot 的卡片只能由其所有者回应,即该记录的 cursor.user.id。

cursor.grok_bot.file_transfer

INFO (success) 、WARN (denied) 、ERROR (error) ,body 为 grok_bot_file_transfer。系列为 grok_bot_agent_actions。表示 Bot 尝试在其计算机与另一端点之间进行的一次文件传输:另一端可以是用户的机器,已连接的 Google Drive、OneDrive 或 Gmail 账户,也可以是将用户机器上的文件直接读入 Bot 的上下文。仅包含元数据:传输方向、对端、传输字节数以及最终结果。路径、文件名和文件内容一律不会导出。读取 Bot 自身计算机上的文件会记录为 tool_result 行,而不是此事件。cursor.grok_bot.tool_call.id 将该行关联到对应调用的 tool_result;若传输被拒绝,还会关联到其 tool_decision。

属性类型是否存在取值 / 说明
cursor.grok_bot.file.directionstring始终以 Bot 的计算机为视角:download (字节写入该计算机)
cursor.grok_bot.file.targetstring始终user_machine (用户的计算机)
cursor.grok_bot.file.outcomestring始终success
cursor.grok_bot.file.bytesint可选传输的字节数;仅在传输完成时存在 (空文件导出 0) 。对于 read,表示交给 Bot 的字节数,因此范围读取统计的是实际输出量,而非文件大小
cursor.grok_bot.file.error_categorystring可选outcome 为 error 时的编码原因:source_missing、too_large、read_failed、write_failed、invalid_file,连接器结果 (如 needs_auth 或 not_found) ,errno (如 ECONNRESET) ,或错误类名。始终为单个标记,绝不会是消息文本 (开放)
cursor.grok_bot.file.machine_idstring可选target 为 user_machine 时对端的用户机器:即 Bot 机器列表中报告的不透明 id (开放) 。仅标识在轮次开始时已注册的机器

cursor.grok_bot.message_delivery

INFO (sent / held) ,ERROR (failed) ,响应体为 grok_bot_message_delivery。系列为 grok_bot_agent_actions。表示 Bot 发出的一条出站消息,目标可以是:Cherri Bot 聊天中的所属用户、该用户的另一个 Bot、触达该 Bot 时所在的 Slack 或 Discord 对话、外部电子邮件收件人、用户 Mac 上的“信息”应用,或由用户自行发送或丢弃的草稿卡片。该行只记录消息发往何处以及是否送达,绝不记录消息内容或收件人姓名:不含正文、主题、收件人、附件名称或长度。cursor.grok_bot.tool_call.id 将该行与同一次发送调用的 tool_result 关联起来。

属性类型是否存在取值 / 说明
cursor.grok_bot.message_delivery.destination_typestring始终user (该 Bot 的所属用户,位于聊天或语音通话中)
cursor.grok_bot.message_delivery.destination_idstring可选agent:目标 Bot 的不透明 id;若该 Bot 无法解析出 id,则不包含此字段。channel:<platform>:<chat>[:<thread>] 的 SHA-256 值的前 32 个十六进制字符 (例如 slack:C0123ABC:1699999999.000100) 。因此,发往同一对话的所有行都带有同一个值,你可以根据自己掌握的地址算出该值,而地址本身绝不会外传。user、draft、email 和 apple_messages 不包含该字段,因此电子邮件地址、电话号码或聊天 id 无论是否经过哈希,都绝不会被导出 (开放)
cursor.grok_bot.message_delivery.resultstring始终sent
cursor.grok_bot.message_delivery.failure_categorystring可选result 不为 sent 时的编码原因,例如 awaiting_user、blocked、target_not_found、forbidden、no_inbox、sender_not_owned、not_approved、route_unverified、declined、permission_denied,或错误类名 (开放)
cursor.conversation.message.idstring可选存在时,表示 user、channel 和 draft 行中已发送消息的 id,格式与该系列消息记录所用的格式一致 (<sessionId>/g<generation>/<entryId>,例如 g0/t3s1) ,因此投递行可通过同一个键与该系列的 assistant_message 记录关联。agent、email 和 apple_messages 行中绝不包含此字段

cursor.grok_bot.routine_run

INFO (success / cancelled) 、ERROR (error) ,响应体为 grok_bot_routine_run。系列为 grok_bot_agent_actions。表示 Bot 完成的一次例程 run:触发了哪个例程、触发原因、结束方式以及耗时。Cherri Code 在关闭该 run 时记录此行 (来源为 server) ,因此无论 Bot 的计算机是否在监听,run 都会被记录,该行也不包含 box.id、event.sequence 或 tool_call.id。该行始终包含 cursor.grok_bot.initiated_by=routine 和 cursor.entrypoint=automation,但绝不包含例程的提示词、名称或该轮次的文本。

cursor.grok_bot.turn.id 表示该 run 执行时所在的轮次,因此该 run 自身的 tool_result、shell_command 和 mcp_tool_call 行可通过它关联。以例程子智能体方式执行的 run,或在规划轮次之前就已失败的 run,不包含 turn.id。

属性类型是否存在取值 / 说明
cursor.grok_bot.routine.idstring始终例程的稳定 ID (不透明)
cursor.grok_bot.routine_run.idstring始终run 的 ID,与例程运行历史中显示的值相同 (不透明)
cursor.grok_bot.routine_run.triggerstring始终schedule (由 cron 计划触发)
cursor.grok_bot.routine_run.outcomestring始终success (轮次已完成或已暂停等待用户操作)
cursor.grok_bot.routine_run.duration_msint始终从触发到结束的实际耗时

因等待批准而暂停、之后由恢复的轮次完成的 run,以及在任何轮次开始前就已失败的 run,均不会被记录。操作录制是团队功能,因此与其他所有 Bot 操作一样,个人 (无团队) 所有者的 run 会被跳过。

cursor.grok_bot.guardrail

INFO (continued) 、WARN (warned / stopped) ,响应体 grok_bot_guardrail。系列 grok_bot_agent_actions。表示护栏在 Bot 轮次中介入:循环检测器因重复输出或重复工具调用而触发、站点的机器人防护拒绝了 Bot 的浏览器,或 Auto-review 模式拦下某个工具调用以请求人工确认,以及随后的等待过程。仅导出编码字段;classifier 的判定理由和卡片文案均不会导出。决策本身 (Auto-review 模式的拒绝、人工的答复) 记录为 tool_decision 行,不会在此重复记录;升级行通过 cursor.grok_bot.decision.id 与其关联。

若护栏改变了轮次 (提示纠偏、停止,或以拒绝或无人答复告终的等待) ,则该行记为 WARN;若护栏仅作观察或轮次照常继续,则记为 INFO。每次触发记录一行:同一拦截墙在一次事件中只计一次,因此页面多次重新加载后仍停留在同一拦截墙上时,只记录一行。

一次升级对应同一张卡片的两行,按发生顺序排列。tool_escalation 行表示请求:评审中的调用须经人工处理才能运行,因此发出了卡片。pause 行表示等待结束:人工允许 (resumed) 或拒绝 (denied) 了该操作,或在卡片过期或被撤回前无人答复 (abandoned) 。若等待是因有人停止或重定向轮次 (而非作出答复) 而结束,则第二行为 interrupted。两行均包含被升级工具的 cursor.tool.name、该调用的 cursor.grok_bot.tool_call.id,以及作为 cursor.grok_bot.decision.id 的卡片 id;该值与此调用的 human tool_decision 行中的值相同,因此请求、等待和答复可通过同一个键关联。

属性类型是否存在取值 / 说明
cursor.grok_bot.guardrail.kindstring始终loop_detected
cursor.grok_bot.guardrail.detectorstring始终触发的检测项,以单个 snake_case 标记表示:循环类型 (single_message_single_line、multi_message、multi_message_outbound_flood 等) 、Bot 拦截系列 (cloudflare_challenge、recaptcha、datadome、akamai 等) ,或在升级类中表示发起询问的 Auto-review 模式来源 (host_shell、box_shell、mcp、computer、automation_write、cloud_agent、subagent、feedback、bot_share) (开放)
cursor.grok_bot.guardrail.actionstring始终warned (Bot 收到提醒后继续执行)
cursor.grok_bot.guardrail.sourcestring始终runtime (检测器:loop_detected、bot_blocked)
cursor.grok_bot.guardrail.countint可选触发检测器的计数:loop_detected 行检测到的重复次数。检测器不计数时不存在
cursor.grok_bot.guardrail.target_hoststring可选仅限 bot_blocked:拒绝 Bot 访问的主机,已转为小写并去除 www.、端口、路径、查询和 userinfo (开放)
cursor.tool.namestring可选仅限升级类:被升级调用的内置工具 id,与其 tool_decision 和 tool_result 行中的值相同
cursor.grok_bot.guardrail.resolutionstring可选仅限 pause 和 interrupted:resumed (人工允许该操作)
cursor.grok_bot.guardrail.duration_msint可选仅限 pause 和 interrupted:等待时长,从卡片创建到收到答复或卡片失效。不会为负值
cursor.grok_bot.decision.idstring可选仅限升级类:卡片 id,即同一调用最终对应的 human tool_decision 行的 decision.id (开放)

cursor.grok_bot.tool_call.id 仅出现在升级类中,检测类中不存在,因为检测类不归属于某个具体的工具调用。若调用被 Auto-review 模式拒绝且无人可询问,则不会发起卡片,仅带有其 tool_decision。

cursor.grok_bot.delegation

INFO (dispatched,以及结果为 success 或 stopped 的 completed) ,ERROR (结果为 error 的 completed) ,响应体 grok_bot_delegation。系列 grok_bot_agent_actions。记录 Bot 移交给另一个智能体的工作及其返回结果:可以是它派发的后台子智能体,也可以是它启动或回复的 Cherri Code 云端代理。仅包含 ID 和结果,绝不包含提示词、结果文本或被委派方自身的操作。子智能体的工具调用会单独记录为 grok_bot.* 行,并带有 initiated_by=subagent;云端代理的 run 归入 cloud_agents 系列。

每次委派会产生两条共享同一 target_id 的记录:工作移交时记录 dispatched,结果返回给 Bot 时记录 completed。completed 记录的 turn.id 取自接收结果的轮次,而非派发时的轮次。cursor.grok_bot.tool_call.id 指派发调用 (在 subagent_stop 记录中则指停止调用) ;它出现在 dispatched 记录和子智能体的 completed 记录中,云端代理的完成记录中则没有该字段。

属性类型是否存在取值 / 说明
cursor.grok_bot.delegation.directionstring始终dispatched
cursor.grok_bot.delegation.kindstring始终cloud_agent_launch
cursor.grok_bot.delegation.targetstring始终cloud_agent
cursor.grok_bot.delegation.target_idstring始终云端代理的 ID (bc-...,与 cloud_agents 系列导出为 cursor.conversation.id 的值相同) 或子智能体的对话 ID (sand-subagent-...) 。不透明值
cursor.grok_bot.delegation.outcomestring仅 completedsuccess
cursor.grok_bot.delegation.duration_msint可选completed 记录上从派发到返回结果的实际耗时。若被委派方在接收轮次之外运行,则不含该字段;所有 dispatched 记录中也均不含

已知限制:

  • 以下情况不会记录:注入云端代理进行中轮次的引导 (不产生新 run) 、被 Cherri Code 拒绝的启动或回复、云端代理取消、由他人启动且 Bot 仅负责监视的 run,以及例程的子智能体唤醒其父级。
  • 已停止的子智能体之后仍可能产生 error 完成记录,因此同一 target_id 可能同时对应 stopped 和 error 两条记录。
  • 云端代理的 completed 记录为尽力而为:当 Bot 重新监视它在之前轮次中启动的智能体时,完成记录的 kind 可能为 cloud_agent_launch;在 run 中途被重新监视的启动,可能只有 dispatched 而没有对应的 completed。请按 target_id 配对两条记录,并允许完成记录缺失。
  • 与所有 grok_bot.* 行一样,投递保证至少一次:崩溃后重试的启动、回复或完成,可能为同一 target_id 记录两次。请先按 cursor.event.id 去重。

对话内容

系列 conversation_content。conversation.* 事件是唯一一类响应体为负载 (消息文本或 MCP 工具调用的某一端) 而非固定事件名称的日志记录。与其他系列一样,请按日志事件名称进行路由。cursor.conversation.user_message 表示提示词,cursor.conversation.assistant_message 表示响应,cursor.conversation.tool_io 表示 MCP 工具调用的参数或结果;请勿通过解析响应体来区分它们。

响应体。 已脱敏的文本。消息上限为 32 KiB,工具调用每一端上限为 8 KiB。只要导出的响应体是脱敏后文本的前缀,都会设置 cursor.conversation.content_truncated,无论是源文本本身超过上限,还是脱敏导致其超出上限;对于 tool_io,如果响应体未超出上限但脱敏后无法解析,也会设置该属性。

身份。 记录携带通用日志属性。通过 cursor.conversation.id 可将其与该对话的 api.request、skill.activated、hook.execution_complete、cloud_agent.* 和 grok_bot.* 日志关联。唯一的用户标识符是可选的 cursor.user.* 资源属性;日志属性中不包含任何用户标识符。请勿依赖 cursor.request.id、cursor.usage_event.id,也不要依赖消息记录上的 cursor.grok_bot.turn.id;tool_io 会将 turn.id 作为共享的 grok_bot.* 属性携带。

来源界面。 仅限云端代理和 Cherri Bot。云端代理对话的 resource 上带有 cursor.surface=cloud_agent。Cherri Bot 对话带有 cursor.surface=grok_bot,开启操作录制时还会附带该 Bot 的 grok_bot.* 操作日志。tool_io 仅适用于 Cherri Bot。IDE、命令行界面和桌面端对话暂未纳入此系列。请按 cursor.surface 进行过滤或路由。

开关。 只有在团队启用且导出目标上的对应开关已开启时,各事件才会被导出:user_message 需要开启 Prompts,assistant_message 需要开启 Responses,tool_io 需要开启 Tool I/O。有关这些开关的说明,请参阅设置页面。

这三个事件均为 INFO 级别,并携带以下属性:

属性类型是否存在取值 / 说明
cursor.conversation.provenancestring始终server (由 Cherri Code 观测) 。client 为保留值,请兼容处理。
cursor.conversation.message.idstring始终对话内的消息 id
cursor.conversation.turn.idstring可选对话内的轮次 id。在消息记录上与 cursor.grok_bot.turn.id 相互独立;在 tool_io 上与其相同。
cursor.conversation.content_truncatedbool始终响应体为脱敏后文本的前缀时为 True;对于 tool_io,脱敏后无法解析时也为 True

cursor.conversation.user_message

INFO。响应体:经过脱敏处理的用户提示词文本。

cursor.conversation.assistant_message

INFO。响应体:该响应经过脱敏处理的最终助手文本。

cursor.conversation.tool_io

INFO。响应体:MCP 工具调用某一侧经脱敏处理的紧凑 JSON,最大 8 KiB。每次通过 http transport 执行的 Cherri Bot MCP 工具调用会生成两条记录:arguments 记录包含 Bot 发送的 JSON 对象,result 记录包含连接器的回复。调用成功时,回复为工具返回的文本和结构化内容;调用失败时,则为错误、拒绝或否决消息。图像字节会被替换为其 MIME 类型。Bot 的计算机上的 stdio 调用仅上报元数据,不会生成 tool_io 记录。除团队启用外,还需开启导出目标的 Tool I/O 开关。

两条记录都带有共享的 grok_bot.* 关联属性 (provenance、turn.id、tool_call.id、event.sequence) ,因此 cursor.grok_bot.tool_call.id 始终存在,可用于将这两条记录与该调用的 cursor.grok_bot.mcp_tool_call 和 cursor.grok_bot.tool_decision 行关联。cursor.tool.name、cursor.tool.status 和 cursor.mcp.server.name 会重复元数据行中的值,使每条记录都可单独解读。

属性类型是否存在取值 / 说明
cursor.conversation.tool_io.directionstring始终arguments
cursor.tool.namestring始终MCP 工具名称 (开放)
cursor.tool.statusstring始终success
cursor.mcp.server.namestring可选客户定义的服务器显示名称 (开放)
cursor.grok_bot.provenancestring始终server
cursor.grok_bot.tool_call.idstring始终用于关联该调用的 mcp_tool_call 和 tool_decision 行的键
cursor.grok_bot.turn.idstring可选与此记录上的 cursor.conversation.turn.id 取值相同
cursor.grok_bot.event.sequenceint可选该调用在所属轮次内的序号;旧版 Cherri Bot 不提供此属性

当 cursor.conversation.content_truncated 为 true 时,响应体无法解析为 JSON:它要么是脱敏后文本的前缀,要么因脱敏而无法解析,此时 Cherri Code 会为其加上标志后导出,而不会导出脱敏程度更低的响应体。解析前请先检查该标志。两侧都会经过与消息文本相同的脱敏器,另外还会执行一轮基于键的处理:凡是键名指向凭据的 JSON 成员或赋值 (password、passphrase、token、api_key、secret、secret_key、access_key、authorization、cookie、private_key、credentials,以及 client_secret、x-api-key 等复合形式) ,无论其值形式如何,都会被脱敏。请求头键值对同样适用:在 [{"name":"Authorization","value":"Basic ..."}] 中,若同级的 name、key 或 header 成员在上述列表中,则 value 会被脱敏;若双元素数组的第一项在列表中,其第二项也会被脱敏 (["password","..."]) 。以数字形式保存的银行卡字段 ("cvc": 123) 会变为 [REDACTED: Card],ASCII \uXXXX 转义会在脱敏前先行解码。分散在同一数组各项中的私钥块 (如文件的各行、结果的各文本块) 会从 BEGIN 行到 END 行整体脱敏;分散在不相关字段中的则不会。基于键的处理只会深入字符串值中嵌套的 JSON 一层;更深层的重新编码文档仅按值的形态脱敏。有关脱敏器无法识别的内容,请参阅 MCP 工具 I/O。

标识与关联

目标字段覆盖范围
日志去重cursor.event.id每条日志记录
按会话或 Bot 分组cursor.conversation.id存在该字段时的日志。对于 Cherri Bot,此值即该 Bot 的标识符 (其对话 id) 。
按轮次分组 Cherri Bot 活动cursor.grok_bot.turn.id存在该字段时的 grok_bot.* 日志、Bot 的 skill.activated 日志、conversation.tool_io 日志,以及 cursor.surface=grok_bot 的 api.request / api.error 日志。请勿在 conversation.user_message 或 conversation.assistant_message 上依赖它。
对 Bot 轮次中的操作排序cursor.grok_bot.event.sequence当前 Cherri Bot 版本产生的 grok_bot.* 和 conversation.tool_io 日志。请按此字段排序;不要假定其值连续
对同一 Bot 工具调用的各行分组cursor.grok_bot.tool_call.idtool_result、tool_decision、mcp_tool_call、computer_use_session、file_transfer、message_delivery、delegation、护栏升级、Bot 的 skill.activated,以及启用工具 I/O 时 conversation.tool_io 的输入和输出两侧记录
将批准请求与其答复关联cursor.grok_bot.decision.idtool_decision,以及同一调用中 tool_escalation / pause / interrupted 的 guardrail 行
将子智能体的操作汇总到其父级cursor.grok_bot.root_turn.id来源为 client 的 grok_bot.* 日志;cursor.grok_bot.subagent.id 标识该子智能体
将提示词与响应关联到会话cursor.conversation.idconversation.* 日志 (云端代理和 Cherri Bot) ,仅在启用 conversation_content 后可用
按轮次分组提示词与响应cursor.conversation.turn.id存在该字段时的 conversation.* 日志
按用户分组资源属性 cursor.user.account_id存在该字段时的日志和指标。可与 Admin API GET /teams/members 响应中的 id 关联。同一资源上的 cursor.user.email 可直接标识对应成员。
核对计费cursor.usage_event.idapi.request、api.error 和 api.correction 日志

导出的日志不含 OpenTelemetry 的 trace_id 或 span_id 字段。请使用 cursor.conversation.id 和 cursor.grok_bot.turn.id 来关联 Bot 与轮次。指标不含关联 id;如需按对话统计 token 总量,请使用 api.request 日志。

具体方法请参阅设置页面中的 Joining sessions。

传递语义

  • 日志采用至少一次传递。瞬时故障会在约 7 天内自动恢复;按 event.id 去重。终止性拒绝 (持续性 4xx、无效负载) 不会重放。
  • 指标采用至多一次传递。失败的指标请求不会重试或重放。
  • **不保证顺序。**更正内容可能会在其所修正的请求之后到达;请按记录时间戳排序。
  • 支持 OTLP 部分成功。被拒绝的条目不会重新发送。
  • 不会回填目标激活前的数据。导出上游的源数据保留期也约为 7 天 (与传递重试窗口分开) 。