又到周五了,这是一件很开心的事情。
我本来是照例提醒大家去领免费的 3 亿 tokens 的!
但是,今天 ZCode 被爆出了一个事情,让我不太想说免费的事情,而是要问"免费"的代价是什么? 甚至付费用户也要承受这个代价!
有人发布了一篇名为《扒一扒 ZCode 静默上传全量 Git 历史的骚操作》的文章!

这篇文章指出 ZCode 会"偷偷"地把整个项目拷贝、打包、加密、上传,还包了整个 git 历史(从出生到现在的所有记录)。
这可是大事情。
我晚上让 ZCode、Codex、Claude 全部按文章的内容分析了一遍。
1、基本实锤了!
这个事情基本是实锤了!
核实情况如下:
| 文章主张 | 本机复核 |
|---|---|
| 登录后发送 Prompt 会触发快照 | 已证实 |
| UI 两个开关不能阻止快照 | 已证实 |
扫描完整 .git |
已证实 |
.git 绕过大小和二进制过滤 |
已证实 |
| 会附带全局配置 | 已证实,但当前版本会做部分字段名脱敏 |
| AES 加密、RSA 包裹密钥 | 已证实 |
| OSS 表单直传 | 已证实 |
| 本机曾成功上传 | 有很强的本地状态证据 |
| 上传凭证接口是 POST | 当前版本不符,实际为 GET |
| 每个任务结束都上传 | 证据只明确支持 Prompt 前,以及特定 Repo Wiki 结束流程 |
| 私钥只存在智谱云端 | 客户端确实没有私钥;具体服务端托管方式无法从客户端完全证明 |
Codex 表示:
复核后,我需要把结论上调:
这不只是"ZCode 具备上传能力",而是你的机器上有很强证据表明多个工作区快照已经成功上传。
也就是说,我的情况是:"木已成舟"!

我这里大概有 19 个目录,部分 state.json 里已经有非常清晰的数据了,今天刚更新了三个项目。
2、完整的链路
Code 把完整链路也分析得很清楚了:
objectivec
用户发送 Prompt
↓
无条件调度 RepoSnapshotSidecar
↓
检查是否有登录 Token
↓ 有
向 zcode.z.ai 请求上传凭证和 RSA 公钥
↓
扫描项目文件 + 递归追加整个 .git
↓
生成 manifest 和全局配置 extra-manifest
↓
打包 tar.gz
↓
AES-256-CTR 加密
↓
用服务端 RSA 公钥加密 AES 密钥
↓
POST 到服务端下发的 oss.host
↓
OSS callback
↓ HTTP 成功
写入 lastAcceptedManifestHash
并删除本地 .enc、envelope 和临时压缩包
3、触发条件
整个行为逻辑是如何触发的,这个非常关键。
经过分析发现,只要发送 Prompt,代码直接调用:
scheduleRepoSnapshotSidecar
→ captureBeforePrompt
→ captureBeforePromptUnsafe
也就是说,只要你创建了项目,发送了内容,就会触发这个行为。
哪怕你只说了"Hi",它也直接把你整个项目给捞走了。
4、带走了哪些文件
主要是包含了:
bash
.git/objects
.git/logs 和 reflog
.git/refs
.git/config
.git/lfs
packfile
本地未推送提交与分支历史
历史中已经删除的文件
文章关于"可能上传完整 Git 历史"的核心说法属实。
除此之外还会包含:
行为设置
用户级 MCP 配置
Skills
Commands
Hooks
Plugins
Memory
Subagents
全局 AGENTS.md
这个问题还能扩展下,比如我就关心,如果我项目有忽略文件,明确忽略的内容,还会上传么?
具体的回答是这样:
markdown
1. 从未被 Git 跟踪,并且始终被 .gitignore 忽略:当前实现下一般不会上传。
2. 曾经提交过,后来删除并加入 .gitignore:仍可能通过 .git/objects 或 packfile 上传。
3. 曾经执行过 git add,目前仍在索引中:.gitignore 无效,仍会上传。
4. 只存在未提交内容,但文件名像 .env、secret、token、私钥文件:ZCode还会额外按文件名排除。
5. 存在 Git LFS 历史或缓存:.git/lfs 会被加入,忽略规则无法保护。
6. 私密文件放在 .git 里面:会上传,因为 .git 明确绕过大小、二进制和敏感文件名过滤。
简单来说,忽略的不会,但是防不胜防!
因为它把整个 git 捞过去了,"生老病死"都在这里,一旦发生过,就没法抹去了。
如果你没有"忽略文件",那么...
5、ZCode 这种做法合理?
这个问题,我也问了一圈。其实不问大家都知道结果,我只是想问一下,看看 AI 们是怎么说的。
Codex的回答是:
markdown
默认、自动地上传整个项目快照,尤其包含 `.git` 完整元数据,而没有清晰、显著、可验证的用户授权------不合理。
- 范围过宽
- 绕过用户预期
- 关闭相关选项也不停止
- 授权不充分
- 加密不能解决授权问题
- 缺乏最小化原则
- 风险与收益失衡
这些词可能有点专业和学术范,翻译一下,就是每一条都在说:不合理!
6、对我们来说有哪些风险?
风险核心在于:泄露范围可能远大于你当前看到的项目文件,而且发生后很难彻底撤回。
主要风险包括了:
- 源代码与商业机密外泄
- 已删除的秘密仍可能泄露
- 凭据被滥用
- 身份与内部关系暴露
- 第三方与供应链风险
- 加密不等于厂商无法查看
- 难以撤回和确认删除
- 法律与合同责任
我就不展开了,大家可以对号入座,毕竟整个项目包含历史记录都被上传了! 这对商业项目和信息敏感的项目,简直是.... !
7、Codex 和 Code 会这么干么?
ZCode 自己的回答很坚决:它们不会!
下面是Codex的总结:
ZCode :本机证据表明,普通提示触发独立仓库快照,包含 .git,加密后上传,且相关设置关闭仍发生。
Codex 本地模式 :会上传实际进入模型上下文的内容;目前没有发现像 ZCode 一样每次整仓库、整 .git 静默快照。
Claude Code 本地模式:同样发送读取过的文件和工具输出;目前没有证据表明普通本地会话默认整库上传。
8、ZCode 这么干的核心目的?
Codex 表示:
从代码结构判断,我认为它的核心目的不是传统意义上的"为用户备份",而是:
在服务端建立一个与每次提问对应、可重建的完整开发现场。
Claude 表示:
arduino
核心目的是积累训练 coding agent 所需的数据,而不是给你做检查点。
理由是:它收集的数据结构,恰好是训练/评估 agent 的标准格式,而这个格式对"回滚"是全部冗余的。
为什么选择不告诉你
这部分是推测,我标清楚。
技术上没有任何理由不能弹一个对话框说"我们会上传你的仓库用于改进模型,是否同意"。不做的原因大概率很朴素:明示会让大部分人关掉,数据量就没了。所以这是个增长决策,不是工程决策。
这个问题,其实是司马昭之心,路人皆知了!
智谱肯定不会是为了帮你备份项目,大概率也不是为了卖你数据。 最核心的就是用用户的真实项目,训练它们的模型。
这就很有意思了:大家付费提供数据,让人家免费训练,然后收费卖给你。
刚听到这个事情的时候,我是很惊讶的!
但是回味了一下之后,发现很无奈!
因为我想起来了李彦宏的那句:用户是愿意为了便利而放弃隐私的!
你愿意吗? 我是不愿意的!
本质上是,国内的互联网大厂什么时候在乎过用户的隐私啊!
9、Agent 时代如何保护隐私?
无论是互联网时代,还是移动互联网时代,我们其实都没啥隐私。从商品推荐和推销电话就能略知一二了。
但是......我们从来没有"裸奔"得这么彻底过!
Agent 时代,我们几乎把所有秘密都告诉了 AI。
什么密码、秘钥、授权,项目代码,统统告诉 AI 了。 甚至还会和 AI 说心里话,探讨人生。
在这种情况下,如果模型厂商作恶,那是非常恐怖的事情。
现在是中转不安全,直达也好不到哪里去!最终全靠他们的"节操"。
但"节操"这个事情最不靠谱。刚开始还装一下,没有约束的话,立马出来卖了。
所以,所以人都应该站出来,约束这些模型厂商,时刻盯着他们。
我虽然觉得GLM不错,也推荐过Zcode,但是我坚决抵制这种GIT打包服务!
而且,即便是对话中的内容,也不应没有授权就拿去训练,这是属于我们的私人资产。
我们是付费买了CodingPlan,不欠任何人。
国家应该制定严格的法律法规限制这些行为,行业也应该有一定的行业规范。
虽然我人微言轻,但是我还是要表达一下:"个人隐私,个人项目和个人财产一样,神圣不可侵犯!偷代码也是偷! "