原文链接:智谱ZCode全开源:313MB偷传争议后,三端一核·统一Agent运行时全拆解
9月21日,智谱把旗下AI编程工具ZCode整个推上了GitHub。这不是一场精心策划的营销发布,而是一次危机后的“摊牌式开源”。三天前,有开发者发现ZCode在登录状态下会把整个工作区打包,静默上传到阿里云OSS;三天后,智谱选择把代码摊开给所有人看,邀请信通院、绿盟做安全审计,并上线“数据不留存”功能。
从“被指偷传”到“全量开源”:事件脉络与开源考虑
事情的时间线很短。9月18日前后,技术博主ferstar在排查磁盘使用时发现,ZCode本地目录里出现了一个约313MB的加密包。伴随的文件清单显示,这个包覆盖了约4.2万个文件,其中八成以上是项目历史修改记录。更关键的是,它正被尝试上传到阿里云OSS,且解密密钥只在智谱服务端。
博主观察到,在单次会话里,这个快照机制最多触发了62次记录,一个15KB的小文件已经成功外发。相关功能默认开启且缺少有效关闭开关,开发者社区迅速炸锅。
智谱当天就在官方用户群里道歉,解释称该功能用于“会话检查点恢复、历史版本回退和Repo Wiki生成”。Repo Wiki在云端生成页面后,上传数据会立即销毁,不会保存,也不会用于模型训练。但“默认开启+缺少显式授权”已触碰数据安全红线。
9月20日,智谱MaaS平台上线“数据内容不留存”功能,用户输入输出仅在当次请求中临时使用,结束后不落盘。9月21日,ZCode v3.14.0正式开源,Repo Wiki入口被移除,本地仓库快照的生成和上传链路被切断。中国信通院和绿盟科技的两份审计均确认:zcode-prod阿里云OSS存储桶“云端零数据”,全部数据对象及存储桶本身已删除。
对智谱而言,开源不是“额外动作”,而是把审查权交给社区、重建信任的最短路径。当代码可以被任何人拉下来检查时,声明才有说服力。
ZCode是什么?这次到底开源了什么
ZCode是智谱官方定义的Agentic Development Environment(智能体开发环境,ADE)。和传统IDE插件不同,它把对话窗口作为主界面,编辑器、终端、Git、浏览器预览都变成Agent可调用的工具。模型层与产品层解耦,默认接GLM,也支持OpenAI或Anthropic兼容接口。
这次开源的不是一个Electron客户端,而是整套产品。仓库采用标准pnpm monorepo,主要模块如下:
| 模块 | 作用 | 用户价值 |
|---|---|---|
| apps/zcode-cli | Agent CLI、TUI、运行时与工具系统 | 终端里敲zcode即可启动,无需Electron |
| packages/desktop | Electron桌面主进程与渲染层 | 支持Windows、macOS、Linux,x64与arm64 |
| packages/web | Web工作台(React + 本地后端) | 浏览器里跑zcode --web即可使用 |
| packages/ui | 共享React组件与状态 | 桌面端和Web端像素级一致 |
| packages/shared/rpc/services/server | 协议类型、通信契约、业务服务、HTTP:3030网关 | 三端共用同一套业务层 |
| dynamic-workflow | 动态工作流引擎 | 让主Agent用TypeScript脚本编排Sub-Agent |
开源首日,ZCode 在 GitHub 的 Star 已突破 5000、Fork 超 1500,迅速登上热榜。社区用脚投票,说明大家真正想要的是“可审计、可换模型”的开源 Coding Agent;这也从热度上印证:开源的不是 demo,而是一套生产级产品。撇开热度,单看代码结构同样扎实——它是一个分层清晰、模块边界明确的大型 monorepo,桌面端、Web 端、CLI 与共享层各司其职,Agent 运行时独立成核。
宏观架构:三端一核,共享Agent运行时
从目录结构可以把ZCode抽象成“三端一核”。最上面是三个入口:桌面端Electron、Web端React、命令行TUI。三者共享同一套Agent运行时,不是三个项目假装一个产品。
中间层是packages:ui提供设计系统,shared与rpc负责类型协议和通信契约,services处理业务与持久化,server承担HTTP:3030网关和WebSocket,统一接入三端请求。
最下面是Agent运行时,位于apps/zcode-cli/packages/core。它是整个系统的大脑,拆成四根柱子:回合状态机、工具系统、子代理和上下文工程。所有上层交互最终都会落到这一层执行。
公开分析指出,仓库里有一份architecture-policy.yaml,核心作用是约束层间依赖。比如UI组件不许直接调服务,必须走hooks;Electron主进程只管窗口和原生操作,禁止碰业务状态。这种“把架构师的经验写成CI规则”的做法,在大型Agent项目里并不多见。
Coding Agent如何组织和运行
ZCode的Agent运行时把一次对话回合拆成严格的状态流:输入→上下文组装→流式响应→工具调用→结果回填。每一步都有明确归属,哪一步出错就查哪一步。
工具体系采用注册表、调度器、执行器三层分离。所有读过的文件会被file-state跟踪,工具路径受path-policy约束。内置工具之外,MCP的stdio、http、sse三种协议都支持,意味着开发者可以直接接入社区已有的MCP服务器。
子代理系统是隔离重活的关键。Explore型子代理只读,负责探索代码库;general-purpose型子代理可以写文件,承担具体实现。主Agent把脏活外包出去,自身上下文不被污染。每个子代理有独立的工具策略,写权限不是默认给的。
上下文工程则解决长会话的“上下文爆炸”问题。compact负责会话压缩,memory负责跨会话记忆,system-reminder在对话中动态注入系统提示。它的做法不是简单截断,而是压缩、外置、按需召回。
如何通过Workflow编排多个Sub-Agent
ZCode的动态工作流允许用户通过/workflow命令启动一个由多个Sub-Agent协作完成的复杂任务。使用侧的体验很像写一段“任务剧本”:先声明有哪些子任务、每个子任务由哪个角色的Agent负责,然后由主Agent统一调度。
支撑这套体验的是dynamic-workflow包。主Agent会把用户意图翻译成一段TypeScript脚本,脚本里明确定义输入输出类型和Sub-Agent调用关系。编译器会对脚本做类型检查和schema合成,随后把它放到一个子进程+vm沙箱里执行。
这种设计的意义在于:模型的即兴发挥被类型系统约束住了。它不是“想好再动”,而是“先写成有类型的代码,再动”。沙箱执行还能隔离风险,即使工作流脚本出错,也不会污染主Agent的上下文或随意修改文件。
Sub-Agent之间共享仓库上下文,但保持独立内部状态。用户只需要在脚本里定义清楚角色边界,系统就会自动把读写权限、工具策略和上下文隔离落实到位。
动态工作流:和普通工作流有什么区别
普通工作流通常是预定义好的模板,节点和边在代码里写死,运行时再填参数。ZCode的动态工作流则允许主Agent在运行过程中“写代码来定义流程”。遇到复杂任务时,它可以先生成一段TypeScript工作流脚本,编译通过后再调度执行。
一次/workflow就能完成跨文件重构、批量生成单测、依赖审计等过去要多次对话的长链路任务。它把“规划”与“执行”拆成两步:规划产出可类型检查的代码,执行被沙箱隔离,既保留模型灵活性,又把流程纳入工程约束。
分级执行模式:把权限交给用户而非模型
ZCode 提供四档权限。Plan 模式先出变更方案等人拍板;confirm-before-change 对终端、改文件、联网等高风险动作再加一次确认;auto-edit 允许低风险改动自动落地;full-access 放开权限,适合可信的长任务。按任务风险自己选档,切换成本很低。
权限门禁嵌在工具调用链路上。每次工具调用先过策略层,命中高风险类型就触发确认或拦截,模型无法绕过。这种“权限渐进”思路与 Gartner 对 AI Agent 治理风险的提醒一致:自主越强,越要把刹车交给人。
Goal Mode:让 Agent 带着可验证目标长跑
用户用一个可验证的高层目标启动 Goal Mode,比如“让这个接口通过全部单测”。之后 Agent 自主规划、执行、测试、回顾,用户随时能看进度看板、暂停、注入纠正或标记完成,不必守在对话框前。
目标被拆成有序子任务,进入“计划—执行—测试—复盘”循环,直到目标被验证完成或卡在需要人决策的点。进度写成持久化检查点,会话重启不丢,直接解决传统 AI 编程“关窗即失忆”的痛点。
MCP 与插件:把外部能力接进 Agent
ZCode 内置 20 多个工具覆盖 Git、终端、文件浏览、浏览器上下文,还支持把 MCP 服务器打包进插件。更省心的是能直接复用为 Claude Code、Codex CLI、OpenCode 准备好的 MCP 配置,换工具不换生态。
工具注册表支持 MCP 的 stdio、http、sse 三种传输。插件安装后,它携带的 MCP 服务器被动态加载进工具系统,新能力无需改核心代码就能挂上,扩展边界交给社区。
远程任务与空闲调度:让 Agent 在别处替你跑
Remote Control 让你在手机或 Web 端审批桌面上的长任务;Idle Task 能把批量补单测、注释重构等非紧急活排队,等机器空闲再跑,不占你干活时的资源。
远程通道只传元数据、diff 预览和审批信号,真正的文件写入和 shell 执行仍发生在原开发机;空闲调度基于本地资源探测触发。文件不出本机,破坏性动作仍需手动确认。
多模型 BYOK 也是标配:除 GLM 外,还支持 OpenAI、Anthropic、DeepSeek 等兼容接口,模型层与产品层解耦。
写在最后:开源之后,考验才真正开始
ZCode的开源事件,把AI编程工具的一个长期问题摆到了台面上:当Agent能读文件、调终端、改代码时,厂商如何证明自己不会顺手把用户数据搬走?智谱的回应是:开源代码、第三方审计、零数据留存。
但开源不是终点。代码透明之后,漏洞响应机制能否持续、后续版本是否保持干净、社区贡献能否真正改善架构,才是重建信任的关键。
你怎么看Coding Agent的“数据安全”与“功能便利”之间的平衡?你会优先选择可本地审计、可换模型的开源方案,还是体验更丝滑的闭源工具?欢迎在评论区聊聊,觉得有用的话点个「在看」+「收藏」,方便下次回看。
【欢迎访问我的个人博客主页,这里有我的精选文章和AI大模型日报专栏。👇)