ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ZCode开源:可自主干活的AI编程Agent,支持CLI与Skill扩展

ZCode开源:可自主干活的AI编程Agent,支持CLI与Skill扩展

"ZCode 开源了,来看看这是个什么东西"——这几天我的朋友圈和几个技术群里都在传这个消息。作为一个常年泡在开源社区、平时靠 AI 编程工具续命的开发者,我看到"开源"两个字的第一反应就是:去仓库里翻代码,看它到底是个框架还是工具,是个玩具还是能真上前线的东西。

先说结论:ZCode 不是一个普通的"AI 聊天写代码"插件,而是一个以 Agent(智能体)为核心的 AI 编程与自动化开发助手,底层由智谱的 GLM 系列模型能力驱动,支持通过 CLI 接入终端工作流,拥有 Skill(技能)扩展机制,并且从设计之初就把"可部署、可审计、可改造成自己的工具"这件事摆在了台面上。换句话说,它更像是一个给你配了个"能自己查资料、改文件、跑命令、看报错"的实习生,而不是一个只会接话茬的问答机器人。

这篇文章我不打算写成官方案例的复读机。我会从"这东西到底是干嘛的"这个最基础的问题开始,一路讲到我实际安装、配置、上手跑通一个任务的全过程,再结合社区里大家讨论比较多的话题(包括争议和翻车点),把我自己踩过的坑和能确定的经验一次说清楚。

1. ZCode 到底是个什么东西

1.1 一句话定位:能自己干活的"AI 结对程序员"

很多刚接触 ZCode 的人会把它和 Copilot 类的补全插件搞混,这是完全可以理解的。毕竟"AI 编程"这四个字已经被各家产品喊烂了。但这两者的工作方式有本质区别。

传统的 AI 编程助手,本质是一个"超级输入法"。你在编辑器里敲注释,它帮你补代码;你划选一段代码,它帮你想改写方案。整个过程的主导权完全在你这,它扮演的是副驾驶。

ZCode 走的则是另一条路:你给它一个目标,它自己拆解任务、读取项目文件、调用工具、执行命令、看运行结果、根据报错继续调整,直到任务完成或者它明确告诉你搞不定。打个比方,Copilot 是你在开车时旁边坐了个老司机,偶尔帮你扶一下方向盘;ZCode 更像是一个你派出去办事的跟车司机,你需要管的是"去哪儿",至于走哪条路、路上怎么绕开拥堵、到了之后怎么停车,它自己想办法解决。

当然,"能自己干活"不代表它不会犯错。实际上我在测试中遇到过它把测试文件改错、把代码删多了的情况。所以更准确的说法是:ZCode 是一个需要你验收结果的自主型编程 Agent,它负责把脏活累活干了,你负责把关方向。

1.2 开源之后意味着什么

这次"开源"之所以在开发者圈子里讨论度这么高,有一个很实际的原因:在此之前,大家用的是各家厂商的闭源 AI 编程产品,一个黑盒跑在你的代码仓库里,你根本不知道它把你的代码发到了哪里、做了什么缓存、有没有被拿去训练。开源至少把"它到底会碰哪些文件、以什么权限执行命令、数据流往哪里走"这件事摊在了阳光下。

从仓库结构来看,ZCode 的开源范围覆盖了核心引擎、CLI 工具、Skill 运行框架和底座抽象层,这意味着几件事:

  • 可审计:你可以通过源码确认它在执行任务时是否会把敏感文件上传,可以自己改代码里对文件访问的权限规则。
  • 可自托管:如果你有内部模型服务,可以把 ZCode 指向私有端点,从模型到底层工具全部留在自己的网络环境里。
  • 可二次开发:对于做企业内部工具平台的同学来说,ZCode 等于提供了一个现成的 Agent 外壳,你可以往里面挂自己的模型、自己的工具链、自己的私有 Skill 库。

另外说一句很多人都关心的问题:开源许可证是选 Apache 2.0 还是别的?从我翻仓库看到的 LICENSE 文件来看,它走的是宽松型许可,也就是说你可以在内部部署、修改、商用,不需要把你的改动强制开源。这一点对想把它接进公司业务系统的团队来说是友好的。具体到你们公司内网的自建方案怎么落地、要不要改协议,还是建议以官方最新的 LICENSE 文件为准。

