juggler-ai/juggler

GitHub: juggler-ai/juggler

Juggler 是一款图形化 AI 编程 Agent 工作台,通过树形会话、Miller 列视图和全插件化架构,为开发者提供对 LLM 代码操作的深度可视化控制与扩展能力。

Stars: 468 | Forks: 24

# Juggler 没错,这又是一个 AI 编程 agent。整个行业绝对还需要再多一个。 如果 Juggler 有什么特别之处的话,那就是它专为那些希望更深入地控制 LLM 对其代码库执行操作的人而设计。它为你提供了一个可视化的工作台:可检查的 tool calls、分支对话线程、可编辑的 context。 网站上有更多介绍:[https://juggler.studio](https://juggler.studio)

Juggler's Miller-column workbench: tool calls, item properties and nested sub-threads

Tool calls, item properties and nested sub-threads laid out in a Finder-style Miller column view.

以下是 TL;DR(太长不看): - **这是一个真正的 GUI。** 这不是一个控制台应用程序。它完全专注于图形化的可视化导航、检查和控制。 - **会话是一棵树,而不是无尽的滚动。** 它是一个 Yjs 文档,而不是一份记录。你可以创建子线程、深入探索、回溯、比较和编辑。 - **所有重要内容都是可见的。** tool calls、批准操作、线程结构、项目属性、原始 context —— 它们都以 Finder 风格的 Miller 列布局展示,而不是被埋没在可折叠的聊天记录中。 - **一切皆为插件。** context item、斜杠命令、LLM 循环策略及其 UI 都是 JavaScript 扩展,你可以检查、fork 或替换它们。 - **它可以在本地运行、远程运行,或两者同时进行。** 你可以在原生桌面应用程序和/或浏览器中,使用相同的会话和相同的 UI。多个客户端可以连接到同一个会话。 - **它支持与常见的模型库通信。** Claude Code(通过 CLI 或 API)、OpenAI(codex 计划或 API)、Gemini、Ollama、OpenRouter、Z.AI、Deepseek 等。 ## 新手入门 从 [Releases](https://github.com/juggler-ai/juggler/releases) 页面或通过 [juggler.studio](https://juggler.studio) 下载构建版本。 每次下载都包含相同的两个核心组件: - **Juggler 应用程序** —— 原生桌面应用程序。正如你所期望的那样工作。 - **`juggler`** —— 无头命令行服务器。在终端中运行它以进行长期、远程或可通过网络访问的会话。它没有自己的窗口,但你可以在其终端中输入 `w` 来打开桌面应用程序,或者使用它打印出的浏览器 URL。 桌面应用程序、浏览器标签页(在本地或远程机器上)都可以作为客户端,查看同一个服务器会话。 #### 安装 - **macOS** —— 下载 `.dmg`,打开它并将 Juggler 拖动到“应用程序”中,然后启动它。该应用程序及其服务器捆绑在一起,因此服务器会自动启动。首次打开时,macOS Gatekeeper 可能会阻止下载:右键点击(或 Control 键点击)该应用程序 → **打开** → **打开**,或者前往 **系统设置 → 隐私与安全性 → 仍要打开**。首次启动后,它就会正常打开了。 - **Windows** —— 下载 `Juggler--setup.exe` 并运行它。它将桌面应用程序和对应的 `juggler.exe` 命令行服务器安装在同一个目录中(并且可以将 `juggler` 添加到你的 PATH 中),这样两者就不会产生版本偏差。 - **Linux** —— 下载 `juggler` 服务器二进制文件并在终端中运行它,然后使用浏览器或桌面应用程序进行连接。有关没有显示器的服务器、容器和 CI 机器,请参阅 [`docs/headless-linux.md`](docs/headless-linux.md)。 桌面应用程序和服务器始终作为一个整体发布和安装 —— 参见 [`docs/distribution.md`](docs/distribution.md)。 #### 直接运行服务器 要进行无头会话,只需运行: ``` juggler # prints everything you need to connect from a browser ``` 默认情况下,服务器会打开一个 Web UI,并打印其 URL 和二维码以便于连接。 服务器默认情况下仅限 localhost 访问 —— 你的机器之外无法访问它。要让网络上的其他设备连接,请在终端中按 `p`(或使用 `--public` 启动)。LAN 访问没有密码:任何能够访问该地址的人都可以控制 agent,因此请仅在你信任的网络中启用它。 LAN 之外的网络访问不包含在此代码库中:从此源代码构建的版本仅限本地 + LAN 访问。来自 [juggler.studio](https://juggler.studio) 的官方 Juggler 二进制文件额外包含了 WAN 访问模式,用于通过互联网访问你的服务器(有关此代码库中未包含的组件,请参阅 [LICENSING.md](LICENSING.md))。 ## 它有什么不同之处? #### 你的对话是一棵可编辑的树,而不是聊天记录 大多数 agent 只为你提供单一的线性记录,如果幸运的话,你可以倒回它。 Juggler 为你提供了一棵**树**。任何节点都可以分支为子线程。子线程也可以再次分支。你可以直接导航、检查和编辑其结构。 UI 使用 **Miller 列**:根节点在左侧,选中的项目向右展开为其属性和子项。(如果你用过 Finder 的列视图,你就已经理解了这种基本操作)。 #### 一切皆为扩展 核心应用程序负责管理文档和编排。构成文档的几乎所有对象都是由 JavaScript 扩展定义的: - **Context item** —— 对话中的每一种项目类型(`read-file`、`replace-text`、`bash` 等)都控制着它如何与 LLM 通信以及如何在 UI 中显示。 - **策略** —— 高级 LLM 循环(例如 `plan`、`research`,或者你自己异想天开的发明)也是插件。 - **命令** —— 像 `/clear` 和 `/compact` 这样的斜杠命令都只是用于操作会话文档的插件。 并非所有的 LLM 工作流都希望作为潜伏在终端中的无头 Python 脚本存在。如果一个编排想法需要自己的 UI、控件或可视化,Juggler 就是一个为之而生的平台。

