AI 快讯开发者逆向 Grok Build CLI:数据都传去哪了
开发心得

开发者逆向 Grok Build CLI:数据都传去哪了

2026-07-12T04:05:47.439Z
开发者逆向 Grok Build CLI:数据都传去哪了

一位开发者对 xAI 刚推出不久的 Grok Build CLI 进行了流量抓包与逆向分析,梳理出该工具在运行过程中真正上传到 xAI 服务器的数据类型,引发社区对 AI 编程 CLI 隐私边界的重新讨论。

开发者逆向 Grok Build CLI:这款 xAI 新宠到底上传了哪些数据?

随着 AI 编程助手全面进入 CLI 时代,「本地终端 + 云端大模型」的组合已成为主流开发工作流。xAI 在近期正式推出的 Grok Build CLI 是这条赛道上的最新玩家 —— 面向 SuperGrok 和 X Premium Plus 订阅用户开放早期 Beta,主打「专业软件工程」和「复杂编码任务」,并搭载了同期发布的 grok-build-0.1 模型。

然而就在工具上线不久,一位署名 cereblab 的开发者在 GitHub Gist 上发布了一篇技术长文,标题直白得毫不客气 ——《What xAI's Grok Build CLI Actually Sends to xAI》。他通过网络抓包、二进制反混淆以及 Node 运行时钩子等手段,系统梳理了 Grok Build CLI 在实际使用过程中真正会向 xAI 服务器上传的内容。文章一经发布,迅速在开发者社区流传,并再次把「AI 编程 CLI 的数据边界」这一话题推到了聚光灯下。

终端中运行 Grok Build CLI 的界面与右侧网络抓包工具并排显示,展示其向 api.x.ai 发送的请求

一、背景:Grok Build CLI 到底是什么

在展开逆向细节之前,先简单回顾一下 Grok Build CLI 本身。根据 xAI 官方博客 x.ai/news/grok-build-cli 的介绍:

  • Grok Build 是一款运行在终端里的编码 Agent,可以通过一条 curl -fsSL https://x.ai/cli/install.sh | bash 完成安装;
  • 主打功能包括 Plan 模式(复杂任务前先出方案,所有编辑需人工确认)、Subagents 并行执行(拆分探索 checkout flow、CI、共享库等任务)、AGENTS.md / plugins / hooks / MCP 全套生态兼容;
  • 底层模型 grok-build-0.1 已同步登陆 xAI API 公测,也在 OpenRouter、Vercel AI Gateway、TrueFoundry 等聚合平台可用;
  • 官方定位是「一款贯穿 plan、build、test、deploy 的开发工具」,甚至强调可以在 CI/CD 中脚本化调用。

这一切听起来都很美好 —— 但正如 cereblab 在文章开头写的那样:「一款可以自动读取你所有项目源码、执行 shell 命令、并把上下文打包发送到远程服务器的工具,理应享有和你的 SSH 密钥同级别的审视。」

二、逆向方法:他是怎么看到「真实流量」的

作者在文章中给出的分析方法本身就很有教学价值,简单可以归纳为四步:

  1. 透明代理拦截 HTTPS 流量:使用 mitmproxy 搭建本地代理,并临时向系统信任链注入自签 CA,用于捕获 Grok Build CLI 与 api.x.aitelemetry.x.ai 等域名之间的全部 HTTPS 请求。
  2. Node 运行时钩子:Grok Build CLI 本质上是打包后的 Node 二进制,作者通过 NODE_OPTIONS="--require ./hook.js" 注入自定义模块,对 https.requestfs.readFilechild_process.spawn 等关键 API 打点。
  3. Bundle 反混淆:将 grok 可执行文件中的 JS bundle 提取出来,用 webcrack 反混淆,再基于函数命名规律定位到「Telemetry」「Session」「ContextPacker」等模块。
  4. 对照实验:在同一个测试仓库中分别运行 --no-telemetryplan 模式headless (-p) 模式、开启和不开启 MCP 服务器等多种组合,观察请求差异。

mitmproxy 捕获到的 Grok Build CLI HTTPS 请求列表,主机名以 api.x.ai 和 telemetry.x.ai 为主

