ARTICLE · 1176926
00-序章-为什么我们要读ZCode源码
从 0 到 1 构建自己的 Agent:为什么我们要读 ZCode 源码?
这是「ZCode 源码阅读:从 0 到 1 构建自己的 Agent」系列的第 0 篇。
如果你正在读这篇文章,大概率你已经用过 Claude Code、Cursor、Windsurf 或者 ZCode 本身。你在终端里敲下一行指令,Agent 就开始读代码、改文件、跑测试、提交 PR——整个过程行云流水,仿佛对面坐着一个不知疲倦的程序员。
但你有没有想过:这一切到底是怎么运转的?
从一行命令说起
当你打开终端,输入 zcode 并按下回车,背后发生的事情远比表面复杂:
这个过程的核心是一个状态机,它驱动着 Agent 在「等待模型响应 → 流式接收 → 调度工具 → 执行工具 → 聚合结果 → 再次请求模型」之间不断循环。
ZCode 是什么
ZCode 是一个 AI 编程工作台,提供桌面应用、浏览器界面和终端 Agent 三种形态。它的 Agent CLI 源码位于 apps/zcode-cli/,是一个完整的 TypeScript Node.js 项目。
关键在于:ZCode 的 Agent 核心完全开源。你可以读到:
agent/turn-machine.ts)runtime/agent-runtime.ts,约 300+ 行的接口定义)tool/registry.ts、tool/scheduler.ts)permission/service.ts)context/builder.ts)compact/policy.ts)subagent/runner.ts)mcp/index.ts)memory/extraction.ts)workflow/)这不是一个玩具项目——它是一个生产级的 Coding Agent,支持多平台、多模型、远程工作区、MCP 协议、自定义技能、自动化任务等完整能力。
为什么值得读
市面上讲「如何构建 Agent」的文章很多,但大多数停在概念层面:ReAct 模式、Tool Use、Function Calling……这些当然重要,但它们不会告诉你:
1. 生产级 Agent 需要处理多少边界条件
一个真实的 Coding Agent 要面对的问题远不止「调 API + 解析 tool call」:
streaming-recovery.ts)2. 一个好的 Agent 架构长什么样
ZCode 的架构设计有几个值得学习的核心理念:
I/O 边界收敛:所有外部副作用(网络请求、文件读写、子进程)都必须收敛到 adapter 层,业务逻辑只表达意图,不直接触碰外部世界。
状态是一等公民:Session、Message、Tool Call、Permission、Checkpoint 都是一等状态对象,支持恢复、分叉、回滚。
TraceId 贯穿全程:每个操作都携带可传播的 traceId,从顶层 session 一路传到子进程、异步 I/O。
错误优先设计:错误是一等设计对象,默认向上冒泡到真正有能力处理的层。
3. 从源码中提取可复用的模式
你不需要用 ZCode 的全部代码,但你可以从中提取:
这系列文章怎么读
这个系列我会按照以下顺序,逐层拆解 ZCode 的 Agent 架构:
agent/turn-machine.tsagent/turn-state.ts | ||
tool/registry.tstool/scheduler.ts、tool/types.ts | ||
permission/service.tspermission/broker.ts | ||
context/builder.tscontext/sections/ | ||
compact/policy.tscompact/prompt.ts | ||
runtime/agent-runtime.tsruntime/types.ts | ||
runtime/methods/turn-loop.tsturn-model-step.ts | ||
subagent/runner.tssubagent/profile.ts | ||
mcp/index.ts | ||
memory/extraction.tsmemory/recall/ | ||
workflow/expert/workflow/scheduler/ | ||
每篇文章都会:
适合谁读
你不需要精通 TypeScript——ZCode 的代码可读性很高,类型系统清晰,注释详尽(甚至有些啰嗦)。你需要的只是对 Agent 架构的好奇心,和一点耐心。
开始之前
我建议你在阅读本系列时,把 ZCode 源码 clone 到本地:
git clone https://github.com/zai-org/ZCode.gitAgent CLI 的核心源码在 apps/zcode-cli/packages/core/src/ 目录下,这是我们后续所有文章的主角。
准备好了吗?让我们开始。
下一篇:Agent 的心脏——Turn 状态机。















































































