9月18日白天,AI圈炸了个大雷:智谱的ZCode被开发者取证曝出“整仓上传”——在你登录的状态下,它会把整个项目工作区(连同全量 .git 提交历史)静默打包、加密,直传到阿里云OSS,解密密钥只在智谱服务端。 傍晚官方回应:承认问题出自默认开启的RepoWiki代码索引功能,称已修复、致歉、补发周额度,并宣布开源ZCode。知乎微博
文档党第一反应可能是:我又不写代码,关我什么事?关系大了——凡是“把一整个文件夹交给AI”的使用方式,在这条快照管线面前和代码仓库没有区别。小红书那篇“Codex+Obsidian自生长知识库”教程收了25969次藏,还有把整个云盘交给AI整理的、把合同包和论文堆直接丢给文档助手的——工具要静默拍你工作区的快照时,它不区分那是代码还是你的文档库。
这个包,比你以为的厚
发现过程很朴素:开发者ferstar清理磁盘,翻出 ~/.zcode 占了七百多MB,v2/checkpoints 底下躺着一个313MB的 .enc 加密包,旁边状态文件写着 failureCount: 564——这个包已经重试上传失败了564次,一直压在本地排队。知乎

把客户端的 app.asar 逆向之后,链路是全的:你每次发送prompt前,先捕获一次工作区快照;任务结束时再补一次(标记名就叫 repo-wiki-update),单个活跃会话最多记录到62次。客户端向 zcode.z.ai 申请上传凭证,服务端下发RSA公钥、大小上限和OSS表单签名,本地把工作区打成tar.gz、AES加密,对称密钥再用RSA包一层,直传对象存储,回调登记。知乎
内容比链路更刺眼。ferstar那份42,411个文件的快照清单里,.git 占86.6%(LFS 196.1MB、objects 102.2MB),真正的源码加文档只占13.4%。冯若航在自己机器上的独立取证更狠:一个工作区快照的 .git 字节占比93.9%,另一个98.5%。 一句话,带走的不止是你的代码,是你代码的族谱——每一个历史版本、早就删掉的配置文件、从没推送过的分支名,全部随 .git/objects 和 reflog 原样打包。他逐条扫了78,141个blob对象,还抓到一个设计细节:文件筛选链里,.git 的放行排在所有排除规则之前,密钥过滤和1MB体积上限对 .git 下的东西永远不生效——你为了清掉敏感数据专门跑过 filter-repo 重写历史?被清掉的东西恰恰躺在 .git/objects 里跟着走。知乎
NodeSeek上的Windows实测补上了平台维度:一台机器32个工作区被抓过快照,最大单包107MB。 模型渠道也无关:哪怕你用第三方API中转、推理请求直连自己的服务器,快照照样拍、照样传——它只认登录态。知乎
两个关掉的开关,一份没写的政策
这是整件事里最值得文档党记的部分。
设置里有两项看着对得上号的开关:“优化体验”(拿不拿你的数据训练)、“仓库快照索引”(服务端建不建索引)。但冯若航机器上9月13日到18日的日志里,repoSnapshotIndexingEnabled 这个字段出现1,339次,全是false,一次true都没有——而那四份快照全造在这几天里。 另一位独立取证的付费用户,他中招的快照旁边同一分钟(精确到0.3秒)的记录是:两个开关全false,快照照样打包,状态文件里留着 lastAcceptedManifestHash——服务端已受理,本地密文随后被清理。 issue #707 提交者实测:把开关关成false,上传痕迹照样出现;把排队的加密包删掉,半小时内客户端重新打了个新的,失败计数从564走到565。知乎知乎知乎

