(以下综合原帖转述,事件与取证细节以原帖及所引报道为准。)来不及悼念 ZCode 了,接下来登场的是 KCode。——这句开头概括了一周内国产编程工具圈最戏剧性的一次更替:从"口碑最好的国产编程 Agent 之一",到静默上传被坐实、四天四次回应、全线开源,再到社区 24 小时内拆出"剪断云端连线"的再发行版。
事情的起点很日常:9 月 18 日,开发者 ferstar 清理磁盘时,在 ZCode 存储目录里发现一份 345MB 的项目快照——几乎全是项目核心资产,近九成是 Git 历史;ZCode 曾尝试把它上传 564 次。
目的地是阿里云 OSS,动作来自"备份+上传"功能:默认开启、事前无标注、客户端无明显关闭入口;压缩包加密、私钥只在服务端——用户找得到文件,打不开。他发帖后,许多人在各自路径里查到同类快照,"静默上传"被反复证实。
智谱四天内四次回应:18 日致歉(称源于"代码库索引"功能、已修复、全体补一周额度)、19 日发修复版、20 日宣布拟上线"数据不留存"、21 日将 ZCode 以 Apache-2.0 开源至 GitHub(github.com/zai-org/ZCode ),称经中国信通院与绿盟审计、涉事存储桶云端零数据。
"产品需要读取代码"与"平台可以把整个代码库上传至云端",绝非同一概念——界面新闻这句评论划出了整件事最关键的那条线。原帖把它拆成三个具体缺失:一,默认开启且没有关闭入口;二,用户看不到传了什么(加密、私钥在服务端、无从查验);三,实际范围超出申明(隐私政策写的是一回事、快照装的是另一回事,完整 Git 历史与全局开发配置本就不在同意清单里)。
一句话总结那条被踩破的线:读取代码是任务授权,把代码传出电脑是另一件事——需要单独知情、单独同意、随时能叫停;这三个入口,ZCode 都没给。
原帖还补了一笔同向的旁证:今年 7 月,xAI 的 Grok Build 被开发者发现会默认打包上传测试仓库,即便用户明确要求"不读取任何文件"仍把未读文件连 Git 历史传走;马斯克承诺删除,但随后测试发现退出选项管的是"是否留存",管不住"是否发送"。两个月两起,指向同一个方向:这个市场跑得太快,规则还没跟上。
开源能补什么、补不了什么,原帖也说得清醒。这一步比任何声明都实在——外部开发者可以直接读到产品如何读取、打包、传输,仓库已 6800 多 star;但开源的是修复后的代码:仓库里没有足以追查争议功能如何形成、又如何被移除的版本记录。
ferstar 的判断一针见血:即便未来出具完整第三方静态核验报告,也只能证明"存储桶在 9-20 之后确实被删了",客观上无法倒推 9-18 之前流转进去的数据是否被解密、同步或备份。
从 GitHub 拉到的源码,与你此前从官网下载的安装包,对应的不是同一个东西——仓库能证明今天的 ZCode 做什么,证明不了旧客户端过去做过什么。开源恢复了"从今天起"的可验证性,补不上昨天之前的行为空白。
事件的另一面是产品力确实第一梯队(桌面端 7 月发布、8 月用户破百万、社群誉为"更适合中国宝宝体质的 Codex"),两个长处值得记:兼容 Agent Plugins 规范——与 Claude Code 插件同一套(plugin.json 清单、预置插件市场、兼容 .claude-plugin 位置,生态直接复用);接第三方模型方便——除自家 GLM 外支持任何兼容 Anthropic/OpenAI 协议的服务,含团队自建通道。张力就在这里:值得继续用的体验,与受损且没完全修复的信任。
KCode 就是在这个张力里长出来的:ZCode 开源不到 24 小时,社区多个基于源码的项目出现,KCode 是其中之一——创建于 9 月 21 日官宣开源当天,Apache-2.0,官网 kcode.wiki ,源码版权归 Z.AI Co., Ltd 所有、属授权下的修改再分发,README 明确写着"与 Z.AI 无官方关联"。
它几天内连发三版,v0.0.4 当天发布(作者自述其中两条改动是自己的 PR,均已合并)。对照 README,改动几乎都在做同一件事——剪掉通往云端的连线:产品名与图标统一为 KCode;去掉 Z.AI 的登录、OAuth、套餐与升级实现,改为自行配置模型供应商、调用只发往你填写的地址;官方插件市场改为仓库内置目录、不再拉取 Z.AI CDN;内置插件创建器;批准菜单与计划模式按本仓库规则收口。Agent Plugins 体系与多供应商接入保留——体验继承,云端连线剪断。
两行数据流的对比,是全帖最锋利的图:ZCode 官方版(9/18 之前)——工作区代码→客户端打包加密→阿里云 OSS(默认开启、无提示、私钥在服务端);KCode——工作区代码→Agent 本地读取→只调用你配置的供应商(代码 Apache-2.0,每条联网行为可阅读、可审查)。
原帖由此给出判断:把代码传出电脑需要单独知情、可以叫停;KCode 对这个问题的回答直接写在代码里——没有官方云端可连,数据的边界就是代码的边界,谁都能自己翻看验证或交给社区审查;这跟"信任企业承诺"的差别就在这里。
但分析没有停在站队上,而是回到了整个市场的"心理基础"。大多数开发者对"厂商会收集数据"心知肚明甚至早已默认:Coding Agent 的原理就是把代码上下文发给模型,你每让它改一行代码,就在同意一次必要的传输;遥测、崩溃日志、用量统计更是行业惯例——这份默认能运转,是有前提的:知情和边界被尊重。
你知道自己发出去的是什么、你亲手划下的排除线工具不会越过。ZCode 把两条前提同时踩掉;更糟的是取证显示快照打包的是整个 .git 目录,而 .gitignore 只管工作树、不管历史——一个密钥文件只要曾被提交过,哪怕后来删掉并加进忽略名单,明文依然躺在 .git/objects 里,这次被原样带走。
"我默认的收集"就这样变成了"我不知道的搬运":没人在乎那几百 MB 流量,反弹这么猛,是因为默认被当成了授权、底线被当成了不存在。
收尾那句是全篇的落点:模型能力可以被追平、插件生态可以被复用,唯独"我的代码会去哪里"这个问题,每个产品都得自己回答,而且只能用行动回答——ZCode 官方版把答案系在企业承诺与事后审计上,KCode 把答案写进开源代码。值得留下的习惯只有一个:把工具装进项目之前,先弄清楚它会把代码送去哪里;能自己验证的,就不要只靠承诺。
把这篇放进今晚的序列,它是数据边界的第 5 篇,也是最完整的一次"事故到制度"的闭环样本:59438 讲厂商声明的可兑现、59798 讲十点形态、59859 讲"出口没锁等于没锁"、59918 讲披露颗粒度——这一篇补上用户侧的终审手段:当承诺与审计都只能覆盖"今天",唯一能回答"过去与未来"的是可被你亲自 diff 的代码。
给所有要装 coding agent 的人一句落地的:装之前三问——它会把什么送出去(范围)、从哪条出口送(通道)、我能不能关掉并验证(开关与可查性);三问有一句答不上,先让它在离线项目里跑一周,再谈接入你真正重要的仓库。