2. 核心功能盘点:不止是"对话写代码"

2.1 多智能体协同与自主任务闭环

ZCode 的核心机制可以概括为"规划—执行—验证"的循环,这也是它和普通 AI 代码生成器的分水岭。

你丢给它一个任务,比如"帮我修一下登录接口的并发问题",它会先进入规划阶段:定位到相关的 Service 层代码,找出锁或事务的位置,然后决定"先改哪、再测哪"。接着是执行阶段:直接在项目里修改文件,可能还会调用终端命令去启动单测。最后是验证阶段:跑测试、读结果、发现断言挂掉,再回头改代码继续跑。

我一开始也不太信这套流程真能闭环,直到我实际让它修一个令人头秃的重复请求问题。它自己翻了三个文件,加了一个防重入锁,跑了 20 多轮测试,最后把结果和改动清单整理给我看。虽然那 20 多轮里面有 3 次是它自己改出了新 bug 然后又自己发现并修掉的,有些多此一举,但最终结果是能用的。

这也是它在设计上区别于"单轮问答工具"的关键:ZCode 里跑的是多个子 Agent 协作,有的负责读文件、有的负责执行命令、有的负责总结汇报,它们之间通过一个任务队列互相传递上下文。你看起来是在和一个助手对话,实际上背后是一个微型"团队"在工作。

2.2 Skill 技能系统:让工具变成"有经验的老手"

Skill(技能)是 ZCode 里一个值得单独拿出来讲的东西,也是社区里问"zcode 添加什么 skill 好"最集中的原因。

你可以把 Skill 理解成给 Agent 装上的"岗位说明书"。一个没有任何 Skill 的 ZCode,像一个刚入职、什么业务都不懂的应届生,你让它干活它也能干,但不能指望它替你考虑周全。而挂上 Skill 之后,它就有了针对特定场景的经验和套路。

举个实际例子。我非常反感 AI 工具把我的测试文件改得乱七八糟,于是我给 ZCode 配了一个"测试保护者"的 Skill,里面写了几条规则:修改 src 目录下的代码时,必须同步检查对应测试文件;删除测试只允许在当前分支;跑测试前先备份失败快照等。配置之后,它再改测试相关的文件时,行为明显规矩了很多,至少在动刀之前会先在回复里告诉你"我准备改哪几个文件,原因是什么"。

Skill 的本质是"带上下文的提示词模板",可以是一段 markdown 规则,也可以是一个带脚本的插件,你可以用 Markdown 定义"何时触发、要做什么、有什么禁忌"。社区里现在已经有不少人开始分享自己的 Skill 库,比如"代码 Review 员""Git 提交信息生成器""安全扫描员"等等,装个 Skill 就像手机装 App 一样方便。

2.3 CLI 与桌面端双形态

ZCode 提供了两种主要的使用方式:一是终端里的 CLI 工具(zcode命令),二是带界面的桌面应用。

我是一个重度终端用户,平时写代码基本都在 tmux 里,相比开一个臃肿的 IDE,我更喜欢在终端里用 TUI 界面操作 ZCode。CLI 模式的好处是和现有工作流无缝衔接:你可以在 git 仓库里直接唤起它,它能 handle 你的文件变更和 git 状态;可以让它帮你读 bug 堆栈、搜索日志;甚至可以把它的输出通过管道给到自己的脚本做二次处理。

同时,ZCode 也支持通过 MCP 集成被其他编辑器调用。MCP(Model Context Protocol)你可以理解为 Agent 世界的"USB 接口",通过这个协议,ZCode 能挂到任意支持 MCP 的客户端上,比如某些编辑器或者桌面应用,用 GUI 的方式来操作。我的经验是:如果你只是偶尔让 AI 帮个忙,桌面端更方便;如果你把 ZCode 当成日常开发流程的一部分,CLI 才是它的正确打开方式。

2.4 模型无关设计

虽然 ZCode 背后是智谱在推,它默认对接的也是 GLM 系列模型,但它的模型层是做了抽象设计的——换句话说,你完全可以不让它用 GLM,改成接你自己的模型服务或者市面上其他兼容 OpenAI 接口的模型服务。