三、Grok Build CLI 实际上传了哪些数据

这是全文最受关注的部分。作者按端点分类总结如下(下面内容基于其抓包结果的复述,不代表 xAI 官方文档描述):

1. 模型推理端点:POST /v1/responses

这是 Grok Build CLI 与模型交互的主通道,符合 xAI 官方公布的 responses API 结构。上传内容包括:

  • 完整的 Prompt 上下文:包括系统提示词、AGENTS.md 内容、当前工作目录下参与讨论的文件片段、diff、以及历史消息。
  • 工具调用 schema:包括内置工具(edit_filerun_shellread_filesearch_repo 等)以及用户通过 MCP 注册的工具描述。
  • 模型参数model="grok-build-0.1"temperaturemax_output_tokens、以及 stream=true 时的 SSE 通道参数。
  • Session ID 与 Turn ID:用于串联多轮对话,作者指出该 ID 会在退出 CLI 后仍然被再次复用一段时间。

值得关注的是:作者验证了 Grok Build CLI 默认会在打开一个新目录时对项目做一次「上下文预热」,即扫描 READMEpackage.jsonpyproject.tomlAGENTS.md.git/HEAD 等元信息并发送到模型端点,用于让 Agent「先熟悉项目」。这在 IDE 类 AI 助手中很常见,但在纯 CLI 中出现时容易被忽视。

2. 遥测端点:POST /v1/telemetry/events

这是引发讨论最多的一类请求。作者发现即使在没有输入任何 prompt 的情况下,Grok Build CLI 也会定期向 telemetry.x.ai 上报如下事件:

  • CLI 版本号、OS 版本、CPU 架构、Node 运行时版本;
  • 当前会话时长、命令数量、subagent 触发次数;
  • 每个内置工具的调用次数与耗时(例如 edit_file 被调用了多少次、run_shell 平均耗时多少);
  • 错误堆栈(经过路径脱敏,但保留了文件名和行号);
  • 是否检测到已知的 MCP 服务器(如 filesystemfetchgithub 等)—— 只上报名称与版本,不上报调用参数。

作者特别指出:这些遥测事件默认开启,可以通过环境变量 GROK_BUILD_TELEMETRY=0~/.config/grok-build/config.toml 中的 telemetry.enabled = false 关闭,关闭之后他确实观察到 telemetry.x.ai 的请求归零。

3. 认证与订阅校验:GET /v1/account/session

CLI 启动时会向 xAI 校验当前登录态与订阅等级(SuperGrok / Premium Plus),并拉取当日剩余额度。请求头包含来自本地 keychain 的 OAuth Token,没有额外上传其他信息。

4. 计费与用量:POST /v1/usage/report

每一轮模型调用结束后,CLI 会额外发送一份用量摘要(input tokens、output tokens、cache hit 等)用于账单核对。作者认为这与推理接口本身可以合并,冗余上报略显重复,但内容并不敏感。

5. 什么没有被上传

作者也很克制地列出了「他没有观察到的」数据类型:

  • 没有观察到把整份工作目录压缩上传,长上下文是随对话按需附带;
  • 没有观察到 ~/.ssh.env.aws/credentials 被主动读取或发送,除非用户明确让 Grok Build 打开这些文件;
  • 没有观察到 git remote URL 或凭据被单独上报,但 diff 中如果包含这些内容会随上下文进入 prompt;
  • 没有观察到跨项目的静默数据共享:新目录会重新建立 session,历史 prompt 不会被自动复用。

作者的原话大意是:「以我这几个小时的观察,Grok Build CLI 的行为与它文档里描述的边界基本一致 —— 但『基本』这个词本身,就是我建议大家自己抓包验证的原因。」

一张表格式的示意图,把 Grok Build CLI 的上行请求按端点分类为「模型推理 / 遥测 / 认证 / 用量」

四、社区反应与讨论焦点

这篇 Gist 在 Hacker News、Reddit r/LocalLLaMA 等社区被广泛转发。综合评论区来看,讨论主要集中在四个方向:

1. 遥测应该 Opt-in 还是 Opt-out

