夜雨聆风学习资料网

ARTICLE · 1081119

Zcode 开源!来看看源码剖析吧.

Zcode 开源!来看看源码剖析吧.

“

当产品的信任模型建立在“你的代码不离开本地”之上时,任何隐含的数据上传行为都会摧毁这一信任前提。

📌 本文看点

01

313MB 加密包的完整上传链条还原

02

Agent 运行时三层架构拆解

03

391K 字符 Prompt 的 Claude 血统

2026 年 9 月 21 日,智谱(Z.ai)在数据上传丑闻的压力下紧急开源了 ZCode——不是模型(GLM-5.2/5.3 才是模型),而是包裹在模型外面的那层“壳”:Agent Harness。负责任务编排、工具调度、上下文管理、权限审批的一切。Apache-2.0 协议,三天 6,500+ star。

这篇不写“ZCode 是什么”,写“拆开 ZCode 的壳,看 2026 年的 agent harness 到底怎么造“——数据上传事件只是切入的钩子,真正的干货是运行时设计。

01

INCIDENT

开局:一次 313MB 的磁盘清理

2026 年 9 月 18 日,技术博主 ferstar 在磁盘清理时发现 ZCode 隐藏目录中有数百兆加密数据包。逆向分析揭示了完整的上传管道:

客户端向 /api/v1/snapshot/upload-credential请求临时凭据和 RSA 公钥 → 后台进程无差别压缩当前工作目录→ 本地生成对称密钥加密数据流 → 服务端公钥加密对称密钥 → 直传阿里云 OSS → 回调注册。

313MB

压缩后文件大小

42,411

文件数量

86.6%

Git 对象占比

564

失败重试次数

解密私钥完全由云端掌握——双层加密的设计意图不是保护用户,是保护传输。用户既不能本地解密,也不知道传了什么。

太原承明科技的企业级取证更狠:6 个工作区、34,549 个文件,上传内容包括数据库访问凭据、云服务 API Key、员工个人信息。登录后自动触发,客户端无法禁用,隐私文档未披露。

「“没有人有 300MB 的提交消息”——HN 社区对智谱“仅上传元数据”说法的回应。300+ MB 的文件里 86.6% 是 Git 对象,这显然是完整的仓库内容,不是元数据。」

72 小时时间线

9/18 下午

第一份致歉,归因于“代码库索引”功能,称数据在生成 Repo Wiki 后“立即销毁”

9/19

紧急补丁。承明科技取证指出 v3.12.3 声称已修复,但上传行为持续到 9/16

9/20

宣布“数据内容不留存”政策

9/21

正式开源 ZCode(Apache-2.0),邀请 CAICT 和绿盟第三方审计

The Register 定性:“damage control rather than a pre-planned initiative“。开源是被动决策,不是预谋。

💡 开源 ≠ 透明:ferstar 指出智谱“擦除了补丁前的提交记录和用于上传文件的源代码”——独立验证原始漏洞范围的路径被切断。开源的是客户端,无法回答服务端数据流、密钥保管的问题。

离岸实体争议

ICP 备案主体是北京智谱华章(境内),但 Z.ai 隐私协议中的数据控制者是新加坡注册的 JINGSHENG HENGXING TECHNOLOGY PTE. LTD.。其马来西亚子公司注册资本约 2 元人民币。跨境传输的责任主体是谁——智谱未正式回应。

02

ARCHITECTURE

AgentRuntime 拆解:它不是 ReAct

ZCode 不是模型,不是 IDE 插件。GLM-5.2/5.3 才是模型,ZCode 是包裹在模型外面的 Agent Harness。核心代码在 apps/zcode-cli/packages/core/。

三层分离架构

AgentRuntime (src/runtime.js)

编排中枢:AI 模型调用、工具执行协调、上下文构建、会话存储(SQLite)

ToolScheduler (src/tool/scheduler.js)

工具排队与执行排序、冲突检测

ToolExecutor (src/tool/executor.js)

实际工具调用的执行层

💡 Scheduler/Executor 分层值得借鉴:调度与执行分离是好的抽象,调度层可以独立处理并发策略、超时控制和优先级排序。

