Juggler: 一个开源 GUI 编程智能体
Juggler: 一个开源 GUI 编程智能体
Juggler 是一个开源 AI 编程智能体,专为希望对 LLM 与其代码库交互方式拥有更多动手控制权的开发者而设计。与依赖线性聊天记录的传统 AI 编程工具不同,Juggler 引入了一个可视化工作台,将会话视为一个可编辑的树状结构,允许开发者实时进行分支、回溯和检查工具调用。
可视化工作台与分支会话
Juggler 用基于树的会话结构取代了标准 AI 聊天界面的“无尽滚动”。这允许用户创建子线程、深入特定任务,并比较不同的实现路径,而不会丢失原始上下文。
为了便于导航,UI 利用了 Miller columns(类似于 macOS Finder 的列视图),根会话位于左侧,选中的项目会在右侧展开为属性和子项。这种设计确保了工具调用、审批和原始上下文保持可见且易于访问,而不是被埋在可折叠的聊天气泡中。
基于插件的架构
Juggler 被构建为一个编排平台,几乎每个组件都是一个 JavaScript 扩展。这种可扩展性允许开发者自定义智能体的行为和 UI:
- Context Items: 每个项目类型(例如
read-file、replace-text、bash)都定义了其与 LLM 的交互方式及其在 UI 中的视觉表示。 - Strategies: 高层级的 LLM 循环,例如
plan或research,是以插件形式实现的。 - Commands: 斜杠命令(例如
/clear、/compact)是操作会话文档的插件。
多客户端架构与部署
Juggler 采用客户端-服务器模型,允许灵活部署。后端使用 Go 编写,并使用 Wails 进行窗口管理,避免使用 Electron 以保持应用体积较小(约 40 MB)。会话文档使用 Yjs(一种 CRDT (Conflict-free Replicated Data Type) 框架)进行同步,从而确保了稳定性和协作能力。
用户可以通过以下几种配置运行 Juggler:
- Native Desktop App: 为 macOS、Windows 和 Linux 提供的捆绑应用程序。
- Headless Server: 一个命令行服务器,可以在代码所在的远程开发机或服务器集群上运行,由浏览器或桌面应用作为客户端。
- Multi-Client Access: 多个客户端(浏览器标签页或不同的机器)可以同时连接到同一个服务器会话。
模型支持与集成
Juggler 连接到广泛的 LLM 提供商,包括 Claude Code (通过 CLI 或 API)、OpenAI、Gemini、Ollama、OpenRouter、Z.AI 和 DeepSeek。
社区见解与技术讨论
来自 Hacker News 的社区反馈突出了关于该智能体在 UX 和架构方面的几个关键点:
"我观察到围绕 Opencode 和 Pi 等开源智能体涌现出了惊人的社区。人们之所以加入它们,是因为它们的可扩展性和模型无关性。它们是伟大的项目,但就像我认识的许多人一样,我真的很讨厌被困在终端里使用这种 AI 工具。"
技术讨论集中在以下方面:
- UX Paradigm: 用户注意到了“原生分支”对话的价值,将其比作从线性聊天界面进行的必要演进。
- C++ vs. JS: 一些用户对 UI 使用 JavaScript 的选择提出了疑问,建议为了性能使用原生 C++ 或 SwiftUI,而其他人则称赞使用 Wails 而非 Electron。
- Stability: 使用 CRDT (Yjs) 进行会话管理被认为是保持稳定性的秘诀,它将框架与 UI 分离开来。
- Current Limitations: 一些用户报告了 DeepSeek 在思考模式下的
reasoning_content问题,并请求了对代码围栏(code fences)更好的支持。
许可协议
Juggler 的应用代码基于 GNU Affero General Public License v3.0 (AGPLv3) 许可,而扩展 SDK 和捆绑的扩展是以 Apache-2.0 许可的,这允许在没有 copyleft 义务的情况下创建闭源扩展。