Skip to content

Grok Build 关闭本机代码上传

记录一下我自己怎么关 Grok Build 的本机上传。参考了本机 grok 0.2.101 的配置/日志,以及 2026-07 社区用 mitmproxy 做的 wire 分析。
先说清楚:云端 agent 不可能真正做到零出网,模型要干活,读过的文件还是会进推理请求。这篇文章主要关的是整仓 bulk 上传训练/产品改进,别指望关完之后代码完全不出门。

先搞清楚会传什么

Grok Build 大致有两条路(社区抓包和官方 enterprise 文档对上的部分):

  1. 推理通道:你的 prompt,以及 agent 读过的文件,走 TLS 发到 cli-chat-proxy.grok.com。这个是正常工作需要的,关不掉(除非不用云端 Grok)。
  2. 整仓 / session trace:2026-07 被抓到默认会把整个 git 仓库打成 git bundle 上传(tracked 文件 + 完整 history),和 agent 有没有读某个文件关系不大;另外还有 session/trace 一类上传。争议主要在这条。

社区对 grok 0.2.93 的测试里比较关键的几点:

  • 读过的文件(包括 canary .env)会进 /v1/responses/v1/storage
  • prompt 写了 do not read any files,整仓 git bundle 仍可能上传;抓包体 git clone 之后,没读过的 canary 文件和 history 都能还原出来。
  • UI 里关 Improve the model 只影响训练同意,当时挡不住整仓上传。
  • 曝光之后服务端把 bulk 关掉了(日志里能看到 in_remote_trace_upload_enabled: false 之类),但客户端二进制里上传相关代码还在,所以升级后最好再核对一次。

参考链接:

官方 enterprise 文档会写数据经 TLS 到 inference proxy、ZDR 团队侧不持久化之类的。整仓 git bundle 进 GCS 这条,以抓包和本机日志为准,别只看产品文案。

怎么关

1. CLI 里跑 /privacy

会话里输入:

text
/privacy

目标状态类似这样:

text
Privacy: privacy mode
Your code data will not be trained on or used to improve the product.

以后如果要重新共享数据,用 /privacy opt-in

注意:/privacy 主要管训练 / improve the product / 账号 retention,不等于代码完全不离开本机。

2. 改 ~/.grok/config.toml

这是本机真正管用的硬关。我这边验证过可以用的写法:

toml
[features]
telemetry = false

[telemetry]
trace_upload = false
mixpanel_enabled = false
enabled = false

[harness]
disable_codebase_upload = true

各字段大致意思:

  • telemetry = false / enabled = false:关匿名 usage telemetry
  • trace_upload = false:关 session / trace 上传
  • mixpanel_enabled = false:关 Mixpanel
  • disable_codebase_upload = true:本地否决整仓 codebase 上传(社区复测过,即使用 env 强开,这个开关仍能拦住 enqueue)

改完之后新开一个 grok 会话再测。已经在跑的进程不一定立刻重读全部策略,重启最省事。

可选环境变量(优先级一般高于 config,适合包一层 shell wrapper):

bash
export GROK_TELEMETRY_ENABLED=0
export GROK_TELEMETRY_TRACE_UPLOAD=0

文档里 trace_upload 对应的 env 就是 GROK_TELEMETRY_TRACE_UPLOAD

3. (可选)用 requirements.toml 钉死

config.toml 手滑或者某些流程可能改掉。想钉死的话,用更高优先级的层:

  • 用户级:~/.grok/requirements.toml
  • 机器 / MDM:/etc/grok/requirements.toml(最高)

只 pin 隐私相关项可以这样写:

toml
[features]
telemetry = false

[telemetry]
trace_upload = false
mixpanel_enabled = false

[harness]
disable_codebase_upload = true

4. 看日志,别只看 UI

bash
grep 'trace.upload.decision' ~/.grok/logs/unified.jsonl | tail -5

正常的话大致应该是:

  • trace_upload: false
  • uploads_enabled: false
  • data_collection_disabled: true(账号或团队 ZDR 生效时会看到)
  • in_remote_trace_upload_enabled: false(服务端当前关 bulk 时常见)
  • upload_reason 可能是 feature_offzdr_team 之类

我本机日志里还见过这些字段:

  • trace_upload_source: "config":本地 config 关了 trace
  • telemetry_source: "config":本地关了 telemetry
  • in_remote_trace_upload_enabled: false:远端没开 trace 上传
  • upload_reason: "zdr_team":和 ZDR / 团队零保留有关

顺手也可以看:

bash
ls ~/.grok/upload_queue 2>/dev/null || echo "无 upload_queue"
~/.grok/bin/grok --version

注意:二进制里可能还能 stringsxai-data-collectorcodebase upload 这类字符串。能力未必删了,是靠 flag 关的,所以升级后再 grep 一次日志比较稳。

容易踩的坑

  • 只关 Improve the model:历史上挡不住整仓上传,还是要本地写 disable_codebase_uploadtrace_upload
  • 以为 permission deny 能挡上传:deny 主要挡 agent 读文件进上下文,挡不住历史上那条整仓 bundle 管道(bundle 走另一条路)。
  • 以为 privacy mode = 零出网:读进对话的源码还是会走推理通道。
  • secret 放在 git tracked 文件里:bulk 开着或者 agent 误读时最危险。.env 保持 ignore,尽量别让 agent read 生产密钥。

敏感项目习惯

  1. 生产密钥用 scoped / 只读 / 可吊销的 key,别整段贴进仓库。
  2. 能公开讨论的目录再开 Grok;业务机密仓优先本地模型,或者更严的沙箱。
  3. CLI 自动更新之后再跑一遍日志检查,行为以当前版本为准。
  4. 想自己验证 bulk 有没有又打开:用没有真实密钥的 canary 仓 + mitmproxy(见上面的 repro 仓库),别拿生产仓试。

本机核对命令

bash
# 1. 版本
~/.grok/bin/grok --version

# 2. 配置里有没有硬关
grep -E 'telemetry|trace_upload|disable_codebase' ~/.grok/config.toml

# 3. 最近上传决策
grep 'trace.upload.decision' ~/.grok/logs/unified.jsonl | tail -3

# 4. 会话里再确认一次
# /privacy

期望结果:

  • config 里 disable_codebase_upload = true,telemetry / trace 关掉
  • 日志 uploads_enabled: false
  • /privacy 是 privacy mode

最后汇总一下

目标做法
不参与训练 / 产品改进/privacy 开成 privacy mode
关整仓 bulk[harness] disable_codebase_upload = true
关 session/trace 和 telemetry[features] telemetry = false + [telemetry] trace_upload = false
验证~/.grok/logs/unified.jsonl 里的 trace.upload.decision
仍然会发生的agent 读过的内容会经推理代理到 xAI(云端 coding agent 都这样)

配置改完保持就行,没必要为了隐私去关 MCP 或插件。真正高敏场景更该盯的是:工作目录里有没有 secret,以及 agent 会不会读到它们,而不只是多关几个 UI 开关。