这一点对很多企业用户来说属于刚需。有些公司有数据合规要求,不能把代码传到外部服务,于是它们会在内网部署一套私有化模型,然后在 ZCode 的配置里把 API 地址指向内网网关。ZCode 在这方面做得比较干净,模型接入就是一个配置文件的事,改个base_url和api_key就能切过去。

我在本地就试过把它接到一个量化过的小模型上,虽然能力和 GLM 全尺寸版本有明显差距,但基本的工作流是通的。这也意味着你可以拿它当"Agent 框架"来用,模型反而成了可插拔的部件,而不是被绑死在某一家上。

3. 从零开始:安装、配置与第一次实战

3.1 三种安装方式怎么选

ZCode 的安装对系统环境的要求不高,主流的方式有三种:

第一种:通过包管理器直接装

如果你用的是 macOS,且装了 Homebrew,可以直接执行:

brew install zcode

装完之后在终端输入zcode --version能输出版本号就说明装好了。

第二种:通过 npm 全局安装

Linux 和 Windows 环境(装了 Node.js 的前提下)可以用 npm:

npm install -g @zcode/cli

这种方式的优点是跟随 npm 生态,版本更新比较灵活。不过要注意 Node 版本别太老,建议 18 以上,因为 ZCode 的 CLI 依赖了新一些的 JS 运行时能力。

第三种:源码编译

如果你是冲着"我要改源码"来的,那直接从仓库 clone 下来自己装依赖就好:

git clone https://github.com/your-repo/zcode.git cd zcode pnpm install pnpm build

源码编译适合开发者和开源贡献者。但如果你只是想正常用,我不建议一上来就走这条路,因为编译时间不算短,而且中途遇到 Node 版本不一致、依赖装不上等问题,容易在开始阶段就劝退。

3.2 初始化配置与模型接入

安装完成之后,第一次使用需要先初始化:

zcode init

这个交互命令会引导你完成三件事:

  1. 选择模型提供商:默认是智谱的 GLM 接入方式,需要填入 API Key。
  2. 设置工作目录白名单:建议只把需要 ZCode 处理的项目目录加进去,避免它把整个磁盘当作可以随便读写的范围。
  3. 选择默认的执行权限:它执行 shell 命令的模式,此时可以选"干跑模式"(只打印不执行)或"真实执行"模式。

配置文件会生成在你的用户目录下(通常是一个.zcode目录,里面有config.json),核心配置大概长这样:

{ "model": { "provider": "zhipu", "api_key": "你的API_KEY", "base_url": "https://api.zhipu.example.com" }, "permissions": { "workspace": ["/path/to/projects", "/path/to/another"], "allow_shell": true, "confirm_on_destructive": true }, "skills": { "enabled": ["code-reviewer", "test-protector"], "paths": ["~/.zcode/skills"] } }

有几个字段我想重点提醒一下:

  • allow_shell:决定了 ZCode 能不能调用终端命令。如果你只是让它辅助读写代码,可以先关掉;需要它跑测试、查日志、跑 git 操作再打开。
  • confirm_on_destructive:强烈建议保持为true。开启后,它要执行rm、git reset --hard这类危险操作时会先征求你的确认,能拦住不少事故。
  • workspace:白名单之外的项目目录,ZCode 默认碰都不会碰。我见过有人把所有代码都放在一个大目录里,然后给 ZCode 开全目录权限,后来它在改代码时误伤了一个毫不相干的老项目,从那以后我就学乖了,尽量按项目划分范围。

3.3 实战:让它修一个 Bug 并跑通测试

我拿自己之前写过的一个内部小项目做了测试,故意注入了一个并发 bug:一个连数据库查询写的接口在高并发下出现偶发的库存超卖问题(模拟真实场景,不污染线上)。然后我把任务发给 ZCode:

zcode "帮我修复一下 inventory 模块的并发超卖问题,要求修改后跑通所有现有测试"

下面是我观察到的完整过程,也是第一次让我对它刮目相看的时刻:

它先是打印了一个简短的"行动计划",列出了它认为相关的文件,包括inventory_service.go、stock_repository.go和测试目录下的inventory_test.go。然后开始逐个读取文件,一边读一边在内部记录关键代码行号。

