JUCE作者推出开源GUI编码代理Juggler
速览
Juggler是一款开源GUI编码代理,由JUCE(著名音频应用框架)的创建者开发。它旨在通过图形界面辅助开发者编写代码,降低编程门槛。该项目展示了将AI代理与GUI结合的新思路,对开发者工具生态有积极意义。
AI 深度解读
背景
在AI编码助手层出不穷的当下,大多数工具都围绕终端或聊天界面展开,用户与LLM的交互被限制在单一线性的对话流中。JUCE(一个广为使用的C++音频应用框架)的创建者Julian Storer注意到了这一痛点,推出了Juggler——一款开源GUI编码代理。它不只是一个“又一款AI编码助手”,而是为那些希望更直接地控制LLM对其代码库所做操作的人设计的可视化工作台。
核心内容
Juggler 是一款真正的图形用户界面应用,而非控制台程序。它围绕一个核心概念构建:会话(session)是一棵树,而不是一条单向滚动的转录文本。每个会话以Yjs文档的形式存储,用户可以创建子线程、深入探索、回溯、对比以及编辑。所有重要信息——工具调用、审批、线程结构、项目属性、原始上下文——都采用类似Finder的Miller列(Miller columns)布局展示,而不是隐藏在可折叠的聊天组件中。
插件机制贯穿整个架构。上下文项(如read-file、replace-text、bash等)、斜杠命令(如/clear和/compact)、LLM循环策略(如plan、research)及其UI都是JavaScript扩展,用户可以查看、分支或替换。Juggler支持本地运行、远程运行或两者同时运行:同一个会话可以在原生桌面应用和/或浏览器中使用,多个客户端可以连接到同一个会话。
Juggler可与主流模型和LLM服务对接:Claude Code(通过CLI或API)、OpenAI(codex计划或API)、Gemini、Ollama、OpenRouter、Z.AI、Deepseek等。添加更多提供商也很容易。
下载与安装:从Releases页面或juggler.studio下载。每个下载包含两部分:Juggler桌面应用(原生app)和juggler命令行服务器(headless)。桌面应用和服务器总是打包在一起,确保版本一致。
- macOS:下载
.dmg,拖入Applications,首次启动可能被Gatekeeper拦截,需右键点击→打开。 - Windows:下载
Juggler-<version>-setup.exe并运行,同时安装桌面应用和juggler.exe命令行服务器,可添加到PATH。 - Linux:下载
juggler服务器二进制文件,从终端运行,然后用浏览器或桌面应用连接。
默认情况下,服务器仅限localhost(--public参数可让局域网内设备连接)。局域网访问无密码,仅应在受信任的网络开启。跨广域网访问功能仅包含在官方二进制构建中(参考LICENSING.md)。源代码构建仅支持本地+局域网。
核心交互:会话是一棵树。任何节点都可以分支成子线程,子线程可继续分支。用户可以直接导航、检查和编辑结构。UI采用Miller列:左侧是根,选中项向右展开属性和子项。
扩展系统:几乎所有组成文档的对象都由JavaScript扩展定义:
- 上下文项:定义每个项如何与LLM交互以及如何在UI中显示。
- 策略:高级LLM循环,如
plan、research,以及用户自创的循环。 - 命令:斜杠命令如
/clear、/compact,都是操作会话文档的插件。
Juggler底层是一个本地Web服务器,提供实时协作会话。桌面应用只是客户端之一,浏览器标签页、其他机器上的客户端都可以连接同一个会话。这意味着可以在代码所在的地方运行服务器(本地工作站、开发机、服务器集群),并从任何方便的地方附加视图。
技术栈:Juggler是一个简单的原生应用,后端使用Go,通过Wails进行窗口管理。UI是HTML/JS,由Go后端提供。会话文档使用Yjs存储和同步。扩展用JavaScript编写。不使用Electron。前端使用类型检查的JavaScript(类型在JSDoc中定义,CI中通过严格静态linting强制检查),源代码和发布之间没有构建步骤。
构建与贡献:克隆仓库需使用--recurse-submodules,然后运行make build。Windows二进制文件可从任何主机交叉编译(make build-windows),Linux桌面应用必须原生构建。详见CONTRIBUTING.md。
许可:Juggler应用代码采用AGPL v3.0或更高版本。扩展SDK(web/sdk/)和捆绑扩展(web/extensions/)采用Apache-2.0,允许构建闭源扩展。对于AGPL部分,您可以自由使用、修改和分发,但修改版如果作为服务分发或托管,也必须以AGPLv3发布。闭源使用需联系商业许可。
关键要点
- 图形化工作台:不同于大多数终端或聊天式编码代理,Juggler提供一个可视化GUI,支持图形化的导航、检查和控制。
- 树状会话结构:会话不是线性转录,而是可分支的树。用户可以随时创建子线程、回溯、对比和编辑,极大提升了复杂任务的迭代能力。
- Miller列布局:所有工具调用、审批、线程属性、原始上下文都以Finder列视图展示,信息层级清晰,无需层层展开聊天记录。
- 全插件架构:上下文项、斜杠命令、LLM循环策略及其UI都是JavaScript扩展。用户可以检查、分支或替换任何部分,定制化程度极高。
- 多模式运行:支持本地桌面应用、浏览器、局域网远程连接,同一会话可被多个客户端同时查看和操作。
- 模型兼容性好:与Claude Code、OpenAI、Gemini、Ollama、OpenRouter、Z.AI、Deepseek等主流模型和API服务无缝对接。
- 安全与网络控制:默认仅监听localhost;
--public开启局域网访问(无密码);广域网访问需使用官方构建。AGPL许可,扩展SDK为Apache 2.0,鼓励开源社区贡献。
意义与影响
Juggler的诞生标志着AI编码代理从“终端黑盒”向“可视化可编程工作台”的转变。它解决了当前编码代理的两大痛点:缺乏透明性和缺乏结构化交互。大多数现有工具只提供一个聊天日志,用户无法直观地看到LLM内部调用了哪些工具、上下文如何变化、分支探索的可能性。Juggler通过树状会话和Miller列设计,让用户能够像浏览文件系统一样浏览AI的思考过程,并随时介入、修改和分支。
其次,Juggler的插件系统使其成为一个平台而非固定工具。开发者可以编写自定义策略、命令和UI组件,甚至替换整个LLM循环逻辑。这种架构与JUCE的组件化设计一脉相承,极有可能吸引那些希望在AI编码领域拥有更高控制权的开发者。
对于开源社区而言,AGPL+Apache双许可策略兼顾了保护开源核心与鼓励扩展生态。商业闭源用户可以选择商业许可,而社区贡献者则可在Apache 2.0下自由开发扩展。
从更广阔的视角看,Juggler是“人机协作”理念的具体实践——它不试图取代开发者,而是提供一套可视化的指挥和控制界面,让开发者始终拥有对代码库的最终决定权。在编码代理同质化严重的市场中,这种强调可观察性、可干预性和可定制性的工具,有望推动行业从“黑盒生成”走向“透明协作”。