Juggler's LLM-facing tools defined as extensions

Everything's a plugin — even the read/write/bash tools are defined in extensions you can inspect, fork, or replace.

#### 具有多客户端架构的桌面应用程序 Juggler 看起来像一个原生桌面应用程序,但在其底层是一个提供实时协作会话的本地 Web 服务器。该应用程序只是一个客户端。浏览器标签页可以是另一个客户端。另一台机器也可以是另一个客户端。 这意味着你可以在代码实际存在的地方运行服务器 —— 本地工作站、开发机、服务器集群 —— 并从任何方便的地方附加视图。

One Juggler session with multiple synced clients

One session, many clients — the desktop app and browser views stay in sync.

Juggler on a large desktop screen Juggler in a phone browser

Big screen or pocket-sized: the same live session, whether it's the desktop app or a remote browser on your phone.

#### 模型支持 Juggler 连接了常见的模型库:Claude Code(通过 CLI 或 API)、OpenAI(codex 计划或 API)、Gemini、Ollama、OpenRouter、Z.AI、Deepseek 等。添加更多提供商很容易,所以如果你的提供商缺失,可以请你附近友好的 LLM 以 PR 的形式将其添加进来。 ## 从源代码构建 扩展系统的理念是,大多数人实际上不需要构建该应用程序。如果你需要构建,请参阅 [`CONTRIBUTING.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 桌面应用程序必须在原生环境中构建。 ## 技术栈 Juggler 是一个没有任何累赘的简单原生应用程序。后端使用 Go 语言,使用 Wails 进行窗口管理。UI 是由 Go 后端提供服务的 HTML/JS。会话文档使用 Yjs 进行存储和同步。扩展是 JavaScript。它不使用 electron。 前端是经过类型检查的 JavaScript 而不是 TypeScript:类型存在于 JSDoc 中,并在 CI 中通过严格的静态 linting 强制执行。在源代码和发布版本之间没有任何构建步骤。 ## 贡献 请参阅 [`CONTRIBUTING.md`](CONTRIBUTING.md) 了解设置、测试命令和项目约定。对于安全问题,请使用 [`SECURITY.md`](SECURITY.md) 中描述的私密渠道,而不是公开的 issue 跟踪器。 ## 许可证 Juggler 的应用程序代码根据 [GNU Affero General Public License v3.0 或更高版本](LICENSE) 获得许可。Extension SDK (`web/sdk/`) 和捆绑的扩展 (`web/extensions/`) 根据 [Apache-2.0](web/sdk/LICENSE) 获得许可,因此你可以构建扩展 —— 包括闭源扩展 —— 而无需承担 copyleft 义务。有关完整的说明,请参阅 [`LICENSING.md`](LICENSING.md)。 对于 AGPL 部分,你可以自由使用、修改和重新分发 —— 但是你分发或作为服务托管的任何修改版本,也必须在 AGPLv3 下发布。如果你想用它做一些闭源的事情,请联系我洽谈商业许可。
标签:AI编程助手, DLL 劫持, 协同编辑, 可视化工作台, 多模态安全, 大语言模型, 数据可视化, 日志审计, 桌面应用, 自定义脚本