主循环:结构化 Plan,非纯 ReAct

主循环不是纯 ReAct,而是结构化的 explore → plan → approve → implement 流程。五种权限模式通过 Shift+Tab循环切换:

模式
行为
对应 Claude Code
Default
每次变更前确认
默认模式
Confirm Before Changes
关键代码变更前确认
—
Auto Edit
文件编辑自动执行,命令需确认
Auto-accept edits
Plan Mode
先出方案后执行
EnterPlanMode
Full Access
最小中断
dangerouslySkipPermissions

独有的 Goal Mode粒度比单次 Plan 更粗——用户定义一个复杂目标,Agent 自动拆解为文件编辑、终端命令、测试运行等可执行步骤。

子智能体:代差明显

维度
ZCode
Claude Code
Codex CLI
子智能体类型
2 种内置
多类型
manager-worker
嵌套深度
≤1 层
≤5 层嵌套
扁平
并行能力
有限前台并发
后台运行
≤8 并行沙箱
跨 Provider
✅支持混合模型
仅 Anthropic
仅 OpenAI

唯一亮点:跨 Provider 混合子智能体——同一 session 内两个子 agent 可以使用不同厂商的模型。

03

CONTEXT

上下文压缩:最值得抄的一段

GLM-5.3 的 1M token 窗口,压缩触发阈值(硬编码,不可配置):

触发阈值 = 上下文窗口 − 输出预留 − 缓冲 token

= 1,000,000 − 21,000 − 13,000

= 966,000 tokens(96.6%)

社区实测了六条配置路径——全被堵死。

两级压缩机制

第一级:Microcompaction(微压缩)——把旧的工具执行结果替换为占位符,只保留最近 5 个工具结果。极低开销。

第二级:Full Compaction(全量压缩)——使用 LLM 对对话历史进行摘要总结。摘要 prompt 被包在显式的 no-tools 前言里,防止压缩过程意外触发工具调用。

Rapid-Refill 熔断器

RAPID_REFILL_TOOL_TURN_THRESHOLD = 3

MAX_CONSECUTIVE_RAPID_REFILLS = 3

它承认了一个现实:当会话的活跃工作集本身就接近窗口大小时,压缩是无效的。与其无限循环压缩,不如直接熔断。

!踩坑提示 🕳

Issue #779——Plan 模式下上下文超限导致无限重规划循环。

04

PROMPT

391K 字符的 System Prompt

2026 年 8 月 15 日泄露,总计 391,439 字符。

文件
内容
规模
Prompts.md
身份声明、工具使用指令、安全护栏
主体
Tools.json
24 个工具合约
~20K
Skills.md
4 个技能剧本
~1K

此泄露未获 Z.ai 官方确认。

与 Claude Code 的同源证据

同源指标
具体表现
工具命名
逐字匹配——Read、Write、Edit、Bash、Agent…
技能内容
docx 技能措辞与 Anthropic Agent Skill 完全相同
身份指代
prompt 中同时出现 “Claude agent” 和 “ZCode”
架构模式
Plan 模式、探索模式完全一致

Prompt 工程三个启示

1

规模膨胀——40 万字符吃掉 1M 窗口约 40%

2

冗余设计是工程妥协——同一规则在不同模式中重复表述,是当前 LLM 对条件逻辑理解有限的妥协

3

安全条款的散布式策略——集中放在开头容易被“遗忘”,散布更可靠

05

SANDBOX

沙箱缺失

「“共享 Agent 执行适配器不提供默认操作系统沙箱”——ZCode 官方文档原话。」

维度
ZCode
Claude Code
Codex CLI
OS 级沙箱
无
Seatbelt/bubblewrap
内核级
服务端分类器
无
独立分类器
—
权限跨压缩
不保留
—
持久化
Bash 限制
仅用户审批
沙箱+allowlist
沙箱隔离

Coding Plan 端点“自动转发至 ZCode 网关,保留请求头与认证信息“,且”此转发未设置额外的逐次用户确认“。

06

TOOLS

工具系统