再说纸面。ZCode隐私政策现行版本今年6月15日更新,收集范围写的是“你通过对话提交的文本、文件、图片、音频、配置参数、shell命令”——后台快照不是“通过对话提交”的,这条管不到它。十五条官方FAQ,没有一条提快照、上传或数据去向。知乎
加密方案本身是教科书式的信封加密,这恰恰是问题:私钥只在云端,你自己硬盘上那份313MB密文,你解不开,客户端也解不开——ferstar拿本机所有私钥试了一遍,全部失败。备份的底线是主人随时能取回。用冯若航的话说:一份所有者解不开的备份,在定义上不叫备份,叫采集。知乎
事实划到哪儿
事件还在发酵,有几处不能抢跑——取证博主们都自己画了红线,这里原样保留。
上传不等于训练,更不等于泄露:两份独立取证都只证明了“传输和受理”,没有任何一份证明服务端拿这些数据做了什么。冯若航的签名私钥也没进包——排除表是存在的,只是薄:他那个3,139字节的签名公钥因为后缀叫 .asc、不含token和secret字样,从密钥过滤器的缝里漏了进去。知乎

官方的致歉、修复、补额度目前主要经由媒体报道和用户群转述,正式公告全文还没见着——“修复”覆盖的是索引还是快照管线本身,要等智谱说清楚。还有一条对不上的账:一位博主的Windows样本里,manifest列了3,861个文件、零条 .git 路径,和macOS样本八成六是仓库史的构成完全相反——是版本差异还是修复已落地,时序核不了。ferstar在原文末尾自己写着:这是特定环境下的调查,不构成对官方行为的最终认定。知乎
三关,文档党真正要带走的东西
冯若航给“判断一个AI工具是否尊重你”提了三个问题,恰好是文档党该拿去问每一个要碰你文件夹的工具的验收单:
数据范围是不是最小必要? 推理只需要你问的那份文件,工具拿走的是不是整个文件夹——外加历史版本?
钥匙在谁手里? 它替你做的备份、索引、缓存,你能不能自己打开核对?
能不能关? 存不存在一个管“采集”本身的开关——而不是只管训练和索引的开关?关掉之后,日志里有没有痕迹?
放到文档场景里,第一问最隐蔽。笔记软件的版本历史、云盘的回收站、Word文档的修订记录,就是文档侧的“代码族谱”:你“删掉”的旧合同、废稿、批注,从来不从历史里真正离开。ZCode这次是 .git 先放行、过滤器形同虚设;下次换个工具,可能换成你的“版本历史”先放行。顺带说一句,跟着快照一起走的那些全局配置(mcp.json、settings.behavior.json),对应到文档党的文件夹,就是那些躺着网盘token、机器人密钥的配置文件。知乎
今晚能做的三步
ZCode用户,按原帖流传的缓解方案来:一开 ~/.zcode/v2/checkpoints,找哈希命名的目录,里面的 state.json 会告诉你你的快照多大、失败了几次、有没有被受理;二想临时停掉,macOS用 chflags uchg、Linux用 chattr +i 锁死checkpoints目录,代价是回滚和时间线失效,对话补全不受影响——或者走代理按路径REJECT掉 zcode.z.ai 的 /api/v1/snapshot/upload-credential 这一个接口(别封整域,登录计费会一起断);三如果确认命中过敏感仓库,把已上传的当已泄露处理:轮换密钥、清理历史凭证、评估暴露面。知乎
不用ZCode的文档党,这轮值得做一遍重审:下次点“授权整个文件夹”之前,先把三关问一遍;官方“不会存储、不会用于训练”这类你无法自证的承诺,按“先信”记账;开关状态、本地缓存目录、隐私政策的收集范围原文,这些能自证的一条条自己翻。issue #709 提交者列的五条诉求——数据流向披露、开关默认关闭、用户能解密自己的数据、修订政策、提供删除渠道——是合格线,也是接下来盯的四件事:这四样不齐,致歉就只完成了公关的一半。知乎
整件事给文档党上的课就一句:当“AI越来越好用”的叙事撞上313MB的加密包,先被打包带走的,可能不是你的问题,是你的整个文件夹。