源自 deepseek-tui 血统的 Zagens 实测:当 AI Agent 有了桌面控制台

0 阅读14分钟

花了两天克隆、构建、上手,这篇是纯体验向的记录


一、先说说血统

如果你用过 deepseek-tui,需要知道它 upstream 已经 rebranding 成 CodeWhalecodewhale 命令,v0.8.x,社区 30k+ stars)——仍然是 Rust 终端 agent,但早已不是「只有聊天 + 改文件」的轻量壳:MCP、skills、hooks、持久化 sub-agent、SQLite 会话/thread 回放、macOS Seatbelt、codewhale serve --http 等都在主线里。

Zagens 从这条 runtime 血统分叉出来,走桌面 harness 路线。 不是把 CodeWhale 换皮,而是把引擎嵌进 Tauri 2 桌面壳 + 独立 sidecar,交互层、Office 工作流、LHT 完成门禁、Windows 原生沙箱、CRAFT 多角色 fix-loop 等是 Zagens 自己的 product bet。配置目录是 ~/.zagens/;legacy ~/.deepseek/ 会在首次启动迁移 config/skills/MCP(会话库不迁)。

项目在 GitHub 上:github.com/didclawapp-…,MIT 许可。Runtime 系谱见 NOTICE.md


二、从终端到桌面:Zagens 长出了什么

说「分叉进化」并不夸张,但不能把 upstream 写扁——今天的 CodeWhale 本身已是功能完整的终端 harness。Zagens 的差异主要在桌面控制面、Office 工作流、LHT 完成门禁、Windows 沙箱、CRAFT 编排,而不是「CodeWhale 什么都没有」。

核心引擎:同血统,不同产品形态

CodeWhale 默认是 TUI 单进程(也可 codewhale serve --http 做 headless);会话、checkpoint、side-git 快照、thread 事件时间线都在 upstream 里。Zagens 把同血统引擎拆成 桌面壳 + loopback sidecar,并叠加 Code/Office 双任务类型与 LHT。

下表对比 CodeWhale upstream(deepseek-tui 现品牌,v0.8.x)Zagens v0.7.4+(TUI / kernel-v2 部分见 v0.7.5 unreleased):