接着它定位到问题原因:服务层没有做任何锁控制,两个并发请求同时读到相同的库存数量,各自扣减,最后写回的值是错的。它的修复方案是在扣减操作中引入基于 Redis 的分布式锁,并在数据库层加了乐观锁的版本号比对。说实话,这套方案我在 Review 时觉得确实合理。

然后它执行了测试命令,第一次跑挂了——因为测试里模拟的 Redis 连接方式和它的代码有冲突。它读到报错信息后,没有重新问我要怎么做,而是自己把锁的获取方式改成了"Redis 连接失败时回退到进程内同步锁"的降级策略。第二次测试全部通过,它还把 git diff 整理出来,并给我总结了一次"改动内容 + 影响范围 + 回滚建议"。

虽然整个过程并不是一帆风顺的(中间有两次它都在自己折腾方向),但你能看着它在终端里"思考-行动-反馈-修正"这个过程,这比它直接甩给你一段代码要让人放心得多。我觉得这其实是最接近真实结对编程体验的地方:你会知道它为什么这么做,而不是毫无防备地接受一个看不见推导过程的黑盒结果。

3.4 添加一个自定义 Skill 的完整流程

ZCode 安装好之后,你会在配置里发现一个skills目录,默认是空的。官方提供了一些内置的 Skill 模板可以一键启用,但如果你想做自己的 Skill,步骤也非常简单。

我以"提交信息生成器"为例,说一下我自己的完整流程。

第一步,创建 Skill 目录:

mkdir -p ~/.zcode/skills/commit-message-generator cd ~/.zcode/skills/commit-message-generator

第二步,在里面创建一个skill.md,这是 Skill 的"说明书",内容用 Markdown 写清楚触发条件和行为规范:

--- name: commit-message-generator description: 根据 git diff 生成符合 Conventional Commits 规范的提交信息。 triggers: - 用户要求生成提交信息 - 用户输入 /commit rules: - 必须先执行 git diff --stat 和 git diff 查看变更内容 - 提交信息格式必须为 type(scope): subject - subject 不超过 72 个字符 - 不得修改任何源代码文件 - 输出时给出 3 个候选信息供用户选择 ---

第三步,如果你需要让这个 Skill 执行具体的逻辑(比如调用外部 API、处理文件),可以在同目录下加一个可执行脚本,ZCode 会把它当作工具来调用:

#!/usr/bin/env bash # 这个脚本会被注入到 prompt 上下文中 git diff --stat

第四步,在配置文件里启用这个 Skill:

"skills": { "enabled": ["commit-message-generator"] }

第五步,在运行中的 ZCode 里输入/reload重新加载技能,然后就可以测试了。

有一个我在添加 Skill 时踩过的坑想专门说一下:Skill 不是写得越多越好。我一开始看到社区分享就哗啦啦塞了十几个 Skill 进去,结果 ZCode 每次都在首先要加载的上下文里塞一大堆规则,导致它的响应变慢,还容易出现不同 Skill 之间规则冲突(比如一个 Skill 让它"禁止删除文件",另一个 Skill 为了重构让它"清理无用代码",结果它就卡住了)。后来我清理成只需要四五个 Skill 以后,整体表现为明显变好。Skill 追求的是用得其所,不是收集癖。

4. 与 WorkBuddy、Trae 等工具怎么选

4.1 三款工具的定位差异

最近社区里有一个问题反复出现:ZCode、WorkBuddy、Trae Work 这三款开发软件到底哪个更好用?这问题不能一刀切回答,因为它们虽然都是"AI 帮你干活"的产品,但产品形态和适用场景差别很大。

我把三者的核心差异整理成了下面这个表格,方便大家直接对照着看:

维度ZCodeWorkBuddyTrae Work
产品形态CLI + Agent 框架 + 可二次开发偏工作流编排与任务管理AI IDE 一体化
核心使用场景终端开发流程、自动化修复任务、企业私有化部署复杂多步骤工作流的编排和定时触发开箱即用的 AI IDE,适合直接在里面写代码
上手难度中高,需要配置和 CLI 基础中,偏图形化配置低,安装完就能写
是否开源是目前主要靠官方托管部分开放,定位偏商业产品
模型接入模型无关,可换任意兼容接口主要走自带模型通道以平台内置模型为主
扩展性高,Skill 和源码都可自定义中,主要是流程组件低,受限于 IDE 内置能力
数据可控性高,可自托管、可审计中,依赖官方服务低,代码通常在云端 IDE 流程中流转