24 个工具合约,与 Claude Code 名称完全一致的:Read、Write、Edit、Bash、Agent、SendMessage、WebSearch、WebFetch、Skill、TodoRead、TodoWrite、EnterPlanMode。

ZCode 独有:CronCreate、CronList、CronUpdate、CronDelete。

代码编辑采用 search-replace block 策略。

15 个子包,零生产依赖

子包
职责
关注原因
@zcode/core
AgentRuntime 核心
灵魂
@zcode/adapters
Provider 适配器
BYOK 支持
@zcode/telemetry
遥测数据收集
审计优先级最高
@zcode/debug
network-capture / observation-events
审计优先级最高
07

PROVIDER

Provider 系统

支持 Anthropic 兼容和 OpenAI 兼容两种协议族,9+ 后端。

协议族
支持的后端
Anthropic 兼容
Claude、Moonshot、MiniMax、DeepSeek
OpenAI 兼容
GPT、OpenRouter、小米 MiMo、DeepSeek
GLM 官方
BigModel、Z.ai

!踩坑提示 🕳

Coding 端点和通用端点不可互换。

$5.80/MTok

GLM-5.3(输出 43K/任务)

$30.00/MTok

Claude Opus 5.5(输出 24-35K/任务)

实际每完成一个任务的成本优势约 4×。

08

COMPARISON

横向对比

维度
ZCode
Claude Code
Codex CLI
形态
Electron ADE + CLI/TUI/Web
CLI + VS Code + 多表面
终端 + 内核沙箱
沙箱
无
Seatbelt/bubblewrap
内核沙箱
钩子
7 个,默认关闭
25+ + OpenTelemetry
有限
MCP
全面 + 插件市场
全面
支持
上下文
1M,不可配
~1M,自适应
272K
模型锁定
BYOK 9+
仅 Anthropic
仅 OpenAI
独特触达
微信/飞书/Telegram
—
—

钩子可编程性是最关键差距。

09

BUGS

v3.14.0 的账

Issue
问题
严重度
#739
会话持久化从 166ms → 2,674ms,峰值 7.3 秒
阻断
#714
未打开的项目也加载进内存
阻断
#746
Windows 下启动阻塞 5-7 秒
严重
#794
Linux 下日志填满磁盘至 98%
阻断
#779
Plan 模式无限重规划循环
阻断
#789
付费计划返回“余额不足”
阻断

packages/zcode-cua(Computer Use Agent)标注“不可用占位实现“。

10

BENCHMARK

Benchmark 归属

Benchmark
GLM-5.2
GLM-5.3
Claude Opus
SWE-bench Pro
62.1
—
—
Terminal-Bench 2.1
81.0
—
85.0
Terminal-Bench 3.0
4.6
28.3
—
DeepSWE v1.1
46.2
66.9
—

💡 ZCode 作为 harness 的独立评测数据:查不到。没有端到端评测,没有可复现脚本,没有论文。

∞

THE END

Harness 不是护城河

「架构同源性:harness 层面的差异化越来越难维持。真正的护城河在模型能力和分发渠道。」

「安全设计就是核心竞争力:当产品的信任模型建立在“你的代码不离开本地”之上时,任何隐含的数据上传行为都会摧毁这一前提。」

「工程完成度严重不均衡:核心运行时设计精巧,外围桌面体验明显落后。」

给工程师的行动建议

1

优先审计 @zcode/telemetry和 packages/services中的遥测代码

2

生产使用务必跑在 Docker/VM里

3

对比 AGENTS.md(ZCode)和 CLAUDE.md(Claude Code)的功能边界

4

关注 v3.14.x 的性能修复进展

本文基于 DeepWiki 文档、博主分析和社区讨论,未直接通读完整源码。391K prompt 泄露未获官方确认。

快速参考

资源
链接
GitHub 主仓库
github.com/zai-org/ZCode
官网
zcode.z.ai
数据上传争议
HN #49750694
Prompt 泄露分析
explainx.ai(未证实)
运行时对比
Kiloloop 研究
The Register 报道
Z.ai says sorry
END

我是月谈AI,热衷于AI前沿技术分享。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

相关学习资料