Juggler: 一个开源 GUI 编程智能体

Juggler: 一个开源 GUI 编程智能体

Juggler 是一个开源 AI 编程智能体,专为希望对 LLM 与其代码库交互方式拥有更多动手控制权的开发者而设计。与依赖线性聊天记录的传统 AI 编程工具不同,Juggler 引入了一个可视化工作台,将会话视为一个可编辑的树状结构,允许开发者实时进行分支、回溯和检查工具调用。

可视化工作台与分支会话

Juggler 用基于树的会话结构取代了标准 AI 聊天界面的“无尽滚动”。这允许用户创建子线程、深入特定任务,并比较不同的实现路径,而不会丢失原始上下文。

为了便于导航,UI 利用了 Miller columns(类似于 macOS Finder 的列视图),根会话位于左侧,选中的项目会在右侧展开为属性和子项。这种设计确保了工具调用、审批和原始上下文保持可见且易于访问,而不是被埋在可折叠的聊天气泡中。

基于插件的架构

Juggler 被构建为一个编排平台,几乎每个组件都是一个 JavaScript 扩展。这种可扩展性允许开发者自定义智能体的行为和 UI:

  • Context Items: 每个项目类型(例如 read-filereplace-textbash)都定义了其与 LLM 的交互方式及其在 UI 中的视觉表示。
  • Strategies: 高层级的 LLM 循环,例如 planresearch,是以插件形式实现的。
  • 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 义务的情况下创建闭源扩展。

Sources