简单说就是三个方向:ZCode 适合"我要把它当工具链的一部分,甚至改造成自己的平台"的人;WorkBuddy 适合"我有很多重复性流程想自动编排"的人;Trae Work 适合"我只想打开一个软件马上开始写代码"的人。

4.2 选型建议:什么场景选什么

结合我自己的使用体验和身边朋友反馈,我给出一个比较务实的选型建议:

如果你是独立开发者或个人项目维护者,想要一个能帮你跑测试、改 bug、做重构的助手,并且你不介意在终端里捣鼓一两下配置,那 ZCode 的性价比和自主度是最高的。你不需要把整个工作流迁移到一个新 IDE 里,直接在原来的终端环境里就能用起来。

如果你主要面对的是"业务流程自动化"而非"代码生成",比如要做定时数据同步、多表状态流转、跨系统推送这类任务,WorkBuddy 这类工作流工具会更顺手。它的强项是把你设计的步骤串起来执行,而不是帮你读代码。

如果你是"从零开始一个新项目"且不想关心任何配置,那 Trae 这类 AI IDE 是最友好的。它把文件管理、对话生成、运行调试集成在一个界面里,新手体验确实好。但它也有它的天花板:你很难把它嵌进一个已有的、复杂的、带私有依赖的工程环境里。

4.3 一个在选型时容易被忽视的点:可迁移性

最后说一个我在这几款工具之间纠结时发现的关键点:你积累的"技能"和"工作流配置"能不能带走,这决定了你换工具的沉没成本。

ZCode 的 Skill 是纯 Markdown + 脚本文件,等于你给 Agent 写的东西全都能导出、备份、换个电脑继续用,甚至换个 Agent 框架也可以借鉴。WorkBuddy 的流程定义通常依赖它的组件库,换平台基本要重画。Trae 的对话和规则某种程度上绑定在它那个 IDE 里。

如果你只是图新鲜,哪个都能试。但如果你是打算把一个 AI 编程工具长期用在日常开发里,我建议一开始就考虑数据流、配置、扩展的可迁移性,避免用了一个月后发现好东西都在里面,但平台不给力,又舍不得走。

5. 常见问题与避坑指南

5.1 关于"代码上传"的争议与安全边界

关于 ZCode,社区里讨论度最高、也最让人警觉的话题,其实是代码数据和隐私边界。你让 ZCode 帮你改代码,本质上就是你的上下文里包含了项目代码,它会作为模型 API 请求的一部分发送到模型服务方。这一点在很多 AI 编程工具里都是相似的,但在 ZCode 上是"开源搭台",关注度更高。

我的建议是:如果你的项目涉及公司内网、客户数据、未公开的商业逻辑,别把全部仓库直接丢给任何一个云端的模型服务。好在 ZCode 的开源和"模型无关设计"给它留了一条安全路径:

  • 优先把项目目录按"敏感"和"可暴露"拆分,只让 ZCode 处理后者。
  • 如果公司内部有可用的模型服务,把base_url指向内网网关,从 Agent 到底层模型全部掐在自家网络环境里,不向外部发送任何数据。
  • 在真正的生产仓库上使用时,先打开"干跑模式"观察它会访问哪些文件,确认无误后再允许真实执行。

我不喜欢无脑吹某个工具,也不建议因为几个帖子就给一个项目定罪。安全和不安全,不是"用不用 ZCode"的问题,而是"你怎么用"的问题。把权限收窄、审计日志打开、白名单配好,这些工作是在项目上线前就该做的。

5.2 连接异常、反复显示"重新连接中"怎么排查

有不少用户会遇到 ZCode 运行一段时间后界面卡在"重新连接中"的情况,这个问题的排查思路比较简单,按顺序来:

  • 第一步,先确认 API Key 是否过期:模型服务商的 API Key 很长一段时间后会失效,ZCode 的报错信息里如果出现了401或tokens exhausted之类的字样,那就是 Key 的问题,去控制台重新生成并更新配置即可。
  • 第二步,检查网络连通性:如果你是通过远程机器跑 ZCode,看看你的机器本身能不能正常访问模型服务的 API 端点。方法是在终端里直接curl一下你配置里的base_url,看能不能拿到正常响应。如果 curl 都失败了,那问题就出在网络环境,而不是 ZCode 本身。
  • 第三步,确认服务的并发限制:有些模型服务对单账号并发数有限制,如果你同时在多个会话里跑 ZCode,后发起的会话就会被挂起,表现为"重新连接中"。这时候把不用的会话关掉,或者升级账号配额,就能解决问题。

