JUCE库创始人发布开源编码Agent Juggler,提供可视化界面自动化代码编写任务;HN获280分关注,体现专业开发者对AI编程工具的认可。
是的,这又是一个 AI 编程 Agent。这个行业显然还缺这么一个。
如果说 Juggler 有什么独特之处,那就是它面向那些希望更深入掌控 LLM 如何处理自己代码库的人。它提供了一个可视化工作台:可以检查工具调用、创建分支线程、编辑上下文。
网站上还有更多介绍:https://juggler.studio
工具调用、项目属性和嵌套子线程,都以类似 Finder 的 Miller 分栏视图呈现。
下面是 TL;DR:
它是一个真正的 GUI,不是控制台应用。它的核心就是以图形化方式进行可视导航、检查和控制。
Session 是一棵树,而不是一条让人无休止向下滚动的信息流。它是一个 Yjs 文档,而不是一份聊天记录。你可以创建子线程、逐层深入、回退、比较和编辑。
Session 是持久且有状态的。由于 Session 本质上是磁盘上的文档,你可以退出或重新启动应用,所有对话都会从离开时的位置准确恢复。甚至连 Agent 正在等待用户批准这样的状态也会保留下来。你可以重启、重新连接,批准对话框仍会在那里等着你。
一切都可以检查。工具调用、批准操作、线程结构、项目属性、原始上下文——全部采用类似 Finder 的 Miller 分栏布局,方便快速导航。
从上到下,一切皆插件。上下文项目、slash command、LLM 循环策略及其 UI,都是 JavaScript 扩展,你可以检查、fork 或替换它们。
它可以在本地运行、远程运行,也可以同时在两者上运行。你可以通过原生桌面应用和浏览器,使用相同的 UI 访问同一个 Session。多个客户端可以连接到同一个 Session。
它支持常见的各种模型:Claude Code(通过 CLI 或 API)、OpenAI(codex plan 或 API)、Gemini、Ollama、OpenRouter、Z.AI、Deepseek 等。
你可以从 Releases 页面或通过 juggler.studio 下载构建版本。
每个下载包都包含两个相互配套的组件:
Juggler app——原生桌面应用。使用方式和你预期的一样。
juggler——无界面的命令行服务器。你可以从终端运行它,用于长期运行、远程访问或网络可访问的 Session。它没有自己的窗口,但你可以在终端中输入 w 打开桌面应用,也可以使用它输出的浏览器 URL。
桌面应用和浏览器标签页——无论位于本地还是远程计算机上——都可以作为客户端,查看同一个服务器 Session。
macOS——下载 .dmg,打开后将 Juggler 拖入 Applications,然后启动。应用及其服务器捆绑在一起,因此服务器会自动启动。首次打开时,macOS Gatekeeper 可能会拦截下载的应用:右键单击(或按住 Control 单击)应用 → Open → Open,或者前往 System Settings → Privacy & Security → Open Anyway。首次启动之后,就可以正常打开了。
Windows——下载 Juggler-<version>-setup.exe 并运行。安装程序会把桌面应用和匹配的 juggler.exe 命令行服务器一起安装到同一个目录中,还可以将 juggler 添加到你的 PATH,因此两者的版本永远不会出现偏差。
Linux——下载 juggler 服务器二进制文件并从终端运行,然后使用浏览器或桌面应用连接。对于没有显示设备的服务器、容器和 CI 机器,请参阅 docs/headless-linux.md。
桌面应用和服务器始终作为一个整体发布和安装——详见 docs/distribution.md。
要启动无界面 Session,只需运行:
juggler # prints everything you need to connect from a browser
默认情况下,服务器会打开 Web UI,并输出它的 URL 和二维码,方便连接。
服务器默认只监听 localhost——本机以外的任何设备都无法访问它。要允许网络中的其他设备连接,请在终端中按 p,或使用 --public 启动。LAN 访问没有密码:任何能够访问该地址的人都可以操控 Agent,因此只能在你信任的网络中启用它。
这个代码仓库本身没有内置从 LAN 之外访问的能力:基于此处源码构建的版本仅支持本地和 LAN 访问。来自 juggler.studio 的官方 Juggler 二进制文件还额外提供 WAN 访问模式,可以通过互联网连接你的服务器。有关本仓库未包含的组件,请参阅 LICENSING.md。
大多数 Agent 只提供一份线性聊天记录,运气好的话,你还能将它回退。
Juggler 给你的是一棵树。任何节点都可以分支为子线程,子线程还可以继续分支。你可以直接导航、检查和编辑整个结构。
UI 使用 Miller 分栏:根节点位于左侧,选中的项目会向右展开,显示其属性和子节点。(如果你用过 Finder 的分栏视图,就已经理解了它的基本交互方式。)
由于整个 Session 都是一个文档,而服务器是一台负责修改该文档的状态机,因此关闭应用时不会丢失任何内容。退出、重新启动、连接中断,甚至第二天再回来——它都会准确恢复到原来的状态。
关键在于,这也包括正在等待你处理的工作流。当 Agent 暂停下来等待用户干预——例如运行命令、应用编辑或执行下一步——这种暂停状态本身也是文档的一部分。你可以关闭一切,之后在同一台或另一台计算机上重新打开,Agent 仍会停留在同一个决策点,只要你说“是”,它就能立即继续。
核心应用负责管理文档和编排流程。构成文档的几乎所有对象,都由 JavaScript 扩展定义:
上下文项目——对话中的每一种项目类型(read-file、replace-text、bash 等),都可以控制它如何与 LLM 通信,以及它如何显示在 UI 中。
策略——plan、research 等高层 LLM 循环,或者任何你突发奇想创造出来的策略,同样都是插件。
命令——/clear 和 /compact 等 slash command,也全都只是用于操作 Session 文档的插件。
并非所有 LLM 工作流都愿意作为一个无界面的 Python 脚本,偷偷摸摸地躲在终端里运行。如果一种编排思路需要自己的 UI、控件或可视化能力,Juggler 就是承载它的平台。
一切皆插件——甚至 read、write 和 bash 工具也由扩展定义,你可以检查、fork 或替换它们。
Juggler 看起来像一个原生桌面应用,但它的底层其实是一台本地 Web 服务器,用来提供实时协作式 Session。桌面应用只是其中一个客户端,浏览器标签页可以是另一个客户端,另一台计算机也可以是另一个客户端。
这意味着,你可以在代码所在的位置运行服务器——本地工作站、开发机或服务器集群——然后从任何方便的位置连接视图。
一个 Session,多个客户端——桌面应用和浏览器视图始终保持同步。
无论是大屏幕还是口袋大小的设备,访问的都是同一个实时 Session——既可以通过桌面应用,也可以通过手机上的远程浏览器。
Juggler 可以连接常见的模型服务:Claude Code(通过 CLI 或 API)、OpenAI(codex plan 或 API)、Gemini、Ollama、OpenRouter、Z.AI、Deepseek 等。添加更多提供商很容易,所以如果缺少你使用的提供商,可以请你那位友善的“邻家 LLM”提交一个 PR,把它加进来。
关于 Juggler 如何确保每个请求都位于模型的上下文窗口之内——包括限制、准入机制和自动历史恢复——请参阅 docs/context-window.md。
扩展系统的设计理念是,大多数人根本不需要亲自构建应用。如果你确实需要,请参阅 CONTRIBUTING.md 了解完整配置过程。简要步骤如下:
git clone --recurse-submodules https://github.com/juggler-ai/juggler.git
cd juggler && make build
如果你克隆时没有使用 --recurse-submodules,可以通过以下命令拉取子模块:
git submodule update --init --recursive
在任何宿主平台上,都可以使用 make build-windows 交叉编译 Windows 二进制文件;Linux 桌面应用则必须在 Linux 上原生构建。如果想为采用 x86/amd64 架构的 Intel Mac 构建,也可以在本地完成。
Juggler 是一个没有多余负担的简单原生应用。后端使用 Go,并通过 Wails 管理窗口。UI 由 HTML/JS 编写,通过 Go 后端提供。Session 文档使用 Yjs 存储和同步,扩展则使用 JavaScript 编写。它没有使用 Electron。
前端使用经过类型检查的 JavaScript,而不是 TypeScript:类型定义写在 JSDoc 中,并通过 CI 中严格的静态 lint 检查强制执行。从源代码到最终发布内容之间不存在构建步骤。
有关环境配置、测试命令和项目约定,请参阅 CONTRIBUTING.md。如果发现安全问题,请使用 SECURITY.md 中说明的私密渠道,而不要提交到公开的 issue tracker。
Juggler 的应用代码采用 GNU Affero General Public License v3.0 或更高版本授权。扩展 SDK(web/sdk/)和捆绑扩展(web/extensions/)采用 Apache-2.0 授权,因此你可以构建扩展——包括闭源扩展——而无需承担 copyleft 义务。完整的授权划分请参阅 LICENSING.md。
对于采用 AGPL 的部分,你可以自由使用、修改和再分发——但是,你分发或作为服务托管的任何修改版本,也必须根据 AGPLv3 发布。如果你希望基于它开发闭源产品,请联系我讨论商业授权。