维度CodeWhale(deepseek-tui upstream)Zagens(当前)
交互形态终端 TUI 为主 + HTTP/SSE Runtime API + 编辑器/GUI 集成桌面应用(Tauri 2)为主 + 可选 zagens-tui + CLI
进程模型TUI 单进程;或独立 serve --http桌面默认双进程:Tauri 壳 + zagens-runtime sidecar
会话耐久SQLite thread store、--resume/fork、checkpoint/offline queue、API 事件回放SQLite 全量持久化 + 桌面 UI 按轮回放/fork
任务验证checklist/plan + durable task gates(task_gate_run 等 verifier)LHT 三层完成门禁(自检 → 硬验收 exit code → 交付物 Rust 对账,LLM 不做终审)
多代理持久化 sub-agent(agent_open/agent_eval)、RLM 会话、并发子代理CRAFT 多角色 + 结构化裁决(PASS/BLOCKER/MAJOR/FAIL)+ fix-loop + 黑板
文档产出无 Office 生成工具write_office:XLSX(Rust)+ DOCX/PPTX/PDF(Python)
沙箱隔离macOS Seatbelt 已强制;Linux Landlock 规划中;Windows 尚无完整 OS 级沙箱Windows elevated/unelevated 原生沙箱 + macOS Seatbelt + Linux 可选 bwrap(prefer_bwrap
审批控制Plan / Agent / YOLO + 工具审批对话框四档审批(on-request/untrusted/never/auto)+ 域名级网络规则 + Token 不出 WebView
技能/MCP~/.codewhale/skills + MCP + hooks~/.zagens/skills + MCP + 路由规则
多提供商DeepSeek 优先 + OpenRouter/NIM/Ollama/MiMo 等 10+ 路由DeepSeek + OpenAI + NIM + OpenRouter + Ollama 等
凭证存储config + OS keyring + envOS keyring 为主
i18nREADME/文档多语言;TUI 以英文为主桌面 UI 简中 / English / 日本語 / Português (BR)
生命周期钩子pre/post tool 等 hookspre/post session、tool、subagent 钩子
定时任务AutomationManager + RRULERRULE 定时自动化(后台 Tasks)
KV 缓存可观测capacity/pricing 遥测;无 prefix fingerprint UI 芯片prefix fingerprint + 缓存命中率芯片(kernel-v2 M5)
代码规模大型 Rust monorepo(30k+ stars 社区)15 个 workspace crates + 桌面前端

Zagens 相对 CodeWhale 血统额外强化的几块

不是「upstream 从零没有」,而是 Zagens 在这些方向上走得更 productized:

Sidecar + 桌面控制面——桌面模式下引擎跑在独立子进程(zagens-runtime),UI 只走 loopback HTTP/SSE。WebView 崩溃 sidecar 仍在;sidecar 重启不拖垮壳;执行 Token 不进 WebView。Sidecar 也可单独 zagens serve --http --port 7878 给 CI/脚本用(CodeWhale 同样有 serve --http,差异在 Zagens 默认桌面即 sidecar-first)。

CRAFT 多角色 fix-loop——CodeWhale 有成熟的持久化 sub-agent 和 task verifier,但没有 Zagens 这套 Explore → Implementer → Reviewer → Verifier 角色链 + 结构化裁决 + 黑板 fix-loop(Implementer 最多三轮后 escalate)。这是编排协议层的差异,不是「有没有子代理」。

Office 工具链——upstream 不涉及 xlsx/docx/pptx/pdf 生成。Zagens 的 write_office:XLSX 纯 Rust(rust_xlsxwriter),DOCX/PPTX/PDF 走捆绑 Python;生成后在 deliverables/.office/.payload.json,可用 load_office_payload 增量改稿。

Windows 沙箱——CodeWhale 在 macOS 上 Seatbelt 是主线能力;Windows 侧 upstream 文档仍标注「helper 未就绪、不宣传完整 OS 沙箱」。Zagens 0.7.x 已落地 Windows elevated(Token+ACL+WFP)/ unelevated 两档。Linux 两边都还在演进:CodeWhale 推 Landlock;bwrap 在 Zagens 需 prefer_bwrap = true 且安装 bubblewrap,默认仍是 degraded。

桌面级会话回放——CodeWhale 的 thread 事件时间线可通过 Runtime API 回放;Zagens 额外提供桌面壳内的按步可视化回放(文件树、Diff、子代理面板同一上下文),更适合审计长程 agent 轨迹。


三、装起来看看

下载

Releases 页有 Windows 安装包(.zip 压缩包+CLI 二进制),解压就能跑。macOS 和 Linux 目前 CLI 二进制可用,桌面安装包还在路上。

从源码构建(以 Windows 为例)

git clone https://github.com/didclawapp-ai/zagens.git
cd zagens

# 编译 sidecar
cargo build -p zagens-cli

# 装前端依赖
cd crates/desktop/web-ui && npm install

# 启动开发模式
cd .. && cargo tauri dev

Rust 1.88+,Node 20 LTS,Python 3.8+,Tauri CLI 2。首次 Cargo 完整构建需要等待一段时间(具体取决于机器),npm install 也需几分钟。

首次启动

开屏是一个浅色/深色自适应(跟随系统)的聊天界面,左侧是会话列表,右侧是文件树、Diff 和子代理面板:

Snipaste_2026-06-11_11-38-25.png

点「设置」填入 DeepSeek API Key(也支持 keyring 存凭据),选模型(deepseek-v4-pro / deepseek-v4-flash),设好 reasoning_effort 级别,就能开始对话了。Zagens 使用自己的配置目录 ~/.zagens/config.toml(首次启动自动创建默认模板)。如果原来有 ~/.deepseek/ 目录,配置、技能、MCP 会在首次启动时自动迁移过来,但会话数据库不会迁移。


四、干活实测

4.1 写代码

选 Code 任务类型,丢给 Zagens 一个常见问题:

「帮我把这个 Rust 项目里的 unwrap() 全部替换成有意义的错误处理」

Zagens 的做法和「只聊天不改仓库」或「只靠 checklist 自报进度」不同(CodeWhale upstream 也有 plan/checklist 和 task verifier,但 Zagens 的 LHT 额外加了硬验收 exit code + 交付物 Rust 对账):

  1. 预览项目结构,找到所有含 unwrap() 的文件
  2. 逐个读取文件,理解上下文
  3. edit_file 工具逐个编辑,每个编辑完自动触发 LSP 诊断,如果出现编译错误它会自己修复再继续
  4. 最后执行 cargo check 验证全部通过

整个流程是「计划 → 分批执行 → 验证 → 报告」,不是一口气吐出来让你自己改。

这背后是 Long-Horizon Task(LHT) 机制——一个可组合的完成门禁系统:模型自检(plan + checklist)→ 硬验收命令(cargo check/跑测试看 exit code)→ 交付物对账(纯 Rust 模块做路径存在性检查,不经过 LLM),哪一层没通过就继续,而不是模型说「改完了」就算完。

实测感受:小规模项目(几千行)的 unwrap 替换完全可行,省去手动 grep 替换的重复劳动。大规模重构建议分段任务,让它逐个模块处理。

4.2 写文档和报表

切换任务类型到 Office:

「写一份 Q2 项目周报,汇总这三周的 Git 提交记录」

Zagens 会先读 Git 日志,然后调用 write_office 工具生成一个格式整齐的 XLSX 文件,自动带表头样式、列宽、交替行色和自动筛选:

格式:XLSX
路径:deliverables/周报_2026-W25.xlsx
├─ 工作项(日期、提交人、描述、统计)
├─ 汇总行
└─ 自动筛选 + 冻结首行

PPTX 和 DOCX 也支持(通过嵌入式 Python),但生成速度稍慢于 XLSX(后者是纯 Rust 实现)。

实测感受:对「从数据直接出表格文档」的场景非常实用,省掉了从代码日志复制到 Excel 的手工步骤。但复杂的图文混排、特定模板排版还是需要人工调。

4.3 多代理协作(CRAFT)

Zagens 的 CRAFT 机制是多角色协作:

  • Explore:只读探索代码库
  • Implementer:写代码
  • Reviewer:审查代码,给出结构化裁决(PASS/BLOCKER/MAJOR/FAIL)
  • Verifier:跑测试和 lint
  • Auditor:全库审计时用,机械验证 cited 行号和文件路径是否正确

默认的对话模式是单代理,但系统会根据任务自动 spawn 子代理,也可以用 agent_spawn 显式创建。例如:

「调查一下这个模块的测试覆盖率」

它会 spawn 一个只读 Explore 子代理去查目录结构、读测试文件、看 CI 配置,然后把结果汇总回来。多个子代理之间并行运行。

实测感受:单代理和子代理在同一个会话里,子代理的发现可以被主代理直接利用。对于「先调研再实施」的工作流非常自然。但子代理数目多了(超过 5 个),右侧面板会有点挤,UI 还有优化空间。

4.4 会话回放

Zagens 把 upstream 已有的 SQLite thread 持久化,做成了桌面里的按步可视化回放——历史 session 里能看到每一步模型输出、工具调用与返回,配合文件树/Diff/子代理面板做审计。CodeWhale 同样 durable 存 thread,并可通过 Runtime API 拉事件时间线;差别主要在 Zagens 给非终端用户的一体式回放 UI。


五、架构上的差异化设计

┌─ Zagens (Tauri 2) ────────────────────────┐
│   WebView UI (React/TS) ←→ Rust 外壳     │
│         │ HTTP + SSE                      │
│         ▼                                 │
│   Runtime sidecar (loopback HTTP/SSE)     │
│   ┌─ 核心 crates ─────────────────────┐   │
│   │ agent, core, config, tools, mcp   │   │
│   └───────────────────────────────────┘   │
└───────────────────────────────────────────┘

几个值得注意的点:

Sidecar 架构:Agent 引擎跑在独立的子进程里(Tauri externalBin),UI 只通过 HTTP/SSE 通信。这意味着即使用 WebView 崩溃,sidecar 还在跑;反过来,sidecar 重启不会影响 UI 壳。执行 Token 从不出 WebView,安全边界清晰。

Code + Office 双模式:同一个 sidecar,切换任务类型时工具面和提示词不同,但共享配置和引擎。切换类型时新开 session,避免 KV 缓存污染。

Windows 原生沙箱elevated 模式用系统沙箱隔离子进程,配置文件只读隔离 + WFP 文件保护;unelevated 模式做工作区写隔离。macOS 用 sandbox-exec。Linux 默认未强制;安装 bubblewrap 且 prefer_bwrap = true 时走 bwrap。


六、和一些常见方案的粗略对比

维度Zagens普通 ChatGPT/DeepSeek WebCursor/VS Code AI
执行模型本地 sidecar,自备 Key云端,包月/按量IDE 插件
桌面集成系统托盘、通知、PTY 终端浏览器 TabIDE 内
长程任务分层门禁 + 可回放一次性对话有限
Office 支持原生 xlsx/docx/pptx/pdf无(靠插件)
多代理CRAFT(多角色 fix-loop)单 agent单 agent
会话回放SQLite 持久化 + 按步回放历史记录历史记录
沙箱Windows 原生 / macOS Seatbelt / Linux 可选 bwrap服务端依赖 IDE/产品策略
开放性MIT,可自建闭源闭源(部分开源)

和 CodeWhale(deepseek-tui upstream)怎么选? 要成熟终端 TUI、Constitution 式治理、side-git /restore、VS Code Runtime API 集成——CodeWhale 仍是主力。要 Windows 桌面壳、Office 产出、LHT 三层门禁、CRAFT fix-loop——看 Zagens。两者不是替代关系,血统相同、产品形态不同。

不是说 Zagens 更「好」,但它的设计决策和现有方案有明显的取舍差异——如果你很在意本地执行的可控性长程任务的可信度代码+文档一个工作流,它确实填补了一个空白。


七、近期动态:TUI 终端和 V2 内核升级

Zagens 的迭代速度很快。从 CHANGELOG 来看,最近两个方向的投入值得关注。

7.1 全功能 TUI 终端(zagens-tui

Zagens 最初是桌面应用(Tauri 壳 + sidecar)。但在 v0.7.5 unreleased 中,新增了一个可选 feature tui 和独立二进制 zagens-tui——一个基于 ratatui 的全屏三栏终端界面,跟桌面版共用同一套 agent 引擎(RuntimeThreadManager 跑在进程内,不再 split 成 sidecar)。

这意味着用户多了一个选择:习惯终端的可以在 iTerm/Windows Terminal 里跑 zagens-tui,习惯桌面的用 Tauri 壳。两种形态共享配置、会话存储、技能和 MCP。

TUI 目前已具备的能力(从 unreleased 的密集提交来看):

  • 三栏布局:左侧会话列表,中间 Transcript + Composer,右侧 Inspector 面板
  • LHT 完整支持:长程任务 checklist、plan phases、blocked/nudge 状态在 TUI 里实时展示,/lht 切换模式
  • 模型/审批切换/model 选模型、Ctrl+A 循环审批策略
  • Inspector 面板:Files(文件树预览)、Diff(staged/worktree 切换)、Agents、MCP 四 tab,j/k/14/Enter 键盘导航
  • 会话恢复:启动时恢复到上次所在的 workspace 和 session(--fresh 跳过)
  • 活动状态条:模型运行时显示 THK / 工具调用 / AI 阶段动画条
  • 39+ 单元测试、Ctrl+V 粘贴、光标编辑、prompt 历史、流式渲染

对 CodeWhale 老用户来说,这个 TUI 不是简单 fork 回 upstream——它把 Zagens 桌面版积累的 LHT、CRAFT 等编排能力带回了终端(MCP/skills/hooks/sub-agent 两边血统本就有)。

7.2 内核从 V1 到 V2 升级(kernel-v2)

Zagens 的底层工具执行内核正在经历一次系统性的重写,内部代号 kernel-v2。M0–M5 里程碑均已落地首版或 partial/initial 交付,默认仍以 legacy 运行;通过 config.toml[tools] 两路开关灰度尝鲜

简单说,V1 的工具调度是「能跑就行」——按顺序排,等上一个结束再下一个。V2 把每个工具的读写边界(Footprint)、资源依赖(ResourceSet)、安全来源(Provenance)都 formalize 了;scheduler = dag 才启用 DAG 并行,policy = engine 才切 manifest 驱动审批——两者独立,不是单一 engine 开关全包。

以上升级预计将在下周的0.8.0版本放出


八、诚实说一些不足

体验两天下来,值得列出来的:

  1. macOS/Linux 桌面包还在路上。 目前 Windows 桌面体验最完整,macOS/Linux 可以用 CLI(zagens exec 模式)或从源码构建。三平台的 CLI 二进制都是可用的,但如果想要完整桌面体验,现阶段 Windows 是第一选择。

  2. Office 深度有限。 读写核心路径走通了(尤其是 XLSX,纯 Rust 速度很好),但企业级的邮件合并、复杂模板、数据透视表还是得回 Office 原生软件。

  3. 文档和社区还在早期。 相对 CodeWhale 的 30k+ stars 与成熟文档站,Zagens 教程、最佳实践、第三方集成仍在积累(Issues/Discussions 里维护者会回,但生态差距客观存在)。

  4. CRAFT 子代理的 UI 有待打磨。 多子代理并发时右侧面板的信息密度有点高,需要时间来适应信息布局。

  5. 长程任务的边界案例。 LHT 门禁系统在大多数场景下工作良好,但如果任务本身模糊(比如「重构这个模块,但我不确定要改成什么样」),模型可能会在「继续做」和「停下来问」之间摇摆。


九、总结

Zagens 不是又一轮 AI 聊天工具。它从 CodeWhale / deepseek-tui 的 agent runtime 血统出发,做了一个以本地执行为核心的桌面控制台——Code 和 Office 共享引擎、桌面级会话回放、LHT 完成门禁而不是「模型说完了就算」。

相对 CodeWhale upstream,Zagens 的差异不在「有没有 MCP/子代理/沙箱/持久化」——upstream 这些已经很强——而在 桌面 sidecar 控制面、Office 产出、LHT 三层门禁、CRAFT fix-loop、Windows 原生沙箱。近期又补上了可选 zagens-tui,并把工具执行内核升级到 kernel-v2——不是换 UI 壳,而是另一套 product 取舍。

适合这样的人群:

  • 日常用 DeepSeek API,想要桌面 harness(而不只是终端 TUI 或编辑器插件)
  • 做长程代码任务,需要能回放、可审计的 agent 执行轨迹
  • 代码和 Office 文档在同一个工作流里流转
  • 在意本地执行的沙箱隔离和审批控制

不太适合:

  • 只想开个网页聊天,不想装东西
  • 团队要用托管 SaaS 和统一计费
  • 只用 macOS/Linux 桌面且不想用 CLI 或源码构建

项目地址:github.com/didclawapp-…,MIT 开源。Upstream 血统:github.com/Hmbown/Code…。代码架构:15 个 Rust workspace crates + 桌面前端,模块边界清晰。


文章基于 Zagens v0.7.4 / v0.7.5(unreleased),2026-06-13 实测。配置环境:Windows 11 + DeepSeek V4 Pro。