5.3 一个容易被人忽视的细节:版本更新与漏洞修复节奏

开放源码工具的版本更新频率通常都很高,我见过不少用户装完一次就再也没更新过,结果用了一段时间后遇到某些奇怪的行为。ZCode 的版本迭代节奏也符合开源项目的规律:小版本经常修 bug,大版本会有新特性,有时会伴随安全补丁。

更新指令很简单:

zcode update

更新之前,建议看一下 CHANGELOG 里有没有 breaking change,因为它的配置文件格式偶尔会调整,旧配置在新版本下不一定能直接复用。这也是所有快速迭代的开源项目都有的通病,不是 ZCode 独有。

5.4 我踩过几次坑之后总结的经验清单

下面这份清单,算是我把 ZCode 接入自己日常开发流程之后,反复踩坑总结出来的实操经验,直接分享给大家:

关于权限配置

  • 永远不要让 ZCode 访问整个用户根目录,只给它具体项目目录的权限。
  • 打开"危险操作需确认"的开关,这能拦住它执行rm -rf或强制 git 回退。
  • 在敏感仓库上工作时,先把执行模式设为"干跑",观察行动计划,再释放真实执行权限。

关于 Skill 管理

  • 只保留能提高你实际作业效率的 Skill,不要贪多。
  • 自定义 Skill 的规则写清楚"做什么"和"不做什么"都比空泛的"要仔细、要负责"有效得多。
  • 如果发现 ZCode 行为不如之前稳定,十有八九是多个 Skill 之间规则冲突了,逐个禁用排查即可。

关于任务验证

  • 它说"改好了"不一定是真好了,一定要让它把测试跑给你看,或者你自己手动验证。
  • 让它处理大范围重构时,建议先 git 提交一遍当前状态,这样出了问题可以无顾虑回滚。
  • 重要的代码改动,养成让它输出 diff 摘要的习惯,别直接apply进去,确认过再合入。

关于开发体验

  • 在 tmux 里配合 ZCode 的 TUI 模式使用,体验远比单独开一个全屏占用要好。
  • 耗时较长的任务,不要开着终端等它,它会自己把结果写到日志,你随时可以回来看。
  • 日常写代码时把"测试保护者"类的 Skill 挂上,它会帮你避免很多无意识的破坏性改动。

写在最后:几个真诚的使用感受

最后说点个人的私货。

我第一次认真用 ZCode,本来只是抱着"开源了,看一眼,然后挑刺"的心态去的。毕竟市面上的 AI 编程工具我基本都试过,确实见过不少"演示很惊艳、落地很骨感"的产品。但 ZCode 让我改观的地方在于,它是一个你能从里到外看明白的东西。模型接哪、文件读哪、命令执行前有没有确认,这些问题都能在配置和源码里找到答案,这在"AI 写代码"这类充满黑盒迷信的赛道里,算是一个难得的优点。

当然,它也有它的脾气。我在用的时候偶尔会遇到它绕圈子找不到问题根因的情况,也会遇到配置文件的某些选项改完不立即生效、需要 reload 的小问题。但总的来看,作为一款开源的 AI 编程 Agent,它已经具备了"能独当一面干活"的基本素质,而不是只能在你旁边打辅助。

如果你准备上手,我最后分享一个自己觉得最有用的使用习惯:给 ZCode 加一条 Skill,内容是"接到任务后先读仓库的 README 和项目结构,再开始动手"。别小看这一条,在我实测中,它让 ZCode 处理我没写过的新项目时的成功率明显提高,少了很多"上来就胡改一顿然后被我骂回去"的情况。

工具好不好用,从来不是看宣传片,而是看能不能在你的真实工作流里站住脚。趁它刚开源、社区还热,翻翻代码、调调配置,你在用的过程中获得的判断力,比收藏一堆"神器推荐"文章有价值得多。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进