场景:AI 编码 Agent 对话历史太多?Juggler 用可视化的树形工作台让每次分支都不再丢失上下文
你的 AI 编码 Agent 对话是不是已经变成一条无限滚动的聊天历史?想回去对比两个方案的区别,得翻几百行对话;想基于某个早期决策重新探索,只能痛苦地从头开始;Agent 调用了什么工具、改了什么文件、为什么做这个决定——全埋在折叠的对话气泡里。
这个问题不是你的错,是所有 AI 编码 Agent 的共性缺陷:对话历史是一条直线。而作者 Jules(JUCE 框架的创始人)决定换个思路——他把 AI 编码 Agent 做成了一个可视化的树形工作台,名字就叫 Juggler。
问题:线性对话的三大痛点
用 Claude Code 或者 Cursor 编码时,你大概率遇到过这几个场景:
- 想回溯到半小时前的决策,但对话已滚出可见范围:Agent 生成了一个不错的重构方案,你又让它深入了几个方向,现在想回到那个起点重新探索——但起点已经淹没在数千行消息中。
- 想对比两种方案的 Tool Call 记录:你不知道 Agent 在方案 A 中调用了哪些工具、修改了哪些文件,因为每次对话中的所有操作都被压成了一条线。
- 想让多台设备访问同一个会话:你在工作站的桌面端开始调试,想在另一个房间的浏览器上继续——大多数 Agent 的工作区不支持多客户端实时跟随。
Juggler 的解决思路很直接:把对话从线性历史变成可编辑的树形文档。
Juggler 的核心设计:不是聊天框,是 Miller Columns
打开 Juggler,你看到的不是一个巨大的输入框,而是一个 Finder 风格的列视图(Miller Columns)。最左边是会话的根节点,选中一个节点后,它的子节点和属性在右侧展开。每一列代表一个层级,左右导航就像在文件系统里浏览文件夹一样自然。
这个设计决定了 Juggler 和其他 AI 编码 Agent 的根本区别:
- 任何节点都可以分支成子线程:Agent 正在某个思路上推进,你想让它从当前状态出发去探索另一个方向?直接在当前节点创建子线程,新的分支独立发展,不干扰主路径。
- 分支可以多层嵌套:子线程里还能再分子线程,形成一个真正的树形探索结构,而不是平铺的线性气泡。
- 可以随时回到任意节点:不管是根节点的初始决策,还是某个中间分支的讨论,点击左侧列中的节点就能查看当时的状态——工具调用记录、属性、子线程都在可视范围内。
会话是活文档,不是死记录
Juggler 的会话底层是一个 Yjs 文档,这带来两个重要的能力:
可编辑性:你可以直接修改会话中的任何内容。不只是撤回消息,而是编辑已经发出的指令、修改 Agent 返回的代码方案、删除不需要的分支。会话是活的。
多客户端同步:Juggler 不是传统的桌面应用架构——它实际上是一个本地 WebSocket 服务器 + 一个或多个客户端视图。桌面 App、浏览器标签页、甚至手机浏览器都可以同时连接到同一个会话。你在工作站的桌面端开始任务,出门前用手机浏览器扫个二维码,在车上还能继续查看 Agent 的进展。
一切都是插件
Juggler 的核心引擎只负责文档管理和 Agent 编排,几乎所有功能组件都是 JavaScript 扩展(Extensions):
- 上下文项(Context Items):
read-file、replace-text、bash等所有 Tool Call 类型,既是 LLM 的工具定义,也是 UI 上的可视化组件。你可以直接检查、修改甚至替换它们的实现。 - 策略(Strategies):Agent 的高阶循环——
plan、research等——都是插件。如果你想实现一个自定义的探索策略,不需要改核心代码,写一个 JavaScript 扩展就行。 - 命令(Commands):
/clear、/compact等斜杠命令同样是插件,每个都可以独立修改或替换。
扩展 SDK(web/sdk/)使用 Apache-2.0 许可证,你可以在上面构建闭源的商业扩展——这给团队内部定制留下了灵活的空间。
模型支持:几乎通吃所有主流模型
Juggler 支持广泛的 LLM Provider:
- Claude Code:通过 CLI 或 API 连接
- OpenAI:包括 codex plan 模式
- Gemini、Ollama、OpenRouter
- Z.AI、Deepseek 等
想加的 Provider 不在列表里?扩展系统让你可以自己添加。Juggler 本身是 Go 后端 + Wails 窗口 + JavaScript 前端,添加一个 Provider 通常只需要写一个简短的连接配置扩展。
安装和运行
Juggler 提供三种安装方式:
macOS
下载 .dmg 安装包,拖入 Applications 文件夹。首次启动需要右键 → 打开确认 Gatekeeper 允许。App 和后台服务器是打包在一起的,启动后自动运行。
Windows
下载 Juggler-,安装后可选择将 juggler CLI 加入 PATH。
Linux(桌面或者无头服务器)
下载 juggler 二进制文件,直接从终端运行:
chmod +x juggler ./juggler
服务器会输出 Web UI 地址和二维码。默认只在 localhost 上监听,按 p 键或加 --public 标志可以让局域网内其他设备访问。
无头服务器注意:即使只有终端没有显示器,juggler 服务器也需要 WebKitGTK 库和虚拟显示(Xvfb)来运行内部的 Agent 引擎——这不是一个纯终端 CLI 工具,它的 Agent engine 运行在一个隐藏的 WebKit webview 中。
技术栈一览
| 组件 | 技术 |
|---|---|
| 后端 | Go |
| 窗口引擎 | Wails |
| 前端 | HTML/JS(TypeScript 类型通过 JSDoc + CI 静态检查) |
| 文档同步 | Yjs |
| 扩展语言 | JavaScript |
| 桌面应用 | 原生(非 Electron) |
值得一提的是 Juggler 不使用 Electron——这是一个用 Wails(Go + 原生 WebView)构建的原生桌面应用,资源占用和启动速度都优于 Electron 类应用。
适用场景
Juggler 的目标用户很明确:想对 Agent 的操作有更强掌控力的开发者。如果你希望:
- 可视化检查每次 Tool Call:Agent 改了什么文件、执行了什么命令、为什么做这些决策——全部在 Miller Columns 中一目了然
- 在多种探索方向之间自由切换:同时维护多个子线程,对比不同方案的效果
- 多设备追踪同一个会话:桌面端开始,移动端继续查看
- 定制 Agent 的行为和 UI:通过扩展系统深度集成团队的编码流程
那么 Juggler 提供了目前最完整的可视化工作台体验。创始人是 JUCE 框架的创作者,在 GUI 和开发工具领域有 20 年以上的积累,这个背景让 Juggler 的交互设计明显地比同类产品更加精致。
获取方式
- GitHub: github.com/juggler-ai/juggler
- 官网下载: juggler.studio
- 许可证: AGPL-3.0(应用代码)+ Apache-2.0(扩展 SDK)
- 当前 Stars: 473+(发布不到一周即取得)
相关链接