主流开发者社区对「AI CLI 默认打开遥测」越来越敏感。以 Anthropic 的 Claude Code、OpenAI 的 Codex CLI 为例,虽然它们也有遥测机制,但对「事件类别是否包含 prompt 内容」都做了明确的分层声明。评论者普遍认为 Grok Build CLI 至少应该在首次运行时给出交互式提示,而不是仅通过文档说明。

2. run_shell 工具的边界

多位评论者提到:Plan 模式虽然会拦截文件编辑,但对 run_shell 的确认粒度值得推敲。如果用户在 Plan 模式下批准了「运行测试」,Agent 是否可以在同一个 turn 内追加执行 curlssh 等命令?作者也承认这一部分在他的测试样本中没有覆盖完全,欢迎社区补充。

3. Subagent 的上下文隔离

Grok Build CLI 的一大卖点是并行的 Subagents,可以分别去探索 checkout flow、CI、共享 Go 库等。作者观察到每个 Subagent 会各自开启独立的 /v1/responses 会话,但父 Agent 会在汇总阶段将子 Agent 的输出再次以上下文形式送回主模型,这意味着「隔离」更多是执行层面的,而非数据层面的。对涉密项目而言,这是一个需要单独评估的问题。

4. 与生态其他 CLI 的横向对比

评论区顺势把 Grok Build CLI 与 Cursor CLI、Claude Code、Aider、OpenCode、Kilo CLI 等进行了对比。Kilo CLI 因为开源、支持本地模型(Ollama / LM Studio)而被反复提及;也有开发者指出「谁的遥测更克制」不应该只看默认值,还要看能否完全关闭关闭后是否会影响功能。就这一点而言,Grok Build CLI 的 telemetry.enabled = false 至少是可用的。

五、给开发者的几点务实建议

结合这篇逆向文章和社区讨论,如果你正在评估或已经在使用 Grok Build CLI,可以参考以下做法:

  • 对敏感项目使用独立 shell 环境:为 AI CLI 建立单独的用户目录或容器,避免其在需要读文件时误触 .env.pem
  • 配置项目级 .grokignore 或等价文件:将 secrets/infra/terraform.tfstate*.env* 等目录显式排除在 Agent 的默认视野之外。
  • 默认关闭遥测:在 ~/.config/grok-build/config.toml 中设置 telemetry.enabled = false,并通过 env | grep GROK 确认相关环境变量。
  • 对生产分支强制启用 Plan 模式:文档中提到「每次编辑都需要人工批准」,在真实项目里这个开关的价值远高于它带来的额外点击。
  • 在 CI/CD 里使用 -p headless 模式时限制权限:CI runner 里的 token 通常权限极大,Agent 拿到的 shell 也一样;建议为 Grok Build 单独发一枚 scope 更窄的 CI token。
  • 周期性自己抓包:CLI 版本迭代很快,一次逆向的结论只在当次版本内有效。养成对新版本做一轮 mitmproxy 或 strace 检查的习惯,比信任任何一篇博客都稳。

六、写在最后:AI 编程 CLI 的「信任成本」

Grok Build CLI 本身并没有做什么惊天动地的坏事 —— 从这次逆向的结果看,它的行为与官方描述基本吻合,遥测可关闭、上下文按需上传、认证走标准 OAuth。放到 2026 年这个时间点,它甚至可以说是相对克制的一款产品。

真正值得记住的是这篇 Gist 背后传递的态度:「对能读你所有代码、能跑你所有命令的工具,做一次自己的抓包,永远不算过度。」 当 Cursor、Claude Code、Codex CLI、Grok Build CLI 集体涌入开发者的日常工作流,我们对「工具究竟做了什么」的知情权,比选择哪一款工具本身更重要。

如果你也在写自己的 AI CLI,或者在企业里推动 AI 编程工具落地,不妨把这次事件当作一份现成的合规检查表:清楚地告诉用户你上传了什么、为什么上传、怎么关掉。 这可能才是这轮 AI 编程 CLI 大战里,最容易被低估、也最难被抄袭的护城河。

参考来源

相关推荐

查看全部

联系我们

我们通常在工作时间快速响应

扫码添加微信

专属客服:Hub 助手

微信号: