据报道,9 月 18 日,一位个人开发者发布博文称,自己在清理本地磁盘时发现用户目录下的~/.zcode文件夹占了 700 多 MB,排查后找到其中一个 313MB 的加密文件,状态文件显示它打包了自己某个 10GB 大小商业项目的几乎全部核心资产,只是因为上传一直失败才卡在本地。随后,智谱及旗下 AI 编程产品 ZCode 被推上舆论中心。9 月 28 日,ZCode 公布了新一轮用户补偿方案。
这不是一次普通的"产品翻车"。它戳中的,是所有用 AI 编程工具的人都要面对的问题:我的代码,到底被传到哪去了?
一、事情经过,按时间线捋
- 9 月 18 日:开发者博文在技术社区引发讨论,核心指控是"静默上传"。据其逆向分析,用户只要处于登录状态,ZCode 桌面端就会在后台把整个工作区加密打包、上传到阿里云 OSS;打包内容不只是当前项目源码,还包括完整的 Git 版本历史、LFS 大文件缓存、reflog 记录以及部分全局开发配置。
- 当天下午:ZCode 方面解释称,问题源于"代码库索引"功能,其中 Repo Wiki(代码知识库)在云端生成页面时会触发仓库数据上传;因为该功能上线初期默认开启,影响了部分用户,并承诺生成后"相关上传数据会立即销毁,不会保存"。
- 9 月 19 日:ZCode 推送 3.14.0 版本,更新日志写明"修复仓库百科异常上传的问题"。
- 9 月 21 日:智谱宣布将 ZCode 开源,把代码交给社区监督;同时称客户端已完成安全整改,移除了 Repo Wiki 功能,切断本地仓库快照生成与上传链路,并称经中国信息通信研究院技术评测相关 OSS 存储桶为"云端零数据",绿盟科技确认相关数据对象及存储桶已删除。
- 9 月 28 日:公布补偿方案——付费用户及一个月内回归的付费用户赠送 4 张周额度重置卡和 4 张 5 小时额度重置卡;9 月 28 日至 10 月 7 日面向全体用户发放十万份"1 亿 Token"。
ZCode 在公告里写了一句挺实在的话:“信任不能一键重置。”
- 9 月 28 日:公布补偿方案——付费用户及一个月内回归的付费用户赠送 4 张周额度重置卡和 4 张 5 小时额度重置卡;9 月 28 日至 10 月 7 日面向全体用户发放十万份"1 亿 Token"。
二、技术本质:问题不在"上云",在"默认"和"看不见"
平心而论,AI 编程助手要理解一个仓库、生成文档、支持版本回退,确实需要把代码传到服务端处理。这本身不奇怪,很多同类产品都这么干。
真正的问题出在两点:
- 默认开启。用户并没有主动发起,功能自己就开始打包上传了。技术上一个"默认值"的选择,实际决定了用户的代码资产有没有离开自己的机器。
- 范围超出预期。往云端传"当前项目"和传"完整 Git 历史 + LFS 缓存 + reflog + 全局配置"是两回事。后者几乎等于把整个研发资产兜底上传了,而用户根本不知道边界划在哪。
至于"上传后立即销毁",外界的质疑也集中在一点上:如何从外部证明?销毁这件事发生在用户完全看不到的云侧,拿不到证据,就只能选择信或不信。争议从"偷传数据"转向"有没有用于训练",本质上都是同一个问题——可验证性。
- 范围超出预期。往云端传"当前项目"和传"完整 Git 历史 + LFS 缓存 + reflog + 全局配置"是两回事。后者几乎等于把整个研发资产兜底上传了,而用户根本不知道边界划在哪。
三、对普通开发者的实用建议
不管你用哪家的 AI 编程工具,下面几条都适用:
1. 上手前先看"数据条款"和默认开关。重点问几个问题:有没有"代码库索引 / 仓库理解 / 云端文档"这类功能?默认开还是关?上传的范围是什么?能不能关掉或改成纯本地处理?这些通常都写在隐私政策或产品设置里,花五分钟看一眼,比出事之后再补救便宜得多。
2. 自己动手查一查。如果心里没底,可以看看工具在本地留了什么、联网都在连哪里:
# 看看用户目录下有哪些工具留下的缓存/数据目录,占用多大du-sh~/.zcode ~/.cursor ~/.codeium2>/dev/null# 查看某个进程当前建立的网络连接(PID 换成实际进程号)sudolsof-p<PID>-i# 或ss-tp|grep<进程名>搞清楚"它往哪儿传、传了多大",比听谁的声明都靠谱。
3. 敏感项目分环境处理。商业项目、含密钥的仓库,尽量不要直接丢给云端索引类功能;需要联网时,优先选能跑在本地或内网的模型/工具,把真正敏感的代码留在受控环境里。
4. 企业层面,别只靠"信任",要靠机制。代码资产分级、私有化部署、采购合同里对数据用途(尤其是"是否用于训练")的明确约定、网络出口的审计日志——这些才是在出问题时能拿出证据的东西。
结尾
"把代码交给社区监督"是个积极的态度,但开源客户端只能证明你这一端做了什么,证明不了云侧留下了什么。这个边界,最终还是得靠产品把选项讲清楚、把默认值设保守,并给用户一个可验证的方式。
你在用哪款 AI 编程工具?会不会担心自己的代码被上传?评论区聊聊。