开发者逆向 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 到底是什么
在展开逆向细节之前,先简单回顾一下 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 密钥同级别的审视。」
二、逆向方法:他是怎么看到「真实流量」的
作者在文章中给出的分析方法本身就很有教学价值,简单可以归纳为四步:
- 透明代理拦截 HTTPS 流量:使用
mitmproxy搭建本地代理,并临时向系统信任链注入自签 CA,用于捕获 Grok Build CLI 与api.x.ai、telemetry.x.ai等域名之间的全部 HTTPS 请求。 - Node 运行时钩子:Grok Build CLI 本质上是打包后的 Node 二进制,作者通过
NODE_OPTIONS="--require ./hook.js"注入自定义模块,对https.request、fs.readFile、child_process.spawn等关键 API 打点。 - Bundle 反混淆:将
grok可执行文件中的 JS bundle 提取出来,用 webcrack 反混淆,再基于函数命名规律定位到「Telemetry」「Session」「ContextPacker」等模块。 - 对照实验:在同一个测试仓库中分别运行
--no-telemetry、plan 模式、headless (-p) 模式、开启和不开启 MCP 服务器等多种组合,观察请求差异。

三、Grok Build CLI 实际上传了哪些数据
这是全文最受关注的部分。作者按端点分类总结如下(下面内容基于其抓包结果的复述,不代表 xAI 官方文档描述):
1. 模型推理端点:POST /v1/responses
这是 Grok Build CLI 与模型交互的主通道,符合 xAI 官方公布的 responses API 结构。上传内容包括:
- 完整的 Prompt 上下文:包括系统提示词、AGENTS.md 内容、当前工作目录下参与讨论的文件片段、diff、以及历史消息。
- 工具调用 schema:包括内置工具(
edit_file、run_shell、read_file、search_repo等)以及用户通过 MCP 注册的工具描述。 - 模型参数:
model="grok-build-0.1"、temperature、max_output_tokens、以及stream=true时的 SSE 通道参数。 - Session ID 与 Turn ID:用于串联多轮对话,作者指出该 ID 会在退出 CLI 后仍然被再次复用一段时间。
值得关注的是:作者验证了 Grok Build CLI 默认会在打开一个新目录时对项目做一次「上下文预热」,即扫描 README、package.json、pyproject.toml、AGENTS.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 服务器(如
filesystem、fetch、github等)—— 只上报名称与版本,不上报调用参数。
作者特别指出:这些遥测事件默认开启,可以通过环境变量 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 remoteURL 或凭据被单独上报,但 diff 中如果包含这些内容会随上下文进入 prompt; - 没有观察到跨项目的静默数据共享:新目录会重新建立 session,历史 prompt 不会被自动复用。
作者的原话大意是:「以我这几个小时的观察,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 内追加执行 curl、ssh 等命令?作者也承认这一部分在他的测试样本中没有覆盖完全,欢迎社区补充。
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 里使用
-pheadless 模式时限制权限: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 大战里,最容易被低估、也最难被抄袭的护城河。
参考来源
- What xAI's Grok Build CLI Actually Sends to xAI(原始逆向分析 Gist) —— 开发者 cereblab 对 Grok Build CLI 网络行为的抓包与逆向报告,本文核心信息来源。



